diff --git a/packages/api/src/business/_logs-update.ts b/packages/api/src/business/_logs-update.ts index 331993e296849d4a6be6e6f589d3b0b029a13b6c..bf49ca6296d65707cc8dfc964ac63406862c1f0c 100644 --- a/packages/api/src/business/_logs-update.ts +++ b/packages/api/src/business/_logs-update.ts @@ -2,6 +2,7 @@ import { isNotNullNorUndefined, isNotNullNorUndefinedNorEmpty } from 'camino-com import { Index, IEntrepriseEtablissement, IEntreprise } from '../types' export const dailySummaryMarker = 'tâches exécutées:' as const export const logsUpdate = ({ + heritageWithUnknownEtapes, etapesCompletesErreurs, tdeErreurs, demarcheDefinitionsErreurs, @@ -29,6 +30,7 @@ export const logsUpdate = ({ etablissementsUpdated, etablissementsDeleted, }: { + heritageWithUnknownEtapes?: unknown[] etapesCompletesErreurs?: { surTitreValide: string[]; autre: string[]; etapesRecentes: string[] } tdeErreurs?: number demarcheDefinitionsErreurs?: number @@ -72,6 +74,9 @@ export const logsUpdate = ({ } } + if (isNotNullNorUndefinedNorEmpty(heritageWithUnknownEtapes)) { + console.error(`${heritageWithUnknownEtapes.length} heritage de contenu qui pointe sur des étapes non existantes`) + } if (isNotNullNorUndefined(tdeErreurs) && tdeErreurs > 0) { console.warn(`${tdeErreurs} erreurs TDE`) } diff --git a/packages/api/src/business/daily.ts b/packages/api/src/business/daily.ts index de4fc7d1172a5d1b66af87bd79cc31c622e0e95e..6ca341289051c905fc375c0b1192ca1e14dc8110 100644 --- a/packages/api/src/business/daily.ts +++ b/packages/api/src/business/daily.ts @@ -10,7 +10,7 @@ import { titresPublicUpdate } from './processes/titres-public-update' import { titresPropsEtapesIdsUpdate } from './processes/titres-props-etapes-ids-update' import { titresStatutIdsUpdate } from './processes/titres-statut-ids-update' import { titresEtapesHeritagePropsUpdate } from './processes/titres-etapes-heritage-props-update' -import { titresEtapesHeritageContenuUpdate } from './processes/titres-etapes-heritage-contenu-update' +import { checkEtapeInContenuHeritage, titresEtapesHeritageContenuUpdate } from './processes/titres-etapes-heritage-contenu-update' import { titresActivitesPropsUpdate } from './processes/titres-activites-props-update' import { titresSlugsUpdate } from './processes/titres-slugs-update' import { logsUpdate } from './_logs-update' @@ -40,6 +40,7 @@ export const daily = async (pool: Pool): Promise<void> => { const fondamentaleIdUpdated = await callAndExit(etapesFondamentaleIdUpdateForAll(pool)) const titresEtapesHeritagePropsUpdated = await titresEtapesHeritagePropsUpdate(userSuper) const titresEtapesHeritageContenuUpdated = await titresEtapesHeritageContenuUpdate(pool, userSuper) + const heritageWithUnknownEtapes = await callAndExit(checkEtapeInContenuHeritage(pool)) const titresDemarchesStatutUpdated = await titresDemarchesStatutIdUpdate(pool) const titresDemarchesOrdreUpdated = await titresDemarchesOrdreUpdate() @@ -62,6 +63,7 @@ export const daily = async (pool: Pool): Promise<void> => { const etapesCompletesErreurs = await etapesCompletesCheck(pool) logsUpdate({ + heritageWithUnknownEtapes, etapesCompletesErreurs: etapesCompletesErreurs, tdeErreurs, demarcheDefinitionsErreurs, diff --git a/packages/api/src/business/processes/titres-demarches-statut-ids-update.test.ts b/packages/api/src/business/processes/titres-demarches-statut-ids-update.test.ts index b90b58b96d0e5b6580bde6bab92fd796a1f10421..824b7a49b2e9eafc295e12d7c2e9f876b2149495 100644 --- a/packages/api/src/business/processes/titres-demarches-statut-ids-update.test.ts +++ b/packages/api/src/business/processes/titres-demarches-statut-ids-update.test.ts @@ -5,6 +5,7 @@ import { newDemarcheId, newEtapeId, newTitreId } from '../../database/models/_fo import { toCaminoDate } from 'camino-common/src/date' import { Pool } from 'pg' import { ETAPE_IS_NOT_BROUILLON } from 'camino-common/src/etape' +import { Effect } from 'effect' vi.mock('./titres-etapes-heritage-contenu-update.queries', () => ({ getDemarches: vi.fn().mockResolvedValue(true), @@ -20,110 +21,116 @@ console.info = vi.fn() describe("statut des démarches d'un titre", () => { test("met à jour le statut d'une démarche", async () => { - getDemarchesMock.mockResolvedValue({ - [newDemarcheId('')]: { - id: newDemarcheId('h-cx-courdemanges-1988-oct01'), - titreId: newTitreId('h-cx-courdemanges-1988'), - titreTypeId: 'cxh', - typeId: 'oct', - statutId: 'rej', - etapes: [ - { - id: newEtapeId('h-cx-courdemanges-1988-oct01-dpu01'), - typeId: 'dpu', - statutId: 'acc', - concurrence: 'non-applicable', - hasTitreFrom: 'non-applicable', - isBrouillon: ETAPE_IS_NOT_BROUILLON, - ordre: 2, - date: toCaminoDate('1988-03-11'), - communes: [], - contenu: {}, - heritageContenu: {}, - surface: null, - demarcheIdsConsentement: [], - }, - { - id: newEtapeId('h-cx-courdemanges-1988-oct01-dex01'), - typeId: 'dex', - statutId: 'acc', - concurrence: 'non-applicable', - hasTitreFrom: 'non-applicable', - isBrouillon: ETAPE_IS_NOT_BROUILLON, - ordre: 1, - date: toCaminoDate('1988-03-06'), - communes: [], - contenu: {}, - heritageContenu: {}, - surface: null, - demarcheIdsConsentement: [], - }, - ], - }, - }) + getDemarchesMock.mockReturnValue( + Effect.succeed({ + [newDemarcheId('')]: { + id: newDemarcheId('h-cx-courdemanges-1988-oct01'), + titreId: newTitreId('h-cx-courdemanges-1988'), + titreTypeId: 'cxh', + typeId: 'oct', + statutId: 'rej', + etapes: [ + { + id: newEtapeId('h-cx-courdemanges-1988-oct01-dpu01'), + typeId: 'dpu', + statutId: 'acc', + concurrence: 'non-applicable', + hasTitreFrom: 'non-applicable', + isBrouillon: ETAPE_IS_NOT_BROUILLON, + ordre: 2, + date: toCaminoDate('1988-03-11'), + communes: [], + contenu: {}, + heritageContenu: {}, + surface: null, + demarcheIdsConsentement: [], + }, + { + id: newEtapeId('h-cx-courdemanges-1988-oct01-dex01'), + typeId: 'dex', + statutId: 'acc', + concurrence: 'non-applicable', + hasTitreFrom: 'non-applicable', + isBrouillon: ETAPE_IS_NOT_BROUILLON, + ordre: 1, + date: toCaminoDate('1988-03-06'), + communes: [], + contenu: {}, + heritageContenu: {}, + surface: null, + demarcheIdsConsentement: [], + }, + ], + }, + }) + ) const titresDemarchesStatutUpdated = await titresDemarchesStatutIdUpdate(undefined as unknown as Pool) expect(titresDemarchesStatutUpdated.length).toEqual(1) }) test("ne met pas à jour le statut d'une démarche", async () => { - getDemarchesMock.mockResolvedValue({ - [newDemarcheId('')]: { - id: newDemarcheId('h-cx-courdemanges-1988-oct01'), - titreId: newTitreId('h-cx-courdemanges-1988'), - titreTypeId: 'cxh', - typeId: 'oct', - statutId: 'acc', - etapes: [ - { - id: newEtapeId('h-cx-courdemanges-1988-oct01-dpu01'), - typeId: 'dpu', - statutId: 'acc', - concurrence: 'non-applicable', - hasTitreFrom: 'non-applicable', - isBrouillon: ETAPE_IS_NOT_BROUILLON, - ordre: 2, - date: toCaminoDate('1988-03-11'), - communes: [], - contenu: {}, - heritageContenu: {}, - surface: null, - demarcheIdsConsentement: [], - }, - { - id: newEtapeId('h-cx-courdemanges-1988-oct01-dex01'), - typeId: 'dex', - statutId: 'acc', - concurrence: 'non-applicable', - hasTitreFrom: 'non-applicable', - isBrouillon: ETAPE_IS_NOT_BROUILLON, - ordre: 1, - date: toCaminoDate('1988-03-06'), - communes: [], - contenu: {}, - heritageContenu: {}, - surface: null, - demarcheIdsConsentement: [], - }, - ], - }, - }) + getDemarchesMock.mockReturnValue( + Effect.succeed({ + [newDemarcheId('')]: { + id: newDemarcheId('h-cx-courdemanges-1988-oct01'), + titreId: newTitreId('h-cx-courdemanges-1988'), + titreTypeId: 'cxh', + typeId: 'oct', + statutId: 'acc', + etapes: [ + { + id: newEtapeId('h-cx-courdemanges-1988-oct01-dpu01'), + typeId: 'dpu', + statutId: 'acc', + concurrence: 'non-applicable', + hasTitreFrom: 'non-applicable', + isBrouillon: ETAPE_IS_NOT_BROUILLON, + ordre: 2, + date: toCaminoDate('1988-03-11'), + communes: [], + contenu: {}, + heritageContenu: {}, + surface: null, + demarcheIdsConsentement: [], + }, + { + id: newEtapeId('h-cx-courdemanges-1988-oct01-dex01'), + typeId: 'dex', + statutId: 'acc', + concurrence: 'non-applicable', + hasTitreFrom: 'non-applicable', + isBrouillon: ETAPE_IS_NOT_BROUILLON, + ordre: 1, + date: toCaminoDate('1988-03-06'), + communes: [], + contenu: {}, + heritageContenu: {}, + surface: null, + demarcheIdsConsentement: [], + }, + ], + }, + }) + ) const titresDemarchesStatutUpdated = await titresDemarchesStatutIdUpdate(undefined as unknown as Pool) expect(titresDemarchesStatutUpdated.length).toEqual(0) }) test("ne met pas à jour le statut d'une démarche sans étape", async () => { - getDemarchesMock.mockResolvedValue({ - [newDemarcheId('')]: { - id: newDemarcheId('h-cx-courdemanges-1988-oct01'), - titreId: newTitreId('h-cx-courdemanges-1988'), - titreTypeId: 'cxh', - typeId: 'oct', - statutId: 'ind', - etapes: [], - }, - }) + getDemarchesMock.mockReturnValue( + Effect.succeed({ + [newDemarcheId('')]: { + id: newDemarcheId('h-cx-courdemanges-1988-oct01'), + titreId: newTitreId('h-cx-courdemanges-1988'), + titreTypeId: 'cxh', + typeId: 'oct', + statutId: 'ind', + etapes: [], + }, + }) + ) const titresDemarchesStatutUpdated = await titresDemarchesStatutIdUpdate(undefined as unknown as Pool) expect(titresDemarchesStatutUpdated.length).toEqual(0) }) diff --git a/packages/api/src/business/processes/titres-demarches-statut-ids-update.ts b/packages/api/src/business/processes/titres-demarches-statut-ids-update.ts index 25bb69549a80e0fd336e44f47fcb37178db2a084..6d8718c9d9abab72edad9928a9fa7049b6325fde 100644 --- a/packages/api/src/business/processes/titres-demarches-statut-ids-update.ts +++ b/packages/api/src/business/processes/titres-demarches-statut-ids-update.ts @@ -4,12 +4,13 @@ import { titreDemarcheStatutIdFind } from '../rules/titre-demarche-statut-id-fin import { titreEtapesSortAscByOrdre } from '../utils/titre-etapes-sort' import { getDemarches } from './titres-etapes-heritage-contenu-update.queries' import { Pool } from 'pg' +import { callAndExit } from '../../tools/fp-tools' export const titresDemarchesStatutIdUpdate = async (pool: Pool, titreId?: TitreId): Promise<string[]> => { console.info() console.info('statut des démarches…') - const titresDemarches = await getDemarches(pool, undefined, titreId) + const titresDemarches = await callAndExit(getDemarches(pool, undefined, titreId)) const titresDemarchesUpdated: string[] = [] diff --git a/packages/api/src/business/processes/titres-etapes-heritage-contenu-update.queries.ts b/packages/api/src/business/processes/titres-etapes-heritage-contenu-update.queries.ts index 45b3fa7a1d60f56f03a941e1b31ed413d4925e2c..33219eb79ac98a1059e28e62595fcb4c443f9a9d 100644 --- a/packages/api/src/business/processes/titres-etapes-heritage-contenu-update.queries.ts +++ b/packages/api/src/business/processes/titres-etapes-heritage-contenu-update.queries.ts @@ -1,6 +1,6 @@ import { sql } from '@pgtyped/runtime' -import { Redefine, dbQueryAndValidate } from '../../pg-database' -import { IGetEtapesByDemarcheInternalQuery } from './titres-etapes-heritage-contenu-update.queries.types' +import { EffectDbQueryAndValidateErrors, Redefine, effectDbQueryAndValidate } from '../../pg-database' +import { IGetAllEtapeIdsDbQuery, IGetEtapesByDemarcheInternalQuery } from './titres-etapes-heritage-contenu-update.queries.types' import { caminoDateValidator } from 'camino-common/src/date' import { DemarcheId, demarcheIdValidator } from 'camino-common/src/demarche' import { DemarcheStatutId, demarcheStatutIdValidator } from 'camino-common/src/static/demarchesStatuts' @@ -9,13 +9,28 @@ import { etapeStatutIdValidator } from 'camino-common/src/static/etapesStatuts' import { TitreTypeId, titreTypeIdValidator } from 'camino-common/src/static/titresTypes' import { ETAPE_TYPE_FOR_CONCURRENCY_DATA, etapeTypeIdValidator } from 'camino-common/src/static/etapesTypes' import { TitreId, titreIdValidator } from 'camino-common/src/validators/titres' -import { etapeBrouillonValidator, etapeIdValidator } from 'camino-common/src/etape' +import { etapeBrouillonValidator, EtapeId, etapeIdValidator } from 'camino-common/src/etape' import { z } from 'zod' import { Pool } from 'pg' import { communeValidator } from 'camino-common/src/static/communes' import { TitreEtapeForMachine } from '../rules-demarches/machine-common' import { isNotNullNorUndefined } from 'camino-common/src/typescript-tools' import { km2Validator } from 'camino-common/src/number' +import { CaminoError } from 'camino-common/src/zod-tools' +import { Effect } from 'effect' + +const getAllEtapeIdValidator = z.object({ id: etapeIdValidator, heritage_contenu: z.record(z.record(z.object({ etapeId: etapeIdValidator.optional().nullable() }))).nullable() }) + +type GetAllEtapes = z.infer<typeof getAllEtapeIdValidator> + +export const getAllEtapeIds = (pool: Pool): Effect.Effect<{ ids: Set<EtapeId>; etapes: GetAllEtapes[] }, CaminoError<EffectDbQueryAndValidateErrors>> => + effectDbQueryAndValidate(getAllEtapeIdsDb, {}, pool, getAllEtapeIdValidator).pipe( + Effect.map(etapes => { + return { ids: new Set(etapes.map(({ id }) => id)), etapes } + }) + ) + +const getAllEtapeIdsDb = sql<Redefine<IGetAllEtapeIdsDbQuery, {}, z.infer<typeof getAllEtapeIdValidator>>>`select id, heritage_contenu from titres_etapes where archive is false` const getEtapesByDemarcheValidator = z.object({ contenu: z.any().nullable(), @@ -39,24 +54,12 @@ const getEtapesByDemarcheValidator = z.object({ demarche_ids_consentement: z.array(demarcheIdValidator).nullable(), }) -export const getDemarches = async ( +export const getDemarches = ( pool: Pool, demarcheId?: DemarcheId, titreId?: TitreId -): Promise<{ - [key: DemarcheId]: { - etapes: TitreEtapeForMachine[] - id: DemarcheId - typeId: DemarcheTypeId - titreTypeId: TitreTypeId - titreId: TitreId - statutId: DemarcheStatutId - } -}> => { - const etapes = await dbQueryAndValidate(getEtapesByDemarcheInternal, { demarcheId, titreId }, pool, getEtapesByDemarcheValidator) - - // FIXMACHINE trier les démarches par ordre de la première étape pour avoir la bonne visibilité des démarches - return etapes.reduce<{ +): Effect.Effect< + { [key: DemarcheId]: { etapes: TitreEtapeForMachine[] id: DemarcheId @@ -65,51 +68,67 @@ export const getDemarches = async ( titreId: TitreId statutId: DemarcheStatutId } - }>((acc, row) => { - if (!isNotNullNorUndefined(acc[row.demarche_id])) { - acc[row.demarche_id] = { - etapes: [], - id: row.demarche_id, - titreId: row.titre_id, - titreTypeId: row.titre_type_id, - typeId: row.demarche_type_id, - statutId: row.demarche_statut_id, - } - } + }, + CaminoError<EffectDbQueryAndValidateErrors> +> => + effectDbQueryAndValidate(getEtapesByDemarcheInternal, { demarcheId, titreId }, pool, getEtapesByDemarcheValidator).pipe( + Effect.map(etapes => { + // FIXMACHINE trier les démarches par ordre de la première étape pour avoir la bonne visibilité des démarches + return etapes.reduce<{ + [key: DemarcheId]: { + etapes: TitreEtapeForMachine[] + id: DemarcheId + typeId: DemarcheTypeId + titreTypeId: TitreTypeId + titreId: TitreId + statutId: DemarcheStatutId + } + }>((acc, row) => { + if (!isNotNullNorUndefined(acc[row.demarche_id])) { + acc[row.demarche_id] = { + etapes: [], + id: row.demarche_id, + titreId: row.titre_id, + titreTypeId: row.titre_type_id, + typeId: row.demarche_type_id, + statutId: row.demarche_statut_id, + } + } - if ( - isNotNullNorUndefined(row.id) && - isNotNullNorUndefined(row.ordre) && - isNotNullNorUndefined(row.type_id) && - isNotNullNorUndefined(row.statut_id) && - isNotNullNorUndefined(row.date) && - isNotNullNorUndefined(row.is_brouillon) - ) { - acc[row.demarche_id].etapes.push({ - id: row.id, - ordre: row.ordre, - typeId: row.type_id, - statutId: row.statut_id, - isBrouillon: row.is_brouillon, - date: row.date, - contenu: row.contenu, - heritageContenu: row.heritage_contenu, - communes: row.communes, - surface: row.surface, - concurrence: - row.type_id === ETAPE_TYPE_FOR_CONCURRENCY_DATA - ? isNotNullNorUndefined(row.demarche_id_en_concurrence) && isNotNullNorUndefined(row.demarche_concurrente_public_lecture) - ? { amIFirst: false, demarcheConcurrenteVisibilite: row.demarche_concurrente_public_lecture === true ? 'publique' : 'confidentielle' } - : { amIFirst: true } - : 'non-applicable', - demarcheIdsConsentement: row.demarche_ids_consentement ?? [], - hasTitreFrom: row.has_titre_from, - }) - } + if ( + isNotNullNorUndefined(row.id) && + isNotNullNorUndefined(row.ordre) && + isNotNullNorUndefined(row.type_id) && + isNotNullNorUndefined(row.statut_id) && + isNotNullNorUndefined(row.date) && + isNotNullNorUndefined(row.is_brouillon) + ) { + acc[row.demarche_id].etapes.push({ + id: row.id, + ordre: row.ordre, + typeId: row.type_id, + statutId: row.statut_id, + isBrouillon: row.is_brouillon, + date: row.date, + contenu: row.contenu, + heritageContenu: row.heritage_contenu, + communes: row.communes, + surface: row.surface, + concurrence: + row.type_id === ETAPE_TYPE_FOR_CONCURRENCY_DATA + ? isNotNullNorUndefined(row.demarche_id_en_concurrence) && isNotNullNorUndefined(row.demarche_concurrente_public_lecture) + ? { amIFirst: false, demarcheConcurrenteVisibilite: row.demarche_concurrente_public_lecture === true ? 'publique' : 'confidentielle' } + : { amIFirst: true } + : 'non-applicable', + demarcheIdsConsentement: row.demarche_ids_consentement ?? [], + hasTitreFrom: row.has_titre_from, + }) + } - return acc - }, {}) -} + return acc + }, {}) + }) + ) const getEtapesByDemarcheInternal = sql<Redefine<IGetEtapesByDemarcheInternalQuery, { demarcheId?: DemarcheId; titreId?: TitreId }, z.infer<typeof getEtapesByDemarcheValidator>>>` SELECT diff --git a/packages/api/src/business/processes/titres-etapes-heritage-contenu-update.queries.types.ts b/packages/api/src/business/processes/titres-etapes-heritage-contenu-update.queries.types.ts index 6a39d8e8b934e1590254b0b00f47f18fad750ba4..98b055511f872376dcaf43923f97c4ecf3ffbd0d 100644 --- a/packages/api/src/business/processes/titres-etapes-heritage-contenu-update.queries.types.ts +++ b/packages/api/src/business/processes/titres-etapes-heritage-contenu-update.queries.types.ts @@ -1,6 +1,21 @@ /** Types generated for queries found in "src/business/processes/titres-etapes-heritage-contenu-update.queries.ts" */ export type Json = null | boolean | number | string | Json[] | { [key: string]: Json }; +/** 'GetAllEtapeIdsDb' parameters type */ +export type IGetAllEtapeIdsDbParams = void; + +/** 'GetAllEtapeIdsDb' return type */ +export interface IGetAllEtapeIdsDbResult { + heritage_contenu: Json | null; + id: string; +} + +/** 'GetAllEtapeIdsDb' query type */ +export interface IGetAllEtapeIdsDbQuery { + params: IGetAllEtapeIdsDbParams; + result: IGetAllEtapeIdsDbResult; +} + /** 'GetEtapesByDemarcheInternal' parameters type */ export interface IGetEtapesByDemarcheInternalParams { demarcheId?: string | null | void; diff --git a/packages/api/src/business/processes/titres-etapes-heritage-contenu-update.ts b/packages/api/src/business/processes/titres-etapes-heritage-contenu-update.ts index 7f82123915e609a86f5c0f7f8cd54b396b632f85..cd5b05c9c99063282498854023e73ac2983fe1e0 100644 --- a/packages/api/src/business/processes/titres-etapes-heritage-contenu-update.ts +++ b/packages/api/src/business/processes/titres-etapes-heritage-contenu-update.ts @@ -3,17 +3,63 @@ import { titreEtapeHeritageContenuFind } from '../utils/titre-etape-heritage-con import { titreEtapesSortAscByOrdre, titreEtapesSortDescByOrdre } from '../utils/titre-etapes-sort' import { UserNotNull } from 'camino-common/src/roles' import { getSections, Section } from 'camino-common/src/static/titresTypes_demarchesTypes_etapesTypes/sections' -import { isNotNullNorUndefined, isNotNullNorUndefinedNorEmpty } from 'camino-common/src/typescript-tools' +import { isNotNullNorUndefined, isNotNullNorUndefinedNorEmpty, isNullOrUndefinedOrEmpty } from 'camino-common/src/typescript-tools' import { DemarcheId } from 'camino-common/src/demarche' import { Pool } from 'pg' -import { getDemarches } from './titres-etapes-heritage-contenu-update.queries' +import { getAllEtapeIds, getDemarches } from './titres-etapes-heritage-contenu-update.queries' import { EtapeId } from 'camino-common/src/etape' +import { callAndExit } from '../../tools/fp-tools' +import { Effect } from 'effect' +import { CaminoError } from 'camino-common/src/zod-tools' +import { EffectDbQueryAndValidateErrors } from '../../pg-database' +function isEmpty(obj: any) { + for (const prop in obj) { + if (Object.prototype.hasOwnProperty.call(obj, prop)) { + return false + } + } + + return true +} +interface ErrorInContenuHeritage { + etapeIdWithBadHeritage: EtapeId + unknownEtapeIds: EtapeId[] +} +export const checkEtapeInContenuHeritage = (pool: Pool): Effect.Effect<ErrorInContenuHeritage[], CaminoError<EffectDbQueryAndValidateErrors>> => { + return Effect.Do.pipe( + Effect.flatMap(() => getAllEtapeIds(pool)), + Effect.map(({ ids, etapes }) => + etapes.reduce<ErrorInContenuHeritage[]>((acc, etape) => { + const etapeIdNonExistantes: EtapeId[] = [] + if (isNotNullNorUndefined(etape.heritage_contenu)) { + for (const key of Object.keys(etape.heritage_contenu)) { + if (isNotNullNorUndefined(etape.heritage_contenu[key])) { + for (const second of Object.keys(etape.heritage_contenu[key])) { + const etapeId = etape.heritage_contenu[key][second].etapeId + if (isNotNullNorUndefined(etapeId)) { + if (!ids.has(etapeId)) { + etapeIdNonExistantes.push(etapeId) + console.error(`L'étape ${etape.id} hérite son contenu de l'étape ${etapeId} qui n'existe plus l'édition est cassée https://camino.beta.gouv.fr/etapes/${etape.id}`) + } + } + } + } + } + } + if (isNotNullNorUndefinedNorEmpty(etapeIdNonExistantes)) { + acc.push({ etapeIdWithBadHeritage: etape.id, unknownEtapeIds: etapeIdNonExistantes }) + } + return acc + }, []) + ) + ) +} export const titresEtapesHeritageContenuUpdate = async (pool: Pool, user: UserNotNull, demarcheId?: DemarcheId): Promise<string[]> => { console.info() console.info('héritage des contenus des étapes…') - const titresDemarches = await getDemarches(pool, demarcheId) + const titresDemarches = await callAndExit(getDemarches(pool, demarcheId)) // lorsqu'une étape est mise à jour par un utilisateur, // l'objet heritageContenu reçu ne contient pas d'id d'étape @@ -22,7 +68,7 @@ export const titresEtapesHeritageContenuUpdate = async (pool: Pool, user: UserNo const titresEtapesIdsUpdated = [] as string[] for (const titreDemarche of Object.values(titresDemarches)) { - if (titreDemarche.etapes.length) { + if (isNotNullNorUndefinedNorEmpty(titreDemarche.etapes)) { const etapeSectionsDictionary = titreDemarche.etapes.reduce<{ [etapeId in EtapeId]?: Section[] }>((acc, e) => { @@ -30,7 +76,21 @@ export const titresEtapesHeritageContenuUpdate = async (pool: Pool, user: UserNo return acc }, {}) - const titreEtapes = titreEtapesSortAscByOrdre(titreDemarche.etapes.filter(e => isNotNullNorUndefined(etapeSectionsDictionary[e.id]))) + const titreEtapesPerdantLesSections = titreDemarche.etapes.filter( + etape => (!isEmpty(etape.contenu) || !isEmpty(etape.heritageContenu)) && isNullOrUndefinedOrEmpty(etapeSectionsDictionary[etape.id]) + ) + + if (isNotNullNorUndefinedNorEmpty(titreEtapesPerdantLesSections)) { + for (const etapePerdantLesSections of titreEtapesPerdantLesSections) { + console.error(`l'étape https://camino.beta.gouv.fr/etapes/${etapePerdantLesSections.id} de type ${etapePerdantLesSections.typeId} possède un contenu alors qu'elle n'est pas censée en avoir`) + // TODO 2025-02-24 : à décommenter et à lancer en prod, puis à supprimer + // prettier-ignore + // await titreEtapeUpdate(etapePerdantLesSections.id, { contenu: null, heritageContenu: null, }, user, titreDemarche.titreId) + titresEtapesIdsUpdated.push(etapePerdantLesSections.id) + } + } + // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions + const titreEtapes = titreEtapesSortAscByOrdre(titreDemarche.etapes.filter(e => etapeSectionsDictionary[e.id])) if (isNotNullNorUndefinedNorEmpty(titreEtapes)) { for (let index = 0; index < titreEtapes.length; index++) { diff --git a/packages/api/src/business/processes/titres-etapes-ordre-update.ts b/packages/api/src/business/processes/titres-etapes-ordre-update.ts index bba05deef33cacae5a25f4462b52422fa1064ded..cda09695fd1f2316a152ceeafc5612cb51e1542c 100644 --- a/packages/api/src/business/processes/titres-etapes-ordre-update.ts +++ b/packages/api/src/business/processes/titres-etapes-ordre-update.ts @@ -9,12 +9,13 @@ import { Pool } from 'pg' import { TitreId } from 'camino-common/src/validators/titres' import { TitreEtapeForMachine, titreEtapeForMachineValidator } from '../rules-demarches/machine-common' import { isNotNullNorUndefinedNorEmpty } from 'camino-common/src/typescript-tools' +import { callAndExit } from '../../tools/fp-tools' export const titresEtapesOrdreUpdate = async (pool: Pool, user: UserNotNull, demarcheId?: DemarcheId): Promise<string[]> => { console.info() console.info('ordre des étapes…') - const titresDemarches = await getDemarches(pool, demarcheId) + const titresDemarches = await callAndExit(getDemarches(pool, demarcheId)) return titresEtapesOrdreUpdateVisibleForTesting(user, titresDemarches) } diff --git a/packages/ui/src/components/_common/new-sections-edit.stories_snapshots_Date.html b/packages/ui/src/components/_common/new-sections-edit.stories_snapshots_Date.html index d1ff078cccdff1b3d3d18a937c7fc67a24b1ec64..664acb5e60b4fcea28bf14a1c607d5c879f67517 100644 --- a/packages/ui/src/components/_common/new-sections-edit.stories_snapshots_Date.html +++ b/packages/ui/src/components/_common/new-sections-edit.stories_snapshots_Date.html @@ -4,7 +4,7 @@ <div class="fr-fieldset__element"> <div> <div class="fr-input-group" style="margin-bottom: 0px;"><label class="fr-label" for="input_271">Une date - <!----><span class="fr-hint-text">au format jj/mm/yyyy</span><span class="fr-hint-text">Et quelle belle date</span> + <!----><span class="fr-hint-text">au format jj/mm/aaaa</span><span class="fr-hint-text">Et quelle belle date</span> </label><input class="fr-input" name="input_271" id="input_271" required="" type="date"> <!----> </div> diff --git a/packages/ui/src/components/_common/new-sections-edit.stories_snapshots_TousLesElementsRemplis.html b/packages/ui/src/components/_common/new-sections-edit.stories_snapshots_TousLesElementsRemplis.html index 030d340912a1ca5e20fe5bb1f0bd65823d8cf3c3..372ece1bfe8f0870c28246dec025f20a8787b5d6 100644 --- a/packages/ui/src/components/_common/new-sections-edit.stories_snapshots_TousLesElementsRemplis.html +++ b/packages/ui/src/components/_common/new-sections-edit.stories_snapshots_TousLesElementsRemplis.html @@ -24,7 +24,7 @@ <div class="fr-fieldset__element"> <div> <div class="fr-input-group" style="margin-bottom: 0px;"><label class="fr-label" for="input_74">date - <!----><span class="fr-hint-text">au format jj/mm/yyyy</span><span class="fr-hint-text">Description pour date</span> + <!----><span class="fr-hint-text">au format jj/mm/aaaa</span><span class="fr-hint-text">Description pour date</span> </label><input class="fr-input" name="input_74" id="input_74" required="" type="date" value="2023-09-01"> <!----> </div> diff --git a/packages/ui/src/components/_common/new-sections-edit.stories_snapshots_TousLesElementsRequis.html b/packages/ui/src/components/_common/new-sections-edit.stories_snapshots_TousLesElementsRequis.html index c43bc5e8eae8d4283597b6d65385b9cd82a26322..da89125a8876da10fa4247e73dee9378199873b0 100644 --- a/packages/ui/src/components/_common/new-sections-edit.stories_snapshots_TousLesElementsRequis.html +++ b/packages/ui/src/components/_common/new-sections-edit.stories_snapshots_TousLesElementsRequis.html @@ -24,7 +24,7 @@ <div class="fr-fieldset__element"> <div> <div class="fr-input-group" style="margin-bottom: 0px;"><label class="fr-label" for="input_74">date - <!----><span class="fr-hint-text">au format jj/mm/yyyy</span><span class="fr-hint-text">Description pour date</span> + <!----><span class="fr-hint-text">au format jj/mm/aaaa</span><span class="fr-hint-text">Description pour date</span> </label><input class="fr-input" name="input_74" id="input_74" required="" type="date"> <!----> </div> diff --git a/packages/ui/src/components/_common/new-sections-edit.stories_snapshots_TousLesElementsVidesOptionnels.html b/packages/ui/src/components/_common/new-sections-edit.stories_snapshots_TousLesElementsVidesOptionnels.html index e7fe7c40819bb3fcc1adf87ee68aa8da6a6b0d22..fa54942fb644f4be5026d4279b5e7ba2d266532d 100644 --- a/packages/ui/src/components/_common/new-sections-edit.stories_snapshots_TousLesElementsVidesOptionnels.html +++ b/packages/ui/src/components/_common/new-sections-edit.stories_snapshots_TousLesElementsVidesOptionnels.html @@ -21,7 +21,7 @@ </div> <div class="fr-fieldset__element"> <div> - <div class="fr-input-group" style="margin-bottom: 0px;"><label class="fr-label" for="input_74">date (optionnel)<span class="fr-hint-text">au format jj/mm/yyyy</span><span class="fr-hint-text">Description pour date</span></label><input class="fr-input" name="input_74" id="input_74" type="date"> + <div class="fr-input-group" style="margin-bottom: 0px;"><label class="fr-label" for="input_74">date (optionnel)<span class="fr-hint-text">au format jj/mm/aaaa</span><span class="fr-hint-text">Description pour date</span></label><input class="fr-input" name="input_74" id="input_74" type="date"> <!----> </div> </div> diff --git a/packages/ui/src/components/_ui/dsfr-input.stories_snapshots_Date.html b/packages/ui/src/components/_ui/dsfr-input.stories_snapshots_Date.html index 751993eaa55b0e0a18c138b47a30ec644109a480..e601b25a149c1d30ebc2531836ceff21dc44bce7 100644 --- a/packages/ui/src/components/_ui/dsfr-input.stories_snapshots_Date.html +++ b/packages/ui/src/components/_ui/dsfr-input.stories_snapshots_Date.html @@ -1,5 +1,5 @@ <div class="fr-input-group" style="margin-bottom: 0px;"><label class="fr-label" for="input1">Légende - <!----><span class="fr-hint-text">au format jj/mm/yyyy</span> + <!----><span class="fr-hint-text">au format jj/mm/aaaa</span> <!----> </label><input class="fr-input" name="input1" id="input1" required="" type="date" value="2023-02-26"> <!----> diff --git a/packages/ui/src/components/_ui/dsfr-input.stories_snapshots_Optional.html b/packages/ui/src/components/_ui/dsfr-input.stories_snapshots_Optional.html index 30df7077637e015bfa8301fc00042c51bdff806c..3989551363dd3356f81ca7a7fbc4317c4b7e8534 100644 --- a/packages/ui/src/components/_ui/dsfr-input.stories_snapshots_Optional.html +++ b/packages/ui/src/components/_ui/dsfr-input.stories_snapshots_Optional.html @@ -1,4 +1,4 @@ -<div class="fr-input-group" style="margin-bottom: 0px;"><label class="fr-label" for="input1">Légende (optionnel)<span class="fr-hint-text">au format jj/mm/yyyy</span> +<div class="fr-input-group" style="margin-bottom: 0px;"><label class="fr-label" for="input1">Légende (optionnel)<span class="fr-hint-text">au format jj/mm/aaaa</span> <!----> </label><input class="fr-input" name="input1" id="input1" type="date" value="2023-02-26"> <!----> diff --git a/packages/ui/src/components/_ui/dsfr-input.tsx b/packages/ui/src/components/_ui/dsfr-input.tsx index 8428eaaf4c4041b8c0c20040deda9060c23fc474..7e48ec9fc794f5fd4ec7b7b024e3b14eebe3a202 100644 --- a/packages/ui/src/components/_ui/dsfr-input.tsx +++ b/packages/ui/src/components/_ui/dsfr-input.tsx @@ -85,7 +85,7 @@ export const DsfrInput = defineComponent<Props>(props => { <label class="fr-label" for={id}> {props.legend.main} {!props.required ? ' (optionnel)' : null} - {props.type.type === 'date' ? <span class="fr-hint-text">au format jj/mm/yyyy</span> : null} + {props.type.type === 'date' ? <span class="fr-hint-text">au format jj/mm/aaaa</span> : null} {isNotNullNorUndefined(props.legend.description) ? <span class="fr-hint-text" v-html={props.legend.description}></span> : null} </label> ) : null} diff --git a/packages/ui/src/components/demarches/filtres-etapes.stories_snapshots_Multiple.html b/packages/ui/src/components/demarches/filtres-etapes.stories_snapshots_Multiple.html index 38121ed0af79867d4065a31294604745b4421159..9e0c899f06778bce8c6ce61bb81b2fae3432b476 100644 --- a/packages/ui/src/components/demarches/filtres-etapes.stories_snapshots_Multiple.html +++ b/packages/ui/src/components/demarches/filtres-etapes.stories_snapshots_Multiple.html @@ -115,12 +115,12 @@ <option selected="" value="fai">fait</option> <option disabled="" hidden="" value="">Selectionnez une option</option> </select></div> - <div class="fr-input-group" style="margin-bottom: 0px;"><label class="fr-label" for="input_670">Après le (optionnel)<span class="fr-hint-text">au format jj/mm/yyyy</span> + <div class="fr-input-group" style="margin-bottom: 0px;"><label class="fr-label" for="input_670">Après le (optionnel)<span class="fr-hint-text">au format jj/mm/aaaa</span> <!----> </label><input class="fr-input" name="input_670" id="input_670" type="date" value="2022-01-01"> <!----> </div> - <div class="fr-input-group" style="margin-bottom: 0px;"><label class="fr-label" for="input_74">Avant le (optionnel)<span class="fr-hint-text">au format jj/mm/yyyy</span> + <div class="fr-input-group" style="margin-bottom: 0px;"><label class="fr-label" for="input_74">Avant le (optionnel)<span class="fr-hint-text">au format jj/mm/aaaa</span> <!----> </label><input class="fr-input" name="input_74" id="input_74" type="date" value="2022-03-03"> <!----> @@ -242,12 +242,12 @@ <option selected="" value="fai">fait</option> <option disabled="" hidden="" value="">Selectionnez une option</option> </select></div> - <div class="fr-input-group" style="margin-bottom: 0px;"><label class="fr-label" for="input_967">Après le (optionnel)<span class="fr-hint-text">au format jj/mm/yyyy</span> + <div class="fr-input-group" style="margin-bottom: 0px;"><label class="fr-label" for="input_967">Après le (optionnel)<span class="fr-hint-text">au format jj/mm/aaaa</span> <!----> </label><input class="fr-input" name="input_967" id="input_967" type="date" value="2024-01-01"> <!----> </div> - <div class="fr-input-group" style="margin-bottom: 0px;"><label class="fr-label" for="input_25">Avant le (optionnel)<span class="fr-hint-text">au format jj/mm/yyyy</span> + <div class="fr-input-group" style="margin-bottom: 0px;"><label class="fr-label" for="input_25">Avant le (optionnel)<span class="fr-hint-text">au format jj/mm/aaaa</span> <!----> </label><input class="fr-input" name="input_25" id="input_25" type="date" value="2025-03-03"> <!----> diff --git a/packages/ui/src/components/demarches/filtres-etapes.stories_snapshots_PartialOneValue.html b/packages/ui/src/components/demarches/filtres-etapes.stories_snapshots_PartialOneValue.html index 37c828bcbfc9fb799cf6078009a11ec30daec823..dc7d89fc4c1c071d65d2acf7d46fa59e2115ed56 100644 --- a/packages/ui/src/components/demarches/filtres-etapes.stories_snapshots_PartialOneValue.html +++ b/packages/ui/src/components/demarches/filtres-etapes.stories_snapshots_PartialOneValue.html @@ -115,12 +115,12 @@ <option selected="" value="fai">fait</option> <option disabled="" hidden="" value="">Selectionnez une option</option> </select></div> - <div class="fr-input-group" style="margin-bottom: 0px;"><label class="fr-label" for="input_670">Après le (optionnel)<span class="fr-hint-text">au format jj/mm/yyyy</span> + <div class="fr-input-group" style="margin-bottom: 0px;"><label class="fr-label" for="input_670">Après le (optionnel)<span class="fr-hint-text">au format jj/mm/aaaa</span> <!----> </label><input class="fr-input" name="input_670" id="input_670" type="date"> <!----> </div> - <div class="fr-input-group" style="margin-bottom: 0px;"><label class="fr-label" for="input_74">Avant le (optionnel)<span class="fr-hint-text">au format jj/mm/yyyy</span> + <div class="fr-input-group" style="margin-bottom: 0px;"><label class="fr-label" for="input_74">Avant le (optionnel)<span class="fr-hint-text">au format jj/mm/aaaa</span> <!----> </label><input class="fr-input" name="input_74" id="input_74" type="date"> <!----> diff --git a/packages/ui/src/components/entreprise/add-entreprise-document-popup.stories_snapshots_Default.html b/packages/ui/src/components/entreprise/add-entreprise-document-popup.stories_snapshots_Default.html index 304ad955d3e6ddededc73138abc096c6d809cf31..a1512dfef21fb67ab8e7c126548eab6b5b3827f8 100644 --- a/packages/ui/src/components/entreprise/add-entreprise-document-popup.stories_snapshots_Default.html +++ b/packages/ui/src/components/entreprise/add-entreprise-document-popup.stories_snapshots_Default.html @@ -35,7 +35,7 @@ <fieldset class="fr-fieldset" id="text"> <div class="fr-fieldset__element"> <div class="fr-input-group" style="margin-bottom: 0px;"><label class="fr-label" for="input_670">Date de délivrance du document - <!----><span class="fr-hint-text">au format jj/mm/yyyy</span> + <!----><span class="fr-hint-text">au format jj/mm/aaaa</span> <!----> </label><input class="fr-input" name="input_670" id="input_670" required="" type="date"> <!----> diff --git a/packages/ui/src/components/entreprise/add-entreprise-document-popup.stories_snapshots_TypeDeDocumentVerouille.html b/packages/ui/src/components/entreprise/add-entreprise-document-popup.stories_snapshots_TypeDeDocumentVerouille.html index 11df3b74385e32a14e47dc9912cb6cae9c104733..eec7ad7d9616a742e6d7979f6942e41880bf5f90 100644 --- a/packages/ui/src/components/entreprise/add-entreprise-document-popup.stories_snapshots_TypeDeDocumentVerouille.html +++ b/packages/ui/src/components/entreprise/add-entreprise-document-popup.stories_snapshots_TypeDeDocumentVerouille.html @@ -14,7 +14,7 @@ <fieldset class="fr-fieldset" id="text"> <div class="fr-fieldset__element"> <div class="fr-input-group" style="margin-bottom: 0px;"><label class="fr-label" for="input_271">Date de délivrance du document - <!----><span class="fr-hint-text">au format jj/mm/yyyy</span> + <!----><span class="fr-hint-text">au format jj/mm/aaaa</span> <!----> </label><input class="fr-input" name="input_271" id="input_271" required="" type="date"> <!----> diff --git a/packages/ui/src/components/etape-edition.stories_snapshots_Creation.html b/packages/ui/src/components/etape-edition.stories_snapshots_Creation.html index fffa47dbb6289d06b2a4ee1f85c0c8f8d8cbf62e..1911643e34237eafc66bab357459ae123a890705 100644 --- a/packages/ui/src/components/etape-edition.stories_snapshots_Creation.html +++ b/packages/ui/src/components/etape-edition.stories_snapshots_Creation.html @@ -13,7 +13,7 @@ <div class="fr-grid-row"> <div class="fr-col-12 fr-col-xl-6"> <div class="fr-input-group" style="margin-bottom: 0px;"><label class="fr-label" for="input_271">Date - <!----><span class="fr-hint-text">au format jj/mm/yyyy</span> + <!----><span class="fr-hint-text">au format jj/mm/aaaa</span> <!----> </label><input class="fr-input" name="input_271" id="input_271" required="" type="date"> <!----> diff --git a/packages/ui/src/components/etape-edition.stories_snapshots_DemandeArmComplete.html b/packages/ui/src/components/etape-edition.stories_snapshots_DemandeArmComplete.html index 405f18ce961160f37f4d6010b53889050d4f688b..57178a12de5cb5e7ad966b09958da781830273ce 100644 --- a/packages/ui/src/components/etape-edition.stories_snapshots_DemandeArmComplete.html +++ b/packages/ui/src/components/etape-edition.stories_snapshots_DemandeArmComplete.html @@ -14,7 +14,7 @@ <div class="fr-grid-row"> <div class="fr-col-12 fr-col-xl-6"> <div class="fr-input-group" style="margin-bottom: 0px;"><label class="fr-label" for="input_271">Date - <!----><span class="fr-hint-text">au format jj/mm/yyyy</span> + <!----><span class="fr-hint-text">au format jj/mm/aaaa</span> <!----> </label><input class="fr-input" name="input_271" id="input_271" required="" type="date" value="2023-02-01"> <!----> diff --git a/packages/ui/src/components/etape-edition.stories_snapshots_ModificationDemandeHeritee.html b/packages/ui/src/components/etape-edition.stories_snapshots_ModificationDemandeHeritee.html index c087b5fd3353f54000082f4a2dcc3a35eb008bdc..2f9f0295bf6e5a4d16f2d76e0092faa1483bdf9f 100644 --- a/packages/ui/src/components/etape-edition.stories_snapshots_ModificationDemandeHeritee.html +++ b/packages/ui/src/components/etape-edition.stories_snapshots_ModificationDemandeHeritee.html @@ -14,7 +14,7 @@ <div class="fr-grid-row"> <div class="fr-col-12 fr-col-xl-6"> <div class="fr-input-group" style="margin-bottom: 0px;"><label class="fr-label" for="input_271">Date - <!----><span class="fr-hint-text">au format jj/mm/yyyy</span> + <!----><span class="fr-hint-text">au format jj/mm/aaaa</span> <!----> </label><input class="fr-input" name="input_271" id="input_271" required="" type="date" value="2023-02-01"> <!----> diff --git a/packages/ui/src/components/etape/add-etape-avis-popup.stories_snapshots_AvisDeLaMissionAutoriteEnvironnementaleADesStatutsDifferents.html b/packages/ui/src/components/etape/add-etape-avis-popup.stories_snapshots_AvisDeLaMissionAutoriteEnvironnementaleADesStatutsDifferents.html index d3e2fc98bd1d82a47c5083c4f53503d78db287dc..94274f12efa6ba0839a63f9787d1b7e9e3657012 100644 --- a/packages/ui/src/components/etape/add-etape-avis-popup.stories_snapshots_AvisDeLaMissionAutoriteEnvironnementaleADesStatutsDifferents.html +++ b/packages/ui/src/components/etape/add-etape-avis-popup.stories_snapshots_AvisDeLaMissionAutoriteEnvironnementaleADesStatutsDifferents.html @@ -17,7 +17,7 @@ </div> <div class="fr-fieldset__element"> <div class="fr-input-group" style="margin-bottom: 0px;"><label class="fr-label" for="input_271">Date - <!----><span class="fr-hint-text">au format jj/mm/yyyy</span> + <!----><span class="fr-hint-text">au format jj/mm/aaaa</span> <!----> </label><input class="fr-input" name="input_271" id="input_271" required="" type="date" value="2023-01-02"> <!----> diff --git a/packages/ui/src/components/etape/add-etape-avis-popup.stories_snapshots_AvisObligatoireSuppressionDuStatutNonRenseigne.html b/packages/ui/src/components/etape/add-etape-avis-popup.stories_snapshots_AvisObligatoireSuppressionDuStatutNonRenseigne.html index 3f732c5f2ec4b8dad76673910cadb65a27dcd4f2..8db6b881d9c9f3e470763d92e9c1aab1281d4e04 100644 --- a/packages/ui/src/components/etape/add-etape-avis-popup.stories_snapshots_AvisObligatoireSuppressionDuStatutNonRenseigne.html +++ b/packages/ui/src/components/etape/add-etape-avis-popup.stories_snapshots_AvisObligatoireSuppressionDuStatutNonRenseigne.html @@ -17,7 +17,7 @@ </div> <div class="fr-fieldset__element"> <div class="fr-input-group" style="margin-bottom: 0px;"><label class="fr-label" for="input_271">Date - <!----><span class="fr-hint-text">au format jj/mm/yyyy</span> + <!----><span class="fr-hint-text">au format jj/mm/aaaa</span> <!----> </label><input class="fr-input" name="input_271" id="input_271" required="" type="date"> <!----> diff --git a/packages/ui/src/components/etape/add-etape-avis-popup.stories_snapshots_DocumentInitialDejaSauvegarde.html b/packages/ui/src/components/etape/add-etape-avis-popup.stories_snapshots_DocumentInitialDejaSauvegarde.html index a21f4c4b1c5c0884e913b5825bd1a40e42e5d285..251fe5a31affe2893d213fda1090bcf464b4905a 100644 --- a/packages/ui/src/components/etape/add-etape-avis-popup.stories_snapshots_DocumentInitialDejaSauvegarde.html +++ b/packages/ui/src/components/etape/add-etape-avis-popup.stories_snapshots_DocumentInitialDejaSauvegarde.html @@ -17,7 +17,7 @@ </div> <div class="fr-fieldset__element"> <div class="fr-input-group" style="margin-bottom: 0px;"><label class="fr-label" for="input_271">Date - <!----><span class="fr-hint-text">au format jj/mm/yyyy</span> + <!----><span class="fr-hint-text">au format jj/mm/aaaa</span> <!----> </label><input class="fr-input" name="input_271" id="input_271" required="" type="date" value="2023-01-02"> <!----> diff --git a/packages/ui/src/components/etape/add-etape-avis-popup.stories_snapshots_DocumentInitialTemporaire.html b/packages/ui/src/components/etape/add-etape-avis-popup.stories_snapshots_DocumentInitialTemporaire.html index cfe88e47e5995de263dd0b7577408e301d5b80be..411f218f424c9ea593452b9b21962f09ab0416c2 100644 --- a/packages/ui/src/components/etape/add-etape-avis-popup.stories_snapshots_DocumentInitialTemporaire.html +++ b/packages/ui/src/components/etape/add-etape-avis-popup.stories_snapshots_DocumentInitialTemporaire.html @@ -17,7 +17,7 @@ </div> <div class="fr-fieldset__element"> <div class="fr-input-group" style="margin-bottom: 0px;"><label class="fr-label" for="input_271">Date - <!----><span class="fr-hint-text">au format jj/mm/yyyy</span> + <!----><span class="fr-hint-text">au format jj/mm/aaaa</span> <!----> </label><input class="fr-input" name="input_271" id="input_271" required="" type="date" value="2023-01-02"> <!----> diff --git a/packages/ui/src/components/etape/add-etape-avis-popup.stories_snapshots_SansDocumentInitial.html b/packages/ui/src/components/etape/add-etape-avis-popup.stories_snapshots_SansDocumentInitial.html index 27bf245a9c76bcec57c4c89c2a0f5d0b63fe6c33..af729ec331940aa4a7d9683890671c5d97159452 100644 --- a/packages/ui/src/components/etape/add-etape-avis-popup.stories_snapshots_SansDocumentInitial.html +++ b/packages/ui/src/components/etape/add-etape-avis-popup.stories_snapshots_SansDocumentInitial.html @@ -52,7 +52,7 @@ </div> <div class="fr-fieldset__element"> <div class="fr-input-group" style="margin-bottom: 0px;"><label class="fr-label" for="input_271">Date - <!----><span class="fr-hint-text">au format jj/mm/yyyy</span> + <!----><span class="fr-hint-text">au format jj/mm/aaaa</span> <!----> </label><input class="fr-input" name="input_271" id="input_271" required="" type="date"> <!----> diff --git a/packages/ui/src/components/etape/date-type-edit.stories_snapshots_Default.html b/packages/ui/src/components/etape/date-type-edit.stories_snapshots_Default.html index 28dbd972e785fd55cf6f8c46e117c53ea0b2d077..f89dec68de6bd28dcc273f6ea480308b2ef5c0ae 100644 --- a/packages/ui/src/components/etape/date-type-edit.stories_snapshots_Default.html +++ b/packages/ui/src/components/etape/date-type-edit.stories_snapshots_Default.html @@ -1,7 +1,7 @@ <div class="fr-grid-row"> <div class="fr-col-12 fr-col-xl-6"> <div class="fr-input-group" style="margin-bottom: 0px;"><label class="fr-label" for="input_271">Date - <!----><span class="fr-hint-text">au format jj/mm/yyyy</span> + <!----><span class="fr-hint-text">au format jj/mm/aaaa</span> <!----> </label><input class="fr-input" name="input_271" id="input_271" required="" type="date" value="2023-01-01"> <!----> diff --git a/packages/ui/src/components/etape/date-type-edit.stories_snapshots_Loading.html b/packages/ui/src/components/etape/date-type-edit.stories_snapshots_Loading.html index 11cf14b09f82241e71088054aff0045ab0614913..a6eedfd81d02df8ddd1b71b046dc46ef60489b61 100644 --- a/packages/ui/src/components/etape/date-type-edit.stories_snapshots_Loading.html +++ b/packages/ui/src/components/etape/date-type-edit.stories_snapshots_Loading.html @@ -1,7 +1,7 @@ <div class="fr-grid-row"> <div class="fr-col-12 fr-col-xl-6"> <div class="fr-input-group" style="margin-bottom: 0px;"><label class="fr-label" for="input_271">Date - <!----><span class="fr-hint-text">au format jj/mm/yyyy</span> + <!----><span class="fr-hint-text">au format jj/mm/aaaa</span> <!----> </label><input class="fr-input" name="input_271" id="input_271" required="" type="date" value="2023-01-01"> <!----> diff --git a/packages/ui/src/components/etape/date-type-edit.stories_snapshots_WithError.html b/packages/ui/src/components/etape/date-type-edit.stories_snapshots_WithError.html index 706e7a6b62c20e4d7fda01b971e16a0bfc1b667a..4e87cb4ecdd289ecafa4d68a3049d9b81cd9fc11 100644 --- a/packages/ui/src/components/etape/date-type-edit.stories_snapshots_WithError.html +++ b/packages/ui/src/components/etape/date-type-edit.stories_snapshots_WithError.html @@ -1,7 +1,7 @@ <div class="fr-grid-row"> <div class="fr-col-12 fr-col-xl-6"> <div class="fr-input-group" style="margin-bottom: 0px;"><label class="fr-label" for="input_271">Date - <!----><span class="fr-hint-text">au format jj/mm/yyyy</span> + <!----><span class="fr-hint-text">au format jj/mm/aaaa</span> <!----> </label><input class="fr-input" name="input_271" id="input_271" required="" type="date" value="2023-01-01"> <!----> diff --git a/packages/ui/src/components/etape/date-type-edit.stories_snapshots_WithTypeId.html b/packages/ui/src/components/etape/date-type-edit.stories_snapshots_WithTypeId.html index 4e914701727d8aa6ff527be6c229070a7f038c22..1482d1a9081f8c877a4d98a69d2cd570380d452d 100644 --- a/packages/ui/src/components/etape/date-type-edit.stories_snapshots_WithTypeId.html +++ b/packages/ui/src/components/etape/date-type-edit.stories_snapshots_WithTypeId.html @@ -1,7 +1,7 @@ <div class="fr-grid-row"> <div class="fr-col-12 fr-col-xl-6"> <div class="fr-input-group" style="margin-bottom: 0px;"><label class="fr-label" for="input_271">Date - <!----><span class="fr-hint-text">au format jj/mm/yyyy</span> + <!----><span class="fr-hint-text">au format jj/mm/aaaa</span> <!----> </label><input class="fr-input" name="input_271" id="input_271" required="" type="date" value="2023-01-01"> <!----> diff --git a/packages/ui/src/components/etape/date-type-edit.stories_snapshots_WithTypeIdAndStatutId.html b/packages/ui/src/components/etape/date-type-edit.stories_snapshots_WithTypeIdAndStatutId.html index 4e914701727d8aa6ff527be6c229070a7f038c22..1482d1a9081f8c877a4d98a69d2cd570380d452d 100644 --- a/packages/ui/src/components/etape/date-type-edit.stories_snapshots_WithTypeIdAndStatutId.html +++ b/packages/ui/src/components/etape/date-type-edit.stories_snapshots_WithTypeIdAndStatutId.html @@ -1,7 +1,7 @@ <div class="fr-grid-row"> <div class="fr-col-12 fr-col-xl-6"> <div class="fr-input-group" style="margin-bottom: 0px;"><label class="fr-label" for="input_271">Date - <!----><span class="fr-hint-text">au format jj/mm/yyyy</span> + <!----><span class="fr-hint-text">au format jj/mm/aaaa</span> <!----> </label><input class="fr-input" name="input_271" id="input_271" required="" type="date" value="2023-01-01"> <!----> diff --git a/packages/ui/src/components/etape/etape-edit-form.stories_snapshots_Default.html b/packages/ui/src/components/etape/etape-edit-form.stories_snapshots_Default.html index ae584065664233a75c41339d8887076a36ea5f49..06d2d37e95d296b17f7cd89325315e5f85752987 100644 --- a/packages/ui/src/components/etape/etape-edit-form.stories_snapshots_Default.html +++ b/packages/ui/src/components/etape/etape-edit-form.stories_snapshots_Default.html @@ -10,7 +10,7 @@ <div class="fr-grid-row"> <div class="fr-col-12 fr-col-xl-6"> <div class="fr-input-group" style="margin-bottom: 0px;"><label class="fr-label" for="input_271">Date - <!----><span class="fr-hint-text">au format jj/mm/yyyy</span> + <!----><span class="fr-hint-text">au format jj/mm/aaaa</span> <!----> </label><input class="fr-input" name="input_271" id="input_271" required="" type="date" value="2022-02-02"> <!----> diff --git a/packages/ui/src/components/etape/etape-edit-form.stories_snapshots_EtapeConsultationAdministrationsCentrales.html b/packages/ui/src/components/etape/etape-edit-form.stories_snapshots_EtapeConsultationAdministrationsCentrales.html index 218a8d7e9cc825140c5d5f2b8e178212070ed5db..c0dac9688f0a57c187231258c46cecb4a5444587 100644 --- a/packages/ui/src/components/etape/etape-edit-form.stories_snapshots_EtapeConsultationAdministrationsCentrales.html +++ b/packages/ui/src/components/etape/etape-edit-form.stories_snapshots_EtapeConsultationAdministrationsCentrales.html @@ -10,7 +10,7 @@ <div class="fr-grid-row"> <div class="fr-col-12 fr-col-xl-6"> <div class="fr-input-group" style="margin-bottom: 0px;"><label class="fr-label" for="input_271">Date - <!----><span class="fr-hint-text">au format jj/mm/yyyy</span> + <!----><span class="fr-hint-text">au format jj/mm/aaaa</span> <!----> </label><input class="fr-input" name="input_271" id="input_271" required="" type="date" value="2022-02-02"> <!----> diff --git a/packages/ui/src/components/etape/etape-edit-form.stories_snapshots_EtapeDecisionAdministration.html b/packages/ui/src/components/etape/etape-edit-form.stories_snapshots_EtapeDecisionAdministration.html index fe018e7658e0c9bf974b80469a548fdde19e95dd..f2dc21bb336aa1346b061694de708cc6d8fa02e2 100644 --- a/packages/ui/src/components/etape/etape-edit-form.stories_snapshots_EtapeDecisionAdministration.html +++ b/packages/ui/src/components/etape/etape-edit-form.stories_snapshots_EtapeDecisionAdministration.html @@ -10,7 +10,7 @@ <div class="fr-grid-row"> <div class="fr-col-12 fr-col-xl-6"> <div class="fr-input-group" style="margin-bottom: 0px;"><label class="fr-label" for="input_271">Date - <!----><span class="fr-hint-text">au format jj/mm/yyyy</span> + <!----><span class="fr-hint-text">au format jj/mm/aaaa</span> <!----> </label><input class="fr-input" name="input_271" id="input_271" required="" type="date" value="2022-02-02"> <!----> diff --git a/packages/ui/src/components/etape/etape-edit-form.stories_snapshots_EtapeModification.html b/packages/ui/src/components/etape/etape-edit-form.stories_snapshots_EtapeModification.html index 7d6ba046af52d38070e15c5f60949134e55b9e0b..8787232b42191fb642df11d3aa5d264dd155111a 100644 --- a/packages/ui/src/components/etape/etape-edit-form.stories_snapshots_EtapeModification.html +++ b/packages/ui/src/components/etape/etape-edit-form.stories_snapshots_EtapeModification.html @@ -10,7 +10,7 @@ <div class="fr-grid-row"> <div class="fr-col-12 fr-col-xl-6"> <div class="fr-input-group" style="margin-bottom: 0px;"><label class="fr-label" for="input_271">Date - <!----><span class="fr-hint-text">au format jj/mm/yyyy</span> + <!----><span class="fr-hint-text">au format jj/mm/aaaa</span> <!----> </label><input class="fr-input" name="input_271" id="input_271" required="" type="date" value="2022-02-02"> <!----> diff --git a/packages/ui/src/components/etape/etape-edit-form.stories_snapshots_EtapeModificationAvis.html b/packages/ui/src/components/etape/etape-edit-form.stories_snapshots_EtapeModificationAvis.html index 7cd9468f3ad71407f7083c6db5f7f00ef5b47efe..e56bfe773ed1af03e14944d55fa58712d74fed46 100644 --- a/packages/ui/src/components/etape/etape-edit-form.stories_snapshots_EtapeModificationAvis.html +++ b/packages/ui/src/components/etape/etape-edit-form.stories_snapshots_EtapeModificationAvis.html @@ -10,7 +10,7 @@ <div class="fr-grid-row"> <div class="fr-col-12 fr-col-xl-6"> <div class="fr-input-group" style="margin-bottom: 0px;"><label class="fr-label" for="input_271">Date - <!----><span class="fr-hint-text">au format jj/mm/yyyy</span> + <!----><span class="fr-hint-text">au format jj/mm/aaaa</span> <!----> </label><input class="fr-input" name="input_271" id="input_271" required="" type="date" value="2022-02-02"> <!----> diff --git a/packages/ui/src/components/etape/fondamentales-edit.stories_snapshots_ArmJorfONF.html b/packages/ui/src/components/etape/fondamentales-edit.stories_snapshots_ArmJorfONF.html index 7c21f8b30acd41cb58d23ea65508701317c80309..db0758a48496b55ddb00b933ac65cd2ff6b30bf0 100644 --- a/packages/ui/src/components/etape/fondamentales-edit.stories_snapshots_ArmJorfONF.html +++ b/packages/ui/src/components/etape/fondamentales-edit.stories_snapshots_ArmJorfONF.html @@ -24,7 +24,7 @@ </div> </div> <div class="fr-mb-1w"> - <div class="fr-input-group" style="margin-bottom: 0px;"><label class="fr-label" for="input_25">Date de début (optionnel)<span class="fr-hint-text">au format jj/mm/yyyy</span> + <div class="fr-input-group" style="margin-bottom: 0px;"><label class="fr-label" for="input_25">Date de début (optionnel)<span class="fr-hint-text">au format jj/mm/aaaa</span> <!----> </label><input class="fr-input" name="input_25" id="input_25" type="date" value="2022-02-02"> <!----> @@ -32,7 +32,7 @@ <!----> </div> <div class="fr-mb-1w"> - <div class="fr-input-group" style="margin-bottom: 0px;"><label class="fr-label" for="input_772">Date d’échéance (optionnel)<span class="fr-hint-text">au format jj/mm/yyyy</span> + <div class="fr-input-group" style="margin-bottom: 0px;"><label class="fr-label" for="input_772">Date d’échéance (optionnel)<span class="fr-hint-text">au format jj/mm/aaaa</span> <!----> </label><input class="fr-input" name="input_772" id="input_772" type="date"> <!----> diff --git a/packages/ui/src/components/etape/heritage-edit.stories_snapshots_HeritageDisabled.html b/packages/ui/src/components/etape/heritage-edit.stories_snapshots_HeritageDisabled.html index f8705cad3170f0aca9021b7cd53e1c6b238d139f..ed8a11c7ad82e518097fe736a345617c232041ca 100644 --- a/packages/ui/src/components/etape/heritage-edit.stories_snapshots_HeritageDisabled.html +++ b/packages/ui/src/components/etape/heritage-edit.stories_snapshots_HeritageDisabled.html @@ -1,6 +1,6 @@ <div class="fr-mb-1w"> <div class="fr-input-group mb-s" style="margin-bottom: 0px;"><label class="fr-label" for="input_670"> - <!----><span class="fr-hint-text">au format jj/mm/yyyy</span> + <!----><span class="fr-hint-text">au format jj/mm/aaaa</span> <!----> </label><input class="fr-input" name="input_670" id="input_670" required="" type="date"> <!----> diff --git a/packages/ui/src/components/etape/heritage-edit.stories_snapshots_NoHeritage.html b/packages/ui/src/components/etape/heritage-edit.stories_snapshots_NoHeritage.html index c8300b88b263e664ca0c95e5d7dfc32dd84b9930..d2308ba2876007f09b1ab8c158881e5845c35b9c 100644 --- a/packages/ui/src/components/etape/heritage-edit.stories_snapshots_NoHeritage.html +++ b/packages/ui/src/components/etape/heritage-edit.stories_snapshots_NoHeritage.html @@ -1,6 +1,6 @@ <div class="fr-mb-1w"> <div class="fr-input-group mb-s" style="margin-bottom: 0px;"><label class="fr-label" for="input_670"> - <!----><span class="fr-hint-text">au format jj/mm/yyyy</span> + <!----><span class="fr-hint-text">au format jj/mm/aaaa</span> <!----> </label><input class="fr-input" name="input_670" id="input_670" required="" type="date"> <!----> diff --git a/packages/ui/src/components/etape/heritage-edit.stories_snapshots_Optional.html b/packages/ui/src/components/etape/heritage-edit.stories_snapshots_Optional.html index f6b304a3c80d31c6097b7e03dc37a077bb7bee5f..c0492dd7625ae3b2eb3a4304188d024eaf5f4ccd 100644 --- a/packages/ui/src/components/etape/heritage-edit.stories_snapshots_Optional.html +++ b/packages/ui/src/components/etape/heritage-edit.stories_snapshots_Optional.html @@ -1,5 +1,5 @@ <div class="fr-mb-1w"> - <div class="fr-input-group mb-s" style="margin-bottom: 0px;"><label class="fr-label" for="input_670"> (optionnel)<span class="fr-hint-text">au format jj/mm/yyyy</span> + <div class="fr-input-group mb-s" style="margin-bottom: 0px;"><label class="fr-label" for="input_670"> (optionnel)<span class="fr-hint-text">au format jj/mm/aaaa</span> <!----> </label><input class="fr-input" name="input_670" id="input_670" type="date"> <!----> diff --git a/packages/ui/src/components/titre/resultat-mise-en-concurrence.stories_snapshots_Default.html b/packages/ui/src/components/titre/resultat-mise-en-concurrence.stories_snapshots_Default.html index e4f205c296ed5dd904ea1568dd21fa72e727118f..c648ffde28619a0c8461b6c843d6adeea905313d 100644 --- a/packages/ui/src/components/titre/resultat-mise-en-concurrence.stories_snapshots_Default.html +++ b/packages/ui/src/components/titre/resultat-mise-en-concurrence.stories_snapshots_Default.html @@ -2,7 +2,7 @@ <div><a href="/mocked-href" title="Pivot" class="fr-link" aria-label="Pivot">Pivot</a><span> > </span><a href="/mocked-href" title="Octroi" class="fr-link" aria-label="Octroi">Octroi</a></div> <h1 class="fr-mt-4w">Résultat final de la mise en concurrence</h1> <div class="fr-input-group fr-pb-2w" style="margin-bottom: 0px;"><label class="fr-label" for="input_271">Date - <!----><span class="fr-hint-text">au format jj/mm/yyyy</span> + <!----><span class="fr-hint-text">au format jj/mm/aaaa</span> <!----> </label><input class="fr-input" name="input_271" id="input_271" required="" type="date" value="2024-10-16"> <!----> diff --git a/packages/ui/src/components/titre/resultat-mise-en-concurrence.stories_snapshots_Loading.html b/packages/ui/src/components/titre/resultat-mise-en-concurrence.stories_snapshots_Loading.html index 45e8ae7c7880442d04d956c789e3047a22f3f543..ef68976a18dc8cf99b43c769f9a4777518aa7ca8 100644 --- a/packages/ui/src/components/titre/resultat-mise-en-concurrence.stories_snapshots_Loading.html +++ b/packages/ui/src/components/titre/resultat-mise-en-concurrence.stories_snapshots_Loading.html @@ -2,7 +2,7 @@ <div><a href="/mocked-href" title="Pivot" class="fr-link" aria-label="Pivot">Pivot</a><span> > </span><a href="/mocked-href" title="Octroi" class="fr-link" aria-label="Octroi">Octroi</a></div> <h1 class="fr-mt-4w">Résultat final de la mise en concurrence</h1> <div class="fr-input-group fr-pb-2w" style="margin-bottom: 0px;"><label class="fr-label" for="input_271">Date - <!----><span class="fr-hint-text">au format jj/mm/yyyy</span> + <!----><span class="fr-hint-text">au format jj/mm/aaaa</span> <!----> </label><input class="fr-input" name="input_271" id="input_271" required="" type="date" value="2024-10-16"> <!----> diff --git a/packages/ui/src/components/titre/resultat-mise-en-concurrence.stories_snapshots_PerimetreAvecSatelliteEquivalent.html b/packages/ui/src/components/titre/resultat-mise-en-concurrence.stories_snapshots_PerimetreAvecSatelliteEquivalent.html index d2699ace4feef254767d2ee9a28e5036fd31bcf3..bdd3d6c3711b7a6dafd5fe5bea61607db66c1e50 100644 --- a/packages/ui/src/components/titre/resultat-mise-en-concurrence.stories_snapshots_PerimetreAvecSatelliteEquivalent.html +++ b/packages/ui/src/components/titre/resultat-mise-en-concurrence.stories_snapshots_PerimetreAvecSatelliteEquivalent.html @@ -2,7 +2,7 @@ <div><a href="/mocked-href" title="Pivot" class="fr-link" aria-label="Pivot">Pivot</a><span> > </span><a href="/mocked-href" title="Octroi" class="fr-link" aria-label="Octroi">Octroi</a></div> <h1 class="fr-mt-4w">Résultat final de la mise en concurrence</h1> <div class="fr-input-group fr-pb-2w" style="margin-bottom: 0px;"><label class="fr-label" for="input_271">Date - <!----><span class="fr-hint-text">au format jj/mm/yyyy</span> + <!----><span class="fr-hint-text">au format jj/mm/aaaa</span> <!----> </label><input class="fr-input" name="input_271" id="input_271" required="" type="date" value="2024-10-16"> <!----> diff --git a/packages/ui/src/components/titre/resultat-mise-en-concurrence.stories_snapshots_PerimetreSansSatellite.html b/packages/ui/src/components/titre/resultat-mise-en-concurrence.stories_snapshots_PerimetreSansSatellite.html index d2699ace4feef254767d2ee9a28e5036fd31bcf3..bdd3d6c3711b7a6dafd5fe5bea61607db66c1e50 100644 --- a/packages/ui/src/components/titre/resultat-mise-en-concurrence.stories_snapshots_PerimetreSansSatellite.html +++ b/packages/ui/src/components/titre/resultat-mise-en-concurrence.stories_snapshots_PerimetreSansSatellite.html @@ -2,7 +2,7 @@ <div><a href="/mocked-href" title="Pivot" class="fr-link" aria-label="Pivot">Pivot</a><span> > </span><a href="/mocked-href" title="Octroi" class="fr-link" aria-label="Octroi">Octroi</a></div> <h1 class="fr-mt-4w">Résultat final de la mise en concurrence</h1> <div class="fr-input-group fr-pb-2w" style="margin-bottom: 0px;"><label class="fr-label" for="input_271">Date - <!----><span class="fr-hint-text">au format jj/mm/yyyy</span> + <!----><span class="fr-hint-text">au format jj/mm/aaaa</span> <!----> </label><input class="fr-input" name="input_271" id="input_271" required="" type="date" value="2024-10-16"> <!----> diff --git a/packages/ui/src/components/titre/resultat-mise-en-concurrence.stories_snapshots_WithError.html b/packages/ui/src/components/titre/resultat-mise-en-concurrence.stories_snapshots_WithError.html index a38fcfc4e2a36637455b0e54680334608d3bfcdd..602b84dbc76806559aad7fe26a719be16f4f62c7 100644 --- a/packages/ui/src/components/titre/resultat-mise-en-concurrence.stories_snapshots_WithError.html +++ b/packages/ui/src/components/titre/resultat-mise-en-concurrence.stories_snapshots_WithError.html @@ -2,7 +2,7 @@ <div><a href="/mocked-href" title="Pivot" class="fr-link" aria-label="Pivot">Pivot</a><span> > </span><a href="/mocked-href" title="Octroi" class="fr-link" aria-label="Octroi">Octroi</a></div> <h1 class="fr-mt-4w">Résultat final de la mise en concurrence</h1> <div class="fr-input-group fr-pb-2w" style="margin-bottom: 0px;"><label class="fr-label" for="input_271">Date - <!----><span class="fr-hint-text">au format jj/mm/yyyy</span> + <!----><span class="fr-hint-text">au format jj/mm/aaaa</span> <!----> </label><input class="fr-input" name="input_271" id="input_271" required="" type="date" value="2024-10-16"> <!---->