From 7a6bb4bafe0ce625024229965f15550886b7c071 Mon Sep 17 00:00:00 2001 From: "Paul G." Date: Wed, 14 Aug 2024 14:52:36 +0200 Subject: [PATCH] fix: mise a jour des donnees indicateurs organismes (#3809) Co-authored-by: Paul Gaucher --- .../indicateurs/indicateurs.actions.ts | 12 ++++++++---- .../telechargementListeNomLogs.actions.ts | 13 ++++++++++++- .../validationSchema.test.ts.snap | 4 ++++ server/src/http/server.ts | 19 +++++++++++++++++-- shared/constants/indicateurs.ts | 16 ++++++++++++++++ shared/models/data/organismes.model.ts | 7 ------- .../data/telechargementListesNomLogs.model.ts | 8 ++++++-- 7 files changed, 63 insertions(+), 16 deletions(-) diff --git a/server/src/common/actions/indicateurs/indicateurs.actions.ts b/server/src/common/actions/indicateurs/indicateurs.actions.ts index 486837a4f..6d91ac0a3 100644 --- a/server/src/common/actions/indicateurs/indicateurs.actions.ts +++ b/server/src/common/actions/indicateurs/indicateurs.actions.ts @@ -783,18 +783,22 @@ async function getOrganismeRestriction(organismeId?: ObjectId) { export const getIndicateursForRelatedOrganismes = async (organismeId: ObjectId, indicateurType: string) => { const org = await organismesDb().findOne({ _id: organismeId }); + const organismesFormateurs = org?.organismesFormateurs; + if (!organismesFormateurs) { + return []; + } switch (indicateurType) { case ORGANISME_INDICATEURS_TYPE.SANS_EFFECTIFS: - return org?.organismesFormateurs?.filter( + return organismesFormateurs.filter( ({ last_transmission_date }) => !hasRecentTransmissions(last_transmission_date) ); case ORGANISME_INDICATEURS_TYPE.NATURE_INCONNUE: - return org?.organismesFormateurs?.filter(({ nature }) => nature === "inconnue"); + return organismesFormateurs.filter(({ nature }) => nature === "inconnue"); case ORGANISME_INDICATEURS_TYPE.SIRET_FERME: - return org?.organismesFormateurs?.filter(({ ferme }) => !!ferme); + return organismesFormateurs.filter(({ ferme }) => !!ferme); case ORGANISME_INDICATEURS_TYPE.UAI_NON_DETERMINE: - return org?.organismesFormateurs?.filter(({ uai }) => !uai); + return organismesFormateurs.filter(({ uai }) => !uai); default: return []; } diff --git a/server/src/common/actions/telechargementListeNomLogs.actions.ts b/server/src/common/actions/telechargementListeNomLogs.actions.ts index f2b87469f..d1b49c7dd 100644 --- a/server/src/common/actions/telechargementListeNomLogs.actions.ts +++ b/server/src/common/actions/telechargementListeNomLogs.actions.ts @@ -3,7 +3,18 @@ import { ObjectId } from "mongodb"; import { telechargementListesNominativesLogsDb } from "@/common/model/collections"; export const createTelechargementListeNomLog = async ( - type: "apprenant" | "apprenti" | "inscritSansContrat" | "rupturant" | "abandon" | "inconnu" | "affelnet", + type: + | "apprenant" + | "apprenti" + | "inscritSansContrat" + | "rupturant" + | "abandon" + | "inconnu" + | "affelnet" + | "organismes_sans_effectifs" + | "organismes_nature_inconnue" + | "organismes_siret_ferme" + | "organismes_uai_non_determine", elementList: string[], date: Date, userId: ObjectId, diff --git a/server/src/common/mongodb/__snapshots__/validationSchema.test.ts.snap b/server/src/common/mongodb/__snapshots__/validationSchema.test.ts.snap index 2253c3930..feca20393 100644 --- a/server/src/common/mongodb/__snapshots__/validationSchema.test.ts.snap +++ b/server/src/common/mongodb/__snapshots__/validationSchema.test.ts.snap @@ -12810,6 +12810,10 @@ exports[`validation-schema should create validation schema for telechargementLis "rupturant", "abandon", "inconnu", + "organismes_sans_effectifs", + "organismes_nature_inconnue", + "organismes_siret_ferme", + "organismes_uai_non_determine", "affelnet", ], }, diff --git a/server/src/http/server.ts b/server/src/http/server.ts index 21888e359..a73821fa1 100644 --- a/server/src/http/server.ts +++ b/server/src/http/server.ts @@ -9,7 +9,13 @@ import express, { Application } from "express"; import Joi from "joi"; import { ObjectId } from "mongodb"; import passport from "passport"; -import { typesEffectifNominatif, CODE_POSTAL_REGEX, zEffectifArchive, SOURCE_APPRENANT } from "shared"; +import { + typesEffectifNominatif, + CODE_POSTAL_REGEX, + zEffectifArchive, + SOURCE_APPRENANT, + typesOrganismesIndicateurs, +} from "shared"; import swaggerUi from "swagger-ui-express"; import { z } from "zod"; @@ -531,7 +537,16 @@ function setupRoutes(app: Application) { .get( "/indicateurs/organismes/:type", returnResult(async (req, res) => { - return await getIndicateursForRelatedOrganismes(res.locals.organismeId, req.params.type); + const indicateurs = await getIndicateursForRelatedOrganismes(res.locals.organismeId, req.params.type); + const type = await z.enum(typesOrganismesIndicateurs).parseAsync(req.params.type); + await createTelechargementListeNomLog( + `organismes_${type}`, + indicateurs.map(({ _id }) => (_id ? _id.toString() : "")), + new Date(), + req.user._id, + res.locals.organismeId + ); + return indicateurs; }) ) .get( diff --git a/shared/constants/indicateurs.ts b/shared/constants/indicateurs.ts index fe8021a43..39083c240 100644 --- a/shared/constants/indicateurs.ts +++ b/shared/constants/indicateurs.ts @@ -8,3 +8,19 @@ export const typesEffectifNominatif = [ ] as const; export type TypeEffectifNominatif = (typeof typesEffectifNominatif)[number]; + +export const ORGANISME_INDICATEURS_TYPE = { + SANS_EFFECTIFS: "sans_effectifs", + NATURE_INCONNUE: "nature_inconnue", + SIRET_FERME: "siret_ferme", + UAI_NON_DETERMINE: "uai_non_determine", +}; + +export const typesOrganismesIndicateurs = [ + ORGANISME_INDICATEURS_TYPE.SANS_EFFECTIFS as "sans_effectifs", + ORGANISME_INDICATEURS_TYPE.NATURE_INCONNUE as "nature_inconnue", + ORGANISME_INDICATEURS_TYPE.SIRET_FERME as "siret_ferme", + ORGANISME_INDICATEURS_TYPE.UAI_NON_DETERMINE as "uai_non_determine", +] as const; + +export type TypeOrganismesIndicateurs = (typeof typesOrganismesIndicateurs)[number]; diff --git a/shared/models/data/organismes.model.ts b/shared/models/data/organismes.model.ts index 57319a91d..3d6e8952a 100644 --- a/shared/models/data/organismes.model.ts +++ b/shared/models/data/organismes.model.ts @@ -22,13 +22,6 @@ export const UAI_INCONNUE = "non déterminée"; export const UAI_INCONNUE_TAG_FORMAT = UAI_INCONNUE.toUpperCase(); export const UAI_INCONNUE_CAPITALIZE = `${UAI_INCONNUE.charAt(0).toUpperCase()}${UAI_INCONNUE.slice(1)}`; -export const ORGANISME_INDICATEURS_TYPE = { - SANS_EFFECTIFS: "SANS_EFFECTIFS", - NATURE_INCONNUE: "NATURE_INCONNUE", - SIRET_FERME: "SIRET_FERME", - UAI_NON_DETERMINE: "UAI_NON_DETERMINE", -}; - const relationOrganismeSchema = z .object({ // infos référentiel diff --git a/shared/models/data/telechargementListesNomLogs.model.ts b/shared/models/data/telechargementListesNomLogs.model.ts index df50db2fd..98cae2b4c 100644 --- a/shared/models/data/telechargementListesNomLogs.model.ts +++ b/shared/models/data/telechargementListesNomLogs.model.ts @@ -2,13 +2,17 @@ import type { CreateIndexesOptions, IndexSpecification } from "mongodb"; import { z } from "zod"; import { zObjectId } from "zod-mongodb-schema"; -import { typesEffectifNominatif } from "../../constants"; +import { typesEffectifNominatif, typesOrganismesIndicateurs } from "../../constants"; const collectionName = "telechargementListeNomLogs"; const indexes: [IndexSpecification, CreateIndexesOptions][] = []; -const extendedTypesEffectifNominatif = [...typesEffectifNominatif, "affelnet"] as const; +export const extendedTypesEffectifNominatif = [ + ...typesEffectifNominatif, + ...typesOrganismesIndicateurs.map((type) => `organismes_${type}`), + "affelnet", +] as const; export const zTelechargementListeNomLogs = z.object({ _id: zObjectId.describe("Identifiant MongoDB du log"),