From 1302e9b962df9d8b66be0f3e0b36faa222463bec Mon Sep 17 00:00:00 2001 From: Manuel Rego Casasnovas Date: Mon, 28 May 2012 10:10:03 +0200 Subject: [PATCH] Add total column in the monthly timesheet grid FEA: ItEr76S28UserDashboard --- .../dashboard/IMonthlyTimesheetModel.java | 6 ++++ .../dashboard/MonthlyTimesheetController.java | 29 +++++++++++++++++++ .../dashboard/MonthlyTimesheetModel.java | 11 +++++++ 3 files changed, 46 insertions(+) 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 7b96caa6c..43a32d68d 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 @@ -76,4 +76,10 @@ public interface IMonthlyTimesheetModel { */ void cancel(); + /** + * Returns the {@link EffortDuration} in the current monthly timesheet for + * the specified orderElement. + */ + EffortDuration getEffortDuration(OrderElement orderElement); + } \ No newline at end of file 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 1890f69b3..bea512eb1 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 @@ -71,6 +71,8 @@ public class MonthlyTimesheetController extends GenericForwardComposer Util.appendLabel(row, orderElement.getName()); appendInputsForDays(row, orderElement); + + appendTotalColumn(row, orderElement); } private void appendInputsForDays(Row row, @@ -106,13 +108,35 @@ public class MonthlyTimesheetController extends GenericForwardComposer } monthlyTimesheetModel.setEffortDuration(orderElement, textboxDate, effortDuration); + updateTotalColumn(orderElement); } + }); row.appendChild(textbox); } } + + private void appendTotalColumn(Row row, final OrderElement orderElement) { + Textbox textbox = new Textbox(); + textbox.setId(getTotalColumnTextboxId(orderElement)); + textbox.setDisabled(true); + row.appendChild(textbox); + + updateTotalColumn(orderElement); + } + + private String getTotalColumnTextboxId(final OrderElement orderElement) { + return "textbox-total-" + orderElement.getId(); + } + + private void updateTotalColumn(OrderElement orderElement) { + Textbox textbox = (Textbox) timesheet.getFellow(getTotalColumnTextboxId(orderElement)); + textbox.setValue(monthlyTimesheetModel.getEffortDuration( + orderElement).toFormattedString()); + } + }; @Override @@ -154,6 +178,7 @@ public class MonthlyTimesheetController extends GenericForwardComposer private void createColumns(LocalDate date) { createProjectAndTaskColumns(); createColumnsForDays(date); + createTotalColumn(); } private void createProjectAndTaskColumns() { @@ -173,6 +198,10 @@ public class MonthlyTimesheetController extends GenericForwardComposer } } + private void createTotalColumn() { + columns.appendChild(new Column(_("Total"))); + } + public String getDate() { return monthlyTimesheetModel.getDate().toString("MMMM y"); } 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 74f956e79..1e24214f9 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 @@ -233,4 +233,15 @@ public class MonthlyTimesheetModel implements IMonthlyTimesheetModel { workReport = null; } + @Override + public EffortDuration getEffortDuration(OrderElement orderElement) { + EffortDuration result = EffortDuration.zero(); + for (WorkReportLine line : workReport.getWorkReportLines()) { + if (line.getOrderElement().equals(orderElement)) { + result = result.plus(line.getEffort()); + } + } + return result; + } + }