package hu.sch.ejb;
import hu.sch.domain.Group;
import hu.sch.domain.Membership;
import hu.sch.domain.enums.SvieMembershipType;
import hu.sch.domain.enums.SvieStatus;
import hu.sch.domain.user.User;
import hu.sch.domain.logging.EventType;
import hu.sch.services.GroupManagerLocal;
import hu.sch.services.LogManagerLocal;
import hu.sch.services.MembershipManagerLocal;
import hu.sch.services.SvieManagerLocal;
import hu.sch.services.SystemManagerLocal;
import java.util.List;
import javax.ejb.Stateless;
import javax.inject.Inject;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
*
* @author aldaris
*/
@Stateless
@SuppressWarnings("unchecked")
public class SvieManagerBean implements SvieManagerLocal {
private static Logger logger = LoggerFactory.getLogger(SvieManagerBean.class);
@Inject
private GroupManagerLocal groupManager;
@Inject
private MembershipManagerLocal membershipManager;
@Inject
private MailManagerBean mailManager;
@Inject
private LogManagerLocal logManager;
@Inject
private SystemManagerLocal systemManager;
@PersistenceContext
private EntityManager em;
@Override
public void updateSvieInfos(List<User> users) {
for (User user : users) {
User temp = em.find(User.class, user.getId());
if (!temp.getSvieStatus().equals(SvieStatus.ELFOGADASALATT)
&& user.getSvieStatus().equals(SvieStatus.ELFOGADASALATT)) {
logManager.createLogEntry(null, user, EventType.ELFOGADASALATT);
}
em.merge(user);
}
}
@Override
public void applyToSvie(User user, SvieMembershipType msType) {
user.setSvieMembershipType(msType);
user.setSvieStatus(SvieStatus.FELDOLGOZASALATT);
em.merge(user);
logManager.createLogEntry(null, user, EventType.SVIE_JELENTKEZES);
}
/**
* {@inheritDoc}
*/
@Override
public void updateSvieGroupInfos(List<Group> groups) {
for (Group group : groups) {
Group temp = em.find(Group.class, group.getId());
temp.setDelegateNumber(group.getDelegateNumber());
temp.setIsSvie(group.getIsSvie());
em.merge(temp);
User user = groupManager.findLeaderForGroup(group.getId());
if (group.getIsSvie() && user != null && user.getSvieMembershipType().equals(SvieMembershipType.NEMTAG)) {
user.setSvieMembershipType(SvieMembershipType.RENDESTAG);
user.setSvieStatus(SvieStatus.ELFOGADVA);
user.setSviePrimaryMembership(membershipManager.findMembership(group.getId(), user.getId()));
em.merge(user);
}
}
}
@Override
public List<Membership> getActiveSvieMembershipsForUser(User user) {
Query q = em.createNamedQuery(Membership.getActiveSvieMemberships);
q.setParameter("user", user);
return q.getResultList();
}
@Override
public List<User> getSvieMembers() {
Query q = em.createNamedQuery(Membership.getMembersWithSvieMembershipTypeNotEqual);
q.setParameter("msType", SvieMembershipType.NEMTAG);
return q.getResultList();
}
@Override
public void updatePrimaryMembership(User user) {
User temp = em.find(User.class, user.getId());
Membership oMs = temp.getSviePrimaryMembership();
if (oMs != null && !oMs.equals(user.getSviePrimaryMembership())) {
sendPrimaryMembershipChangedMail(user);
temp.setDelegated(false);
}
temp.setSviePrimaryMembership(user.getSviePrimaryMembership());
}
private void sendPrimaryMembershipChangedMail(final User user) {
final String profileLink = systemManager.getShowUserLink() + user.getId();
final String subject =
MailManagerBean.getMailString(MailManagerBean.MAIL_PRIMARYMEMBERSHIP_CHANGED_SUBJECT);
final String msgTemplate =
MailManagerBean.getMailString(MailManagerBean.MAIL_PRIMARYMEMBERSHIP_CHANGED_BODY);
final User groupLeader =
groupManager.findLeaderForGroup(user.getSviePrimaryMembership().getGroup().getId());
if (groupLeader != null) {
mailManager.sendEmail(groupLeader.getEmailAddress(), subject,
String.format(msgTemplate, user.getFullName(), profileLink));
}
}
@Override
public void advocateToOrdinal(User user) {
user.setSvieStatus(SvieStatus.FELDOLGOZASALATT);
user.setSvieMembershipType(SvieMembershipType.RENDESTAG);
em.merge(user);
logManager.createLogEntry(null, user, EventType.RENDESTAGGAVALAS);
}
@Override
public void ordinalToAdvocate(User user) {
if (user.getSviePrimaryMembership() != null) {
sendPrimaryMembershipChangedMail(user);
}
user.setSviePrimaryMembership(null);
user.setSvieMembershipType(SvieMembershipType.PARTOLOTAG);
user.setSvieStatus(SvieStatus.ELFOGADVA);
em.merge(user);
logManager.createLogEntry(null, user, EventType.PARTOLOVAVALAS);
}
@Override
public void endMembership(User user) {
if (user.getSviePrimaryMembership() != null) {
sendPrimaryMembershipChangedMail(user);
}
user.setSviePrimaryMembership(null);
user.setSvieMembershipType(SvieMembershipType.NEMTAG);
user.setSvieStatus(SvieStatus.NEMTAG);
user.setDelegated(false);
em.merge(user);
logManager.createLogEntry(null, user, EventType.SVIE_TAGSAGTORLES);
}
public List<User> getDelegatedUsersForGroup(Long groupId) {
Query q = em.createNamedQuery(Membership.getDelegatedMemberForGroup);
q.setParameter("groupId", groupId);
return q.getResultList();
}
/**
* {@inheritDoc}
*/
@Override
public List<User> getDelegatedUsers() {
Query q = em.createNamedQuery(Membership.getAllDelegated);
return q.getResultList();
}
}