From 425a16d093ca827c213ecbebad60a20200dd4368 Mon Sep 17 00:00:00 2001 From: Manuel Rego Casasnovas Date: Tue, 28 Aug 2012 11:16:35 +0200 Subject: [PATCH] Implement navigation between personal timesheets depending on periodicity FEA: ItEr77S07PersonalTimesheetsPeriodictyConfiguration --- .../PersonalTimesheetsPeriodicityEnum.java | 43 +++++++++++++++++++ .../dashboard/IMonthlyTimesheetModel.java | 12 ++++++ .../dashboard/MonthlyTimesheetController.java | 4 +- .../dashboard/MonthlyTimesheetModel.java | 10 +++++ 4 files changed, 67 insertions(+), 2 deletions(-) diff --git a/libreplan-business/src/main/java/org/libreplan/business/common/entities/PersonalTimesheetsPeriodicityEnum.java b/libreplan-business/src/main/java/org/libreplan/business/common/entities/PersonalTimesheetsPeriodicityEnum.java index 09f7cb68f..471fbf1ed 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/common/entities/PersonalTimesheetsPeriodicityEnum.java +++ b/libreplan-business/src/main/java/org/libreplan/business/common/entities/PersonalTimesheetsPeriodicityEnum.java @@ -52,6 +52,16 @@ public enum PersonalTimesheetsPeriodicityEnum { public LocalDate getDateForItemFromDate(int item, LocalDate fromDate) { return fromDate.plusMonths(item); } + + @Override + public LocalDate previous(LocalDate date) { + return getStart(date).minusMonths(1); + } + + @Override + public LocalDate next(LocalDate date) { + return getStart(date).plusMonths(1); + } }, TWICE_MONTHLY(_("Twice-monthly")) { @Override @@ -90,6 +100,25 @@ public enum PersonalTimesheetsPeriodicityEnum { } return date; } + + @Override + public LocalDate previous(LocalDate date) { + if (date.getDayOfMonth() <= 15) { + return date.minusMonths(1).dayOfMonth().withMinimumValue() + .plusDays(15); + } else { + return date.dayOfMonth().withMinimumValue(); + } + } + + @Override + public LocalDate next(LocalDate date) { + if (date.getDayOfMonth() <= 15) { + return date.dayOfMonth().withMinimumValue().plusDays(15); + } else { + return date.plusMonths(1).dayOfMonth().withMinimumValue(); + } + } }, WEEKLY(_("Weekly")) { @Override @@ -111,6 +140,16 @@ public enum PersonalTimesheetsPeriodicityEnum { public LocalDate getDateForItemFromDate(int item, LocalDate fromDate) { return fromDate.plusWeeks(item); } + + @Override + public LocalDate previous(LocalDate date) { + return getStart(date).minusWeeks(1); + } + + @Override + public LocalDate next(LocalDate date) { + return getStart(date).plusWeeks(1); + } }; private String name; @@ -132,4 +171,8 @@ public enum PersonalTimesheetsPeriodicityEnum { public abstract LocalDate getDateForItemFromDate(int item, LocalDate fromDate); + public abstract LocalDate previous(LocalDate date); + + public abstract LocalDate next(LocalDate date); + } diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/users/dashboard/IMonthlyTimesheetModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/users/dashboard/IMonthlyTimesheetModel.java index 66d8e6373..5a918fd46 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/users/dashboard/IMonthlyTimesheetModel.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/users/dashboard/IMonthlyTimesheetModel.java @@ -217,4 +217,16 @@ public interface IMonthlyTimesheetModel { */ String getTimesheetString(); + /** + * Returns the previous personal timesheet to the current one depending on + * the configured periodicity. + */ + LocalDate getPrevious(); + + /** + * Returns the next personal timesheet to the current one depending on the + * configured periodicity. + */ + LocalDate getNext(); + } diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/users/dashboard/MonthlyTimesheetController.java b/libreplan-webapp/src/main/java/org/libreplan/web/users/dashboard/MonthlyTimesheetController.java index e60dcdf8c..0e0e239d8 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/users/dashboard/MonthlyTimesheetController.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/users/dashboard/MonthlyTimesheetController.java @@ -679,7 +679,7 @@ public class MonthlyTimesheetController extends GenericForwardComposer previousMonth, _("There are unsaved changes in the current personal timesheet, please save before moving")); } - sendToMonthlyTimesheet(monthlyTimesheetModel.getDate().minusMonths(1)); + sendToMonthlyTimesheet(monthlyTimesheetModel.getPrevious()); } public void nextMonth() { @@ -689,7 +689,7 @@ public class MonthlyTimesheetController extends GenericForwardComposer _("There are unsaved changes in the current personal timesheet, please save before moving")); } - sendToMonthlyTimesheet(monthlyTimesheetModel.getDate().plusMonths(1)); + sendToMonthlyTimesheet(monthlyTimesheetModel.getNext()); } private void sendToMonthlyTimesheet(final LocalDate date) { diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/users/dashboard/MonthlyTimesheetModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/users/dashboard/MonthlyTimesheetModel.java index f606fdeeb..bcf12ae99 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/users/dashboard/MonthlyTimesheetModel.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/users/dashboard/MonthlyTimesheetModel.java @@ -571,4 +571,14 @@ public class MonthlyTimesheetModel implements IMonthlyTimesheetModel { return MonthlyTimesheetDTO.toString(periodicity, date); } + @Override + public LocalDate getPrevious() { + return periodicity.previous(date); + } + + @Override + public LocalDate getNext() { + return periodicity.next(date); + } + }