From 8596aeef8ac27d62588dad8fa9efb531fc435ed1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Gonz=C3=A1lez=20Fern=C3=A1ndez?= Date: Fri, 29 Oct 2010 13:42:35 +0200 Subject: [PATCH] Now can allocate some hours from end of the task to some date --- .../planner/entities/IAllocatable.java | 2 ++ .../planner/entities/ResourceAllocation.java | 20 ++++++++++++++++++- .../entities/SpecificResourceAllocation.java | 5 +++++ .../SpecificResourceAllocationTest.java | 11 ++++++++++ 4 files changed, 37 insertions(+), 1 deletion(-) diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/IAllocatable.java b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/IAllocatable.java index 82001913a..f89d1c241 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/IAllocatable.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/IAllocatable.java @@ -34,4 +34,6 @@ public interface IAllocatable extends IAllocateResourcesPerDay { public IAllocateHoursOnInterval fromStartUntil(LocalDate endExclusive); + public IAllocateHoursOnInterval fromEndUntil(LocalDate start); + } \ No newline at end of file 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 cb8ec1d22..e66bf2949 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 @@ -592,10 +592,28 @@ public abstract class ResourceAllocation extends }; } + @Override + public IAllocateHoursOnInterval fromEndUntil(final LocalDate start) { + return new IAllocateHoursOnInterval() { + + @Override + public void allocateHours(int hours) { + allocate(IntraDayDate.startOfDay(start), + task.getIntraDayEndDate(), hours(hours)); + } + }; + } + private void allocate(LocalDate end, EffortDuration durationToAssign) { IntraDayDate startInclusive = getStartAfterConsolidated(); + IntraDayDate endExclusive = IntraDayDate.startOfDay(end); + allocate(startInclusive, endExclusive, durationToAssign); + } + + private void allocate(IntraDayDate startInclusive, + IntraDayDate endExclusive, EffortDuration durationToAssign) { List assignmentsCreated = createAssignments(startInclusive, - IntraDayDate.startOfDay(end), durationToAssign); + endExclusive, durationToAssign); resetAssignmentsTo(assignmentsCreated); updateResourcesPerDay(); } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/SpecificResourceAllocation.java b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/SpecificResourceAllocation.java index d9f387aca..08b539f34 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/SpecificResourceAllocation.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/SpecificResourceAllocation.java @@ -170,6 +170,11 @@ public class SpecificResourceAllocation extends return new SpecificAssignmentsAllocation().fromStartUntil(endExclusive); } + @Override + public IAllocateHoursOnInterval fromEndUntil(LocalDate start) { + return new SpecificAssignmentsAllocation().fromEndUntil(start); + } + private final class SpecificAssignmentsAllocation extends AssignmentsAllocation { diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/entities/SpecificResourceAllocationTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/entities/SpecificResourceAllocationTest.java index 16acea33a..f83d052ad 100644 --- a/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/entities/SpecificResourceAllocationTest.java +++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/entities/SpecificResourceAllocationTest.java @@ -305,6 +305,17 @@ public class SpecificResourceAllocationTest { equalTo(ResourcesPerDay.amount(1))); } + @Test + public void canAssignFromEndUntilStart() { + LocalDate start = new LocalDate(2000, 2, 4); + givenSpecificResourceAllocation(start, 4); + specificResourceAllocation.fromEndUntil(start).allocateHours(32); + assertThat(specificResourceAllocation.getAssignments(), + haveHours(8, 8, 8, 8)); + assertThat(specificResourceAllocation.getResourcesPerDay(), + equalTo(ResourcesPerDay.amount(1))); + } + @Test public void canBeNotifiedWhenADayAssignmentIsRemoved() { LocalDate start = new LocalDate(2000, 2, 4);