ItEr22S08CUAltaCalendarioLaboralItEr21S10: Allowing to change the parent when creating or editing a derived calendar. Creating a new version when a calendar is edited.
This commit is contained in:
parent
36d251e730
commit
cd5a88b405
6 changed files with 189 additions and 30 deletions
|
|
@ -136,6 +136,27 @@ public class BaseCalendar extends BaseEntity implements IValidable {
|
|||
return expiringDate;
|
||||
}
|
||||
|
||||
public void setExpiringDate(Date expiringDate)
|
||||
throws UnsupportedOperationException, IllegalArgumentException {
|
||||
setExpiringDate(new LocalDate(expiringDate));
|
||||
}
|
||||
|
||||
public void setExpiringDate(LocalDate expiringDate)
|
||||
throws UnsupportedOperationException, IllegalArgumentException {
|
||||
if (nextCalendar == null) {
|
||||
throw new UnsupportedOperationException(
|
||||
"Can not set the expiring date "
|
||||
+ "because of it does not have a next calendar");
|
||||
}
|
||||
if (previousCalendar != null) {
|
||||
if (previousCalendar.getExpiringDate().compareTo(expiringDate) <= 0) {
|
||||
throw new IllegalArgumentException(
|
||||
"Expering date must be greater than expiring date of previous calendars");
|
||||
}
|
||||
}
|
||||
this.expiringDate = expiringDate;
|
||||
}
|
||||
|
||||
public Set<ExceptionDay> getOwnExceptions() {
|
||||
return Collections.unmodifiableSet(exceptions);
|
||||
}
|
||||
|
|
@ -219,6 +240,12 @@ public class BaseCalendar extends BaseEntity implements IValidable {
|
|||
}
|
||||
|
||||
public ExceptionDay getOwnExceptionDay(LocalDate date) {
|
||||
if (shouldUsePreviousCalendar(date)) {
|
||||
return previousCalendar.getOwnExceptionDay(date);
|
||||
} else if (shouldUseNextCalendar(date)) {
|
||||
return nextCalendar.getOwnExceptionDay(date);
|
||||
}
|
||||
|
||||
for (ExceptionDay exceptionDay : exceptions) {
|
||||
if (exceptionDay.getDate().equals(date)) {
|
||||
return exceptionDay;
|
||||
|
|
@ -233,6 +260,12 @@ public class BaseCalendar extends BaseEntity implements IValidable {
|
|||
}
|
||||
|
||||
public ExceptionDay getExceptionDay(LocalDate date) {
|
||||
if (shouldUsePreviousCalendar(date)) {
|
||||
return previousCalendar.getExceptionDay(date);
|
||||
} else if (shouldUseNextCalendar(date)) {
|
||||
return nextCalendar.getExceptionDay(date);
|
||||
}
|
||||
|
||||
for (ExceptionDay exceptionDay : getExceptions()) {
|
||||
if (exceptionDay.getDate().equals(date)) {
|
||||
return exceptionDay;
|
||||
|
|
@ -438,7 +471,7 @@ public class BaseCalendar extends BaseEntity implements IValidable {
|
|||
public DayType getType(LocalDate date) {
|
||||
ExceptionDay exceptionDay = getExceptionDay(date);
|
||||
if (exceptionDay != null) {
|
||||
if (exceptions.contains(exceptionDay)) {
|
||||
if (getOwnExceptionDay(date) != null) {
|
||||
return DayType.OWN_EXCEPTION;
|
||||
}
|
||||
return DayType.ANCESTOR_EXCEPTION;
|
||||
|
|
|
|||
|
|
@ -83,9 +83,9 @@ public class BaseCalendarCRUDController extends GenericForwardComposer {
|
|||
public void goToEditForm(BaseCalendar baseCalendar) {
|
||||
baseCalendarModel.initEdit(baseCalendar);
|
||||
if (baseCalendarModel.isDerived()) {
|
||||
markSelecedParentCombo();
|
||||
prepareParentCombo();
|
||||
}
|
||||
selectDay(new Date());
|
||||
setSelectedDay(new Date());
|
||||
getVisibility().showOnly(editWindow);
|
||||
Util.reloadBindings(editWindow);
|
||||
}
|
||||
|
|
@ -149,7 +149,7 @@ public class BaseCalendarCRUDController extends GenericForwardComposer {
|
|||
|
||||
public void goToCreateForm() {
|
||||
baseCalendarModel.initCreate();
|
||||
selectDay(new Date());
|
||||
setSelectedDay(new Date());
|
||||
getVisibility().showOnly(createWindow);
|
||||
Util.reloadBindings(createWindow);
|
||||
}
|
||||
|
|
@ -162,12 +162,20 @@ public class BaseCalendarCRUDController extends GenericForwardComposer {
|
|||
return visibility;
|
||||
}
|
||||
|
||||
public void selectDay(Date date) {
|
||||
baseCalendarModel.selectDay(date);
|
||||
public void setSelectedDay(Date date) {
|
||||
baseCalendarModel.setSelectedDay(date);
|
||||
|
||||
reloadCurrentWindow();
|
||||
}
|
||||
|
||||
public Date getSelectedDay() {
|
||||
Date selectedDay = baseCalendarModel.getSelectedDay();
|
||||
if (selectedDay == null) {
|
||||
return new Date();
|
||||
}
|
||||
return selectedDay;
|
||||
}
|
||||
|
||||
public String getTypeOfDay() {
|
||||
DayType typeOfDay = baseCalendarModel.getTypeOfDay();
|
||||
if (typeOfDay == null) {
|
||||
|
|
@ -307,14 +315,14 @@ public class BaseCalendarCRUDController extends GenericForwardComposer {
|
|||
public void goToCreateDerivedForm(BaseCalendar baseCalendar) {
|
||||
baseCalendarModel.initCreateDerived(baseCalendar);
|
||||
if (baseCalendarModel.isDerived()) {
|
||||
markSelecedParentCombo();
|
||||
prepareParentCombo();
|
||||
}
|
||||
selectDay(new Date());
|
||||
setSelectedDay(new Date());
|
||||
getVisibility().showOnly(createWindow);
|
||||
Util.reloadBindings(createWindow);
|
||||
}
|
||||
|
||||
private void markSelecedParentCombo() {
|
||||
private void prepareParentCombo() {
|
||||
Combobox parentCalendars;
|
||||
if (baseCalendarModel.isEditing()) {
|
||||
parentCalendars = (Combobox) editWindow
|
||||
|
|
@ -324,6 +332,11 @@ public class BaseCalendarCRUDController extends GenericForwardComposer {
|
|||
.getFellow("parentCalendars");
|
||||
}
|
||||
|
||||
markSelectedParentCombo(parentCalendars);
|
||||
addListenerParentCombo(parentCalendars);
|
||||
}
|
||||
|
||||
private void markSelectedParentCombo(final Combobox parentCalendars) {
|
||||
BaseCalendar parent = baseCalendarModel.getParent();
|
||||
|
||||
List<BaseCalendar> possibleParentCalendars = getParentCalendars();
|
||||
|
|
@ -336,6 +349,21 @@ public class BaseCalendarCRUDController extends GenericForwardComposer {
|
|||
}
|
||||
}
|
||||
|
||||
private void addListenerParentCombo(final Combobox parentCalendars) {
|
||||
parentCalendars.addEventListener(Events.ON_SELECT, new EventListener() {
|
||||
|
||||
@Override
|
||||
public void onEvent(Event event) throws Exception {
|
||||
BaseCalendar selected = (BaseCalendar) parentCalendars
|
||||
.getSelectedItem()
|
||||
.getValue();
|
||||
baseCalendarModel.setParent(selected);
|
||||
reloadCurrentWindow();
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
public boolean isDerived() {
|
||||
return baseCalendarModel.isDerived();
|
||||
}
|
||||
|
|
@ -351,4 +379,20 @@ public class BaseCalendarCRUDController extends GenericForwardComposer {
|
|||
return baseCalendarModel.getPossibleParentCalendars();
|
||||
}
|
||||
|
||||
public boolean isEditing() {
|
||||
return baseCalendarModel.isEditing();
|
||||
}
|
||||
|
||||
public Date getExpiringDate() {
|
||||
return baseCalendarModel.getExpiringDate();
|
||||
}
|
||||
|
||||
public void setExpiringDate(Date date) {
|
||||
try {
|
||||
baseCalendarModel.setExpiringDate(date);
|
||||
} catch (IllegalArgumentException e) {
|
||||
;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ import java.util.List;
|
|||
import org.apache.commons.lang.Validate;
|
||||
import org.hibernate.validator.ClassValidator;
|
||||
import org.hibernate.validator.InvalidValue;
|
||||
import org.joda.time.LocalDate;
|
||||
import org.navalplanner.business.calendars.daos.IBaseCalendarDAO;
|
||||
import org.navalplanner.business.calendars.entities.BaseCalendar;
|
||||
import org.navalplanner.business.calendars.entities.ExceptionDay;
|
||||
|
|
@ -52,7 +53,7 @@ public class BaseCalendarModel implements IBaseCalendarModel {
|
|||
@Override
|
||||
@Transactional(readOnly = true)
|
||||
public List<BaseCalendar> getBaseCalendars() {
|
||||
return baseCalendarDAO.getBaseCalendars();
|
||||
return baseCalendarDAO.findLastVersions();
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -72,8 +73,8 @@ public class BaseCalendarModel implements IBaseCalendarModel {
|
|||
editing = true;
|
||||
Validate.notNull(baseCalendar);
|
||||
|
||||
this.baseCalendar = getFromDB(baseCalendar);
|
||||
forceLoadExceptionDays(this.baseCalendar);
|
||||
this.baseCalendar = getFromDB(baseCalendar).newVersion();
|
||||
forceLoadHoursPerDayAndExceptionDays(this.baseCalendar);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -83,7 +84,7 @@ public class BaseCalendarModel implements IBaseCalendarModel {
|
|||
Validate.notNull(baseCalendar);
|
||||
|
||||
this.baseCalendar = getFromDB(baseCalendar).newDerivedCalendar();
|
||||
forceLoadExceptionDays(this.baseCalendar);
|
||||
forceLoadHoursPerDayAndExceptionDays(this.baseCalendar);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -91,17 +92,37 @@ public class BaseCalendarModel implements IBaseCalendarModel {
|
|||
this.baseCalendar = baseCalendar;
|
||||
}
|
||||
|
||||
private void forceLoadExceptionDays(BaseCalendar baseCalendar) {
|
||||
if (baseCalendar == null) {
|
||||
return;
|
||||
}
|
||||
private void forceLoadHoursPerDayAndExceptionDays(BaseCalendar baseCalendar) {
|
||||
forceLoadHoursPerDayAndExceptionDaysBasic(baseCalendar);
|
||||
forceLoadHoursPerDayAndExceptionDaysPrevious(baseCalendar);
|
||||
forceLoadHoursPerDayAndExceptionDaysNext(baseCalendar);
|
||||
}
|
||||
|
||||
private void forceLoadHoursPerDayAndExceptionDaysBasic(BaseCalendar baseCalendar) {
|
||||
baseCalendar.getHoursPerDay().size();
|
||||
baseCalendar.getExceptions().size();
|
||||
|
||||
forceLoadExceptionDays(baseCalendar.getParent());
|
||||
forceLoadExceptionDays(baseCalendar.getPreviousCalendar());
|
||||
forceLoadExceptionDays(baseCalendar.getNextCalendar());
|
||||
if (baseCalendar.getParent() != null) {
|
||||
forceLoadHoursPerDayAndExceptionDaysBasic(baseCalendar.getParent());
|
||||
}
|
||||
}
|
||||
|
||||
private void forceLoadHoursPerDayAndExceptionDaysPrevious(
|
||||
BaseCalendar baseCalendar) {
|
||||
if (baseCalendar.getPreviousCalendar() != null) {
|
||||
forceLoadHoursPerDayAndExceptionDaysBasic(baseCalendar.getPreviousCalendar());
|
||||
forceLoadHoursPerDayAndExceptionDaysPrevious(baseCalendar
|
||||
.getPreviousCalendar());
|
||||
}
|
||||
}
|
||||
|
||||
private void forceLoadHoursPerDayAndExceptionDaysNext(
|
||||
BaseCalendar baseCalendar) {
|
||||
if (baseCalendar.getNextCalendar() != null) {
|
||||
forceLoadHoursPerDayAndExceptionDaysBasic(baseCalendar.getNextCalendar());
|
||||
forceLoadHoursPerDayAndExceptionDaysNext(baseCalendar
|
||||
.getNextCalendar());
|
||||
}
|
||||
}
|
||||
|
||||
@Transactional(readOnly = true)
|
||||
|
|
@ -121,13 +142,21 @@ public class BaseCalendarModel implements IBaseCalendarModel {
|
|||
@Override
|
||||
@Transactional(readOnly = true)
|
||||
public List<BaseCalendar> getPossibleParentCalendars() {
|
||||
List<BaseCalendar> baseCalendars = baseCalendarDAO.getBaseCalendars();
|
||||
List<BaseCalendar> baseCalendars = getBaseCalendars();
|
||||
|
||||
if (baseCalendar != null) {
|
||||
for (BaseCalendar calendar : baseCalendars) {
|
||||
if (calendar.getId().equals(baseCalendar.getId())) {
|
||||
baseCalendars.remove(calendar);
|
||||
break;
|
||||
if (isEditing()) {
|
||||
if (calendar.getId().equals(
|
||||
baseCalendar.getPreviousCalendar().getId())) {
|
||||
baseCalendars.remove(calendar);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
if (calendar.getId().equals(baseCalendar.getId())) {
|
||||
baseCalendars.remove(calendar);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -150,10 +179,15 @@ public class BaseCalendarModel implements IBaseCalendarModel {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void selectDay(Date date) {
|
||||
public void setSelectedDay(Date date) {
|
||||
this.selectedDate = date;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Date getSelectedDay() {
|
||||
return this.selectedDate;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true)
|
||||
public Integer getHoursOfDay() {
|
||||
|
|
@ -257,6 +291,21 @@ public class BaseCalendarModel implements IBaseCalendarModel {
|
|||
return baseCalendar.getParent();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true)
|
||||
public void setParent(BaseCalendar parent) {
|
||||
try {
|
||||
parent = baseCalendarDAO.find(parent.getId());
|
||||
} catch (InstanceNotFoundException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
forceLoadHoursPerDayAndExceptionDays(parent);
|
||||
|
||||
if (baseCalendar != null) {
|
||||
baseCalendar.setParent(parent);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true)
|
||||
public boolean isParent() {
|
||||
|
|
@ -267,6 +316,26 @@ public class BaseCalendarModel implements IBaseCalendarModel {
|
|||
return !baseCalendarDAO.findByParent(baseCalendar).isEmpty();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Date getExpiringDate() {
|
||||
if ((baseCalendar != null)
|
||||
&& (baseCalendar.getPreviousCalendar() != null)) {
|
||||
LocalDate expiringDate = baseCalendar.getPreviousCalendar()
|
||||
.getExpiringDate();
|
||||
return expiringDate.toDateTimeAtStartOfDay().toDate();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setExpiringDate(Date date) {
|
||||
if ((baseCalendar != null)
|
||||
&& (baseCalendar.getPreviousCalendar() != null)) {
|
||||
baseCalendar.getPreviousCalendar().setExpiringDate(date);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Final conversation steps
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -65,7 +65,9 @@ public interface IBaseCalendarModel {
|
|||
|
||||
boolean isEditing();
|
||||
|
||||
void selectDay(Date date);
|
||||
void setSelectedDay(Date date);
|
||||
|
||||
Date getSelectedDay();
|
||||
|
||||
DayType getTypeOfDay();
|
||||
|
||||
|
|
@ -93,8 +95,14 @@ public interface IBaseCalendarModel {
|
|||
|
||||
BaseCalendar getParent();
|
||||
|
||||
void setParent(BaseCalendar parent);
|
||||
|
||||
boolean isParent();
|
||||
|
||||
Date getExpiringDate();
|
||||
|
||||
void setExpiringDate(Date date);
|
||||
|
||||
/*
|
||||
* Final conversation steps
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -37,8 +37,7 @@
|
|||
</vbox>
|
||||
|
||||
<vbox id="dayInformation">
|
||||
<calendar id="calendarWidget"
|
||||
onChange="controller.selectDay(calendarWidget.value);" />
|
||||
<calendar id="calendarWidget" value="@{controller.selectedDay}" />
|
||||
|
||||
<hbox>
|
||||
<label value="Type of day" />
|
||||
|
|
@ -64,6 +63,11 @@
|
|||
|
||||
</hbox>
|
||||
|
||||
<hbox visible="@{controller.isEditing}">
|
||||
<label value="Valid from" />
|
||||
<datebox value="@{controller.expiringDate}" />
|
||||
</hbox>
|
||||
|
||||
<hbox>
|
||||
<button onClick="controller.save();"
|
||||
label="${arg.save_button_label}" />
|
||||
|
|
|
|||
|
|
@ -67,12 +67,13 @@ public class BaseCalendarModelTest {
|
|||
|
||||
BaseCalendar baseCalendar = baseCalendarModel.getBaseCalendars().get(0);
|
||||
baseCalendarModel.initEdit(baseCalendar);
|
||||
setHours(baseCalendar, 4);
|
||||
setHours(baseCalendarModel.getBaseCalendar(), 4);
|
||||
try {
|
||||
baseCalendarModel.confirmSave();
|
||||
|
||||
assertThat(baseCalendarModel.getBaseCalendars().size(), equalTo(1));
|
||||
assertThat(baseCalendarModel.getBaseCalendars().get(0).getId(),
|
||||
assertThat(baseCalendarModel.getBaseCalendars().get(0)
|
||||
.getPreviousCalendar().getId(),
|
||||
equalTo(baseCalendar.getId()));
|
||||
assertThat(baseCalendarModel.getBaseCalendars().get(0).getHours(
|
||||
Days.MONDAY), equalTo(4));
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue