diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/HoursGroup.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/HoursGroup.java index 851557d67..83cbdf76a 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/HoursGroup.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/HoursGroup.java @@ -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; } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLine.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLine.java index c4d8ae010..a29c6728a 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLine.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/entities/OrderLine.java @@ -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); diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/OrderElementTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/OrderElementTest.java index 58a8d878a..d36e030ab 100644 --- a/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/OrderElementTest.java +++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/orders/entities/OrderElementTest.java @@ -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); diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/AssignedCriterionRequirementToOrderElementController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/AssignedCriterionRequirementToOrderElementController.java index 233cad965..3971120d4 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/AssignedCriterionRequirementToOrderElementController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/AssignedCriterionRequirementToOrderElementController.java @@ -117,6 +117,30 @@ getCriterionRequirementWrappers(); return assignedCriterionRequirementToOrderElementModel.getCriterionWithItsTypes(); } + public List getCriterionWithItsTypesWorker() { + List result = new ArrayList(); + for (CriterionWithItsType criterionAndType : assignedCriterionRequirementToOrderElementModel + .getCriterionWithItsTypes()) { + if (!criterionAndType.getCriterion().getType().getResource() + .equals(ResourceEnum.MACHINE)) { + result.add(criterionAndType); + } + } + return result; + } + + public List getCriterionWithItsTypesMachine() { + List result = new ArrayList(); + for (CriterionWithItsType criterionAndType : assignedCriterionRequirementToOrderElementModel + .getCriterionWithItsTypes()) { + if (!criterionAndType.getCriterion().getType().getResource() + .equals(ResourceEnum.WORKER)) { + result.add(criterionAndType); + } + } + return result; + } + public List 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() diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/AssignedCriterionRequirementToOrderElementModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/AssignedCriterionRequirementToOrderElementModel.java index 505869ffc..fa962cfa3 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/AssignedCriterionRequirementToOrderElementModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/AssignedCriterionRequirementToOrderElementModel.java @@ -113,9 +113,8 @@ public class AssignedCriterionRequirementToOrderElementModel implements criterionRequirementWrappers = new ArrayList(); 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( diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/CriterionRequirementWrapper.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/CriterionRequirementWrapper.java index 13c5b5e30..f599f6a38 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/CriterionRequirementWrapper.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/CriterionRequirementWrapper.java @@ -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()); } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/HoursGroupWrapper.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/HoursGroupWrapper.java index 485e4cff5..efce45012 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/HoursGroupWrapper.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/HoursGroupWrapper.java @@ -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(); 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); } } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderCRUDController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderCRUDController.java index d5200ddae..73c84acc9 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderCRUDController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/OrderCRUDController.java @@ -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); diff --git a/navalplanner-webapp/src/main/webapp/orders/_edition.zul b/navalplanner-webapp/src/main/webapp/orders/_edition.zul index 1a61f651f..7f8f73eff 100644 --- a/navalplanner-webapp/src/main/webapp/orders/_edition.zul +++ b/navalplanner-webapp/src/main/webapp/orders/_edition.zul @@ -33,7 +33,8 @@ - + diff --git a/navalplanner-webapp/src/main/webapp/orders/_listHoursGroupCriterionRequirement.zul b/navalplanner-webapp/src/main/webapp/orders/_listHoursGroupCriterionRequirement.zul index 5f46bae06..7ad6df2ff 100644 --- a/navalplanner-webapp/src/main/webapp/orders/_listHoursGroupCriterionRequirement.zul +++ b/navalplanner-webapp/src/main/webapp/orders/_listHoursGroupCriterionRequirement.zul @@ -31,11 +31,30 @@ + + + + + + + + + + + + + + diff --git a/navalplanner-webapp/src/main/webapp/orders/_listOrderElementCriterionRequirements.zul b/navalplanner-webapp/src/main/webapp/orders/_listOrderElementCriterionRequirements.zul index e602a6d1d..26897b391 100644 --- a/navalplanner-webapp/src/main/webapp/orders/_listOrderElementCriterionRequirements.zul +++ b/navalplanner-webapp/src/main/webapp/orders/_listOrderElementCriterionRequirements.zul @@ -81,7 +81,6 @@ label = "${i18n:_('Invalidate')}" onClick = "assignedCriterionRequirementController.invalidate(self.parent.parent.value);"> - @@ -141,7 +140,7 @@ readonly = "@{assignedCriterionRequirementController.readOnly}"/> diff --git a/navalplanner-webapp/src/test/java/org/navalplanner/web/orders/OrderModelTest.java b/navalplanner-webapp/src/test/java/org/navalplanner/web/orders/OrderModelTest.java index b3bbba9a3..e0576cf5e 100644 --- a/navalplanner-webapp/src/test/java/org/navalplanner/web/orders/OrderModelTest.java +++ b/navalplanner-webapp/src/test/java/org/navalplanner/web/orders/OrderModelTest.java @@ -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);