use of fr.univlorraine.ecandidat.entities.ecandidat.PieceJustif 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);
}
}
use of fr.univlorraine.ecandidat.entities.ecandidat.PieceJustif in project esup-ecandidat by EsupPortail.
the class PieceJustifViewTemplate method init.
/**
* Initialise la vue
*/
@PostConstruct
public void init() {
/* Style */
setSizeFull();
setMargin(true);
setSpacing(true);
/* Titre */
titleParam.addStyleName(StyleConstants.VIEW_TITLE);
addComponent(titleParam);
/* Boutons */
buttonsLayout.setWidth(100, Unit.PERCENTAGE);
buttonsLayout.setSpacing(true);
addComponent(buttonsLayout);
btnNew.setCaption(applicationContext.getMessage("pieceJustif.btnNouveau", null, UI.getCurrent().getLocale()));
btnNew.setEnabled(true);
buttonsLayout.addComponent(btnNew);
buttonsLayout.setComponentAlignment(btnNew, Alignment.MIDDLE_LEFT);
btnEdit.setCaption(applicationContext.getMessage("btnEdit", null, UI.getCurrent().getLocale()));
btnEdit.setEnabled(false);
btnEdit.addClickListener(e -> {
if (pieceJustifTable.getValue() instanceof PieceJustif) {
pieceJustifController.editPieceJustif((PieceJustif) pieceJustifTable.getValue());
}
});
buttonsLayout.addComponent(btnEdit);
buttonsLayout.setComponentAlignment(btnEdit, Alignment.MIDDLE_CENTER);
OneClickButton btnDelete = new OneClickButton(applicationContext.getMessage("btnDelete", null, UI.getCurrent().getLocale()), FontAwesome.TRASH_O);
btnDelete.setEnabled(false);
btnDelete.addClickListener(e -> {
if (pieceJustifTable.getValue() instanceof PieceJustif) {
pieceJustifController.deletePieceJustif((PieceJustif) pieceJustifTable.getValue());
}
});
buttonsLayout.addComponent(btnDelete);
buttonsLayout.setComponentAlignment(btnDelete, Alignment.MIDDLE_RIGHT);
/* Table des pieceJustifs */
pieceJustifTable.addBooleanColumn(PieceJustif_.tesPj.getName());
pieceJustifTable.addBooleanColumn(PieceJustif_.temCommunPj.getName());
pieceJustifTable.addBooleanColumn(PieceJustif_.temUnicitePj.getName());
pieceJustifTable.addBooleanColumn(PieceJustif_.temConditionnelPj.getName());
/* Type de traitement */
pieceJustifTable.addGeneratedColumn(PieceJustif_.typeTraitement.getName(), new ColumnGenerator() {
@Override
public Object generateCell(final Table source, final Object itemId, final Object columnId) {
final PieceJustif pieceJustif = (PieceJustif) itemId;
if (pieceJustif.getTypeTraitement() != null) {
return pieceJustif.getTypeTraitement().getLibTypTrait();
} else {
return applicationContext.getMessage("typeTraitement.lib.all", null, UI.getCurrent().getLocale());
}
}
});
if (!fileController.getModeDematBackoffice().equals(ConstanteUtils.TYPE_FICHIER_STOCK_NONE)) {
pieceJustifTable.addGeneratedColumn(PieceJustif_.fichier.getName(), new ColumnGenerator() {
@Override
public Object generateCell(final Table source, final Object itemId, final Object columnId) {
final PieceJustif pieceJustif = (PieceJustif) itemId;
if (pieceJustif.getFichier() == null) {
if (isVisuPjCommunMode && !isReadOnly) {
OneClickButton btnAdd = new OneClickButton(FontAwesome.PLUS);
btnAdd.addStyleName(StyleConstants.ON_DEMAND_FILE_LAYOUT);
btnAdd.setDescription(applicationContext.getMessage("file.btnAdd", null, UI.getCurrent().getLocale()));
btnAdd.addClickListener(e -> pieceJustifController.addFileToPieceJustificative(pieceJustif));
return btnAdd;
}
return null;
} else {
OnDemandFileLayout fileLayout = new OnDemandFileLayout(pieceJustif.getFichier().getNomFichier());
/* Delete */
if (isVisuPjCommunMode && !isReadOnly) {
fileLayout.addBtnDelClickListener(e -> pieceJustifController.deleteFileToPieceJustificative(pieceJustif));
}
/* Viewer si JPG */
if (MethodUtils.isImgFileName(pieceJustif.getFichier().getNomFichier())) {
fileLayout.addBtnViewerClickListener(e -> {
OnDemandFile file = new OnDemandFile(pieceJustif.getFichier().getNomFichier(), fileController.getInputStreamFromFichier(pieceJustif.getFichier()));
ImageViewerWindow iv = new ImageViewerWindow(file, null);
UI.getCurrent().addWindow(iv);
});
/* Opener si PDF */
} else if (MethodUtils.isPdfFileName(pieceJustif.getFichier().getNomFichier())) {
fileLayout.addBtnViewerPdfBrowserOpener(new OnDemandStreamFile() {
@Override
public OnDemandFile getOnDemandFile() {
return new OnDemandFile(pieceJustif.getFichier().getNomFichier(), fileController.getInputStreamFromFichier(pieceJustif.getFichier()));
}
});
}
/* Download */
fileLayout.addBtnDownloadFileDownloader(new OnDemandStreamFile() {
@Override
public OnDemandFile getOnDemandFile() {
return new OnDemandFile(pieceJustif.getFichier().getNomFichier(), fileController.getInputStreamFromFichier(pieceJustif.getFichier()));
}
});
return fileLayout;
}
}
});
FIELDS_ORDER = FIELDS_ORDER_FILE;
} else {
FIELDS_ORDER = FIELDS_ORDER_NO_FILE;
}
pieceJustifTable.setSizeFull();
pieceJustifTable.setVisibleColumns((Object[]) FIELDS_ORDER);
for (String fieldName : FIELDS_ORDER) {
pieceJustifTable.setColumnHeader(fieldName, applicationContext.getMessage("pieceJustif.table." + fieldName, null, UI.getCurrent().getLocale()));
}
container.setItemSorter(new DefaultItemSorter() {
@Override
public int compare(final Object itemId1, final Object itemId2) {
return ((PieceJustif) itemId1).compareTo((PieceJustif) itemId2);
}
});
pieceJustifTable.addHeaderClickListener(e -> {
container.setItemSorter(new DefaultItemSorter());
isOrderEnable = false;
});
pieceJustifTable.setColumnCollapsingAllowed(true);
pieceJustifTable.setColumnReorderingAllowed(true);
pieceJustifTable.setSelectable(true);
pieceJustifTable.setImmediate(true);
pieceJustifTable.setColumnWidth(PieceJustif_.orderPj.getName(), 60);
pieceJustifTable.addItemSetChangeListener(e -> pieceJustifTable.sanitizeSelection());
pieceJustifTable.addValueChangeListener(e -> {
/*
* Les boutons d'édition et de suppression de pieceJustif sont actifs seulement
* si une pieceJustif est sélectionnée.
*/
boolean pieceJustifIsSelected = pieceJustifTable.getValue() instanceof PieceJustif;
btnEdit.setEnabled(pieceJustifIsSelected);
btnDelete.setEnabled(pieceJustifIsSelected);
});
addComponent(pieceJustifTable);
setExpandRatio(pieceJustifTable, 1);
}
use of fr.univlorraine.ecandidat.entities.ecandidat.PieceJustif in project esup-ecandidat by EsupPortail.
the class CandidatPieceController method recordPjFromApo.
/**
* Insere les nouvelles pièces
* @param candidat
* @throws SiScolException
*/
@Transactional(rollbackFor = SiScolException.class)
private void recordPjFromApo(final Candidat candidat) throws SiScolException {
if (candidat == null || candidat.getCompteMinima().getSupannEtuIdCptMin() == null || !isWsPJEnable()) {
return;
}
// on collecte les code Apogee de pieces et on constitue une liste de codeApogee distinct
List<String> listeCodeApo = pieceJustifController.getAllPieceJustifs().stream().filter(piece -> piece.getCodApoPj() != null && !piece.getCodApoPj().equals("")).map(PieceJustif::getCodApoPj).distinct().collect(Collectors.toList());
List<PjCandidat> liste = new ArrayList<>();
// on ajoute ses nouvelles pieces
for (String codeTpj : listeCodeApo) {
WSPjInfo info = siScolService.getPjInfoFromApogee(null, candidat.getCompteMinima().getSupannEtuIdCptMin(), codeTpj);
if (info != null) {
PjCandidatPK pk = new PjCandidatPK(candidat.getIdCandidat(), info.getCodAnu(), info.getCodTpj());
PjCandidat pjCandidat = new PjCandidat();
pjCandidat.setId(pk);
pjCandidat.setNomFicPjCandidat(info.getNomFic());
pjCandidat.setCandidat(candidat);
if (info.getDatExp() != null) {
pjCandidat.setDatExpPjCandidat(LocalDateTime.parse(info.getDatExp(), formatterDateTimeApoWsPj));
}
if (MethodUtils.validateBean(pjCandidat, logger)) {
liste.add(pjCandidatRepository.save(pjCandidat));
} else {
throw new SiScolException("Erreur de validation");
}
}
}
candidat.setPjCandidats(liste);
}
use of fr.univlorraine.ecandidat.entities.ecandidat.PieceJustif 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;
}
use of fr.univlorraine.ecandidat.entities.ecandidat.PieceJustif 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;
}
Aggregations