diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/AllocationRow.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/AllocationRow.java index 816808429..622c29edd 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/AllocationRow.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/AllocationRow.java @@ -56,6 +56,14 @@ public abstract class AllocationRow { } } + public static void assignResourcesPerDay(List rows, + ResourcesPerDay[] resourcesPerDay) { + int i = 0; + for (AllocationRow each : rows) { + each.setResourcesPerDay(resourcesPerDay[i++]); + } + } + public static void loadDataFromLast(Collection rows) { for (AllocationRow each : rows) { each.loadDataFromLast(); @@ -267,7 +275,8 @@ public abstract class AllocationRow { hoursInput.setConstraint((Constraint) null); } resourcesPerDayInput - .setDisabled(calculatedValue == CalculatedValue.RESOURCES_PER_DAY); + .setDisabled(calculatedValue == CalculatedValue.RESOURCES_PER_DAY + || recommendedAllocation); } public void loadDataFromLast() { diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/FormBinder.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/FormBinder.java index 001ea4432..94edb5259 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/FormBinder.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/FormBinder.java @@ -22,6 +22,7 @@ package org.navalplanner.web.planner.allocation; import static org.navalplanner.web.I18nHelper._; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.Collection; import java.util.Date; @@ -35,6 +36,7 @@ import org.joda.time.format.ISODateTimeFormat; import org.navalplanner.business.common.ProportionalDistributor; import org.navalplanner.business.planner.entities.AggregateOfResourceAllocations; import org.navalplanner.business.planner.entities.CalculatedValue; +import org.navalplanner.business.planner.entities.ResourcesPerDay; import org.navalplanner.business.resources.entities.Criterion; import org.navalplanner.business.resources.entities.Resource; import org.navalplanner.web.common.IMessagesForUser; @@ -53,6 +55,7 @@ import org.zkoss.zul.Button; import org.zkoss.zul.Checkbox; import org.zkoss.zul.Constraint; import org.zkoss.zul.Datebox; +import org.zkoss.zul.Decimalbox; import org.zkoss.zul.Intbox; import org.zkoss.zul.Listbox; import org.zkoss.zul.SimpleConstraint; @@ -109,6 +112,8 @@ class FormBinder { private ProportionalDistributor hoursDistributorForRecommendedAllocation; + private ResourcesPerDay.ResourcesPerDayDistributor resourcesPerDayDistributorForRecommendedAllocation; + private EventListener hoursRowInputChange = new EventListener() { @Override @@ -129,10 +134,22 @@ class FormBinder { } }; + private EventListener allResourcesPerDayChange = new EventListener() { + + @Override + public void onEvent(Event event) throws Exception { + if (allResourcesPerDay.isVisible()) { + distributeResourcesPerDayToRows(); + } + } + }; + private boolean recommendedAllocation = false; private Tab workerSearchTab; + private Decimalbox allResourcesPerDay; + public FormBinder( AllocationRowsHandler allocationRowsHandler, IResourceAllocationModel resourceAllocationModel) { @@ -183,6 +200,7 @@ class FormBinder { private void applyDisabledRules() { assignedHoursComponentDisabilityRule(); endDateDisabilityRule(); + allResourcesPerDayVisibilityRule(); applyDisabledRulesOnRows(); } @@ -237,6 +255,14 @@ class FormBinder { onChangeEnableApply(endDate); } + public void setAllResourcesPerDay(Decimalbox allResourcesPerDay) { + this.allResourcesPerDay = allResourcesPerDay; + this.allResourcesPerDay.setConstraint(new SimpleConstraint( + SimpleConstraint.NO_EMPTY | SimpleConstraint.NO_NEGATIVE)); + allResourcesPerDayVisibilityRule(); + onChangeEnableApply(allResourcesPerDay); + } + private Constraint datePosteriorToStartDate() { return new Constraint() { @Override @@ -261,6 +287,12 @@ class FormBinder { .getCalculatedValue() == CalculatedValue.END_DATE); } + private void allResourcesPerDayVisibilityRule() { + this.allResourcesPerDay.setVisible(allocationRowsHandler + .getCalculatedValue() != CalculatedValue.RESOURCES_PER_DAY + && recommendedAllocation); + } + public List getCurrentRows() { List result = addListeners(allocationRowsHandler .getCurrentRows()); @@ -434,12 +466,16 @@ class FormBinder { allocationRowsHandler.removeAll(); hoursDistributorForRecommendedAllocation = resourceAllocationModel .addDefaultAllocations(); + resourcesPerDayDistributorForRecommendedAllocation = ResourcesPerDay + .distributor(hoursDistributorForRecommendedAllocation); this.recommendedAllocation = true; disableIfNeededWorkerSearchTab(); applyDisabledRules(); distributeHoursFromTotalToRows(); allHoursInput.addEventListener(Events.ON_CHANGE, allHoursInputChange); + allResourcesPerDay.addEventListener(Events.ON_CHANGE, + allResourcesPerDayChange); Util.reloadBindings(allocationsList); } @@ -451,11 +487,20 @@ class FormBinder { AllocationRow.assignHours(rows, hours); } + private void distributeResourcesPerDayToRows() { + BigDecimal total = allResourcesPerDay.getValue(); + total = total != null ? total : BigDecimal.ZERO; + ResourcesPerDay[] forRows = resourcesPerDayDistributorForRecommendedAllocation + .distribute(ResourcesPerDay.amount(total)); + AllocationRow.assignResourcesPerDay(rows, forRows); + } + private void deactivatingRecommendedAllocation() { this.recommendedAllocation = false; allHoursInput .removeEventListener(Events.ON_CHANGE, allHoursInputChange); + applyDisabledRules(); disableIfNeededWorkerSearchTab(); } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/ResourceAllocationController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/ResourceAllocationController.java index e7470b0a9..6c39a44da 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/ResourceAllocationController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/ResourceAllocationController.java @@ -140,7 +140,6 @@ public class ResourceAllocationController extends GenericForwardComposer { messagesForUser = new MessagesForUser(messagesContainer); taskEndDate = new Datebox(); allResourcesPerDay = new Decimalbox(); - allResourcesPerDay.setVisible(false); makeReadyInputsForCalculationTypes(); prepareCalculationTypesGrid(); } @@ -191,6 +190,7 @@ public class ResourceAllocationController extends GenericForwardComposer { formBinder.setAssignedHoursComponent(assignedHoursComponent); formBinder.setTaskStartDateBox(taskStartDateBox); formBinder.setEndDate(taskEndDate); + formBinder.setAllResourcesPerDay(allResourcesPerDay); formBinder.setApplyButton(applyButton); formBinder.setAllocationsList(allocationsList); formBinder.setMessagesForUser(messagesForUser);