@Transactional public void deleteAllTimesheetDataForUser(User user) { timesheetCommentDAO.deleteCommentsForUser(user.getUserId()); if (user.getProjectAssignments() != null && !user.getProjectAssignments().isEmpty()) { timesheetDAO.deleteTimesheetEntries(DomainUtil.getIdsFromDomainObjects(user.getProjectAssignments())); } }
@Transactional(readOnly = true) public User getUser(Integer userId) throws ObjectNotFoundException { User user = userDAO.findById(userId); Set<ProjectAssignment> inactiveAssignments = new HashSet<>(); if (user != null && user.getProjectAssignments() != null) { splitActiveAndInactiveAssignments(user, inactiveAssignments); } else { throw new ObjectNotFoundException("User not found"); } return user; }
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); }
@Transactional(readOnly = true) public User getUserAndCheckDeletability(Integer userId) throws ObjectNotFoundException { User user = getUser(userId); if ((!user.getProjectAssignments().isEmpty()) && (!user.getInactiveProjectAssignments().isEmpty())) { user.setDeletable(true); } else { // bummer, we need to check if the user booked any hours on the assignments List<Integer> assignmentIds = new ArrayList<>(); assignmentIds.addAll(DomainUtil.getIdsFromDomainObjects(user.getProjectAssignments())); assignmentIds.addAll(DomainUtil.getIdsFromDomainObjects(user.getInactiveProjectAssignments())); List<AssignmentAggregateReportElement> aggregates = aggregateReportService.getHoursPerAssignment(assignmentIds); user.setDeletable(ReportUtil.isEmptyAggregateList(aggregates)); } LOGGER.info("Retrieved user " + user.getUsername() + ", deletable: " + user.isDeletable()); return user; }
@Transactional @Auditable(actionType = AuditActionType.CREATE) public void assignAllUsersToProject(Project project) { List<User> users = UserUtil.filterUserOnRole(userDAO.findActiveUsers(), UserRole.USER); for (User user : users) { ProjectAssignment assignment = ProjectAssignment.createProjectAssignment(project, user); if (!isAlreadyAssigned(assignment, user.getProjectAssignments())) { LOGGER.debug("Assigning user " + user + " to " + project); persistNewProjectAssignment(assignment); } } }
/** * Assign user to default projects */ @Transactional @Auditable(actionType = AuditActionType.UPDATE) public User assignUserToDefaultProjects(User user) { List<Project> defaultProjects = projectDao.findDefaultProjects(); for (Project project : defaultProjects) { ProjectAssignment assignment = ProjectAssignment.createProjectAssignment(project, user); if (!isAlreadyAssigned(assignment, user.getProjectAssignments())) { LOGGER.debug("Assigning user " + user.getUserId() + " to default project " + project.getName()); user.addProjectAssignment(assignment); persistNewProjectAssignment(assignment); } } return user; }
assertEquals(1, user.getProjectAssignments().size()); assertEquals(1, user.getInactiveProjectAssignments().size());