From 05ba8527b674d622fcb1ba19a1ec6b3d48aee7dc Mon Sep 17 00:00:00 2001 From: Manuel Rego Casasnovas Date: Wed, 30 May 2012 16:18:48 +0200 Subject: [PATCH] Add number of tasks column in monthly timesheets area FEA: ItEr76S28UserDashboard --- .../java/org/libreplan/web/common/Util.java | 16 ++++++++++++++ .../IMonthlyTimesheetsAreaModel.java | 7 +++++++ .../dashboard/MonthlyTimesheetModel.java | 8 ++----- .../MonthlyTimesheetsAreaController.java | 5 +++++ .../dashboard/MonthlyTimesheetsAreaModel.java | 21 +++++++++++++++++++ .../myaccount/_monthlyTimesheetsArea.zul | 1 + 6 files changed, 52 insertions(+), 6 deletions(-) diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/common/Util.java b/libreplan-webapp/src/main/java/org/libreplan/web/common/Util.java index 8fbbacb36..97a5727a2 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/common/Util.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/common/Util.java @@ -32,6 +32,7 @@ import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.libreplan.business.common.BaseEntity; import org.libreplan.business.common.Configuration; import org.libreplan.business.common.IOnTransaction; import org.libreplan.business.common.Registry; @@ -725,4 +726,19 @@ public class Util { row.addEventListener(Events.ON_CLICK, editButtonListener); } + /** + * Checks if the entity is contained in the provided + * list. + */ + public static boolean contains(List list, + BaseEntity entity) { + for (BaseEntity each : list) { + if (each.getId() != null && entity.getId() != null + && each.getId().equals(entity.getId())) { + return true; + } + } + return false; + } + } diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/users/dashboard/IMonthlyTimesheetsAreaModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/users/dashboard/IMonthlyTimesheetsAreaModel.java index 36accd6b6..d1852ba50 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/users/dashboard/IMonthlyTimesheetsAreaModel.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/users/dashboard/IMonthlyTimesheetsAreaModel.java @@ -22,6 +22,7 @@ package org.libreplan.web.users.dashboard; import java.util.List; import org.libreplan.business.calendars.entities.CalendarAvailability; +import org.libreplan.business.orders.entities.OrderElement; import org.libreplan.business.users.entities.User; import org.libreplan.business.workreports.entities.WorkReport; @@ -46,4 +47,10 @@ public interface IMonthlyTimesheetsAreaModel { */ List getMonthlyTimesheets(); + /** + * Returns the number of different {@link OrderElement OrderElements} with + * tracked time in the specified workReport. + */ + int getNumberOfOrderElementsWithTrackedTime(WorkReport workReport); + } 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 dd4fa07b6..00d24aa6c 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 @@ -55,6 +55,7 @@ import org.libreplan.business.workreports.entities.WorkReportLine; import org.libreplan.business.workreports.entities.WorkReportType; import org.libreplan.web.UserUtil; import org.libreplan.web.calendars.BaseCalendarModel; +import org.libreplan.web.common.Util; import org.libreplan.web.common.concurrentdetection.OnConcurrentModification; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.BeanDefinition; @@ -216,12 +217,7 @@ public class MonthlyTimesheetModel implements IMonthlyTimesheetModel { } private boolean isNotInOrderElements(OrderElement orderElement) { - for (OrderElement each : orderElements) { - if (each.getId().equals(orderElement.getId())) { - return false; - } - } - return true; + return !Util.contains(orderElements, orderElement); } private void forceLoad(OrderElement orderElement) { diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/users/dashboard/MonthlyTimesheetsAreaController.java b/libreplan-webapp/src/main/java/org/libreplan/web/users/dashboard/MonthlyTimesheetsAreaController.java index efbe400b1..51e36e6bb 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/users/dashboard/MonthlyTimesheetsAreaController.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/users/dashboard/MonthlyTimesheetsAreaController.java @@ -59,6 +59,11 @@ public class MonthlyTimesheetsAreaController extends GenericForwardComposer { Util.appendLabel(row, workReport.getTotalEffortDuration() .toFormattedString()); + Util.appendLabel( + row, + monthlyTimesheetsAreaModel + .getNumberOfOrderElementsWithTrackedTime(workReport) + ""); + Util.appendOperationsAndOnClickEvent(row, new EventListener() { @Override diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/users/dashboard/MonthlyTimesheetsAreaModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/users/dashboard/MonthlyTimesheetsAreaModel.java index 7641e9a64..7a9eb3031 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/users/dashboard/MonthlyTimesheetsAreaModel.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/users/dashboard/MonthlyTimesheetsAreaModel.java @@ -25,13 +25,16 @@ import java.util.List; import org.joda.time.LocalDate; import org.joda.time.Months; +import org.libreplan.business.orders.entities.OrderElement; import org.libreplan.business.resources.entities.Resource; import org.libreplan.business.resources.entities.Worker; import org.libreplan.business.users.entities.User; import org.libreplan.business.workreports.daos.IWorkReportDAO; import org.libreplan.business.workreports.entities.WorkReport; +import org.libreplan.business.workreports.entities.WorkReportLine; import org.libreplan.business.workreports.entities.WorkReportType; import org.libreplan.web.UserUtil; +import org.libreplan.web.common.Util; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.annotation.Scope; @@ -97,4 +100,22 @@ public class MonthlyTimesheetsAreaModel implements IMonthlyTimesheetsAreaModel { .getStartDate(); } + @Override + public int getNumberOfOrderElementsWithTrackedTime(WorkReport workReport) { + if (workReport == null) { + return 0; + } + + List orderElements = new ArrayList(); + for (WorkReportLine line : workReport.getWorkReportLines()) { + if (!line.getEffort().isZero()) { + OrderElement orderElement = line.getOrderElement(); + if (!Util.contains(orderElements, orderElement)) { + orderElements.add(orderElement); + } + } + } + return orderElements.size(); + } + } diff --git a/libreplan-webapp/src/main/webapp/myaccount/_monthlyTimesheetsArea.zul b/libreplan-webapp/src/main/webapp/myaccount/_monthlyTimesheetsArea.zul index 5c7c79e3a..ddd98361a 100644 --- a/libreplan-webapp/src/main/webapp/myaccount/_monthlyTimesheetsArea.zul +++ b/libreplan-webapp/src/main/webapp/myaccount/_monthlyTimesheetsArea.zul @@ -26,6 +26,7 @@ +