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'}" />