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:
parent
b2ec33fb07
commit
06d8bca18f
4 changed files with 84 additions and 9 deletions
|
|
@ -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);
|
||||
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();"
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue