@Override public EarlyAlert create(@NotNull final EarlyAlert earlyAlert) throws ObjectNotFoundException, ValidationException { // Validate objects if (earlyAlert == null) { throw new IllegalArgumentException("EarlyAlert must be provided."); } if (earlyAlert.getPerson() == null) { throw new ValidationException("EarlyAlert Student data must be provided."); } final Person student = earlyAlert.getPerson(); // Figure student advisor or early alert coordinator final UUID assignedAdvisor = getEarlyAlertAdvisor(earlyAlert); if (assignedAdvisor == null) { throw new ValidationException( "Could not determine the Early Alert Advisor for student ID " + student.getId()); } if (student.getCoach() == null || assignedAdvisor.equals(student.getCoach().getId())) { student.setCoach(personService.get(assignedAdvisor)); } ensureValidAlertedOnPersonStateNoFail(student); // Create alert final EarlyAlert saved = getDao().save(earlyAlert); // Send e-mail to assigned advisor (coach) try { sendMessageToAdvisor(saved, earlyAlert.getEmailCC()); } catch (final SendFailedException e) { LOGGER.warn("Could not send Early Alert message to advisor.", e); throw new ValidationException( "Early Alert notification e-mail could not be sent to advisor. Early Alert was NOT created.", e); } // Send e-mail CONFIRMATION to faculty try { sendConfirmationMessageToFaculty(saved); } catch (final SendFailedException e) { LOGGER.warn("Could not send Early Alert confirmation to faculty.", e); throw new ValidationException( "Early Alert confirmation e-mail could not be sent. Early Alert was NOT created.", e); } return saved; }
@RequestMapping(value = "/studentactivity", method = RequestMethod.GET) @PreAuthorize(Permission.SECURITY_PERSON_READ) public @ResponseBody List<RecentActivityTO> loadRecentStudentActivity(final @PathVariable UUID id) throws ObjectNotFoundException { List<RecentActivityTO> recentActivities = new ArrayList<RecentActivityTO>(); Person person = personService.get(id); SortingAndPaging sAndP = SortingAndPaging.createForSingleSortWithPaging( ObjectStatus.ACTIVE, 0, 1000, "createdDate", "DESC", "createdDate"); PagingWrapper<EarlyAlert> earlyAlerts = earlyAlertService.getAllForPerson(person, sAndP); SspUser currentUser = securityService.currentUser(); List<EarlyAlertTO> earlyAlertTOs = earlyAlertTOFactory.asTOList(earlyAlerts.getRows()); PagingWrapper<JournalEntry> journalEntries = journalEntryService.getAllForPerson(person, currentUser, sAndP); List<JournalEntryTO> journalEntriesTOs = journalEntryTOFactory.asTOList(journalEntries.getRows()); PagingWrapper<Task> actions = taskService.getAllForPerson(person, currentUser, sAndP); List<TaskTO> actionsTOs = taskTOFactory.asTOList(actions.getRows()); PagingWrapper<Plan> plans = planService.getAllForStudent( SortingAndPaging.createForSingleSortWithPaging( ObjectStatus.ALL, 0, 1000, null, null, null), id); List<PlanTO> planTOs = planTOFactory.asTOList(plans.getRows()); for (EarlyAlertTO earlyAlert : earlyAlertTOs) { if (earlyAlert.getClosedDate() != null) { recentActivities.add( new RecentActivityTO( earlyAlert.getClosedById(), earlyAlert.getClosedByName(), "Early Alert Closed", earlyAlert.getClosedDate())); } else { recentActivities.add( new RecentActivityTO( earlyAlert.getCreatedBy().getId(), getPersonLiteName(earlyAlert.getCreatedBy()), "Early Alert Created", earlyAlert.getCreatedDate())); } } for (JournalEntryTO journalEntry : journalEntriesTOs) { recentActivities.add( new RecentActivityTO( journalEntry.getCreatedBy().getId(), getPersonLiteName(journalEntry.getCreatedBy()), "Journal Entry", journalEntry.getEntryDate())); } for (TaskTO action : actionsTOs) { if (action.isCompleted()) { recentActivities.add( new RecentActivityTO( action.getModifiedBy().getId(), getPersonLiteName(action.getModifiedBy()), "Action Plan Task Created", action.getCompletedDate())); } else { recentActivities.add( new RecentActivityTO( action.getCreatedBy().getId(), getPersonLiteName(action.getCreatedBy()), "Action Plan Task Created", action.getCreatedDate())); } } for (PlanTO planTO : planTOs) { Date testDate = DateUtils.addDays(planTO.getCreatedDate(), 1); String planName = planTO.getName(); if (planTO.getModifiedDate().before(testDate)) { recentActivities.add( new RecentActivityTO( planTO.getCreatedBy().getId(), getPersonLiteName(planTO.getCreatedBy()), "Map Plan (" + planName + ") Created", planTO.getModifiedDate())); } else { recentActivities.add( new RecentActivityTO( planTO.getModifiedBy().getId(), getPersonLiteName(planTO.getModifiedBy()), "Map Plan (" + planName + ") Updated", planTO.getModifiedDate())); } } if (person.getStudentIntakeCompleteDate() != null) { recentActivities.add( new RecentActivityTO( person.getCoach().getId(), person.getCoach().getFullName(), "Student Intake Completed", person.getStudentIntakeCompleteDate())); } if (person.getStudentIntakeRequestDate() != null) { recentActivities.add( new RecentActivityTO( person.getCoach().getId(), person.getCoach().getFullName(), "Student Intake Requested", person.getStudentIntakeRequestDate())); } Collections.sort(recentActivities, RecentActivityTO.RECENT_ACTIVITY_TO_DATE_COMPARATOR); return recentActivities; }