use of com.autentia.tnt.businessobject.Activity in project TNTConcept by autentia.
the class ActivityEvidenceNotificationBean method checkActivitiesWithNoEvidence.
public void checkActivitiesWithNoEvidence() throws MessagingException {
log.info("Checking for users with no activity evidence images attached for the past 7 days");
authenticateAs(ConfigurationUtil.getDefault().getAdminUser());
Date oneWeekAgo = Date.from(LocalDate.now().plusDays(-7).atStartOfDay(ZoneId.systemDefault()).toInstant());
UserSearch userSearch = new UserSearch();
userSearch.setActive(true);
List<User> users = UserManager.getDefault().getAllEntities(userSearch, null).stream().filter(user -> user.getEmail() != null).collect(Collectors.toList());
for (User user : users) {
ActivitySearch search = new ActivitySearch();
search.setStartStartDate(oneWeekAgo);
search.setUser(user);
List<Activity> activities = ActivityManager.getDefault().getAllEntities(search, null);
activities = activities.stream().filter(activity -> doesProjectContainRoleWithRequiredEvidence(activity.getRole().getProject())).collect(Collectors.toList());
if (activities.isEmpty()) {
continue;
}
HashMap<Project, List<Activity>> groupedActivities = groupedActivitiesByProject(activities);
for (Project project : groupedActivities.keySet()) {
List<Activity> prjActivities = groupedActivities.get(project);
if (prjActivities.stream().anyMatch(activity -> activity.getRole().getRequireEvidence()) && prjActivities.stream().noneMatch(this::doesActivitityHasEvidence)) {
List<ProjectRole> roles = prjActivities.stream().map(Activity::getRole).filter(ProjectRole::getRequireEvidence).collect(Collectors.toList());
prjActivities.stream().findFirst().ifPresent(activity -> {
try {
sendEmail(project, roles, user.getEmail());
} catch (Exception e) {
e.printStackTrace();
}
});
}
}
}
}
Aggregations