diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/ResourceAllocation.java b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/ResourceAllocation.java index f1a59a168..f49fefd18 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/ResourceAllocation.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/ResourceAllocation.java @@ -371,6 +371,12 @@ public abstract class ResourceAllocation extends allocations); allocator.allocateUntil(endExclusive); } + + public void allocateFromEndUntil(LocalDate start) { + AllocatorForTaskDurationAndSpecifiedResourcesPerDay allocator = new AllocatorForTaskDurationAndSpecifiedResourcesPerDay( + allocations); + allocator.allocateFromEndUntil(start); + } } public static HoursAllocationSpecified allocatingHours( @@ -418,6 +424,15 @@ public abstract class ResourceAllocation extends } } + public void allocateFromEndUntil(LocalDate start) { + Validate.notNull(start); + Validate.isTrue(start.isBefore(task.getEndAsLocalDate())); + for (HoursModification each : hoursModifications) { + each.allocateFromEndUntil(start); + } + + } + } private Task task; diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/allocationalgorithms/AllocatorForTaskDurationAndSpecifiedResourcesPerDay.java b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/allocationalgorithms/AllocatorForTaskDurationAndSpecifiedResourcesPerDay.java index a15a415f7..28f953099 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/allocationalgorithms/AllocatorForTaskDurationAndSpecifiedResourcesPerDay.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/allocationalgorithms/AllocatorForTaskDurationAndSpecifiedResourcesPerDay.java @@ -44,4 +44,10 @@ public class AllocatorForTaskDurationAndSpecifiedResourcesPerDay { allocation.applyAllocationUntil(endExclusive); } } + + public void allocateFromEndUntil(LocalDate start) { + for (ResourcesPerDayModification allocation : allocations) { + allocation.applyAllocationFromEndUntil(start); + } + } } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/allocationalgorithms/HoursModification.java b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/allocationalgorithms/HoursModification.java index ca3737395..c1a45b6a0 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/allocationalgorithms/HoursModification.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/allocationalgorithms/HoursModification.java @@ -54,6 +54,13 @@ public abstract class HoursModification extends AllocationModification { .fromStartUntil(end) .allocateHours(getHours()); } + + @Override + public void allocateFromEndUntil(LocalDate start) { + genericAllocation.forResources(getResources()) + .fromEndUntil(start) + .allocateHours(getHours()); + } } private static class OnSpecificAllocation extends HoursModification { @@ -71,6 +78,12 @@ public abstract class HoursModification extends AllocationModification { specific.fromStartUntil(end) .allocateHours(getHours()); } + + @Override + public void allocateFromEndUntil(LocalDate start) { + specific.fromEndUntil(start) + .allocateHours(getHours()); + } } public static HoursModification create( @@ -118,6 +131,8 @@ public abstract class HoursModification extends AllocationModification { public abstract void allocateUntil(LocalDate end); + public abstract void allocateFromEndUntil(LocalDate start); + public int getHours() { return hours; } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/allocationalgorithms/ResourcesPerDayModification.java b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/allocationalgorithms/ResourcesPerDayModification.java index 76309a9a5..363e0e87b 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/allocationalgorithms/ResourcesPerDayModification.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/allocationalgorithms/ResourcesPerDayModification.java @@ -74,6 +74,12 @@ public abstract class ResourcesPerDayModification extends .resourcesPerDayUntil(endExclusive).allocate(getGoal()); } + @Override + public void applyAllocationFromEndUntil(LocalDate start) { + genericAllocation.forResources(getResources()) + .resourcesPerDayFromEndUntil(start).allocate(getGoal()); + } + @Override public List createAssignmentsAtDay(PartialDay day, EffortDuration limit) { @@ -141,6 +147,12 @@ public abstract class ResourcesPerDayModification extends getGoal()); } + @Override + public void applyAllocationFromEndUntil(LocalDate start) { + resourceAllocation.resourcesPerDayFromEndUntil(start).allocate( + getGoal()); + } + @Override public List createAssignmentsAtDay(PartialDay day, EffortDuration limit) { @@ -238,6 +250,8 @@ public abstract class ResourcesPerDayModification extends public abstract void applyAllocationUntil(LocalDate endExclusive); + public abstract void applyAllocationFromEndUntil(LocalDate start); + public abstract List createAssignmentsAtDay(PartialDay day, EffortDuration limit);