From 6f45f7b2a6a5153a6213be3a0a8116142e465b26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20Gonz=C3=A1lez=20Fern=C3=A1ndez?= Date: Wed, 3 Feb 2010 13:51:33 +0100 Subject: [PATCH] ItEr46S12CUVisualizacionResponsabilidadesTRaballoNaPlanificacion: Scheduling improvement. Taking into account if the day is over-assignable when calculating the hours for a resource per day. --- .../calendars/entities/BaseCalendar.java | 29 ++++++++++++++++++- .../calendars/entities/ResourceCalendar.java | 2 +- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/calendars/entities/BaseCalendar.java b/navalplanner-business/src/main/java/org/navalplanner/business/calendars/entities/BaseCalendar.java index 37206f033..ad0f14cae 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/calendars/entities/BaseCalendar.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/calendars/entities/BaseCalendar.java @@ -298,6 +298,14 @@ public class BaseCalendar extends BaseEntity implements IWorkHours { } } + private boolean isOverAssignable(LocalDate localDate) { + CalendarException exceptionDay = getExceptionDay(localDate); + if (exceptionDay != null) { + return exceptionDay.getType().isOverAssignable(); + } + return true; + } + public Integer getHours(Date date, Days day) { return getHours(new LocalDate(date), day); } @@ -783,7 +791,26 @@ public class BaseCalendar extends BaseEntity implements IWorkHours { @Override public Integer toHours(LocalDate day, ResourcesPerDay resourcesPerDay) { final Integer workableHours = getWorkableHours(day); - return resourcesPerDay.asHoursGivenResourceWorkingDayOf(workableHours); + return limitOverAssignability(day, resourcesPerDay + .asHoursGivenResourceWorkingDayOf(workableHours), workableHours); + } + + private Integer limitOverAssignability(LocalDate day, int workableHours, + int hoursInitiallyCalculated) { + boolean overAssignable = isOverAssignable(day); + if (overAssignable) { + return hoursInitiallyCalculated; + } else { + return Math.min(hoursInitiallyCalculated, + multiplyByCapacity(workableHours)); + } + } + + /** + * This method is intended to be overriden + */ + protected int multiplyByCapacity(Integer workableHours) { + return workableHours; } } \ No newline at end of file diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/calendars/entities/ResourceCalendar.java b/navalplanner-business/src/main/java/org/navalplanner/business/calendars/entities/ResourceCalendar.java index 53113ca6d..df680696a 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/calendars/entities/ResourceCalendar.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/calendars/entities/ResourceCalendar.java @@ -85,7 +85,7 @@ public class ResourceCalendar extends BaseCalendar { return false; } - private int multiplyByCapacity(Integer workableHours) { + protected int multiplyByCapacity(Integer workableHours) { if (workableHours == null) { return 0; }