diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/calendars/BaseCalendarEditionController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/calendars/BaseCalendarEditionController.java index f7bfb6465..fdb92f5c0 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/calendars/BaseCalendarEditionController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/calendars/BaseCalendarEditionController.java @@ -50,7 +50,9 @@ import org.navalplanner.business.workingday.EffortDuration.Granularity; import org.navalplanner.web.common.IMessagesForUser; import org.navalplanner.web.common.Level; import org.navalplanner.web.common.Util; +import org.navalplanner.web.common.Util.Getter; import org.navalplanner.web.common.Util.ICreation; +import org.navalplanner.web.common.Util.Setter; import org.navalplanner.web.common.components.CalendarHighlightedDays; import org.navalplanner.web.common.components.CapacityPicker; import org.navalplanner.web.common.components.EffortDurationPicker; @@ -68,6 +70,7 @@ import org.zkoss.zul.Checkbox; import org.zkoss.zul.Combobox; import org.zkoss.zul.Comboitem; import org.zkoss.zul.Datebox; +import org.zkoss.zul.Hbox; import org.zkoss.zul.Label; import org.zkoss.zul.Listbox; import org.zkoss.zul.Listcell; @@ -186,15 +189,19 @@ public abstract class BaseCalendarEditionController extends @Override public Checkbox createAt(Component parent) { - Checkbox infinitelyOverAssignable = new Checkbox(); - infinitelyOverAssignable - .setLabel(_("Infinitely Over Assignable")); - parent.appendChild(infinitelyOverAssignable); - return infinitelyOverAssignable; + Checkbox result = createInfinitelyOverAssignableCheckbox(); + parent.appendChild(result); + return result; } }); } + private Checkbox createInfinitelyOverAssignableCheckbox() { + Checkbox infinitelyOverAssignable = new Checkbox(); + infinitelyOverAssignable.setLabel(_("Infinitely Over Assignable")); + return infinitelyOverAssignable; + } + private void updateWithCapacityFrom(CalendarExceptionType exceptionType) { capacityPicker.setValue(exceptionType != null ? exceptionType .getCapacity() : Capacity.create(EffortDuration.zero())); @@ -331,30 +338,33 @@ public abstract class BaseCalendarEditionController extends 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); + addLabelCell(item, day); - Listcell durationCell = new Listcell(); - EffortDurationPicker durationPicker = new EffortDurationPicker(); - durationCell.appendChild(durationPicker); - durationPicker.bind(new Util.Getter() { + EffortDurationPicker normalDurationPicker = new EffortDurationPicker(); + EffortDurationPicker extraDurationPicker = new EffortDurationPicker(); + Checkbox checkbox = createInfinitelyOverAssignableCheckbox(); - @Override - public EffortDuration get() { - return baseCalendarModel.getDurationAt(day); - } - }, new Util.Setter() { + addNormalDurationCell(item, normalDurationPicker); + addExtraEffortCell(item, extraDurationPicker, checkbox); - @Override - public void set(EffortDuration value) { - baseCalendarModel.setDurationAt(day, value); - reloadDayInformation(); - } - }); - durationPicker.setDisabled(baseCalendarModel.isDerived() + CapacityPicker capacityPicker = CapacityPicker.workWith(checkbox, + normalDurationPicker, + extraDurationPicker, new Getter() { + + @Override + public Capacity get() { + return baseCalendarModel.getCapacityAt(day); + } + }, new Setter() { + + @Override + public void set(Capacity value) { + baseCalendarModel.setCapacityAt(day, value); + reloadDayInformation(); + } + }); + capacityPicker.setDisabled(baseCalendarModel.isDerived() && baseCalendarModel.isDefault(day)); - item.appendChild(durationCell); if (baseCalendarModel.isDerived()) { Listcell defaultListcell = new Listcell(); @@ -391,6 +401,29 @@ public abstract class BaseCalendarEditionController extends } } + private void addLabelCell(Listitem item, final Days day) { + Listcell labelListcell = new Listcell(); + labelListcell.appendChild(new Label(day.toString())); + item.appendChild(labelListcell); + } + + private void addNormalDurationCell(Listitem item, + EffortDurationPicker normalDurationPicker) { + Listcell normalEffortCell = new Listcell(); + normalEffortCell.appendChild(normalDurationPicker); + item.appendChild(normalEffortCell); + } + + private void addExtraEffortCell(Listitem item, + EffortDurationPicker extraDurationPicker, Checkbox checkbox) { + Listcell extraEffortCell = new Listcell(); + Hbox hbox = new Hbox(); + hbox.appendChild(extraDurationPicker); + hbox.appendChild(checkbox); + extraEffortCell.appendChild(hbox); + item.appendChild(extraEffortCell); + } + } private void reloadCurrentWindow() { @@ -1315,4 +1348,5 @@ public abstract class BaseCalendarEditionController extends reloadDayInformation(); } } + } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/calendars/BaseCalendarModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/calendars/BaseCalendarModel.java index aad3846aa..721e55694 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/calendars/BaseCalendarModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/calendars/BaseCalendarModel.java @@ -294,12 +294,12 @@ public class BaseCalendarModel extends IntegrationEntityModel implements } @Override - public EffortDuration getDurationAt(Days day) { + public Capacity getCapacityAt(Days day) { if (getBaseCalendar() == null) { - return EffortDuration.zero(); + return Capacity.zero(); } return getBaseCalendar().getCapacityConsideringCalendarDatasOn( - selectedDate, day).getStandardEffort(); + selectedDate, day); } @Override @@ -328,11 +328,9 @@ public class BaseCalendarModel extends IntegrationEntityModel implements } @Override - public void setDurationAt(Days day, EffortDuration value) { + public void setCapacityAt(Days day, Capacity value) { if (getBaseCalendar() != null) { - getBaseCalendar().setCapacityAt(day, - Capacity.create(value).overAssignableWithoutLimit(true), - selectedDate); + getBaseCalendar().setCapacityAt(day, value, selectedDate); } } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/calendars/IBaseCalendarModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/calendars/IBaseCalendarModel.java index 24821d31e..bd08df4a3 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/calendars/IBaseCalendarModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/calendars/IBaseCalendarModel.java @@ -197,9 +197,9 @@ public interface IBaseCalendarModel extends IIntegrationEntityModel { void cancel(); - EffortDuration getDurationAt(Days day); + Capacity getCapacityAt(Days day); - void setDurationAt(Days day, EffortDuration value); + void setCapacityAt(Days day, Capacity capacity); void generateCalendarCodes(); diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/components/CapacityPicker.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/components/CapacityPicker.java index f09b62825..ef6dbf0db 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/components/CapacityPicker.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/components/CapacityPicker.java @@ -143,4 +143,12 @@ public class CapacityPicker { updateExtraEffortDisability(); } + public void setDisabled(boolean disabled) { + standardEffortPicker.setDisabled(disabled); + updateExtraEffortDisability(); + extraEffortPicker.setDisabled(extraEffortPicker.isDisabled() + || disabled); + overAssignableWithoutLimitCheckbox.setDisabled(disabled); + } + } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/components/EffortDurationPicker.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/components/EffortDurationPicker.java index d07478a02..4e05ba5f4 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/components/EffortDurationPicker.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/components/EffortDurationPicker.java @@ -87,6 +87,10 @@ public class EffortDurationPicker extends Hbox { seconds.setDisabled(disabled); } + public boolean isDisabled() { + return hours.isDisabled(); + } + public void bind(Getter getter) { updateUIWithValuesFrom(getter.get()); } diff --git a/navalplanner-webapp/src/main/webapp/calendars/_edition.zul b/navalplanner-webapp/src/main/webapp/calendars/_edition.zul index a24ca80b2..d3d407790 100644 --- a/navalplanner-webapp/src/main/webapp/calendars/_edition.zul +++ b/navalplanner-webapp/src/main/webapp/calendars/_edition.zul @@ -178,7 +178,8 @@ itemRenderer="@{calendarController.editionController.hoursPerDayRenderer}"> - + +