Add Capacity Picker for edition of CalendarData

FEA: ItEr68OTS05IntroducionLimiteSobreasignacionCalendarios
This commit is contained in:
Óscar González Fernández 2011-01-18 20:42:55 +01:00
parent cf18d04498
commit 5a98c3871a
6 changed files with 80 additions and 35 deletions

View file

@ -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<EffortDuration>() {
EffortDurationPicker normalDurationPicker = new EffortDurationPicker();
EffortDurationPicker extraDurationPicker = new EffortDurationPicker();
Checkbox checkbox = createInfinitelyOverAssignableCheckbox();
@Override
public EffortDuration get() {
return baseCalendarModel.getDurationAt(day);
}
}, new Util.Setter<EffortDuration>() {
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<Capacity>() {
@Override
public Capacity get() {
return baseCalendarModel.getCapacityAt(day);
}
}, new Setter<Capacity>() {
@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();
}
}
}

View file

@ -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);
}
}

View file

@ -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();

View file

@ -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);
}
}

View file

@ -87,6 +87,10 @@ public class EffortDurationPicker extends Hbox {
seconds.setDisabled(disabled);
}
public boolean isDisabled() {
return hours.isDisabled();
}
public void bind(Getter<EffortDuration> getter) {
updateUIWithValuesFrom(getter.get());
}

View file

@ -178,7 +178,8 @@
itemRenderer="@{calendarController.editionController.hoursPerDayRenderer}">
<listhead>
<listheader label="${i18n:_('Day of week')}" width="80px"/>
<listheader label="${i18n:_('Workable Time')}" width="160px"/>
<listheader label="${i18n:_('Normal Effort')}" width="160px"/>
<listheader label="${i18n:_('Extra Effort')}" width="200px"/>
<listheader label="${i18n:_('Inh.')}" width="30px" tooltiptext="${i18n:_('Inherited from parent calendar')}" />
</listhead>
</listbox>