Skip to content

Commit

Permalink
[SDIS 58] Ajout de la numérotation du SDIS 58
Browse files Browse the repository at this point in the history
Issue : #225967

Change-Id: I8dfb1eaad946fdc7d4bfcb64988da55d3bcb78c9
  • Loading branch information
Clément GRENOT committed Nov 6, 2024
1 parent 5f7a3a1 commit 6e0895e
Show file tree
Hide file tree
Showing 3 changed files with 176 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ public enum MethodeNumerotation {
M_42,
M_49,
M_53,
M_58,
M_61,
M_66,
M_77,
Expand Down Expand Up @@ -74,6 +75,7 @@ public enum MethodeNumerotationInterne {
M_42,
M_49,
M_53,
M_58,
M_61,
M_77,
M_78,
Expand Down Expand Up @@ -133,6 +135,8 @@ public static String computeNumero(Hydrant hydrant) {
return NumeroUtilRepository.computeNumero49(hydrant);
case M_53:
return NumeroUtilRepository.computeNumero53(hydrant);
case M_58:
return NumeroUtilRepository.computeNumero58(hydrant);
case M_66:
return NumeroUtilRepository.computeNumero66(hydrant);
case M_77:
Expand Down Expand Up @@ -385,6 +389,24 @@ protected static String computeNumero53(Hydrant hydrant) {
return sb.toString();
}

/**
* <code insee commune> <numéro interne>
* numéro interne sur 3 chiffres:
* - 0 à 599 : PIBI
* - 600 à 799 : PUISARDS
* - 800 à 999 : PENA
* Exemple : 58267 805 - PEA sur commune de SAINT-SAULGE
*
* @param hydrant
* @return
*/
protected static String computeNumero58(Hydrant hydrant) {
StringBuilder sb = new StringBuilder();
sb.append(getHydrantCommune(hydrant).getInsee());
sb.append(" ");
return sb.append(String.format("%03d", hydrant.getNumeroInterne())).toString();
}

/**
* <code insee commune>_<numéro interne>(<P>)
* Avec P à la fin pour PEI privé
Expand Down Expand Up @@ -654,6 +676,8 @@ public static Integer computeNumeroInterne(Hydrant hydrant) {
return NumeroUtilRepository.computeNumeroInterne49(hydrant);
case M_53:
return NumeroUtilRepository.computeNumeroInterne53(hydrant);
case M_58:
return NumeroUtilRepository.computeNumeroInterne58(hydrant);
case M_77:
return NumeroUtilRepository.computeNumeroInterne77(hydrant);
case M_86:
Expand Down Expand Up @@ -915,6 +939,56 @@ private static Integer computeNumeroInterne53Private(Hydrant hydrant, boolean ig
return numInterne;
}

/**
* numéro interne en fonction de la commune et de la nature PIBI, PUISARD ou PENA
*
* @param hydrant
* @return
*/
public static Integer computeNumeroInterne58(Hydrant hydrant) {
if (hydrant.getNumeroInterne() != null && hydrant.getId() != null) {
return hydrant.getNumeroInterne();
}

Integer numInterne = null;
try {
Integer startRange = null;
Integer stopRange = null;
if (hydrant.getCode().equals("PIBI")) {
startRange = 1;
stopRange = 599;
} else {
String nature =
context
.select(TYPE_HYDRANT_NATURE.CODE)
.from(TYPE_HYDRANT_NATURE)
.where(TYPE_HYDRANT_NATURE.ID.eq(hydrant.getNature()))
.fetchOneInto(String.class);
if (nature.equals("PU")) {
startRange = 600;
stopRange = 799;
} else {
startRange = 800;
stopRange = 999;
}
}

numInterne =
context
.resultQuery(
"select remocra.nextNumeroInterne(null, {0}, {1}, {2}, {3}, {4})",
DSL.val(hydrant.getCode(), SQLDataType.VARCHAR),
DSL.val(hydrant.getNature(), SQLDataType.BIGINT),
DSL.val(hydrant.getCommune(), SQLDataType.BIGINT),
startRange,
stopRange)
.fetchOneInto(Integer.class);
} catch (Exception e) {
numInterne = 99999;
}
return numInterne;
}

/**
* numéro interne en fonction de la commune ou zone spéciale
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ public enum MethodeNumerotation {
M_42,
M_49,
M_53,
M_58,
M_61,
M_66,
M_77,
Expand Down Expand Up @@ -75,6 +76,7 @@ public enum MethodeNumerotationInterne {
M_42,
M_49,
M_53,
M_58,
M_61,
M_77,
M_78,
Expand Down Expand Up @@ -134,6 +136,8 @@ public static String computeNumero(Hydrant hydrant) {
return NumeroUtilRepository.computeNumero49(hydrant);
case M_53:
return NumeroUtilRepository.computeNumero53(hydrant);
case M_58:
return NumeroUtilRepository.computeNumero58(hydrant);
case M_66:
return NumeroUtilRepository.computeNumero66(hydrant);
case M_77:
Expand Down Expand Up @@ -386,6 +390,24 @@ protected static String computeNumero53(Hydrant hydrant) {
return sb.toString();
}

/**
* <code insee commune> <numéro interne>
* numéro interne sur 3 chiffres:
* - 0 à 599 : PIBI
* - 600 à 799 : PUISARDS
* - 800 à 999 : PENA
* Exemple : 58267 805 - PEA sur commune de SAINT-SAULGE
*
* @param hydrant
* @return
*/
protected static String computeNumero58(Hydrant hydrant) {
StringBuilder sb = new StringBuilder();
sb.append(getHydrantCommune(hydrant).getInsee());
sb.append(" ");
return sb.append(String.format("%03d", hydrant.getNumeroInterne())).toString();
}

/**
* <code insee commune>_<numéro interne>(<P>)
* Avec P à la fin pour PEI privé
Expand Down Expand Up @@ -654,6 +676,8 @@ public static Integer computeNumeroInterne(Hydrant hydrant) {
return NumeroUtilRepository.computeNumeroInterne49(hydrant);
case M_53:
return NumeroUtilRepository.computeNumeroInterne53(hydrant);
case M_58:
return NumeroUtilRepository.computeNumeroInterne58(hydrant);
case M_77:
return NumeroUtilRepository.computeNumeroInterne77(hydrant);
case M_86:
Expand Down Expand Up @@ -915,6 +939,56 @@ private static Integer computeNumeroInterne53Private(Hydrant hydrant, boolean ig
return numInterne;
}

/**
* numéro interne en fonction de la commune et de la nature PIBI, PUISARD ou PENA
*
* @param hydrant
* @return
*/
public static Integer computeNumeroInterne58(Hydrant hydrant) {
if (hydrant.getNumeroInterne() != null && hydrant.getId() != null) {
return hydrant.getNumeroInterne();
}

Integer numInterne = null;
try {
Integer startRange = null;
Integer stopRange = null;
if (hydrant.getCode().equals("PIBI")) {
startRange = 1;
stopRange = 599;
} else {
String nature =
context
.select(TYPE_HYDRANT_NATURE.CODE)
.from(TYPE_HYDRANT_NATURE)
.where(TYPE_HYDRANT_NATURE.ID.eq(hydrant.getNature()))
.fetchOneInto(String.class);
if (nature.equals("PU")) {
startRange = 600;
stopRange = 799;
} else {
startRange = 800;
stopRange = 999;
}
}

numInterne =
context
.resultQuery(
"select remocra.nextNumeroInterne(null, {0}, {1}, {2}, {3}, {4})",
DSL.val(hydrant.getCode(), SQLDataType.VARCHAR),
DSL.val(hydrant.getNature(), SQLDataType.BIGINT),
DSL.val(hydrant.getCommune(), SQLDataType.BIGINT),
startRange,
stopRange)
.fetchOneInto(Integer.class);
} catch (Exception e) {
numInterne = 99999;
}
return numInterne;
}

/**
* numéro interne en fonction de la commune ou zone spéciale
*
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
CREATE OR REPLACE FUNCTION remocra.nextnumerointerne(idhydrant bigint, codehydrant character varying, naturehydrant bigint, idcommune bigint, startserie bigint, stopserie bigint)
RETURNS bigint
LANGUAGE plpgsql
AS $function$
DECLARE returned bigint;
BEGIN
SELECT n INTO returned
FROM generate_series(COALESCE(startserie, 1), COALESCE(stopserie, 99999)) gs(n)
except
SELECT numero_interne
FROM remocra.hydrant h
WHERE
(case when idhydrant is not null then h.id != idhydrant else true end)
and (case
when codehydrant = 'PIBI' then h.code = codehydrant
when codehydrant = 'PENA' then
CASE WHEN naturehydrant = (select id from remocra.type_hydrant_nature where code = 'PU') THEN h.nature = naturehydrant
ELSE h.nature <> naturehydrant END
ELSE TRUE END)
and (case when idcommune is not null then h.commune = idcommune else true end)
order BY 1
limit 1;

return returned;
end;

$function$
;

0 comments on commit 6e0895e

Please sign in to comment.