use of fr.univlorraine.ecandidat.utils.bean.mail.AvisMailBean in project esup-ecandidat by EsupPortail.
the class CandidatureCtrCandController method validAvis.
/**
* Valide les avis de candidatures
* @param listeCandidature
* @return true si tout s'est bien passé
*/
public Boolean validAvis(final List<Candidature> listeCandidature) {
if (checkLockListCandidature(listeCandidature)) {
return false;
}
for (final Candidature candidature : listeCandidature) {
if (candidature.getLastTypeDecision() == null) {
Notification.show(applicationContext.getMessage("candidature.validAvis.error", null, UI.getCurrent().getLocale()), Type.WARNING_MESSAGE);
return false;
}
}
/* Bug sur la validation d'avis --> des candidatures ont recu le mail mais la candidature n'a pas été validée */
/* On vérifie qu'il n'y a pas de candidature en double */
final Long sizelistId = listeCandidature.stream().map(Candidature::getIdCand).distinct().count();
if (listeCandidature.size() != sizelistId.intValue()) {
logger.warn(applicationContext.getMessage("candidature.validAvis.doublon", null, UI.getCurrent().getLocale()) + " : erreur size list");
Notification.show(applicationContext.getMessage("candidature.validAvis.doublon", null, UI.getCurrent().getLocale()), Type.WARNING_MESSAGE);
return false;
}
final String user = userController.getCurrentUserLogin();
/* Bug sur la validation d'avis --> des candidatures ont recu le mail mais la candidature n'a pas été validée */
final Map<Integer, Integer> mapIdCandTraite = new HashMap<>();
int errorDoublon = 0;
/* Si l'avis donné est un avis LC, il faut recalculer le rang reel pour chaque formation */
final List<Formation> listeFormLC = new ArrayList<>();
for (final Candidature candidature : listeCandidature) {
Assert.notNull(candidature, applicationContext.getMessage("assert.notNull", null, UI.getCurrent().getLocale()));
/* Verrou */
if (!lockCandidatController.getLockOrNotifyCandidature(candidature)) {
continue;
}
TypeDecisionCandidature typeDecision = candidature.getLastTypeDecision().cloneCompletTypeDecisionCandidature();
if (typeDecision.getTypeDecision() != null && typeDecision.getTypeDecision().getTypeAvis().equals(tableRefController.getTypeAvisListComp())) {
final Formation formLc = candidature.getFormation();
if (formLc.getTemListCompForm() && !listeFormLC.contains(formLc)) {
listeFormLC.add(candidature.getFormation());
}
}
typeDecision.setTemValidTypeDecCand(true);
typeDecision.setDatValidTypeDecCand(LocalDateTime.now());
typeDecision.setUserValidTypeDecCand(user);
typeDecision.setCandidature(candidature);
/* On vérifie que la candidature de l'avis n'a pas déjà été enregistré avant enregistrement */
if (mapIdCandTraite.get(typeDecision.getCandidature().getIdCand()) != null) {
errorDoublon++;
continue;
} else {
mapIdCandTraite.put(typeDecision.getCandidature().getIdCand(), typeDecision.getCandidature().getIdCand());
}
typeDecision = typeDecisionCandidatureRepository.save(typeDecision);
final String localeCandidat = candidature.getCandidat().getLangue().getCodLangue();
candidature.setUserModCand(user);
candidature.setDatModCand(LocalDateTime.now());
candidature.setTypeDecision(typeDecision);
candidature.setLastTypeDecision(typeDecision);
candidatureRepository.save(candidature);
String motif = "";
if (typeDecision.getTypeDecision().getTypeAvis().equals(tableRefController.getTypeAvisDefavorable()) && typeDecision.getMotivationAvis() != null) {
motif = i18nController.getI18nTraduction(typeDecision.getMotivationAvis().getI18nLibMotiv(), localeCandidat);
}
String complementAppel = "";
if (typeDecision.getTemAppelTypeDecCand()) {
complementAppel = applicationContext.getMessage("candidature.mail.complement.appel", null, UI.getCurrent().getLocale());
}
String rang = "";
if (typeDecision.getListCompRangTypDecCand() != null) {
rang = String.valueOf(typeDecision.getListCompRangTypDecCand());
}
String commentaire = "";
if (typeDecision.getTypeDecision().getTemAffCommentTypDec()) {
commentaire = typeDecision.getCommentTypeDecCand();
}
final AvisMailBean mailBean = new AvisMailBean(motif, commentaire, getComplementPreselectMail(typeDecision), complementAppel, rang);
PdfAttachement attachement = null;
final InputStream is = candidatureController.downloadLettre(candidature, ConstanteUtils.TYP_LETTRE_MAIL, localeCandidat, true);
if (is != null) {
try {
attachement = new PdfAttachement(is, candidatureController.getNomFichierLettre(candidature, ConstanteUtils.TYP_LETTRE_MAIL, localeCandidat));
} catch (final Exception e) {
attachement = null;
}
}
mailController.sendMail(candidature.getCandidat().getCompteMinima().getMailPersoCptMin(), typeDecision.getTypeDecision().getMail(), mailBean, candidature, localeCandidat, attachement);
}
/* Recalcul des rang LC si besoin */
if (parametreController.isCalculRangReelLc()) {
final List<TypeDecisionCandidature> listeTypDecRangReel = candidatureGestionController.calculRangReelListForm(listeFormLC);
/* Pour chaque candidature recalculée, on ajouter le rang reel */
listeTypDecRangReel.forEach(td -> {
/* On cherche la candidature associée */
final Optional<Candidature> optCand = listeCandidature.stream().filter(cand -> cand.equals(td.getCandidature())).findFirst();
if (optCand.isPresent()) {
optCand.get().setTypeDecision(td);
optCand.get().setLastTypeDecision(td);
}
});
}
/* Bug sur la validation d'avis --> des candidatures ont recu le mail mais la candidature n'a pas été validée */
if (errorDoublon > 0) {
logger.warn(applicationContext.getMessage("candidature.validAvis.doublon", null, UI.getCurrent().getLocale()) + " : erreur map", Type.WARNING_MESSAGE);
Notification.show(applicationContext.getMessage("candidature.validAvis.doublon", null, UI.getCurrent().getLocale()));
} else {
Notification.show(applicationContext.getMessage("candidature.validAvis.success", null, UI.getCurrent().getLocale()), Type.TRAY_NOTIFICATION);
}
return true;
}
Aggregations