@Override public ProjectManagerReport getProjectManagerDetailedReport(Project project) { ProjectManagerReport report = new ProjectManagerReport(); // get the project report.setProject(project); // get a proper report range DateRange reportRange = getReportRangeForProject(project); report.setReportRange(reportRange); // get all aggregates List<Project> projects = Arrays.asList(project); SortedSet<AssignmentAggregateReportElement> aggregates = new TreeSet<AssignmentAggregateReportElement>( reportAggregatedDAO.getCumulatedHoursPerAssignmentForProjects(projects, reportRange)); // filter out just the id's List<Integer> assignmentIds = new ArrayList<>(); for (AssignmentAggregateReportElement aggregate : aggregates) { assignmentIds.add(aggregate.getProjectAssignment().getAssignmentId()); } // get all assignments for this period regardless whether they booked hours on it List<ProjectAssignment> allAssignments = projectAssignmentService.getProjectAssignments(project, reportRange); for (ProjectAssignment assignment : allAssignments) { if (!assignmentIds.contains(assignment.getAssignmentId())) { AssignmentAggregateReportElement emptyAggregate = new AssignmentAggregateReportElement(); emptyAggregate.setProjectAssignment(assignment); aggregates.add(emptyAggregate); } } report.setAggregates(aggregates); report.deriveTotals(); return report; }
private List<AssignmentAggregateReportElement> findAggregates( List<User> users, List<Project> projects, DateRange reportRange) { List<AssignmentAggregateReportElement> aggregates = new ArrayList<>(); if (users.isEmpty() && projects.isEmpty()) { aggregates = reportAggregatedDAO.getCumulatedHoursPerAssignment(reportRange); } else if (projects.isEmpty()) { if (!CollectionUtils.isEmpty(users)) { aggregates = reportAggregatedDAO.getCumulatedHoursPerAssignmentForUsers(users, reportRange); } } else if (users.isEmpty()) { if (!CollectionUtils.isEmpty(projects)) { aggregates = reportAggregatedDAO.getCumulatedHoursPerAssignmentForProjects(projects, reportRange); } } else { if (!CollectionUtils.isEmpty(users) && !CollectionUtils.isEmpty(projects)) { aggregates = reportAggregatedDAO.getCumulatedHoursPerAssignmentForUsers( users, projects, reportRange); } } return aggregates; }