private static ProjectAssignment createProjectAssignment(ProjectAssignment templateAssignment) { ProjectAssignment assignment = new ProjectAssignment(); assignment.setActive(templateAssignment.isActive()); assignment.setAllottedHours(templateAssignment.getAllottedHours()); assignment.setAllowedOverrun(templateAssignment.getAllowedOverrun()); assignment.setAssignmentType(templateAssignment.getAssignmentType()); assignment.setDateEnd(templateAssignment.getDateEnd()); assignment.setDateStart(templateAssignment.getDateStart()); assignment.setHourlyRate(templateAssignment.getHourlyRate()); assignment.setNotifyPm(templateAssignment.isNotifyPm()); assignment.setProject(templateAssignment.getProject()); assignment.setRole(templateAssignment.getRole()); assignment.setUser(templateAssignment.getUser()); return assignment; }
public String toString() { return new ToStringBuilder(this).append("assignmentId", getAssignmentId()) .append("active", isActive()) .append("project", getProject()) .append("user", getUser()) // .append("type", getAssignmentType()) .append("dateStart", getDateStart()) .append("dateEnd", getDateEnd()) .toString(); }
@Override @Transactional(readOnly = true) public List<ProjectAssignment> getProjectAssignmentsAndCheckDeletability(Project project) { List<ProjectAssignment> assignmentsForProject = projectAssignmentDAO.findAllProjectAssignmentsForProject(project); if (!assignmentsForProject.isEmpty()) { Map<Integer, ProjectAssignment> assignmentMap = Maps.newHashMap(); for (ProjectAssignment projectAssignment : assignmentsForProject) { projectAssignment.setDeletable(true); assignmentMap.put(projectAssignment.getPK(), projectAssignment); } List<AssignmentAggregateReportElement> aggregates = reportAggregatedDAO.getCumulatedHoursPerAssignmentForAssignments(Lists.newArrayList(assignmentMap.keySet())); for (AssignmentAggregateReportElement aggregate : aggregates) { assignmentMap.get(aggregate.getProjectAssignment().getAssignmentId()).setDeletable(false); } } return assignmentsForProject; }
/** * Create a copy of the provided template assignment, replacing the project with the given project */ public static ProjectAssignment createProjectAssignment(ProjectAssignment templateAssignment, Project project) { ProjectAssignment assignment = createProjectAssignment(templateAssignment); assignment.setProject(project); return assignment; }
/** * Create a project assignment with default values (date assignment, no start/end date, active)s * * @param project * @param user * @return */ public static ProjectAssignment createProjectAssignment(Project project, User user) { ProjectAssignment assignment = new ProjectAssignment(); assignment.setAssignmentType(new ProjectAssignmentType(EhourConstants.ASSIGNMENT_DATE)); assignment.setProject(project); assignment.setUser(user); assignment.setActive(true); return assignment; }
/** * 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); }
assignmentA = new ProjectAssignment(); assignmentA.setAssignmentId(1); assignmentA.setAssignmentType(new ProjectAssignmentType(0)); calA = new GregorianCalendar(); calA.add(Calendar.MONTH, -5); assignmentA.setDateStart(calA.getTime()); calA.add(Calendar.MONTH, 1); assignmentA.setDateEnd(calA.getTime()); assignmentA.setProject(projectA); assignments.add(assignmentA); projectB.setActive(true); assignmentB = new ProjectAssignment(); assignmentB.setAssignmentId(2); assignmentB.setAssignmentType(new ProjectAssignmentType(0)); calB = new GregorianCalendar(); calB.add(Calendar.MONTH, -2); assignmentB.setDateStart(calB.getTime()); calB = new GregorianCalendar(); calB.add(Calendar.MONTH, 1); assignmentB.setDateEnd(calB.getTime()); assignmentB.setProject(projectB); assignments.add(assignmentB);
@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 void shouldPersist() { Calendar cal = new GregorianCalendar(); cal.add(Calendar.MONTH, 1); ProjectAssignment assignment = ProjectAssignmentObjectMother.createProjectAssignment(new User(5), new Project(1)); assignment.setDateStart(new Date()); assignment.setDateEnd(cal.getTime()); assignment.setAssignmentType(new ProjectAssignmentType(EhourConstants.ASSIGNMENT_DATE)); assignment.setAssignmentId(25); projectAssignmentDAO.persist(assignment); assertNotNull(assignment.getAssignmentId()); }
public static ProjectAssignment createProjectAssignment(User user, Project project) { ProjectAssignment assignment = new ProjectAssignment(user, project); assignment.setAssignmentType(new ProjectAssignmentType(EhourConstants.ASSIGNMENT_DATE)); assignment.setActive(true); assignment.setAssignmentId(1); return assignment; }
@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); }
@Test public final void testGetAssignmentStatusDateIn() { ProjectAssignment assignment = ProjectAssignmentObjectMother.createProjectAssignment(1); ProjectAssignmentType type = new ProjectAssignmentType(); type.setAssignmentTypeId(EhourConstants.ASSIGNMENT_DATE); assignment.setAssignmentType(type); Calendar startCal = new GregorianCalendar(); startCal.add(Calendar.DAY_OF_YEAR, -5); Date startDate = startCal.getTime(); assignment.setDateStart(startDate); Calendar endCal = new GregorianCalendar(); endCal.add(Calendar.DAY_OF_YEAR, 2); Date endDate = endCal.getTime(); assignment.setDateEnd(endDate); when(timesheetDAO.getTimesheetEntriesBefore(assignment, startDate)) .thenReturn(new ArrayList<TimesheetEntry>()); when(timesheetDAO.getTimesheetEntriesAfter(assignment, endDate)) .thenReturn(new ArrayList<TimesheetEntry>()); ProjectAssignmentStatus status = util.getAssignmentStatus(assignment); assertTrue(status.getStatusses().contains(ProjectAssignmentStatus.Status.RUNNING)); assertEquals(1, status.getStatusses().size()); }
public static FlatReportElement buildFlatReportElement(ProjectAssignment assignment) { FlatReportElement element = new FlatReportElement(); element.setAssignmentId(assignment.getAssignmentId()); element.setRole(assignment.getRole()); Project project = assignment.getProject(); Customer customer = project.getCustomer(); element.setCustomerCode(customer.getCode()); element.setCustomerId(customer.getCustomerId()); element.setCustomerName(customer.getName()); element.setEmptyEntry(true); element.setProjectCode(project.getProjectCode()); element.setProjectId(project.getProjectId()); element.setProjectName(project.getName()); element.setRate(assignment.getHourlyRate()); User user = assignment.getUser(); element.setUserId(user.getUserId()); element.setUserFirstName(user.getFirstName()); element.setUserLastName(user.getLastName()); element.setDisplayOrder(1); return element; } }
/** * Compare on name * @param o1 * @param o2 * @return */ private int compareNames(ProjectAssignment o1, ProjectAssignment o2) { if (o1 != null && o2 != null && o1.getProject() != null && o2.getProject() != null && o1.getProject().getName() != null) { return o1.getProject().getFullName().compareToIgnoreCase(o2.getProject().getFullName()); } else { return o1 == null || o1.getProject() == null ? -1 : 1; } }
/** * Check if this default assignment is already assigned */ private boolean isAlreadyAssigned(ProjectAssignment projectAssignment, Collection<ProjectAssignment> assignments) { boolean alreadyAssigned = false; if (assignments == null) { return false; } int projectId = projectAssignment.getProject().getProjectId(); for (ProjectAssignment assignment : assignments) { if (assignment.getProject().getProjectId() == projectId) { LOGGER.debug("Default assignment is already assigned as assignmentId " + assignment.getAssignmentId()); alreadyAssigned = true; break; } } return alreadyAssigned; }
private void notifyPm(ProjectAssignment assignment, ProjectAssignmentStatus status) { TimesheetEntry entry; entry = timesheetDAO.getLatestTimesheetEntryForAssignment(assignment.getAssignmentId()); // over alloted - fixed if (assignment.getAssignmentType().getAssignmentTypeId() == EhourConstants.ASSIGNMENT_TIME_ALLOTTED_FIXED && status.getStatusses().contains(ProjectAssignmentStatus.Status.OVER_ALLOTTED)) { projectManagerNotifierService.mailPMFixedAllottedReached(status.getAggregate(), entry.getEntryId().getEntryDate(), assignment.getProject().getProjectManager()); } // over overrun - flex else if (assignment.getAssignmentType().getAssignmentTypeId() == EhourConstants.ASSIGNMENT_TIME_ALLOTTED_FLEX && status.getStatusses().contains(ProjectAssignmentStatus.Status.OVER_OVERRUN)) { projectManagerNotifierService.mailPMFlexOverrunReached(status.getAggregate(), entry.getEntryId().getEntryDate(), assignment.getProject().getProjectManager()); } // in overrun - flex else if (status.getStatusses().contains(ProjectAssignmentStatus.Status.IN_OVERRUN) && assignment.getAssignmentType().getAssignmentTypeId() == EhourConstants.ASSIGNMENT_TIME_ALLOTTED_FLEX) { projectManagerNotifierService.mailPMFlexAllottedReached(status.getAggregate(), entry.getEntryId().getEntryDate(), assignment.getProject().getProjectManager()); } }
@SuppressWarnings("deprecation") //new dates private void initData() { assignment = ProjectAssignmentObjectMother.createProjectAssignment(1); assignment.getProject().setProjectManager(UserObjectMother.createUser()); assignment.setNotifyPm(true); assignment.setAssignmentType(new ProjectAssignmentType(EhourConstants.ASSIGNMENT_TIME_ALLOTTED_FLEX));
if (projectAssignment.getAssignmentType().isAllottedType()) { if (hours != null && projectAssignment.getAllottedHours() != null && hours.floatValue() > 0 && projectAssignment.getAllottedHours() > 0) { percentage = Optional.of((hours.floatValue() / projectAssignment.getAllottedHours()) * 100); } else if (projectAssignment.getAssignmentType().isDateType() && projectAssignment.getDateStart() != null && projectAssignment.getDateEnd() != null) { LocalDateTime now = LocalDateTime.now(); LocalDateTime start = new LocalDateTime(projectAssignment.getDateStart()); LocalDateTime end = new LocalDateTime(projectAssignment.getDateEnd());
/** * For flex/fixed allotted, give the available hours * * @return */ public Optional<Float> getAvailableHours() { if (projectAssignment != null) { if (projectAssignment.getAssignmentType().isFixedAllottedType()) { if (hours != null && projectAssignment.getAllottedHours() != null && hours.floatValue() > 0 && projectAssignment.getAllottedHours() > 0) { return Optional.of(projectAssignment.getAllottedHours() - hours.floatValue()); } } else if (projectAssignment.getAssignmentType().isFlexAllottedType() && hours != null && projectAssignment.getAllottedHours() != null && hours.floatValue() > 0 && projectAssignment.getAllottedHours() > 0) { return Optional.of((projectAssignment.getAllottedHours() + ((projectAssignment.getAllowedOverrun() != null) ? projectAssignment.getAllowedOverrun() : 0)) - hours.floatValue()); } } return Optional.absent(); }
private void splitActiveAndInactiveAssignments(User user, Set<ProjectAssignment> inactiveAssignments) { Date currentDate = new Date(); for (ProjectAssignment assignment : user.getProjectAssignments()) { DateRange assignmentRange = new DateRange(assignment.getDateStart(), assignment.getDateEnd()); if ((!DateUtil.isDateWithinRange(currentDate, assignmentRange)) || (assignment.getProject() == null || !assignment.getProject().isActive())) { inactiveAssignments.add(assignment); } } user.getProjectAssignments().removeAll(inactiveAssignments); user.setInactiveProjectAssignments(inactiveAssignments); }