Search in sources :

Example 1 with AvisMailBean

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;
}
Also used : Arrays(java.util.Arrays) TypeStatut(fr.univlorraine.ecandidat.entities.ecandidat.TypeStatut) LoggerFactory(org.slf4j.LoggerFactory) UI(com.vaadin.ui.UI) ExportListCandidatureOption(fr.univlorraine.ecandidat.utils.bean.export.ExportListCandidatureOption) PdfAttachement(fr.univlorraine.ecandidat.utils.PdfAttachement) CentreCandidature(fr.univlorraine.ecandidat.entities.ecandidat.CentreCandidature) CompteMinima(fr.univlorraine.ecandidat.entities.ecandidat.CompteMinima) Map(java.util.Map) PostItRepository(fr.univlorraine.ecandidat.repositories.PostItRepository) Campagne(fr.univlorraine.ecandidat.entities.ecandidat.Campagne) CtrCandActionCandidatureWindow(fr.univlorraine.ecandidat.views.windows.CtrCandActionCandidatureWindow) ConstanteUtils(fr.univlorraine.ecandidat.utils.ConstanteUtils) MethodUtils(fr.univlorraine.ecandidat.utils.MethodUtils) Resource(javax.annotation.Resource) CandidatCursusPostBac(fr.univlorraine.ecandidat.entities.ecandidat.CandidatCursusPostBac) Set(java.util.Set) TypeDecisionCandidature(fr.univlorraine.ecandidat.entities.ecandidat.TypeDecisionCandidature) Collectors(java.util.stream.Collectors) List(java.util.List) Type(com.vaadin.ui.Notification.Type) OnDemandFile(fr.univlorraine.ecandidat.vaadin.components.OnDemandFile) LocalDate(java.time.LocalDate) Optional(java.util.Optional) ExportListCandidatureAdresse(fr.univlorraine.ecandidat.utils.bean.export.ExportListCandidatureAdresse) DeleteAvisWindowListener(fr.univlorraine.ecandidat.views.windows.CtrCandShowHistoWindow.DeleteAvisWindowListener) Candidature(fr.univlorraine.ecandidat.entities.ecandidat.Candidature) FormulaireCandidat(fr.univlorraine.ecandidat.entities.ecandidat.FormulaireCandidat) PjCand(fr.univlorraine.ecandidat.entities.ecandidat.PjCand) OpiRepository(fr.univlorraine.ecandidat.repositories.OpiRepository) TypeDecision(fr.univlorraine.ecandidat.entities.ecandidat.TypeDecision) AvisMailBean(fr.univlorraine.ecandidat.utils.bean.mail.AvisMailBean) MainUI(fr.univlorraine.ecandidat.MainUI) LocalDateTime(java.time.LocalDateTime) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) PostIt(fr.univlorraine.ecandidat.entities.ecandidat.PostIt) NomenclatureUtils(fr.univlorraine.ecandidat.utils.NomenclatureUtils) Notification(com.vaadin.ui.Notification) FormulaireCand(fr.univlorraine.ecandidat.entities.ecandidat.FormulaireCand) CtrCandShowHistoWindow(fr.univlorraine.ecandidat.views.windows.CtrCandShowHistoWindow) Adresse(fr.univlorraine.ecandidat.entities.ecandidat.Adresse) LinkedHashSet(java.util.LinkedHashSet) TypeDecisionCandidatureRepository(fr.univlorraine.ecandidat.repositories.TypeDecisionCandidatureRepository) CandidatureMasseListener(fr.univlorraine.ecandidat.utils.ListenerUtils.CandidatureMasseListener) Logger(org.slf4j.Logger) TypeTraitement(fr.univlorraine.ecandidat.entities.ecandidat.TypeTraitement) Opi(fr.univlorraine.ecandidat.entities.ecandidat.Opi) Tag(fr.univlorraine.ecandidat.entities.ecandidat.Tag) ChangeCandidatureWindowListener(fr.univlorraine.ecandidat.views.windows.CtrCandActionCandidatureWindow.ChangeCandidatureWindowListener) ApplicationContext(org.springframework.context.ApplicationContext) DroitFonctionnalite(fr.univlorraine.ecandidat.entities.ecandidat.DroitFonctionnalite) Commission(fr.univlorraine.ecandidat.entities.ecandidat.Commission) CandidatCursusInterne(fr.univlorraine.ecandidat.entities.ecandidat.CandidatCursusInterne) Component(org.springframework.stereotype.Component) CandidatureListener(fr.univlorraine.ecandidat.utils.ListenerUtils.CandidatureListener) DateTimeFormatter(java.time.format.DateTimeFormatter) CandidatureRepository(fr.univlorraine.ecandidat.repositories.CandidatureRepository) CtrCandPostItReadWindow(fr.univlorraine.ecandidat.views.windows.CtrCandPostItReadWindow) Candidat(fr.univlorraine.ecandidat.entities.ecandidat.Candidat) Formation(fr.univlorraine.ecandidat.entities.ecandidat.Formation) InputStream(java.io.InputStream) Assert(org.springframework.util.Assert) HashMap(java.util.HashMap) InputStream(java.io.InputStream) ArrayList(java.util.ArrayList) CentreCandidature(fr.univlorraine.ecandidat.entities.ecandidat.CentreCandidature) TypeDecisionCandidature(fr.univlorraine.ecandidat.entities.ecandidat.TypeDecisionCandidature) Candidature(fr.univlorraine.ecandidat.entities.ecandidat.Candidature) AvisMailBean(fr.univlorraine.ecandidat.utils.bean.mail.AvisMailBean) PdfAttachement(fr.univlorraine.ecandidat.utils.PdfAttachement) Formation(fr.univlorraine.ecandidat.entities.ecandidat.Formation) TypeDecisionCandidature(fr.univlorraine.ecandidat.entities.ecandidat.TypeDecisionCandidature)

Aggregations

Notification (com.vaadin.ui.Notification)1 Type (com.vaadin.ui.Notification.Type)1 UI (com.vaadin.ui.UI)1 MainUI (fr.univlorraine.ecandidat.MainUI)1 Adresse (fr.univlorraine.ecandidat.entities.ecandidat.Adresse)1 Campagne (fr.univlorraine.ecandidat.entities.ecandidat.Campagne)1 Candidat (fr.univlorraine.ecandidat.entities.ecandidat.Candidat)1 CandidatCursusInterne (fr.univlorraine.ecandidat.entities.ecandidat.CandidatCursusInterne)1 CandidatCursusPostBac (fr.univlorraine.ecandidat.entities.ecandidat.CandidatCursusPostBac)1 Candidature (fr.univlorraine.ecandidat.entities.ecandidat.Candidature)1 CentreCandidature (fr.univlorraine.ecandidat.entities.ecandidat.CentreCandidature)1 Commission (fr.univlorraine.ecandidat.entities.ecandidat.Commission)1 CompteMinima (fr.univlorraine.ecandidat.entities.ecandidat.CompteMinima)1 DroitFonctionnalite (fr.univlorraine.ecandidat.entities.ecandidat.DroitFonctionnalite)1 Formation (fr.univlorraine.ecandidat.entities.ecandidat.Formation)1 FormulaireCand (fr.univlorraine.ecandidat.entities.ecandidat.FormulaireCand)1 FormulaireCandidat (fr.univlorraine.ecandidat.entities.ecandidat.FormulaireCandidat)1 Opi (fr.univlorraine.ecandidat.entities.ecandidat.Opi)1 PjCand (fr.univlorraine.ecandidat.entities.ecandidat.PjCand)1 PostIt (fr.univlorraine.ecandidat.entities.ecandidat.PostIt)1