From 652dc8393e978e68b493936eceec08192e61b05b Mon Sep 17 00:00:00 2001 From: Susana Montes Pedreira Date: Tue, 21 Jun 2011 09:38:58 +0200 Subject: [PATCH] It does not must permit overwrite another whole work week when a new work week is created. FEA: ItEr75S05CalendarAdminInterfaceItEr74S06 --- .../calendars/entities/BaseCalendar.java | 51 ++++++++++++++++--- .../web/calendars/BaseCalendarModel.java | 1 + .../web/calendars/IBaseCalendarModel.java | 5 +- 3 files changed, 47 insertions(+), 10 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 f4a55dba1..b0bd33b88 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 @@ -408,24 +408,43 @@ public class BaseCalendar extends IntegrationEntity implements ICalendar { LocalDate expiringDate) { for (CalendarData nextVersion : calendarDataVersions) { if ((nextVersion.getExpiringDate() == null) - || (expiringDate.compareTo(nextVersion.getExpiringDate()) < 0)) { + || (expiringDate.compareTo(nextVersion.getExpiringDate()) <= 0)) { int index = calendarDataVersions.indexOf(nextVersion); if (index > 0) { CalendarData prevVersion = calendarDataVersions .get(index - 1); + if (newIntervalIncludeAnotherWorkWeek(startDate, + expiringDate, prevVersion, nextVersion)) { + throw new IllegalArgumentException( + "the new version includes a whole version already exists"); + } else { + LocalDate prevExpiringDate = prevVersion + .getExpiringDate(); + LocalDate nextExpiringDate = nextVersion + .getExpiringDate(); + BaseCalendar oldParent = nextVersion.getParent(); - if (startDate.compareTo(prevVersion.getExpiringDate()) >= 0) { - prevVersion.setExpiringDate(startDate); + if (startDate.compareTo(prevExpiringDate) > 0) { + CalendarData prevCalendarData = CalendarData + .create(); + prevCalendarData.setExpiringDate(startDate); + prevCalendarData.setParent(oldParent); + calendarDataVersions.add(prevCalendarData); + } else { + prevVersion.setExpiringDate(startDate); + } CalendarData newCalendarData = CalendarData.create(); newCalendarData.setExpiringDate(expiringDate); calendarDataVersions.add(newCalendarData); + + if (expiringDate.compareTo(nextExpiringDate) >= 0) { + calendarDataVersions.remove(nextVersion); + } + Collections.sort(calendarDataVersions, CalendarData.BY_EXPIRING_DATE_COMPARATOR); return newCalendarData; - }else{ - throw new IllegalArgumentException( - "the new version includes a whole version already exists"); } } else { throw new IllegalArgumentException( @@ -434,7 +453,25 @@ public class BaseCalendar extends IntegrationEntity implements ICalendar { } } throw new IllegalArgumentException( - "the new version will be the last one, and the expiring date must be empty"); + "Wrong expiring date : the new version will be the last one, and the expiring date must be empty"); + } + + public boolean newIntervalIncludeAnotherWorkWeek(LocalDate startDate, + LocalDate expiringDate, CalendarData prevVersion, + CalendarData nextVersion) { + if ((startDate.compareTo(prevVersion.getExpiringDate()) <= 0) + && (expiringDate.compareTo(nextVersion.getExpiringDate()) >= 0)) { + return true; + } + int indexPrevOfPrev = calendarDataVersions.indexOf(prevVersion); + if (indexPrevOfPrev > 0) { + CalendarData prevOfPrev = (CalendarData) calendarDataVersions + .get(indexPrevOfPrev - 1); + if (startDate.compareTo(prevOfPrev.getExpiringDate()) <= 0) { + return true; + } + } + return false; } public CalendarData createLastVersion(LocalDate startDate) diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/calendars/BaseCalendarModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/calendars/BaseCalendarModel.java index 64f36f6e4..95a197776 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/calendars/BaseCalendarModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/calendars/BaseCalendarModel.java @@ -23,6 +23,7 @@ package org.navalplanner.web.calendars; import static org.navalplanner.web.I18nHelper._; +import java.util.Date; import java.util.HashSet; import java.util.List; import java.util.Set; diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/calendars/IBaseCalendarModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/calendars/IBaseCalendarModel.java index e1669533f..ef54c4fd5 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/calendars/IBaseCalendarModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/calendars/IBaseCalendarModel.java @@ -21,19 +21,18 @@ package org.navalplanner.web.calendars; -import java.util.Date; import java.util.List; import java.util.Set; import org.joda.time.LocalDate; import org.navalplanner.business.calendars.entities.BaseCalendar; -import org.navalplanner.business.calendars.entities.BaseCalendar.DayType; import org.navalplanner.business.calendars.entities.CalendarAvailability; import org.navalplanner.business.calendars.entities.CalendarData; -import org.navalplanner.business.calendars.entities.CalendarData.Days; import org.navalplanner.business.calendars.entities.CalendarException; import org.navalplanner.business.calendars.entities.CalendarExceptionType; import org.navalplanner.business.calendars.entities.Capacity; +import org.navalplanner.business.calendars.entities.BaseCalendar.DayType; +import org.navalplanner.business.calendars.entities.CalendarData.Days; import org.navalplanner.business.common.exceptions.ValidationException; import org.navalplanner.business.workingday.EffortDuration; import org.navalplanner.web.common.IIntegrationEntityModel;