Skip to content

Commit

Permalink
Ne prend pas en compte les lignes vides à la fin du fichier
Browse files Browse the repository at this point in the history
Issue: #197805

Change-Id: I9f115c85de296935150f3a4ecda12625cad2aa79
  • Loading branch information
Emilie Genton committed Dec 11, 2023
1 parent 0bff740 commit 21de30a
Show file tree
Hide file tree
Showing 2 changed files with 81 additions and 26 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package fr.sdis83.remocra.enums;

public enum TypeErreurImportCtp {
ERR_FICHIER_INNAC("ERR_FICHIER_INNAC"),
ERR_MAUVAIS_EXT("ERR_MAUVAIS_EXT"),
ERR_ONGLET_ABS("ERR_ONGLET_ABS"),
ERR_MAUVAIS_NUM_PEI("ERR_MAUVAIS_NUM_PEI"),
INFO_IGNORE("INFO_IGNORE"),
ERR_DEHORS_ZC("ERR_DEHORS_ZC"),
WARN_DEPLACEMENT("WARN_DEPLACEMENT"),
ERR_COORD_GPS("ERR_COORD_GPS"),
WARN_DATE_ANTE("WARN_DATE_ANTE"),
ERR_DATE_POST("ERR_DATE_POST"),
ERR_FORMAT_DATE("ERR_FORMAT_DATE"),
ERR_DATE_MANQ("ERR_DATE_MANQ"),
ERR_AGENT1_ABS("ERR_AGENT1_ABS"),
WARN_PRESS_VIDE("WARN_PRESS_VIDE"),
ERR_PRESS_ELEVEE("ERR_PRESS_ELEVEE"),
ERR_FORMAT_PRESS("ERR_FORMAT_PRESS"),
WARN_DEBIT_VIDE("WARN_DEBIT_VIDE"),
ERR_FORMAT_DEBIT("ERR_FORMAT_DEBIT"),
WARN_DEB_PRESS_VIDE("WARN_DEB_PRESS_VIDE"),
INFO_TRONC_DEBIT("INFO_TRONC_DEBIT"),
ERR_ANO_INCONNU("ERR_ANO_INCONNU"),
ERR_VISITES_MANQUANTES("ERR_VISITES_MANQUANTES"),
ERR_VISITE_EXISTANTE("ERR_VISITE_EXISTANTE");

private final String code;

TypeErreurImportCtp(String code) {
this.code = code;
}

public String getCode() {
return code;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import fr.sdis83.remocra.domain.remocra.Document;
import fr.sdis83.remocra.domain.remocra.Organisme;
import fr.sdis83.remocra.domain.remocra.TypeDroit;
import fr.sdis83.remocra.enums.TypeErreurImportCtp;
import fr.sdis83.remocra.exception.BusinessException;
import fr.sdis83.remocra.exception.ImportCTPException;
import fr.sdis83.remocra.security.AuthoritiesUtil;
Expand Down Expand Up @@ -431,7 +432,9 @@ public String importCTP(MultipartFile file) {
TypeHydrantImportctpErreur erreur =
context
.selectFrom(TYPE_HYDRANT_IMPORTCTP_ERREUR)
.where(TYPE_HYDRANT_IMPORTCTP_ERREUR.CODE.eq("ERR_FICHIER_INNAC"))
.where(
TYPE_HYDRANT_IMPORTCTP_ERREUR.CODE.eq(
TypeErreurImportCtp.ERR_FICHIER_INNAC.getCode()))
.fetchOneInto(TypeHydrantImportctpErreur.class);
erreurFichier.put("bilan", erreur.getMessage());
arrayResultatVerifications.add(erreurFichier);
Expand All @@ -444,14 +447,16 @@ public String importCTP(MultipartFile file) {
if (lecturePossible) {
sheet = workbook.getSheetAt(1);
if (sheet == null || !"Saisies_resultats_CT".equals(sheet.getSheetName())) {
throw new Exception("ERR_ONGLET_ABS");
throw new Exception(TypeErreurImportCtp.ERR_ONGLET_ABS.getCode());
}
}
} catch (Exception e) {
TypeHydrantImportctpErreur erreur =
context
.selectFrom(TYPE_HYDRANT_IMPORTCTP_ERREUR)
.where(TYPE_HYDRANT_IMPORTCTP_ERREUR.CODE.eq("ERR_ONGLET_ABS"))
.where(
TYPE_HYDRANT_IMPORTCTP_ERREUR.CODE.eq(
TypeErreurImportCtp.ERR_ONGLET_ABS.getCode()))
.fetchOneInto(TypeHydrantImportctpErreur.class);
erreurFichier.put("bilan", erreur.getMessage());
arrayResultatVerifications.add(erreurFichier);
Expand All @@ -460,16 +465,22 @@ public String importCTP(MultipartFile file) {

// Lecture des valeurs
if (lecturePossible) {
for (int nbLigne = 4; nbLigne < sheet.getPhysicalNumberOfRows(); nbLigne++) {
int nbLigne = 4;
boolean estFini = false;
while (nbLigne < sheet.getPhysicalNumberOfRows() && !estFini) {
ObjectNode resultatVerification = null;
try {
Row r = sheet.getRow(nbLigne);
if (r.getFirstCellNum()
== 0) { // Evite de traiter la ligne "fantôme" détectée par la librairie à cause des
if (r.getFirstCellNum() == 0
&& r.getCell(0)
!= null) { // Evite de traiter la ligne "fantôme" détectée par la librairie à
// cause des
// combo des anomalies
resultatVerification = this.checkLineValidity(r);
resultatVerification.put("numero_ligne", nbLigne + 1);
arrayResultatVerifications.add(resultatVerification);
} else {
estFini = true;
}
} catch (
ImportCTPException
Expand All @@ -487,6 +498,7 @@ public String importCTP(MultipartFile file) {
resultatVerification.remove("warnings");
arrayResultatVerifications.add(resultatVerification);
}
nbLigne++;
}
}
data.set("bilanVerifications", arrayResultatVerifications);
Expand Down Expand Up @@ -532,7 +544,7 @@ private ObjectNode checkLineValidity(Row row) throws ImportCTPException {
.fetchOneInto(Hydrant.class);

if (h == null || (h.getId() != xls_codeSdis.longValue())) {
throw new ImportCTPException("ERR_MAUVAIS_NUM_PEI", data);
throw new ImportCTPException(TypeErreurImportCtp.ERR_MAUVAIS_NUM_PEI.getCode(), data);
}

// On vérifie si le PEI est bien dans la zone de compétence de l'utilisateur
Expand All @@ -547,7 +559,7 @@ private ObjectNode checkLineValidity(Row row) throws ImportCTPException {
.fetchOneInto(Boolean.class);

if (dansZoneCompetence == null || !dansZoneCompetence) {
throw new ImportCTPException("ERR_DEHORS_ZC", data);
throw new ImportCTPException(TypeErreurImportCtp.ERR_DEHORS_ZC.getCode(), data);
}

// Si la visite CTP n'est pas renseignée (si tous les champs composant les informations de la
Expand All @@ -561,23 +573,23 @@ private ObjectNode checkLineValidity(Row row) throws ImportCTPException {
if (!ctpRenseigne) {
// On passe par un throw car à ce stade on a déjà toutes les infos que l'on souhaite afficher
// On n'a pas besoin de continuer les vérifications
throw new ImportCTPException("INFO_IGNORE", data);
throw new ImportCTPException(TypeErreurImportCtp.INFO_IGNORE.getCode(), data);
}

// Vérifications au niveau de la date
if (row.getCell(9) == null || row.getCell(9).getCellType() == CellType.BLANK) {
throw new ImportCTPException("ERR_DATE_MANQ", data);
throw new ImportCTPException(TypeErreurImportCtp.ERR_DATE_MANQ.getCode(), data);
}

Date xls_dateCtp = null;
try {
xls_dateCtp = row.getCell(9).getDateCellValue();
} catch (Exception e) {
throw new ImportCTPException("ERR_FORMAT_DATE", data);
throw new ImportCTPException(TypeErreurImportCtp.ERR_FORMAT_DATE.getCode(), data);
}

if (xls_dateCtp.after(new Date())) {
throw new ImportCTPException("ERR_DATE_POST", data);
throw new ImportCTPException(TypeErreurImportCtp.ERR_DATE_POST.getCode(), data);
}

Integer nbVisite =
Expand All @@ -599,7 +611,9 @@ private ObjectNode checkLineValidity(Row row) throws ImportCTPException {
context
.select(TYPE_HYDRANT_IMPORTCTP_ERREUR.MESSAGE)
.from(TYPE_HYDRANT_IMPORTCTP_ERREUR)
.where(TYPE_HYDRANT_IMPORTCTP_ERREUR.CODE.eq("WARN_DATE_ANTE"))
.where(
TYPE_HYDRANT_IMPORTCTP_ERREUR.CODE.eq(
TypeErreurImportCtp.WARN_DATE_ANTE.getCode()))
.fetchOneInto(String.class);
arrayWarnings.add(str);
}
Expand All @@ -613,7 +627,7 @@ private ObjectNode checkLineValidity(Row row) throws ImportCTPException {
.where(HYDRANT_VISITE.HYDRANT.eq(h.getId()))
.fetchOneInto(Integer.class);
if (nbVisite < 2) {
throw new ImportCTPException("ERR_VISITES_MANQUANTES", data);
throw new ImportCTPException(TypeErreurImportCtp.ERR_VISITES_MANQUANTES.getCode(), data);
}

// On vérifie si il n'y pas de visite à la même date et heure
Expand All @@ -633,14 +647,14 @@ private ObjectNode checkLineValidity(Row row) throws ImportCTPException {
.fetchOneInto(Integer.class);

if (nbVisite > 0) {
throw new ImportCTPException("ERR_VISITE_EXISTANTE", data);
throw new ImportCTPException(TypeErreurImportCtp.ERR_VISITE_EXISTANTE.getCode(), data);
}

data.put("dateCtp", formatter.format(xls_dateCtp));

String xls_agent1 = null;
if (row.getCell(10) == null || row.getCell(10).getCellType() == CellType.BLANK) {
throw new ImportCTPException("ERR_AGENT1_ABS", data);
throw new ImportCTPException(TypeErreurImportCtp.ERR_AGENT1_ABS.getCode(), data);
} else {
xls_agent1 = row.getCell(10).getStringCellValue();
}
Expand All @@ -656,7 +670,9 @@ private ObjectNode checkLineValidity(Row row) throws ImportCTPException {
TypeHydrantImportctpErreur info =
context
.selectFrom(TYPE_HYDRANT_IMPORTCTP_ERREUR)
.where(TYPE_HYDRANT_IMPORTCTP_ERREUR.CODE.eq("INFO_TRONC_DEBIT"))
.where(
TYPE_HYDRANT_IMPORTCTP_ERREUR.CODE.eq(
TypeErreurImportCtp.INFO_TRONC_DEBIT.getCode()))
.fetchOneInto(TypeHydrantImportctpErreur.class);
data.put("bilan", info.getMessage());
data.put("bilan_style", info.getType());
Expand All @@ -666,7 +682,7 @@ private ObjectNode checkLineValidity(Row row) throws ImportCTPException {
}
}
} catch (Exception e) {
throw new ImportCTPException("ERR_FORMAT_DEBIT", data);
throw new ImportCTPException(TypeErreurImportCtp.ERR_FORMAT_DEBIT.getCode(), data);
}

Double xls_pression = null;
Expand All @@ -680,20 +696,20 @@ private ObjectNode checkLineValidity(Row row) throws ImportCTPException {
}
}
} catch (Exception e) {
throw new ImportCTPException("ERR_FORMAT_PRESS", data);
throw new ImportCTPException(TypeErreurImportCtp.ERR_FORMAT_PRESS.getCode(), data);
}

if (xls_pression != null && xls_pression > 20.0) {
throw new ImportCTPException("ERR_PRESS_ELEVEE", data);
throw new ImportCTPException(TypeErreurImportCtp.ERR_PRESS_ELEVEE.getCode(), data);
}

String warningDebitPression = null;
if (xls_pression == null && xls_debit == null) {
warningDebitPression = "WARN_DEB_PRESS_VIDE";
warningDebitPression = TypeErreurImportCtp.WARN_DEB_PRESS_VIDE.getCode();
} else if (xls_pression == null) {
warningDebitPression = "WARN_PRESS_VIDE";
warningDebitPression = TypeErreurImportCtp.WARN_PRESS_VIDE.getCode();
} else if (xls_debit == null) {
warningDebitPression = "WARN_DEBIT_VIDE";
warningDebitPression = TypeErreurImportCtp.WARN_DEBIT_VIDE.getCode();
}

if (warningDebitPression != null) {
Expand All @@ -715,7 +731,7 @@ private ObjectNode checkLineValidity(Row row) throws ImportCTPException {
latitude = this.getNumericValueFromCell(row.getCell(5));
longitude = this.getNumericValueFromCell(row.getCell(6));
} catch (Exception e) {
throw new ImportCTPException("ERR_COORD_GPS", data);
throw new ImportCTPException(TypeErreurImportCtp.ERR_COORD_GPS.getCode(), data);
}

Integer distance =
Expand All @@ -732,7 +748,9 @@ private ObjectNode checkLineValidity(Row row) throws ImportCTPException {
context
.select(TYPE_HYDRANT_IMPORTCTP_ERREUR.MESSAGE)
.from(TYPE_HYDRANT_IMPORTCTP_ERREUR)
.where(TYPE_HYDRANT_IMPORTCTP_ERREUR.CODE.eq("WARN_DEPLACEMENT"))
.where(
TYPE_HYDRANT_IMPORTCTP_ERREUR.CODE.eq(
TypeErreurImportCtp.WARN_DEPLACEMENT.getCode()))
.fetchOneInto(String.class);
arrayWarnings.add(str);
}
Expand All @@ -755,7 +773,7 @@ private ObjectNode checkLineValidity(Row row) throws ImportCTPException {
.where(TYPE_HYDRANT_ANOMALIE.CODE.upper().eq(code.toUpperCase()))
.fetchOneInto(TypeHydrantAnomalie.class);
if (anomalie == null) {
throw new ImportCTPException("ERR_ANO_INCONNU", data);
throw new ImportCTPException(TypeErreurImportCtp.ERR_ANO_INCONNU.getCode(), data);
}
id_anomalies.add(anomalie.getId());
}
Expand Down

0 comments on commit 21de30a

Please sign in to comment.