diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/planner/daos/IResourceAllocationDAO.java b/navalplanner-business/src/main/java/org/navalplanner/business/planner/daos/IResourceAllocationDAO.java index ff538118a..2b831cd7f 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/planner/daos/IResourceAllocationDAO.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/planner/daos/IResourceAllocationDAO.java @@ -68,4 +68,8 @@ public interface IResourceAllocationDAO extends Map> findGenericAllocationsBySomeCriterion( List criterions); + Map> findGenericAllocationsBySomeCriterion( + List criterions, Date intervalFilterStartDate, + Date intervalFilterEndDate); + } \ No newline at end of file diff --git a/navalplanner-business/src/main/java/org/navalplanner/business/planner/daos/ResourceAllocationDAO.java b/navalplanner-business/src/main/java/org/navalplanner/business/planner/daos/ResourceAllocationDAO.java index ba71522dc..193073d9d 100644 --- a/navalplanner-business/src/main/java/org/navalplanner/business/planner/daos/ResourceAllocationDAO.java +++ b/navalplanner-business/src/main/java/org/navalplanner/business/planner/daos/ResourceAllocationDAO.java @@ -232,6 +232,38 @@ public class ResourceAllocationDAO extends return stripAllocationsWithoutAssignations(byCriterion(list)); } + @SuppressWarnings("unchecked") + @Override + public Map> findGenericAllocationsBySomeCriterion( + List criterions, Date intervalFilterStartDate, Date intervalFilterEndDate) { + if (criterions.isEmpty()) { + return new HashMap>(); + } + String query = "select generic, criterion " + + "from GenericResourceAllocation as generic " + + "join generic.criterions as criterion "; + if(intervalFilterStartDate != null || intervalFilterEndDate != null) { + query += "inner join generic.task as task "; + } + query += "where criterion in(:criterions) "; + if(intervalFilterEndDate != null) { + query += "and task.startDate <= :intervalFilterEndDate "; + } + if(intervalFilterStartDate != null) { + query += "and task.endDate >= :intervalFilterStartDate "; + } + + Query q = getSession().createQuery(query); + q.setParameterList("criterions", criterions); + if(intervalFilterStartDate != null) { + q.setParameter("intervalFilterStartDate", intervalFilterStartDate); + } + if(intervalFilterEndDate != null) { + q.setParameter("intervalFilterEndDate", intervalFilterEndDate); + } + return stripAllocationsWithoutAssignations(byCriterion(q.list())); + } + private Map> byCriterion( List results) { diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/resourceload/ResourceLoadModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/resourceload/ResourceLoadModel.java index 8495be616..0f2cb6ddd 100644 --- a/navalplanner-webapp/src/main/java/org/navalplanner/web/resourceload/ResourceLoadModel.java +++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/resourceload/ResourceLoadModel.java @@ -186,7 +186,7 @@ public class ResourceLoadModel implements IResourceLoadModel { private Map> genericAllocationsByCriterion() { if(!criteriaToShowList.isEmpty()) { return resourceAllocationDAO - .findGenericAllocationsBySomeCriterion(criteriaToShowList); + .findGenericAllocationsBySomeCriterion(criteriaToShowList, initDateFilter, endDateFilter); } if (filter()) { List criterions = new ArrayList(); @@ -202,7 +202,7 @@ public class ResourceLoadModel implements IResourceLoadModel { } } return resourceAllocationDAO - .findGenericAllocationsBySomeCriterion(criterions); + .findGenericAllocationsBySomeCriterion(criterions, initDateFilter, endDateFilter); } else { return resourceAllocationDAO.findGenericAllocationsByCriterion(initDateFilter, endDateFilter); }