@Override public int hashCode() { return new HashCodeBuilder().append(getEntryDate()) .append(getProjectAssignment()).toHashCode(); }
@Override public boolean equals(Object other) { if ((this == other)) { return true; } if (!(other instanceof TimesheetEntryId)) { return false; } TimesheetEntryId castOther = (TimesheetEntryId) other; return new EqualsBuilder().append(this.getEntryDate(), castOther.getEntryDate()) .append(this.getProjectAssignment(), castOther.getProjectAssignment()).isEquals(); }
@Override public String toString() { return new ToStringBuilder(this).append("entryDate", getEntryDate()) .append("assignment", getProjectAssignment()) .toString(); }
private Map<ProjectAssignment, Map<String, TimesheetEntry>> createAssignmentMap() { Map<ProjectAssignment, Map<String, TimesheetEntry>> assignmentMap = new HashMap<>(); for (TimesheetEntry entry : getTimesheetEntries()) { ProjectAssignment assignment = entry.getEntryId().getProjectAssignment(); Map<String, TimesheetEntry> entryDateMap = assignmentMap.containsKey(assignment) ? assignmentMap.get(assignment) : new HashMap<String, TimesheetEntry>(); entryDateMap.put(formatter.format(entry.getEntryId().getEntryDate()), entry); assignmentMap.put(assignment, entryDateMap); } return assignmentMap; }
/** * Put the timesheet entries in a map where the day is the key and * the value is a list of timesheet entries filled out for that date * * @param timesheetEntries * @return */ private Map<Integer, List<TimesheetEntry>> entriesToCalendarMap(List<TimesheetEntry> timesheetEntries) { Map<Integer, List<TimesheetEntry>> calendarMap; Calendar cal; Integer dayKey; List<TimesheetEntry> dayEntries; calendarMap = new HashMap<>(); for (TimesheetEntry entry : timesheetEntries) { if (entry == null) { continue; } cal = new GregorianCalendar(); cal.setTime(entry.getEntryId().getEntryDate()); dayKey = cal.get(Calendar.DAY_OF_MONTH); if (calendarMap.containsKey(dayKey)) { dayEntries = calendarMap.get(dayKey); } else { dayEntries = new ArrayList<>(); } dayEntries.add(entry); calendarMap.put(dayKey, dayEntries); } return calendarMap; }
/** * @see java.lang.Comparable#compareTo(Object) */ public int compareTo(TimesheetEntryId object) { return new CompareToBuilder() .append(this.getProjectAssignment(), object.getProjectAssignment()) .append(this.getEntryDate(), object.getEntryDate()) .toComparison(); } }
private void persistEntries(ProjectAssignment assignment, List<TimesheetEntry> entries, DateRange weekRange, boolean onlyLessThanExisting, List<Date> lockedDates) throws OverBudgetException { List<TimesheetEntry> previousEntries = Lists.newArrayList(timesheetDAO.getTimesheetEntriesInRange(assignment, weekRange)); for (TimesheetEntry entry : entries) { if (!entry.getEntryId().getProjectAssignment().equals(assignment)) { LOGGER.error("Invalid entry in assignment list, skipping: " + entry); previousEntries.remove(entry); continue; } if (lockedDates.contains(entry.getEntryId().getEntryDate())) { LOGGER.error("Date is locked but still trying to update " + entry); previousEntries.remove(entry); continue; } if (!entry.isEmptyEntry()) { persistEntry(onlyLessThanExisting, entry, getEntry(previousEntries, entry)); previousEntries.remove(entry); } } removeOldEntries(previousEntries); }
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()); } }
@Test public void shouldParseTwoTimesheetEntries() throws XMLStreamException, InstantiationException, IllegalAccessException, ImportException { EntityParser parser = createParser("<TIMESHEET_ENTRIES CLASS=\"net.rrm.ehour.domain.TimesheetEntry\">\n<TIMESHEET_ENTRY>\n<ASSIGNMENT_ID>1</ASSIGNMENT_ID>\n<ENTRY_DATE>2007-03-26</ENTRY_DATE>\n<HOURS>8.0</HOURS>\n <COMMENT>jaja</COMMENT>\n </TIMESHEET_ENTRY>\n <TIMESHEET_ENTRY>\n <ASSIGNMENT_ID>2</ASSIGNMENT_ID>\n <ENTRY_DATE>2007-03-26</ENTRY_DATE>\n <HOURS>0.0</HOURS>\n </TIMESHEET_ENTRY>\n </TIMESHEET_ENTRIES>\n", ProjectAssignmentObjectMother.createProjectAssignment(1), 1); keyCache.putKey(ProjectAssignment.class, 1, 1); keyCache.putKey(ProjectAssignment.class, 2, 2); List<TimesheetEntry> result = parser.parse(TimesheetEntry.class, new JoinTables(), status); assertEquals(2, result.size()); assertNotNull(result.get(0).getEntryId().getEntryDate()); assertNotNull(result.get(0).getEntryId().getProjectAssignment()); assertEquals(8.0, result.get(0).getHours(), 0); assertEquals("jaja", result.get(0).getComment()); assertEquals(2, daoValidator.getTotalPersistCount()); }