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 14b207104..228da3ba1 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 @@ -432,15 +432,6 @@ public class BaseCalendar extends BaseEntity implements IValidable { return derivedCalendar; } - /** - * Creates a new version this {@link BaseCalendar} from the current moment. - * It makes that the current calendar expires in the current date. And the - * new calendar will be used from now onwards. - */ - public BaseCalendar newVersion() throws IllegalArgumentException { - return newVersion(new LocalDate()); - } - /** * Creates a new version this {@link BaseCalendar} from the specific date. * It makes that the current calendar expires in the specific date. And the @@ -457,6 +448,11 @@ public class BaseCalendar extends BaseEntity implements IValidable { */ public BaseCalendar newVersion(LocalDate date) throws IllegalArgumentException { + if (date.compareTo(new LocalDate()) <= 0) { + throw new IllegalArgumentException( + "Date for new version must be greater than current date"); + } + if (nextCalendar != null) { return nextCalendar.newVersion(date); } @@ -464,7 +460,8 @@ public class BaseCalendar extends BaseEntity implements IValidable { if (previousCalendar != null) { if (date.compareTo(previousCalendar.getExpiringDate()) <= 0) { throw new IllegalArgumentException( - "Version date must be greater than expiring date of previous calendars"); + "Version date must be greater than expiring date of " + + "all versions of this calendar"); } } diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/calendars/daos/BaseCalendarDAOTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/calendars/daos/BaseCalendarDAOTest.java index cca2fbd92..c36f019ff 100644 --- a/navalplanner-business/src/test/java/org/navalplanner/business/test/calendars/daos/BaseCalendarDAOTest.java +++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/calendars/daos/BaseCalendarDAOTest.java @@ -13,6 +13,7 @@ import static org.navalplanner.business.test.BusinessGlobalNames.BUSINESS_SPRING import java.util.List; import org.hibernate.SessionFactory; +import org.joda.time.LocalDate; import org.junit.Test; import org.junit.runner.RunWith; import org.navalplanner.business.calendars.daos.BaseCalendarDAO; @@ -94,7 +95,8 @@ public class BaseCalendarDAOTest { BaseCalendar calendar = BaseCalendarTest.createBasicCalendar(); baseCalendarDAO.save(calendar); - BaseCalendar nextCalendar = calendar.newVersion(); + BaseCalendar nextCalendar = calendar.newVersion((new LocalDate()) + .plusDays(1)); baseCalendarDAO.save(nextCalendar); try { @@ -138,7 +140,8 @@ public class BaseCalendarDAOTest { public void removeVersions() throws InstanceNotFoundException { BaseCalendar calendar = BaseCalendarTest.createBasicCalendar(); baseCalendarDAO.save(calendar); - BaseCalendar newCalendar = calendar.newVersion(); + BaseCalendar newCalendar = calendar.newVersion((new LocalDate()) + .plusDays(1)); baseCalendarDAO.save(newCalendar); baseCalendarDAO.flush(); @@ -189,7 +192,8 @@ public class BaseCalendarDAOTest { assertThat(baseCalendarDAO.findLastVersions().size(), equalTo(1)); - BaseCalendar newCalendar = calendar.newVersion(); + BaseCalendar newCalendar = calendar.newVersion((new LocalDate()) + .plusDays(1)); baseCalendarDAO.save(newCalendar); baseCalendarDAO.flush(); @@ -213,7 +217,8 @@ public class BaseCalendarDAOTest { assertThat(baseCalendarDAO.findByParent(parent1).get(0).getId(), equalTo(calendar.getId())); - BaseCalendar newVersion = calendar.newVersion(); + BaseCalendar newVersion = calendar.newVersion((new LocalDate()) + .plusDays(1)); newVersion.setParent(parent2); baseCalendarDAO.save(newVersion); diff --git a/navalplanner-business/src/test/java/org/navalplanner/business/test/calendars/entities/BaseCalendarTest.java b/navalplanner-business/src/test/java/org/navalplanner/business/test/calendars/entities/BaseCalendarTest.java index 159f8514f..cd3f70e2d 100644 --- a/navalplanner-business/src/test/java/org/navalplanner/business/test/calendars/entities/BaseCalendarTest.java +++ b/navalplanner-business/src/test/java/org/navalplanner/business/test/calendars/entities/BaseCalendarTest.java @@ -199,7 +199,8 @@ public class BaseCalendarTest { @Test public void testCreateNewVersion() { BaseCalendar calendar = createBasicCalendar(); - BaseCalendar nextCalendar = calendar.newVersion(); + BaseCalendar nextCalendar = calendar.newVersion((new LocalDate()) + .plusDays(1)); assertThat(calendar, equalTo(nextCalendar.getPreviousCalendar())); assertThat(nextCalendar, equalTo(calendar.getNextCalendar())); @@ -632,8 +633,7 @@ public class BaseCalendarTest { public void testNotAllowSetExpiringDateInThePast() { BaseCalendar calendar = createBasicCalendar(); - LocalDate pastMonth = (new LocalDate()).minusMonths(1); - calendar.newVersion(pastMonth); + calendar.newVersion((new LocalDate()).plusDays(1)); LocalDate pastWeek = (new LocalDate()).minusWeeks(1); try { @@ -644,4 +644,11 @@ public class BaseCalendarTest { } } + @Test(expected = IllegalArgumentException.class) + public void testNotAllowNewVersionOnCurrentDate() { + BaseCalendar calendar = createBasicCalendar(); + + calendar.newVersion(new LocalDate()); + } + } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/calendars/BaseCalendarCRUDController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/calendars/BaseCalendarCRUDController.java index 7b24d6c8a..ea2b0df8a 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/calendars/BaseCalendarCRUDController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/calendars/BaseCalendarCRUDController.java @@ -41,6 +41,7 @@ import org.zkoss.zul.Treecell; import org.zkoss.zul.Treeitem; import org.zkoss.zul.TreeitemRenderer; import org.zkoss.zul.Treerow; +import org.zkoss.zul.api.Datebox; import org.zkoss.zul.api.Window; /** @@ -756,7 +757,7 @@ public class BaseCalendarCRUDController extends GenericForwardComposer { } public Date getDateValidFromNewVersion() { - return new Date(); + return (new LocalDate()).plusDays(1).toDateTimeAtStartOfDay().toDate(); } public void setDateValidFromNewVersion(Date date) { @@ -777,11 +778,18 @@ public class BaseCalendarCRUDController extends GenericForwardComposer { } } - public void aceptCreateNewVersion(Date date) { - // TODO manage errors if date is current date or date is not greater - // than last expiring date - baseCalendarModel.createNewVersion(date); + public void acceptCreateNewVersion() { + Component component = createNewVersion + .getFellow("dateValidFromNewVersion"); + Date date = ((Datebox) component).getValue(); + try { + baseCalendarModel.createNewVersion(date); + } catch (IllegalArgumentException e) { + throw new WrongValueException(component, e.getMessage()); + } + + Clients.closeErrorBox(component); creatingNewVersion = false; Util.reloadBindings(createNewVersion); setSelectedDay(date); diff --git a/navalplanner-webapp/src/main/webapp/calendars/calendars.zul b/navalplanner-webapp/src/main/webapp/calendars/calendars.zul index 6a83007ec..ec26cc7ba 100644 --- a/navalplanner-webapp/src/main/webapp/calendars/calendars.zul +++ b/navalplanner-webapp/src/main/webapp/calendars/calendars.zul @@ -48,7 +48,7 @@