diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/daos/IOrderDAO.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/daos/IOrderDAO.java index 2e310f63a..d3679830e 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/daos/IOrderDAO.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/daos/IOrderDAO.java @@ -26,7 +26,10 @@ import java.util.List; import org.navalplanner.business.common.daos.IIntegrationEntityDAO; import org.navalplanner.business.common.exceptions.InstanceNotFoundException; import org.navalplanner.business.orders.entities.Order; +import org.navalplanner.business.orders.entities.OrderElement; +import org.navalplanner.business.planner.entities.Task; import org.navalplanner.business.reports.dtos.OrderCostsPerResourceDTO; +import org.navalplanner.business.resources.entities.Criterion; import org.navalplanner.business.scenarios.entities.Scenario; import org.navalplanner.business.users.entities.User; @@ -85,4 +88,6 @@ public interface IOrderDAO extends IIntegrationEntityDAO { List getOrdersByScenario(Scenario scenario); + List getFilteredTask(List orderElements, + List criterions); } diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/orders/daos/OrderDAO.java b/navalplanner-business/src/main/java/org/navalplanner/business/orders/daos/OrderDAO.java index c50710e42..499a23a08 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/orders/daos/OrderDAO.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/orders/daos/OrderDAO.java @@ -36,8 +36,11 @@ import org.navalplanner.business.costcategories.daos.CostCategoryDAO; import org.navalplanner.business.costcategories.daos.ITypeOfWorkHoursDAO; import org.navalplanner.business.costcategories.entities.TypeOfWorkHours; import org.navalplanner.business.orders.entities.Order; +import org.navalplanner.business.orders.entities.OrderElement; import org.navalplanner.business.planner.daos.ITaskSourceDAO; +import org.navalplanner.business.planner.entities.Task; import org.navalplanner.business.reports.dtos.OrderCostsPerResourceDTO; +import org.navalplanner.business.resources.entities.Criterion; import org.navalplanner.business.scenarios.entities.Scenario; import org.navalplanner.business.users.daos.IOrderAuthorizationDAO; import org.navalplanner.business.users.entities.OrderAuthorization; @@ -289,4 +292,47 @@ public class OrderDAO extends IntegrationEntityDAO implements public List getOrdersByScenario(Scenario scenario) { return existsInScenario(getOrders(), scenario); } + + @Override + @Transactional(readOnly = true) + public List getFilteredTask(List orderElements, + List criterions) { + + + String strQuery = "SELECT taskSource.task " + + "FROM OrderElement orderElement, TaskSource taskSource, Task task " + + "LEFT OUTER JOIN taskSource.schedulingData.orderElement taskSourceOrderElement " + + "LEFT OUTER JOIN taskSource.task taskElement " + + "WHERE taskSourceOrderElement.id = orderElement.id " + + "AND taskElement.id = task.id "; + + if (orderElements != null && !orderElements.isEmpty()) { + strQuery += " AND orderElement IN (:orderElements) "; + } else { + return new ArrayList(); + } + + // Set Criterions + if (criterions != null && !criterions.isEmpty()) { + strQuery += " AND (EXISTS (FROM task.resourceAllocations as allocation, GenericResourceAllocation as generic " + + " WHERE generic.id = allocation.id " + + " AND EXISTS( FROM generic.criterions criterion WHERE criterion IN (:criterions))))"; + } + + // Order by + strQuery += "ORDER BY task.name"; + + // Set parameters + Query query = getSession().createQuery(strQuery); + if (orderElements != null && !orderElements.isEmpty()) { + query.setParameterList("orderElements", orderElements); + } + + if (criterions != null && !criterions.isEmpty()) { + query.setParameterList("criterions", criterions); + } + + // Get result + return query.list(); + } } diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/reports/CompletedEstimatedHoursPerTaskController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/reports/CompletedEstimatedHoursPerTaskController.java index 117d5492b..3e87575f2 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/reports/CompletedEstimatedHoursPerTaskController.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/reports/CompletedEstimatedHoursPerTaskController.java @@ -29,7 +29,10 @@ import java.util.Map; import net.sf.jasperreports.engine.JRDataSource; +import org.navalplanner.business.labels.entities.Label; import org.navalplanner.business.orders.entities.Order; +import org.navalplanner.business.resources.entities.Criterion; +import org.navalplanner.web.common.Util; import org.navalplanner.web.common.components.ExtendedJasperreport; import org.navalplanner.web.common.components.bandboxsearch.BandboxSearch; import org.zkoss.zk.ui.Component; @@ -47,16 +50,23 @@ public class CompletedEstimatedHoursPerTaskController extends NavalplannerReport private ICompletedEstimatedHoursPerTaskModel completedEstimatedHoursPerTaskModel; - private Listbox lbOrders; + private Listbox lbCriterions; private Datebox referenceDate; private BandboxSearch bandboxSelectOrder; + private BandboxSearch bdLabels; + + private Listbox lbLabels; + + private BandboxSearch bdCriterions; + @Override public void doAfterCompose(Component comp) throws Exception { super.doAfterCompose(comp); comp.setVariable("controller", this, true); + completedEstimatedHoursPerTaskModel.init(); } public List getOrders() { @@ -72,7 +82,8 @@ public class CompletedEstimatedHoursPerTaskController extends NavalplannerReport protected JRDataSource getDataSource() { return completedEstimatedHoursPerTaskModel .getCompletedEstimatedHoursReportPerTask(getSelectedOrder(), - getDeadlineDate()); + getDeadlineDate(), getSelectedLabels(), + getSelectedCriterions()); } private Order getSelectedOrder() { @@ -100,9 +111,68 @@ public class CompletedEstimatedHoursPerTaskController extends NavalplannerReport public void showReport(ExtendedJasperreport jasperreport) { final Order order = getSelectedOrder(); if (order == null) { - throw new WrongValueException(lbOrders, _("Please, select an order")); + throw new WrongValueException(bandboxSelectOrder, + _("Please, select an order")); } super.showReport(jasperreport); } + public List