Search in sources :

Example 1 with PjPresentation

use of fr.univlorraine.ecandidat.utils.bean.presentation.PjPresentation in project esup-ecandidat by EsupPortail.

the class CandidaturePieceController method setIsConcernedPieceJustificative.

/**
 * Change le statut est concerne d'une pj
 * @param pieceJustif
 * @param isConcerned
 * @param candidature
 * @param listener
 */
public void setIsConcernedPieceJustificative(final PjPresentation pieceJustif, final Boolean isConcerned, final Candidature candidature, final CandidatureListener listener) {
    Assert.notNull(candidature, applicationContext.getMessage("assert.notNull", null, UI.getCurrent().getLocale()));
    /* Verrou */
    if (!lockCandidatController.getLockOrNotifyCandidature(candidature)) {
        return;
    }
    final String user = userController.getCurrentUserLogin();
    if (isConcerned) {
        final ConfirmWindow confirmWindow = new ConfirmWindow(applicationContext.getMessage("pj.window.concerne", new Object[] { pieceJustif.getLibPj() }, UI.getCurrent().getLocale()), applicationContext.getMessage("pj.window.conditionnel.title", null, UI.getCurrent().getLocale()));
        confirmWindow.addBtnOuiListener(event -> {
            /* Verrou */
            if (!lockCandidatController.getLockOrNotifyCandidature(candidature)) {
                return;
            }
            if (isPjModified(pieceJustif, candidature, true, listener)) {
                return;
            }
            PjCand pjCand = null;
            if (pieceJustif.getPJCommune()) {
                final List<PjCand> listePjCand = pjCandRepository.findByIdIdPjAndCandidatureCandidatIdCandidatAndCandidatureFormationTemDematFormOrderByDatModPjCandDesc(pieceJustif.getPieceJustif().getIdPj(), candidature.getCandidat().getIdCandidat(), true);
                if (listePjCand != null && listePjCand.size() > 0) {
                    // on cherche d'abord en priorité si la pièce est présente sur la candidature
                    final Optional<PjCand> pjCandOpt = listePjCand.stream().filter(e -> e.getCandidature().getIdCand().equals(pieceJustif.getIdCandidature())).findFirst();
                    if (pjCandOpt.isPresent()) {
                        pjCand = pjCandOpt.get();
                    } else {
                        pjCand = listePjCand.get(0);
                    }
                }
            } else {
                final PjCandPK pk = new PjCandPK(pieceJustif.getPieceJustif().getIdPj(), candidature.getIdCand());
                pjCand = pjCandRepository.findOne(pk);
            }
            if (pjCand != null && pjCand.getFichier() == null) {
                pjCandRepository.delete(pjCand);
                candidature.setUserModCand(user);
                candidature.setDatModCand(LocalDateTime.now());
                candidature.removePjCand(pjCand);
                final TypeStatutPiece statutAtt = tableRefController.getTypeStatutPieceAttente();
                pieceJustif.setCodStatut(statutAtt.getCodTypStatutPiece());
                pieceJustif.setLibStatut(i18nController.getI18nTraduction(statutAtt.getI18nLibTypStatutPiece()));
                pieceJustif.setDatModification(null);
                final Candidature candidatureSave = candidatureRepository.save(candidature);
                listener.pjModified(pieceJustif, candidatureSave);
            }
        });
        UI.getCurrent().addWindow(confirmWindow);
    } else {
        final ConfirmWindow confirmWindow = new ConfirmWindow(applicationContext.getMessage("pj.window.nonConcerne", new Object[] { pieceJustif.getLibPj() }, UI.getCurrent().getLocale()), applicationContext.getMessage("pj.window.conditionnel.title", null, UI.getCurrent().getLocale()));
        confirmWindow.addBtnOuiListener(event -> {
            /* Verrou */
            if (!lockCandidatController.getLockOrNotifyCandidature(candidature)) {
                return;
            }
            if (isPjModified(pieceJustif, candidature, true, listener)) {
                return;
            }
            PjCand pjCand = null;
            final PjCandPK pk = new PjCandPK(pieceJustif.getPieceJustif().getIdPj(), candidature.getIdCand());
            if (pieceJustif.getPJCommune()) {
                final List<PjCand> listePjCand = pjCandRepository.findByIdIdPjAndCandidatureCandidatIdCandidatAndCandidatureFormationTemDematFormOrderByDatModPjCandDesc(pieceJustif.getPieceJustif().getIdPj(), candidature.getCandidat().getIdCandidat(), true);
                if (listePjCand != null && listePjCand.size() > 0) {
                    // on cherche d'abord en priorité si la pièce est présente sur la candidature
                    final Optional<PjCand> pjCandOpt = listePjCand.stream().filter(e -> e.getCandidature().getIdCand().equals(pieceJustif.getIdCandidature())).findFirst();
                    if (pjCandOpt.isPresent()) {
                        pjCand = pjCandOpt.get();
                    } else {
                        pjCand = listePjCand.get(0);
                    }
                }
            } else {
                pjCand = pjCandRepository.findOne(pk);
            }
            if (pjCand == null) {
                pjCand = new PjCand(pk, user, candidature, pieceJustif.getPieceJustif());
                pjCand.setLibFilePjCand(null);
                pjCand.setUserModPjCand(user);
                pjCand.setFichier(null);
                final TypeStatutPiece statutNotConcern = tableRefController.getTypeStatutPieceNonConcerne();
                pieceJustif.setCodStatut(statutNotConcern.getCodTypStatutPiece());
                pieceJustif.setLibStatut(i18nController.getI18nTraduction(statutNotConcern.getI18nLibTypStatutPiece()));
                pjCand.setTypeStatutPiece(statutNotConcern);
                pjCand = pjCandRepository.saveAndFlush(pjCand);
                // obligé de recharger l'objet car le datetime est arrondi :(
                final PjCand pjCandSave = pjCandRepository.findOne(pk);
                pieceJustif.setFilePj(null);
                pieceJustif.setCodStatut(statutNotConcern.getCodTypStatutPiece());
                pieceJustif.setLibStatut(i18nController.getI18nTraduction(statutNotConcern.getI18nLibTypStatutPiece()));
                pieceJustif.setIdCandidature(candidature.getIdCand());
                pieceJustif.setDatModification(pjCandSave.getDatModPjCand());
                candidature.setUserModCand(user);
                candidature.updatePjCand(pjCandSave);
                candidature.setDatModCand(LocalDateTime.now());
                final Candidature candidatureSave = candidatureRepository.save(candidature);
                listener.pjModified(pieceJustif, candidatureSave);
            }
        });
        UI.getCurrent().addWindow(confirmWindow);
    }
}
Also used : PieceJustif(fr.univlorraine.ecandidat.entities.ecandidat.PieceJustif) LoggerFactory(org.slf4j.LoggerFactory) UI(com.vaadin.ui.UI) FichierFiabilisation(fr.univlorraine.ecandidat.entities.ecandidat.FichierFiabilisation) Formulaire(fr.univlorraine.ecandidat.entities.ecandidat.Formulaire) ByteArrayInOutStream(fr.univlorraine.ecandidat.utils.ByteArrayInOutStream) TypeStatutPiece(fr.univlorraine.ecandidat.entities.ecandidat.TypeStatutPiece) FormulairePresentation(fr.univlorraine.ecandidat.utils.bean.presentation.FormulairePresentation) ZipEntry(java.util.zip.ZipEntry) ConstanteUtils(fr.univlorraine.ecandidat.utils.ConstanteUtils) MethodUtils(fr.univlorraine.ecandidat.utils.MethodUtils) Resource(javax.annotation.Resource) PjCandidat(fr.univlorraine.ecandidat.entities.ecandidat.PjCandidat) List(java.util.List) Type(com.vaadin.ui.Notification.Type) OnDemandFile(fr.univlorraine.ecandidat.vaadin.components.OnDemandFile) FichierFiabilisationRepository(fr.univlorraine.ecandidat.repositories.FichierFiabilisationRepository) LocalDate(java.time.LocalDate) Optional(java.util.Optional) Candidature(fr.univlorraine.ecandidat.entities.ecandidat.Candidature) FichierRepository(fr.univlorraine.ecandidat.repositories.FichierRepository) FormulaireCandidat(fr.univlorraine.ecandidat.entities.ecandidat.FormulaireCandidat) PjCand(fr.univlorraine.ecandidat.entities.ecandidat.PjCand) ZipOutputStream(java.util.zip.ZipOutputStream) FormulaireCandidature(fr.univlorraine.ecandidat.entities.ecandidat.FormulaireCandidature) PjCandRepository(fr.univlorraine.ecandidat.repositories.PjCandRepository) LocalDateTime(java.time.LocalDateTime) Fichier(fr.univlorraine.ecandidat.entities.ecandidat.Fichier) PjPresentation(fr.univlorraine.ecandidat.utils.bean.presentation.PjPresentation) ArrayList(java.util.ArrayList) NomenclatureUtils(fr.univlorraine.ecandidat.utils.NomenclatureUtils) Notification(com.vaadin.ui.Notification) FormulaireCand(fr.univlorraine.ecandidat.entities.ecandidat.FormulaireCand) FileException(fr.univlorraine.ecandidat.services.file.FileException) Logger(org.slf4j.Logger) PjCandPK(fr.univlorraine.ecandidat.entities.ecandidat.PjCandPK) FormulaireCandRepository(fr.univlorraine.ecandidat.repositories.FormulaireCandRepository) InfoWindow(fr.univlorraine.ecandidat.views.windows.InfoWindow) IOException(java.io.IOException) ApplicationContext(org.springframework.context.ApplicationContext) FormulaireCandPK(fr.univlorraine.ecandidat.entities.ecandidat.FormulaireCandPK) CtrCandActionPjWindow(fr.univlorraine.ecandidat.views.windows.CtrCandActionPjWindow) Component(org.springframework.stereotype.Component) CandidatureListener(fr.univlorraine.ecandidat.utils.ListenerUtils.CandidatureListener) FormulaireCandidatRepository(fr.univlorraine.ecandidat.repositories.FormulaireCandidatRepository) FormulaireMailBean(fr.univlorraine.ecandidat.utils.bean.mail.FormulaireMailBean) DateTimeFormatter(java.time.format.DateTimeFormatter) CandidatureRepository(fr.univlorraine.ecandidat.repositories.CandidatureRepository) UploadWindow(fr.univlorraine.ecandidat.views.windows.UploadWindow) ConfirmWindow(fr.univlorraine.ecandidat.views.windows.ConfirmWindow) InputStream(java.io.InputStream) Assert(org.springframework.util.Assert) TypeStatutPiece(fr.univlorraine.ecandidat.entities.ecandidat.TypeStatutPiece) PjCand(fr.univlorraine.ecandidat.entities.ecandidat.PjCand) ConfirmWindow(fr.univlorraine.ecandidat.views.windows.ConfirmWindow) PjCandPK(fr.univlorraine.ecandidat.entities.ecandidat.PjCandPK) Candidature(fr.univlorraine.ecandidat.entities.ecandidat.Candidature) FormulaireCandidature(fr.univlorraine.ecandidat.entities.ecandidat.FormulaireCandidature)

Example 2 with PjPresentation

use of fr.univlorraine.ecandidat.utils.bean.presentation.PjPresentation in project esup-ecandidat by EsupPortail.

the class CandidatureController method downloadDossier.

/**
 * telecharge le dossier
 * @param  candidature
 * @param  listePresentation
 * @param  listeDatePresentation
 * @param  listePj
 * @param  listeForm
 * @param  addPj
 * @return                       l'InputStream du dossier
 */
public OnDemandFile downloadDossier(final Candidature candidature, final List<SimpleTablePresentation> listePresentation, final List<SimpleTablePresentation> listeDatePresentation, final List<PjPresentation> listePj, final List<FormulairePresentation> listeForm, final Boolean addPj) {
    /* Variables utiles */
    final String numDossier = candidature.getCandidat().getCompteMinima().getNumDossierOpiCptMin();
    final String nom = candidature.getCandidat().getNomPatCandidat();
    final String prenom = candidature.getCandidat().getPrenomCandidat();
    final String codForm = candidature.getFormation().getCodForm();
    final String libForm = candidature.getFormation().getLibForm();
    /* Nom du fichier */
    final String fileName = applicationContext.getMessage("candidature.download.file", new Object[] { numDossier, nom, prenom, codForm }, UI.getCurrent().getLocale());
    // Les parametres des PJ
    final Boolean enableAddApogeePJDossier = parametreController.getIsAddApogeePJDossier();
    // Font
    final PDFont font = PDType1Font.HELVETICA_BOLD;
    // le dossier outStream
    ByteArrayInputStream bisDossier = null;
    // liste des InputStream à fermer
    final List<InputStream> listeInputStreamToClose = new ArrayList<>();
    /* Génération du dossier principal */
    try {
        bisDossier = generateDossier(candidature, listePresentation, listeDatePresentation, listePj, listeForm);
        if (bisDossier == null) {
            Notification.show(applicationContext.getMessage("candidature.download.error", null, UI.getCurrent().getLocale()), Type.WARNING_MESSAGE);
            return null;
        }
    } catch (IOException | XDocReportException e2) {
        Notification.show(applicationContext.getMessage("candidature.download.error", null, UI.getCurrent().getLocale()), Type.WARNING_MESSAGE);
        logger.error("erreur a la génération du dossier", e2);
        return null;
    }
    ByteArrayInOutStream out = new ByteArrayInOutStream();
    InputStream is = null;
    try {
        /* Merger */
        final PDFMergerUtility ut = new PDFMergerUtility();
        /* Propriétés du document */
        final PDDocumentInformation info = new PDDocumentInformation();
        info.setTitle(numDossier + "_" + nom + "_" + prenom + "_" + codForm);
        info.setAuthor(ConstanteUtils.APP_NAME);
        info.setSubject(nom + " " + prenom + " (" + numDossier + ") / " + libForm + " (" + codForm + ")");
        final Calendar calendar = Calendar.getInstance(UI.getCurrent().getLocale());
        info.setCreationDate(calendar);
        info.setModificationDate(calendar);
        ut.setDestinationDocumentInformation(info);
        /* Ajout du dossier */
        ut.addSource(bisDossier);
        /* Gestion des erreurs de pj */
        Boolean errorAddPj = false;
        final List<String> fileNameError = new ArrayList<>();
        /* Calcul si besoin d'ajouter les pj */
        Integer nbFilePJ = 0;
        for (final PjPresentation pj : listePj) {
            if (pj.getFilePj() != null) {
                nbFilePJ++;
            }
        }
        if (addPj && nbFilePJ > 0 && !fileController.isFileServiceMaintenance(applicationContext.getMessage("file.service.maintenance.dossier", null, UI.getCurrent().getLocale()))) {
            for (final PjPresentation e : listePj) {
                // listePj.forEach(e->{
                try {
                    // titre header
                    final String textHeader = e.getLibPj();
                    // PJ doit etre à true
                    if (e.getFilePj() != null && (e.getPjCandidatFromApogee() == null || (e.getPjCandidatFromApogee() != null && enableAddApogeePJDossier))) {
                        final Fichier file = e.getFilePj();
                        final String nameFile = file.getNomFichier();
                        final InputStream inputStreamFile = fileController.getInputStreamFromPjPresentation(e);
                        // on doit fermer l'inputStream apres le merge donc je stock le stream et le ferme apres
                        listeInputStreamToClose.add(inputStreamFile);
                        // cas du PDF
                        if (inputStreamFile != null && MethodUtils.isPdfFileName(nameFile)) {
                            // chargement du pdf avant de l'ajouter -> evite de compiler avec des fichiers corrompus
                            final BufferedInputStream bufferedInputStreamFile = new BufferedInputStream(inputStreamFile);
                            // on doit fermer l'inputStream apres le merge donc je stock le stream et le ferme apres
                            listeInputStreamToClose.add(bufferedInputStreamFile);
                            try {
                                // on place un marker au max du buffer du stream (mark = nb byte qu'il peut lire avant d'etre invalide.. mais comme on lit tout le fichier..)
                                bufferedInputStreamFile.mark(ConstanteUtils.MAX_BUFFER_SIZE);
                                // lecture du fichier pour vérifier s'il n'est pas corrompue
                                final PDDocument doc = PDDocument.load(bufferedInputStreamFile);
                                // cloture immédiate du fichier pour libérer la mémoire
                                MethodUtils.closeRessource(doc);
                                // on replace le bufferedInputStreamFile au début
                                bufferedInputStreamFile.reset();
                                // on ajoute l'inputStream
                                ut.addSource(bufferedInputStreamFile);
                            } catch (final Exception ex1) {
                                logger.warn("fichier pdf '" + nameFile + "' en erreur et non ajouté au dossier '" + fileName + "'", ex1);
                                errorAddPj = true;
                                fileNameError.add(nameFile);
                            }
                        } else if (inputStreamFile != null && MethodUtils.isImgFileName(nameFile)) {
                            // creation document
                            final PDDocument document = new PDDocument();
                            final ByteArrayInOutStream baosImg = new ByteArrayInOutStream();
                            ByteArrayInputStream bis = null;
                            try {
                                // chargement page A4
                                final PDRectangle PAGE_SIZE_A4 = PDRectangle.A4;
                                // creation page
                                final PDPage page = new PDPage(PAGE_SIZE_A4);
                                // ajout de la page
                                document.addPage(page);
                                // Stream du document
                                final PDPageContentStream contentStream = new PDPageContentStream(document, page);
                                // margin top est calculée si un text de titre a été ajouté
                                Float marginTop = addHeaderPJ(textHeader, font, PAGE_SIZE_A4, contentStream);
                                // on ajoute la marge sous le text (ou la marge depuis le haut du doc si pas de
                                // text)
                                marginTop = marginTop + ConstanteUtils.DOSSIER_MARGIN;
                                // creation de l'image
                                PDImageXObject img = null;
                                // JPG
                                if (MethodUtils.isJpgFileName(nameFile)) {
                                    img = JPEGFactory.createFromStream(document, inputStreamFile);
                                } else // PNG
                                if (MethodUtils.isPngFileName(nameFile)) {
                                    img = LosslessFactory.createFromImage(document, ImageIO.read(inputStreamFile));
                                }
                                // calcul de la largeur et hauteur de l'image
                                Float imgWidth = (float) img.getWidth();
                                Float imgHeight = (float) img.getHeight();
                                // calcul de la largeur et hauteur de la page moins les deux marges
                                final Float a4Width = PAGE_SIZE_A4.getWidth() - 2 * ConstanteUtils.DOSSIER_MARGIN;
                                final Float a4Height = PAGE_SIZE_A4.getHeight() - ConstanteUtils.DOSSIER_MARGIN - marginTop;
                                // calcul du coef à appliquer si l'image est trop grande
                                Float coef = 1.0f;
                                if (imgWidth > a4Width) {
                                    coef = a4Width / imgWidth;
                                    imgWidth = imgWidth * coef;
                                    imgHeight = imgHeight * coef;
                                }
                                // le nouveau coef
                                if (imgHeight > a4Height) {
                                    coef = a4Height / imgHeight;
                                    imgWidth = imgWidth * coef;
                                    imgHeight = imgHeight * coef;
                                }
                                // ecriture de l'image
                                contentStream.drawImage(img, ConstanteUtils.DOSSIER_MARGIN, PAGE_SIZE_A4.getHeight() - imgHeight - marginTop, imgWidth, imgHeight);
                                // il faut d'abord fermer le flux
                                MethodUtils.closeRessource(contentStream);
                                document.save(baosImg);
                                /* Creation du flux */
                                bis = baosImg.getInputStream();
                                /* Ajout de la page au document */
                                ut.addSource(bis);
                            } catch (final Exception e1) {
                                errorAddPj = true;
                                fileNameError.add(nameFile);
                                logger.warn("fichier image '" + nameFile + "' en erreur et non ajouté au dossier '" + fileName + "'", e1);
                            } finally {
                                /* Nettoyage des ressources */
                                MethodUtils.closeRessource(document);
                                MethodUtils.closeRessource(bis);
                                MethodUtils.closeRessource(baosImg);
                            }
                        }
                    }
                } catch (final Exception e1) {
                    errorAddPj = true;
                    final String nameFile = e.getFilePj() != null ? e.getFilePj().getNomFichier() : "-";
                    if (e.getFilePj() != null) {
                        fileNameError.add(e.getFilePj().getNomFichier());
                    }
                    logger.warn("fichier '" + nameFile + "' en erreur et non ajouté au dossier '" + fileName + "'", e1);
                }
            }
        }
        if (errorAddPj) {
            String fileNamesError = "";
            if (fileNameError.size() > 0) {
                fileNamesError = " : " + fileNameError.stream().collect(Collectors.joining(", "));
            }
            Notification.show(applicationContext.getMessage("candidature.download.encoding.pj", null, UI.getCurrent().getLocale()) + fileNamesError, Type.WARNING_MESSAGE);
        }
        ut.setDestinationFileName(fileName);
        ut.setDestinationStream(out);
        ut.mergeDocuments(MemoryUsageSetting.setupMainMemoryOnly());
        is = pdfManager.cryptAndSignPdf(out, UI.getCurrent().getLocale());
        return new OnDemandFile(fileName, is);
    } catch (final Exception e) {
        logger.warn("erreur a la génération du dossier '" + fileName + "'", e);
        try {
            out = new ByteArrayInOutStream();
            final PDFMergerUtility ut = new PDFMergerUtility();
            ut.addSource(generateDossier(candidature, listePresentation, listeDatePresentation, listePj, listeForm));
            ut.setDestinationFileName(fileName);
            ut.setDestinationStream(out);
            ut.mergeDocuments(MemoryUsageSetting.setupMainMemoryOnly());
            is = pdfManager.cryptAndSignPdf(out, UI.getCurrent().getLocale());
            Notification.show(applicationContext.getMessage("candidature.download.error.pj", null, UI.getCurrent().getLocale()), Type.WARNING_MESSAGE);
            return new OnDemandFile(fileName, is);
        } catch (final Exception e2) {
            Notification.show(applicationContext.getMessage("candidature.download.error", null, UI.getCurrent().getLocale()), Type.WARNING_MESSAGE);
            logger.error("erreur a la génération du dossier", e2);
            return null;
        }
    } finally {
        // fermeture des fichiers
        MethodUtils.closeRessource(is);
        MethodUtils.closeRessource(out);
        MethodUtils.closeRessource(bisDossier);
        /* besoin de fermer les pdf apres coup */
        listeInputStreamToClose.forEach(inputStreamFile -> {
            MethodUtils.closeRessource(inputStreamFile);
        });
        listeInputStreamToClose.clear();
    }
}
Also used : PDFont(org.apache.pdfbox.pdmodel.font.PDFont) PDPage(org.apache.pdfbox.pdmodel.PDPage) ArrayList(java.util.ArrayList) OnDemandFile(fr.univlorraine.ecandidat.vaadin.components.OnDemandFile) Fichier(fr.univlorraine.ecandidat.entities.ecandidat.Fichier) BufferedInputStream(java.io.BufferedInputStream) PDRectangle(org.apache.pdfbox.pdmodel.common.PDRectangle) PDDocumentInformation(org.apache.pdfbox.pdmodel.PDDocumentInformation) ByteArrayInOutStream(fr.univlorraine.ecandidat.utils.ByteArrayInOutStream) BufferedInputStream(java.io.BufferedInputStream) ByteArrayInputStream(java.io.ByteArrayInputStream) InputStream(java.io.InputStream) Calendar(java.util.Calendar) PDFMergerUtility(org.apache.pdfbox.multipdf.PDFMergerUtility) IOException(java.io.IOException) IOException(java.io.IOException) XDocConverterException(fr.opensagres.xdocreport.converter.XDocConverterException) XDocReportException(fr.opensagres.xdocreport.core.XDocReportException) PjPresentation(fr.univlorraine.ecandidat.utils.bean.presentation.PjPresentation) PDImageXObject(org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject) ByteArrayInputStream(java.io.ByteArrayInputStream) PDDocument(org.apache.pdfbox.pdmodel.PDDocument) PDPageContentStream(org.apache.pdfbox.pdmodel.PDPageContentStream) XDocReportException(fr.opensagres.xdocreport.core.XDocReportException)

Example 3 with PjPresentation

use of fr.univlorraine.ecandidat.utils.bean.presentation.PjPresentation in project esup-ecandidat by EsupPortail.

the class CandidaturePieceController method isPjModified.

/**
 * Methode inutilisée, controle dans le batch
 * @param  pieceJustif
 * @param  candidature
 * @return             true si une pièce existe alors qu'on veut l'ajouter
 */
/* public Boolean controlPjAdd(PjPresentation pieceJustif, Candidature
	 * candidature, CandidatureListener listener){ if
	 * (!candidature.getFormation().getTemDematForm()){ return false; } if
	 * (pieceJustif.getPjCandidatFromApogee() != null){ return false; } Boolean
	 * needToReload = false; //Le fichier de la pièce devrai être a null, sinon ca
	 * veut dire que le listener d'ajout de pièce n'a pas fonctionné if
	 * (pieceJustif.getFilePj()!=null){ logger.
	 * debug("Ajout PJ en erreur, rechargement demandé, la pièce devrait être null.."
	 * ); needToReload = true; }else if (pieceJustif.getPJCommune()){ //Si commune,
	 * on recherche la pièce dans toutes candidatures pour trouver si un fichier a
	 * été déposé List<PjCand> listePjCand = pjCandRepository.
	 * findByIdIdPjAndCandidatureCandidatIdCandidatAndCandidatureFormationTemDematFormOrderByDatModPjCandDesc
	 * (pieceJustif.getPieceJustif().getIdPj(),
	 * candidature.getCandidat().getIdCandidat(), true); if (listePjCand!=null &&
	 * listePjCand.size()>0 &&
	 * listePjCand.stream().filter(e->e.getFichier()!=null).count()>0){
	 * logger.debug("Ajout PJ en erreur, piece commune nok"); needToReload = true; }
	 * }else{ //Sinon, on recherche dans la candidature PjCandPK pk = new
	 * PjCandPK(pieceJustif.getPieceJustif().getIdPj(),candidature.getIdCand());
	 * PjCand pjCand = pjCandRepository.findOne(pk);
	 * if (pjCand!=null && pjCand.getFichier()!=null){
	 * logger.debug("Ajout PJ en erreur, piece non commune nok"); needToReload =
	 * true; } } if (needToReload){
	 * logger.debug("Ajout PJ en erreur, rechargement demandé");
	 * Notification.show(applicationContext.getMessage("pj.add.error", null,
	 * UI.getCurrent().getLocale()), Type.WARNING_MESSAGE); Candidature
	 * candidatureLoad = candidatureRepository.findOne(candidature.getIdCand());
	 * listener.reloadAllPiece(getPjCandidature(candidatureLoad), candidatureLoad);
	 * return true; } return false; } */
/**
 * Methode qui vérifie si la PJ a été modifiée par qqun d'autre obligatoire pour
 * les PJ commune qui peuvent etre modifiées dans une autre candidature on se
 * base sur la date de modification
 * @param  pieceJustif
 * @return             true si la PJ a été modifiée
 */
public Boolean isPjModified(final PjPresentation pieceJustif, final Candidature candidature, final Boolean showNotif, final CandidatureListener listener) {
    if (!candidature.getFormation().getTemDematForm()) {
        return false;
    }
    if (pieceJustif.getPjCandidatFromApogee() != null) {
        logger.debug("Pas de verification pièce pour les PJ d'Apogée :  " + pieceJustif);
        return false;
    }
    logger.debug("Verification pièce : " + pieceJustif);
    Boolean needToReload = false;
    if (pieceJustif.getPJCommune()) {
        final List<PjCand> listePjCand = pjCandRepository.findByIdIdPjAndCandidatureCandidatIdCandidatAndCandidatureFormationTemDematFormOrderByDatModPjCandDesc(pieceJustif.getPieceJustif().getIdPj(), candidature.getCandidat().getIdCandidat(), true);
        PjCand pjCandFind = null;
        if (listePjCand != null && listePjCand.size() > 0) {
            // on cherche d'abord en priorité si la pièce est présente sur la candidature
            final Optional<PjCand> pjCandOpt = listePjCand.stream().filter(e -> e.getCandidature().getIdCand().equals(pieceJustif.getIdCandidature())).findFirst();
            if (pjCandOpt.isPresent()) {
                pjCandFind = pjCandOpt.get();
            } else {
                pjCandFind = listePjCand.get(0);
            }
        }
        logger.debug("Pièces trouvées : " + listePjCand.size() + " : " + pjCandFind);
        // nouvelle pièce, si il en existe une, on recharge
        if (pieceJustif.getDatModification() == null) {
            // la piece etait vide et on en a ajouté une
            if (pjCandFind != null) {
                logger.debug("Cas no1, pièces nouvelle et pièce trouvée : " + pieceJustif.getDatModification() + " - " + pjCandFind);
                needToReload = true;
            }
        } else /* ce n'est pas une nouvelle pièce, on vérifie : - qu'elle n'a pas été supprimée
			 * en route - que sa date de modif est différente */
        {
            // piece supprimée
            if (pjCandFind == null) {
                logger.debug("Cas no2, pièces vide : " + pjCandFind);
                needToReload = true;
            } else // !pjCandFind.getDatModPjCand().equals(pieceJustif.getDatModification())){
            if (!pjCandFind.getDatModPjCand().equals(pieceJustif.getDatModification())) {
                needToReload = true;
                logger.debug("Cas no3, dates différente : " + pieceJustif.getDatModification() + " - " + pjCandFind.getDatModPjCand() + " - test =  " + pjCandFind.getDatModPjCand().equals(pieceJustif.getDatModification()));
            }
        }
    } else {
        // si pièce non commune, présente dans la fenetre mais absente en base
        if (pieceJustif.getDatModification() != null) {
            final PjCandPK pk = new PjCandPK(pieceJustif.getPieceJustif().getIdPj(), candidature.getIdCand());
            final PjCand pjCand = pjCandRepository.findOne(pk);
            if (pjCand == null) {
                logger.debug("Cas no4, pièce non commune mais supprimée");
                needToReload = true;
            }
        }
    }
    /* Si on est dans un des deux cas, on recharge la liste de pièces */
    if (needToReload) {
        logger.debug("Rechargement demandé");
        if (showNotif) {
            Notification.show(applicationContext.getMessage("pj.modified", null, UI.getCurrent().getLocale()), Type.WARNING_MESSAGE);
        }
        final Candidature candidatureLoad = candidatureRepository.findOne(candidature.getIdCand());
        listener.reloadAllPiece(getPjCandidature(candidatureLoad), candidatureLoad);
        return true;
    }
    return false;
}
Also used : PieceJustif(fr.univlorraine.ecandidat.entities.ecandidat.PieceJustif) LoggerFactory(org.slf4j.LoggerFactory) UI(com.vaadin.ui.UI) FichierFiabilisation(fr.univlorraine.ecandidat.entities.ecandidat.FichierFiabilisation) Formulaire(fr.univlorraine.ecandidat.entities.ecandidat.Formulaire) ByteArrayInOutStream(fr.univlorraine.ecandidat.utils.ByteArrayInOutStream) TypeStatutPiece(fr.univlorraine.ecandidat.entities.ecandidat.TypeStatutPiece) FormulairePresentation(fr.univlorraine.ecandidat.utils.bean.presentation.FormulairePresentation) ZipEntry(java.util.zip.ZipEntry) ConstanteUtils(fr.univlorraine.ecandidat.utils.ConstanteUtils) MethodUtils(fr.univlorraine.ecandidat.utils.MethodUtils) Resource(javax.annotation.Resource) PjCandidat(fr.univlorraine.ecandidat.entities.ecandidat.PjCandidat) List(java.util.List) Type(com.vaadin.ui.Notification.Type) OnDemandFile(fr.univlorraine.ecandidat.vaadin.components.OnDemandFile) FichierFiabilisationRepository(fr.univlorraine.ecandidat.repositories.FichierFiabilisationRepository) LocalDate(java.time.LocalDate) Optional(java.util.Optional) Candidature(fr.univlorraine.ecandidat.entities.ecandidat.Candidature) FichierRepository(fr.univlorraine.ecandidat.repositories.FichierRepository) FormulaireCandidat(fr.univlorraine.ecandidat.entities.ecandidat.FormulaireCandidat) PjCand(fr.univlorraine.ecandidat.entities.ecandidat.PjCand) ZipOutputStream(java.util.zip.ZipOutputStream) FormulaireCandidature(fr.univlorraine.ecandidat.entities.ecandidat.FormulaireCandidature) PjCandRepository(fr.univlorraine.ecandidat.repositories.PjCandRepository) LocalDateTime(java.time.LocalDateTime) Fichier(fr.univlorraine.ecandidat.entities.ecandidat.Fichier) PjPresentation(fr.univlorraine.ecandidat.utils.bean.presentation.PjPresentation) ArrayList(java.util.ArrayList) NomenclatureUtils(fr.univlorraine.ecandidat.utils.NomenclatureUtils) Notification(com.vaadin.ui.Notification) FormulaireCand(fr.univlorraine.ecandidat.entities.ecandidat.FormulaireCand) FileException(fr.univlorraine.ecandidat.services.file.FileException) Logger(org.slf4j.Logger) PjCandPK(fr.univlorraine.ecandidat.entities.ecandidat.PjCandPK) FormulaireCandRepository(fr.univlorraine.ecandidat.repositories.FormulaireCandRepository) InfoWindow(fr.univlorraine.ecandidat.views.windows.InfoWindow) IOException(java.io.IOException) ApplicationContext(org.springframework.context.ApplicationContext) FormulaireCandPK(fr.univlorraine.ecandidat.entities.ecandidat.FormulaireCandPK) CtrCandActionPjWindow(fr.univlorraine.ecandidat.views.windows.CtrCandActionPjWindow) Component(org.springframework.stereotype.Component) CandidatureListener(fr.univlorraine.ecandidat.utils.ListenerUtils.CandidatureListener) FormulaireCandidatRepository(fr.univlorraine.ecandidat.repositories.FormulaireCandidatRepository) FormulaireMailBean(fr.univlorraine.ecandidat.utils.bean.mail.FormulaireMailBean) DateTimeFormatter(java.time.format.DateTimeFormatter) CandidatureRepository(fr.univlorraine.ecandidat.repositories.CandidatureRepository) UploadWindow(fr.univlorraine.ecandidat.views.windows.UploadWindow) ConfirmWindow(fr.univlorraine.ecandidat.views.windows.ConfirmWindow) InputStream(java.io.InputStream) Assert(org.springframework.util.Assert) PjCand(fr.univlorraine.ecandidat.entities.ecandidat.PjCand) PjCandPK(fr.univlorraine.ecandidat.entities.ecandidat.PjCandPK) Candidature(fr.univlorraine.ecandidat.entities.ecandidat.Candidature) FormulaireCandidature(fr.univlorraine.ecandidat.entities.ecandidat.FormulaireCandidature)

Example 4 with PjPresentation

use of fr.univlorraine.ecandidat.utils.bean.presentation.PjPresentation in project esup-ecandidat by EsupPortail.

the class CandidaturePieceController method getPjCandidature.

/**
 * @param  candidature
 * @return             la liste des pj d'une candidature
 */
public List<PjPresentation> getPjCandidature(final Candidature candidature) {
    final List<PjPresentation> liste = new ArrayList<>();
    final TypeStatutPiece statutAtt = tableRefController.getTypeStatutPieceAttente();
    final TypeStatutPiece statutValide = tableRefController.getTypeStatutPieceValide();
    final Boolean isDemat = candidature.getFormation().getTemDematForm();
    int i = 1;
    for (final PieceJustif e : pieceJustifController.getPjForCandidature(candidature, true)) {
        liste.add(getPjPresentation(e, candidature, statutAtt, statutValide, i, isDemat));
        i++;
    }
    return liste;
}
Also used : PjPresentation(fr.univlorraine.ecandidat.utils.bean.presentation.PjPresentation) TypeStatutPiece(fr.univlorraine.ecandidat.entities.ecandidat.TypeStatutPiece) ArrayList(java.util.ArrayList) PieceJustif(fr.univlorraine.ecandidat.entities.ecandidat.PieceJustif)

Example 5 with PjPresentation

use of fr.univlorraine.ecandidat.utils.bean.presentation.PjPresentation in project esup-ecandidat by EsupPortail.

the class CandidaturePieceController method getPjPresentation.

/**
 * @param  pj
 * @param  candidature
 * @param  statutAtt
 * @param  statutValide
 * @param  isDemat
 * @return              une piece de presentation
 */
private PjPresentation getPjPresentation(final PieceJustif pj, final Candidature candidature, final TypeStatutPiece statutAtt, final TypeStatutPiece statutValide, final Integer order, final Boolean isDemat) {
    final String libPj = i18nController.getI18nTraduction(pj.getI18nLibPj());
    final PjCand pjCand = getPjCandFromList(pj, candidature, isDemat);
    String libStatut = null;
    String codStatut = null;
    String commentaire = null;
    LocalDateTime datModification = null;
    Integer idCandidature = null;
    PjCandidat pjCandidatFromApogee = null;
    String userMod = null;
    Fichier fichier = null;
    if (pjCand != null) {
        fichier = pjCand.getFichier();
        if (pjCand.getTypeStatutPiece() != null) {
            libStatut = i18nController.getI18nTraduction(pjCand.getTypeStatutPiece().getI18nLibTypStatutPiece());
            codStatut = pjCand.getTypeStatutPiece().getCodTypStatutPiece();
        }
        commentaire = pjCand.getCommentPjCand();
        datModification = pjCand.getDatModPjCand();
        idCandidature = pjCand.getCandidature().getIdCand();
        userMod = getLibModStatut(pjCand.getUserModStatutPjCand(), pjCand.getDatModStatutPjCand());
    } else {
        if (isDemat) {
            pjCandidatFromApogee = candidatPieceController.getPjCandidat(pj.getCodApoPj(), candidature.getCandidat());
            if (pjCandidatFromApogee != null) {
                fichier = new Fichier();
                fichier.setFileFichier(pjCandidatFromApogee.getNomFicPjCandidat());
                fichier.setNomFichier(pjCandidatFromApogee.getNomFicPjCandidat());
                commentaire = applicationContext.getMessage("file.from.another.system", null, UI.getCurrent().getLocale());
                libStatut = i18nController.getI18nTraduction(statutValide.getI18nLibTypStatutPiece());
                codStatut = statutValide.getCodTypStatutPiece();
            } else {
                libStatut = i18nController.getI18nTraduction(statutAtt.getI18nLibTypStatutPiece());
                codStatut = statutAtt.getCodTypStatutPiece();
                idCandidature = candidature.getIdCand();
            }
        } else {
            libStatut = i18nController.getI18nTraduction(statutAtt.getI18nLibTypStatutPiece());
            codStatut = statutAtt.getCodTypStatutPiece();
            idCandidature = candidature.getIdCand();
        }
    }
    final Boolean commun = pj.getTemCommunPj() && !pj.getTemUnicitePj();
    return new PjPresentation(pj, libPj, fichier, codStatut, libStatut, commentaire, pj.getTemConditionnelPj(), commun, datModification, idCandidature, order, pjCandidatFromApogee, userMod);
}
Also used : LocalDateTime(java.time.LocalDateTime) PjCandidat(fr.univlorraine.ecandidat.entities.ecandidat.PjCandidat) PjPresentation(fr.univlorraine.ecandidat.utils.bean.presentation.PjPresentation) PjCand(fr.univlorraine.ecandidat.entities.ecandidat.PjCand) Fichier(fr.univlorraine.ecandidat.entities.ecandidat.Fichier)

Aggregations

PjPresentation (fr.univlorraine.ecandidat.utils.bean.presentation.PjPresentation)6 Fichier (fr.univlorraine.ecandidat.entities.ecandidat.Fichier)4 PjCand (fr.univlorraine.ecandidat.entities.ecandidat.PjCand)4 ArrayList (java.util.ArrayList)4 Candidature (fr.univlorraine.ecandidat.entities.ecandidat.Candidature)3 FormulaireCandidature (fr.univlorraine.ecandidat.entities.ecandidat.FormulaireCandidature)3 PieceJustif (fr.univlorraine.ecandidat.entities.ecandidat.PieceJustif)3 PjCandPK (fr.univlorraine.ecandidat.entities.ecandidat.PjCandPK)3 PjCandidat (fr.univlorraine.ecandidat.entities.ecandidat.PjCandidat)3 TypeStatutPiece (fr.univlorraine.ecandidat.entities.ecandidat.TypeStatutPiece)3 ByteArrayInOutStream (fr.univlorraine.ecandidat.utils.ByteArrayInOutStream)3 OnDemandFile (fr.univlorraine.ecandidat.vaadin.components.OnDemandFile)3 CtrCandActionPjWindow (fr.univlorraine.ecandidat.views.windows.CtrCandActionPjWindow)3 IOException (java.io.IOException)3 InputStream (java.io.InputStream)3 Notification (com.vaadin.ui.Notification)2 Type (com.vaadin.ui.Notification.Type)2 UI (com.vaadin.ui.UI)2 FichierFiabilisation (fr.univlorraine.ecandidat.entities.ecandidat.FichierFiabilisation)2 Formulaire (fr.univlorraine.ecandidat.entities.ecandidat.Formulaire)2