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 e6f9ca5e3..096ea268c 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 @@ -200,6 +200,24 @@ public abstract class ResourceAllocation extends allocation.setResourcesPerDay(resourcesPerDay); allocation.resetGenericAssignmentsTo(dayAssignments); } + + @Override + protected boolean thereAreAvailableHoursFrom( + LocalDate start, + ResourcesPerDayModification resourcesPerDayModification, + int hoursToAllocate) { + IWorkHours workHoursPerDay = resourcesPerDayModification + .getBeingModified().getWorkHoursPerDay(); + ResourcesPerDay resourcesPerDay = resourcesPerDayModification + .getGoal(); + return workHoursPerDay.thereAreAvailableHoursFrom(start, + resourcesPerDay, hoursToAllocate); + } + + @Override + protected void markUnsatisfied(ResourceAllocation allocation) { + allocation.markAsUnsatisfied(); + } }; return allocator.untilAllocating(hoursToAllocate); } @@ -530,6 +548,9 @@ public abstract class ResourceAllocation extends @Override public boolean thereAreAvailableHoursFrom(LocalDate date, ResourcesPerDay resourcesPerDay, int hours) { + if (getTaskCalendar() == null) { + return true; + } return getTaskCalendar().thereAreAvailableHoursFrom(date, resourcesPerDay, hours); } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/allocationalgorithms/AllocatorForSpecifiedResourcesPerDayAndHours.java b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/allocationalgorithms/AllocatorForSpecifiedResourcesPerDayAndHours.java index 1fd907a93..f079bd469 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/allocationalgorithms/AllocatorForSpecifiedResourcesPerDayAndHours.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/planner/entities/allocationalgorithms/AllocatorForSpecifiedResourcesPerDayAndHours.java @@ -75,6 +75,11 @@ public abstract class AllocatorForSpecifiedResourcesPerDayAndHours { Integer hoursToAllocate) { int hoursRemaining = hoursToAllocate; LocalDate start = new LocalDate(task.getStartDate().getTime()); + if (!thereAreAvailableHoursFrom(start, resourcesPerDayModification, + hoursToAllocate)) { + markUnsatisfied(resourcesPerDayModification.getBeingModified()); + return 0; + } int day = 0; while (hoursRemaining > 0) { LocalDate current = start.plusDays(day); @@ -105,6 +110,12 @@ public abstract class AllocatorForSpecifiedResourcesPerDayAndHours { protected abstract List createAssignmentsAtDay( ResourcesPerDayModification allocation, LocalDate day, Integer limit); + protected abstract boolean thereAreAvailableHoursFrom(LocalDate start, + ResourcesPerDayModification resourcesPerDayModification, + int hoursToAllocate); + + protected abstract void markUnsatisfied(ResourceAllocation beingModified); + private int assignForDay( ResourcesPerDayModification resourcesPerDayModification, LocalDate day, int remaining) {