ItEr35S17CUObtencionRequisitosEnProxectoPlanificacionItEr34S17 : When it changes the type of an hours group, the indirect inherited criterion requirements have to be updated to be

This commit is contained in:
Susana Montes Pedreira 2009-11-17 12:13:22 +01:00 committed by Javier Moran Rua
parent 687bd43327
commit da8480fe3e
12 changed files with 124 additions and 27 deletions

View file

@ -44,7 +44,7 @@ public class HoursGroup extends BaseEntity implements Cloneable {
private String name;
private ResourceEnum resourceType;
private ResourceEnum resourceType = ResourceEnum.WORKER;
@NotNull
private Integer workingHours = 0;
@ -247,8 +247,9 @@ public class HoursGroup extends BaseEntity implements Cloneable {
CriterionRequirement newRequirement) {
Criterion criterion = newRequirement.getCriterion();
for(CriterionRequirement requirement : getCriterionRequirements()){
if (requirement.getCriterion().equals(criterion))
if (requirement.getCriterion().equals(criterion)) {
return true;
}
}
return false;
}

View file

@ -20,6 +20,8 @@
package org.navalplanner.business.orders.entities;
import static org.navalplanner.business.i18n.I18nHelper._;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collection;
@ -45,6 +47,7 @@ public class OrderLine extends OrderElement {
OrderLine result = create();
HoursGroup hoursGroup = HoursGroup.create(result);
result.addHoursGroup(hoursGroup);
hoursGroup.setName(_("New hours group 0"));
hoursGroup.setFixedPercentage(false);
hoursGroup.setPercentage(new BigDecimal(1));
hoursGroup.setWorkingHours(hours);

View file

@ -59,6 +59,7 @@ import org.navalplanner.business.requirements.entities.CriterionRequirement;
import org.navalplanner.business.requirements.entities.DirectCriterionRequirement;
import org.navalplanner.business.resources.entities.Criterion;
import org.navalplanner.business.resources.entities.CriterionType;
import org.navalplanner.business.resources.entities.ResourceEnum;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.transaction.annotation.Transactional;
@ -190,6 +191,7 @@ public class OrderElementTest {
fail("It not should throw an exception");
}
CriterionType type = CriterionType.create("", "");
type.setResource(ResourceEnum.WORKER);
Criterion criterion = Criterion.create(type);
CriterionRequirement requirement = DirectCriterionRequirement
.create(criterion);

View file

@ -117,6 +117,30 @@ getCriterionRequirementWrappers();
return assignedCriterionRequirementToOrderElementModel.getCriterionWithItsTypes();
}
public List<CriterionWithItsType> getCriterionWithItsTypesWorker() {
List<CriterionWithItsType> result = new ArrayList<CriterionWithItsType>();
for (CriterionWithItsType criterionAndType : assignedCriterionRequirementToOrderElementModel
.getCriterionWithItsTypes()) {
if (!criterionAndType.getCriterion().getType().getResource()
.equals(ResourceEnum.MACHINE)) {
result.add(criterionAndType);
}
}
return result;
}
public List<CriterionWithItsType> getCriterionWithItsTypesMachine() {
List<CriterionWithItsType> result = new ArrayList<CriterionWithItsType>();
for (CriterionWithItsType criterionAndType : assignedCriterionRequirementToOrderElementModel
.getCriterionWithItsTypes()) {
if (!criterionAndType.getCriterion().getType().getResource()
.equals(ResourceEnum.WORKER)) {
result.add(criterionAndType);
}
}
return result;
}
public List<ResourceEnum> getResourceTypes() {
return listResourceTypes;
}
@ -166,16 +190,20 @@ setValidCriterionRequirementWrapper(requirement, true);
}
}
public void selectResorceType(Combobox combobox)
public void selectResourceType(Combobox combobox)
throws InterruptedException {
HoursGroupWrapper hoursGroupWrapper = (HoursGroupWrapper) ((Row) combobox
.getParent()).getValue();
int result = Messagebox
int result = 2;
try {
result = Messagebox
.show(
_("You are sure of change the resource type. You will lose the criterions with different resource type."),
"Question", Messagebox.OK | Messagebox.CANCEL,
"Question", Messagebox.OK | Messagebox.CANCEL,
Messagebox.QUESTION);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (result == 1) {
ResourceEnum resource = (ResourceEnum) combobox.getSelectedItem()

View file

@ -113,9 +113,8 @@ public class AssignedCriterionRequirementToOrderElementModel implements
criterionRequirementWrappers = new ArrayList<CriterionRequirementWrapper>();
for(CriterionRequirement requirement :
orderElement.getCriterionRequirements()){
CriterionRequirementWrapper Wrapper =
new CriterionRequirementWrapper(
requirement, false);
CriterionRequirementWrapper Wrapper = new CriterionRequirementWrapper(
requirement, null, false);
criterionRequirementWrappers.add(Wrapper);
}
}
@ -159,16 +158,17 @@ public class AssignedCriterionRequirementToOrderElementModel implements
@Transactional(readOnly = true)
public void assignCriterionRequirementWrapper() {
if((orderModel != null) && (orderElement != null)){
CriterionRequirementWrapper newRequirementWrapper = createCriterionRequirementWreapper();
CriterionRequirementWrapper newRequirementWrapper = createCriterionRequirementWreapper(null);
criterionRequirementWrappers.add(newRequirementWrapper);
}
}
private CriterionRequirementWrapper createCriterionRequirementWreapper() {
private CriterionRequirementWrapper createCriterionRequirementWreapper(
HoursGroupWrapper hoursGroupWrapper) {
CriterionRequirement newRequirement = DirectCriterionRequirement
.create();
CriterionRequirementWrapper newRequirementWrapper = new CriterionRequirementWrapper(
newRequirement, true);
newRequirement, hoursGroupWrapper, true);
return newRequirementWrapper;
}
@ -350,7 +350,7 @@ public class AssignedCriterionRequirementToOrderElementModel implements
public void addCriterionToHoursGroupWrapper(
HoursGroupWrapper hoursGroupWrapper) {
if ((orderModel != null) && (orderElement != null)) {
CriterionRequirementWrapper requirement = createCriterionRequirementWreapper();
CriterionRequirementWrapper requirement = createCriterionRequirementWreapper(hoursGroupWrapper);
hoursGroupWrapper.assignCriterionRequirementWrapper(requirement);
}
}
@ -371,9 +371,16 @@ public class AssignedCriterionRequirementToOrderElementModel implements
private void selectCriterionToDirectRequirementWrapper(
HoursGroupWrapper hoursGroupWrapper,
CriterionRequirementWrapper direct,
CriterionWithItsType criterionAndType) {
direct.setCriterionWithItsType(criterionAndType);
hoursGroupWrapper.selectCriterionToDirectRequirementWrapper(direct);
CriterionWithItsType newCriterionAndType) {
CriterionWithItsType oldCriterionAndType = direct
.getCriterionWithItsType();
if ((oldCriterionAndType == null)
|| (!oldCriterionAndType.equals(newCriterionAndType))) {
hoursGroupWrapper.removeDirectCriterionRequirement(direct);
direct.setCriterionWithItsType(newCriterionAndType);
hoursGroupWrapper.addDirectCriterionToHoursGroup(direct);
}
}
public CriterionRequirementWrapper addExceptionToHoursGroupWrapper(

View file

@ -13,6 +13,7 @@ import org.navalplanner.business.requirements.entities.IndirectCriterionRequirem
import org.navalplanner.business.resources.entities.Criterion;
import org.navalplanner.business.resources.entities.CriterionType;
import org.navalplanner.business.resources.entities.CriterionWithItsType;
import org.navalplanner.business.resources.entities.ResourceEnum;
/**
* DTO represents the handled data in the form of assigning criterion requirement.
@ -39,15 +40,20 @@ public class CriterionRequirementWrapper implements INewObject {
private CriterionWithItsType criterionWithItsType;
private HoursGroupWrapper hoursGroupWrapper;
public CriterionRequirementWrapper(String type) {
this.newObject = true;
this.type = type;
}
public CriterionRequirementWrapper(CriterionRequirement criterionRequirement,
public CriterionRequirementWrapper(
CriterionRequirement criterionRequirement,
HoursGroupWrapper hoursGroupWrapper,
boolean isNewObject) {
this.criterionAndType = "";
this.criterionRequirement = criterionRequirement;
this.hoursGroupWrapper = hoursGroupWrapper;
this.initType(criterionRequirement);
this.initValid(criterionRequirement);
this.setNewObject(isNewObject);
@ -133,6 +139,23 @@ public class CriterionRequirementWrapper implements INewObject {
return (type.equals(DIRECT)) ? true : false;
}
public ResourceEnum getResourceTypeHoursGroup() {
if (hoursGroupWrapper != null) {
return hoursGroupWrapper.getResourceType();
}
return null;
}
public boolean isNewDirectAndItsHoursGroupIsWorker() {
return ((isNewDirect()) && (getResourceTypeHoursGroup() != null) && (getResourceTypeHoursGroup()
.equals(ResourceEnum.WORKER)));
}
public boolean isNewDirectAndItsHoursGroupIsMachine() {
return ((isNewDirect()) && (getResourceTypeHoursGroup() != null) && (getResourceTypeHoursGroup()
.equals(ResourceEnum.MACHINE)));
}
public boolean isIndirectValid(){
return (!isDirect()) && (isValid());
}

View file

@ -65,14 +65,14 @@ public class HoursGroupWrapper implements INewObject {
for (CriterionRequirement requirement : hoursGroup
.getDirectCriterionRequirement()) {
CriterionRequirementWrapper wrapper = new CriterionRequirementWrapper(
requirement, false);
requirement, this, false);
directRequirementWrappers.add(wrapper);
}
exceptionRequirementWrappers = new ArrayList<CriterionRequirementWrapper>();
for (CriterionRequirement requirement : getInvalidIndirectCriterionRequirement()) {
CriterionRequirementWrapper wrapper = new CriterionRequirementWrapper(
requirement, false);
requirement, this, false);
exceptionRequirementWrappers.add(wrapper);
}
}
@ -193,7 +193,7 @@ public class HoursGroupWrapper implements INewObject {
.getCriterionRequirement());
}
public void selectCriterionToDirectRequirementWrapper(
public void addDirectCriterionToHoursGroup(
CriterionRequirementWrapper requirementWrapper) {
hoursGroup.addCriterionRequirement(requirementWrapper
.getCriterionRequirement());
@ -216,12 +216,17 @@ public class HoursGroupWrapper implements INewObject {
public void removeDirectCriterionRequirementWrapper(
CriterionRequirementWrapper directWrapper) {
removeDirectCriterionRequirement(directWrapper);
getDirectRequirementWrappers().remove(directWrapper);
}
public void removeDirectCriterionRequirement(
CriterionRequirementWrapper directWrapper) {
if (directWrapper.getCriterionWithItsType() != null) {
CriterionRequirement direct = directWrapper
.getCriterionRequirement();
hoursGroup.removeCriterionRequirement(direct);
}
getDirectRequirementWrappers().remove(directWrapper);
}
public void removeExceptionCriterionRequirementWrapper(
@ -246,7 +251,8 @@ public class HoursGroupWrapper implements INewObject {
for (CriterionRequirement requirement : getInvalidIndirectCriterionRequirement()) {
CriterionRequirementWrapper exception = findRequirementWrapperByRequirement(requirement);
if (exception == null) {
exception = new CriterionRequirementWrapper(requirement, false);
exception = new CriterionRequirementWrapper(requirement, this,
false);
exceptionRequirementWrappers.add(exception);
}
}

View file

@ -229,6 +229,12 @@ public class OrderCRUDController extends GenericForwardComposer {
showWindow(listWindow);
}
public void reloadHoursGroupOrder() {
assignedCriterionRequirementController
.openWindow(getOrderElementModel());
Util.reloadBindings(editWindow);
}
private void showWindow(Window window) {
getVisibility().showOnly(window);
Util.reloadBindings(window);

View file

@ -33,7 +33,8 @@
<tab label="${i18n:_('Assigned hours')}" />
<tab id="tabAdvances" label="${i18n:_('Advances')}" />
<tab label="${i18n:_('Label')}" />
<tab id="tabRequirements" label="${i18n:_('Criterion Requirement')}"/>
<tab id="tabRequirements" label="${i18n:_('Criterion Requirement')}"
onClick = "controller.reloadHoursGroupOrder();"/>
</tabs>
<tabpanels>
<tabpanel>

View file

@ -31,11 +31,30 @@
<row self="@{each='criterionRequirementWrapper'}" value="@{criterionRequirementWrapper}">
<hbox>
<bandbox width="500px"
visible ="@{criterionRequirementWrapper.newDirect}"
visible ="@{criterionRequirementWrapper.newDirectAndItsHoursGroupIsWorker}"
value = "@{criterionRequirementWrapper.criterionAndType}">
<bandpopup>
<listbox width="500px" height="150px" fixedLayout="true"
model="@{assignedCriterionRequirementController.criterionWithItsTypes}"
model="@{assignedCriterionRequirementController.criterionWithItsTypesWorker}"
onSelect="assignedCriterionRequirementController.selectCriterionToHoursGroup(self.selectedItem,
self.parent.parent,self.parent.parent.parent.parent.value);">
<listhead>
<listheader label="Type" />
<listheader label="Criterion" />
</listhead>
<listitem self="@{each='criterionWithItsType'}" value="@{criterionWithItsType}">
<listcell label="@{criterionWithItsType.type.name}" />
<listcell label="@{criterionWithItsType.nameHierarchy}" />
</listitem>
</listbox>
</bandpopup>
</bandbox>
<bandbox width="500px"
visible ="@{criterionRequirementWrapper.newDirectAndItsHoursGroupIsMachine}"
value = "@{criterionRequirementWrapper.criterionAndType}">
<bandpopup>
<listbox width="500px" height="150px" fixedLayout="true"
model="@{assignedCriterionRequirementController.criterionWithItsTypesMachine}"
onSelect="assignedCriterionRequirementController.selectCriterionToHoursGroup(self.selectedItem,
self.parent.parent,self.parent.parent.parent.parent.value);">
<listhead>

View file

@ -81,7 +81,6 @@
label = "${i18n:_('Invalidate')}"
onClick = "assignedCriterionRequirementController.invalidate(self.parent.parent.value);">
</button>
</hbox>
</row>
</rows>
@ -141,7 +140,7 @@
readonly = "@{assignedCriterionRequirementController.readOnly}"/>
<combobox id="comboboxTypeHoursGroup" width="80px"
value = "@{hoursGroupWrapper.resourceType}"
onSelect = "assignedCriterionRequirementController.selectResorceType(self);"
onSelect = "assignedCriterionRequirementController.selectResourceType(self);"
model = "@{assignedCriterionRequirementController.resourceTypes}"
disabled = "@{assignedCriterionRequirementController.readOnly}">
</combobox>

View file

@ -67,6 +67,7 @@ import org.navalplanner.business.requirements.entities.DirectCriterionRequiremen
import org.navalplanner.business.resources.daos.ICriterionTypeDAO;
import org.navalplanner.business.resources.entities.Criterion;
import org.navalplanner.business.resources.entities.CriterionType;
import org.navalplanner.business.resources.entities.ResourceEnum;
import org.navalplanner.web.resources.criterion.ICriterionsModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.annotation.NotTransactional;
@ -437,6 +438,7 @@ public class OrderModelTest {
public Criterion execute() {
CriterionType criterionType = CriterionType.create(
"test" + UUID.randomUUID(), "");
criterionType.setResource(ResourceEnum.WORKER);
criterionTypeDAO.save(criterionType);
Criterion criterion = Criterion.create("Test"
+ UUID.randomUUID(), criterionType);