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 a5d30a664..5614c6631 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 @@ -257,4 +257,8 @@ public class GenericResourceAllocation extends return new ArrayList(resources); } + public IAllocatable withPreviousAssociatedResources() { + return forResources(getAssociatedResources()); + } + } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/ShareDivision.java b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/ShareDivision.java index ef8a9a51a..e14d439e6 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/ShareDivision.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/ShareDivision.java @@ -113,7 +113,7 @@ public class ShareDivision { remainderIncrease = remainderIncrease - bucket.getIncreaseDone(); assert remainderIncrease >= 0; } - assert remainderIncrease == 0 : "all is assigned"; + assert remainderIncrease == 0 || shares.isEmpty() : "all is assigned"; return ShareDivision.create(fromWrappers(wrapped)); } diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/entities/GenericResourceAllocationTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/entities/GenericResourceAllocationTest.java index 8b734ee04..a96ca2111 100644 --- a/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/entities/GenericResourceAllocationTest.java +++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/planner/entities/GenericResourceAllocationTest.java @@ -359,4 +359,28 @@ public class GenericResourceAllocationTest { return new HashSet(associatedResources); } + @Test + public void canAllocateHoursOnIntervalUsingPreviousResources() { + final int workableHoursDay = 8; + givenBaseCalendarWithoutExceptions(workableHoursDay); + LocalDate start = new LocalDate(2006, 10, 5); + final int days = 4; + givenTaskWithStartAndEnd(toInterval(start, Period.days(days))); + givenGenericResourceAllocationForTask(task); + givenWorkersWithLoads(3, 12, 1); + + genericResourceAllocation.forResources(workers).allocate( + ResourcesPerDay.amount(1)); + + final int hoursOnSubinterval = 3; + int daysSubinterval = 2; + genericResourceAllocation.withPreviousAssociatedResources().onInterval( + start, + start.plusDays(daysSubinterval)).allocateHours( + hoursOnSubinterval); + assertThat(genericResourceAllocation.getAssignedHours(), + equalTo(hoursOnSubinterval + (days - daysSubinterval) + * workableHoursDay)); + } + }