diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Resource.java b/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Resource.java index b9e0dc353..8d9e17f8e 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Resource.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/resources/entities/Resource.java @@ -13,8 +13,11 @@ import java.util.Map; import java.util.Set; import org.apache.commons.lang.Validate; +import org.joda.time.Days; import org.joda.time.LocalDate; +import org.navalplanner.business.calendars.entities.IWorkHours; import org.navalplanner.business.calendars.entities.ResourceCalendar; +import org.navalplanner.business.calendars.entities.SameWorkHoursEveryDay; import org.navalplanner.business.common.BaseEntity; import org.navalplanner.business.planner.entities.DayAssignment; @@ -492,4 +495,25 @@ public abstract class Resource extends BaseEntity{ return new ArrayList(dayAssignments); } + public int getTotalWorkHours(LocalDate start, LocalDate end) { + IWorkHours calendar = getCalendar() != null ? getCalendar() + : SameWorkHoursEveryDay + .getDefaultWorkingDay(); + return getTotalWorkHoursFor(calendar, start, end); + } + + private int getTotalWorkHoursFor(IWorkHours calendar, LocalDate start, + LocalDate end) { + int sum = 0; + final int days = Days.daysBetween(start, end).getDays(); + for (int i = 0; i < days; i++) { + LocalDate current = start.plusDays(i); + Integer workableHours = calendar.getWorkableHours(current); + if (workableHours != null) { + sum += workableHours; + } + } + return sum; + } + }