/** Update available report criteria */ public ReportCriteria syncUserReportCriteria( ReportCriteria reportCriteria, ReportCriteriaUpdateType updateType) { UserCriteria userCriteria = reportCriteria.getUserCriteria(); AvailableCriteria availCriteria = reportCriteria.getAvailableCriteria(); if (userCriteria.isSingleUser()) { syncCriteriaForSingleUser(reportCriteria); } else { if (updateType == ReportCriteriaUpdateType.UPDATE_CUSTOMERS || updateType == ReportCriteriaUpdateType.UPDATE_ALL) { availCriteria.setCustomers(getAvailableCustomers(userCriteria)); } if (updateType == ReportCriteriaUpdateType.UPDATE_PROJECTS || updateType == ReportCriteriaUpdateType.UPDATE_ALL) { availCriteria.setProjects(getAvailableProjects(userCriteria)); } if (updateType == ReportCriteriaUpdateType.UPDATE_ALL) { availCriteria.setUserDepartments(userDepartmentDAO.findAll()); availCriteria.setReportRange(reportAggregatedDAO.getMinMaxDateTimesheetEntry()); } if (updateType == ReportCriteriaUpdateType.UPDATE_USERS || updateType == ReportCriteriaUpdateType.UPDATE_ALL) { availCriteria.setUsers(getAvailableUsers(userCriteria)); } } return reportCriteria; }
@Override public List<AssignmentAggregateReportElement> getHoursPerAssignmentInRange( Integer userId, DateRange dateRange) { List<AssignmentAggregateReportElement> assignmentAggregateReportElements; List<User> users = new ArrayList<>(); users.add(new User(userId)); assignmentAggregateReportElements = reportAggregatedDAO.getCumulatedHoursPerAssignmentForUsers(users, dateRange); return assignmentAggregateReportElements; }
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; }
@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; }
/** * Sync criteria for users, only customers & projects are displayed for users in this list * * @param reportCriteria */ private void syncCriteriaForSingleUser(ReportCriteria reportCriteria) { Set<Customer> customers = new HashSet<Customer>(); Set<Project> projects = new HashSet<Project>(); AvailableCriteria availCriteria = reportCriteria.getAvailableCriteria(); User user; user = reportCriteria.getUserCriteria().getUsers().get(0); List<ProjectAssignment> assignments = projectAssignmentDAO.findProjectAssignmentsForUser( user.getUserId(), reportCriteria.getUserCriteria().getReportRange()); for (ProjectAssignment assignment : assignments) { customers.add(assignment.getProject().getCustomer()); projects.add(assignment.getProject()); } availCriteria.setCustomers(new ArrayList<Customer>(customers)); availCriteria.setProjects(new ArrayList<Project>(projects)); availCriteria.setReportRange(reportAggregatedDAO.getMinMaxDateTimesheetEntry(user)); }
@Override public List<AssignmentAggregateReportElement> getHoursPerAssignment( List<Integer> projectAssignmentIds) { return reportAggregatedDAO.getCumulatedHoursPerAssignmentForAssignments(projectAssignmentIds); }
private DateRange getReportRangeForProject(Project project) { DateRange minMaxRange = reportAggregatedDAO.getMinMaxDateTimesheetEntry(project); return new DateRange(minMaxRange.getDateStart(), minMaxRange.getDateEnd()); }