diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/reports/dtos/WorkReportLineDTO.java b/navalplanner-business/src/main/java/org/navalplanner/business/reports/dtos/WorkReportLineDTO.java
new file mode 100644
index 000000000..43349d988
--- /dev/null
+++ b/navalplanner-business/src/main/java/org/navalplanner/business/reports/dtos/WorkReportLineDTO.java
@@ -0,0 +1,87 @@
+/*
+ * This file is part of NavalPlan
+ * Copyright (C) 2009-2010 Fundación para o Fomento da Calidade Industrial e
+ * Desenvolvemento Tecnolóxico de Galicia
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU Affero General Public License as published by the Free
+ * Software Foundation, either version 3 of the License, or (at your option) any
+ * later version.
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
+ * details.
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+package org.navalplanner.business.reports.dtos;
+
+import java.util.Date;
+
+import org.joda.time.LocalDate;
+import org.navalplanner.business.costcategories.entities.TypeOfWorkHours;
+import org.navalplanner.business.resources.entities.Resource;
+import org.navalplanner.business.workreports.entities.WorkReportLine;
+
+/**
+ * DTO for {@link WorkReportLine} entity.
+ * @author Susana Montes Pedreira
+ */
+public class WorkReportLineDTO {
+
+ private Integer sumHours;
+
+ private Date date;
+
+ private Resource resource;
+
+ private TypeOfWorkHours typeOfWorkHours;
+
+ public WorkReportLineDTO() {
+ }
+
+ public WorkReportLineDTO(Resource resource,
+ TypeOfWorkHours typeOfWorkHours, Date date, Long numHours) {
+ this.setDate(date);
+ this.setResource(resource);
+ this.setTypeOfWorkHours(typeOfWorkHours);
+ this.setSumHours(new Integer(numHours.intValue()));
+ }
+
+ public void setSumHours(Integer numHours) {
+ this.sumHours = numHours;
+ }
+
+ public Integer getSumHours() {
+ return sumHours;
+ }
+
+ public void setDate(Date date) {
+ this.date = date;
+ }
+
+ public Date getDate() {
+ return date;
+ }
+
+ public void setResource(Resource resource) {
+ this.resource = resource;
+ }
+
+ public Resource getResource() {
+ return resource;
+ }
+
+ public void setTypeOfWorkHours(TypeOfWorkHours typeOfWorkHours) {
+ this.typeOfWorkHours = typeOfWorkHours;
+ }
+
+ public TypeOfWorkHours getTypeOfWorkHours() {
+ return typeOfWorkHours;
+ }
+
+ public LocalDate getLocalDate() {
+ return LocalDate.fromDateFields(getDate());
+ }
+
+}
\ No newline at end of file
diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/workreports/daos/IWorkReportLineDAO.java b/navalplanner-business/src/main/java/org/navalplanner/business/workreports/daos/IWorkReportLineDAO.java
index 28f90df77..a5b03573f 100644
--- a/navalplanner-business/src/main/java/org/navalplanner/business/workreports/daos/IWorkReportLineDAO.java
+++ b/navalplanner-business/src/main/java/org/navalplanner/business/workreports/daos/IWorkReportLineDAO.java
@@ -26,6 +26,7 @@ import java.util.List;
import org.navalplanner.business.common.daos.IIntegrationEntityDAO;
import org.navalplanner.business.orders.entities.OrderElement;
+import org.navalplanner.business.reports.dtos.WorkReportLineDTO;
import org.navalplanner.business.resources.entities.Resource;
import org.navalplanner.business.workreports.entities.WorkReportLine;
@@ -48,4 +49,7 @@ public interface IWorkReportLineDAO extends
List findByResources(List resourcesList);
+ List findByOrderElementGroupByResourceAndHourTypeAndDate(
+ OrderElement orderElement);
+
}
diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/workreports/daos/WorkReportLineDAO.java b/navalplanner-business/src/main/java/org/navalplanner/business/workreports/daos/WorkReportLineDAO.java
index da04919f3..7e0a2e454 100644
--- a/navalplanner-business/src/main/java/org/navalplanner/business/workreports/daos/WorkReportLineDAO.java
+++ b/navalplanner-business/src/main/java/org/navalplanner/business/workreports/daos/WorkReportLineDAO.java
@@ -27,22 +27,24 @@ import java.util.Date;
import java.util.List;
import org.hibernate.Criteria;
+import org.hibernate.Query;
import org.hibernate.criterion.Restrictions;
import org.navalplanner.business.common.daos.IntegrationEntityDAO;
import org.navalplanner.business.orders.entities.OrderElement;
+import org.navalplanner.business.reports.dtos.WorkReportLineDTO;
import org.navalplanner.business.resources.entities.Resource;
import org.navalplanner.business.workreports.entities.WorkReportLine;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Repository;
-
/**
* Dao for {@link WorkReportLineDAO}
*
* @author Diego Pino García
* @author Susana Montes Pedreira
*/
+
@Repository
@Scope(BeanDefinition.SCOPE_SINGLETON)
public class WorkReportLineDAO extends IntegrationEntityDAO
@@ -56,6 +58,25 @@ public class WorkReportLineDAO extends IntegrationEntityDAO
return (List) c.list();
}
+ @SuppressWarnings("unchecked")
+ @Override
+ public List findByOrderElementGroupByResourceAndHourTypeAndDate(
+ OrderElement orderElement) {
+
+ String strQuery = "SELECT new org.navalplanner.business.reports.dtos.WorkReportLineDTO(wrl.resource, wrl.typeOfWorkHours, wrl.date, SUM(wrl.numHours)) "
+ + "FROM WorkReportLine wrl "
+ + "LEFT OUTER JOIN wrl.orderElement orderElement "
+ + "WHERE orderElement = :orderElement "
+ + "GROUP BY wrl.resource, wrl.typeOfWorkHours, wrl.date "
+ + "ORDER BY to_char(wrl.date, 'yyyy-mm-dd') , wrl.resource, wrl.typeOfWorkHours";
+
+ // Set parameters
+ Query query = getSession().createQuery(strQuery);
+ query.setParameter("orderElement", orderElement);
+
+ return (List) query.list();
+ }
+
@Override
public List findByOrderElementAndChildren(
OrderElement orderElement) {
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/AssignedHoursToOrderElementController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/AssignedHoursToOrderElementController.java
index 8b771c5ab..04e0195a8 100644
--- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/AssignedHoursToOrderElementController.java
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/AssignedHoursToOrderElementController.java
@@ -24,7 +24,7 @@ package org.navalplanner.web.orders;
import java.util.List;
import org.navalplanner.business.orders.entities.OrderElement;
-import org.navalplanner.business.workreports.entities.WorkReportLine;
+import org.navalplanner.business.reports.dtos.WorkReportLineDTO;
import org.navalplanner.web.common.Util;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.util.GenericForwardComposer;
@@ -48,7 +48,7 @@ public class AssignedHoursToOrderElementController extends
comp.setVariable("assignedHoursToOrderElementController", this, true);
}
- public List getWorkReportLines() {
+ public List getWorkReportLines() {
return assignedHoursToOrderElementModel.getWorkReportLines();
}
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/AssignedHoursToOrderElementModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/AssignedHoursToOrderElementModel.java
index c5bf880cd..f284437ae 100644
--- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/AssignedHoursToOrderElementModel.java
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/AssignedHoursToOrderElementModel.java
@@ -27,10 +27,11 @@ import java.util.Iterator;
import java.util.List;
import org.apache.commons.lang.Validate;
+import org.joda.time.LocalDate;
import org.navalplanner.business.orders.daos.IOrderElementDAO;
import org.navalplanner.business.orders.entities.OrderElement;
+import org.navalplanner.business.reports.dtos.WorkReportLineDTO;
import org.navalplanner.business.workreports.daos.IWorkReportLineDAO;
-import org.navalplanner.business.workreports.entities.WorkReportLine;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Scope;
@@ -57,7 +58,7 @@ public class AssignedHoursToOrderElementModel implements
private OrderElement orderElement;
- private List listWRL;
+ private List listWRL;
@Autowired
public AssignedHoursToOrderElementModel(IWorkReportLineDAO workReportLineDAO) {
@@ -68,23 +69,58 @@ public class AssignedHoursToOrderElementModel implements
@Override
@Transactional(readOnly = true)
- public List getWorkReportLines() {
+ public List getWorkReportLines() {
if (orderElement == null) {
- return new ArrayList();
+ return new ArrayList();
}
this.assignedDirectHours = 0;
- this.listWRL = workReportLineDAO.findByOrderElement(orderElement);
- Iterator iterador = listWRL.iterator();
+ this.listWRL = workReportLineDAO
+ .findByOrderElementGroupByResourceAndHourTypeAndDate(orderElement);
+
+ this.listWRL = groupByDate(listWRL);
+ Iterator iterador = listWRL.iterator();
while (iterador.hasNext()) {
- WorkReportLine w = iterador.next();
+ WorkReportLineDTO w = iterador.next();
w.getResource().getShortDescription();
- w.getOrderElement().getWorkHours();
- w.getWorkReport().getDate();
- this.assignedDirectHours = this.assignedDirectHours + w.getNumHours();
+ w.getTypeOfWorkHours().getName();
+ this.assignedDirectHours = this.assignedDirectHours
+ + w.getSumHours();
}
return listWRL;
}
+ private List groupByDate(
+ List listWRL) {
+ List groupedByDateList = new ArrayList();
+
+ if (!listWRL.isEmpty()) {
+ Iterator iterador = listWRL.iterator();
+ WorkReportLineDTO currentWRL = iterador.next();
+ groupedByDateList.add(currentWRL);
+
+ while (iterador.hasNext()) {
+ WorkReportLineDTO nextWRL = iterador.next();
+
+ LocalDate currentDate = currentWRL.getLocalDate();
+ LocalDate nextDate = nextWRL.getLocalDate();
+
+ if ((currentWRL.getResource().getId().equals(nextWRL
+ .getResource().getId()))
+ && (currentWRL.getTypeOfWorkHours().getId()
+ .equals(nextWRL.getTypeOfWorkHours().getId()))
+ && (currentDate.compareTo(nextDate) == 0)) {
+ // sum the number of hours to the next WorkReportLineDTO
+ currentWRL.setSumHours(currentWRL.getSumHours()
+ + nextWRL.getSumHours());
+ } else {
+ groupedByDateList.add(nextWRL);
+ currentWRL = nextWRL;
+ }
+ }
+ }
+ return groupedByDateList;
+ }
+
@Override
public int getAssignedDirectHours() {
if (orderElement == null) {
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/IAssignedHoursToOrderElementModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/IAssignedHoursToOrderElementModel.java
index 283d7614c..b049d86c1 100644
--- a/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/IAssignedHoursToOrderElementModel.java
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/orders/IAssignedHoursToOrderElementModel.java
@@ -24,13 +24,13 @@ package org.navalplanner.web.orders;
import java.util.List;
import org.navalplanner.business.orders.entities.OrderElement;
-import org.navalplanner.business.workreports.entities.WorkReportLine;
+import org.navalplanner.business.reports.dtos.WorkReportLineDTO;
/**
* @author Susana Montes Pedreira
*/
public interface IAssignedHoursToOrderElementModel{
- public List getWorkReportLines();
+ public List getWorkReportLines();
public int getAssignedDirectHours();
public int getTotalAssignedHours();
public int getAssignedDirectHoursChildren();
diff --git a/navalplanner-webapp/src/main/webapp/orders/_editOrderElement.zul b/navalplanner-webapp/src/main/webapp/orders/_editOrderElement.zul
index 64a313969..6b7db2196 100644
--- a/navalplanner-webapp/src/main/webapp/orders/_editOrderElement.zul
+++ b/navalplanner-webapp/src/main/webapp/orders/_editOrderElement.zul
@@ -62,7 +62,7 @@
-
+
diff --git a/navalplanner-webapp/src/main/webapp/orders/_listOrderElementHours.zul b/navalplanner-webapp/src/main/webapp/orders/_listOrderElementHours.zul
index 0dfd7df48..502e14e24 100644
--- a/navalplanner-webapp/src/main/webapp/orders/_listOrderElementHours.zul
+++ b/navalplanner-webapp/src/main/webapp/orders/_listOrderElementHours.zul
@@ -27,10 +27,11 @@
+ mold="paging" pageSize="10" fixedLayout="true">
+
@@ -39,7 +40,8 @@
value="@{workReportLine.date, converter='org.navalplanner.web.common.typeconverters.DateConverter'}" />
-
+
+