ItEr24S10CUAsignacionCalendarioLaboralRecursoItEr23S13: Making a lot of changes to adapt the new controller to be used from the edit resource view.

This commit is contained in:
Manuel Rego Casasnovas 2009-09-04 12:40:40 +02:00 committed by Óscar González Fernández
parent a75fea2a6f
commit e241244918
15 changed files with 392 additions and 85 deletions

View file

@ -67,7 +67,7 @@ public class BaseCalendarCRUDController extends GenericForwardComposer {
public void doAfterCompose(Component comp) throws Exception {
super.doAfterCompose(comp);
messagesForUser = new MessagesForUser(messagesContainer);
comp.setVariable("controller", this, true);
comp.setVariable("calendarController", this, true);
getVisibility().showOnly(listWindow);
}
@ -180,10 +180,20 @@ public class BaseCalendarCRUDController extends GenericForwardComposer {
baseCalendarModel, editWindow, createNewVersion) {
@Override
protected void goToList() {
public void goToList() {
BaseCalendarCRUDController.this.goToList();
}
@Override
public void cancel() {
BaseCalendarCRUDController.this.cancel();
}
@Override
public void save() {
BaseCalendarCRUDController.this.save();
}
};
try {
@ -198,9 +208,18 @@ public class BaseCalendarCRUDController extends GenericForwardComposer {
createWindow, createNewVersion) {
@Override
protected void goToList() {
public void goToList() {
BaseCalendarCRUDController.this.goToList();
}
@Override
public void cancel() {
BaseCalendarCRUDController.this.cancel();
}
@Override
public void save() {
BaseCalendarCRUDController.this.save();
}
};

View file

@ -15,9 +15,7 @@ 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;
@ -74,7 +72,11 @@ public abstract class BaseCalendarEditionController extends
this.createNewVersionWindow = createNewVersionWindow;
}
protected abstract void goToList();
public abstract void goToList();
public abstract void save();
public abstract void cancel();
@Override
public void doAfterCompose(Component comp) throws Exception {
@ -530,23 +532,6 @@ public abstract class BaseCalendarEditionController extends
}
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();
}

View file

@ -18,6 +18,7 @@ import org.navalplanner.business.calendars.entities.CalendarData.Days;
import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
import org.navalplanner.business.common.exceptions.ValidationException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
@ -31,16 +32,17 @@ import org.springframework.transaction.annotation.Transactional;
*/
@Service
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
@Qualifier("main")
public class BaseCalendarModel implements IBaseCalendarModel {
/**
* Conversation state
*/
private BaseCalendar baseCalendar;
protected BaseCalendar baseCalendar;
private Date selectedDate;
private boolean editing = false;
protected boolean editing = false;
private ClassValidator<BaseCalendar> baseCalendarValidator = new ClassValidator<BaseCalendar>(
BaseCalendar.class);
@ -401,10 +403,15 @@ public class BaseCalendarModel implements IBaseCalendarModel {
@Override
@Transactional(rollbackFor = ValidationException.class)
public void confirmSave() throws ValidationException {
BaseCalendar entity = getBaseCalendar();
checkInvalidValuesCalendar(getBaseCalendar());
baseCalendarDAO.save(getBaseCalendar());
}
@Override
public void checkInvalidValuesCalendar(BaseCalendar entity)
throws ValidationException {
InvalidValue[] invalidValues = baseCalendarValidator
.getInvalidValues(entity);
.getInvalidValues(entity);
if (invalidValues.length > 0) {
throw new ValidationException(invalidValues);
}
@ -416,8 +423,6 @@ public class BaseCalendarModel implements IBaseCalendarModel {
throw new ValidationException(invalidValues2,
_("Could not save new calendar"));
}
baseCalendarDAO.save(getBaseCalendar());
}
@Override

View file

@ -46,6 +46,8 @@ public interface IBaseCalendarModel {
List<BaseCalendar> getBaseCalendars();
void checkInvalidValuesCalendar(BaseCalendar entity)
throws ValidationException;
/*
* Initial conversation steps
@ -133,4 +135,6 @@ public interface IBaseCalendarModel {
void cancel();
}

View file

@ -0,0 +1,26 @@
package org.navalplanner.web.calendars;
import org.navalplanner.business.calendars.entities.ResourceCalendar;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
/**
* Model for UI operations related to {@link ResourceCalendar}.
*
* @author Manuel Rego Casasnovas <mrego@igalia.com>
*/
@Service
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
@Qualifier("subclass")
public class ResourceCalendarModel extends BaseCalendarModel implements
IBaseCalendarModel {
@Override
public void initCreate() {
editing = false;
this.baseCalendar = ResourceCalendar.create();
}
}

View file

@ -5,6 +5,8 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
import org.navalplanner.business.calendars.entities.BaseCalendar;
import org.navalplanner.business.calendars.entities.ResourceCalendar;
import org.navalplanner.business.common.exceptions.ValidationException;
import org.navalplanner.business.resources.entities.Criterion;
import org.navalplanner.business.resources.entities.CriterionSatisfaction;
@ -94,4 +96,10 @@ public interface IWorkerModel {
void setWorker(Worker worker);
Set<Resource> getSetOfResourcesSatisfying(ICriterion criterion);
List<BaseCalendar> getBaseCalendars();
void setCalendar(ResourceCalendar resourceCalendar);
ResourceCalendar getCalendar();
}

View file

@ -3,12 +3,17 @@ package org.navalplanner.web.resources.worker;
import static org.navalplanner.web.I18nHelper._;
import static org.navalplanner.web.common.ConcurrentModificationDetector.addAutomaticHandlingOfConcurrentModification;
import java.util.Date;
import java.util.List;
import org.hibernate.validator.InvalidValue;
import org.navalplanner.business.calendars.entities.BaseCalendar;
import org.navalplanner.business.calendars.entities.ResourceCalendar;
import org.navalplanner.business.common.exceptions.ValidationException;
import org.navalplanner.business.resources.entities.CriterionSatisfaction;
import org.navalplanner.business.resources.entities.Worker;
import org.navalplanner.web.calendars.BaseCalendarEditionController;
import org.navalplanner.web.calendars.IBaseCalendarModel;
import org.navalplanner.web.common.IMessagesForUser;
import org.navalplanner.web.common.Level;
import org.navalplanner.web.common.MessagesForUser;
@ -18,6 +23,8 @@ import org.navalplanner.web.common.entrypoints.IURLHandlerRegistry;
import org.navalplanner.web.common.entrypoints.URLHandler;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.util.GenericForwardComposer;
import org.zkoss.zul.Combobox;
import org.zkoss.zul.Radio;
import org.zkoss.zul.api.Window;
/**
@ -59,13 +66,22 @@ public class WorkerCRUDController extends GenericForwardComposer implements
private IWorkerCRUDControllerEntryPoints workerCRUD;
private Window editCalendarWindow;
private BaseCalendarEditionController baseCalendarEditionController;
private IBaseCalendarModel resourceCalendarModel;
private Window createNewVersionWindow;
public WorkerCRUDController() {
}
public WorkerCRUDController(Window createWindow, Window listWindow,
Window editWindow, Window workRelationshipsWindow,
Window addWorkRelationshipWindow,
Window editWorkRelationshipWindow, IWorkerModel workerModel,
Window editWorkRelationshipWindow, Window editCalendarWindow,
IWorkerModel workerModel,
IMessagesForUser messages,
IWorkerCRUDControllerEntryPoints workerCRUD) {
this.createWindow = createWindow;
@ -77,6 +93,7 @@ public class WorkerCRUDController extends GenericForwardComposer implements
this.workerModel = workerModel;
this.messages = messages;
this.workerCRUD = workerCRUD;
this.editCalendarWindow = editCalendarWindow;
}
public Worker getWorker() {
@ -95,6 +112,7 @@ public class WorkerCRUDController extends GenericForwardComposer implements
public void save() {
try {
baseCalendarEditionController.save();
workerModel.save();
goToList();
Util.reloadBindings(listWindow);
@ -118,11 +136,17 @@ public class WorkerCRUDController extends GenericForwardComposer implements
public void goToEditForm(Worker worker) {
getBookmarker().goToEditForm(worker);
workerModel.prepareEditFor(worker);
if (isCalendarNotNull()) {
editCalendar();
}
getVisibility().showOnly(editWindow);
Util.reloadBindings(editWindow);
}
public void goToEditForm() {
if (isCalendarNotNull()) {
editCalendar();
}
getVisibility().showOnly(editWindow);
Util.reloadBindings(editWindow);
}
@ -181,6 +205,45 @@ public class WorkerCRUDController extends GenericForwardComposer implements
.getRedirectorFor(IWorkerCRUDControllerEntryPoints.class);
handler.registerListener(this, page);
getVisibility().showOnly(listWindow);
editCalendarWindow = (Window) getCurrentWindow()
.getFellow("editCalendarWindow");
createNewVersionWindow = (Window) getCurrentWindow()
.getFellow("createNewVersion");
baseCalendarEditionController = new BaseCalendarEditionController(
resourceCalendarModel, editCalendarWindow,
createNewVersionWindow) {
@Override
public void goToList() {
workerModel
.setCalendar((ResourceCalendar) resourceCalendarModel
.getBaseCalendar());
reloadCurrentWindow();
}
@Override
public void cancel() {
resourceCalendarModel.cancel();
workerModel.setCalendar(null);
reloadCurrentWindow();
}
@Override
public void save() {
workerModel
.setCalendar((ResourceCalendar) resourceCalendarModel
.getBaseCalendar());
reloadCurrentWindow();
}
};
editCalendarWindow.setVariable("calendarController", this, true);
createNewVersionWindow.setVariable("calendarController", this, true);
}
public BaseCalendarEditionController getEditionController() {
return baseCalendarEditionController;
}
private void setupWorkRelationshipController(
@ -218,4 +281,85 @@ public class WorkerCRUDController extends GenericForwardComposer implements
return workerCRUD;
}
public List<BaseCalendar> getBaseCalendars() {
return workerModel.getBaseCalendars();
}
public void calendarChecked(Radio radio) {
Combobox comboboxDerived = (Combobox) radio
.getFellow("createDerivedCalendar");
Combobox comboboxCopy = (Combobox) radio
.getFellow("createCopyCalendar");
String selectedId = radio.getId();
if (selectedId.equals("createFromScratch")) {
comboboxDerived.setDisabled(true);
comboboxCopy.setDisabled(true);
} else if (selectedId.equals("createDerived")) {
comboboxDerived.setDisabled(false);
comboboxCopy.setDisabled(true);
} else if (selectedId.equals("createCopy")) {
comboboxDerived.setDisabled(true);
comboboxCopy.setDisabled(false);
}
}
public boolean isCalendarNull() {
if (workerModel.getCalendar() != null) {
return false;
}
return true;
}
public boolean isCalendarNotNull() {
return !isCalendarNull();
}
public void createCalendar() {
// FIXME create different kind of calendars depending on user selection
resourceCalendarModel.initCreate();
workerModel.setCalendar((ResourceCalendar) resourceCalendarModel
.getBaseCalendar());
try {
baseCalendarEditionController.doAfterCompose(editCalendarWindow);
} catch (Exception e) {
throw new RuntimeException(e);
}
baseCalendarEditionController.setSelectedDay(new Date());
Util.reloadBindings(editCalendarWindow);
Util.reloadBindings(createNewVersionWindow);
reloadCurrentWindow();
}
public void editCalendar() {
resourceCalendarModel.initEdit(workerModel.getCalendar());
try {
baseCalendarEditionController.doAfterCompose(editCalendarWindow);
} catch (Exception e) {
throw new RuntimeException(e);
}
baseCalendarEditionController.setSelectedDay(new Date());
Util.reloadBindings(editCalendarWindow);
Util.reloadBindings(createNewVersionWindow);
}
public BaseCalendarEditionController getBaseCalendarEditionController() {
return baseCalendarEditionController;
}
private void reloadCurrentWindow() {
Util.reloadBindings(getCurrentWindow());
}
private Window getCurrentWindow() {
if (workerModel.isCreating()) {
return createWindow;
} else {
return editWindow;
}
}
}

View file

@ -1,5 +1,7 @@
package org.navalplanner.web.resources.worker;
import static org.navalplanner.web.I18nHelper._;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
@ -13,6 +15,10 @@ import java.util.Set;
import org.apache.commons.lang.Validate;
import org.hibernate.validator.ClassValidator;
import org.hibernate.validator.InvalidValue;
import org.navalplanner.business.calendars.daos.IBaseCalendarDAO;
import org.navalplanner.business.calendars.entities.BaseCalendar;
import org.navalplanner.business.calendars.entities.CalendarData;
import org.navalplanner.business.calendars.entities.ResourceCalendar;
import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
import org.navalplanner.business.common.exceptions.ValidationException;
import org.navalplanner.business.resources.daos.ICriterionDAO;
@ -26,14 +32,14 @@ import org.navalplanner.business.resources.entities.Interval;
import org.navalplanner.business.resources.entities.PredefinedCriterionTypes;
import org.navalplanner.business.resources.entities.Resource;
import org.navalplanner.business.resources.entities.Worker;
import org.navalplanner.web.calendars.IBaseCalendarModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import static org.navalplanner.web.I18nHelper._;
/**
* Model for worker <br />
* @author Óscar González Fernández <ogonzalez@igalia.com>
@ -46,6 +52,9 @@ public class WorkerModel implements IWorkerModel {
@Autowired
private IResourceDAO resourceDAO;
@Autowired
private IBaseCalendarDAO baseCalendarDAO;
private final ICriterionType<?>[] laboralRelatedTypes = {
PredefinedCriterionTypes.LEAVE,
PredefinedCriterionTypes.WORK_RELATIONSHIP };
@ -56,6 +65,13 @@ public class WorkerModel implements IWorkerModel {
private IMultipleCriterionActiveAssigner localizationsAssigner;
private ClassValidator<BaseCalendar> baseCalendarValidator = new ClassValidator<BaseCalendar>(
BaseCalendar.class);
@Autowired
@Qualifier("subclass")
private IBaseCalendarModel baseCalendarModel;
@Autowired
public WorkerModel(IResourceDAO resourceDAO,
ICriterionDAO criterionDAO) {
@ -69,6 +85,9 @@ public class WorkerModel implements IWorkerModel {
@Override
@Transactional
public void save() throws ValidationException {
if (worker.getCalendar() != null) {
baseCalendarModel.checkInvalidValuesCalendar(worker.getCalendar());
}
InvalidValue[] invalidValues = workerValidator
.getInvalidValues(getWorker());
if (invalidValues.length > 0) {
@ -108,6 +127,7 @@ public class WorkerModel implements IWorkerModel {
try {
this.worker = (Worker) resourceDAO.find(worker.getId());
forceLoadSatisfactions(this.worker);
forceLoadCalendar(this.worker);
localizationsAssigner = new MultipleCriterionActiveAssigner(
criterionDAO, this.worker,
PredefinedCriterionTypes.LOCATION_GROUP);
@ -124,6 +144,22 @@ public class WorkerModel implements IWorkerModel {
}
}
private void forceLoadCalendar(Worker worker) {
if (worker.getCalendar() != null) {
forceLoadCalendar(worker.getCalendar());
}
}
private void forceLoadCalendar(BaseCalendar baseCalendar) {
for (CalendarData calendarData : baseCalendar.getCalendarDataVersions()) {
calendarData.getHoursPerDay().size();
if (calendarData.getParent() != null) {
forceLoadCalendar(calendarData.getParent());
}
}
baseCalendar.getExceptions().size();
}
@Override
@Transactional(readOnly = true)
public AddingSatisfactionResult addSatisfaction(ICriterionType<?> type,
@ -409,4 +445,26 @@ public class WorkerModel implements IWorkerModel {
}
return result;
}
@Override
@Transactional(readOnly = true)
public List<BaseCalendar> getBaseCalendars() {
return baseCalendarDAO.getBaseCalendars();
}
@Override
public void setCalendar(ResourceCalendar resourceCalendar) {
if (worker != null) {
worker.setCalendar(resourceCalendar);
}
}
@Override
public ResourceCalendar getCalendar() {
if (worker != null) {
return worker.getCalendar();
}
return null;
}
}

View file

@ -0,0 +1,17 @@
<window visible="@{calendarController.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="@{calendarController.editionController.dateValidFromNewVersion}"/>
</hbox>
<hbox>
<button label="${i18n:_('Create')}"
onClick="calendarController.editionController.acceptCreateNewVersion();" />
<button label="${i18n:_('Cancel')}"
onClick="calendarController.editionController.cancelNewVersion();" />
</hbox>
</vbox>
</window>

View file

@ -5,7 +5,7 @@
<tabs>
<tab label="${i18n:_('Data')}" id="dataTab" />
<tab label="${i18n:_('History')}"
visible="@{controller.editionController.isEditing}" id="historyTab" />
visible="@{calendarController.editionController.isEditing}" id="historyTab" />
</tabs>
<tabpanels>
@ -19,16 +19,16 @@
<hbox>
<label value="${i18n:_('Name')}" />
<textbox value="@{controller.editionController.baseCalendar.name}" />
<textbox value="@{calendarController.editionController.baseCalendar.name}" />
</hbox>
<hbox>
<label value="${i18n:_('Type')}" />
<vbox>
<label value="@{controller.editionController.calendarType}" />
<label value="@{calendarController.editionController.calendarType}" />
<combobox id="parentCalendars"
visible="@{controller.editionController.isDerived}"
disabled="@{controller.editionController.isDateValidFromPast}">
visible="@{calendarController.editionController.isDerived}"
disabled="@{calendarController.editionController.isDateValidFromPast}">
<comboitem self="@{each='baseCalnedar'}" value="@{baseCalnedar}"
label="@{baseCalnedar.name}" />
</combobox>
@ -36,8 +36,8 @@
</hbox>
<listbox id="hoursPerDay"
model="@{controller.editionController.getHoursPerDay}"
itemRenderer="@{controller.editionController.hoursPerDayRenderer}">
model="@{calendarController.editionController.getHoursPerDay}"
itemRenderer="@{calendarController.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.editionController.selectedDay,access='both'}"
ancestorExceptionDays="@{controller.editionController.ancestorExceptionDays,access='both'}"
ownExceptionDays="@{controller.editionController.ownExceptionDays,access='both'}"
zeroHoursDays="@{controller.editionController.zeroHoursDays,access='both'}" />
value="@{calendarController.editionController.selectedDay,access='both'}"
ancestorExceptionDays="@{calendarController.editionController.ancestorExceptionDays,access='both'}"
ownExceptionDays="@{calendarController.editionController.ownExceptionDays,access='both'}"
zeroHoursDays="@{calendarController.editionController.zeroHoursDays,access='both'}" />
<hbox>
<label value="${i18n:_('Type of day')}" />
<label value="@{controller.editionController.typeOfDay}" />
<label value="@{calendarController.editionController.typeOfDay}" />
</hbox>
<hbox>
<label value="${i18n:_('Hours of day')}" />
<label value="@{controller.editionController.hoursOfDay}" />
<label value="@{calendarController.editionController.hoursOfDay}" />
</hbox>
<hbox visible="@{controller.editionController.isNotSelectedDateFromPast}">
<hbox visible="@{calendarController.editionController.isNotSelectedDateFromPast}">
<vbox>
<button label="${i18n:_('Create exception')}"
onClick="controller.editionController.createException();" />
<button disabled="@{controller.editionController.isNotExceptional}"
onClick="calendarController.editionController.createException();" />
<button disabled="@{calendarController.editionController.isNotExceptional}"
label="${i18n:_('Remove exception')}"
onClick="controller.editionController.removeException();" />
onClick="calendarController.editionController.removeException();" />
</vbox>
<intbox id="exceptionHours" value="0" />
</hbox>
@ -79,23 +79,23 @@
</hbox>
<hbox visible="@{controller.editionController.isEditing}">
<hbox visible="@{calendarController.editionController.isEditing}">
<label value="${i18n:_('Valid from')}" />
<datebox id="dateValidFrom" value="@{controller.editionController.dateValidFrom}"
disabled="@{controller.editionController.isDateValidFromPast}" />
<datebox id="dateValidFrom" value="@{calendarController.editionController.dateValidFrom}"
disabled="@{calendarController.editionController.isDateValidFromPast}" />
<label value="${i18n:_('to')}" />
<datebox id="expiringDate" value="@{controller.editionController.expiringDate}"
disabled="@{controller.editionController.isLastVersion}" />
<datebox id="expiringDate" value="@{calendarController.editionController.expiringDate}"
disabled="@{calendarController.editionController.isLastVersion}" />
</hbox>
<hbox>
<button onClick="controller.editionController.save();"
<button onClick="calendarController.editionController.save();"
label="${arg.save_button_label}" />
<button onClick="controller.editionController.cancel();"
<button onClick="calendarController.editionController.cancel();"
label="${arg.cancel_button_label}" />
<button onClick="controller.editionController.createNewVersion();"
<button onClick="calendarController.editionController.createNewVersion();"
label="${i18n:_('Create new version')}"
visible="@{controller.editionController.isEditing}" />
visible="@{calendarController.editionController.isEditing}" />
</hbox>
</vbox>
@ -104,8 +104,8 @@
<tabpanel>
<listbox model="@{controller.editionController.historyVersions}"
itemRenderer="@{controller.editionController.historyVersionsRenderer}">
<listbox model="@{calendarController.editionController.historyVersions}"
itemRenderer="@{calendarController.editionController.historyVersionsRenderer}">
<listhead>
<listheader label="${i18n:_('Name')}" />
<listheader label="${i18n:_('Parent')}" />

View file

@ -1,12 +1,12 @@
<window id="${arg.top_id}" title="${i18n:_('Calendars List')}">
<tree id="tree" model="@{controller.baseCalendarsTreeModel}"
treeitemRenderer="@{controller.baseCalendarsTreeitemRenderer}">
<tree id="tree" model="@{calendarController.baseCalendarsTreeModel}"
treeitemRenderer="@{calendarController.baseCalendarsTreeitemRenderer}">
<treecols sizable="true">
<treecol label="${i18n:_('Name')}" />
<treecol label="${i18n:_('Operations')}" />
</treecols>
</tree>
<button id="show_create_form" onClick="controller.goToCreateForm();"
<button id="show_create_form" onClick="calendarController.goToCreateForm();"
label="${i18n:_('Create')}">
</button>
</window>

View file

@ -9,6 +9,7 @@
<?variable-resolver class="org.zkoss.zkplus.spring.DelegatingVariableResolver"?>
<?component name="list" inline="true" macroURI="_list.zul"?>
<?component name="edition" inline="true" macroURI="_edition.zul"?>
<?component name="createNewVersion" inline="true" macroURI="_createNewVersion.zul"?>
<zk>
<window self="@{define(content)}"
@ -21,39 +22,23 @@
<edition top_id="editWindow" title="${i18n:_('Edit Calendar')}"
save_button_label="${i18n:_('Save')}"
cancel_button_label="${i18n:_('Cancel')}" />
<window visible="@{controller.confirmingRemove}"
<window visible="@{calendarController.confirmingRemove}"
id="confirmRemove" title="${i18n:_('Confirmation')}" sizable="true"
position="center">
<vbox align = "center">
<hbox align = "center">
<i18n value="Do you want to delete &quot;{0}&quot;?"
arg0="@{controller.baseCalendar.name}"/>
arg0="@{calendarController.baseCalendar.name}"/>
</hbox>
<hbox align = "center">
<button label="${i18n:_('Yes')}"
onClick="controller.remove();" />
onClick="calendarController.remove();" />
<button label="${i18n:_('No')}"
onClick="controller.cancelRemove();" />
</hbox>
</vbox>
</window>
<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.editionController.dateValidFromNewVersion}"/>
</hbox>
<hbox>
<button label="${i18n:_('Create')}"
onClick="controller.editionController.acceptCreateNewVersion();" />
<button label="${i18n:_('Cancel')}"
onClick="controller.editionController.cancelNewVersion();" />
onClick="calendarController.cancelRemove();" />
</hbox>
</vbox>
</window>
<createNewVersion />
</window>
</zk>

View file

@ -0,0 +1,48 @@
<?component name="calendarEdition" inline="true" macroURI="/calendars/_edition.zul"?>
<?component name="createNewVersion" inline="true" macroURI="/calendars/_createNewVersion.zul"?>
<vbox id="resourceCalendarContainer">
<div visible="@{controller.isCalendarNull}">
<radiogroup onCheck="controller.calendarChecked(self.selectedItem)">
<hbox>
<radio id="createFromScratch"
label="${i18n:_('Create calendar from scratch')}"
checked="true" />
</hbox>
<hbox>
<radio id="createDerived" label="${i18n:_('Create derived calendar')}" />
<combobox id="createDerivedCalendar" disabled="true"
model="@{controller.baseCalendars}">
<comboitem self="@{each='baseCalnedar'}" value="@{baseCalnedar}"
label="@{baseCalnedar.name}" />
</combobox>
</hbox>
<hbox>
<radio id="createCopy" label="${i18n:_('Create copy of calendar')}" />
<combobox id="createCopyCalendar" disabled="true"
model="@{controller.baseCalendars}">
<comboitem self="@{each='baseCalnedar'}" value="@{baseCalnedar}"
label="@{baseCalnedar.name}" />
</combobox>
</hbox>
</radiogroup>
<button label="${i18n:_('Create')}"
onClick="controller.createCalendar();" />
</div>
<div visible="@{controller.isCalendarNotNull}">
<calendarEdition top_id="editCalendarWindow" title="${i18n:_('Edit Calendar')}"
save_button_label="${i18n:_('Save changes')}"
cancel_button_label="${i18n:_('Remove calendar')}" />
<createNewVersion />
</div>
</vbox>

View file

@ -1,11 +1,13 @@
<?component name="localizations" inline="true" macroURI="_localizations.zul"?>
<?component name="workRelationships" inline="true" macroURI="_workRelationships.zul"?>
<?component name="resourceCalendar" inline="true" macroURI="_calendar.zul"?>
<window id="${arg.top_id}" title="${arg.title}">
<tabbox>
<tabs>
<tab label="${i18n:_('Edit')}"></tab>
<tab label="${i18n:_('Places')}"></tab>
<tab label="${i18n:_('Work record')}"></tab>
<tab label="${i18n:_('Calendar')}"></tab>
</tabs>
<tabpanels>
<tabpanel>
@ -45,6 +47,9 @@
title="${i18n:_('Work relationships')}" save_button_label="${i18n:_('Save')}"
cancel_button_label="${i18n:_('Cancel')}" />
</tabpanel>
<tabpanel>
<resourceCalendar />
</tabpanel>
</tabpanels>
</tabbox>
<button onClick="controller.save();"

View file

@ -34,6 +34,7 @@ public class WorkerCRUDControllerTest {
private Window workRelationshipsWindow;
private Window addWorkRelationshipWindow;
private Window editWorkRelationshipWindow;
private Window editCalendarWindow;
private WorkerCRUDController createControllerForModel(
IWorkerModel workerModel) {
@ -48,10 +49,12 @@ public class WorkerCRUDControllerTest {
workRelationshipsWindow = createNiceMock(Window.class);
addWorkRelationshipWindow = createNiceMock(Window.class);
editWorkRelationshipWindow = createNiceMock(Window.class);
editCalendarWindow = createNiceMock(Window.class);
WorkerCRUDController workerCRUDController = new WorkerCRUDController(
createWindow, listWindow, editWindow, workRelationshipsWindow,
addWorkRelationshipWindow, editWorkRelationshipWindow,
workerModel, messages, createNiceMock(IWorkerCRUDControllerEntryPoints.class));
editCalendarWindow, workerModel, messages,
createNiceMock(IWorkerCRUDControllerEntryPoints.class));
return workerCRUDController;
}