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 ec4a59163..87a7ddc91 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 @@ -874,11 +874,17 @@ public abstract class ResourceAllocation extends public IntervalInsideTask(LocalDate startInclusive, LocalDate endExclusive) { - this.start = IntraDayDate.max(IntraDayDate - .startOfDay(startInclusive), getTask() - .getFirstDayNotConsolidated()); - this.end = IntraDayDate.min(task.getIntraDayEndDate(), - IntraDayDate.startOfDay(endExclusive)); + Validate.isTrue(startInclusive.compareTo(endExclusive) <= 0); + + IntraDayDate taskStart = getTask().getFirstDayNotConsolidated(); + IntraDayDate taskEnd = task.getIntraDayEndDate(); + + this.start = IntraDayDate.min(IntraDayDate.max(IntraDayDate + .startOfDay(startInclusive), taskStart), taskEnd); + + this.end = IntraDayDate.max( + IntraDayDate.min(taskEnd, + IntraDayDate.startOfDay(endExclusive)), taskStart); } public IntraDayDate getStart() { 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 59297ac09..8ab3940f4 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 @@ -327,6 +327,24 @@ public class SpecificResourceAllocationTest { haveHours(4, 4, 4)); } + @Test + public void ifTheProvidedIntervalIsAfterTheTaskDoesntAllocateAnything() { + LocalDate start = new LocalDate(2000, 2, 4); + givenSpecificResourceAllocation(start, 4); + specificResourceAllocation.onInterval(start.plusDays(5), + start.plusDays(6)).allocateHours(12); + assertTrue(specificResourceAllocation.getAssignments().isEmpty()); + } + + @Test + public void ifTheProvidedIntervalIsBeforeTheTaskDoesntAllocateAnything() { + LocalDate start = new LocalDate(2000, 2, 4); + givenSpecificResourceAllocation(start, 4); + specificResourceAllocation.onInterval(start.minusDays(5), + start.minusDays(2)).allocateHours(12); + assertTrue(specificResourceAllocation.getAssignments().isEmpty()); + } + @Test public void thePartOfTheIntervalUsedIsTheOneOverlappingWithTheTask() { LocalDate start = new LocalDate(2000, 2, 4);