diff --git a/batch/src/main/java/fr/abes/item/batch/traitement/traiterlignesfichierchunk/LignesFichierProcessor.java b/batch/src/main/java/fr/abes/item/batch/traitement/traiterlignesfichierchunk/LignesFichierProcessor.java index 0939a3de..cc472502 100644 --- a/batch/src/main/java/fr/abes/item/batch/traitement/traiterlignesfichierchunk/LignesFichierProcessor.java +++ b/batch/src/main/java/fr/abes/item/batch/traitement/traiterlignesfichierchunk/LignesFichierProcessor.java @@ -155,14 +155,17 @@ private LigneFichierDtoSupp processDemandeSupp(LigneFichierDto ligneFichierDto) //récupération des exemplaires existants pour cette ligne List exemplairesExistants = ((DemandeSuppService) strategyFactory.getStrategy(IDemandeService.class, TYPE_DEMANDE.SUPP)) .getExemplairesExistants(ligneFichierDtoSupp.getPpn()); - //TODO voir dans getTypeDocumentFromPpn comment gérer la logique de la 008 pour les notices - String oo8 = ((DemandeSuppService) strategyFactory.getStrategy(IDemandeService.class, TYPE_DEMANDE.SUPP)) - .getTypeDocumentFromPpn(ligneFichierDtoSupp.getPpn()); if (ligneFichierDtoSupp.getEpn() != null) { Optional exemplaireASupprimerOpt = exemplairesExistants.stream().filter(exemplaire -> exemplaire.findZone("A99", 0).getValeur().equals(ligneFichierDtoSupp.getEpn())).findFirst(); if (exemplaireASupprimerOpt.isPresent()) { this.fichierSauvegardeSuppTxt.writePpnInFile(ligneFichierDtoSupp.getPpn(), exemplaireASupprimerOpt.get()); - this.fichierSauvegardeSuppcsv.writePpnInFile(ligneFichierDtoSupp.getPpn(), exemplaireASupprimerOpt.get()); + /*TODO : voir les éventuelles erreurs à catcher dans la récupération du type de document + La zone est normalement obligatoire, et forcément sur 4 caractères (à vérifier) + Que faire en cas d'erreur de requête sur la recherche du ppn, ou de construction de l'objet NoticeConcrete + */ + String typeDoc = ((DemandeSuppService) strategyFactory.getStrategy(IDemandeService.class, TYPE_DEMANDE.SUPP)) + .getTypeDocumentFromPpn(ligneFichierDtoSupp.getPpn()); + this.fichierSauvegardeSuppcsv.writePpnInFile(ligneFichierDtoSupp.getPpn(), exemplaireASupprimerOpt.get(), typeDoc); } //supprimer l'exemplaire this.proxyRetry.deleteExemplaire(demandeSupp, ligneFichierDtoSupp); diff --git a/core/src/main/java/fr/abes/item/core/components/FichierSauvegardeSuppCsv.java b/core/src/main/java/fr/abes/item/core/components/FichierSauvegardeSuppCsv.java index 7210468e..9a92a4e0 100644 --- a/core/src/main/java/fr/abes/item/core/components/FichierSauvegardeSuppCsv.java +++ b/core/src/main/java/fr/abes/item/core/components/FichierSauvegardeSuppCsv.java @@ -32,7 +32,7 @@ public FichierSauvegardeSuppCsv(ReferenceService referenceService) { this.referenceService = referenceService; } - public void writePpnInFile(String ppn, Exemplaire exemplaire) throws StorageException { + public void writePpnInFile(String ppn, Exemplaire exemplaire, String typeDoc) throws StorageException { try (FileWriter fw = new FileWriter(this.getPath().resolve(this.getFilename()).toString(), true); BufferedWriter bw = new BufferedWriter(fw); PrintWriter out = new PrintWriter(bw)) { @@ -40,7 +40,7 @@ public void writePpnInFile(String ppn, Exemplaire exemplaire) throws StorageExce List listDeReference = referenceService.constructHeaderCsv(); listDeReference.remove(0); // ajout de la ligne - out.println(ppn + ";" + gererZones(listDeReference, exemplaire)); + out.println(typeDoc + ";" + ppn + ";" + gererZones(listDeReference, exemplaire)); } catch (IOException ex) { throw new StorageException("Impossible d'écrire dans le fichier de sauvegarde csv"); } diff --git a/core/src/main/java/fr/abes/item/core/service/ReferenceService.java b/core/src/main/java/fr/abes/item/core/service/ReferenceService.java index f449131a..67d87389 100644 --- a/core/src/main/java/fr/abes/item/core/service/ReferenceService.java +++ b/core/src/main/java/fr/abes/item/core/service/ReferenceService.java @@ -1,7 +1,10 @@ package fr.abes.item.core.service; import fr.abes.item.core.entities.item.*; -import fr.abes.item.core.repository.item.*; +import fr.abes.item.core.repository.item.IEtatDemandeDao; +import fr.abes.item.core.repository.item.ITraitementDao; +import fr.abes.item.core.repository.item.ITypeExempDao; +import fr.abes.item.core.repository.item.IZonesAutoriseesDao; import org.springframework.stereotype.Service; import java.util.ArrayList; @@ -67,7 +70,7 @@ public Integer findTraitementByDemandeId(Integer id) { public List constructHeaderCsv() { List listZonesAutorisees = this.iZonesAutoriseesDao.findAll(); List headerCsv = new ArrayList<>(); - headerCsv.add("PPN"); + headerCsv.add("TYPE (008);PPN"); for (ZonesAutorisees zonesAutorisees: listZonesAutorisees) { if(!zonesAutorisees.getLabelZone().startsWith("L")){ headerCsv.add(zonesAutorisees.getLabelZone()+zonesAutorisees.getSousZonesAutorisees().remove(0).getLibelle()); 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 e948b0ee..e0f24570 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 @@ -3,7 +3,7 @@ import fr.abes.cbs.exception.CBSException; import fr.abes.cbs.exception.ZoneException; import fr.abes.cbs.notices.Exemplaire; -import fr.abes.cbs.notices.Notice; +import fr.abes.cbs.notices.NoticeConcrete; import fr.abes.item.core.components.*; import fr.abes.item.core.configuration.factory.FichierFactory; import fr.abes.item.core.configuration.factory.Strategy; @@ -391,19 +391,15 @@ public String[] getNoticeExemplaireAvantApres(Demande demande, LigneFichier lign } } - public String getTypeDocumentFromPpn(String ppn) throws CBSException, IOException, QueryToSudocException { + public String getTypeDocumentFromPpn(String ppn) throws CBSException, IOException, QueryToSudocException, ZoneException { String query = "che ppn " + ppn; traitementService.getCbs().search(query); int nbReponses = traitementService.getCbs().getNbNotices(); return switch (nbReponses) { case 0 -> throw new QueryToSudocException(Constant.ERR_FILE_NOTICE_NOT_FOUND); case 1 -> { - //TODO reprendre ici et voir si on peut récupérer la 008 en récupérant la notice au format String - //TODO Parce que j'ai pas envie de parser en string pour aller chercher la 008n si une méthode existe deja dans accescbs - //Notice notice = traitementService.getCbs().getClientCBS() - //String notice = traitementService.getCbs().getClientCBS().mod("1", String.valueOf(traitementService.getCbs().getLotEncours())); - //log.debug(notice); - //yield notice; + NoticeConcrete notice = traitementService.getCbs().editerNoticeConcrete("1"); + yield notice.findZone("008", 0).getValeur().substring(0,2); } default -> throw new QueryToSudocException(Constant.ERR_FILE_MULTIPLES_NOTICES_FOUND + traitementService.getCbs().getListePpn()); };