From 7b3091b5b811a5b24e4971d2399087655dbd6b6a Mon Sep 17 00:00:00 2001 From: oni-Sk Date: Fri, 22 Dec 2023 14:59:16 +0100 Subject: [PATCH] Data sur l'utilisation du CEJ par les conseillers milo pour UNML (#1329) --- ...t_structures_pour_taux_penetration_unml.js | 56 -------- .../ajout_agences_milo_sans_conseiller_cej.js | 121 ++++++++++++++++++ 2 files changed, 121 insertions(+), 56 deletions(-) delete mode 100644 scripts/export_structures_pour_taux_penetration_unml.js create mode 100644 scripts/taux-de-penetration/ajout_agences_milo_sans_conseiller_cej.js diff --git a/scripts/export_structures_pour_taux_penetration_unml.js b/scripts/export_structures_pour_taux_penetration_unml.js deleted file mode 100644 index d4acfe820..000000000 --- a/scripts/export_structures_pour_taux_penetration_unml.js +++ /dev/null @@ -1,56 +0,0 @@ -// Import du référentiel de structures tel qu'envoyé par l'UNML -const referentiel_unml = require('./referentiel_unml.json') -const liste_structures_unml = referentiel_unml.Sheet1 -const liste_ids_structures = liste_structures_unml.map( - structure => structure['Code structure'] + 'S00' -) - -// Import des résultats de la requête Metabase -// https://stats.pass-emploi.beta.gouv.fr/question/373-nb-de-conseillers-milo-utilisateurs-dernier-ae-2-mois-par-structure -const structures_avec_conseiller_actif = require('./referentiel_unml_avec_activite.json') -const ids_structures_avec_conseiller_actif = - structures_avec_conseiller_actif.map(structure => structure.structure_id) - -const fs = require('fs') - -async function exportStructuresPourTauxPenetration() { - const structuresPourExportTauxPenetration = [] - - for (let i = 0; i < liste_ids_structures.length; i++) { - let structureAvecActivite = ids_structures_avec_conseiller_actif.includes( - liste_ids_structures[i] - ) - - if (structureAvecActivite) { - structuresPourExportTauxPenetration.push( - structures_avec_conseiller_actif.find( - structure => structure.structure_id === liste_ids_structures[i] - ) - ) - } else { - structuresPourExportTauxPenetration.push({ - structure_id: liste_structures_unml[i]['Code structure'] + 'S00', - nom_region: 'Structure régionale -', - nom_departement: 'Structure départementale -', - code_departement: liste_structures_unml[i]['Code département'], - nom_officiel: liste_structures_unml[i]['Nom officiel structure'], - nom_usuel: liste_structures_unml[i]['Nom usuel structure'], - count: 0 - }) - } - } - - structuresPourExportTauxPenetration.sort((structure1, structure2) => { - return structure1.code_departement < structure2.code_departement ? -1 : 1 - }) - - fs.writeFile( - './structures_pour_taux_penetration.json', - JSON.stringify(structuresPourExportTauxPenetration), - err => { - console.log(err) - } - ) -} - -exportStructuresPourTauxPenetration() diff --git a/scripts/taux-de-penetration/ajout_agences_milo_sans_conseiller_cej.js b/scripts/taux-de-penetration/ajout_agences_milo_sans_conseiller_cej.js new file mode 100644 index 000000000..b7b964910 --- /dev/null +++ b/scripts/taux-de-penetration/ajout_agences_milo_sans_conseiller_cej.js @@ -0,0 +1,121 @@ +const { Sequelize } = require('sequelize') +const sequelize = new Sequelize(DATABASE_URL, { + dialect: 'postgres' +}) + +const referentiel_agences_milo = + require('./referentiel_agences_api_milo.json').Sheet1 + +async function execute() { + const [agencesCej, _metadata] = await sequelize.query(` + SELECT * FROM structure_milo + `) + + /*let agencesNonCejReferentiel = await recupererLesAgencesSansConseillersCej( + agencesCej + ) + ajouterLesInformationsGeographiques(agencesNonCejReferentiel, agencesCej)*/ + await sequelize.transaction(async transaction => { + /*await persisterLesAgencesSansConseillersCej( + agencesNonCejReferentiel, + transaction + )*/ + await persisterLeNomUsuelDansLesAgencesCej(agencesCej, transaction) + }) +} + +execute() + +async function recupererLesAgencesSansConseillersCej(agencesCej) { + return referentiel_agences_milo + .map(agenceMilo => { + return { + id: agenceMilo['Code structure'] + 'S00', + nom_officiel: agenceMilo['Nom officiel structure'], + nom_usuel: agenceMilo['Nom usuel structure'] + } + }) + .filter( + agenceMilo => !agencesCej.map(agence => agence.id).includes(agenceMilo.id) + ) +} + +function ajouterLesInformationsGeographiques( + agencesNonCejReferentiel, + agencesCej +) { + for (let agenceNonCej of agencesNonCejReferentiel) { + const departement = agenceNonCej['Code département'] + const autreAgencesCejMemeDepartement = agencesCej.find( + agenceCej => agenceCej.code_departement === departement + ) + + if (autreAgencesCejMemeDepartement) { + agenceNonCej.codeRegion = autreAgencesCejMemeDepartement.code_region + agenceNonCej.nomRegion = autreAgencesCejMemeDepartement.nom_region + agenceNonCej.codeDepartement = departement + agenceNonCej.nomDepartement = + autreAgencesCejMemeDepartement.nom_departement + agenceNonCej.timezone = autreAgencesCejMemeDepartement.timezone + } else { + agenceNonCej.codeRegion = '-' + agenceNonCej.nomRegion = 'Structure régionale -' + agenceNonCej.codeDepartement = departement + agenceNonCej.nomDepartement = 'Structure départementale -' + agenceNonCej.timezone = '-' + } + } +} + +async function persisterLesAgencesSansConseillersCej( + agencesNonCejReferentiel, + transaction +) { + for (let agenceNonCej of agencesNonCejReferentiel) { + await sequelize.query( + ` + INSERT INTO agence (id, nom_agence, nom_region, code_departement, structure, code_region, nom_departement, timezone, nom_usuel) + VALUES agence (:id, :nom_agence, :nom_region, :code_departement, 'MILO', :code_region, :nom_departement, :timezone, :nom_usuel);`, + { + replacements: { + id: agenceNonCej.id, + nom_agence: agenceNonCej.nom_officiel, + nom_region: agenceNonCej.nomRegion, + code_departement: agenceNonCej.codeDepartement, + code_region: agenceNonCej.codeRegion, + nom_departement: agenceNonCej.nomDepartement, + timezone: agenceNonCej.timezone, + nom_usuel: agenceNonCej.nomUsuel + }, + transaction + } + ) + await sequelize.query( + ` + INSERT INTO structure_milo (id, nom_officiel, nom_usuel, nom_region, code_region, nom_departement, code_departement, timezone) + VALUES structure_milo (:id, :nom_officiel, :nom_usuel, :nom_region, :code_region, :nom_departement, :code_departement, :timezone);`, + { + replacements: { + id: agenceNonCej.id, + nom_officiel: agenceNonCej.nom_officiel, + nom_usuel: agenceNonCej.nom_usuel, + nom_region: agenceNonCej.nomRegion, + code_region: agenceNonCej.codeRegion, + nom_departement: agenceNonCej.nomDepartement, + code_departement: agenceNonCej.codeDepartement, + timezone: agenceNonCej.timezone + }, + transaction + } + ) + } +} + +async function persisterLeNomUsuelDansLesAgencesCej(agencesCej, transaction) { + for (let agenceCej of agencesCej) { + await sequelize.query(`UPDATE agence SET nom_usuel = ? WHERE id = ?;`, { + replacements: [agenceCej.nom_usuel, agenceCej.id], + transaction + }) + } +}