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; }
/** * 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; }
@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; }
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 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 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()); }
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()); } }
/** * @see java.lang.Comparable#compareTo(Object) */ public int compareTo(ProjectAssignment object) { return new CompareToBuilder() //sort by column order as displayed in ProjectOverviewPanel .append(this.getProject().getCustomer().getName(), object.getProject().getCustomer().getName()) .append(this.getProject().getProjectCode(), object.getProject().getProjectCode()) .append(this.getProject().getName(), object.getProject().getName()) //here we should already have a sort. Anyway let's continue with some default comparison .append(this.getProject(), object.getProject()) .append(this.getDateEnd(), object.getDateEnd()) .append(this.getDateStart(), object.getDateStart()) .append(this.getUser(), object.getUser()) .append(this.getAssignmentId(), object.getAssignmentId()) .toComparison(); }
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; } }