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; }
@Before public void setUp() { a1 = new AssignmentAggregateReportElement(); a2 = new AssignmentAggregateReportElement(); a1.setProjectAssignment(ProjectAssignmentObjectMother.createProjectAssignment(1)); a2.setProjectAssignment(ProjectAssignmentObjectMother.createProjectAssignment(2)); }
@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; }
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; } }
@Test public void shouldReportEmptyList() { AssignmentAggregateReportElement element = new AssignmentAggregateReportElement(); element.setHours(0); List<AssignmentAggregateReportElement> aggs = Lists.newArrayList(element); assertTrue(ReportUtil.isEmptyAggregateList(aggs)); } }
@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()); } }
@Test public void should_mail_pm_when_status_of_project_changes() throws OverBudgetException { when(timesheetDAO.getLatestTimesheetEntryForAssignment(assignment.getAssignmentId())).thenReturn(newEntries.get(0)); when(timesheetDAO.getTimesheetEntriesInRange(any(ProjectAssignment.class), any(DateRange.class))).thenReturn(existingEntries); ProjectAssignmentStatus beforeStatus = new ProjectAssignmentStatus(); beforeStatus.addStatus(Status.IN_ALLOTTED); beforeStatus.setValid(true); ProjectAssignmentStatus afterStatus = new ProjectAssignmentStatus(); afterStatus.addStatus(Status.IN_OVERRUN); afterStatus.setValid(true); afterStatus.setAggregate(new AssignmentAggregateReportElement()); when(statusService.getAssignmentStatus(assignment)).thenReturn(beforeStatus); when(statusService.getAssignmentStatus(assignment)).thenReturn(beforeStatus, afterStatus); persister.validateAndPersist(assignment, newEntries, new DateRange(), Lists.<Date>newArrayList()); verify(timesheetDAO).delete(any(TimesheetEntry.class)); verify(timesheetDAO).merge(any(TimesheetEntry.class)); verify(projectManagerNotifierService).mailPMFlexAllottedReached(any(AssignmentAggregateReportElement.class), any(Date.class), eq(assignment.getProject().getProjectManager())); }
@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)); }
@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()); }
@Test public final void testGetAssignmentStatusFlex() { AssignmentAggregateReportElement pag = new AssignmentAggregateReportElement(); pag.setHours((double) 25); ProjectAssignment assignment = new ProjectAssignment(); ProjectAssignmentType type = new ProjectAssignmentType(); type.setAssignmentTypeId(EhourConstants.ASSIGNMENT_TIME_ALLOTTED_FLEX); assignment.setAssignmentType(type); assignment.setAllottedHours(250f); assignment.setAllowedOverrun(200f); 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()); }
@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()); }
/** * 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); }
@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); }
@Test public final void testGetAssignmentStatusFlexOverrun() { AssignmentAggregateReportElement pag = new AssignmentAggregateReportElement(); pag.setHours((double) 260); ProjectAssignment assignment = new ProjectAssignment(); ProjectAssignmentType type = new ProjectAssignmentType(); type.setAssignmentTypeId(EhourConstants.ASSIGNMENT_TIME_ALLOTTED_FLEX); assignment.setAssignmentType(type); assignment.setAllottedHours(250f); assignment.setAllowedOverrun(200f); when(raDAO.getCumulatedHoursForAssignment(assignment)) .thenReturn(pag); ProjectAssignmentStatus status = util.getAssignmentStatus(assignment); assertTrue(status.getStatusses().contains(ProjectAssignmentStatus.Status.IN_OVERRUN)); assertTrue(status.getStatusses().contains(ProjectAssignmentStatus.Status.RUNNING)); assertEquals(2, status.getStatusses().size()); }
@Test public final void testGetAssignmentStatusFlexOverOverrun() { AssignmentAggregateReportElement pag = new AssignmentAggregateReportElement(); pag.setHours((double) 560); ProjectAssignment assignment = new ProjectAssignment(); ProjectAssignmentType type = new ProjectAssignmentType(); type.setAssignmentTypeId(EhourConstants.ASSIGNMENT_TIME_ALLOTTED_FLEX); assignment.setAssignmentType(type); assignment.setAllottedHours(250f); assignment.setAllowedOverrun(200f); when(raDAO.getCumulatedHoursForAssignment(assignment)) .thenReturn(pag); ProjectAssignmentStatus status = util.getAssignmentStatus(assignment); assertTrue(status.getStatusses().contains(ProjectAssignmentStatus.Status.OVER_OVERRUN)); assertTrue(status.getStatusses().contains(ProjectAssignmentStatus.Status.RUNNING)); assertEquals(2, status.getStatusses().size()); } }
/** * 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 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); }