package net.rrm.ehour.init;
import net.rrm.ehour.domain.Project;
import net.rrm.ehour.domain.User;
import net.rrm.ehour.domain.UserRole;
import net.rrm.ehour.persistence.project.dao.ProjectDao;
import net.rrm.ehour.persistence.user.dao.UserDao;
import net.rrm.ehour.project.service.ProjectService;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.PostConstruct;
import java.util.List;
/**
* EHO-381 The PM role was lost when a user with an existing PM role was edited.
* This validator re-adds the PM role to users which are marked as a PM but don't have this role.
*/
@Service
public class MissingPmRoleValidator {
private static final Logger LOGGER = Logger.getLogger(MissingPmRoleValidator.class);
@Autowired
private ProjectDao projectDao;
@Autowired
private ProjectService projectService;
@Autowired
private UserDao userDao;
@PostConstruct
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void init() {
LOGGER.info("Finding and fixing users who are PM but don't have PM role (EHO-381)");
List<Project> projectsWithPmSet = projectDao.findAllProjectsWithPmSet();
for (Project project : projectsWithPmSet) {
User pm = project.getProjectManager();
boolean hasPmRole = pm.getUserRoles().contains(UserRole.PROJECTMANAGER);
if (!hasPmRole) {
LOGGER.warn(String.format("%s (%s) does not have PM role but is PM for %s. Adding PM role.", pm.getFullName(), pm.getPK(), project.getFullName()));
projectService.validatePMRoles(project);
}
}
}
}