diff --git a/libreplan-business/src/main/java/org/libreplan/business/planner/entities/ResourceAllocation.java b/libreplan-business/src/main/java/org/libreplan/business/planner/entities/ResourceAllocation.java index 709e1de33..aa8cb35e0 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/planner/entities/ResourceAllocation.java +++ b/libreplan-business/src/main/java/org/libreplan/business/planner/entities/ResourceAllocation.java @@ -2160,7 +2160,7 @@ public abstract class ResourceAllocation extends getDayAssignmentsState().detachAssignments(); } - public void associateAssignmentsToResource() { + void associateAssignmentsToResource() { for (DayAssignment dayAssignment : getAssignments()) { dayAssignment.associateToResource(); } diff --git a/libreplan-business/src/main/java/org/libreplan/business/planner/entities/allocationalgorithms/UntilFillingHoursAllocator.java b/libreplan-business/src/main/java/org/libreplan/business/planner/entities/allocationalgorithms/UntilFillingHoursAllocator.java index e1010240a..f94c10808 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/planner/entities/allocationalgorithms/UntilFillingHoursAllocator.java +++ b/libreplan-business/src/main/java/org/libreplan/business/planner/entities/allocationalgorithms/UntilFillingHoursAllocator.java @@ -29,6 +29,7 @@ import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import org.apache.commons.lang.Validate; import org.joda.time.LocalDate; @@ -88,19 +89,8 @@ public abstract class UntilFillingHoursAllocator { IntraDayDate candidate = untilAllocating(dateFromWhichToAllocate, each.allocation, each.duration); currentResult = pickCurrentOrCandidate(currentResult, candidate); - setNewDataForAllocation(each.allocation, currentResult); - - // This is done in order that new assignments are taken into account - // for the next allocations in the same task - each.allocation.getResourceAllocation() - .associateAssignmentsToResource(); } - // Then we detach the day assignments as they are going to be associated - // again later - for (EffortPerAllocation each : effortPerAllocation) { - each.allocation.getResourceAllocation().detach(); - } - + setAssignmentsForEachAllocation(currentResult); return currentResult; } @@ -238,16 +228,22 @@ public abstract class UntilFillingHoursAllocator { } } + private void setAssignmentsForEachAllocation(IntraDayDate resultDate) { + for (Entry> entry : resultAssignments + .entrySet()) { + setNewDataForAllocation(entry, resultDate); + } + } + private void setNewDataForAllocation( - ResourcesPerDayModification resourcesPerDayModification, + Entry> entry, IntraDayDate resultDate) { @SuppressWarnings("unchecked") - ResourceAllocation allocation = (ResourceAllocation) resourcesPerDayModification - .getBeingModified(); - ResourcesPerDay resourcesPerDay = resourcesPerDayModification.getGoal(); + ResourceAllocation allocation = (ResourceAllocation) entry + .getKey().getBeingModified(); + ResourcesPerDay resourcesPerDay = entry.getKey().getGoal(); @SuppressWarnings("unchecked") - List value = (List) resultAssignments - .get(resourcesPerDayModification); + List value = (List) entry.getValue(); setNewDataForAllocation(allocation, resultDate, resourcesPerDay, value); }