From 112e9f0e8b23fa0e5dd735b142dadda3544ea3b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Gonz=C3=A1lez=20Fern=C3=A1ndez?= Date: Wed, 23 Sep 2009 01:12:49 +0200 Subject: [PATCH] ItEr27S06CUAsignacionGrupoRecursosAPlanificacionItEr26S07: Implementing apply action --- .../web/planner/allocation/FormBinder.java | 33 +++++++++++--- .../allocation/ResourceAllocationModel.java | 13 +++++- .../ResourceAllocationsBeingEdited.java | 45 +++++++++++++++++-- 3 files changed, 81 insertions(+), 10 deletions(-) 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 ce2778d9a..a8e8a9de3 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 @@ -55,10 +55,14 @@ class FormBinder { public void setAssignedHoursComponent(Intbox assignedHoursComponent) { this.assignedHoursComponent = assignedHoursComponent; assignedHoursComponentDisabilityRule(); - this.assignedHoursComponent.setValue(aggregate.getTotalHours()); + loadValueForAssignedHoursComponent(); onChangeEnableApply(assignedHoursComponent); } + private void loadValueForAssignedHoursComponent() { + this.assignedHoursComponent.setValue(aggregate.getTotalHours()); + } + private void assignedHoursComponentDisabilityRule() { this.assignedHoursComponent.setDisabled(resourceAllocationsBeingEdited .getCalculatedValue() == CalculatedValue.NUMBER_OF_HOURS); @@ -90,9 +94,13 @@ class FormBinder { public void setTaskStartDateBox(Datebox taskStartDateBox) { this.taskStartDateBox = taskStartDateBox; this.taskStartDateBox.setDisabled(true); + loadValueForTaskStartDateBox(); + onChangeEnableApply(taskStartDateBox); + } + + private void loadValueForTaskStartDateBox() { this.taskStartDateBox.setValue(resourceAllocationsBeingEdited.getTask() .getStartDate()); - onChangeEnableApply(taskStartDateBox); } private void onChangeEnableApply(InputElement inputElement) { @@ -102,17 +110,28 @@ class FormBinder { public void setTaskElapsedDays(Intbox taskElapsedDays) { this.taskElapsedDays = taskElapsedDays; taskElapsedDaysDisabilityRule(); - this.taskElapsedDays.setValue(resourceAllocationsBeingEdited.getTask() - .getDaysDuration()); + loadValuesForElapsedDays(); onChangeEnableApply(taskElapsedDays); } + private void loadValuesForElapsedDays() { + this.taskElapsedDays.setValue(resourceAllocationsBeingEdited + .getDaysDuration()); + } + private void taskElapsedDaysDisabilityRule() { this.taskElapsedDays.setDisabled(true); } private void doApply() { - // TODO implement + aggregate = resourceAllocationsBeingEdited.doAllocation(); + reloadValues(); + } + + private void reloadValues() { + loadValueForAssignedHoursComponent(); + loadValueForTaskStartDateBox(); + loadValuesForElapsedDays(); } public void setApplyButton(Button applyButton) { @@ -134,4 +153,8 @@ class FormBinder { onChangeEnableApply(decimalbox); } + public int getAssignedHours() { + return assignedHoursComponent.getValue(); + } + } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/ResourceAllocationModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/ResourceAllocationModel.java index 8a92d5cd8..f999c8ef9 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/ResourceAllocationModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/ResourceAllocationModel.java @@ -130,8 +130,8 @@ public class ResourceAllocationModel implements IResourceAllocationModel { List currentAllocations = addDefaultGenericIfNeeded(AllocationDTO.toDTOs(this.task .getResourceAllocations())); resourceAllocationsBeingEdited = ResourceAllocationsBeingEdited - .noTaskModifying( - task, currentAllocations, resourceDAO); + .noTaskModifying(task, currentAllocations, resourceDAO, + reattachResources(getResourcesMatchingCriterions())); return resourceAllocationsBeingEdited; } @@ -172,9 +172,18 @@ public class ResourceAllocationModel implements IResourceAllocationModel { criterionType.getName(); } + private List reattachResources( + List resourcesMatchingCriterions) { + for (Resource resource : resourcesMatchingCriterions) { + reattachResource(resource); + } + return resourcesMatchingCriterions; + } + private void reattachResource(Resource resource) { resourceDAO.save(resource); reattachCriterionSatisfactions(resource.getCriterionSatisfactions()); + resource.getAssignments(); } private void reattachCriterionSatisfactions( diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/ResourceAllocationsBeingEdited.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/ResourceAllocationsBeingEdited.java index fa8d632a0..c6f945869 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/ResourceAllocationsBeingEdited.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/ResourceAllocationsBeingEdited.java @@ -3,10 +3,13 @@ package org.navalplanner.web.planner.allocation; import static org.navalplanner.web.I18nHelper._; import java.util.ArrayList; +import java.util.Date; import java.util.HashSet; import java.util.List; import java.util.Set; +import org.joda.time.Days; +import org.joda.time.LocalDate; import org.navalplanner.business.planner.entities.AggregateOfResourceAllocations; import org.navalplanner.business.planner.entities.CalculatedValue; import org.navalplanner.business.planner.entities.GenericResourceAllocation; @@ -21,9 +24,10 @@ import org.navalplanner.business.resources.entities.Worker; public class ResourceAllocationsBeingEdited { public static ResourceAllocationsBeingEdited noTaskModifying(Task task, - List initialAllocations, IResourceDAO resourceDAO) { + List initialAllocations, IResourceDAO resourceDAO, + List resourcesBeingEdited) { return new ResourceAllocationsBeingEdited(task, initialAllocations, - resourceDAO, false); + resourceDAO, resourcesBeingEdited, false); } private final List currentAllocations; @@ -40,15 +44,22 @@ public class ResourceAllocationsBeingEdited { private CalculatedValue calculatedValue; + private Integer daysDuration; + + private final List resourcesMatchingCriterions; + private ResourceAllocationsBeingEdited(Task task, List initialAllocations, IResourceDAO resourceDAO, + List resourcesMatchingCriterions, boolean modifyTask) { this.task = task; this.resourceDAO = resourceDAO; + this.resourcesMatchingCriterions = resourcesMatchingCriterions; this.modifyTask = modifyTask; this.currentAllocations = new ArrayList( initialAllocations); this.calculatedValue = getCurrentCalculatedValue(task); + this.daysDuration = task.getDaysDuration(); } private CalculatedValue getCurrentCalculatedValue(Task task) { @@ -101,6 +112,30 @@ public class ResourceAllocationsBeingEdited { return result; } + public AggregateOfResourceAllocations doAllocation() { + List allocations = asResourceAllocations(); + switch (calculatedValue) { + case NUMBER_OF_HOURS: + ResourceAllocation.allocating(allocations).withResources( + resourcesMatchingCriterions).allocateOnTaskLength(); + break; + case END_DATE: + LocalDate end = ResourceAllocation.allocating(allocations) + .withResources(resourcesMatchingCriterions) + .untilAllocating(formBinder.getAssignedHours()); + daysDuration = from(task.getStartDate(), end); + break; + default: + throw new RuntimeException("cant handle: " + calculatedValue); + } + return new AggregateOfResourceAllocations(stripResourcesPerDay(allocations)); + } + + private Integer from(Date startDate, LocalDate end) { + LocalDate start = new LocalDate(startDate.getTime()); + return Days.daysBetween(start, end).getDays(); + } + private List> stripResourcesPerDay( List withResourcesPerDay) { List> result = new ArrayList>(); @@ -154,7 +189,7 @@ public class ResourceAllocationsBeingEdited { public ResourceAllocationsBeingEdited taskModifying() { return new ResourceAllocationsBeingEdited(task, currentAllocations, - resourceDAO, true); + resourceDAO, resourcesMatchingCriterions, true); } public FormBinder createFormBinder() { @@ -181,4 +216,8 @@ public class ResourceAllocationsBeingEdited { return task; } + public Integer getDaysDuration() { + return daysDuration; + } + }