public UserProjectStatus(AssignmentAggregateReportElement aggregate, Number totalBookedHours) { super(aggregate.getProjectAssignment(), aggregate.getHours()); this.totalBookedHours = totalBookedHours; }
public static AssignmentAggregateReportElement createProjectAssignmentAggregate(int baseId, int customerId, int userId) { AssignmentAggregateReportElement pag = new AssignmentAggregateReportElement(); pag.setHours(baseId); pag.setProjectAssignment(ProjectAssignmentObjectMother.createProjectAssignment(baseId, customerId, userId)); return pag; } }
/** * Derive the totals */ public void deriveTotals() { float hours = 0; float avail = 0; if (aggregates != null) { for (AssignmentAggregateReportElement aggregate : aggregates) { if (aggregate.getHours() == null) { continue; } hours += aggregate.getHours().floatValue(); avail += aggregate.getAvailableHours().or(0f); } } totalHoursBooked = hours; totalHoursAvailable = avail; }
/** * Test method for {@link net.rrm.ehour.persistence.persistence.report.reports.element.AssignmentAggregateReportElement#getAvailableHours()}. */ @Test public void testGetAvailableHoursFixed() { ProjectAssignment assignment = new ProjectAssignment(); assignment.setAssignmentType(new ProjectAssignmentType(EhourConstants.ASSIGNMENT_TIME_ALLOTTED_FIXED)); assignment.setAllottedHours(100f); AssignmentAggregateReportElement ele = new AssignmentAggregateReportElement(); ele.setHours(96f); ele.setProjectAssignment(assignment); assertEquals(4, ele.getAvailableHours().get(), 0f); }
@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; }
@Test public void shouldReportEmptyList() { AssignmentAggregateReportElement element = new AssignmentAggregateReportElement(); element.setHours(0); List<AssignmentAggregateReportElement> aggs = Lists.newArrayList(element); assertTrue(ReportUtil.isEmptyAggregateList(aggs)); } }
@Test public void testGetProgressPercentageAllotted() { ProjectAssignment assignment = new ProjectAssignment(); assignment.setAssignmentType(new ProjectAssignmentType(EhourConstants.ASSIGNMENT_TIME_ALLOTTED_FIXED)); assignment.setAllottedHours(100f); AssignmentAggregateReportElement ele = new AssignmentAggregateReportElement(); ele.setHours(96f); ele.setProjectAssignment(assignment); assertEquals(96, ele.getProgressPercentage().get(), 0f); }
@Override public int compareTo(AssignmentAggregateReportElement pagO) { return this.getProjectAssignment().compareTo(pagO.getProjectAssignment()); }
@Before public void setUp() { a1 = new AssignmentAggregateReportElement(); a2 = new AssignmentAggregateReportElement(); a1.setProjectAssignment(ProjectAssignmentObjectMother.createProjectAssignment(1)); a2.setProjectAssignment(ProjectAssignmentObjectMother.createProjectAssignment(2)); }
@Test public void testGetProgressPercentageDate() { ProjectAssignment assignment = new ProjectAssignment(); assignment.setAssignmentType(new ProjectAssignmentType(EhourConstants.ASSIGNMENT_DATE)); LocalDate base = LocalDate.parse("2015-01-01"); DateTimeUtils.setCurrentMillisFixed(base.toDateTimeAtCurrentTime().getMillis()); assignment.setDateStart(base.minusDays(3).toDate()); assignment.setDateEnd(base.plusDays(3).toDate()); AssignmentAggregateReportElement ele = new AssignmentAggregateReportElement(); ele.setProjectAssignment(assignment); assertEquals(50, ele.getProgressPercentage().get(), 2f); }
/** * Check if aggregate list is empty * @param aggregates * @return */ public static boolean isEmptyAggregateList(Collection<AssignmentAggregateReportElement> aggregates) { float hours = 0f; if (aggregates != null) { for (AssignmentAggregateReportElement assignmentAggregateReportElement : aggregates) { if (assignmentAggregateReportElement.getHours() != null) { hours += assignmentAggregateReportElement.getHours().floatValue(); } } } return hours == 0f; } }
private List<AssignmentAggregateReportElement> findAssignmentsWithoutBookings(List<User> users, List<Project> projects, DateRange reportRange, boolean showZeroBookings) { List<AssignmentAggregateReportElement> elements = Lists.newArrayList(); if (showZeroBookings) { List<Integer> userIds = DomainUtil.getIdsFromDomainObjects(users); List<Integer> projectIds = DomainUtil.getIdsFromDomainObjects(projects); List<ProjectAssignment> filterAssignmentsWithoutBookings = getAssignmentsWithoutBookings(reportRange, userIds, projectIds); for (ProjectAssignment filterAssignmentsWithoutBooking : filterAssignmentsWithoutBookings) { elements.add(new AssignmentAggregateReportElement(filterAssignmentsWithoutBooking)); } } return elements; }
/** * Test method for {@link net.rrm.ehour.persistence.persistence.report.reports.element.AssignmentAggregateReportElement#getAvailableHours()}. */ @Test public void testGetAvailableHoursFlex() { ProjectAssignment assignment = new ProjectAssignment(); assignment.setAssignmentType(new ProjectAssignmentType(EhourConstants.ASSIGNMENT_TIME_ALLOTTED_FLEX)); assignment.setAllottedHours(100f); assignment.setAllowedOverrun(40f); AssignmentAggregateReportElement ele = new AssignmentAggregateReportElement(); ele.setHours(113f); ele.setProjectAssignment(assignment); assertEquals(27, ele.getAvailableHours().get(), 0f); }
@Test public final void testGetAssignmentStatusFixed() { AssignmentAggregateReportElement pag = new AssignmentAggregateReportElement(); pag.setHours((double) 25); ProjectAssignment assignment = new ProjectAssignment(); ProjectAssignmentType type = new ProjectAssignmentType(); type.setAssignmentTypeId(EhourConstants.ASSIGNMENT_TIME_ALLOTTED_FIXED); assignment.setAssignmentType(type); assignment.setAllottedHours(250f); when(raDAO.getCumulatedHoursForAssignment(assignment)) .thenReturn(pag); ProjectAssignmentStatus status = util.getAssignmentStatus(assignment); assertTrue(status.getStatusses().contains(ProjectAssignmentStatus.Status.IN_ALLOTTED)); assertTrue(status.getStatusses().contains(ProjectAssignmentStatus.Status.RUNNING)); assertEquals(2, status.getStatusses().size()); }
/** * Compare on prj * @param o1 * @param o2 * @return */ private int compareOnProject(AssignmentAggregateReportElement o1, AssignmentAggregateReportElement o2) { return o1.getProjectAssignment().getProject().getFullName().compareToIgnoreCase( o2.getProjectAssignment().getProject().getFullName()); }
@Test public void should_get_timesheet_overview() throws Exception { List<TimesheetEntry> daoResults = new ArrayList<>(); List<AssignmentAggregateReportElement> reportResults = new ArrayList<>(); Calendar cal = new GregorianCalendar(); TimesheetEntry entryA, entryB; TimesheetEntryId idA, idB; idA = new TimesheetEntryId(new Date(2006 - 1900, Calendar.OCTOBER, 2), null); entryA = new TimesheetEntry(); entryA.setEntryId(idA); entryA.setHours((float) 5); daoResults.add(entryA); idB = new TimesheetEntryId(new Date(2006 - 1900, Calendar.OCTOBER, 6), null); entryB = new TimesheetEntry(); entryB.setEntryId(idB); entryB.setHours((float) 3); daoResults.add(entryB); AssignmentAggregateReportElement agg = new AssignmentAggregateReportElement(); ProjectAssignment pa = ProjectAssignmentObjectMother.createProjectAssignment(0); agg.setProjectAssignment(pa); reportResults.add(agg); when(timesheetDAO.getTimesheetEntriesInRange(1, DateUtil.calendarToMonthRange(cal))).thenReturn(daoResults); when(aggregateReportService.getHoursPerAssignmentInRange(1, DateUtil.calendarToMonthRange(cal))).thenReturn(reportResults); timesheetService.getTimesheetOverview(new User(1), cal); verify(timesheetDAO).getTimesheetEntriesInRange(1, DateUtil.calendarToMonthRange(cal)); verify(aggregateReportService).getHoursPerAssignmentInRange(1, DateUtil.calendarToMonthRange(cal)); }
public void setProjectDeletability(Project project) { List<Integer> ids = DomainUtil.getIdsFromDomainObjects(project.getProjectAssignments()); double bookedHours = 0; if (!ids.isEmpty()) { List<AssignmentAggregateReportElement> aggregates = aggregateReportService.getHoursPerAssignment(ids); for (AssignmentAggregateReportElement aggregate : aggregates) { bookedHours += aggregate.getHours().doubleValue(); } } project.setBookedHours(bookedHours); }
@Test public void should_find_project_assignments_for_project_and_check_deletability() throws ObjectNotFoundException { Project project = ProjectObjectMother.createProject(1); ProjectAssignment deleteableAssignment = ProjectAssignmentObjectMother.createProjectAssignment(1); ProjectAssignment nondeleteableAssignment = ProjectAssignmentObjectMother.createProjectAssignment(2); when(projectAssignmentDAO.findAllProjectAssignmentsForProject(project)).thenReturn(Arrays.asList(deleteableAssignment, nondeleteableAssignment)); when(reportAggregatedDAO.getCumulatedHoursPerAssignmentForAssignments(Lists.newArrayList(deleteableAssignment.getPK(), nondeleteableAssignment.getPK()))) .thenReturn(Lists.newArrayList(new AssignmentAggregateReportElement(nondeleteableAssignment, 5))); List<ProjectAssignment> assignments = projectAssignmentService.getProjectAssignmentsAndCheckDeletability(project); assertTrue(assignments.get(0).isDeletable()); assertFalse(assignments.get(1).isDeletable()); } }
if (aggregate.getProjectAssignment().getAssignmentType().isFixedAllottedType() || aggregate.getProjectAssignment().getAssignmentType().isFlexAllottedType()) { Integer assignmentId = aggregate.getProjectAssignment().getAssignmentId(); assignmentIds.add(assignmentId); originalAggregates.put(assignmentId, aggregate); userProjectStatus.add(new UserProjectStatus(originalAggregates.get(aggregate.getProjectAssignment().getAssignmentId()), aggregate.getHours()));
@Test public final void testGetAssignmentStatusFixedOverAllotted() { AssignmentAggregateReportElement pag = new AssignmentAggregateReportElement(); pag.setHours((double) 260); ProjectAssignment assignment = new ProjectAssignment(); ProjectAssignmentType type = new ProjectAssignmentType(); type.setAssignmentTypeId(EhourConstants.ASSIGNMENT_TIME_ALLOTTED_FIXED); assignment.setAssignmentType(type); assignment.setAllottedHours(250f); when(raDAO.getCumulatedHoursForAssignment(assignment)) .thenReturn(pag); ProjectAssignmentStatus status = util.getAssignmentStatus(assignment); assertTrue(status.getStatusses().contains(ProjectAssignmentStatus.Status.OVER_ALLOTTED)); assertTrue(status.getStatusses().contains(ProjectAssignmentStatus.Status.RUNNING)); assertEquals(2, status.getStatusses().size()); }