コード例 #1
0
  /** 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;
  }
コード例 #2
0
  @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;
  }
コード例 #3
0
  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;
  }
コード例 #4
0
  @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;
  }
コード例 #5
0
  /**
   * 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));
  }
コード例 #6
0
 @Override
 public List<AssignmentAggregateReportElement> getHoursPerAssignment(
     List<Integer> projectAssignmentIds) {
   return reportAggregatedDAO.getCumulatedHoursPerAssignmentForAssignments(projectAssignmentIds);
 }
コード例 #7
0
 private DateRange getReportRangeForProject(Project project) {
   DateRange minMaxRange = reportAggregatedDAO.getMinMaxDateTimesheetEntry(project);
   return new DateRange(minMaxRange.getDateStart(), minMaxRange.getDateEnd());
 }