diff --git a/libreplan-business/src/main/java/org/libreplan/business/calendars/entities/BaseCalendar.java b/libreplan-business/src/main/java/org/libreplan/business/calendars/entities/BaseCalendar.java index 85d2183c4..444c531a6 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/calendars/entities/BaseCalendar.java +++ b/libreplan-business/src/main/java/org/libreplan/business/calendars/entities/BaseCalendar.java @@ -878,6 +878,18 @@ public class BaseCalendar extends IntegrationEntity implements ICalendar, return false; } + public boolean isActiveBetween(LocalDate startDate, LocalDate endDate) { + if (getCalendarAvailabilities().isEmpty()) { + return true; + } + for (CalendarAvailability calendarAvailability : getCalendarAvailabilities()) { + if (calendarAvailability.isActiveBetween(startDate, endDate)) { + return true; + } + } + return false; + } + public boolean canWorkOn(LocalDate date) { Capacity capacity = findCapacityAt(date); return capacity.allowsWorking(); diff --git a/libreplan-business/src/main/java/org/libreplan/business/calendars/entities/CalendarAvailability.java b/libreplan-business/src/main/java/org/libreplan/business/calendars/entities/CalendarAvailability.java index dac696272..144cde82c 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/calendars/entities/CalendarAvailability.java +++ b/libreplan-business/src/main/java/org/libreplan/business/calendars/entities/CalendarAvailability.java @@ -25,6 +25,7 @@ import java.util.Comparator; import java.util.Date; import org.hibernate.validator.NotNull; +import org.joda.time.Interval; import org.joda.time.LocalDate; import org.libreplan.business.calendars.daos.ICalendarAvailabilityDAO; import org.libreplan.business.common.IntegrationEntity; @@ -126,4 +127,40 @@ public class CalendarAvailability extends IntegrationEntity { return Registry.getCalendarAvailabilityDAO(); } + public boolean isActiveBetween(LocalDate filterStartDate, + LocalDate filterEndDate) { + if (filterStartDate == null && filterEndDate == null) { + return true; + } + + if (filterStartDate == null) { + if (endDate == null) { + return startDate.compareTo(filterEndDate) <= 0; + } + return startDate.compareTo(filterEndDate) <= 0 + || endDate.compareTo(filterEndDate) <= 0; + } + + if (filterEndDate == null) { + if (endDate == null) { + return true; + } + return startDate.compareTo(filterStartDate) >= 0 + || endDate.compareTo(filterStartDate) >= 0; + } + + if (endDate == null) { + return startDate.compareTo(filterStartDate) >= 0 + && startDate.compareTo(filterEndDate) <= 0; + } + + Interval filterPeriod = new Interval( + filterStartDate.toDateTimeAtStartOfDay(), filterEndDate + .plusDays(1).toDateTimeAtStartOfDay()); + Interval activationPeriod = new Interval( + startDate.toDateTimeAtStartOfDay(), endDate.plusDays(1) + .toDateTimeAtStartOfDay()); + return filterPeriod.overlaps(activationPeriod); + } + } diff --git a/libreplan-business/src/main/java/org/libreplan/business/calendars/entities/ResourceCalendar.java b/libreplan-business/src/main/java/org/libreplan/business/calendars/entities/ResourceCalendar.java index 4803be641..57b3ad2ae 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/calendars/entities/ResourceCalendar.java +++ b/libreplan-business/src/main/java/org/libreplan/business/calendars/entities/ResourceCalendar.java @@ -88,4 +88,5 @@ public class ResourceCalendar extends BaseCalendar { public Boolean isCodeAutogenerated() { return true; } + } diff --git a/libreplan-business/src/main/java/org/libreplan/business/resources/entities/Resource.java b/libreplan-business/src/main/java/org/libreplan/business/resources/entities/Resource.java index df0202f05..f0038176e 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/resources/entities/Resource.java +++ b/libreplan-business/src/main/java/org/libreplan/business/resources/entities/Resource.java @@ -1199,4 +1199,8 @@ public abstract class Resource extends IntegrationEntity implements return true; } + public boolean isActiveBetween(LocalDate startDate, LocalDate endDate) { + return calendar.isActiveBetween(startDate, endDate); + } + } diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/resourceload/ResourceLoadModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/resourceload/ResourceLoadModel.java index f33fdb256..0836720a7 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/resourceload/ResourceLoadModel.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/resourceload/ResourceLoadModel.java @@ -309,7 +309,9 @@ public class ResourceLoadModel implements IResourceLoadModel { if (parameters.thereIsCurrentOrder()) { return resourcesForActiveTasks(); } else { - return allResources(); + return allResourcesActiveBetween( + parameters.getInitDateFilter(), + parameters.getEndDateFilter()); } } @@ -319,6 +321,23 @@ public class ResourceLoadModel implements IResourceLoadModel { .getResourcesRelatedWithAllocations()); } + private List allResourcesActiveBetween( + LocalDate startDate, LocalDate endDate) { + List allResources = allResources(); + if (startDate == null && endDate == null) { + return allResources; + } + + List resources = new ArrayList(); + for (Resource resource : allResources) { + if (resource + .isActiveBetween(startDate, endDate)) { + resources.add(resource); + } + } + return resources; + } + private List allResources() { return Resource.sortByName(resourcesDAO .list(Resource.class));