Fill the combo to create a new work week with the first calendar

in alphabetic order and changes the name columns and labels to
the edition calendar view.

FEA: ItEr75S05CalendarAdminInterfaceItEr74S06
This commit is contained in:
Susana Montes Pedreira 2011-07-08 14:46:27 +02:00
parent 81b8a09b03
commit 8fb8ccb5f7
7 changed files with 168 additions and 50 deletions

View file

@ -25,6 +25,7 @@ import static org.navalplanner.business.workingday.EffortDuration.hours;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
@ -77,6 +78,23 @@ public class BaseCalendar extends IntegrationEntity implements ICalendar {
return calendar;
}
public static List<BaseCalendar> sortByName(List<BaseCalendar> baseCalendars) {
Collections.sort(baseCalendars, new Comparator<BaseCalendar>() {
@Override
public int compare(BaseCalendar o1, BaseCalendar o2) {
if (o2.getName() == null) {
return -1;
}
if (o1.getName() == null) {
return 1;
}
return o1.getName().compareTo(o2.getName());
}
});
return baseCalendars;
}
private static void resetDefaultCapacities(BaseCalendar calendar) {
Capacity eightHours = Capacity.create(hours(8))
.overAssignableWithoutLimit();

View file

@ -38,14 +38,14 @@ import java.util.Map;
import org.apache.commons.lang.StringUtils;
import org.joda.time.LocalDate;
import org.navalplanner.business.calendars.entities.BaseCalendar;
import org.navalplanner.business.calendars.entities.BaseCalendar.DayType;
import org.navalplanner.business.calendars.entities.CalendarAvailability;
import org.navalplanner.business.calendars.entities.CalendarData;
import org.navalplanner.business.calendars.entities.CalendarData.Days;
import org.navalplanner.business.calendars.entities.CalendarException;
import org.navalplanner.business.calendars.entities.CalendarExceptionType;
import org.navalplanner.business.calendars.entities.Capacity;
import org.navalplanner.business.calendars.entities.ResourceCalendar;
import org.navalplanner.business.calendars.entities.BaseCalendar.DayType;
import org.navalplanner.business.calendars.entities.CalendarData.Days;
import org.navalplanner.business.workingday.EffortDuration;
import org.navalplanner.business.workingday.EffortDuration.Granularity;
import org.navalplanner.web.common.IMessagesForUser;
@ -70,6 +70,7 @@ import org.zkoss.zul.Button;
import org.zkoss.zul.Checkbox;
import org.zkoss.zul.Combobox;
import org.zkoss.zul.Comboitem;
import org.zkoss.zul.ComboitemRenderer;
import org.zkoss.zul.Constraint;
import org.zkoss.zul.Datebox;
import org.zkoss.zul.Hbox;
@ -125,6 +126,8 @@ public abstract class BaseCalendarEditionController extends
private HistoryVersionsRenderer historyVersionsRenderer = new HistoryVersionsRenderer();
private ParentCalendarsComboitemRenderer parentCalendarsComboitemRenderer = new ParentCalendarsComboitemRenderer();
private CalendarExceptionRenderer calendarExceptionRenderer = new CalendarExceptionRenderer();
private CalendarAvailabilityRenderer calendarAvailabilityRenderer = new CalendarAvailabilityRenderer();
@ -286,15 +289,44 @@ public abstract class BaseCalendarEditionController extends
public String getCalendarType() {
if (baseCalendarModel.isDerived()) {
return _("Derived");
String currentStartDate = this.getCurrentStartDateLabel();
String currentExpiringDate = this.getCurrentExpiringDateLabel();
return _("Derived of Calendar " + getNameParentCalendar()
+ currentStartDate + currentExpiringDate);
}
return _("Normal");
return _("Root calendar");
}
private String getCurrentExpiringDateLabel() {
System.out.println("expiringDate "
+ baseCalendarModel.getCurrentStartDate());
Date date = baseCalendarModel.getCurrentExpiringDate();
String label = "";
if (date != null) {
label = " to " + new SimpleDateFormat("dd/MM/yyyy").format(date);
}
return label;
}
private String getCurrentStartDateLabel() {
System.out.println("expiringDate "
+ baseCalendarModel.getCurrentStartDate());
Date date = baseCalendarModel.getCurrentStartDate();
String label = "";
if (date != null) {
label = " from " + new SimpleDateFormat("dd/MM/yyyy").format(date);
}
return label;
}
public boolean isDerived() {
return baseCalendarModel.isDerived();
}
public boolean isNotDerived() {
return (!isDerived());
}
public List<Days> getHoursPerDay() {
return Arrays.asList(Days.values());
}
@ -421,6 +453,7 @@ public abstract class BaseCalendarEditionController extends
private void reloadWorkWeeksList() {
Util.reloadBindings(window.getFellow("historyInformation"));
Util.reloadBindings(window.getFellow("calendarTypeLabel"));
}
private void reloadTypeDatesAndDuration() {
@ -1011,7 +1044,8 @@ public abstract class BaseCalendarEditionController extends
}
public List<BaseCalendar> getParentCalendars() {
return baseCalendarModel.getPossibleParentCalendars();
return baseCalendarModel.getSortedBaseCalendars(baseCalendarModel
.getPossibleParentCalendars());
}
public List<CalendarException> getCalendarExceptions() {
@ -1027,6 +1061,25 @@ public abstract class BaseCalendarEditionController extends
return calendarExceptions;
}
public ParentCalendarsComboitemRenderer getParentCalendarsComboitemRenderer() {
return parentCalendarsComboitemRenderer;
}
public class ParentCalendarsComboitemRenderer implements ComboitemRenderer {
@Override
public void render(Comboitem item, Object data) {
BaseCalendar calendar = (BaseCalendar) data;
item.setLabel(calendar.getName());
item.setValue(calendar);
Combobox combobox = (Combobox) item.getParent();
if (combobox.getSelectedItem() == null) {
combobox.setSelectedItem(item);
}
}
}
public CalendarExceptionRenderer getCalendarExceptionRenderer() {
return calendarExceptionRenderer;
}

View file

@ -34,14 +34,14 @@ import org.joda.time.LocalDate;
import org.navalplanner.business.calendars.daos.IBaseCalendarDAO;
import org.navalplanner.business.calendars.daos.ICalendarExceptionTypeDAO;
import org.navalplanner.business.calendars.entities.BaseCalendar;
import org.navalplanner.business.calendars.entities.BaseCalendar.DayType;
import org.navalplanner.business.calendars.entities.CalendarAvailability;
import org.navalplanner.business.calendars.entities.CalendarData;
import org.navalplanner.business.calendars.entities.CalendarData.Days;
import org.navalplanner.business.calendars.entities.CalendarException;
import org.navalplanner.business.calendars.entities.CalendarExceptionType;
import org.navalplanner.business.calendars.entities.Capacity;
import org.navalplanner.business.calendars.entities.ResourceCalendar;
import org.navalplanner.business.calendars.entities.BaseCalendar.DayType;
import org.navalplanner.business.calendars.entities.CalendarData.Days;
import org.navalplanner.business.common.IntegrationEntity;
import org.navalplanner.business.common.daos.IConfigurationDAO;
import org.navalplanner.business.common.entities.Configuration;
@ -103,6 +103,13 @@ public class BaseCalendarModel extends IntegrationEntityModel implements
return baseCalendars;
}
@Override
@Transactional(readOnly = true)
public List<BaseCalendar> getSortedBaseCalendars(
List<BaseCalendar> baseCalendars) {
return BaseCalendar.sortByName(baseCalendars);
}
/*
* Initial conversation steps
*/
@ -384,11 +391,38 @@ public class BaseCalendarModel extends IntegrationEntityModel implements
if (getBaseCalendar() == null) {
return null;
}
CalendarData version = getBaseCalendar().getCalendarData(
LocalDate.fromDateFields(new Date()));
CalendarData version = getCurrentVersion();
return version != null ? version.getParent() : null;
}
@Override
public Date getCurrentExpiringDate() {
CalendarData calendarData = getCurrentVersion();
if (calendarData != null) {
LocalDate startDate = calendarData.getExpiringDate();
return startDate != null ? startDate.minusDays(1)
.toDateTimeAtStartOfDay()
.toDate() : null;
}
return null;
}
@Override
public Date getCurrentStartDate() {
CalendarData calendarData = getCurrentVersion();
if (calendarData != null) {
LocalDate startDate = getValidFrom(calendarData);
return startDate != null ? startDate.toDateTimeAtStartOfDay()
.toDate() : null;
}
return null;
}
public CalendarData getCurrentVersion() {
return getBaseCalendar().getCalendarData(
LocalDate.fromDateFields(new Date()));
}
@Override
@Transactional(readOnly = true)
public void setParent(BaseCalendar parent) {

View file

@ -21,6 +21,7 @@
package org.navalplanner.web.calendars;
import java.util.Date;
import java.util.List;
import java.util.Set;
@ -217,4 +218,10 @@ public interface IBaseCalendarModel extends IIntegrationEntityModel {
BaseCalendar getCurrentParent();
List<BaseCalendar> getSortedBaseCalendars(List<BaseCalendar> baseCalendars);
Date getCurrentStartDate();
Date getCurrentExpiringDate();
}

View file

@ -24,6 +24,7 @@ package org.navalplanner.web.common;
import static org.navalplanner.web.I18nHelper._;
import java.util.ConcurrentModificationException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
@ -124,4 +125,9 @@ public abstract class IntegrationEntityModel implements IIntegrationEntityModel
return entitySequenceDAO;
}
public Date getCurrentExpiringDate() {
// TODO Auto-generated method stub
return null;
}
}

View file

@ -20,40 +20,46 @@
-->
<window visible="@{calendarController.editionController.creatingNewVersion}"
id="createNewVersion" title="${i18n:_('Create new version')}" width="350px">
<vbox>
<label value="${i18n:_('Select the base calendar from which the new version will derive')}"
visible="@{calendarController.editionController.isDerived}"/>
<hbox align="right" visible="@{calendarController.editionController.isDerived}">
id="createNewVersion" title="${i18n:_('Create new work week')}" width="450px"
closable="true" border="normal"
onClose = "calendarController.editionController.cancelNewVersion();">
<grid id="gridProjectDetails">
<columns>
<column width="150px" />
<column width="300px" />
</columns>
<rows>
<row>
<label value="${i18n:_('Base calendar')}" />
<hbox align="right">
<label value="${i18n:_('Type')}:"/>
<label value="@{calendarController.editionController.calendarType}"/>
<combobox id="parentCalendars"
constraint="no empty:${i18n:_('cannot be null or empty')}"
model="@{calendarController.editionController.parentCalendars}">
<comboitem self="@{each='baseCalnedar'}"
value="@{baseCalnedar}" label="@{baseCalnedar.name}" />
</combobox>
</hbox>
<separator spacing="5px"/>
<label value="${i18n:_('Select the date from which the new version will be valid')}" />
<separator spacing="2px"/>
<hbox visible="@{calendarController.editionController.isEditing}"
align="right">
<label value="${i18n:_('Valid from')}" />
<datebox id="startDateValidFromNewVersion"
value="@{calendarController.editionController.dateValidFromNewVersion}"
disabled="@{calendarController.editionController.isFirstVersion(self.value)}" />
<label value="${i18n:_('to')}" />
<datebox id="expiringDateValidFromNewVersion"
value="@{calendarController.editionController.dateValidToNewVersion}"
disabled="@{calendarController.editionController.isLastVersion(self.value)}" />
</hbox>
<separator spacing="5px"/>
<hbox>
<button label="${i18n:_('Create')}"
onClick="calendarController.editionController.acceptCreateNewVersion();" />
<button label="${i18n:_('Cancel')}"
onClick="calendarController.editionController.cancelNewVersion();" />
</hbox>
</vbox>
model="@{calendarController.editionController.parentCalendars}"
disabled="@{calendarController.editionController.isNotDerived}"
itemRenderer = "@{calendarController.editionController.parentCalendarsComboitemRenderer}" />
</hbox>
</row>
<row>
<label value="${i18n:_('From date')}" />
<datebox id="startDateValidFromNewVersion"
value="@{calendarController.editionController.dateValidFromNewVersion}"/>
</row>
<row>
<label value="${i18n:_('Up to date')}" />
<datebox id="expiringDateValidFromNewVersion"
value="@{calendarController.editionController.dateValidToNewVersion}"/>
</row>
</rows>
</grid>
<hbox>
<button label="${i18n:_('Create')}"
onClick="calendarController.editionController.acceptCreateNewVersion();"
sclass="create-button global-action"/>
<button label="${i18n:_('Cancel')}"
onClick="calendarController.editionController.cancelNewVersion();"
sclass="cancel-button global-action"/>
</hbox>
</window>

View file

@ -45,13 +45,7 @@
<row>
<label value="${i18n:_('Type')}" />
<hbox>
<label
value="@{calendarController.editionController.nameParentCalendar}"
visible="@{calendarController.editionController.isDerived}" />
[
<label
value="@{calendarController.editionController.calendarType}" />
]
<label id="calendarTypeLabel" value="@{calendarController.editionController.calendarType}" />
</hbox>
</row>
<row
@ -237,7 +231,7 @@
visible="@{calendarController.editionController.isDerived}"/>
<listheader label="${i18n:_('Valid from')}"
width="80px" />
<listheader label="${i18n:_('Expiry date')}"
<listheader label="${i18n:_('Valid until')}"
width="80px" />
<listheader label="${i18n:_('Summary')}" />
<listheader label="${i18n:_('Op.')}"