From 06d8bca18f9e9f01def10636336e027f49ec8ae3 Mon Sep 17 00:00:00 2001 From: Manuel Rego Casasnovas Date: Tue, 29 May 2012 18:05:07 +0200 Subject: [PATCH] Allow to add any task in the monthly timesheet Now apart from the assigned tasks in the period also any other task could be added to report hours in the monthly timesheet. FEA: ItEr76S28UserDashboard --- .../dashboard/IMonthlyTimesheetModel.java | 12 ++++ .../dashboard/MonthlyTimesheetController.java | 16 ++++- .../dashboard/MonthlyTimesheetModel.java | 58 ++++++++++++++++--- .../webapp/myaccount/monthlyTimesheet.zul | 7 +++ 4 files changed, 84 insertions(+), 9 deletions(-) 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 96407ec19..2cebb15ad 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 @@ -22,6 +22,7 @@ package org.libreplan.web.users.dashboard; import java.util.List; import org.joda.time.LocalDate; +import org.libreplan.business.orders.entities.Order; import org.libreplan.business.orders.entities.OrderElement; import org.libreplan.business.resources.entities.Worker; import org.libreplan.business.workingday.EffortDuration; @@ -116,4 +117,15 @@ public interface IMonthlyTimesheetModel { */ EffortDuration getResourceCapacity(LocalDate date); + /** + * Adds the orderElement to the current monthly timehseet. + */ + void addOrderElement(OrderElement orderElement); + + /** + * Returns the {@link Order} of the orderElement avoiding a + * proxy. + */ + Order getOrder(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 08c13d0d8..194642b2b 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 @@ -30,6 +30,7 @@ import org.joda.time.LocalDate; import org.libreplan.business.orders.entities.OrderElement; import org.libreplan.business.workingday.EffortDuration; import org.libreplan.web.common.Util; +import org.libreplan.web.common.components.bandboxsearch.BandboxSearch; import org.libreplan.web.common.entrypoints.IURLHandlerRegistry; import org.libreplan.web.users.services.CustomTargetUrlResolver; import org.springframework.util.Assert; @@ -66,6 +67,8 @@ public class MonthlyTimesheetController extends GenericForwardComposer private Columns columns; + private BandboxSearch orderElementBandboxSearch; + private RowRenderer rowRenderer = new RowRenderer() { private LocalDate first; @@ -101,7 +104,8 @@ public class MonthlyTimesheetController extends GenericForwardComposer } private void renderOrderElementRow(Row row, OrderElement orderElement) { - Util.appendLabel(row, orderElement.getOrder().getName()); + Util.appendLabel(row, monthlyTimesheetModel.getOrder(orderElement) + .getName()); Util.appendLabel(row, orderElement.getName()); appendInputsForDays(row, orderElement); @@ -398,6 +402,16 @@ public class MonthlyTimesheetController extends GenericForwardComposer CustomTargetUrlResolver.USER_DASHBOARD_URL); } + public void addOrderElement() { + OrderElement orderElement = (OrderElement) orderElementBandboxSearch + .getSelectedElement(); + if (orderElement != null) { + monthlyTimesheetModel.addOrderElement(orderElement); + orderElementBandboxSearch.setSelectedElement(null); + Util.reloadBindings(timesheet); + } + } + } /** 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 811a01345..0b6dd1712 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 @@ -30,7 +30,9 @@ import org.libreplan.business.calendars.entities.ResourceCalendar; import org.libreplan.business.common.daos.IConfigurationDAO; import org.libreplan.business.common.exceptions.InstanceNotFoundException; import org.libreplan.business.costcategories.entities.TypeOfWorkHours; +import org.libreplan.business.orders.daos.IOrderDAO; import org.libreplan.business.orders.daos.ISumChargedEffortDAO; +import org.libreplan.business.orders.entities.Order; import org.libreplan.business.orders.entities.OrderElement; import org.libreplan.business.planner.daos.IResourceAllocationDAO; import org.libreplan.business.planner.entities.SpecificResourceAllocation; @@ -96,6 +98,9 @@ public class MonthlyTimesheetModel implements IMonthlyTimesheetModel { @Autowired private IConfigurationDAO configurationDAO; + @Autowired + private IOrderDAO orderDAO; + @Override @Transactional(readOnly = true) public void initCreateOrEdit(LocalDate date) { @@ -110,8 +115,8 @@ public class MonthlyTimesheetModel implements IMonthlyTimesheetModel { initCapacityMap(); - initOrderElements(); initWorkReport(); + initOrderElements(); } private void initDates() { @@ -172,8 +177,8 @@ public class MonthlyTimesheetModel implements IMonthlyTimesheetModel { private void initOrderElements() { List resourceAllocations = resourceAllocationDAO .findSpecificAllocationsRelatedTo(scenarioManager.getCurrent(), - UserDashboardUtil.getBoundResourceAsList(user), null, - null); + UserDashboardUtil.getBoundResourceAsList(user), + firstDay, lastDay); orderElements = new ArrayList(); for (SpecificResourceAllocation each : resourceAllocations) { @@ -181,10 +186,27 @@ public class MonthlyTimesheetModel implements IMonthlyTimesheetModel { forceLoad(orderElement); orderElements.add(orderElement); } + + for (WorkReportLine each : workReport.getWorkReportLines()) { + OrderElement orderElement = each.getOrderElement(); + if (isNotInOrderElements(orderElement)) { + forceLoad(orderElement); + orderElements.add(orderElement); + } + } + } + + private boolean isNotInOrderElements(OrderElement orderElement) { + for (OrderElement each : orderElements) { + if (each.getId().equals(orderElement.getId())) { + return false; + } + } + return true; } private void forceLoad(OrderElement orderElement) { - orderElement.getOrder().getName(); + orderElement.getName(); } @Override @@ -240,15 +262,22 @@ public class MonthlyTimesheetModel implements IMonthlyTimesheetModel { EffortDuration effortDuration) { WorkReportLine workReportLine = getWorkReportLine(orderElement, date); if (workReportLine == null) { - workReportLine = WorkReportLine.create(workReport); - workReportLine.setOrderElement(orderElement); - workReportLine.setDate(date.toDateTimeAtStartOfDay().toDate()); - workReportLine.setTypeOfWorkHours(getTypeOfWorkHours()); + workReportLine = createWorkReportLine(orderElement, date); workReport.addWorkReportLine(workReportLine); } workReportLine.setEffort(effortDuration); } + private WorkReportLine createWorkReportLine(OrderElement orderElement, + LocalDate date) { + WorkReportLine workReportLine = WorkReportLine.create(workReport); + workReportLine.setOrderElement(orderElement); + workReportLine.setDate(date.toDateTimeAtStartOfDay().toDate()); + workReportLine.setTypeOfWorkHours(getTypeOfWorkHours()); + workReportLine.setEffort(EffortDuration.zero()); + return workReportLine; + } + private TypeOfWorkHours getTypeOfWorkHours() { return configurationDAO.getConfiguration() .getMonthlyTimesheetsTypeOfWorkHours(); @@ -311,4 +340,17 @@ public class MonthlyTimesheetModel implements IMonthlyTimesheetModel { return capacityMap.get(date); } + @Override + public void addOrderElement(OrderElement orderElement) { + if (isNotInOrderElements(orderElement)) { + orderElements.add(orderElement); + } + } + + @Override + @Transactional(readOnly = true) + public Order getOrder(OrderElement orderElement) { + return orderDAO.loadOrderAvoidingProxyFor(orderElement); + } + } diff --git a/libreplan-webapp/src/main/webapp/myaccount/monthlyTimesheet.zul b/libreplan-webapp/src/main/webapp/myaccount/monthlyTimesheet.zul index 805431337..bb0db9ae3 100644 --- a/libreplan-webapp/src/main/webapp/myaccount/monthlyTimesheet.zul +++ b/libreplan-webapp/src/main/webapp/myaccount/monthlyTimesheet.zul @@ -55,6 +55,13 @@ + + +