From 09148cbcb65e76d111e76bc28828faa48e8feb77 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bitard=20Micha=C3=ABl?= <bitard.michael@gmail.com>
Date: Tue, 1 Apr 2025 11:24:05 +0200
Subject: [PATCH 1/3] fix check prolongations

---
 .../api/src/business/check-prolongations.ts   | 68 ++++++++++++++-----
 1 file changed, 52 insertions(+), 16 deletions(-)

diff --git a/packages/api/src/business/check-prolongations.ts b/packages/api/src/business/check-prolongations.ts
index 4d70651e9..2aa33a0f9 100644
--- a/packages/api/src/business/check-prolongations.ts
+++ b/packages/api/src/business/check-prolongations.ts
@@ -207,6 +207,7 @@ const fixProlongation = (pool: Pool, checkedProlongation: CheckedProlongation):
             substances: getMostRecentValuePropFromEtapeFondamentaleValide('substances', demarches),
             titulaireIds: getMostRecentValuePropFromEtapeFondamentaleValide('titulaireIds', demarches),
             perimetre: getMostRecentValuePropFromEtapeFondamentaleValide('perimetre', demarches),
+            duree: getMostRecentValuePropFromEtapeFondamentaleValide('duree', [...demarches.filter(demarche => demarche.id === checkedProlongation.demarche_id)])
           }
         })
       )
@@ -214,27 +215,61 @@ const fixProlongation = (pool: Pool, checkedProlongation: CheckedProlongation):
     Effect.flatMap(({ titre, etape, propsHeritees }) =>
       Effect.tryPromise({
         try: () => {
-          console.info(`Trying to fix http://localhost:4180/etapes/${etape.id}`)
+          const changes = []
+          let duree = 'fondamentale' in etape ? etape.fondamentale.duree : null
+          if ((isNullOrUndefined(duree) || duree === 0) && (isNotNullNorUndefined(propsHeritees.duree) && propsHeritees.duree !== 0)) {
+            duree = propsHeritees.duree
+            changes.push('duree')
+          }
+
+          let substances = 'fondamentale' in etape ? etape.fondamentale.substances ?? [] : []
+          if (isNullOrUndefinedOrEmpty(substances) && isNotNullNorUndefinedNorEmpty(propsHeritees.substances) ) {
+            substances = propsHeritees.substances
+            changes.push('substances')
+          }
+
+          let titulaireIds = 'fondamentale' in etape ? etape.fondamentale.titulaireIds ?? [] : []
+          if (isNullOrUndefinedOrEmpty(titulaireIds) && isNotNullNorUndefinedNorEmpty(propsHeritees.titulaireIds) ) {
+            titulaireIds = propsHeritees.titulaireIds
+            changes.push('titulaireIds')
+          }
+          let perimetre = 'fondamentale' in etape ? {
+            surface: etape.fondamentale.perimetre?.surface,
+            geojson4326Perimetre:etape.fondamentale.perimetre?.geojson4326_perimetre,
+            geojsonOriginePerimetre: etape.fondamentale.perimetre?.geojson_origine_perimetre,
+            geojsonOrigineGeoSystemeId: etape.fondamentale.perimetre?.geojson_origine_geo_systeme_id,
+            geojson4326Points: etape.fondamentale.perimetre?.geojson4326_points,
+            geojsonOriginePoints: etape.fondamentale.perimetre?.geojson_origine_points,
+            geojson4326Forages: etape.fondamentale.perimetre?.geojson4326_forages,
+            geojsonOrigineForages: etape.fondamentale.perimetre?.geojson_origine_forages,
+          } : null
+          if (isNullOrUndefined(perimetre?.geojsonOriginePerimetre) && isNotNullNorUndefined(propsHeritees.perimetre?.geojson_origine_perimetre) ) {
+            perimetre = {
+              surface: propsHeritees.perimetre.surface,
+              geojson4326Perimetre:propsHeritees.perimetre.geojson4326_perimetre,
+              geojsonOriginePerimetre: propsHeritees.perimetre.geojson_origine_perimetre,
+              geojsonOrigineGeoSystemeId: propsHeritees.perimetre.geojson_origine_geo_systeme_id,
+              geojson4326Points: propsHeritees.perimetre.geojson4326_points,
+              geojsonOriginePoints: propsHeritees.perimetre.geojson_origine_points,
+              geojson4326Forages: propsHeritees.perimetre.geojson4326_forages,
+              geojsonOrigineForages: propsHeritees.perimetre.geojson_origine_forages,
+            }
+            changes.push('perimetre')
+          }
+
+          if (isNotNullNorUndefinedNorEmpty(changes)) {
+            console.info(`Trying to fix http://localhost:4180/etapes/${etape.slug} -> ${changes.join(',')}`)
+          }
+
           return titreEtapeUpsert(
             {
               id: etape.id,
               titreDemarcheId: checkedProlongation.demarche_id,
               date: etape.date,
-              substances: 'fondamentale' in etape && isNotNullNorUndefinedNorEmpty(etape.fondamentale.substances) ? etape.fondamentale.substances : propsHeritees.substances,
-              titulaireIds: 'fondamentale' in etape && isNotNullNorUndefinedNorEmpty(etape.fondamentale.titulaireIds) ? etape.fondamentale.titulaireIds : propsHeritees.titulaireIds,
-              surface: 'fondamentale' in etape && isNotNullNorUndefined(etape.fondamentale.perimetre?.surface) ? etape.fondamentale.perimetre.surface : propsHeritees.perimetre?.surface,
-              geojson4326Perimetre:
-                'fondamentale' in etape && isNotNullNorUndefined(etape.fondamentale.perimetre?.geojson4326_perimetre)
-                  ? etape.fondamentale.perimetre.geojson4326_perimetre
-                  : propsHeritees.perimetre?.geojson4326_perimetre,
-              geojsonOriginePerimetre:
-                'fondamentale' in etape && isNotNullNorUndefined(etape.fondamentale.perimetre?.geojson_origine_perimetre)
-                  ? etape.fondamentale.perimetre.geojson_origine_perimetre
-                  : propsHeritees.perimetre?.geojson_origine_perimetre,
-              geojsonOrigineGeoSystemeId:
-                'fondamentale' in etape && isNotNullNorUndefined(etape.fondamentale.perimetre?.geojson_origine_geo_systeme_id)
-                  ? etape.fondamentale.perimetre.geojson_origine_geo_systeme_id
-                  : propsHeritees.perimetre?.geojson_origine_geo_systeme_id,
+              duree,
+              substances,
+              titulaireIds,
+              ...perimetre,
             },
             userSuper,
             titre.id
@@ -258,6 +293,7 @@ const toPercentage = (percentage: number): string => {
 export const checkProlongations = (pool: Pool): Effect.Effect<CheckedProlongation[], CaminoError<CheckOnePrologationErrors | FixProlongationErrors>> => {
   return pipe(
     getDemarches(pool),
+    // Effect.map(demarches => demarches.filter(demarche => demarche.id ==='QKSsuiWOMTf9WfMNGVoTLEVm')),
     Effect.flatMap(demarches => {
       const initialAcc: CheckedProlongation[] = []
       return Effect.reduce(
-- 
GitLab


From dbeb74db6b48e805d819e591daf730bc8600b178 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bitard=20Micha=C3=ABl?= <bitard.michael@gmail.com>
Date: Tue, 1 Apr 2025 14:23:43 +0200
Subject: [PATCH 2/3] lint

---
 .../api/src/business/check-prolongations.ts   | 39 ++++++++++---------
 1 file changed, 21 insertions(+), 18 deletions(-)

diff --git a/packages/api/src/business/check-prolongations.ts b/packages/api/src/business/check-prolongations.ts
index 2aa33a0f9..414be280a 100644
--- a/packages/api/src/business/check-prolongations.ts
+++ b/packages/api/src/business/check-prolongations.ts
@@ -207,7 +207,7 @@ const fixProlongation = (pool: Pool, checkedProlongation: CheckedProlongation):
             substances: getMostRecentValuePropFromEtapeFondamentaleValide('substances', demarches),
             titulaireIds: getMostRecentValuePropFromEtapeFondamentaleValide('titulaireIds', demarches),
             perimetre: getMostRecentValuePropFromEtapeFondamentaleValide('perimetre', demarches),
-            duree: getMostRecentValuePropFromEtapeFondamentaleValide('duree', [...demarches.filter(demarche => demarche.id === checkedProlongation.demarche_id)])
+            duree: getMostRecentValuePropFromEtapeFondamentaleValide('duree', [...demarches.filter(demarche => demarche.id === checkedProlongation.demarche_id)]),
           }
         })
       )
@@ -217,36 +217,39 @@ const fixProlongation = (pool: Pool, checkedProlongation: CheckedProlongation):
         try: () => {
           const changes = []
           let duree = 'fondamentale' in etape ? etape.fondamentale.duree : null
-          if ((isNullOrUndefined(duree) || duree === 0) && (isNotNullNorUndefined(propsHeritees.duree) && propsHeritees.duree !== 0)) {
+          if ((isNullOrUndefined(duree) || duree === 0) && isNotNullNorUndefined(propsHeritees.duree) && propsHeritees.duree !== 0) {
             duree = propsHeritees.duree
             changes.push('duree')
           }
 
-          let substances = 'fondamentale' in etape ? etape.fondamentale.substances ?? [] : []
-          if (isNullOrUndefinedOrEmpty(substances) && isNotNullNorUndefinedNorEmpty(propsHeritees.substances) ) {
+          let substances = 'fondamentale' in etape ? (etape.fondamentale.substances ?? []) : []
+          if (isNullOrUndefinedOrEmpty(substances) && isNotNullNorUndefinedNorEmpty(propsHeritees.substances)) {
             substances = propsHeritees.substances
             changes.push('substances')
           }
 
-          let titulaireIds = 'fondamentale' in etape ? etape.fondamentale.titulaireIds ?? [] : []
-          if (isNullOrUndefinedOrEmpty(titulaireIds) && isNotNullNorUndefinedNorEmpty(propsHeritees.titulaireIds) ) {
+          let titulaireIds = 'fondamentale' in etape ? (etape.fondamentale.titulaireIds ?? []) : []
+          if (isNullOrUndefinedOrEmpty(titulaireIds) && isNotNullNorUndefinedNorEmpty(propsHeritees.titulaireIds)) {
             titulaireIds = propsHeritees.titulaireIds
             changes.push('titulaireIds')
           }
-          let perimetre = 'fondamentale' in etape ? {
-            surface: etape.fondamentale.perimetre?.surface,
-            geojson4326Perimetre:etape.fondamentale.perimetre?.geojson4326_perimetre,
-            geojsonOriginePerimetre: etape.fondamentale.perimetre?.geojson_origine_perimetre,
-            geojsonOrigineGeoSystemeId: etape.fondamentale.perimetre?.geojson_origine_geo_systeme_id,
-            geojson4326Points: etape.fondamentale.perimetre?.geojson4326_points,
-            geojsonOriginePoints: etape.fondamentale.perimetre?.geojson_origine_points,
-            geojson4326Forages: etape.fondamentale.perimetre?.geojson4326_forages,
-            geojsonOrigineForages: etape.fondamentale.perimetre?.geojson_origine_forages,
-          } : null
-          if (isNullOrUndefined(perimetre?.geojsonOriginePerimetre) && isNotNullNorUndefined(propsHeritees.perimetre?.geojson_origine_perimetre) ) {
+          let perimetre =
+            'fondamentale' in etape
+              ? {
+                  surface: etape.fondamentale.perimetre?.surface,
+                  geojson4326Perimetre: etape.fondamentale.perimetre?.geojson4326_perimetre,
+                  geojsonOriginePerimetre: etape.fondamentale.perimetre?.geojson_origine_perimetre,
+                  geojsonOrigineGeoSystemeId: etape.fondamentale.perimetre?.geojson_origine_geo_systeme_id,
+                  geojson4326Points: etape.fondamentale.perimetre?.geojson4326_points,
+                  geojsonOriginePoints: etape.fondamentale.perimetre?.geojson_origine_points,
+                  geojson4326Forages: etape.fondamentale.perimetre?.geojson4326_forages,
+                  geojsonOrigineForages: etape.fondamentale.perimetre?.geojson_origine_forages,
+                }
+              : null
+          if (isNullOrUndefined(perimetre?.geojsonOriginePerimetre) && isNotNullNorUndefined(propsHeritees.perimetre?.geojson_origine_perimetre)) {
             perimetre = {
               surface: propsHeritees.perimetre.surface,
-              geojson4326Perimetre:propsHeritees.perimetre.geojson4326_perimetre,
+              geojson4326Perimetre: propsHeritees.perimetre.geojson4326_perimetre,
               geojsonOriginePerimetre: propsHeritees.perimetre.geojson_origine_perimetre,
               geojsonOrigineGeoSystemeId: propsHeritees.perimetre.geojson_origine_geo_systeme_id,
               geojson4326Points: propsHeritees.perimetre.geojson4326_points,
-- 
GitLab


From 293f5dae895450b4d7e19d02076f1ac7fff4afe5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bitard=20Micha=C3=ABl?= <bitard.michael@gmail.com>
Date: Tue, 1 Apr 2025 14:25:38 +0200
Subject: [PATCH 3/3] lint

---
 packages/api/src/business/check-prolongations.ts | 8 --------
 1 file changed, 8 deletions(-)

diff --git a/packages/api/src/business/check-prolongations.ts b/packages/api/src/business/check-prolongations.ts
index 414be280a..370e61b2d 100644
--- a/packages/api/src/business/check-prolongations.ts
+++ b/packages/api/src/business/check-prolongations.ts
@@ -296,7 +296,6 @@ const toPercentage = (percentage: number): string => {
 export const checkProlongations = (pool: Pool): Effect.Effect<CheckedProlongation[], CaminoError<CheckOnePrologationErrors | FixProlongationErrors>> => {
   return pipe(
     getDemarches(pool),
-    // Effect.map(demarches => demarches.filter(demarche => demarche.id ==='QKSsuiWOMTf9WfMNGVoTLEVm')),
     Effect.flatMap(demarches => {
       const initialAcc: CheckedProlongation[] = []
       return Effect.reduce(
@@ -313,13 +312,6 @@ export const checkProlongations = (pool: Pool): Effect.Effect<CheckedProlongatio
               return fixProlongation(pool, checkedProlongation)
             }),
             Effect.map(checkedProlongation => {
-              // if (isNotNullNorUndefinedNorEmpty(checkedProlongation.errors) && !checkedProlongation.errors.includes(demarchePasProlongationError)) {
-              //   const link = isNotNullNorUndefined(checkedProlongation.titre_slug)
-              //     ? `http://localhost:4180/titres/${checkedProlongation.titre_slug}`
-              //     : `http://localhost:4180/demarches/${checkedProlongation.demarche_id}`
-              //   console.info(`${link} : ${checkedProlongation.errors.join(' | ')}`)
-              // }
-
               return [...acc, checkedProlongation]
             })
           )
-- 
GitLab