ItEr23S08CUEdicionCalendarioLaboral: Checking and managing errors on date when creating a new version.

This commit is contained in:
Manuel Rego Casasnovas 2009-08-27 20:35:14 +02:00 committed by Óscar González Fernández
parent 41112a11ec
commit fb14f125f4
5 changed files with 40 additions and 23 deletions

View file

@ -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");
}
}

View file

@ -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);

View file

@ -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());
}
}

View file

@ -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);

View file

@ -48,7 +48,7 @@
</hbox>
<hbox>
<button label="${i18n:_('Create')}"
onClick="controller.aceptCreateNewVersion(dateValidFromNewVersion.value);" />
onClick="controller.acceptCreateNewVersion();" />
<button label="${i18n:_('Cancel')}"
onClick="controller.cancelNewVersion();" />
</hbox>