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
This commit is contained in:
Manuel Rego Casasnovas 2012-05-29 18:05:07 +02:00
parent b2ec33fb07
commit 06d8bca18f
4 changed files with 84 additions and 9 deletions

View file

@ -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 <code>orderElement</code> to the current monthly timehseet.
*/
void addOrderElement(OrderElement orderElement);
/**
* Returns the {@link Order} of the <code>orderElement</code> avoiding a
* proxy.
*/
Order getOrder(OrderElement orderElement);
}

View file

@ -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);
}
}
}
/**

View file

@ -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<SpecificResourceAllocation> resourceAllocations = resourceAllocationDAO
.findSpecificAllocationsRelatedTo(scenarioManager.getCurrent(),
UserDashboardUtil.getBoundResourceAsList(user), null,
null);
UserDashboardUtil.getBoundResourceAsList(user),
firstDay, lastDay);
orderElements = new ArrayList<OrderElement>();
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);
}
}

View file

@ -55,6 +55,13 @@
<grid id="timesheet"
model="@{controller.rows}"
rowRenderer="@{controller.rowRenderer}" />
<hbox>
<bandboxSearch
id="orderElementBandboxSearch"
finder="OrderElementBandboxFinder" />
<button onClick="controller.addOrderElement();"
label="${i18n:_('Add task')}" />
</hbox>
</groupbox>
<button onClick="controller.save();"