From 1c8f0ca8649c231e2574ad7fa5699a384a705b0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Gonz=C3=A1lez=20Fern=C3=A1ndez?= Date: Fri, 15 Apr 2011 14:20:14 +0200 Subject: [PATCH] [Bug #989] Fix bug Discount the removed allocations too. FEA: ItEr74S04BugFixing --- .../entities/GenericResourceAllocation.java | 8 ++++---- .../web/planner/allocation/AllocationRow.java | 18 ++++++++++------- .../allocation/AllocationRowsHandler.java | 13 ++++++------ .../allocation/GenericAllocationRow.java | 20 +++++++++++++------ .../allocation/SpecificAllocationRow.java | 6 ++++-- 5 files changed, 40 insertions(+), 25 deletions(-) diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/GenericResourceAllocation.java b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/GenericResourceAllocation.java index a3892f22f..7c8a673ef 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/GenericResourceAllocation.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/GenericResourceAllocation.java @@ -231,10 +231,10 @@ public class GenericResourceAllocation extends private IAssignedEffortForResource assignedEffortCalculatorOverriden = null; - public void overrideAssignedHoursForResource( - GenericResourceAllocation allocation) { - assignedEffortCalculatorOverriden = allocation - .getAssignedEffortForResource(); + public void discountAssignedHoursForResourceFrom( + Collection> allocations) { + assignedEffortCalculatorOverriden = new AssignedEffortDiscounting( + allocations); } private IAssignedEffortForResource getAssignedEffortForResource() { 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 c3b24174b..326fab2b9 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 @@ -104,11 +104,12 @@ public abstract class AllocationRow { } public static List createAndAssociate( - Task task, Collection rows) { + Task task, Collection rows, + Collection> requestedToRemove) { List result = new ArrayList(); for (AllocationRow each : rows) { ResourcesPerDayModification modification = each - .toResourcesPerDayModification(task); + .toResourcesPerDayModification(task, requestedToRemove); result.add(modification); each.setTemporal(modification.getBeingModified()); } @@ -126,11 +127,12 @@ public abstract class AllocationRow { } public static List createHoursModificationsAndAssociate( - Task task, List currentRows) { + Task task, List currentRows, + Collection> requestedToRemove) { List result = new ArrayList(); for (AllocationRow each : currentRows) { - HoursModification hoursModification = each - .toHoursModification(task); + HoursModification hoursModification = each.toHoursModification( + task, requestedToRemove); result.add(hoursModification); each.setTemporal(hoursModification.getBeingModified()); } @@ -238,9 +240,11 @@ public abstract class AllocationRow { } public abstract ResourcesPerDayModification toResourcesPerDayModification( - Task task); + Task task, + Collection> requestedToRemove); - public abstract HoursModification toHoursModification(Task task); + public abstract HoursModification toHoursModification(Task task, + Collection> requestedToRemove); public boolean isCreating() { return origin == null; diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/AllocationRowsHandler.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/AllocationRowsHandler.java index 63ad238f9..778294540 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/AllocationRowsHandler.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/AllocationRowsHandler.java @@ -31,11 +31,11 @@ import org.joda.time.LocalDate; import org.navalplanner.business.calendars.entities.ThereAreHoursOnWorkHoursCalculator.CapacityResult; import org.navalplanner.business.orders.entities.HoursGroup; import org.navalplanner.business.planner.entities.CalculatedValue; -import org.navalplanner.business.planner.entities.ResourceAllocation; -import org.navalplanner.business.planner.entities.Task; import org.navalplanner.business.planner.entities.DerivedAllocationGenerator.IWorkerFinder; -import org.navalplanner.business.planner.entities.ResourceAllocation.Direction; +import org.navalplanner.business.planner.entities.ResourceAllocation; import org.navalplanner.business.planner.entities.ResourceAllocation.AllocationsSpecified.INotFulfilledReceiver; +import org.navalplanner.business.planner.entities.ResourceAllocation.Direction; +import org.navalplanner.business.planner.entities.Task; import org.navalplanner.business.planner.entities.allocationalgorithms.HoursModification; import org.navalplanner.business.planner.entities.allocationalgorithms.ResourcesPerDayModification; import org.navalplanner.business.resources.entities.Criterion; @@ -254,7 +254,7 @@ public class AllocationRowsHandler { private void calculateNumberOfHoursAllocation() { List allocations = AllocationRow - .createAndAssociate(task, currentRows); + .createAndAssociate(task, currentRows, requestedToRemove); if (isForwardsAllocation()) { ResourceAllocation.allocating(allocations).allocateUntil( formBinder.getAllocationEnd()); @@ -270,7 +270,7 @@ public class AllocationRowsHandler { private void calculateEndDateOrStartDateAllocation() { List allocations = AllocationRow - .createAndAssociate(task, currentRows); + .createAndAssociate(task, currentRows, requestedToRemove); ResourceAllocation.allocating(allocations).untilAllocating( task.getAllocationDirection(), formBinder.getAssignedHours(), notFullfiledReceiver()); @@ -294,7 +294,8 @@ public class AllocationRowsHandler { private void calculateResourcesPerDayAllocation() { List hours = AllocationRow - .createHoursModificationsAndAssociate(task, currentRows); + .createHoursModificationsAndAssociate(task, currentRows, + requestedToRemove); if (isForwardsAllocation()) { ResourceAllocation.allocatingHours(hours).allocateUntil( formBinder.getAllocationEnd()); diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/GenericAllocationRow.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/GenericAllocationRow.java index 08a87c26e..e0cc800cb 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/GenericAllocationRow.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/GenericAllocationRow.java @@ -117,26 +117,34 @@ public class GenericAllocationRow extends AllocationRow { } @Override - public ResourcesPerDayModification toResourcesPerDayModification(Task task) { - GenericResourceAllocation newGeneric = createGenericAllocation(task); + public ResourcesPerDayModification toResourcesPerDayModification(Task task, + Collection> requestedToRemove) { + GenericResourceAllocation newGeneric = createGenericAllocation(task, + requestedToRemove); return ResourcesPerDayModification .create(newGeneric, getNonConsolidatedResourcesPerDay(), this.resources); } - private GenericResourceAllocation createGenericAllocation(Task task) { + private GenericResourceAllocation createGenericAllocation(Task task, + Collection> allocationsRemoved) { GenericResourceAllocation result = GenericResourceAllocation.create( task, resourceType, criterions); GenericResourceAllocation origin = (GenericResourceAllocation) getOrigin(); + Set> discountFrom = new HashSet>( + allocationsRemoved); if (origin != null) { - result.overrideAssignedHoursForResource(origin); result.overrideConsolidatedDayAssignments(origin); + discountFrom.add(origin); } + result.discountAssignedHoursForResourceFrom(discountFrom); return result; } @Override - public HoursModification toHoursModification(Task task) { - return HoursModification.create(createGenericAllocation(task), + public HoursModification toHoursModification(Task task, + Collection> requestedToRemove) { + return HoursModification.create( + createGenericAllocation(task, requestedToRemove), getHoursFromInput(), resources); } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/SpecificAllocationRow.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/SpecificAllocationRow.java index a46184978..b86b6c9e7 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/SpecificAllocationRow.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/planner/allocation/SpecificAllocationRow.java @@ -106,7 +106,8 @@ public class SpecificAllocationRow extends AllocationRow { private Resource resource; @Override - public ResourcesPerDayModification toResourcesPerDayModification(Task task) { + public ResourcesPerDayModification toResourcesPerDayModification(Task task, + Collection> requestedToRemove) { return ResourcesPerDayModification.create(createSpecific(task), getNonConsolidatedResourcesPerDay()); } @@ -121,7 +122,8 @@ public class SpecificAllocationRow extends AllocationRow { } @Override - public HoursModification toHoursModification(Task task) { + public HoursModification toHoursModification(Task task, + Collection> requestedToRemove) { return HoursModification.create(createSpecific(task), getHoursFromInput()); }