ItEr24S10CUAsignacionCalendarioLaboralRecursoItEr23S13: Creating a new controller that could be used from other parts of the application.
This commit is contained in:
parent
bac872a4a6
commit
ee71f16b57
5 changed files with 645 additions and 496 deletions
|
|
@ -2,19 +2,10 @@ package org.navalplanner.web.calendars;
|
|||
|
||||
import static org.navalplanner.web.I18nHelper._;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.joda.time.LocalDate;
|
||||
import org.navalplanner.business.calendars.entities.BaseCalendar;
|
||||
import org.navalplanner.business.calendars.entities.CalendarData;
|
||||
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.web.common.IMessagesForUser;
|
||||
import org.navalplanner.web.common.Level;
|
||||
|
|
@ -23,28 +14,19 @@ import org.navalplanner.web.common.OnlyOneVisible;
|
|||
import org.navalplanner.web.common.Util;
|
||||
import org.navalplanner.web.common.components.CalendarHighlightedDays;
|
||||
import org.zkoss.zk.ui.Component;
|
||||
import org.zkoss.zk.ui.WrongValueException;
|
||||
import org.zkoss.zk.ui.event.Event;
|
||||
import org.zkoss.zk.ui.event.EventListener;
|
||||
import org.zkoss.zk.ui.event.Events;
|
||||
import org.zkoss.zk.ui.util.Clients;
|
||||
import org.zkoss.zk.ui.util.GenericForwardComposer;
|
||||
import org.zkoss.zul.Button;
|
||||
import org.zkoss.zul.Checkbox;
|
||||
import org.zkoss.zul.Combobox;
|
||||
import org.zkoss.zul.Comboitem;
|
||||
import org.zkoss.zul.Intbox;
|
||||
import org.zkoss.zul.Label;
|
||||
import org.zkoss.zul.Listcell;
|
||||
import org.zkoss.zul.Listitem;
|
||||
import org.zkoss.zul.ListitemRenderer;
|
||||
import org.zkoss.zul.SimpleTreeNode;
|
||||
import org.zkoss.zul.Tab;
|
||||
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;
|
||||
|
||||
/**
|
||||
|
|
@ -68,19 +50,17 @@ public class BaseCalendarCRUDController extends GenericForwardComposer {
|
|||
|
||||
private boolean confirmingRemove = false;
|
||||
|
||||
private boolean creatingNewVersion = false;
|
||||
|
||||
private OnlyOneVisible visibility;
|
||||
|
||||
private IMessagesForUser messagesForUser;
|
||||
|
||||
private Component messagesContainer;
|
||||
|
||||
private HoursPerDayRenderer hoursPerDayRenderer = new HoursPerDayRenderer();
|
||||
|
||||
private BaseCalendarsTreeitemRenderer baseCalendarsTreeitemRenderer = new BaseCalendarsTreeitemRenderer();
|
||||
|
||||
private HistoryVersionsRenderer historyVersionsRenderer = new HistoryVersionsRenderer();
|
||||
private BaseCalendarEditionController createController;
|
||||
|
||||
private BaseCalendarEditionController editionController;
|
||||
|
||||
public BaseCalendar getBaseCalendar() {
|
||||
return baseCalendarModel.getBaseCalendar();
|
||||
|
|
@ -105,6 +85,7 @@ public class BaseCalendarCRUDController extends GenericForwardComposer {
|
|||
}
|
||||
|
||||
public void goToEditForm(BaseCalendar baseCalendar) {
|
||||
assignEditionController();
|
||||
baseCalendarModel.initEdit(baseCalendar);
|
||||
if (baseCalendarModel.isDerived()) {
|
||||
prepareParentCombo();
|
||||
|
|
@ -186,6 +167,7 @@ public class BaseCalendarCRUDController extends GenericForwardComposer {
|
|||
}
|
||||
|
||||
public void goToCreateForm() {
|
||||
assignCreateController();
|
||||
baseCalendarModel.initCreate();
|
||||
setSelectedDay(new Date());
|
||||
highlightDaysOnCalendar();
|
||||
|
|
@ -193,180 +175,54 @@ public class BaseCalendarCRUDController extends GenericForwardComposer {
|
|||
Util.reloadBindings(createWindow);
|
||||
}
|
||||
|
||||
private OnlyOneVisible getVisibility() {
|
||||
if (visibility == null) {
|
||||
visibility = new OnlyOneVisible(listWindow, createWindow,
|
||||
editWindow);
|
||||
}
|
||||
return visibility;
|
||||
}
|
||||
|
||||
public void setSelectedDay(Date date) {
|
||||
baseCalendarModel.setSelectedDay(date);
|
||||
|
||||
reloadDayInformation();
|
||||
}
|
||||
|
||||
public Date getSelectedDay() {
|
||||
Date selectedDay = baseCalendarModel.getSelectedDay();
|
||||
if (selectedDay == null) {
|
||||
return new Date();
|
||||
}
|
||||
return selectedDay;
|
||||
}
|
||||
private void assignEditionController() {
|
||||
editionController = new BaseCalendarEditionController(
|
||||
baseCalendarModel, editWindow, createNewVersion) {
|
||||
|
||||
public String getTypeOfDay() {
|
||||
DayType typeOfDay = baseCalendarModel.getTypeOfDay();
|
||||
if (typeOfDay == null) {
|
||||
return "";
|
||||
}
|
||||
|
||||
switch (typeOfDay) {
|
||||
case ANCESTOR_EXCEPTION:
|
||||
return _("Derived excpetion");
|
||||
case OWN_EXCEPTION:
|
||||
return _("Exception");
|
||||
case ZERO_HOURS:
|
||||
return _("Not working day");
|
||||
case NORMAL:
|
||||
default:
|
||||
return _("Normal");
|
||||
}
|
||||
}
|
||||
|
||||
public Integer getHoursOfDay() {
|
||||
return baseCalendarModel.getHoursOfDay();
|
||||
}
|
||||
|
||||
public void createException() {
|
||||
Component exceptionHoursIntbox;
|
||||
if (baseCalendarModel.isEditing()) {
|
||||
exceptionHoursIntbox = editWindow.getFellow("exceptionHours");
|
||||
} else {
|
||||
exceptionHoursIntbox = createWindow.getFellow("exceptionHours");
|
||||
}
|
||||
|
||||
Integer hours = ((Intbox) exceptionHoursIntbox).getValue();
|
||||
|
||||
if (hours < 0) {
|
||||
throw new WrongValueException(
|
||||
exceptionHoursIntbox,
|
||||
_("Hours for an exception day should be greater or equal than zero"));
|
||||
} else {
|
||||
Clients.closeErrorBox(exceptionHoursIntbox);
|
||||
baseCalendarModel.createException(hours);
|
||||
reloadDayInformation();
|
||||
}
|
||||
}
|
||||
|
||||
public List<Days> getHoursPerDay() {
|
||||
return Arrays.asList(Days.values());
|
||||
}
|
||||
|
||||
public boolean isNotExceptional() {
|
||||
return !baseCalendarModel.isExceptional();
|
||||
}
|
||||
|
||||
public void removeException() {
|
||||
baseCalendarModel.removeException();
|
||||
|
||||
reloadDayInformation();
|
||||
}
|
||||
|
||||
public HoursPerDayRenderer getHoursPerDayRenderer() {
|
||||
return hoursPerDayRenderer;
|
||||
}
|
||||
|
||||
public class HoursPerDayRenderer implements ListitemRenderer {
|
||||
|
||||
@Override
|
||||
public void render(Listitem item, Object data) throws Exception {
|
||||
final Days day = (Days) data;
|
||||
|
||||
Listcell labelListcell = new Listcell();
|
||||
labelListcell.appendChild(new Label(day.toString()));
|
||||
item.appendChild(labelListcell);
|
||||
|
||||
Listcell hoursListcell = new Listcell();
|
||||
final Intbox intBox = new Intbox();
|
||||
Intbox hoursIntbox = Util.bind(intBox,
|
||||
new Util.Getter<Integer>() {
|
||||
|
||||
@Override
|
||||
public Integer get() {
|
||||
return baseCalendarModel.getHours(day);
|
||||
}
|
||||
}, new Util.Setter<Integer>() {
|
||||
|
||||
@Override
|
||||
public void set(Integer value) {
|
||||
try {
|
||||
baseCalendarModel.setHours(day, value);
|
||||
} catch (IllegalArgumentException e) {
|
||||
throw new WrongValueException(intBox, e
|
||||
.getMessage());
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
hoursIntbox.addEventListener(Events.ON_CHANGE, new EventListener() {
|
||||
|
||||
@Override
|
||||
public void onEvent(Event event) throws Exception {
|
||||
reloadDayInformation();
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
if (isDateValidFromPast()) {
|
||||
hoursIntbox.setDisabled(true);
|
||||
} else if (baseCalendarModel.isDerived()
|
||||
&& baseCalendarModel.isDefault(day)) {
|
||||
hoursIntbox.setDisabled(true);
|
||||
@Override
|
||||
protected void goToList() {
|
||||
BaseCalendarCRUDController.this.goToList();
|
||||
}
|
||||
|
||||
hoursListcell.appendChild(hoursIntbox);
|
||||
item.appendChild(hoursListcell);
|
||||
};
|
||||
|
||||
if (baseCalendarModel.isDerived()) {
|
||||
Listcell defaultListcell = new Listcell();
|
||||
Checkbox defaultCheckbox = Util.bind(new Checkbox(),
|
||||
new Util.Getter<Boolean>() {
|
||||
|
||||
@Override
|
||||
public Boolean get() {
|
||||
return baseCalendarModel.isDefault(day);
|
||||
}
|
||||
}, new Util.Setter<Boolean>() {
|
||||
|
||||
@Override
|
||||
public void set(Boolean value) {
|
||||
if (value) {
|
||||
baseCalendarModel.setDefault(day);
|
||||
} else {
|
||||
baseCalendarModel.unsetDefault(day);
|
||||
}
|
||||
}
|
||||
});
|
||||
defaultCheckbox.addEventListener(Events.ON_CHECK,
|
||||
new EventListener() {
|
||||
|
||||
@Override
|
||||
public void onEvent(Event event) throws Exception {
|
||||
reloadCurrentWindow();
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
if (isDateValidFromPast()) {
|
||||
defaultCheckbox.setDisabled(true);
|
||||
}
|
||||
|
||||
defaultListcell.appendChild(defaultCheckbox);
|
||||
item.appendChild(defaultListcell);
|
||||
}
|
||||
try {
|
||||
editionController.doAfterCompose(editWindow);
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
private void assignCreateController() {
|
||||
createController = new BaseCalendarEditionController(baseCalendarModel,
|
||||
createWindow, createNewVersion) {
|
||||
|
||||
@Override
|
||||
protected void goToList() {
|
||||
BaseCalendarCRUDController.this.goToList();
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
try {
|
||||
createController.doAfterCompose(createWindow);
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
private OnlyOneVisible getVisibility() {
|
||||
if (visibility == null) {
|
||||
visibility = new OnlyOneVisible(listWindow, createWindow,
|
||||
editWindow);
|
||||
}
|
||||
return visibility;
|
||||
}
|
||||
|
||||
private void reloadCurrentWindow() {
|
||||
|
|
@ -388,6 +244,7 @@ public class BaseCalendarCRUDController extends GenericForwardComposer {
|
|||
}
|
||||
|
||||
public void goToCreateDerivedForm(BaseCalendar baseCalendar) {
|
||||
assignCreateController();
|
||||
baseCalendarModel.initCreateDerived(baseCalendar);
|
||||
if (baseCalendarModel.isDerived()) {
|
||||
prepareParentCombo();
|
||||
|
|
@ -442,17 +299,6 @@ public class BaseCalendarCRUDController extends GenericForwardComposer {
|
|||
});
|
||||
}
|
||||
|
||||
public boolean isDerived() {
|
||||
return baseCalendarModel.isDerived();
|
||||
}
|
||||
|
||||
public String getCalendarType() {
|
||||
if (baseCalendarModel.isDerived()) {
|
||||
return _("Derived");
|
||||
}
|
||||
return _("Normal");
|
||||
}
|
||||
|
||||
public List<BaseCalendar> getParentCalendars() {
|
||||
return baseCalendarModel.getPossibleParentCalendars();
|
||||
}
|
||||
|
|
@ -461,46 +307,8 @@ public class BaseCalendarCRUDController extends GenericForwardComposer {
|
|||
return baseCalendarModel.isEditing();
|
||||
}
|
||||
|
||||
public Date getDateValidFrom() {
|
||||
return baseCalendarModel.getDateValidFrom();
|
||||
}
|
||||
|
||||
public void setDateValidFrom(Date date) {
|
||||
Component component = editWindow.getFellow("dateValidFrom");
|
||||
|
||||
try {
|
||||
baseCalendarModel.setDateValidFrom(date);
|
||||
} catch (IllegalArgumentException e) {
|
||||
throw new WrongValueException(component, e.getMessage());
|
||||
} catch (UnsupportedOperationException e) {
|
||||
throw new WrongValueException(component, e.getMessage());
|
||||
}
|
||||
Clients.closeErrorBox(component);
|
||||
baseCalendarModel.setSelectedDay(date);
|
||||
Util.reloadBindings(editWindow);
|
||||
}
|
||||
|
||||
public Date getExpiringDate() {
|
||||
return baseCalendarModel.getExpiringDate();
|
||||
}
|
||||
|
||||
public void setExpiringDate(Date date) {
|
||||
Component component = editWindow.getFellow("expiringDate");
|
||||
|
||||
try {
|
||||
baseCalendarModel.setExpiringDate((new LocalDate(date)).plusDays(1)
|
||||
.toDateTimeAtStartOfDay().toDate());
|
||||
} catch (IllegalArgumentException e) {
|
||||
throw new WrongValueException(component, e.getMessage());
|
||||
} catch (UnsupportedOperationException e) {
|
||||
throw new WrongValueException(component, e.getMessage());
|
||||
}
|
||||
Clients.closeErrorBox(component);
|
||||
baseCalendarModel.setSelectedDay(date);
|
||||
Util.reloadBindings(editWindow);
|
||||
}
|
||||
|
||||
public void goToCreateCopyForm(BaseCalendar baseCalendar) {
|
||||
assignCreateController();
|
||||
baseCalendarModel.initCreateCopy(baseCalendar);
|
||||
if (baseCalendarModel.isDerived()) {
|
||||
prepareParentCombo();
|
||||
|
|
@ -594,235 +402,12 @@ public class BaseCalendarCRUDController extends GenericForwardComposer {
|
|||
|
||||
}
|
||||
|
||||
public List<CalendarData> getHistoryVersions() {
|
||||
return baseCalendarModel.getHistoryVersions();
|
||||
}
|
||||
|
||||
private Map<DayType, String> getDaysCurrentMonthByType() {
|
||||
LocalDate currentDate = new LocalDate(baseCalendarModel
|
||||
.getSelectedDay());
|
||||
|
||||
LocalDate minDate = currentDate.dayOfMonth().withMinimumValue();
|
||||
LocalDate maxDate = currentDate.dayOfMonth().withMaximumValue();
|
||||
|
||||
List<Integer> ancestorExceptionsDays = new ArrayList<Integer>();
|
||||
List<Integer> ownExceptionDays = new ArrayList<Integer>();
|
||||
List<Integer> zeroHoursDays = new ArrayList<Integer>();
|
||||
List<Integer> normalDays = new ArrayList<Integer>();
|
||||
|
||||
for (LocalDate date = minDate; date.compareTo(maxDate) <= 0; date = date
|
||||
.plusDays(1)) {
|
||||
DayType typeOfDay = baseCalendarModel.getTypeOfDay(date);
|
||||
if (typeOfDay != null) {
|
||||
switch (typeOfDay) {
|
||||
case ANCESTOR_EXCEPTION:
|
||||
ancestorExceptionsDays.add(date.getDayOfMonth());
|
||||
break;
|
||||
case OWN_EXCEPTION:
|
||||
ownExceptionDays.add(date.getDayOfMonth());
|
||||
break;
|
||||
case ZERO_HOURS:
|
||||
zeroHoursDays.add(date.getDayOfMonth());
|
||||
break;
|
||||
case NORMAL:
|
||||
default:
|
||||
normalDays.add(date.getDayOfMonth());
|
||||
break;
|
||||
}
|
||||
}
|
||||
public BaseCalendarEditionController getEditionController() {
|
||||
if (isEditing()) {
|
||||
return editionController;
|
||||
} else {
|
||||
return createController;
|
||||
}
|
||||
|
||||
Map<DayType, String> result = new HashMap<DayType, String>();
|
||||
|
||||
result.put(DayType.ANCESTOR_EXCEPTION, StringUtils.join(
|
||||
ancestorExceptionsDays, ","));
|
||||
result.put(DayType.OWN_EXCEPTION, StringUtils.join(ownExceptionDays,
|
||||
","));
|
||||
result.put(DayType.ZERO_HOURS, StringUtils.join(zeroHoursDays, ","));
|
||||
result.put(DayType.NORMAL, StringUtils.join(normalDays, ","));
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public String getAncestorExceptionDays() {
|
||||
return getDaysCurrentMonthByType().get(DayType.ANCESTOR_EXCEPTION);
|
||||
}
|
||||
|
||||
public String getOwnExceptionDays() {
|
||||
return getDaysCurrentMonthByType().get(DayType.OWN_EXCEPTION);
|
||||
}
|
||||
|
||||
public String getZeroHoursDays() {
|
||||
return getDaysCurrentMonthByType().get(DayType.ZERO_HOURS);
|
||||
}
|
||||
|
||||
public void goToDate(Date date) {
|
||||
setSelectedDay(date);
|
||||
|
||||
((Tab) editWindow.getFellow("dataTab")).setSelected(true);
|
||||
Util.reloadBindings(editWindow);
|
||||
}
|
||||
|
||||
public boolean isDateValidFromPast() {
|
||||
if (!isEditing()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
Date dateValidFrom = baseCalendarModel.getDateValidFrom();
|
||||
if (dateValidFrom != null) {
|
||||
return isPast(dateValidFrom);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private boolean isPast(Date date) {
|
||||
LocalDate localDate = new LocalDate(date);
|
||||
LocalDate currentLocalDate = new LocalDate();
|
||||
return localDate.compareTo(currentLocalDate) <= 0;
|
||||
}
|
||||
|
||||
public boolean isSelectedDateFromPast() {
|
||||
Date selectedDay = baseCalendarModel.getSelectedDay();
|
||||
if (selectedDay != null) {
|
||||
return isPast(selectedDay);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean isNotSelectedDateFromPast() {
|
||||
return !isSelectedDateFromPast();
|
||||
}
|
||||
|
||||
public HistoryVersionsRenderer getHistoryVersionsRenderer() {
|
||||
return historyVersionsRenderer;
|
||||
}
|
||||
|
||||
public class HistoryVersionsRenderer implements ListitemRenderer {
|
||||
|
||||
@Override
|
||||
public void render(Listitem item, Object data) throws Exception {
|
||||
CalendarData calendarData = (CalendarData) data;
|
||||
|
||||
Listcell nameListcell = new Listcell();
|
||||
nameListcell.appendChild(new Label(baseCalendarModel.getName()));
|
||||
item.appendChild(nameListcell);
|
||||
|
||||
Listcell parentListcell = new Listcell();
|
||||
Label parentLabel = new Label();
|
||||
BaseCalendar parent = calendarData.getParent();
|
||||
if (parent != null) {
|
||||
parentLabel.setValue(parent.getName());
|
||||
}
|
||||
parentListcell.appendChild(parentLabel);
|
||||
item.appendChild(parentListcell);
|
||||
|
||||
Listcell validFromListcell = new Listcell();
|
||||
Label validFromLabel = new Label();
|
||||
final LocalDate dateValidFrom = baseCalendarModel
|
||||
.getValidFrom(
|
||||
calendarData);
|
||||
if (dateValidFrom != null) {
|
||||
validFromLabel.setValue(dateValidFrom.toString());
|
||||
}
|
||||
validFromListcell.appendChild(validFromLabel);
|
||||
item.appendChild(validFromListcell);
|
||||
|
||||
Listcell expiringDateListcell = new Listcell();
|
||||
final LocalDate expiringDate = calendarData.getExpiringDate();
|
||||
Label expiringDateLabel = new Label();
|
||||
if (expiringDate != null) {
|
||||
LocalDate date = new LocalDate(expiringDate).minusDays(1);
|
||||
expiringDateLabel.setValue(date.toString());
|
||||
}
|
||||
expiringDateListcell.appendChild(expiringDateLabel);
|
||||
item.appendChild(expiringDateListcell);
|
||||
|
||||
Listcell summaryListcell = new Listcell();
|
||||
List<String> summary = new ArrayList<String>();
|
||||
for (Days day : Days.values()) {
|
||||
Integer hours = calendarData.getHours(day);
|
||||
if (hours == null) {
|
||||
summary.add("D");
|
||||
} else {
|
||||
summary.add(hours.toString());
|
||||
}
|
||||
}
|
||||
summaryListcell.appendChild(new Label(StringUtils.join(summary,
|
||||
" - ")));
|
||||
item.appendChild(summaryListcell);
|
||||
|
||||
Listcell buttonListcell = new Listcell();
|
||||
Button button = new Button(_("Go to this calendar"));
|
||||
button.addEventListener(Events.ON_CLICK, new EventListener() {
|
||||
|
||||
@Override
|
||||
public void onEvent(Event event) throws Exception {
|
||||
if (dateValidFrom != null) {
|
||||
goToDate(dateValidFrom.toDateTimeAtStartOfDay()
|
||||
.toDate());
|
||||
} else if (expiringDate != null) {
|
||||
goToDate(expiringDate.minusDays(1)
|
||||
.toDateTimeAtStartOfDay().toDate());
|
||||
} else {
|
||||
goToDate(new Date());
|
||||
}
|
||||
}
|
||||
});
|
||||
buttonListcell.appendChild(button);
|
||||
item.appendChild(buttonListcell);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public Date getDateValidFromNewVersion() {
|
||||
return (new LocalDate()).plusDays(1).toDateTimeAtStartOfDay().toDate();
|
||||
}
|
||||
|
||||
public void setDateValidFromNewVersion(Date date) {
|
||||
// Just for ZK binding not needed
|
||||
}
|
||||
|
||||
public boolean isCreatingNewVersion() {
|
||||
return creatingNewVersion;
|
||||
}
|
||||
|
||||
public void createNewVersion() {
|
||||
creatingNewVersion = true;
|
||||
try {
|
||||
Util.reloadBindings(createNewVersion);
|
||||
createNewVersion.doModal();
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
Util.reloadBindings(editWindow);
|
||||
}
|
||||
|
||||
public void cancelNewVersion() {
|
||||
creatingNewVersion = false;
|
||||
Util.reloadBindings(createNewVersion);
|
||||
}
|
||||
|
||||
public boolean isLastVersion() {
|
||||
return baseCalendarModel.isLastVersion();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,564 @@
|
|||
package org.navalplanner.web.calendars;
|
||||
|
||||
import static org.navalplanner.web.I18nHelper._;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.joda.time.LocalDate;
|
||||
import org.navalplanner.business.calendars.entities.BaseCalendar;
|
||||
import org.navalplanner.business.calendars.entities.CalendarData;
|
||||
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.web.common.IMessagesForUser;
|
||||
import org.navalplanner.web.common.Level;
|
||||
import org.navalplanner.web.common.MessagesForUser;
|
||||
import org.navalplanner.web.common.Util;
|
||||
import org.navalplanner.web.common.components.CalendarHighlightedDays;
|
||||
import org.zkoss.zk.ui.Component;
|
||||
import org.zkoss.zk.ui.WrongValueException;
|
||||
import org.zkoss.zk.ui.event.Event;
|
||||
import org.zkoss.zk.ui.event.EventListener;
|
||||
import org.zkoss.zk.ui.event.Events;
|
||||
import org.zkoss.zk.ui.util.Clients;
|
||||
import org.zkoss.zk.ui.util.GenericForwardComposer;
|
||||
import org.zkoss.zul.Button;
|
||||
import org.zkoss.zul.Checkbox;
|
||||
import org.zkoss.zul.Intbox;
|
||||
import org.zkoss.zul.Label;
|
||||
import org.zkoss.zul.Listcell;
|
||||
import org.zkoss.zul.Listitem;
|
||||
import org.zkoss.zul.ListitemRenderer;
|
||||
import org.zkoss.zul.Tab;
|
||||
import org.zkoss.zul.api.Datebox;
|
||||
import org.zkoss.zul.api.Window;
|
||||
|
||||
/**
|
||||
* Controller for edit and create one {@link BaseCalendar}. It's separated of
|
||||
* {@link BaseCalendarCRUDController} to be used from other parts of the
|
||||
* application.
|
||||
*
|
||||
* @author Manuel Rego Casasnovas <mrego@igalia.com>
|
||||
*/
|
||||
public abstract class BaseCalendarEditionController extends
|
||||
GenericForwardComposer {
|
||||
|
||||
private IBaseCalendarModel baseCalendarModel;
|
||||
|
||||
private Window window;
|
||||
|
||||
private Window createNewVersionWindow;
|
||||
|
||||
private HoursPerDayRenderer hoursPerDayRenderer = new HoursPerDayRenderer();
|
||||
|
||||
private HistoryVersionsRenderer historyVersionsRenderer = new HistoryVersionsRenderer();
|
||||
|
||||
private IMessagesForUser messagesForUser;
|
||||
|
||||
private Component messagesContainer;
|
||||
|
||||
private boolean creatingNewVersion = false;
|
||||
|
||||
public BaseCalendarEditionController(IBaseCalendarModel baseCalendarModel,
|
||||
Window window, Window createNewVersionWindow) {
|
||||
this.baseCalendarModel = baseCalendarModel;
|
||||
this.window = window;
|
||||
this.createNewVersionWindow = createNewVersionWindow;
|
||||
}
|
||||
|
||||
protected abstract void goToList();
|
||||
|
||||
@Override
|
||||
public void doAfterCompose(Component comp) throws Exception {
|
||||
super.doAfterCompose(comp);
|
||||
messagesForUser = new MessagesForUser(messagesContainer);
|
||||
}
|
||||
|
||||
public boolean isEditing() {
|
||||
return baseCalendarModel.isEditing();
|
||||
}
|
||||
|
||||
public BaseCalendar getBaseCalendar() {
|
||||
return baseCalendarModel.getBaseCalendar();
|
||||
}
|
||||
|
||||
public String getCalendarType() {
|
||||
if (baseCalendarModel.isDerived()) {
|
||||
return _("Derived");
|
||||
}
|
||||
return _("Normal");
|
||||
}
|
||||
|
||||
public boolean isDerived() {
|
||||
return baseCalendarModel.isDerived();
|
||||
}
|
||||
|
||||
public boolean isDateValidFromPast() {
|
||||
if (!isEditing()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
Date dateValidFrom = baseCalendarModel.getDateValidFrom();
|
||||
if (dateValidFrom != null) {
|
||||
return isPast(dateValidFrom);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private boolean isPast(Date date) {
|
||||
LocalDate localDate = new LocalDate(date);
|
||||
LocalDate currentLocalDate = new LocalDate();
|
||||
return localDate.compareTo(currentLocalDate) <= 0;
|
||||
}
|
||||
|
||||
public List<Days> getHoursPerDay() {
|
||||
return Arrays.asList(Days.values());
|
||||
}
|
||||
|
||||
public HoursPerDayRenderer getHoursPerDayRenderer() {
|
||||
return hoursPerDayRenderer;
|
||||
}
|
||||
|
||||
public class HoursPerDayRenderer implements ListitemRenderer {
|
||||
|
||||
@Override
|
||||
public void render(Listitem item, Object data) throws Exception {
|
||||
final Days day = (Days) data;
|
||||
|
||||
Listcell labelListcell = new Listcell();
|
||||
labelListcell.appendChild(new Label(day.toString()));
|
||||
item.appendChild(labelListcell);
|
||||
|
||||
Listcell hoursListcell = new Listcell();
|
||||
final Intbox intBox = new Intbox();
|
||||
Intbox hoursIntbox = Util.bind(intBox, new Util.Getter<Integer>() {
|
||||
|
||||
@Override
|
||||
public Integer get() {
|
||||
return baseCalendarModel.getHours(day);
|
||||
}
|
||||
}, new Util.Setter<Integer>() {
|
||||
|
||||
@Override
|
||||
public void set(Integer value) {
|
||||
try {
|
||||
baseCalendarModel.setHours(day, value);
|
||||
} catch (IllegalArgumentException e) {
|
||||
throw new WrongValueException(intBox, e.getMessage());
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
hoursIntbox.addEventListener(Events.ON_CHANGE, new EventListener() {
|
||||
|
||||
@Override
|
||||
public void onEvent(Event event) throws Exception {
|
||||
reloadDayInformation();
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
if (isDateValidFromPast()) {
|
||||
hoursIntbox.setDisabled(true);
|
||||
} else if (baseCalendarModel.isDerived()
|
||||
&& baseCalendarModel.isDefault(day)) {
|
||||
hoursIntbox.setDisabled(true);
|
||||
}
|
||||
|
||||
hoursListcell.appendChild(hoursIntbox);
|
||||
item.appendChild(hoursListcell);
|
||||
|
||||
if (baseCalendarModel.isDerived()) {
|
||||
Listcell defaultListcell = new Listcell();
|
||||
Checkbox defaultCheckbox = Util.bind(new Checkbox(),
|
||||
new Util.Getter<Boolean>() {
|
||||
|
||||
@Override
|
||||
public Boolean get() {
|
||||
return baseCalendarModel.isDefault(day);
|
||||
}
|
||||
}, new Util.Setter<Boolean>() {
|
||||
|
||||
@Override
|
||||
public void set(Boolean value) {
|
||||
if (value) {
|
||||
baseCalendarModel.setDefault(day);
|
||||
} else {
|
||||
baseCalendarModel.unsetDefault(day);
|
||||
}
|
||||
}
|
||||
});
|
||||
defaultCheckbox.addEventListener(Events.ON_CHECK,
|
||||
new EventListener() {
|
||||
|
||||
@Override
|
||||
public void onEvent(Event event) throws Exception {
|
||||
reloadCurrentWindow();
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
if (isDateValidFromPast()) {
|
||||
defaultCheckbox.setDisabled(true);
|
||||
}
|
||||
|
||||
defaultListcell.appendChild(defaultCheckbox);
|
||||
item.appendChild(defaultListcell);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void reloadCurrentWindow() {
|
||||
Util.reloadBindings(window);
|
||||
highlightDaysOnCalendar();
|
||||
}
|
||||
|
||||
private void reloadDayInformation() {
|
||||
Util.reloadBindings(window.getFellow("dayInformation"));
|
||||
highlightDaysOnCalendar();
|
||||
}
|
||||
|
||||
private void highlightDaysOnCalendar() {
|
||||
((CalendarHighlightedDays) window.getFellow("calendarWidget"))
|
||||
.highlightDays();
|
||||
}
|
||||
|
||||
public Date getSelectedDay() {
|
||||
Date selectedDay = baseCalendarModel.getSelectedDay();
|
||||
if (selectedDay == null) {
|
||||
return new Date();
|
||||
}
|
||||
return selectedDay;
|
||||
}
|
||||
|
||||
public void setSelectedDay(Date date) {
|
||||
baseCalendarModel.setSelectedDay(date);
|
||||
|
||||
reloadDayInformation();
|
||||
}
|
||||
|
||||
private Map<DayType, String> getDaysCurrentMonthByType() {
|
||||
LocalDate currentDate = new LocalDate(baseCalendarModel
|
||||
.getSelectedDay());
|
||||
|
||||
LocalDate minDate = currentDate.dayOfMonth().withMinimumValue();
|
||||
LocalDate maxDate = currentDate.dayOfMonth().withMaximumValue();
|
||||
|
||||
List<Integer> ancestorExceptionsDays = new ArrayList<Integer>();
|
||||
List<Integer> ownExceptionDays = new ArrayList<Integer>();
|
||||
List<Integer> zeroHoursDays = new ArrayList<Integer>();
|
||||
List<Integer> normalDays = new ArrayList<Integer>();
|
||||
|
||||
for (LocalDate date = minDate; date.compareTo(maxDate) <= 0; date = date
|
||||
.plusDays(1)) {
|
||||
DayType typeOfDay = baseCalendarModel.getTypeOfDay(date);
|
||||
if (typeOfDay != null) {
|
||||
switch (typeOfDay) {
|
||||
case ANCESTOR_EXCEPTION:
|
||||
ancestorExceptionsDays.add(date.getDayOfMonth());
|
||||
break;
|
||||
case OWN_EXCEPTION:
|
||||
ownExceptionDays.add(date.getDayOfMonth());
|
||||
break;
|
||||
case ZERO_HOURS:
|
||||
zeroHoursDays.add(date.getDayOfMonth());
|
||||
break;
|
||||
case NORMAL:
|
||||
default:
|
||||
normalDays.add(date.getDayOfMonth());
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Map<DayType, String> result = new HashMap<DayType, String>();
|
||||
|
||||
result.put(DayType.ANCESTOR_EXCEPTION, StringUtils.join(
|
||||
ancestorExceptionsDays, ","));
|
||||
result.put(DayType.OWN_EXCEPTION, StringUtils.join(ownExceptionDays,
|
||||
","));
|
||||
result.put(DayType.ZERO_HOURS, StringUtils.join(zeroHoursDays, ","));
|
||||
result.put(DayType.NORMAL, StringUtils.join(normalDays, ","));
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public String getAncestorExceptionDays() {
|
||||
return getDaysCurrentMonthByType().get(DayType.ANCESTOR_EXCEPTION);
|
||||
}
|
||||
|
||||
public String getOwnExceptionDays() {
|
||||
return getDaysCurrentMonthByType().get(DayType.OWN_EXCEPTION);
|
||||
}
|
||||
|
||||
public String getZeroHoursDays() {
|
||||
return getDaysCurrentMonthByType().get(DayType.ZERO_HOURS);
|
||||
}
|
||||
|
||||
public String getTypeOfDay() {
|
||||
DayType typeOfDay = baseCalendarModel.getTypeOfDay();
|
||||
if (typeOfDay == null) {
|
||||
return "";
|
||||
}
|
||||
|
||||
switch (typeOfDay) {
|
||||
case ANCESTOR_EXCEPTION:
|
||||
return _("Derived excpetion");
|
||||
case OWN_EXCEPTION:
|
||||
return _("Exception");
|
||||
case ZERO_HOURS:
|
||||
return _("Not working day");
|
||||
case NORMAL:
|
||||
default:
|
||||
return _("Normal");
|
||||
}
|
||||
}
|
||||
|
||||
public Integer getHoursOfDay() {
|
||||
return baseCalendarModel.getHoursOfDay();
|
||||
}
|
||||
|
||||
public boolean isSelectedDateFromPast() {
|
||||
Date selectedDay = baseCalendarModel.getSelectedDay();
|
||||
if (selectedDay != null) {
|
||||
return isPast(selectedDay);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean isNotSelectedDateFromPast() {
|
||||
return !isSelectedDateFromPast();
|
||||
}
|
||||
|
||||
public void createException() {
|
||||
Component exceptionHoursIntbox = window.getFellow("exceptionHours");
|
||||
|
||||
Integer hours = ((Intbox) exceptionHoursIntbox).getValue();
|
||||
|
||||
if (hours < 0) {
|
||||
throw new WrongValueException(
|
||||
exceptionHoursIntbox,
|
||||
_("Hours for an exception day should be greater or equal than zero"));
|
||||
} else {
|
||||
Clients.closeErrorBox(exceptionHoursIntbox);
|
||||
baseCalendarModel.createException(hours);
|
||||
reloadDayInformation();
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isNotExceptional() {
|
||||
return !baseCalendarModel.isExceptional();
|
||||
}
|
||||
|
||||
public void removeException() {
|
||||
baseCalendarModel.removeException();
|
||||
|
||||
reloadDayInformation();
|
||||
}
|
||||
|
||||
public Date getDateValidFrom() {
|
||||
return baseCalendarModel.getDateValidFrom();
|
||||
}
|
||||
|
||||
public void setDateValidFrom(Date date) {
|
||||
Component component = window.getFellow("dateValidFrom");
|
||||
|
||||
try {
|
||||
baseCalendarModel.setDateValidFrom(date);
|
||||
} catch (IllegalArgumentException e) {
|
||||
throw new WrongValueException(component, e.getMessage());
|
||||
} catch (UnsupportedOperationException e) {
|
||||
throw new WrongValueException(component, e.getMessage());
|
||||
}
|
||||
Clients.closeErrorBox(component);
|
||||
baseCalendarModel.setSelectedDay(date);
|
||||
reloadCurrentWindow();
|
||||
}
|
||||
|
||||
public Date getExpiringDate() {
|
||||
return baseCalendarModel.getExpiringDate();
|
||||
}
|
||||
|
||||
public void setExpiringDate(Date date) {
|
||||
Component component = window.getFellow("expiringDate");
|
||||
|
||||
try {
|
||||
baseCalendarModel.setExpiringDate((new LocalDate(date)).plusDays(1)
|
||||
.toDateTimeAtStartOfDay().toDate());
|
||||
} catch (IllegalArgumentException e) {
|
||||
throw new WrongValueException(component, e.getMessage());
|
||||
} catch (UnsupportedOperationException e) {
|
||||
throw new WrongValueException(component, e.getMessage());
|
||||
}
|
||||
Clients.closeErrorBox(component);
|
||||
baseCalendarModel.setSelectedDay(date);
|
||||
reloadCurrentWindow();
|
||||
}
|
||||
|
||||
public List<CalendarData> getHistoryVersions() {
|
||||
return baseCalendarModel.getHistoryVersions();
|
||||
}
|
||||
|
||||
public HistoryVersionsRenderer getHistoryVersionsRenderer() {
|
||||
return historyVersionsRenderer;
|
||||
}
|
||||
|
||||
public class HistoryVersionsRenderer implements ListitemRenderer {
|
||||
|
||||
@Override
|
||||
public void render(Listitem item, Object data) throws Exception {
|
||||
CalendarData calendarData = (CalendarData) data;
|
||||
|
||||
Listcell nameListcell = new Listcell();
|
||||
nameListcell.appendChild(new Label(baseCalendarModel.getName()));
|
||||
item.appendChild(nameListcell);
|
||||
|
||||
Listcell parentListcell = new Listcell();
|
||||
Label parentLabel = new Label();
|
||||
BaseCalendar parent = calendarData.getParent();
|
||||
if (parent != null) {
|
||||
parentLabel.setValue(parent.getName());
|
||||
}
|
||||
parentListcell.appendChild(parentLabel);
|
||||
item.appendChild(parentListcell);
|
||||
|
||||
Listcell validFromListcell = new Listcell();
|
||||
Label validFromLabel = new Label();
|
||||
final LocalDate dateValidFrom = baseCalendarModel
|
||||
.getValidFrom(calendarData);
|
||||
if (dateValidFrom != null) {
|
||||
validFromLabel.setValue(dateValidFrom.toString());
|
||||
}
|
||||
validFromListcell.appendChild(validFromLabel);
|
||||
item.appendChild(validFromListcell);
|
||||
|
||||
Listcell expiringDateListcell = new Listcell();
|
||||
final LocalDate expiringDate = calendarData.getExpiringDate();
|
||||
Label expiringDateLabel = new Label();
|
||||
if (expiringDate != null) {
|
||||
LocalDate date = new LocalDate(expiringDate).minusDays(1);
|
||||
expiringDateLabel.setValue(date.toString());
|
||||
}
|
||||
expiringDateListcell.appendChild(expiringDateLabel);
|
||||
item.appendChild(expiringDateListcell);
|
||||
|
||||
Listcell summaryListcell = new Listcell();
|
||||
List<String> summary = new ArrayList<String>();
|
||||
for (Days day : Days.values()) {
|
||||
Integer hours = calendarData.getHours(day);
|
||||
if (hours == null) {
|
||||
summary.add("D");
|
||||
} else {
|
||||
summary.add(hours.toString());
|
||||
}
|
||||
}
|
||||
summaryListcell.appendChild(new Label(StringUtils.join(summary,
|
||||
" - ")));
|
||||
item.appendChild(summaryListcell);
|
||||
|
||||
Listcell buttonListcell = new Listcell();
|
||||
Button button = new Button(_("Go to this calendar"));
|
||||
button.addEventListener(Events.ON_CLICK, new EventListener() {
|
||||
|
||||
@Override
|
||||
public void onEvent(Event event) throws Exception {
|
||||
if (dateValidFrom != null) {
|
||||
goToDate(dateValidFrom.toDateTimeAtStartOfDay()
|
||||
.toDate());
|
||||
} else if (expiringDate != null) {
|
||||
goToDate(expiringDate.minusDays(1)
|
||||
.toDateTimeAtStartOfDay().toDate());
|
||||
} else {
|
||||
goToDate(new Date());
|
||||
}
|
||||
}
|
||||
});
|
||||
buttonListcell.appendChild(button);
|
||||
item.appendChild(buttonListcell);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void save() {
|
||||
try {
|
||||
baseCalendarModel.confirmSave();
|
||||
messagesForUser.showMessage(Level.INFO, _(
|
||||
"Base calendar \"{0}\" saved", baseCalendarModel
|
||||
.getBaseCalendar().getName()));
|
||||
goToList();
|
||||
} catch (ValidationException e) {
|
||||
messagesForUser.showInvalidValues(e);
|
||||
}
|
||||
}
|
||||
|
||||
public void cancel() {
|
||||
baseCalendarModel.cancel();
|
||||
goToList();
|
||||
}
|
||||
|
||||
public boolean isLastVersion() {
|
||||
return baseCalendarModel.isLastVersion();
|
||||
}
|
||||
|
||||
public void goToDate(Date date) {
|
||||
setSelectedDay(date);
|
||||
|
||||
((Tab) window.getFellow("dataTab")).setSelected(true);
|
||||
reloadCurrentWindow();
|
||||
}
|
||||
|
||||
public boolean isCreatingNewVersion() {
|
||||
return creatingNewVersion;
|
||||
}
|
||||
|
||||
public void createNewVersion() {
|
||||
creatingNewVersion = true;
|
||||
try {
|
||||
Util.reloadBindings(createNewVersionWindow);
|
||||
createNewVersionWindow.doModal();
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
public void acceptCreateNewVersion() {
|
||||
Component component = createNewVersionWindow
|
||||
.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(createNewVersionWindow);
|
||||
setSelectedDay(date);
|
||||
reloadCurrentWindow();
|
||||
}
|
||||
|
||||
public void cancelNewVersion() {
|
||||
creatingNewVersion = false;
|
||||
Util.reloadBindings(createNewVersionWindow);
|
||||
}
|
||||
|
||||
public Date getDateValidFromNewVersion() {
|
||||
return (new LocalDate()).plusDays(1).toDateTimeAtStartOfDay().toDate();
|
||||
}
|
||||
|
||||
public void setDateValidFromNewVersion(Date date) {
|
||||
// Just for ZK binding not needed
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -399,7 +399,7 @@ public class BaseCalendarModel implements IBaseCalendarModel {
|
|||
*/
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
@Transactional(rollbackFor = ValidationException.class)
|
||||
public void confirmSave() throws ValidationException {
|
||||
BaseCalendar entity = getBaseCalendar();
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
<tabs>
|
||||
<tab label="${i18n:_('Data')}" id="dataTab" />
|
||||
<tab label="${i18n:_('History')}"
|
||||
visible="@{controller.isEditing}" id="historyTab" />
|
||||
visible="@{controller.editionController.isEditing}" id="historyTab" />
|
||||
</tabs>
|
||||
<tabpanels>
|
||||
|
||||
|
|
@ -19,16 +19,16 @@
|
|||
|
||||
<hbox>
|
||||
<label value="${i18n:_('Name')}" />
|
||||
<textbox value="@{controller.baseCalendar.name}" />
|
||||
<textbox value="@{controller.editionController.baseCalendar.name}" />
|
||||
</hbox>
|
||||
|
||||
<hbox>
|
||||
<label value="${i18n:_('Type')}" />
|
||||
<vbox>
|
||||
<label value="@{controller.calendarType}" />
|
||||
<label value="@{controller.editionController.calendarType}" />
|
||||
<combobox id="parentCalendars"
|
||||
visible="@{controller.isDerived}"
|
||||
disabled="@{controller.isDateValidFromPast}" >
|
||||
visible="@{controller.editionController.isDerived}"
|
||||
disabled="@{controller.editionController.isDateValidFromPast}">
|
||||
<comboitem self="@{each='baseCalnedar'}" value="@{baseCalnedar}"
|
||||
label="@{baseCalnedar.name}" />
|
||||
</combobox>
|
||||
|
|
@ -36,8 +36,8 @@
|
|||
</hbox>
|
||||
|
||||
<listbox id="hoursPerDay"
|
||||
model="@{controller.getHoursPerDay}"
|
||||
itemRenderer="@{controller.hoursPerDayRenderer}">
|
||||
model="@{controller.editionController.getHoursPerDay}"
|
||||
itemRenderer="@{controller.editionController.hoursPerDayRenderer}">
|
||||
<listhead>
|
||||
<listheader label="${i18n:_('Day of week')}" />
|
||||
<listheader label="${i18n:_('Hours')}" />
|
||||
|
|
@ -50,28 +50,28 @@
|
|||
<vbox id="dayInformation">
|
||||
|
||||
<calendarhighlighteddays id="calendarWidget"
|
||||
value="@{controller.selectedDay,access='both'}"
|
||||
ancestorExceptionDays="@{controller.ancestorExceptionDays,access='both'}"
|
||||
ownExceptionDays="@{controller.ownExceptionDays,access='both'}"
|
||||
zeroHoursDays="@{controller.zeroHoursDays,access='both'}" />
|
||||
value="@{controller.editionController.selectedDay,access='both'}"
|
||||
ancestorExceptionDays="@{controller.editionController.ancestorExceptionDays,access='both'}"
|
||||
ownExceptionDays="@{controller.editionController.ownExceptionDays,access='both'}"
|
||||
zeroHoursDays="@{controller.editionController.zeroHoursDays,access='both'}" />
|
||||
|
||||
<hbox>
|
||||
<label value="${i18n:_('Type of day')}" />
|
||||
<label value="@{controller.typeOfDay}" />
|
||||
<label value="@{controller.editionController.typeOfDay}" />
|
||||
</hbox>
|
||||
|
||||
<hbox>
|
||||
<label value="${i18n:_('Hours of day')}" />
|
||||
<label value="@{controller.hoursOfDay}" />
|
||||
<label value="@{controller.editionController.hoursOfDay}" />
|
||||
</hbox>
|
||||
|
||||
<hbox visible="@{controller.isNotSelectedDateFromPast}">
|
||||
<hbox visible="@{controller.editionController.isNotSelectedDateFromPast}">
|
||||
<vbox>
|
||||
<button label="${i18n:_('Create exception')}"
|
||||
onClick="controller.createException();" />
|
||||
<button disabled="@{controller.isNotExceptional}"
|
||||
onClick="controller.editionController.createException();" />
|
||||
<button disabled="@{controller.editionController.isNotExceptional}"
|
||||
label="${i18n:_('Remove exception')}"
|
||||
onClick="controller.removeException();" />
|
||||
onClick="controller.editionController.removeException();" />
|
||||
</vbox>
|
||||
<intbox id="exceptionHours" value="0" />
|
||||
</hbox>
|
||||
|
|
@ -79,23 +79,23 @@
|
|||
|
||||
</hbox>
|
||||
|
||||
<hbox visible="@{controller.isEditing}">
|
||||
<hbox visible="@{controller.editionController.isEditing}">
|
||||
<label value="${i18n:_('Valid from')}" />
|
||||
<datebox id="dateValidFrom" value="@{controller.dateValidFrom}"
|
||||
disabled="@{controller.isDateValidFromPast}" />
|
||||
<datebox id="dateValidFrom" value="@{controller.editionController.dateValidFrom}"
|
||||
disabled="@{controller.editionController.isDateValidFromPast}" />
|
||||
<label value="${i18n:_('to')}" />
|
||||
<datebox id="expiringDate" value="@{controller.expiringDate}"
|
||||
disabled="@{controller.isLastVersion}" />
|
||||
<datebox id="expiringDate" value="@{controller.editionController.expiringDate}"
|
||||
disabled="@{controller.editionController.isLastVersion}" />
|
||||
</hbox>
|
||||
|
||||
<hbox>
|
||||
<button onClick="controller.save();"
|
||||
<button onClick="controller.editionController.save();"
|
||||
label="${arg.save_button_label}" />
|
||||
<button onClick="controller.cancel();"
|
||||
<button onClick="controller.editionController.cancel();"
|
||||
label="${arg.cancel_button_label}" />
|
||||
<button onClick="controller.createNewVersion();"
|
||||
<button onClick="controller.editionController.createNewVersion();"
|
||||
label="${i18n:_('Create new version')}"
|
||||
visible="@{controller.isEditing}" />
|
||||
visible="@{controller.editionController.isEditing}" />
|
||||
</hbox>
|
||||
|
||||
</vbox>
|
||||
|
|
@ -104,8 +104,8 @@
|
|||
|
||||
<tabpanel>
|
||||
|
||||
<listbox model="@{controller.historyVersions}"
|
||||
itemRenderer="@{controller.historyVersionsRenderer}">
|
||||
<listbox model="@{controller.editionController.historyVersions}"
|
||||
itemRenderer="@{controller.editionController.historyVersionsRenderer}">
|
||||
<listhead>
|
||||
<listheader label="${i18n:_('Name')}" />
|
||||
<listheader label="${i18n:_('Parent')}" />
|
||||
|
|
|
|||
|
|
@ -37,20 +37,20 @@
|
|||
</hbox>
|
||||
</vbox>
|
||||
</window>
|
||||
<window visible="@{controller.creatingNewVersion}"
|
||||
<window visible="@{controller.editionController.creatingNewVersion}"
|
||||
id="createNewVersion" title="${i18n:_('Create new version')}" >
|
||||
<vbox>
|
||||
<label value="${i18n:_('Select the date from which the new version will be valid')}" />
|
||||
<hbox>
|
||||
<label value="${i18n:_('Valid from')}" />
|
||||
<datebox id="dateValidFromNewVersion"
|
||||
value="@{controller.dateValidFromNewVersion}"/>
|
||||
value="@{controller.editionController.dateValidFromNewVersion}"/>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<button label="${i18n:_('Create')}"
|
||||
onClick="controller.acceptCreateNewVersion();" />
|
||||
onClick="controller.editionController.acceptCreateNewVersion();" />
|
||||
<button label="${i18n:_('Cancel')}"
|
||||
onClick="controller.cancelNewVersion();" />
|
||||
onClick="controller.editionController.cancelNewVersion();" />
|
||||
</hbox>
|
||||
</vbox>
|
||||
</window>
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue