diff --git a/batch/src/main/java/fr/abes/item/batch/JobConfiguration.java b/batch/src/main/java/fr/abes/item/batch/JobConfiguration.java index 55113d68..e8089eed 100644 --- a/batch/src/main/java/fr/abes/item/batch/JobConfiguration.java +++ b/batch/src/main/java/fr/abes/item/batch/JobConfiguration.java @@ -14,7 +14,6 @@ import fr.abes.item.core.constant.Constant; import fr.abes.item.core.constant.TYPE_DEMANDE; import fr.abes.item.core.service.ReferenceService; -import jakarta.persistence.EntityManager; import lombok.extern.slf4j.Slf4j; import org.springframework.batch.core.Job; import org.springframework.batch.core.JobExecution; @@ -38,6 +37,7 @@ import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.ComponentScans; import org.springframework.context.annotation.Configuration; +import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.retry.annotation.EnableRetry; import org.springframework.transaction.PlatformTransactionManager; @@ -56,6 +56,7 @@ public class JobConfiguration { private final StrategyFactory strategyFactory; private final ProxyRetry proxyRetry; private final ReferenceService referenceService; + private final JdbcTemplate jdbcTemplate; @Value("${batch.min.hour}") int minHour; @@ -71,10 +72,11 @@ public class JobConfiguration { private Integer nbPpnInFileResult; - public JobConfiguration(StrategyFactory strategyFactory, ProxyRetry proxyRetry, ReferenceService referenceService) { + public JobConfiguration(StrategyFactory strategyFactory, ProxyRetry proxyRetry, ReferenceService referenceService, @Qualifier("itemJdbcTemplate") JdbcTemplate jdbcTemplate) { this.strategyFactory = strategyFactory; this.proxyRetry = proxyRetry; this.referenceService = referenceService; + this.jdbcTemplate = jdbcTemplate; } @Bean @@ -123,7 +125,7 @@ public Tasklet authentifierSurSudocTasklet() //statistiques application @Bean - public Tasklet exportStatistiquesTasklet() { return new ExportStatistiquesTasklet(); } + public Tasklet exportStatistiquesTasklet() { return new ExportStatistiquesTasklet(jdbcTemplate); } //Archivage automatique des demandes diff --git a/batch/src/main/java/fr/abes/item/batch/traitement/ProxyRetry.java b/batch/src/main/java/fr/abes/item/batch/traitement/ProxyRetry.java index 5c1ea91f..94ee54b3 100644 --- a/batch/src/main/java/fr/abes/item/batch/traitement/ProxyRetry.java +++ b/batch/src/main/java/fr/abes/item/batch/traitement/ProxyRetry.java @@ -78,8 +78,10 @@ public void saveExemplaire(DemandeModif demande, LigneFichierDtoModif ligneFichi //récupération de la exemplaire correpondant à la ligne du fichier en cours String exemplaire = traitementService.getNoticeFromEPN(ligneFichierDtoModif.getEpn()); //modification de la exemplaire d'exemplaire - Exemplaire noticeTraitee = ligneFichierModifService.getNoticeTraitee(demande, exemplaire, ligneFichierDtoMapper.getLigneFichierEntity(ligneFichierDtoModif)); - traitementService.saveExemplaire(noticeTraitee.toString(), ligneFichierDtoModif.getEpn()); + if (exemplaire != null) { + Exemplaire noticeTraitee = ligneFichierModifService.getNoticeTraitee(demande, exemplaire, ligneFichierDtoMapper.getLigneFichierEntity(ligneFichierDtoModif)); + traitementService.saveExemplaire(noticeTraitee.toString(), ligneFichierDtoModif.getEpn()); + } } catch (IOException ex) { log.error("Erreur de communication avec le CBS sur demande modif {} / ligne fichier n°{} / epn : {}", demande.getId(), ligneFichierDtoModif.getNumLigneFichier(), ligneFichierDtoModif.getEpn()); //si un pb de communication avec le CBS est détecté, on se reconnecte, et on renvoie l'exception pour que le retry retente la méthode diff --git a/batch/src/main/java/fr/abes/item/batch/webstats/ExportStatistiquesTasklet.java b/batch/src/main/java/fr/abes/item/batch/webstats/ExportStatistiquesTasklet.java index f84f1afc..ebf5c2e8 100644 --- a/batch/src/main/java/fr/abes/item/batch/webstats/ExportStatistiquesTasklet.java +++ b/batch/src/main/java/fr/abes/item/batch/webstats/ExportStatistiquesTasklet.java @@ -12,68 +12,90 @@ import org.springframework.batch.core.scope.context.ChunkContext; import org.springframework.batch.core.step.tasklet.Tasklet; import org.springframework.batch.repeat.RepeatStatus; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.jdbc.core.JdbcTemplate; -import javax.sql.DataSource; import java.io.FileWriter; import java.util.Date; import java.util.List; @Slf4j public class ExportStatistiquesTasklet implements Tasklet, StepExecutionListener { - @Autowired - protected DataSource itemDataSource; - - @Autowired - protected JdbcTemplate itemJdbcTemplate; + private final JdbcTemplate itemJdbcTemplate; private Integer annee; private Integer mois; - private List listeDemandesTraitees; - private List listeExemplairesTraites; - + private Date dateDebut; + private Date dateFin; @Value("${files.upload.statistiques.path}") private String uploadPath; + public ExportStatistiquesTasklet(JdbcTemplate itemJdbcTemplate) { + this.itemJdbcTemplate = itemJdbcTemplate; + } + @Override public void beforeStep(StepExecution stepExecution) { - Date dateDebut = (Date) stepExecution.getJobExecution().getExecutionContext().get("dateDebut"); - Date dateFin = (Date) stepExecution.getJobExecution().getExecutionContext().get("dateFin"); - annee = (int) stepExecution.getJobExecution().getExecutionContext().get("annee"); - mois = (int) stepExecution.getJobExecution().getExecutionContext().get("mois"); - listeDemandesTraitees = getNbDemandesTraitees(dateDebut, dateFin); - listeExemplairesTraites = getNbExemplairesTraites(dateDebut, dateFin); + this.dateDebut = (Date) stepExecution.getJobExecution().getExecutionContext().get("dateDebut"); + this.dateFin = (Date) stepExecution.getJobExecution().getExecutionContext().get("dateFin"); + this.annee = (int) stepExecution.getJobExecution().getExecutionContext().get("annee"); + this.mois = (int) stepExecution.getJobExecution().getExecutionContext().get("mois"); + } @Override public RepeatStatus execute(@NonNull StepContribution stepContribution, @NonNull ChunkContext chunkContext) throws Exception { - try (CSVWriter writer = new CSVWriter(new FileWriter(getFilename(Constant.STAT_NBDEMANDESTRAITEES_FILENAME)), ';', CSVWriter.NO_QUOTE_CHARACTER)){ + exportStatistiquesDemandesModif(); + exportStatistiquesDemandesSupp(); + return RepeatStatus.FINISHED; + } + + private void exportStatistiquesDemandesModif() { + try (CSVWriter writer = new CSVWriter(new FileWriter(getFilename(Constant.STAT_NBDEMANDESMODIFTRAITEES_FILENAME)), ';', CSVWriter.NO_QUOTE_CHARACTER)){ + List listeDemandesTraitees = getNbDemandesTraiteesModif(dateDebut, dateFin); for (NbDemandesTraiteesDto demande : listeDemandesTraitees) { writer.writeNext(new String[]{demande.getRcr(), demande.getNbDemandesTraitees().toString()}); } } catch (Exception e) { - log.error(Constant.ERROR_OPENING_FILE_FOR_NUMBER_OF_REQUESTS_PROCESSED_BY_RCR); + log.error(Constant.ERR_FILE_STAT_MODIF_DEMANDES); } - try (CSVWriter writer = new CSVWriter(new FileWriter(getFilename(Constant.STAT_NBEXEMPLAIRESTRAITES_FILENAME)), ';', CSVWriter.NO_QUOTE_CHARACTER)) { + try (CSVWriter writer = new CSVWriter(new FileWriter(getFilename(Constant.STAT_NBEXEMPLAIRESMODIFTRAITES_FILENAME)), ';', CSVWriter.NO_QUOTE_CHARACTER)) { + List listeExemplairesTraites = getNbExemplairesTraitesModif(dateDebut, dateFin); for (NbExemplairesTraitesDto exemp : listeExemplairesTraites) { writer.writeNext(new String[]{exemp.getRcr(), exemp.getTypeTraitement().toString(), exemp.getNbExemplaires().toString()}); } } catch (Exception e) { - log.error(Constant.ERROR_OPENING_FILE_FOR_NUMBER_OF_EXEMPLARIES_PROCESSES_BY_RCR_AND_TREATMENT); + log.error(Constant.ERR_FILE_STAT_MODIF_EXEMP); + } + } + + private void exportStatistiquesDemandesSupp() { + try (CSVWriter writer = new CSVWriter(new FileWriter(getFilename(Constant.STAT_NBDEMANDESSUPPTRAITEES_FILENAME)), ';', CSVWriter.NO_QUOTE_CHARACTER)){ + List listeDemandesTraitees = getNbDemandesTraiteesSupp(dateDebut, dateFin); + for (NbDemandesTraiteesDto demande : listeDemandesTraitees) { + writer.writeNext(new String[]{demande.getRcr(), demande.getNbDemandesTraitees().toString()}); + } + } catch (Exception e) { + log.error(Constant.ERR_FILE_STAT_SUPP_DEMANDES); + } + try (CSVWriter writer = new CSVWriter(new FileWriter(getFilename(Constant.STAT_NBEXEMPLAIRESSUPPTRAITES_FILENAME)), ';', CSVWriter.NO_QUOTE_CHARACTER)) { + List listeExemplairesTraites = getNbExemplairesTraitesSupp(dateDebut, dateFin); + for (NbExemplairesSuppTraitesDto exemp : listeExemplairesTraites) { + writer.writeNext(new String[]{exemp.getRcr(), exemp.getNbExemplaires().toString()}); + } + } catch (Exception e) { + log.error(Constant.ERR_FILE_STAT_SUPP_EXEMP); } - return RepeatStatus.FINISHED; } - private List getNbDemandesTraitees(Date dateDebut, Date dateFin) { - String query = "select RCR, count(*) from DEMANDE_MODIF d, JOURNAL_DEMANDE_MODIF j where j.JOU_DEM_ID = d.NUM_DEMANDE and j.JOU_ETA_ID=7 and j.DATE_ENTREE between ? and ? group by d.RCR"; + private List getNbDemandesTraiteesModif(Date dateDebut, Date dateFin) { + String query = "select RCR, count(distinct d.NUM_DEMANDE) from DEMANDE_MODIF d join JOURNAL_DEMANDE_MODIF j on j.JOU_DEM_ID = d.NUM_DEMANDE where j.JOU_ETA_ID IN (7, 9) and j.DATE_ENTREE between ? and ? group by d.RCR"; return itemJdbcTemplate.query(query, new Object[] {dateDebut, dateFin}, new NbDemandesTraiteesMapper()); } - private List getNbExemplairesTraites(Date dateDebut, Date dateFin) { + private List getNbExemplairesTraitesModif(Date dateDebut, Date dateFin) { String query = "select d.DEM_TRAIT_ID, d.RCR, count(*) " + "from JOURNAL_DEMANDE_MODIF j, DEMANDE_MODIF d, LIGNE_FICHIER_MODIF lf " + "where j.DATE_ENTREE between ? and ? "+ @@ -82,6 +104,20 @@ private List getNbExemplairesTraites(Date dateDebut, Da return itemJdbcTemplate.query(query, new Object[] {dateDebut, dateFin}, new NbExemplairesTraitesMapper()); } + private List getNbDemandesTraiteesSupp(Date dateDebut, Date dateFin) { + String query = "select RCR, count(distinct d.NUM_DEMANDE) from DEMANDE_SUPP d join JOURNAL_DEMANDE_SUPP j on j.JOU_DEM_ID = d.NUM_DEMANDE where j.JOU_ETA_ID IN (7, 9) and j.DATE_ENTREE between ? and ? group by d.RCR"; + return itemJdbcTemplate.query(query, new Object[] {dateDebut, dateFin}, new NbDemandesTraiteesMapper()); + } + + private List getNbExemplairesTraitesSupp(Date dateDebut, Date dateFin) { + String query = "select d.RCR, count(*) " + + "from JOURNAL_DEMANDE_SUPP j, DEMANDE_SUPP d, LIGNE_FICHIER_SUPP lf " + + "where j.DATE_ENTREE between ? and ? "+ + "and j.JOU_ETA_ID=6 and j.JOU_DEM_ID = d.NUM_DEMANDE and d.NUM_DEMANDE = lf.REF_DEMANDE and lf.TRAITEE=1 " + + "group by d.RCR"; + return itemJdbcTemplate.query(query, new Object[] {dateDebut, dateFin}, new NbExemplairesSuppTraitesMapper()); + } + private String getFilename(String filename) { return uploadPath + annee + ((mois < 10) ? '0' + mois.toString() : mois.toString()) + "_" + filename + Constant.EXTENSIONCSV; } diff --git a/batch/src/main/java/fr/abes/item/batch/webstats/NbExemplairesSuppTraitesDto.java b/batch/src/main/java/fr/abes/item/batch/webstats/NbExemplairesSuppTraitesDto.java new file mode 100644 index 00000000..7db38287 --- /dev/null +++ b/batch/src/main/java/fr/abes/item/batch/webstats/NbExemplairesSuppTraitesDto.java @@ -0,0 +1,13 @@ +package fr.abes.item.batch.webstats; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@NoArgsConstructor +@Getter +@Setter +public class NbExemplairesSuppTraitesDto { + private String rcr; + private Integer nbExemplaires; +} diff --git a/batch/src/main/java/fr/abes/item/batch/webstats/NbExemplairesSuppTraitesMapper.java b/batch/src/main/java/fr/abes/item/batch/webstats/NbExemplairesSuppTraitesMapper.java new file mode 100644 index 00000000..cfdd8d6b --- /dev/null +++ b/batch/src/main/java/fr/abes/item/batch/webstats/NbExemplairesSuppTraitesMapper.java @@ -0,0 +1,16 @@ +package fr.abes.item.batch.webstats; + +import org.springframework.jdbc.core.RowMapper; + +import java.sql.ResultSet; +import java.sql.SQLException; + +public class NbExemplairesSuppTraitesMapper implements RowMapper { + @Override + public NbExemplairesSuppTraitesDto mapRow(ResultSet resultSet, int i) throws SQLException { + NbExemplairesSuppTraitesDto nbExemp = new NbExemplairesSuppTraitesDto(); + nbExemp.setRcr(resultSet.getString("RCR")); + nbExemp.setNbExemplaires(resultSet.getInt("count")); + return nbExemp; + } +} diff --git a/core/src/main/java/fr/abes/item/core/constant/Constant.java b/core/src/main/java/fr/abes/item/core/constant/Constant.java index acfc8fb9..af3d03d4 100644 --- a/core/src/main/java/fr/abes/item/core/constant/Constant.java +++ b/core/src/main/java/fr/abes/item/core/constant/Constant.java @@ -164,8 +164,10 @@ public class Constant implements Serializable { public static final int TAILLEMAX = 9; /**Specific messages on mails sents and stats*/ - public static final String STAT_NBDEMANDESTRAITEES_FILENAME = "demandesTraiteesRCR"; - public static final String STAT_NBEXEMPLAIRESTRAITES_FILENAME = "exemplairesTraitesTraitementRCR"; + public static final String STAT_NBDEMANDESMODIFTRAITEES_FILENAME = "demandesTraiteesModifRCR"; + public static final String STAT_NBEXEMPLAIRESMODIFTRAITES_FILENAME = "exemplairesModifTraitesTraitementRCR"; + public static final String STAT_NBDEMANDESSUPPTRAITEES_FILENAME = "demandesSuppTraiteesRCR"; + public static final String STAT_NBEXEMPLAIRESSUPPTRAITES_FILENAME = "exemplairesSuppTraitesRCR"; public static final String DEMANDE_MODIFICATION_START = "Demande de modification d'exemplaires N° "; public static final String DEMANDE_SUPPRESSION_START = "Demande de suppression d'exemplaires N° "; public static final String DEMANDE_EXEMPLARISATION_START = "Votre exemplarisation - "; @@ -200,8 +202,10 @@ public class Constant implements Serializable { public static final String STRATEGY_ANNOTATION_FOR_BEAN_FAILED ="Ne peut résoudre l'annotation strategy pour ce bean."; public static final String STRATEGY_RETURN_DEFAULT_STRATEGY_NO_TYPE_DEMANDE_SELECTED = "No type_demande selected, returning default strategy"; public static final String STRATEGY_RETURN_DEFAULT_STRATEGY_NO_TYPE_DEMANDE_SPECIFIC_STRATEGY_SELECTED = "No type_demande specific strategy found, returning default strategy"; - public static final String ERROR_OPENING_FILE_FOR_NUMBER_OF_REQUESTS_PROCESSED_BY_RCR = "Erreur dans l'ouverture du fichier pour nb demandeModifs traitées par RCR."; - public static final String ERROR_OPENING_FILE_FOR_NUMBER_OF_EXEMPLARIES_PROCESSES_BY_RCR_AND_TREATMENT = "Erreur dans l'ouverture du fichier pour nb exemplaires traites par RCR et Traitement."; + public static final String ERR_FILE_STAT_MODIF_DEMANDES = "Erreur dans l'ouverture du fichier pour nb demande modif traitées par RCR."; + public static final String ERR_FILE_STAT_MODIF_EXEMP = "Erreur dans l'ouverture du fichier pour nb exemplaires de demande de modif traites par RCR et Traitement."; + public static final String ERR_FILE_STAT_SUPP_DEMANDES = "Erreur dans l'ouverture du fichier pour nb demande supp traitées par RCR."; + public static final String ERR_FILE_STAT_SUPP_EXEMP = "Erreur dans l'ouverture du fichier pour nb exemplaires de demande de supp traites par RCR."; public static final String ERROR_RESPONDING_WITH_UNAUTHORIZED_ERROR = "Erreur : répond avec une erreur d'autorisation : message - {0}"; public static final String ERROR_ACCESS_DATABASE = "Erreur acces a la base"; public static final String ERROR_GENERIC_TECHNICAL_PROBLEMS = "Nous rencontrons actuellement des problèmes techniques."; diff --git a/core/src/main/java/fr/abes/item/core/entities/item/JournalDemandeExemp.java b/core/src/main/java/fr/abes/item/core/entities/item/JournalDemandeExemp.java index 35502ff3..6f3af61b 100644 --- a/core/src/main/java/fr/abes/item/core/entities/item/JournalDemandeExemp.java +++ b/core/src/main/java/fr/abes/item/core/entities/item/JournalDemandeExemp.java @@ -19,7 +19,7 @@ public class JournalDemandeExemp implements Serializable, GenericEntity @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name="NUM_JOURNAL") private Integer numJournal; - @Temporal(TemporalType.DATE) @Column(name="DATE_ENTREE") + @Temporal(TemporalType.TIMESTAMP) @Column(name="DATE_ENTREE") private Date dateEntree; @ManyToOne @JoinColumn(name="JOU_USER_ID") @NotNull private Utilisateur user; @@ -30,7 +30,6 @@ public class JournalDemandeExemp implements Serializable, GenericEntity public JournalDemandeExemp(Date dateEntree, Utilisateur user, EtatDemande etatDemande, DemandeExemp demandeExemp) { - super(); this.dateEntree = dateEntree; this.user = user; this.etatDemande = etatDemande; diff --git a/core/src/main/java/fr/abes/item/core/entities/item/JournalDemandeModif.java b/core/src/main/java/fr/abes/item/core/entities/item/JournalDemandeModif.java index 382824d0..6098a705 100644 --- a/core/src/main/java/fr/abes/item/core/entities/item/JournalDemandeModif.java +++ b/core/src/main/java/fr/abes/item/core/entities/item/JournalDemandeModif.java @@ -19,7 +19,7 @@ public class JournalDemandeModif implements Serializable, GenericEntity @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name="NUM_JOURNAL") private Integer numJournal; - @Temporal(TemporalType.DATE) @Column(name="DATE_ENTREE") + @Temporal(TemporalType.TIMESTAMP) @Column(name="DATE_ENTREE") private Date dateEntree; @ManyToOne @JoinColumn(name="JOU_USER_ID") @NotNull private Utilisateur user; @@ -30,7 +30,6 @@ public class JournalDemandeModif implements Serializable, GenericEntity public JournalDemandeModif(Date dateEntree, Utilisateur user, EtatDemande etatDemande, DemandeModif demandeModif) { - super(); this.dateEntree = dateEntree; this.user = user; this.etatDemande = etatDemande; diff --git a/core/src/main/java/fr/abes/item/core/entities/item/JournalDemandeRecouv.java b/core/src/main/java/fr/abes/item/core/entities/item/JournalDemandeRecouv.java new file mode 100644 index 00000000..bdae5db5 --- /dev/null +++ b/core/src/main/java/fr/abes/item/core/entities/item/JournalDemandeRecouv.java @@ -0,0 +1,44 @@ +package fr.abes.item.core.entities.item; + +import fr.abes.item.core.entities.GenericEntity; +import jakarta.persistence.*; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import javax.validation.constraints.NotNull; +import java.io.Serializable; +import java.util.Date; + +@Entity +@NoArgsConstructor +@Table(name="JOURNAL_DEMANDE_RECOUV") +@Getter +@Setter +public class JournalDemandeRecouv implements Serializable, GenericEntity { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name="NUM_JOURNAL") + private Integer numJournal; + @Temporal(TemporalType.TIMESTAMP) + @Column(name="DATE_ENTREE") + private Date dateEntree; + @ManyToOne @JoinColumn(name="JOU_USER_ID") @NotNull + private Utilisateur user; + @ManyToOne @JoinColumn(name="JOU_DEM_ID") @NotNull + private DemandeRecouv demandeRecouv; + @ManyToOne @JoinColumn(name="JOU_ETA_ID") @NotNull + private EtatDemande etatDemande; + + public JournalDemandeRecouv(Date dateEntree, Utilisateur utilisateur, EtatDemande etatDemande, DemandeRecouv demandeRecouv) { + this.dateEntree = dateEntree; + this.user = utilisateur; + this.demandeRecouv = demandeRecouv; + this.etatDemande = etatDemande; + } + + @Override + public Integer getId() { + return numJournal; + } +} diff --git a/core/src/main/java/fr/abes/item/core/entities/item/JournalDemandeSupp.java b/core/src/main/java/fr/abes/item/core/entities/item/JournalDemandeSupp.java new file mode 100644 index 00000000..eed4245c --- /dev/null +++ b/core/src/main/java/fr/abes/item/core/entities/item/JournalDemandeSupp.java @@ -0,0 +1,43 @@ +package fr.abes.item.core.entities.item; + +import fr.abes.item.core.entities.GenericEntity; +import jakarta.persistence.*; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import javax.validation.constraints.NotNull; +import java.io.Serializable; +import java.util.Date; + +@Entity +@NoArgsConstructor +@Table(name="JOURNAL_DEMANDE_SUPP") +@Getter +@Setter +public class JournalDemandeSupp implements Serializable, GenericEntity { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name="NUM_JOURNAL") + private Integer numJournal; + @Temporal(TemporalType.TIMESTAMP) @Column(name="DATE_ENTREE") + private Date dateEntree; + @ManyToOne @JoinColumn(name="JOU_USER_ID") @NotNull + private Utilisateur user; + @ManyToOne @JoinColumn(name="JOU_DEM_ID") @NotNull + private DemandeSupp demandeSupp; + @ManyToOne @JoinColumn(name="JOU_ETA_ID") @NotNull + private EtatDemande etatDemande; + + public JournalDemandeSupp(Date dateEntree, Utilisateur utilisateur, EtatDemande etatDemande, DemandeSupp demandeSupp) { + this.dateEntree = dateEntree; + this.user = utilisateur; + this.demandeSupp = demandeSupp; + this.etatDemande = etatDemande; + } + + @Override + public Integer getId() { + return numJournal; + } +} diff --git a/core/src/main/java/fr/abes/item/core/repository/item/IJournalDemandeExempDao.java b/core/src/main/java/fr/abes/item/core/repository/item/IJournalDemandeExempDao.java index a7258c77..95a8a07c 100644 --- a/core/src/main/java/fr/abes/item/core/repository/item/IJournalDemandeExempDao.java +++ b/core/src/main/java/fr/abes/item/core/repository/item/IJournalDemandeExempDao.java @@ -5,7 +5,10 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; +import java.util.List; + @Repository @ItemConfiguration public interface IJournalDemandeExempDao extends JpaRepository { + List findAllByDemandeExemp_NumDemandeOrderByDateEntreeDesc(Integer numDemande); } diff --git a/core/src/main/java/fr/abes/item/core/repository/item/IJournalDemandeModifDao.java b/core/src/main/java/fr/abes/item/core/repository/item/IJournalDemandeModifDao.java index 28285bfa..2f16ebc9 100644 --- a/core/src/main/java/fr/abes/item/core/repository/item/IJournalDemandeModifDao.java +++ b/core/src/main/java/fr/abes/item/core/repository/item/IJournalDemandeModifDao.java @@ -5,7 +5,10 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; +import java.util.List; + @Repository @ItemConfiguration public interface IJournalDemandeModifDao extends JpaRepository { + List findAllByDemandeModif_NumDemandeOrderByDateEntreeDesc(Integer numDemande); } diff --git a/core/src/main/java/fr/abes/item/core/repository/item/IJournalDemandeRecouvDao.java b/core/src/main/java/fr/abes/item/core/repository/item/IJournalDemandeRecouvDao.java new file mode 100644 index 00000000..63076d67 --- /dev/null +++ b/core/src/main/java/fr/abes/item/core/repository/item/IJournalDemandeRecouvDao.java @@ -0,0 +1,14 @@ +package fr.abes.item.core.repository.item; + +import fr.abes.item.core.configuration.ItemConfiguration; +import fr.abes.item.core.entities.item.JournalDemandeRecouv; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +@ItemConfiguration +public interface IJournalDemandeRecouvDao extends JpaRepository { + List findAllByDemandeRecouv_NumDemandeOrderByDateEntreeDesc(Integer numDemande); +} diff --git a/core/src/main/java/fr/abes/item/core/repository/item/IJournalDemandeSuppDao.java b/core/src/main/java/fr/abes/item/core/repository/item/IJournalDemandeSuppDao.java new file mode 100644 index 00000000..d701cf4e --- /dev/null +++ b/core/src/main/java/fr/abes/item/core/repository/item/IJournalDemandeSuppDao.java @@ -0,0 +1,14 @@ +package fr.abes.item.core.repository.item; + +import fr.abes.item.core.configuration.ItemConfiguration; +import fr.abes.item.core.entities.item.JournalDemandeSupp; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +@ItemConfiguration +public interface IJournalDemandeSuppDao extends JpaRepository { + List findAllByDemandeSupp_NumDemandeOrderByDateEntreeDesc(Integer numDemande); +} diff --git a/core/src/main/java/fr/abes/item/core/service/IDemandeService.java b/core/src/main/java/fr/abes/item/core/service/IDemandeService.java index e442520a..fca3998e 100644 --- a/core/src/main/java/fr/abes/item/core/service/IDemandeService.java +++ b/core/src/main/java/fr/abes/item/core/service/IDemandeService.java @@ -42,8 +42,6 @@ public interface IDemandeService { Demande changeState(Demande demande, int etatDemande) throws DemandeCheckingException; - Demande changeStateCanceled(Demande demande, int etatDemande); - List getAllArchivedDemandes(String iln); List getAllArchivedDemandesAllIln(); @@ -58,6 +56,7 @@ public interface IDemandeService { List getDemandesToPlaceInDeletedStatus(); List getDemandesToDelete(); + Demande restaurerDemande(Demande demande) throws DemandeCheckingException; void refreshEntity(Demande demande); diff --git a/core/src/main/java/fr/abes/item/core/service/JournalService.java b/core/src/main/java/fr/abes/item/core/service/JournalService.java index 24272aed..96b508a3 100644 --- a/core/src/main/java/fr/abes/item/core/service/JournalService.java +++ b/core/src/main/java/fr/abes/item/core/service/JournalService.java @@ -1,20 +1,28 @@ package fr.abes.item.core.service; import fr.abes.item.core.entities.item.*; +import fr.abes.item.core.exception.DemandeCheckingException; import fr.abes.item.core.repository.item.IJournalDemandeExempDao; import fr.abes.item.core.repository.item.IJournalDemandeModifDao; +import fr.abes.item.core.repository.item.IJournalDemandeRecouvDao; +import fr.abes.item.core.repository.item.IJournalDemandeSuppDao; import org.springframework.stereotype.Service; import java.util.Calendar; +import java.util.List; @Service public class JournalService { private final IJournalDemandeExempDao journalDemandeExempDao; private final IJournalDemandeModifDao journalDemandeModifDao; + private final IJournalDemandeRecouvDao journalDemandeRecouvDao; + private final IJournalDemandeSuppDao journalDemandeSuppDao; - public JournalService(IJournalDemandeExempDao journalDemandeExempDao, IJournalDemandeModifDao journalDemandeModifDao) { + public JournalService(IJournalDemandeExempDao journalDemandeExempDao, IJournalDemandeModifDao journalDemandeModifDao, IJournalDemandeRecouvDao journalDemandeRecouvDao, IJournalDemandeSuppDao journalDemandeSuppDao) { this.journalDemandeExempDao = journalDemandeExempDao; this.journalDemandeModifDao = journalDemandeModifDao; + this.journalDemandeRecouvDao = journalDemandeRecouvDao; + this.journalDemandeSuppDao = journalDemandeSuppDao; } public void addEntreeJournal(DemandeExemp demande, EtatDemande etat) { @@ -24,4 +32,44 @@ public void addEntreeJournal(DemandeExemp demande, EtatDemande etat) { public void addEntreeJournal(DemandeModif demandeModif, EtatDemande etat) { journalDemandeModifDao.save(new JournalDemandeModif(Calendar.getInstance().getTime(), demandeModif.getUtilisateur(), etat, demandeModif)); } + + public void addEntreeJournal(DemandeRecouv demandeRecouv, EtatDemande etat) { + journalDemandeRecouvDao.save(new JournalDemandeRecouv(Calendar.getInstance().getTime(), demandeRecouv.getUtilisateur(), etat, demandeRecouv)); + } + + public void addEntreeJournal(DemandeSupp demandeSupp, EtatDemande etat) { + journalDemandeSuppDao.save(new JournalDemandeSupp(Calendar.getInstance().getTime(), demandeSupp.getUtilisateur(), etat, demandeSupp)); + } + + public EtatDemande getDernierEtatConnuAvantArchivage(DemandeSupp demandeSupp) throws DemandeCheckingException { + List journalDemandeSuppList = journalDemandeSuppDao.findAllByDemandeSupp_NumDemandeOrderByDateEntreeDesc(demandeSupp.getNumDemande()); + if (journalDemandeSuppList.size() > 1) { + return journalDemandeSuppList.get(1).getEtatDemande(); + } + throw new DemandeCheckingException("Pas d'état antérieur trouvé pour cette demande"); + } + + public EtatDemande getDernierEtatConnuAvantArchivage(DemandeModif demandeModif) throws DemandeCheckingException { + List journalDemandeModifList = journalDemandeModifDao.findAllByDemandeModif_NumDemandeOrderByDateEntreeDesc(demandeModif.getNumDemande()); + if (journalDemandeModifList.size() > 1) { + return journalDemandeModifList.get(1).getEtatDemande(); + } + throw new DemandeCheckingException("Pas d'état antérieur trouvé pour cette demande"); + } + + public EtatDemande getDernierEtatConnuAvantArchivage(DemandeRecouv demandeRecouv) throws DemandeCheckingException { + List journalDemandeRecouvList = journalDemandeRecouvDao.findAllByDemandeRecouv_NumDemandeOrderByDateEntreeDesc(demandeRecouv.getNumDemande()); + if (journalDemandeRecouvList.size() > 1) { + return journalDemandeRecouvList.get(1).getEtatDemande(); + } + throw new DemandeCheckingException("Pas d'état antérieur trouvé pour cette demande"); + } + + public EtatDemande getDernierEtatConnuAvantArchivage(DemandeExemp demandeExemp) throws DemandeCheckingException { + List journalDemandeExempList = journalDemandeExempDao.findAllByDemandeExemp_NumDemandeOrderByDateEntreeDesc(demandeExemp.getNumDemande()); + if (journalDemandeExempList.size() > 1) { + return journalDemandeExempList.get(1).getEtatDemande(); + } + throw new DemandeCheckingException("Pas d'état antérieur trouvé pour cette demande"); + } } diff --git a/core/src/main/java/fr/abes/item/core/service/TraitementService.java b/core/src/main/java/fr/abes/item/core/service/TraitementService.java index 7c94bb9f..bf0157d6 100644 --- a/core/src/main/java/fr/abes/item/core/service/TraitementService.java +++ b/core/src/main/java/fr/abes/item/core/service/TraitementService.java @@ -65,8 +65,8 @@ public String getNoticeFromEPN(String epn) throws CBSException, IOException { return Constants.STR_1F + resu2.substring(resu2.indexOf("e" + numEx)) + Constants.STR_0D + Constants.STR_1E; } else { log.error(epn + " pas trouvé"); - throw new IOException(Constant.ERR_FILE_NOTICE_EPN_NUMBER); } + return null; } /** diff --git a/core/src/main/java/fr/abes/item/core/service/impl/DemandeExempService.java b/core/src/main/java/fr/abes/item/core/service/impl/DemandeExempService.java index 6ffce863..1af9a779 100644 --- a/core/src/main/java/fr/abes/item/core/service/impl/DemandeExempService.java +++ b/core/src/main/java/fr/abes/item/core/service/impl/DemandeExempService.java @@ -47,13 +47,12 @@ public class DemandeExempService extends DemandeService implements IDemandeServi private final UtilisateurService utilisateurService; private final IZonesAutoriseesDao zonesAutoriseesDao; private final ILigneFichierExempDao ligneFichierExempDao; - private final EntityManager entityManager; @Value("${files.upload.path}") private String uploadPath; public DemandeExempService(ILibProfileDao libProfileDao, IDemandeExempDao demandeExempDao, FileSystemStorageService storageService, LigneFichierExempService ligneFichierExempService, ReferenceService referenceService, JournalService journalService, TraitementService traitementService, UtilisateurService utilisateurService, IZonesAutoriseesDao zonesAutoriseesDao, ILigneFichierExempDao ligneFichierExempDao, @Qualifier("itemEntityManager") EntityManager entityManager) { - super(libProfileDao); + super(libProfileDao, entityManager); this.demandeExempDao = demandeExempDao; this.storageService = storageService; this.ligneFichierService = ligneFichierExempService; @@ -63,7 +62,6 @@ public DemandeExempService(ILibProfileDao libProfileDao, IDemandeExempDao demand this.utilisateurService = utilisateurService; this.zonesAutoriseesDao = zonesAutoriseesDao; this.ligneFichierExempDao = ligneFichierExempDao; - this.entityManager = entityManager; } public List findAll() { @@ -238,7 +236,7 @@ public void initFiles(Demande demande) throws FileTypeException { */ @Override public Demande changeState(Demande demande, int etatDemande) throws DemandeCheckingException { - if ((etatDemande == Constant.ETATDEM_ERREUR) || (demande.getEtatDemande().getNumEtat() == getPreviousState(etatDemande))) { + if ((etatDemande == Constant.ETATDEM_ERREUR) || (etatDemande == Constant.ETATDEM_SUPPRIMEE) || (demande.getEtatDemande().getNumEtat() == getPreviousState(etatDemande))) { EtatDemande etat = referenceService.findEtatDemandeById(etatDemande); demande.setEtatDemande(etat); journalService.addEntreeJournal((DemandeExemp) demande, etat); @@ -248,14 +246,6 @@ public Demande changeState(Demande demande, int etatDemande) throws DemandeCheck } } - @Override - public Demande changeStateCanceled(Demande demande, int etatDemande) { - EtatDemande etat = referenceService.findEtatDemandeById(etatDemande); - demande.setEtatDemande(etat); - journalService.addEntreeJournal((DemandeExemp) demande, etat); - return this.save(demande); - } - /** * Retourne l'état précédent d'une demande dans le déroulement normal du processus * @@ -398,6 +388,20 @@ public List getDemandesToDelete() { return null; } + @Override + public Demande restaurerDemande(Demande demande) throws DemandeCheckingException { + DemandeExemp demandeExemp = (DemandeExemp) demande; + if (demandeExemp.getEtatDemande().getNumEtat() != Constant.ETATDEM_ARCHIVEE) + throw new DemandeCheckingException("La demande doit être en état archivée !"); + EtatDemande etat = journalService.getDernierEtatConnuAvantArchivage(demandeExemp); + if (etat != null) { + demandeExemp.setEtatDemande(etat); + journalService.addEntreeJournal(demandeExemp,etat); + return save(demandeExemp); + } + return demande; + } + @Override public DemandeExemp creerDemande(String rcr, Integer userNum) { Calendar calendar = Calendar.getInstance(); diff --git a/core/src/main/java/fr/abes/item/core/service/impl/DemandeModifService.java b/core/src/main/java/fr/abes/item/core/service/impl/DemandeModifService.java index 7d078353..1d6ad7bc 100644 --- a/core/src/main/java/fr/abes/item/core/service/impl/DemandeModifService.java +++ b/core/src/main/java/fr/abes/item/core/service/impl/DemandeModifService.java @@ -43,7 +43,6 @@ public class DemandeModifService extends DemandeService implements IDemandeServi private final ReferenceService referenceService; private final UtilisateurService utilisateurService; private final Ppntoepn procStockee; - private final EntityManager entityManager; @Value("${files.upload.path}") private String uploadPath; @@ -52,7 +51,7 @@ public class DemandeModifService extends DemandeService implements IDemandeServi private FichierPrepare fichierPrepare; public DemandeModifService(ILibProfileDao libProfileDao, IDemandeModifDao demandeModifDao, FileSystemStorageService storageService, LigneFichierModifService ligneFichierModifService, JournalService journalService, ReferenceService referenceService, UtilisateurService utilisateurService, Ppntoepn procStockee, @Qualifier("itemEntityManager") EntityManager entityManager) { - super(libProfileDao); + super(libProfileDao, entityManager); this.demandeModifDao = demandeModifDao; this.storageService = storageService; this.ligneFichierService = ligneFichierModifService; @@ -60,7 +59,6 @@ public DemandeModifService(ILibProfileDao libProfileDao, IDemandeModifDao demand this.referenceService = referenceService; this.utilisateurService = utilisateurService; this.procStockee = procStockee; - this.entityManager = entityManager; } @Override @@ -325,14 +323,6 @@ public Demande creerDemande(String rcr, Integer userNum) { return demToReturn; } - @Override - public Demande changeStateCanceled(Demande demande, int etatDemande) { - EtatDemande etat = referenceService.findEtatDemandeById(etatDemande); - demande.setEtatDemande(etat); - journalService.addEntreeJournal((DemandeModif) demande, etat); - return this.save(demande); - } - /** * Méthode permettant de passer une demandeModif dans l'état terminée * @@ -359,7 +349,7 @@ public Demande closeDemande(Demande demande) throws DemandeCheckingException { */ @Override public Demande changeState(Demande demande, int etatDemande) throws DemandeCheckingException { - if ((etatDemande == Constant.ETATDEM_ERREUR) || (demande.getEtatDemande().getNumEtat() == getPreviousState(etatDemande))) { + if ((etatDemande == Constant.ETATDEM_ERREUR) || (etatDemande == Constant.ETATDEM_SUPPRIMEE) || (demande.getEtatDemande().getNumEtat() == getPreviousState(etatDemande))) { EtatDemande etat = referenceService.findEtatDemandeById(etatDemande); demande.setEtatDemande(etat); journalService.addEntreeJournal((DemandeModif) demande, etat); @@ -509,6 +499,20 @@ public List getDemandesToDelete() { return null; } + @Override + public Demande restaurerDemande(Demande demande) throws DemandeCheckingException { + DemandeModif demandeModif = (DemandeModif) demande; + if (demandeModif.getEtatDemande().getNumEtat() != Constant.ETATDEM_ARCHIVEE) + throw new DemandeCheckingException("La demande doit être en état archivée !"); + EtatDemande etat = journalService.getDernierEtatConnuAvantArchivage(demandeModif); + if (etat != null) { + demandeModif.setEtatDemande(etat); + journalService.addEntreeJournal(demandeModif,etat); + return save(demandeModif); + } + return demande; + } + public Demande majTraitement(Integer demandeId, Integer traitementId) { DemandeModif demandeModif = this.findById(demandeId); Traitement traitement = referenceService.findTraitementById(traitementId); diff --git a/core/src/main/java/fr/abes/item/core/service/impl/DemandeRecouvService.java b/core/src/main/java/fr/abes/item/core/service/impl/DemandeRecouvService.java index 8200ab6e..3b249770 100644 --- a/core/src/main/java/fr/abes/item/core/service/impl/DemandeRecouvService.java +++ b/core/src/main/java/fr/abes/item/core/service/impl/DemandeRecouvService.java @@ -38,20 +38,20 @@ public class DemandeRecouvService extends DemandeService implements IDemandeServ private final ReferenceService referenceService; private final ILigneFichierService ligneFichierService; private final UtilisateurService utilisateurService; + private final JournalService journalService; private FichierEnrichiRecouv fichierEnrichiRecouv; - private final EntityManager entityManager; @Value("${files.upload.path}") private String uploadPath; - public DemandeRecouvService(ILibProfileDao libProfileDao, IDemandeRecouvDao demandeRecouvDao, FileSystemStorageService storageService, ReferenceService referenceService, LigneFichierRecouvService ligneFichierRecouvService, UtilisateurService utilisateurService, @Qualifier("itemEntityManager") EntityManager entityManager) { - super(libProfileDao); + public DemandeRecouvService(ILibProfileDao libProfileDao, IDemandeRecouvDao demandeRecouvDao, FileSystemStorageService storageService, ReferenceService referenceService, LigneFichierRecouvService ligneFichierRecouvService, UtilisateurService utilisateurService, @Qualifier("itemEntityManager") EntityManager entityManager, JournalService journalService) { + super(libProfileDao, entityManager); this.demandeRecouvDao = demandeRecouvDao; this.storageService = storageService; this.referenceService = referenceService; this.ligneFichierService = ligneFichierRecouvService; this.utilisateurService = utilisateurService; - this.entityManager = entityManager; + this.journalService = journalService; } public List findAll() { @@ -99,7 +99,9 @@ public DemandeRecouv creerDemande(String rcr, Integer userNum) { DemandeRecouv demandeRecouv = new DemandeRecouv(rcr, calendar.getTime(), calendar.getTime(), referenceService.findEtatDemandeById(Constant.ETATDEM_PREPARATION), null, utilisateurService.findById(userNum)); demandeRecouv.setIln(Objects.requireNonNull(libProfileDao.findById(rcr).orElse(null)).getIln()); setIlnShortNameOnDemande(demandeRecouv); - return (DemandeRecouv) save(demandeRecouv); + DemandeRecouv demToReturn = (DemandeRecouv) save(demandeRecouv); + journalService.addEntreeJournal(demToReturn, referenceService.findEtatDemandeById(Constant.ETATDEM_PREPARATION)); + return demToReturn; } /** @@ -139,7 +141,7 @@ public Demande previousState(Demande demande) throws DemandeCheckingException { DemandeRecouv demandeRecouv = (DemandeRecouv) demande; if (etatDemande == Constant.ETATDEM_ACOMPLETER) { demandeRecouv.setEtatDemande(new EtatDemande(Constant.ETATDEM_PREPARATION)); - save(demandeRecouv); + this.save(demandeRecouv); } else { throw new DemandeCheckingException(Constant.GO_BACK_TO_PREVIOUS_STEP_ON_DEMAND_FAILED); @@ -186,9 +188,10 @@ public String getInfoHeaderFichierResultat(Demande demande, LocalDateTime dateDe @Override public Demande changeState(Demande demande, int etatDemande) throws DemandeCheckingException { - if ((etatDemande == Constant.ETATDEM_ERREUR) || (demande.getEtatDemande().getNumEtat() == getPreviousState(etatDemande))) { + if ((etatDemande == Constant.ETATDEM_ERREUR) || (etatDemande == Constant.ETATDEM_SUPPRIMEE) || (demande.getEtatDemande().getNumEtat() == getPreviousState(etatDemande))) { EtatDemande etat = referenceService.findEtatDemandeById(etatDemande); demande.setEtatDemande(etat); + journalService.addEntreeJournal((DemandeRecouv) demande, etat); return this.save(demande); } else { @@ -196,13 +199,6 @@ public Demande changeState(Demande demande, int etatDemande) throws DemandeCheck } } - @Override - public Demande changeStateCanceled(Demande demande, int etatDemande) { - EtatDemande etat = referenceService.findEtatDemandeById(etatDemande); - demande.setEtatDemande(etat); - return this.save(demande); - } - @Override public List getAllArchivedDemandes(String iln) { List listeDemandeRecouv = this.demandeRecouvDao.getAllArchivedDemandesRecouv(iln); @@ -333,6 +329,20 @@ public List getDemandesToDelete() { return null; } + @Override + public Demande restaurerDemande(Demande demande) throws DemandeCheckingException { + DemandeRecouv demandeRecouv = (DemandeRecouv) demande; + if (demandeRecouv.getEtatDemande().getNumEtat() != Constant.ETATDEM_ARCHIVEE) + throw new DemandeCheckingException("La demande doit être en état archivée !"); + EtatDemande etat = journalService.getDernierEtatConnuAvantArchivage(demandeRecouv); + if (etat != null) { + demandeRecouv.setEtatDemande(etat); + journalService.addEntreeJournal(demandeRecouv,etat); + return save(demandeRecouv); + } + return demande; + } + @Override public void modifierShortNameDemande(Demande demande) { setIlnShortNameOnDemande(demande); diff --git a/core/src/main/java/fr/abes/item/core/service/impl/DemandeService.java b/core/src/main/java/fr/abes/item/core/service/impl/DemandeService.java index df4d08a6..17bfeb16 100644 --- a/core/src/main/java/fr/abes/item/core/service/impl/DemandeService.java +++ b/core/src/main/java/fr/abes/item/core/service/impl/DemandeService.java @@ -4,6 +4,8 @@ import fr.abes.item.core.entities.baseXml.LibProfile; import fr.abes.item.core.entities.item.Demande; import fr.abes.item.core.repository.baseXml.ILibProfileDao; +import jakarta.persistence.EntityManager; +import jakarta.persistence.PersistenceContext; import lombok.Getter; import lombok.extern.slf4j.Slf4j; @@ -13,9 +15,12 @@ @Getter public class DemandeService { protected final ILibProfileDao libProfileDao; + @PersistenceContext + protected final EntityManager entityManager; - public DemandeService(ILibProfileDao libProfileDao) { + public DemandeService(ILibProfileDao libProfileDao, EntityManager entityManager) { this.libProfileDao = libProfileDao; + this.entityManager = entityManager; } /** diff --git a/core/src/main/java/fr/abes/item/core/service/impl/DemandeSuppService.java b/core/src/main/java/fr/abes/item/core/service/impl/DemandeSuppService.java index 42886577..2b53d383 100644 --- a/core/src/main/java/fr/abes/item/core/service/impl/DemandeSuppService.java +++ b/core/src/main/java/fr/abes/item/core/service/impl/DemandeSuppService.java @@ -18,7 +18,6 @@ import fr.abes.item.core.service.*; import fr.abes.item.core.utilitaire.Utilitaires; import jakarta.persistence.EntityManager; -import jakarta.persistence.PersistenceContext; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Value; @@ -44,9 +43,7 @@ public class DemandeSuppService extends DemandeService implements IDemandeServic private final ReferenceService referenceService; private final UtilisateurService utilisateurService; private final FileSystemStorageService storageService; - @PersistenceContext - private final EntityManager entityManager; - + private final JournalService journalService; private FichierInitialSupp fichierInit; private FichierPrepareSupp fichierPrepare; private final Ppntoepn procStockeePpnToEpn; @@ -55,8 +52,8 @@ public class DemandeSuppService extends DemandeService implements IDemandeServic @Value("${files.upload.path}") private String uploadPath; - public DemandeSuppService(ILibProfileDao libProfileDao, IDemandeSuppDao demandeSuppDao, FileSystemStorageService storageService, ReferenceService referenceService, UtilisateurService utilisateurService, Ppntoepn procStockeePpnToEpn, Epntoppn procStockeeEpnToPpn, LigneFichierSuppService ligneFichierSuppService, @Qualifier("itemEntityManager") EntityManager entityManager) { - super(libProfileDao); + public DemandeSuppService(ILibProfileDao libProfileDao, IDemandeSuppDao demandeSuppDao, FileSystemStorageService storageService, ReferenceService referenceService, UtilisateurService utilisateurService, Ppntoepn procStockeePpnToEpn, Epntoppn procStockeeEpnToPpn, LigneFichierSuppService ligneFichierSuppService, @Qualifier("itemEntityManager") EntityManager entityManager, JournalService journalService) { + super(libProfileDao, entityManager); this.demandeSuppDao = demandeSuppDao; this.storageService = storageService; this.referenceService = referenceService; @@ -64,7 +61,7 @@ public DemandeSuppService(ILibProfileDao libProfileDao, IDemandeSuppDao demandeS this.procStockeePpnToEpn = procStockeePpnToEpn; this.procStockeeEpnToPpn = procStockeeEpnToPpn; this.ligneFichierService = ligneFichierSuppService; - this.entityManager = entityManager; + this.journalService = journalService; } @Override @@ -90,7 +87,9 @@ public Demande creerDemande(String rcr, Integer userNum) { DemandeSupp demandeSupp = new DemandeSupp(rcr, calendar.getTime(), calendar.getTime(), null, null, referenceService.findEtatDemandeById(Constant.ETATDEM_PREPARATION), utilisateurService.findById(userNum)); demandeSupp.setIln(Objects.requireNonNull(libProfileDao.findById(rcr).orElse(null)).getIln()); setIlnShortNameOnDemande(demandeSupp); - return save(demandeSupp); + DemandeSupp demToReturn = (DemandeSupp) save(demandeSupp); + journalService.addEntreeJournal(demToReturn, referenceService.findEtatDemandeById(Constant.ETATDEM_PREPARATION)); + return demToReturn; } @Override @@ -262,12 +261,13 @@ public String getInfoHeaderFichierResultat(Demande demande, LocalDateTime dateDe @Override public Demande changeState(Demande demande, int etatDemande) throws DemandeCheckingException { - if ((etatDemande == Constant.ETATDEM_ERREUR) + if ((etatDemande == Constant.ETATDEM_ERREUR) || (etatDemande == Constant.ETATDEM_SUPPRIMEE) || (etatDemande == Constant.ETATDEM_INTERROMPUE && (demande.getEtatDemande().getNumEtat() == Constant.ETATDEM_ENCOURS || demande.getEtatDemande().getNumEtat() == Constant.ETATDEM_ATTENTE)) || (demande.getEtatDemande().getNumEtat() == getPreviousState(etatDemande)) || (etatDemande == Constant.ETATDEM_ARCHIVEE && demande.getEtatDemande().getNumEtat() == Constant.ETATDEM_INTERROMPUE)) { EtatDemande etat = referenceService.findEtatDemandeById(etatDemande); demande.setEtatDemande(etat); + journalService.addEntreeJournal((DemandeSupp) demande, etat); return save(demande); } else { throw new DemandeCheckingException(Constant.DEMANDE_IS_NOT_IN_STATE + getPreviousState(etatDemande)); @@ -296,12 +296,6 @@ private int getPreviousState(int etatDemande) { }; } - @Override - public Demande changeStateCanceled(Demande demande, int etatDemande) { - //todo - return null; - } - @Override public List getAllArchivedDemandes(String iln) { List listeDemandesDto = this.demandeSuppDao.getAllArchivedDemandesSupp(iln); @@ -383,6 +377,20 @@ public List getDemandesToDelete() { return null; } + @Override + public Demande restaurerDemande(Demande demande) throws DemandeCheckingException { + DemandeSupp demandeSupp = (DemandeSupp) demande; + if (demandeSupp.getEtatDemande().getNumEtat() != Constant.ETATDEM_ARCHIVEE) + throw new DemandeCheckingException("La demande doit être en état archivée !"); + EtatDemande etat = journalService.getDernierEtatConnuAvantArchivage(demandeSupp); + if (etat != null) { + demandeSupp.setEtatDemande(etat); + journalService.addEntreeJournal(demandeSupp,etat); + return save(demandeSupp); + } + return demande; + } + public Demande majTypeSupp(Integer demandeId, TYPE_SUPPRESSION typeSuppression) { DemandeSupp demandeSupp = this.findById(demandeId); diff --git a/core/src/main/java/fr/abes/item/core/service/impl/LigneFichierModifService.java b/core/src/main/java/fr/abes/item/core/service/impl/LigneFichierModifService.java index 4817ee8e..d945b848 100644 --- a/core/src/main/java/fr/abes/item/core/service/impl/LigneFichierModifService.java +++ b/core/src/main/java/fr/abes/item/core/service/impl/LigneFichierModifService.java @@ -164,11 +164,13 @@ public void deleteByDemande(Demande demande) { public String[] getNoticeExemplaireAvantApres(Demande demande, LigneFichier ligneFichier) throws CBSException, IOException, ZoneException { LigneFichierModif ligneFichierModif = (LigneFichierModif) ligneFichier; String noticeInit = getNoticeInitiale(demande, ligneFichierModif.getEpn()); - Exemplaire noticeTraitee = getNoticeTraitee(demande, noticeInit, ligneFichier); - + Exemplaire noticeTraitee = new Exemplaire(); + if (!noticeInit.isEmpty()) { + noticeTraitee = getNoticeTraitee(demande, noticeInit, ligneFichier); + } return new String[]{ traitementService.getCbs().getPpnEncours(), - noticeInit.replace("\r", "\r\n"), + (noticeInit.isEmpty()) ? "Exemplaire inexistant" : noticeInit.replace("\r", "\r\n"), noticeTraitee.toString().replace("\r", "\r\n") }; } @@ -192,7 +194,7 @@ public String getNoticeInitiale(Demande demandeModif, String epn) throws CBSExce traitementService.authenticate('M' + demandeModif.getRcr()); // appel getNoticeFromEPN sur EPN récupéré String notice = traitementService.getNoticeFromEPN(epn); - return notice.substring(1, notice.length() - 1); + return (notice != null) ? notice.substring(1, notice.length() - 1) : ""; } finally { // déconnexion du CBS après avoir lancé la requête traitementService.disconnect(); @@ -211,19 +213,17 @@ public Exemplaire getNoticeTraitee(Demande demande, String exemplaire, LigneFich DemandeModif demandeModif = (DemandeModif) demande; LigneFichierModif ligneFichierModif = (LigneFichierModif) ligneFichier; String exempStr = Utilitaires.getExempFromNotice(exemplaire, ligneFichierModif.getEpn()); - switch (demandeModif.getTraitement().getNomMethode()) { - case "creerNouvelleZone": - return traitementService.creerNouvelleZone(exempStr, demandeModif.getZone(), demandeModif.getSousZone(), ligneFichierModif.getValeurZone()); - case "supprimerZone": - return traitementService.supprimerZone(exempStr, demandeModif.getZone()); - case "supprimerSousZone": - return traitementService.supprimerSousZone(exempStr, demandeModif.getZone(), demandeModif.getSousZone()); - case "ajoutSousZone": - return traitementService.creerSousZone(exempStr, demandeModif.getZone(), demandeModif.getSousZone(), ligneFichierModif.getValeurZone()); - case "remplacerSousZone": - return traitementService.remplacerSousZone(exempStr, demandeModif.getZone(), demandeModif.getSousZone(), ligneFichierModif.getValeurZone()); - default: - } - return null; + return switch (demandeModif.getTraitement().getNomMethode()) { + case "creerNouvelleZone" -> + traitementService.creerNouvelleZone(exempStr, demandeModif.getZone(), demandeModif.getSousZone(), ligneFichierModif.getValeurZone()); + case "supprimerZone" -> traitementService.supprimerZone(exempStr, demandeModif.getZone()); + case "supprimerSousZone" -> + traitementService.supprimerSousZone(exempStr, demandeModif.getZone(), demandeModif.getSousZone()); + case "ajoutSousZone" -> + traitementService.creerSousZone(exempStr, demandeModif.getZone(), demandeModif.getSousZone(), ligneFichierModif.getValeurZone()); + case "remplacerSousZone" -> + traitementService.remplacerSousZone(exempStr, demandeModif.getZone(), demandeModif.getSousZone(), ligneFichierModif.getValeurZone()); + default -> null; + }; } } diff --git a/web/src/main/java/fr/abes/item/web/DemandeRestService.java b/web/src/main/java/fr/abes/item/web/DemandeRestService.java index a697a40d..c44b23f6 100644 --- a/web/src/main/java/fr/abes/item/web/DemandeRestService.java +++ b/web/src/main/java/fr/abes/item/web/DemandeRestService.java @@ -164,13 +164,13 @@ public void supprimer(@PathVariable("type") TYPE_DEMANDE type, @PathVariable("id @GetMapping(value = "/supprimerDemande/{type}/{id}") @PreAuthorize("hasAnyAuthority('USER','ADMIN')") @Operation(summary = "permet de supprimer une demande tout en la conservant en base, elle passe en statut 10 invisible pour l'utilisateur sur l'interface web") - public DemandeWebDto supprimerAvecConservationEnBase(@PathVariable("type") TYPE_DEMANDE type, @PathVariable("id") Integer numDemande, HttpServletRequest request) throws UserExistException, ForbiddenException { + public DemandeWebDto supprimerAvecConservationEnBase(@PathVariable("type") TYPE_DEMANDE type, @PathVariable("id") Integer numDemande, HttpServletRequest request) throws UserExistException, ForbiddenException, DemandeCheckingException { checkAccessToServices.autoriserAccesDemandeParIln(numDemande, request.getAttribute(Constant.USER_NUM).toString(), type); IDemandeService service = strategy.getStrategy(IDemandeService.class, type); ILigneFichierService ligneFichierService = strategy.getStrategy(ILigneFichierService.class, type); Demande demande = service.findById(numDemande); ligneFichierService.deleteByDemande(demande); - return builder.buildDemandeDto(service.changeStateCanceled(demande, Constant.ETATDEM_SUPPRIMEE), type); + return builder.buildDemandeDto(service.changeState(demande, Constant.ETATDEM_SUPPRIMEE), type); } @GetMapping(value = "/getTypeExemplarisationDemande/{id}") @@ -356,4 +356,23 @@ public DemandeWebDto stopDemandeSupp(@PathVariable("id") Integer id, HttpServlet throw new UnknownDemandeException("Demande inconnue"); } + + /** + * Webservice permettant de restaurer une demande archivée en la refaisant passer à son dernier état connu + * @param type type de la demande concernée + * @param id id de la demande + * @param request requête http + * @return la demande modifiée + * @throws UserExistException utilisateur non trouve + * @throws ForbiddenException controle d'accès échoué + * @throws DemandeCheckingException demande dans le mauvais état + */ + @PatchMapping("/restaurerDemande/{type}/{id}") + @PreAuthorize("hasAnyAuthority('USER', 'ADMIN')") + @Operation(summary = "Permet de restaurer une demande archivée dans son état précédent") + public DemandeWebDto restaurerDemande(@PathVariable("type") TYPE_DEMANDE type, @PathVariable("id") Integer id, HttpServletRequest request) throws ForbiddenException, UserExistException, DemandeCheckingException { + checkAccessToServices.autoriserAccesDemandeParIln(id, request.getAttribute(Constant.USER_NUM).toString(), type); + IDemandeService service = strategy.getStrategy(IDemandeService.class, type); + return builder.buildDemandeDto(service.restaurerDemande(service.findById(id)), type); + } }