ItEr24S10CUAsignacionCalendarioLaboralRecursoItEr23S13: Making a lot of changes to adapt the new controller to be used from the edit resource view.
This commit is contained in:
parent
a75fea2a6f
commit
e241244918
15 changed files with 392 additions and 85 deletions
|
|
@ -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();
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
@ -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')}" />
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
@ -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 "{0}"?"
|
||||
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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -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();"
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue