Revamped calendars administration

FEA: ItEr74S06CalendarAdminInterfaceItEr73S06
This commit is contained in:
Lorenzo Tilve Álvaro 2011-05-07 02:49:40 +02:00
parent f9b4497b72
commit 869191bc67
3 changed files with 306 additions and 207 deletions

View file

@ -91,10 +91,12 @@ public abstract class BaseCalendarEditionController extends
GenericForwardComposer {
private static String asString(Capacity capacity) {
String extraEffortString = capacity.isOverAssignableWithoutLimit() ? _("unlimited")
String extraEffortString = capacity.isOverAssignableWithoutLimit() ? _("unl")
: asString(capacity.getAllowedExtraEffort());
return asString(capacity.getStandardEffort()) + " " + extraEffortString;
return asString(capacity.getStandardEffort()) + " ["
+ extraEffortString
+ "]";
}
private static String asString(EffortDuration duration) {
@ -103,10 +105,9 @@ public abstract class BaseCalendarEditionController extends
}
EnumMap<Granularity, Integer> decomposed = duration.decompose();
String result = _("{0}h", decomposed.get(Granularity.HOURS));
if (decomposed.get(Granularity.MINUTES) > 0) {
result += _(" {0}m", decomposed.get(Granularity.MINUTES));
}
String result = _("{0}:", decomposed.get(Granularity.HOURS));
result += _("{0}", decomposed.get(Granularity.MINUTES));
if (decomposed.get(Granularity.SECONDS) > 0) {
result += _(" {0}s", decomposed.get(Granularity.SECONDS));
}
@ -423,6 +424,7 @@ public abstract class BaseCalendarEditionController extends
EffortDurationPicker extraDurationPicker, Checkbox checkbox) {
Listcell extraEffortCell = new Listcell();
Hbox hbox = new Hbox();
hbox.setSclass("extra effort cell");
hbox.appendChild(extraDurationPicker);
hbox.appendChild(checkbox);
extraEffortCell.appendChild(hbox);

View file

@ -21,253 +21,298 @@
<window id="${arg.top_id}" title="${arg.title}">
<tabbox>
<tabs>
<tab label="${i18n:_('Calendar data')}"></tab>
</tabs>
<tabpanels>
<tabpanel>
<tabbox sclass="calendar-tabbox">
<tabs>
<tab label="${i18n:_('Calendar data')}"></tab>
</tabs>
<tabpanels>
<tabpanel>
<grid fixedLayout="true" style="margin-bottom: 10px;">
<columns>
<column width="200px" />
<column/>
</columns>
<rows>
<row visible="@{calendarController.editionController.isNotResourceCalendar}">
<label value="${i18n:_('Name')}" />
<textbox value="@{calendarController.editionController.baseCalendar.name}" width="300px"
constraint="no empty:${i18n:_('cannot be null or empty')}" />
</row>
<row>
<label value="${i18n:_('Type')}" />
<vbox>
<label value="@{calendarController.editionController.calendarType}" />
<label value="@{calendarController.editionController.nameParentCalendar}" visible="@{calendarController.editionController.isDerived}" />
</vbox>
</row>
<row visible="@{calendarController.editionController.notResourceCalendar}">
<label value="${i18n:_('Code')}" />
<hbox>
<textbox id="txtCode" value="@{calendarController.editionController.baseCalendar.code}" width="250px"
constraint="no empty:${i18n:_('cannot be null or empty')}"
disabled="@{calendarController.baseCalendar.codeAutogenerated}" />
<checkbox label="${i18n:_('Generate code')}"
onCheck="calendarController.editionController.onCheckGenerateCode(event)"
checked="@{calendarController.baseCalendar.codeAutogenerated}" />
</hbox>
</row>
</rows>
<grid fixedLayout="true" style="margin-bottom: 10px;"
sclass="calendar-data">
<columns>
<column width="200px" />
<column />
</columns>
<rows>
<row
visible="@{calendarController.editionController.isNotResourceCalendar}">
<label value="${i18n:_('Name')}" />
<textbox
value="@{calendarController.editionController.baseCalendar.name}"
width="300px" constraint="no empty:${i18n:_('cannot be null or empty')}" />
</row>
<row>
<label value="${i18n:_('Type')}" />
<hbox>
<label
value="@{calendarController.editionController.nameParentCalendar}"
visible="@{calendarController.editionController.isDerived}" />
[
<label
value="@{calendarController.editionController.calendarType}" />
]
</hbox>
</row>
<row
visible="@{calendarController.editionController.notResourceCalendar}">
<label value="${i18n:_('Code')}" />
<hbox>
<textbox id="txtCode"
value="@{calendarController.editionController.baseCalendar.code}"
width="250px" constraint="no empty:${i18n:_('cannot be null or empty')}"
disabled="@{calendarController.baseCalendar.codeAutogenerated}" />
<checkbox label="${i18n:_('Generate code')}"
onCheck="calendarController.editionController.onCheckGenerateCode(event)"
checked="@{calendarController.baseCalendar.codeAutogenerated}" />
</hbox>
</row>
</rows>
</grid>
<hbox width="100%">
<hbox width="100%">
<vbox id="dayInformation" width="100%">
<vbox id="dayInformation" width="100%">
<calendarhighlighteddays id="calendarWidget"
value="@{calendarController.editionController.selectedDay,access='both'}"
ancestorExceptionDays="@{calendarController.editionController.ancestorExceptionDays,access='both'}"
ownExceptionDays="@{calendarController.editionController.ownExceptionDays,access='both'}"
zeroHoursDays="@{calendarController.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="@{calendarController.editionController.typeOfDay}" />
</hbox>
<grid width="160px" sclass="day-details">
<auxhead>
<auxheader colspan="2" label="${i18n:_('Day properties')}" />
</auxhead>
<columns>
<column></column>
<column></column>
</columns>
<rows>
<row>
<label value="${i18n:_('Day')}" />
<datebox disabled="true"
value="@{calendarController.editionController.selectedDay}" />
</row>
<row>
<label value="${i18n:_('Type')}" />
<label
value="@{calendarController.editionController.typeOfDay}" />
</row>
<hbox>
<label value="${i18n:_('Workable time')}" />
<label value="@{calendarController.editionController.workableTime}" />
</hbox>
<row>
<label value="${i18n:_('Workable time')}" />
<label
value="@{calendarController.editionController.workableTime}" />
</row>
</rows>
</grid>
</vbox>
</vbox>
<tabbox>
<tabbox sclass="calendar-options-tabbox">
<tabs>
<tab label="${i18n:_('Exceptions')}" id="exceptionsTab" />
<tab label="${i18n:_('Work week')}" id="workWeekTab" />
<tab label="${i18n:_('Activation periods')}" id="activationPeriodsTab"
visible="@{calendarController.editionController.isResourceCalendar}" />
<tab label="${i18n:_('Exceptions')}" id="exceptionsTab" />
<tab label="${i18n:_('Work week')}" id="workWeekTab" />
<tab label="${i18n:_('Activation periods')}" id="activationPeriodsTab"
visible="@{calendarController.editionController.isResourceCalendar}" />
</tabs>
<tabpanels>
<tabpanel>
<tabpanel>
<vbox id="exceptionInformation" width="100%">
<vbox id="exceptionInformation" width="100%">
<grid width="100%" sclass="calendar-exceptions">
<columns>
<column width="500px"/>
<column />
</columns>
<rows>
<row>
<grid>
<grid style="margin-right: 5px;margin-left:5px;">
<columns>
<column width="180px" />
<column />
<column width="140px" />
<column />
</columns>
<rows>
<row>
<label value="${i18n:_('Start Date')}" />
<datebox id="exceptionStartDate"
value="@{calendarController.editionController.selectedDay}" />
</row>
<row>
<label value="${i18n:_('End Date')}" />
<datebox id="exceptionEndDate" />
</row>
<row>
<label value="${i18n:_('Exception Type')}" />
<combobox id="exceptionTypes">
<comboitem self="@{each='calendarExceptionType'}"
value="@{calendarExceptionType}"
label="@{calendarExceptionType.name}" />
</combobox>
</row>
<row id="exceptionDayNormalEffortRow">
<label value="${i18n:_('Normal Effort')}" />
</row>
<row>
<label value="${i18n:_('Extra Effort')}" />
<hbox id="exceptionDayExtraEffortBox">
</hbox>
</row>
<row>
<label value="${i18n:_('Period')}" />
<hbox align="middle">
<label value="${i18n:_('Start Date')}:" />
<datebox id="exceptionStartDate"
value="@{calendarController.editionController.selectedDay}" />
<label value="${i18n:_('End Date')}:" />
<datebox id="exceptionEndDate" />
</hbox>
</row>
<row>
<label value="Dedication" />
<hbox align="middle">
<label value="${i18n:_('Normal Effort')}:" />
<hbox id="exceptionDayNormalEffortRow" />
<label value="${i18n:_('Extra Effort')}:" />
<hbox id="exceptionDayExtraEffortBox"
sclass="exceptionDayExtraEffortBox" />
</hbox>
</row>
<row>
<label value="${i18n:_('Exception Type')}" />
<combobox id="exceptionTypes">
<comboitem self="@{each='calendarExceptionType'}"
value="@{calendarExceptionType}" label="@{calendarExceptionType.name}" />
</combobox>
</row>
</rows>
</grid>
</grid>
<hbox width="100%" style="margin-left: 5px;">
<button label="${i18n:_('Create exception')}"
onClick="calendarController.editionController.createException();"
visible="@{calendarController.editionController.isNotOwnExceptionDay}" />
<button label="${i18n:_('Update exception')}"
onClick="calendarController.editionController.updateException();"
visible="@{calendarController.editionController.isOwnExceptionDay}" />
</hbox>
<groupbox style="margin-top: 5px" closable="false">
<caption label="${i18n:_('Exceptions list')}" />
<listbox id="exceptionsList"
model="@{calendarController.editionController.calendarExceptions}"
itemRenderer="@{calendarController.editionController.calendarExceptionRenderer}"
onSelect="calendarController.editionController.onSelectException(event)"
rows="4" width="100%" >
<listhead>
<listheader label="${i18n:_('Day')}" />
<listheader label="${i18n:_('Exception Type')}" />
<listheader label="${i18n:_('Standard Effort')}" />
<listheader label="${i18n:_('Extra Effort')}" />
<listheader label="${i18n:_('Code')}" visible="@{calendarController.editionController.notResourceCalendar}"/>
<listheader label="${i18n:_('Origin')}" />
<listheader label="${i18n:_('Operations')}" />
</listhead>
</listbox>
</row>
</rows>
</grid>
<hbox width="100%">
<button label="${i18n:_('Create exception')}"
onClick="calendarController.editionController.createException();"
visible="@{calendarController.editionController.isNotOwnExceptionDay}" />
<button label="${i18n:_('Update exception')}"
onClick="calendarController.editionController.updateException();"
visible="@{calendarController.editionController.isOwnExceptionDay}" />
</hbox>
</vbox>
</tabpanel>
<tabpanel>
<vbox width="100%">
<hbox width="100%">
<listbox id="hoursPerDay"
model="@{calendarController.editionController.getHoursPerDay}"
itemRenderer="@{calendarController.editionController.hoursPerDayRenderer}">
<listhead>
<listheader label="${i18n:_('Day of week')}" width="80px"/>
<listheader label="${i18n:_('Normal Effort')}" width="100px"/>
<listheader label="${i18n:_('Extra Effort')}" width="120px"/>
<listheader label="${i18n:_('Inh.')}" width="30px" tooltiptext="${i18n:_('Inherited from parent calendar')}" />
</listhead>
model="@{calendarController.editionController.calendarExceptions}"
itemRenderer="@{calendarController.editionController.calendarExceptionRenderer}"
onSelect="calendarController.editionController.onSelectException(event)"
rows="4">
<listhead>
<listheader label="${i18n:_('Day')}" />
<listheader label="${i18n:_('Exception Type')}" />
<listheader label="${i18n:_('Normal Effort')}" width="80px" />
<listheader label="${i18n:_('Extra Effort')}" width="80px" />
<listheader label="${i18n:_('Code')}"
visible="@{calendarController.editionController.notResourceCalendar}" />
<listheader label="${i18n:_('Origin')}" />
<listheader label="${i18n:_('Op.')}" />
</listhead>
</listbox>
<listbox id="historyInformation"
model="@{calendarController.editionController.historyVersions}"
itemRenderer="@{calendarController.editionController.historyVersionsRenderer}">
<listhead>
<listheader label="${i18n:_('Parent')}" width="80px"/>
<listheader label="${i18n:_('Valid from')}" width="80px"/>
<listheader label="${i18n:_('Expiry date')}" width="80px"/>
<listheader label="${i18n:_('Summary')}" width="180px"/>
<listheader label="${i18n:_('Op.')}" tooltiptext="${i18n:_('Operations')}" width="50px"/>
</listhead>
</listbox>
</groupbox>
</hbox>
</vbox>
<hbox>
<label value="${i18n:_('Type')}" />
<label value="@{calendarController.editionController.calendarType}" />
<combobox id="parentCalendars"
visible="@{calendarController.editionController.isDerived}">
<comboitem self="@{each='baseCalnedar'}" value="@{baseCalnedar}"
label="@{baseCalnedar.name}" />
</combobox>
</hbox>
</tabpanel>
<hbox visible="@{calendarController.editionController.isEditing}">
<label value="${i18n:_('Valid from')}" />
<datebox id="dateValidFrom" value="@{calendarController.editionController.dateValidFrom}"
disabled="@{calendarController.editionController.isFirstVersion}" />
<label value="${i18n:_('to')}" />
<datebox id="expiringDate" value="@{calendarController.editionController.expiringDate}"
disabled="@{calendarController.editionController.isLastVersion}" />
</hbox>
<tabpanel>
<button onClick="calendarController.editionController.createNewVersion();"
<vbox width="100%">
<listbox id="hoursPerDay"
style="margin-right: 5px;margin-left:5px;"
model="@{calendarController.editionController.getHoursPerDay}"
itemRenderer="@{calendarController.editionController.hoursPerDayRenderer}">
<listhead>
<listheader label="${i18n:_('Day of week')}"
width="80px" />
<listheader label="${i18n:_('Normal Effort')}"
width="100px" />
<listheader label="${i18n:_('Extra Effort')}"
width="180px" />
<listheader label="${i18n:_('Inherited')}"
width="30px"
tooltiptext="${i18n:_('Inherited from parent calendar')}" />
</listhead>
</listbox>
<button
onClick="calendarController.editionController.createNewVersion();"
label="${i18n:_('Create new work week')}"
visible="@{calendarController.editionController.isEditing}"
sclass="create-button global-action" />
style="margin-left: 5px;" />
</vbox>
</tabpanel>
<groupbox style="margin-top: 5px" closable="false">
<tabpanel>
<caption label="${i18n:_('Work weeks list')}" />
<vbox>
<listbox id="calendarAvailabilities"
<hbox align="middle">
<label value="${i18n:_('Type')}:" />
<label
value="@{calendarController.editionController.calendarType}" />
<combobox id="parentCalendars"
visible="@{calendarController.editionController.isDerived}">
<comboitem self="@{each='baseCalnedar'}"
value="@{baseCalnedar}" label="@{baseCalnedar.name}" />
</combobox>
<hbox
visible="@{calendarController.editionController.isEditing}"
align="middle">
<label value="${i18n:_('Valid from')}" />
<datebox id="dateValidFrom"
value="@{calendarController.editionController.dateValidFrom}"
disabled="@{calendarController.editionController.isFirstVersion}" />
<label value="${i18n:_('to')}" />
<datebox id="expiringDate"
value="@{calendarController.editionController.expiringDate}"
disabled="@{calendarController.editionController.isLastVersion}" />
</hbox>
</hbox>
<listbox id="historyInformation"
model="@{calendarController.editionController.historyVersions}"
itemRenderer="@{calendarController.editionController.historyVersionsRenderer}">
<listhead>
<listheader label="${i18n:_('Parent')}"
width="80px" />
<listheader label="${i18n:_('Valid from')}"
width="80px" />
<listheader label="${i18n:_('Expiry date')}"
width="80px" />
<listheader label="${i18n:_('Summary')}" />
<listheader label="${i18n:_('Op.')}"
tooltiptext="${i18n:_('Operations')}" width="40px" />
</listhead>
</listbox>
</groupbox>
</vbox>
</tabpanel>
<tabpanel>
<vbox>
<listbox id="calendarAvailabilities"
model="@{calendarController.editionController.getCalendarAvailabilities}"
itemRenderer="@{calendarController.editionController.calendarAvailabilityRenderer}">
<listhead>
<listheader label="${i18n:_('Valid from')}" />
<listheader label="${i18n:_('Expiry date')}" />
<listheader label="${i18n:_('Code')}" visible="@{calendarController.editionController.notResourceCalendar}"/>
<listheader label="${i18n:_('Operations')}"/>
<listheader label="${i18n:_('Valid from')}" />
<listheader label="${i18n:_('Expiry date')}" />
<listheader label="${i18n:_('Code')}"
visible="@{calendarController.editionController.notResourceCalendar}" />
<listheader label="${i18n:_('Op.')}" />
</listhead>
</listbox>
<button label="${i18n:_('Create activation period')}"
onClick="calendarController.editionController.createCalendarAvailability();" />
</vbox>
</listbox>
<button label="${i18n:_('Create activation period')}"
onClick="calendarController.editionController.createCalendarAvailability();" />
</vbox>
</tabpanel>
</tabpanel>
</tabpanels>
</tabbox>
</tabbox>
</hbox>
</tabpanel>
</hbox>
</tabpanel>
</tabpanels>
</tabbox>
</tabbox>
<hbox>
<button onClick="calendarController.editionController.save();"
label="${arg.save_button_label}"
sclass="save-button global-action"
visible="${arg.save_button_visible}" />
<button onClick="calendarController.editionController.saveAndContinue();"
label="${arg.saveandcontinue_button_label}"
sclass="saveandcontinue-button global-action"
visible="${arg.save_button_visible}" />
<button onClick="calendarController.editionController.cancel();"
label="${arg.cancel_button_label}"
sclass="cancel-button global-action" />
</hbox>
<hbox>
<button onClick="calendarController.editionController.save();"
label="${arg.save_button_label}" sclass="save-button global-action"
visible="${arg.save_button_visible}" />
<button onClick="calendarController.editionController.saveAndContinue();"
label="${arg.saveandcontinue_button_label}" sclass="saveandcontinue-button global-action"
visible="${arg.save_button_visible}" />
<button onClick="calendarController.editionController.cancel();"
label="${arg.cancel_button_label}" sclass="cancel-button global-action" />
</hbox>
</window>

View file

@ -1645,3 +1645,55 @@ input.z-datebox-text-disd {
.timeplot-container {
margin-left: 8px;
}
.workerwindow .calendar-tabbox .z-tabs {
display:none;
}
.workerwindow .calendar-tabbox .calendar-options-tabbox .z-tabs {
display:block;
}
.workerwindow .calendar-tabbox .z-tabpanel {
border: 0;
}
.workerwindow .calendar-tabbox .calendar-options-tabbox .z-tabpanel {
border: solid 1px #7EAAC6;
}
.calendar-tabbox .z-textbox {
height: auto;
}
.calendar-tabbox .z-calendar {
margin: 5px;
}
.day-details .z-columns {
display: none;
}
.day-details {
width: 165px;
margin: 5px;
}
.day-details .z-datebox-disd input {
border: 0;
background: transparent;
color: black !important;
}
.day-details .z-datebox-disd * {
color: black !important;
}
.day-details .z-datebox-disd {
opacity: 1;
}
.day-details img {
display: none;
}