From d385c64c19b7cc9a24faacc41df53b8c9748a499 Mon Sep 17 00:00:00 2001 From: Manuel Rego Casasnovas Date: Wed, 26 Aug 2009 09:14:02 +0200 Subject: [PATCH] ItEr23S08CUEdicionCalendarioLaboral: Highlighting exception days on calendar. --- .../calendars/BaseCalendarCRUDController.java | 34 +++++++++++ .../web/calendars/BaseCalendarModel.java | 10 ++++ .../web/calendars/IBaseCalendarModel.java | 3 + .../components/CalendarHighlightedDays.java | 56 +++++++++++++++++++ .../main/resources/metainfo/zk/lang-addon.xml | 10 +++- .../src/main/webapp/calendars/_edition.zul | 5 +- .../components/calendarhighlighteddays.zul | 53 ++++++++++++++++++ 7 files changed, 168 insertions(+), 3 deletions(-) create mode 100644 navalplanner-webapp/src/main/java/org/navalplanner/web/common/components/CalendarHighlightedDays.java create mode 100644 navalplanner-webapp/src/main/webapp/common/components/calendarhighlighteddays.zul diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/calendars/BaseCalendarCRUDController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/calendars/BaseCalendarCRUDController.java index 4290deb46..39e09dc44 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/calendars/BaseCalendarCRUDController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/calendars/BaseCalendarCRUDController.java @@ -6,6 +6,7 @@ import java.util.Arrays; import java.util.Date; import java.util.List; +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.BaseCalendar.Days; @@ -597,4 +598,37 @@ public class BaseCalendarCRUDController extends GenericForwardComposer { getVisibility().showOnly(editWindow); } + public String getDays() { + LocalDate currentDate = new LocalDate(baseCalendarModel + .getSelectedDay()); + + LocalDate minDate = currentDate.dayOfMonth().withMinimumValue(); + LocalDate maxDate = currentDate.dayOfMonth().withMaximumValue(); + + String days = ""; + + for (LocalDate date = minDate; date.compareTo(maxDate) <= 0; date = date + .plusDays(1)) { + DayType typeOfDay = baseCalendarModel.getTypeOfDay(date); + if (typeOfDay != null) { + switch (typeOfDay) { + case ANCESTOR_EXCEPTION: + case OWN_EXCEPTION: + days += date.getDayOfMonth() + ","; + break; + case ZERO_HOURS: + case NORMAL: + default: + break; + } + } + } + + if (days.length() > 0) { + days = days.substring(0, days.length() - 1); + } + + return days; + } + } 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 df8c341f0..916ce41e3 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 @@ -244,6 +244,16 @@ public class BaseCalendarModel implements IBaseCalendarModel { return getBaseCalendar().getType(selectedDate); } + @Override + @Transactional(readOnly = true) + public DayType getTypeOfDay(LocalDate date) { + if (getBaseCalendar() == null) { + return null; + } + + return getBaseCalendar().getType(date); + } + @Override @Transactional(readOnly = true) public void createException(Integer hours) { 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 018d94ef7..114f75d6d 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 @@ -3,6 +3,7 @@ package org.navalplanner.web.calendars; import java.util.Date; import java.util.List; +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.BaseCalendar.Days; @@ -75,6 +76,8 @@ public interface IBaseCalendarModel { DayType getTypeOfDay(); + DayType getTypeOfDay(LocalDate date); + Integer getHoursOfDay(); void createException(Integer hours); diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/components/CalendarHighlightedDays.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/components/CalendarHighlightedDays.java new file mode 100644 index 000000000..c7a2c0350 --- /dev/null +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/components/CalendarHighlightedDays.java @@ -0,0 +1,56 @@ +package org.navalplanner.web.common.components; + +import java.util.Date; + +import org.navalplanner.web.common.Util; +import org.zkoss.zk.ui.HtmlMacroComponent; +import org.zkoss.zk.ui.util.Clients; +import org.zkoss.zul.Calendar; + +/** + * ZK macro component that uses the {@link Calendar} component adding the + * possibility to highlight some days in the calendar. + * + * @author Manuel Rego Casasnovas + */ +public class CalendarHighlightedDays extends HtmlMacroComponent { + + private Date value; + + private String days; + + public void setInternalValue(Date value) { + this.value = value; + + Util.saveBindings(this); + highlightDays(); + } + + public Date getInternalValue() { + highlightDays(); + return value; + } + + public void setValue(Date value) { + this.value = value; + } + + public Date getValue() { + return value; + } + + public void setDays(String days) { + this.days = days; + } + + public String getDays() { + return days; + } + + private void highlightDays() { + Clients + .evalJavaScript("highlightDays('" + days + + "', 'black', 'red');"); + } + +} diff --git a/navalplanner-webapp/src/main/resources/metainfo/zk/lang-addon.xml b/navalplanner-webapp/src/main/resources/metainfo/zk/lang-addon.xml index bb895042b..663e8bec4 100755 --- a/navalplanner-webapp/src/main/resources/metainfo/zk/lang-addon.xml +++ b/navalplanner-webapp/src/main/resources/metainfo/zk/lang-addon.xml @@ -11,10 +11,16 @@ /common/components/twowayselector.zul - + i18n org.navalplanner.web.common.components.I18n /common/components/i18n.zul - + + calendarhighlighteddays + org.navalplanner.web.common.components.CalendarHighlightedDays + /common/components/calendarhighlighteddays.zul + + + \ No newline at end of file diff --git a/navalplanner-webapp/src/main/webapp/calendars/_edition.zul b/navalplanner-webapp/src/main/webapp/calendars/_edition.zul index 16abd8ba5..6bb066799 100644 --- a/navalplanner-webapp/src/main/webapp/calendars/_edition.zul +++ b/navalplanner-webapp/src/main/webapp/calendars/_edition.zul @@ -50,7 +50,10 @@ - + +