From 1822d47d3958810af42328713c32be9365a55314 Mon Sep 17 00:00:00 2001 From: Ananda Date: Wed, 7 Jun 2023 09:19:16 +0200 Subject: [PATCH] feat: ajout d'un widget d'erreur (#194) * feat: ajout d'un widget d'erreur --- server/src/http/errors.js | 6 + .../src/http/routes/certificationsRoutes.js | 72 ++-- server/src/http/routes/formationsRoutes.js | 49 +-- server/src/http/routes/regionalesRoutes.js | 71 ++-- server/src/http/routes/swagger.yml | 10 +- server/src/http/utils/responseUtils.js | 63 ++- server/src/http/utils/validators.js | 2 +- server/src/http/widget/seuils.js | 77 ---- .../widget/templates/common/variables.ejs | 39 ++ .../dsfr/certification-horizontal.svg.ejs | 12 +- .../dsfr/certification-vertical.svg.ejs | 20 +- .../templates/dsfr/cfd-horizontal.svg.ejs | 81 +++- .../templates/dsfr/cfd-vertical.svg.ejs | 89 +++- .../{error.svg.ejs => error-empty.svg.ejs} | 0 .../templates/dsfr/error-horizontal.svg.ejs | 61 +++ .../templates/dsfr/error-vertical.svg.ejs | 66 +++ .../dsfr/formation-horizontal.svg.ejs | 4 +- .../templates/dsfr/formation-vertical.svg.ejs | 10 +- .../http/widget/templates/dsfr/variables.ejs | 44 +- .../lba/certification-horizontal.svg.ejs | 43 +- .../lba/certification-vertical.svg.ejs | 42 +- .../templates/lba/cfd-horizontal.svg.ejs | 204 +++++---- .../widget/templates/lba/cfd-vertical.svg.ejs | 204 +++++---- .../{error.svg.ejs => error-empty.svg.ejs} | 0 .../templates/lba/error-horizontal.svg.ejs | 38 ++ .../templates/lba/error-vertical.svg.ejs | 46 ++ .../lba/formation-horizontal.svg.ejs | 40 +- .../templates/lba/formation-vertical.svg.ejs | 41 +- .../http/widget/templates/lba/variables.ejs | 47 ++- server/src/http/widget/templates/templates.js | 16 +- server/src/http/widget/widget.js | 20 +- server/tests/common/widget-test.js | 34 -- .../certifications/12345678_23830024202.svg | 12 +- .../12345678_23830024202_apprentissage.svg | 6 +- .../12345678_23830024202_pro.svg | 6 +- .../dsfr/certifications/23830024203.svg | 394 +++++++++--------- .../certifications/23830024203_filieres.svg | 37 +- .../widgets/dsfr/certifications/error.svg | 167 +++++++- .../dsfr/certifications/error_empty.svg | 2 + .../dsfr/formations/0751234J-1022105.svg | 2 +- .../formations/0751234J-1022105_data_0.svg | 2 +- .../0751234J-1022105_horizontal.svg | 2 +- .../0751234J-1022105_one_data_horizontal.svg | 2 +- .../formations/0751234J-1022105_vertical.svg | 2 +- .../widgets/dsfr/formations/error.svg | 167 +++++++- .../widgets/dsfr/formations/error_empty.svg | 2 + .../dsfr/regionales/12345678_filiere.svg | 37 +- .../widgets/dsfr/regionales/23830024203.svg | 23 +- .../widgets/dsfr/regionales/error.svg | 168 +++++++- .../widgets/dsfr/regionales/error_empty.svg | 2 + .../certifications/12345678_23830024202.svg | 121 +++--- .../lba/certifications/23830024203.svg | 284 +++++++------ .../certifications/23830024203_filieres.svg | 121 +++--- .../widgets/lba/certifications/error.svg | 114 ++++- .../lba/formations/0751234J-1022105.svg | 15 +- .../formations/0751234J-1022105_data_0.svg | 15 +- .../0751234J-1022105_horizontal.svg | 12 +- .../0751234J-1022105_one_data_horizontal.svg | 20 +- .../formations/0751234J-1022105_vertical.svg | 23 +- .../fixtures/widgets/lba/formations/error.svg | 114 ++++- .../lba/regionales/12345678_filiere.svg | 120 +++--- .../widgets/lba/regionales/23830024203.svg | 14 +- .../fixtures/widgets/lba/regionales/error.svg | 115 ++++- .../tests/http/certificationsRoutes-test.js | 96 ++++- server/tests/http/formationsRoutes-test.js | 70 +++- server/tests/http/regionalesRoutes-test.js | 104 ++++- 66 files changed, 2697 insertions(+), 1245 deletions(-) delete mode 100644 server/src/http/widget/seuils.js create mode 100644 server/src/http/widget/templates/common/variables.ejs rename server/src/http/widget/templates/dsfr/{error.svg.ejs => error-empty.svg.ejs} (100%) create mode 100644 server/src/http/widget/templates/dsfr/error-horizontal.svg.ejs create mode 100644 server/src/http/widget/templates/dsfr/error-vertical.svg.ejs rename server/src/http/widget/templates/lba/{error.svg.ejs => error-empty.svg.ejs} (100%) create mode 100644 server/src/http/widget/templates/lba/error-horizontal.svg.ejs create mode 100644 server/src/http/widget/templates/lba/error-vertical.svg.ejs create mode 100644 server/tests/fixtures/widgets/dsfr/certifications/error_empty.svg create mode 100644 server/tests/fixtures/widgets/dsfr/formations/error_empty.svg create mode 100644 server/tests/fixtures/widgets/dsfr/regionales/error_empty.svg diff --git a/server/src/http/errors.js b/server/src/http/errors.js index 38dbfceb..be6fc8b9 100644 --- a/server/src/http/errors.js +++ b/server/src/http/errors.js @@ -16,8 +16,14 @@ ErrorNoDataForMillesime.prototype = Boom.notFound(`Pas de données pour le mill export function ErrorCertificationNotFound() {} ErrorCertificationNotFound.prototype = Boom.notFound("Certification inconnue"); +export function ErrorCertificationsNotFound() {} +ErrorCertificationsNotFound.prototype = Boom.notFound("Certifications inconnues"); + export function ErrorFormationNotFound() {} ErrorFormationNotFound.prototype = Boom.notFound("Formation inconnue"); export function ErrorRegionaleNotFound() {} ErrorRegionaleNotFound.prototype = Boom.notFound("Pas de données disponibles"); + +export function ErrorNoDataAvailable() {} +ErrorNoDataAvailable.prototype = Boom.notFound("Données non disponibles"); diff --git a/server/src/http/routes/certificationsRoutes.js b/server/src/http/routes/certificationsRoutes.js index 6902e00b..9861d170 100644 --- a/server/src/http/routes/certificationsRoutes.js +++ b/server/src/http/routes/certificationsRoutes.js @@ -7,7 +7,13 @@ import * as validators from "../utils/validators.js"; import { arrayOf, validate } from "../utils/validators.js"; import { checkApiKey } from "../middlewares/authMiddleware.js"; import { formatMillesime } from "../utils/formatters.js"; -import { addCsvHeaders, addJsonHeaders, sendFilieresStats, sendStats, sendErrorSvg } from "../utils/responseUtils.js"; +import { + addCsvHeaders, + addJsonHeaders, + sendFilieresStats, + sendStats, + sendImageOnError, +} from "../utils/responseUtils.js"; import { findCodeFormationDiplome } from "../../common/bcn.js"; import { getLastMillesimes, transformDisplayStat } from "../../common/stats.js"; import { getStatsAsColumns } from "../../common/utils/csvUtils.js"; @@ -65,7 +71,7 @@ export default () => { router.get( "/api/inserjeunes/certifications/:codes_certifications.:ext?", tryCatch(async (req, res) => { - const { codes_certifications, millesime, vue, imageOnError, ...options } = await validate( + const { codes_certifications, millesime, vue, ...options } = await validate( { ...req.params, ...req.query }, { codes_certifications: arrayOf(Joi.string().required()).default([]).min(1), @@ -77,40 +83,46 @@ export default () => { if (vue === "filieres" || codes_certifications.length > 1) { const cfd = await findCodeFormationDiplome(codes_certifications); - const filieresStats = mapValues( - await CertificationsRepository.getFilieresStats({ - code_formation_diplome: cfd, - millesime, - }), - transformDisplayStat() + + const filieresStats = cfd + ? mapValues( + await CertificationsRepository.getFilieresStats({ + code_formation_diplome: cfd, + millesime, + }), + transformDisplayStat() + ) + : {}; + + return sendImageOnError( + async () => await sendFilieresStats(filieresStats, res, options), + res, + { type: "certifications" }, + options ); - return sendFilieresStats(filieresStats, res, options); } - try { - const code_certification = codes_certifications[0]; - const exist = await CertificationsRepository.exist({ code_certification }); - if (!exist) { - throw new ErrorCertificationNotFound(); - } - - const result = await CertificationsRepository.find({ code_certification, millesime }); - if (!result) { - const millesimesAvailable = await CertificationsRepository.findMillesime({ code_certification }); - throw new ErrorNoDataForMillesime(millesime, millesimesAvailable); - } + return sendImageOnError( + async () => { + const code_certification = codes_certifications[0]; + const exist = await CertificationsRepository.exist({ code_certification }); + if (!exist) { + throw new ErrorCertificationNotFound(); + } - const stats = transformDisplayStat()(result); - return sendStats("certification", stats, res, options); - } catch (err) { - if (imageOnError) { - if (err instanceof ErrorCertificationNotFound || err instanceof ErrorNoDataForMillesime) { - return sendErrorSvg(res, options); + const result = await CertificationsRepository.find({ code_certification, millesime }); + if (!result) { + const millesimesAvailable = await CertificationsRepository.findMillesime({ code_certification }); + throw new ErrorNoDataForMillesime(millesime, millesimesAvailable); } - } - throw err; - } + const stats = transformDisplayStat()(result); + return sendStats("certification", stats, res, options); + }, + res, + { type: "certifications" }, + options + ); }) ); diff --git a/server/src/http/routes/formationsRoutes.js b/server/src/http/routes/formationsRoutes.js index 1261313d..398bc477 100644 --- a/server/src/http/routes/formationsRoutes.js +++ b/server/src/http/routes/formationsRoutes.js @@ -4,7 +4,7 @@ import Joi from "joi"; import * as validators from "../utils/validators.js"; import { arrayOf, validate } from "../utils/validators.js"; import { checkApiKey } from "../middlewares/authMiddleware.js"; -import { addCsvHeaders, addJsonHeaders, sendStats, sendErrorSvg } from "../utils/responseUtils.js"; +import { addCsvHeaders, addJsonHeaders, sendStats, sendImageOnError } from "../utils/responseUtils.js"; import { formatMillesime } from "../utils/formatters.js"; import { compose, transformIntoCSV, transformIntoJSON } from "oleoduc"; import { getStatsAsColumns } from "../../common/utils/csvUtils.js"; @@ -76,7 +76,7 @@ export default () => { router.get( "/api/inserjeunes/formations/:uai-:code_certification.:ext?", tryCatch(async (req, res) => { - const { uai, code_certification, millesime, direction, theme, ext, imageOnError } = await validate( + const { uai, code_certification, millesime, ...options } = await validate( { ...req.params, ...req.query }, { uai: Joi.string() @@ -88,34 +88,31 @@ export default () => { } ); - try { - const exist = await FormationsRepository.exist({ uai, code_certification }); - if (!exist) { - throw new ErrorFormationNotFound(); - } - - const result = await FormationsRepository.find({ - uai, - code_certification, - millesime: formatMillesime(millesime), - }); + return sendImageOnError( + async () => { + const exist = await FormationsRepository.exist({ uai, code_certification }); + if (!exist) { + throw new ErrorFormationNotFound(); + } - if (!result) { - const millesimesAvailable = await FormationsRepository.findMillesime({ uai, code_certification }); - throw new ErrorNoDataForMillesime(millesime, millesimesAvailable); - } + const result = await FormationsRepository.find({ + uai, + code_certification, + millesime: formatMillesime(millesime), + }); - const stats = transformDisplayStat()(result); - return sendStats("formation", stats, res, { direction, theme, ext }); - } catch (err) { - if (imageOnError) { - if (err instanceof ErrorFormationNotFound || err instanceof ErrorNoDataForMillesime) { - return sendErrorSvg(res, { direction, theme, ext }); + if (!result) { + const millesimesAvailable = await FormationsRepository.findMillesime({ uai, code_certification }); + throw new ErrorNoDataForMillesime(millesime, millesimesAvailable); } - } - throw err; - } + const stats = transformDisplayStat()(result); + return sendStats("formation", stats, res, options); + }, + res, + { type: "formations" }, + options + ); }) ); diff --git a/server/src/http/routes/regionalesRoutes.js b/server/src/http/routes/regionalesRoutes.js index 8daf4f9e..5c56d307 100644 --- a/server/src/http/routes/regionalesRoutes.js +++ b/server/src/http/routes/regionalesRoutes.js @@ -7,7 +7,13 @@ import { tryCatch } from "../middlewares/tryCatchMiddleware.js"; import * as validators from "../utils/validators.js"; import { validate } from "../utils/validators.js"; import { checkApiKey } from "../middlewares/authMiddleware.js"; -import { addCsvHeaders, addJsonHeaders, sendFilieresStats, sendStats, sendErrorSvg } from "../utils/responseUtils.js"; +import { + addCsvHeaders, + addJsonHeaders, + sendFilieresStats, + sendStats, + sendImageOnError, +} from "../utils/responseUtils.js"; import { findCodeFormationDiplome } from "../../common/bcn.js"; import { getLastMillesimesFormations, transformDisplayStat } from "../../common/stats.js"; import { getStatsAsColumns } from "../../common/utils/csvUtils.js"; @@ -95,7 +101,7 @@ export default () => { router.get( "/api/inserjeunes/regionales/:region/certifications/:code_certification.:ext?", tryCatch(async (req, res) => { - const { region, code_certification, millesime, vue, imageOnError, ...options } = await validate( + const { region, code_certification, millesime, vue, ...options } = await validate( { ...req.params, ...req.query }, { ...validators.region(), @@ -108,40 +114,45 @@ export default () => { if (vue === "filieres") { const cfd = await findCodeFormationDiplome(code_certification); - const filieresStats = mapValues( - await RegionalesRepository.getFilieresStats({ - code_formation_diplome: cfd, - millesime, - region, - }), - transformDisplayStat() + const filieresStats = cfd + ? mapValues( + await RegionalesRepository.getFilieresStats({ + code_formation_diplome: cfd, + millesime, + region, + }), + transformDisplayStat() + ) + : {}; + + return sendImageOnError( + async () => await sendFilieresStats(filieresStats, res, options), + res, + { type: "regionales", regionCode: region }, + options ); - return sendFilieresStats(filieresStats, res, options); } - try { - const exist = await RegionalesRepository.exist({ region, code_certification }); - if (!exist) { - throw new ErrorRegionaleNotFound(); - } - - const result = await RegionalesRepository.find({ region, code_certification, millesime }); - if (!result) { - const millesimesAvailable = await RegionalesRepository.findMillesime({ region, code_certification }); - throw new ErrorNoDataForMillesime(millesime, millesimesAvailable); - } + return sendImageOnError( + async () => { + const exist = await RegionalesRepository.exist({ region, code_certification }); + if (!exist) { + throw new ErrorRegionaleNotFound(); + } - const stats = transformDisplayStat()(result); - return sendStats("certification", stats, res, options); - } catch (err) { - if (imageOnError) { - if (err instanceof ErrorRegionaleNotFound || err instanceof ErrorNoDataForMillesime) { - return sendErrorSvg(res, options); + const result = await RegionalesRepository.find({ region, code_certification, millesime }); + if (!result) { + const millesimesAvailable = await RegionalesRepository.findMillesime({ region, code_certification }); + throw new ErrorNoDataForMillesime(millesime, millesimesAvailable); } - } - throw err; - } + const stats = transformDisplayStat()(result); + return sendStats("certification", stats, res, options); + }, + res, + { type: "regionales", regionCode: region }, + options + ); }) ); diff --git a/server/src/http/routes/swagger.yml b/server/src/http/routes/swagger.yml index 4aa98c17..03654f5c 100644 --- a/server/src/http/routes/swagger.yml +++ b/server/src/http/routes/swagger.yml @@ -412,12 +412,16 @@ components: imageOnError: name: imageOnError - description: "Retourne une image en cas d'erreur 404" + description: | + Retourne une image en cas d'erreur 404 + * true : retourne une image + * false : retourne le message d'erreur + * empty : retourne une image de type pixel vide in: query required: false schema: - type: boolean - default: "" + type: string + enum: [ "true", "false", "empty"] # Path parameters uai: diff --git a/server/src/http/utils/responseUtils.js b/server/src/http/utils/responseUtils.js index eb72b714..3f3aae0e 100644 --- a/server/src/http/utils/responseUtils.js +++ b/server/src/http/utils/responseUtils.js @@ -1,8 +1,16 @@ import { DateTime } from "luxon"; import { buildWidget, isWidgetAvailable, prepareStatsForWidget } from "../widget/widget.js"; -import Boom from "boom"; import { buildDescription, buildDescriptionFiliere } from "../../common/stats.js"; import { isEmpty } from "lodash-es"; +import { findRegionByCode } from "../../common/regions.js"; +import { + ErrorRegionaleNotFound, + ErrorNoDataForMillesime, + ErrorFormationNotFound, + ErrorCertificationNotFound, + ErrorNoDataAvailable, + ErrorCertificationsNotFound, +} from "../errors.js"; export function addJsonHeaders(res) { res.setHeader("Content-Type", `application/json`); @@ -19,8 +27,12 @@ export function sendSvg(res, content) { return res.status(200).send(content); } -export async function sendErrorSvg(res, options) { - return sendSvg(res, await buildWidget("error", {}, options)); +export async function sendErrorSvgEmpty(res, options = {}) { + return sendSvg(res, await buildWidget("errorEmpty", {}, options)); +} + +export async function sendErrorSvg(res, data = {}, options = {}) { + return sendSvg(res, await buildWidget("error", data, options)); } export async function sendStats(type, stats, res, options = {}) { @@ -32,7 +44,7 @@ export async function sendStats(type, stats, res, options = {}) { return res.json({ ...stats, _meta: metadata }); } else { if (!isWidgetAvailable(stats)) { - throw Boom.notFound("Données non disponibles"); + throw new ErrorNoDataAvailable(); } const widget = await buildWidget( @@ -54,7 +66,7 @@ export async function sendFilieresStats(filieresStats, res, options = {}) { const { ext } = options; if (isEmpty(filieresStats)) { - throw Boom.notFound("Certifications inconnues"); + throw new ErrorCertificationsNotFound(); } if (ext !== "svg") { @@ -62,7 +74,7 @@ export async function sendFilieresStats(filieresStats, res, options = {}) { } else { const { pro, apprentissage } = filieresStats; if (!isWidgetAvailable(pro) && !isWidgetAvailable(apprentissage)) { - throw Boom.notFound("Données non disponibles"); + throw new ErrorNoDataAvailable(); } const { direction, theme } = options; @@ -76,6 +88,10 @@ export async function sendFilieresStats(filieresStats, res, options = {}) { pro: pro && prepareStatsForWidget(pro), apprentissage: apprentissage && prepareStatsForWidget(apprentissage), }, + exist: { + pro: !!pro, + apprentissage: !!apprentissage, + }, description, millesime: validFiliere.millesime, region: validFiliere.region, @@ -87,3 +103,38 @@ export async function sendFilieresStats(filieresStats, res, options = {}) { return res.status(200).send(widget); } } + +export async function sendImageOnError(cb, res, data = {}, options = { imageOnError: "true" }) { + const { imageOnError = "true", ext } = options; + const errorsToRescue = [ + ErrorRegionaleNotFound, + ErrorFormationNotFound, + ErrorCertificationNotFound, + ErrorCertificationsNotFound, + ErrorNoDataForMillesime, + ErrorNoDataAvailable, + ]; + + try { + return await cb(); + } catch (err) { + if (imageOnError !== "false" && ext === "svg") { + if (errorsToRescue.some((error) => err instanceof error)) { + if (imageOnError === "empty") { + return sendErrorSvgEmpty(res, options); + } + + return sendErrorSvg( + res, + { + ...data, + ...(data.regionCode ? { region: findRegionByCode(data.regionCode) } : {}), + }, + options + ); + } + } + + throw err; + } +} diff --git a/server/src/http/utils/validators.js b/server/src/http/utils/validators.js index 753e896b..1bc9b93a 100644 --- a/server/src/http/utils/validators.js +++ b/server/src/http/utils/validators.js @@ -64,7 +64,7 @@ export function svg() { direction: Joi.string().valid("horizontal", "vertical"), theme: Joi.string().valid("dsfr", "lba"), ext: Joi.string().valid("svg"), - imageOnError: Joi.boolean().default(false), + imageOnError: Joi.string().empty(["", null]).valid("true", "false", "empty").default("false"), }; } export function vues() { diff --git a/server/src/http/widget/seuils.js b/server/src/http/widget/seuils.js deleted file mode 100644 index b081fc9e..00000000 --- a/server/src/http/widget/seuils.js +++ /dev/null @@ -1,77 +0,0 @@ -const seuils = [ - { - statsName: "taux_en_emploi_6_mois", - filiere: "pro", - diplome: "3", //CAP - niveaux: [ - { niveau: "danger", min: 0, max: 9 }, - { niveau: "warning", min: 10, max: 49 }, - { niveau: "success", min: 50, max: 100 }, - ], - }, - { - statsName: "taux_en_emploi_6_mois", - filiere: "pro", - diplome: "4", //BAC - niveaux: [ - { niveau: "danger", min: 0, max: 14 }, - { niveau: "warning", min: 15, max: 49 }, - { niveau: "success", min: 50, max: 100 }, - ], - }, - { - statsName: "taux_en_emploi_6_mois", - filiere: "pro", - diplome: "5", //BTS - niveaux: [ - { niveau: "danger", min: 0, max: 24 }, - { niveau: "warning", min: 25, max: 49 }, - { niveau: "success", min: 50, max: 100 }, - ], - }, - - { - statsName: "taux_en_emploi_6_mois", - filiere: "apprentissage", - diplome: "3", //CAP - niveaux: [ - { niveau: "danger", min: 0, max: 24 }, - { niveau: "warning", min: 25, max: 49 }, - { niveau: "success", min: 50, max: 100 }, - ], - }, - { - statsName: "taux_en_emploi_6_mois", - filiere: "apprentissage", - diplome: "4", //BAC - niveaux: [ - { niveau: "danger", min: 0, max: 29 }, - { niveau: "warning", min: 30, max: 49 }, - { niveau: "success", min: 50, max: 100 }, - ], - }, - { - statsName: "taux_en_emploi_6_mois", - filiere: "apprentissage", - diplome: "5", //BTS - niveaux: [ - { niveau: "danger", min: 0, max: 34 }, - { niveau: "warning", min: 35, max: 49 }, - { niveau: "success", min: 50, max: 100 }, - ], - }, -]; - -export function findSeuil(stats, name) { - return ( - seuils.find((s) => { - return s.statsName === name && s.diplome === stats.diplome.code && s.filiere === stats.filiere; - }) || { - //Defaults - niveaux: [ - { min: 0, max: 25, niveau: "warning" }, - { min: 50, max: 100, niveau: "success" }, - ], - } - ); -} diff --git a/server/src/http/widget/templates/common/variables.ejs b/server/src/http/widget/templates/common/variables.ejs new file mode 100644 index 00000000..bfaaabed --- /dev/null +++ b/server/src/http/widget/templates/common/variables.ejs @@ -0,0 +1,39 @@ +<%_ + +nbIndicateur=3; +nbIndicateurPro=3; +nbIndicateurApprentissage=3; + +hasPro=Object.values(stats?.pro || {}).length > 0; +hasApprentissage=Object.values(stats?.apprentissage || {}).length > 0; + +filiereProDesc="Pour la voie scolaire"; +filiereApprentissageDesc="Pour la voie apprentissage"; + +detailVueEtablissement="Les chiffres pour cet établissement"; +detailVueNationale="Les chiffres au niveau national"; + +regionDesc=[`Les chiffres pour la région`,`${region ? region.nom : ''}`]; + +millesimeText = millesime && millesime.length == 9 ? millesime.split('_').join(' à ') : millesime; +about=`*Données issues du dispositif InserJeunes${millesime ? ' promotion ' + millesimeText : ''}`; +about_short=[`*Données issues du dispositif InserJeunes`, `${millesime ? ' promotion ' + millesimeText : ''}`]; + +title=[`Que deviennent les`, `apprenants après cette`, `formation ?`]; + +unavailable="Nous sommes désolés mais nous n'avons aucune information disponible pour cette formation."; +unavailablePro="Nous sommes désolés mais nous n'avons aucune information disponible pour la voie scolaire."; +unavailableApprentissage="Nous sommes désolés mais nous n'avons aucune information disponible pour l'apprentissage."; + +description_en_formation="sont inscrits en formation"; +details_en_formation=["(Formation supérieure,redoublants,","changement de filière)"] ; +unavailable_en_formation="Nous sommes désolés mais le taux des inscrits en formation n’est pas disponible pour le moment."; + +details_en_emploi_6_mois="(tout type d'emploi salarié du privé)"; +description_en_emploi_6_mois="sont en emploi 6 mois après la fin de la formation"; +unavailable_en_emploi_6_mois="Nous sommes désolés mais le taux d’emploi au bout de 6 mois n’est pas disponible pour le moment."; + +description_autres_6_mois="sont dans d’autres situations"; +details_autres_6_mois="(recherche d’emploi, service civique, à l’étranger, indépendant, etc.)"; +unavailable_autres_6_mois="Nous sommes désolés mais le taux concernant les autres cas n’est pas disponible pour le moment."; +-%> \ No newline at end of file diff --git a/server/src/http/widget/templates/dsfr/certification-horizontal.svg.ejs b/server/src/http/widget/templates/dsfr/certification-horizontal.svg.ejs index e0e60c4b..e34996d5 100644 --- a/server/src/http/widget/templates/dsfr/certification-horizontal.svg.ejs +++ b/server/src/http/widget/templates/dsfr/certification-horizontal.svg.ejs @@ -1,7 +1,7 @@ <%- await include('variables'); %> <%_ deltaHeight=55 -height=region ? 165 + nbIndicateur * deltaHeight : 130 + nbIndicateur * deltaHeight +height=165 + nbIndicateur * deltaHeight currentHeight = 10 -%> @@ -15,7 +15,7 @@ currentHeight = 10 - y="30" <% } %>> + @@ -29,7 +29,7 @@ currentHeight = 10 <%= description_en_emploi_6_mois %> - <%= details_en_emploi_6_mois[0] %> <%= details_en_emploi_6_mois[1] %> + <%= details_en_emploi_6_mois %> <% } else { %> @@ -85,7 +85,7 @@ currentHeight = 10 <%= description_autres_6_mois %> - <%= details_autres_6_mois[0] %> <%= details_autres_6_mois[1] %> <%= details_autres_6_mois[2] %> + <%= details_autres_6_mois_split[0] %> <%= details_autres_6_mois_split[1] %> <%= details_autres_6_mois_split[2] %> <% } else { %> @@ -117,11 +117,13 @@ currentHeight = 10 - + <%= title.join(' ') %> <% if (region) { %> <%= regionDesc[0] %> <%= regionDesc[1] %> + <% } else { %> + <%= detailVueNationale %> <% } %> diff --git a/server/src/http/widget/templates/dsfr/certification-vertical.svg.ejs b/server/src/http/widget/templates/dsfr/certification-vertical.svg.ejs index cc7d44de..2a1d9afa 100644 --- a/server/src/http/widget/templates/dsfr/certification-vertical.svg.ejs +++ b/server/src/http/widget/templates/dsfr/certification-vertical.svg.ejs @@ -1,8 +1,8 @@ <%- await include('variables'); %> <%_ deltaHeight=75 -height=region ? 210 + nbIndicateur * deltaHeight : 155 + nbIndicateur * deltaHeight -currentHeight = region ? 30 : 10 +height=region ? 210 + nbIndicateur * deltaHeight : 195 + nbIndicateur * deltaHeight +currentHeight = region ? 30 : 30 -%> <%- await include('../common/description'); %> @@ -14,7 +14,7 @@ currentHeight = region ? 30 : 10 - y="30" <% } %>> + @@ -24,11 +24,11 @@ currentHeight = region ? 30 : 10 <%= stats?.taux_en_emploi_6_mois?.valeur %>% - <%= description_en_emploi_6_mois_part[0] %> - <%= description_en_emploi_6_mois_part[1] %> + <%= description_en_emploi_6_mois_split[0] %> + <%= description_en_emploi_6_mois_split[1] %> - <%= details_en_emploi_6_mois[0] %> <%= details_en_emploi_6_mois[1] %> + <%= details_en_emploi_6_mois %> <% } else { %> @@ -91,8 +91,8 @@ currentHeight = region ? 30 : 10 <%= description_autres_6_mois %> - <%= details_autres_6_mois[0] %> - <%= details_autres_6_mois[1] %> + <%= details_autres_6_mois_split[0] %> + <%= details_autres_6_mois_split[1] %> <% } else { %> @@ -127,7 +127,7 @@ currentHeight = region ? 30 : 10 - + <%= title[0] %> <%= title[1] %> @@ -135,6 +135,8 @@ currentHeight = region ? 30 : 10 <% if (region) { %> <%= regionDesc[0] %> <%= regionDesc[1] %> + <% } else { %> + <%= detailVueNationale %> <% } %> diff --git a/server/src/http/widget/templates/dsfr/cfd-horizontal.svg.ejs b/server/src/http/widget/templates/dsfr/cfd-horizontal.svg.ejs index 2f1efe8f..fad26f08 100644 --- a/server/src/http/widget/templates/dsfr/cfd-horizontal.svg.ejs +++ b/server/src/http/widget/templates/dsfr/cfd-horizontal.svg.ejs @@ -1,10 +1,12 @@ <%- await include('variables'); %> <%_ +deltaUnavalaible=exist.pro ? 80 + deltaHeight : 0 deltaHeight=55 -blocksHeight = hasPro && hasApprentissage ? 6 * deltaHeight : 3 * deltaHeight; -height=region ? 325 + blocksHeight : 290 + blocksHeight -height = !hasPro || !hasApprentissage ? height - 80 : height; -aboutPosY = region ? height - 175 : height - 140; +nbExist = exist.pro && exist.apprentissage ? 2 : 1; +blocksHeight = hasPro && hasApprentissage ? 6 * deltaHeight : (2 + nbExist) * deltaHeight; +height=region ? 300 + blocksHeight : 275 + blocksHeight +height = !exist.pro || !exist.apprentissage ? height - 80 : height; +aboutPosY = region ? height - 160 : height - 125; currentHeight = 58 -%> @@ -19,6 +21,7 @@ currentHeight = 58 y="30" <% } %>> + <% if (exist.pro) { %> <% if (hasPro ) { %> @@ -29,7 +32,7 @@ currentHeight = 58 <%= filiereProDesc %> - + <% if (stats?.pro?.taux_en_emploi_6_mois) { %> @@ -40,7 +43,7 @@ currentHeight = 58 <%= description_en_emploi_6_mois %> - <%= details_en_emploi_6_mois[0] %> <%= details_en_emploi_6_mois[1] %> + <%= details_en_emploi_6_mois %> <% } else { %> @@ -95,7 +98,7 @@ currentHeight = 58 <%= description_autres_6_mois %> - <%= details_autres_6_mois[0] %> <%= details_autres_6_mois[1] %> <%= details_autres_6_mois[2] %> + <%= details_autres_6_mois_split[0] %> <%= details_autres_6_mois_split[1] %> <%= details_autres_6_mois_split[2] %> <% } else { %> @@ -113,12 +116,38 @@ currentHeight = 58 + <% } else { %> + + <% currentHeight = 58 %> + + + + + + <%= filiereProDesc %> + + + + + + <%= unavailablePro.substr(0, 72) %> + + + <%= unavailablePro.substr(73) %> + + + <% currentHeight = currentHeight + deltaHeight %> + + + + <% } %> <% } %> + <% if (exist.apprentissage) { %> <% if (hasApprentissage) { %> <% currentHeight = 58 %> - + @@ -126,7 +155,7 @@ currentHeight = 58 <%= filiereApprentissageDesc %> - + @@ -138,7 +167,7 @@ currentHeight = 58 <%= description_en_emploi_6_mois %> - <%= details_en_emploi_6_mois[0] %> <%= details_en_emploi_6_mois[1] %> + <%= details_en_emploi_6_mois %> <% } else { %> @@ -193,7 +222,7 @@ currentHeight = 58 <%= description_autres_6_mois %> - <%= details_autres_6_mois[0] %> <%= details_autres_6_mois[1] %> <%= details_autres_6_mois[2] %> + <%= details_autres_6_mois_split[0] %> <%= details_autres_6_mois_split[1] %> <%= details_autres_6_mois_split[2] %> <% } else { %> @@ -211,14 +240,36 @@ currentHeight = 58 + <% } else { %> + + <% currentHeight = 58 %> + + + + + + <%= filiereApprentissageDesc %> + + + + + + <%= unavailableApprentissage.substr(0, 72) %> + + + <%= unavailableApprentissage.substr(73) %> + + + <% currentHeight = currentHeight + deltaHeight %> + + + + <% } %> <% } %> - <%= about_short[0] %> - - - <%= about_short[1] %> + <%= about_short[0] %> <%= about_short[1] %> diff --git a/server/src/http/widget/templates/dsfr/cfd-vertical.svg.ejs b/server/src/http/widget/templates/dsfr/cfd-vertical.svg.ejs index 35d34361..8644edf2 100644 --- a/server/src/http/widget/templates/dsfr/cfd-vertical.svg.ejs +++ b/server/src/http/widget/templates/dsfr/cfd-vertical.svg.ejs @@ -1,9 +1,11 @@ <%- await include('variables'); %> <%_ +deltaUnavalaible=exist.pro ? 70 + deltaHeight : 0 deltaHeight=75 -blocksHeight = hasPro && hasApprentissage ? 6 * deltaHeight : 3 * deltaHeight; +nbExist = exist.pro && exist.apprentissage ? 2 : 1; +blocksHeight = hasPro && hasApprentissage ? 6 * deltaHeight : (2 + nbExist) * deltaHeight; height=region ? 345 + blocksHeight : 310 + blocksHeight -height = !hasPro || !hasApprentissage ? height - 80 : height; +height = !exist.pro || !exist.apprentissage ? height - 80 : height; aboutPosY = region ? height - 210 : height - 175; currentHeight = 58 -%> @@ -19,6 +21,7 @@ currentHeight = 58 y="30" <% } %>> + <% if (exist.pro) { %> <% if (hasPro) { %> @@ -29,7 +32,7 @@ currentHeight = 58 <%= filiereProDesc %> - + @@ -38,11 +41,11 @@ currentHeight = 58 <%= stats?.pro?.taux_en_emploi_6_mois?.valeur %>% - <%= description_en_emploi_6_mois_part[0] %> - <%= description_en_emploi_6_mois_part[1] %> + <%= description_en_emploi_6_mois_split[0] %> + <%= description_en_emploi_6_mois_split[1] %> - <%= details_en_emploi_6_mois[0] %> <%= details_en_emploi_6_mois[1] %> + <%= details_en_emploi_6_mois %> <% } else { %> @@ -104,8 +107,8 @@ currentHeight = 58 <%= description_autres_6_mois %> - <%= details_autres_6_mois[0] %> - <%= details_autres_6_mois[1] %> + <%= details_autres_6_mois_split[0] %> + <%= details_autres_6_mois_split[1] %> <% } else { %> @@ -126,12 +129,40 @@ currentHeight = 58 + <% } else { %> + + + + + + + <%= filiereProDesc %> + + + + + + <%= unavailablePro.substr(0, 37) %> + + + <%= unavailablePro.substr(38, 34) %> + + + <%= unavailablePro.substr(73) %> + + + <% currentHeight = currentHeight + deltaHeight %> + + + + <% } %> <% } %> + <% if (exist.apprentissage) { %> <% if (hasApprentissage) { %> <% currentHeight = 58 %> - + @@ -139,7 +170,7 @@ currentHeight = 58 <%= filiereApprentissageDesc %> - + @@ -148,11 +179,11 @@ currentHeight = 58 <%= stats?.apprentissage?.taux_en_emploi_6_mois?.valeur %>% - <%= description_en_emploi_6_mois_part[0] %> - <%= description_en_emploi_6_mois_part[1] %> + <%= description_en_emploi_6_mois_split[0] %> + <%= description_en_emploi_6_mois_split[1] %> - <%= details_en_emploi_6_mois[0] %> <%= details_en_emploi_6_mois[1] %> + <%= details_en_emploi_6_mois %> <% } else { %> @@ -213,8 +244,8 @@ currentHeight = 58 <%= description_autres_6_mois %> - <%= details_autres_6_mois[0] %> - <%= details_autres_6_mois[1] %> + <%= details_autres_6_mois_split[0] %> + <%= details_autres_6_mois_split[1] %> <% } else { %> @@ -235,6 +266,34 @@ currentHeight = 58 + <% } else { %> + + <% currentHeight = 58 %> + + + + + + <%= filiereApprentissageDesc %> + + + + + + <%= unavailableApprentissage.substr(0, 37) %> + + + <%= unavailableApprentissage.substr(38, 34) %> + + + <%= unavailableApprentissage.substr(73) %> + + + <% currentHeight = currentHeight + deltaHeight %> + + + + <% } %> <% } %> diff --git a/server/src/http/widget/templates/dsfr/error.svg.ejs b/server/src/http/widget/templates/dsfr/error-empty.svg.ejs similarity index 100% rename from server/src/http/widget/templates/dsfr/error.svg.ejs rename to server/src/http/widget/templates/dsfr/error-empty.svg.ejs diff --git a/server/src/http/widget/templates/dsfr/error-horizontal.svg.ejs b/server/src/http/widget/templates/dsfr/error-horizontal.svg.ejs new file mode 100644 index 00000000..991edc8c --- /dev/null +++ b/server/src/http/widget/templates/dsfr/error-horizontal.svg.ejs @@ -0,0 +1,61 @@ +<%- await include('variables'); %> +<%_ +deltaHeight=55 +height=165 + 1 * deltaHeight +currentHeight = 10 +-%> + + <%- await include('../common/description'); %> + <%- await include('common'); %> + + + + + + + + + + + + + + <%= unavailable.substr(0, 72) %> + + + <%= unavailable.substr(73) %> + + + <% currentHeight = currentHeight + deltaHeight %> + + + + + <%= about_short[0] %> + + + <%= about_short[1] %> + + + + + + + + + + + + <%= title.join(' ') %> + <% if (type === "regionales") { %> + <%= regionDesc[0] %> <%= regionDesc[1] %> + <% } else if (type === "formations") { %> + <%= detailVueEtablissement %> + <% } else if (type === "certifications") { %> + <%= detailVueNationale %> + <% } %> + + + + + \ No newline at end of file diff --git a/server/src/http/widget/templates/dsfr/error-vertical.svg.ejs b/server/src/http/widget/templates/dsfr/error-vertical.svg.ejs new file mode 100644 index 00000000..121f35ba --- /dev/null +++ b/server/src/http/widget/templates/dsfr/error-vertical.svg.ejs @@ -0,0 +1,66 @@ +<%- await include('variables'); %> +<%_ +deltaHeight=75 +height=region ? 210 + 1 * deltaHeight : 195 + 1 * deltaHeight +currentHeight = region ? 30 : 30 +-%> + + <%- await include('../common/description'); %> + <%- await include('common'); %> + + + + + + + + + + + + + <%= unavailable.substr(0, 37) %> + + + <%= unavailable.substr(38, 34) %> + + + <%= unavailable.substr(73) %> + + + <% currentHeight = currentHeight + deltaHeight %> + + + + + <%= about_short[0] %> + + + <%= about_short[1] %> + + + + + + + + + + + + <%= title[0] %> + <%= title[1] %> + <%= title[2] %> + <% if (type === "regionales") { %> + <%= regionDesc[0] %> + <%= regionDesc[1] %> + <% } else if (type === "formations") { %> + <%= detailVueEtablissement %> + <% } else if (type === "certifications") { %> + <%= detailVueNationale %> + <% } %> + + + + + \ No newline at end of file diff --git a/server/src/http/widget/templates/dsfr/formation-horizontal.svg.ejs b/server/src/http/widget/templates/dsfr/formation-horizontal.svg.ejs index 5f523102..575a6506 100644 --- a/server/src/http/widget/templates/dsfr/formation-horizontal.svg.ejs +++ b/server/src/http/widget/templates/dsfr/formation-horizontal.svg.ejs @@ -29,7 +29,7 @@ currentHeight = 10 <%= description_en_emploi_6_mois %> - <%= details_en_emploi_6_mois[0] %> <%= details_en_emploi_6_mois[1] %> + <%= details_en_emploi_6_mois %> <% } else { %> @@ -85,7 +85,7 @@ currentHeight = 10 <%= description_autres_6_mois %> - <%= details_autres_6_mois[0] %> <%= details_autres_6_mois[1] %> <%= details_autres_6_mois[2] %> + <%= details_autres_6_mois_split[0] %> <%= details_autres_6_mois_split[1] %> <%= details_autres_6_mois_split[2] %> <% } else { %> diff --git a/server/src/http/widget/templates/dsfr/formation-vertical.svg.ejs b/server/src/http/widget/templates/dsfr/formation-vertical.svg.ejs index 46329443..5a5caa3e 100644 --- a/server/src/http/widget/templates/dsfr/formation-vertical.svg.ejs +++ b/server/src/http/widget/templates/dsfr/formation-vertical.svg.ejs @@ -25,11 +25,11 @@ currentHeight = 10 <%= stats?.taux_en_emploi_6_mois?.valeur %>% - <%= description_en_emploi_6_mois_part[0] %> - <%= description_en_emploi_6_mois_part[1] %> + <%= description_en_emploi_6_mois_split[0] %> + <%= description_en_emploi_6_mois_split[1] %> - <%= details_en_emploi_6_mois[0] %> <%= details_en_emploi_6_mois[1] %> + <%= details_en_emploi_6_mois %> <% } else { %> @@ -90,8 +90,8 @@ currentHeight = 10 <%= description_autres_6_mois %> - <%= details_autres_6_mois[0] %> - <%= details_autres_6_mois[1] %> + <%= details_autres_6_mois_split[0] %> + <%= details_autres_6_mois_split[1] %> <% } else { %> diff --git a/server/src/http/widget/templates/dsfr/variables.ejs b/server/src/http/widget/templates/dsfr/variables.ejs index 01f2f343..5e8bc8bc 100644 --- a/server/src/http/widget/templates/dsfr/variables.ejs +++ b/server/src/http/widget/templates/dsfr/variables.ejs @@ -1,36 +1,12 @@ <%_ -nbIndicateur=3; -nbIndicateurPro=3; -nbIndicateurApprentissage=3; - -hasPro=Object.values(stats?.pro || {}).length > 0; -hasApprentissage=Object.values(stats?.apprentissage || {}).length > 0; - - -description_en_formation="sont inscrits en formation"; -details_en_formation=["(Formation supérieure,redoublants,","changement de filière)"] -unavailable_en_formation="Nous sommes désolés mais le taux des inscrits en formation n’est pas disponible pour le moment." - -description_en_emploi_6_mois_part=["sont en emploi 6 mois après la", "fin de la formation"] -description_en_emploi_6_mois=description_en_emploi_6_mois_part.join(' ') -details_en_emploi_6_mois=["(tout type d'emploi salarié du privé)"] -unavailable_en_emploi_6_mois="Nous sommes désolés mais le taux d’emploi au bout de 6 mois n’est pas disponible pour le moment." - -description_autres_6_mois="sont dans d’autres situations" -details_autres_6_mois=["(recherche d’emploi, service civique,","à l’étranger, indépendant, etc.)"] -unavailable_autres_6_mois="Nous sommes désolés mais le taux concernant les autres cas n’est pas disponible pour le moment." - -title=[`Que deviennent les`, `apprenants après cette`, `formation ?`] - -millesimeText = millesime && millesime.length == 9 ? millesime.split('_').join(' à ') : millesime -about=`*Données issues du dispositif InserJeunes${millesime ? ' promotion ' + millesimeText : ''}` -about_short=[`*Données issues du dispositif InserJeunes`, `${millesime ? ' promotion ' + millesimeText : ''}`] - -regionDesc=[`Les chiffres pour la région`,`${region ? region.nom : ''}`] - -filiereProDesc="Pour la voie scolaire" -filiereApprentissageDesc="Pour la voie apprentissage" - -detailVueEtablissement="Les chiffres pour cet établissement" - +await include('../common/variables'); +description_en_emploi_6_mois_split=[ + description_en_emploi_6_mois.substr(0, 30), + description_en_emploi_6_mois.substr(31) +]; + +details_autres_6_mois_split=[ + details_autres_6_mois.substr(0, 37), + details_autres_6_mois.substr(38) +]; -%> \ No newline at end of file diff --git a/server/src/http/widget/templates/lba/certification-horizontal.svg.ejs b/server/src/http/widget/templates/lba/certification-horizontal.svg.ejs index 4761b14c..408e49bc 100644 --- a/server/src/http/widget/templates/lba/certification-horizontal.svg.ejs +++ b/server/src/http/widget/templates/lba/certification-horizontal.svg.ejs @@ -1,20 +1,23 @@ <%- await include('variables'); %> -<% height=region ? 289 : 239 %> +<% height=289 %> <%- await include('../common/description'); %> <%- await include('common'); %> - <% if (region) { %> + <% if (region) { %> <%= regionDesc[0] %> <%= regionDesc[1] %> + <% } else { %> + <%= detailVueNationale %> + <% } %> - <% } %> + - y="40" <% } %>> + @@ -30,10 +33,10 @@ <% } else { %> - <%= unavailable_en_formation[0] %> - <%= unavailable_en_formation[1] %> - <%= unavailable_en_formation[2] %> - <%= unavailable_en_formation[3] %> + <%= unavailable_en_formation_split[0] %> + <%= unavailable_en_formation_split[1] %> + <%= unavailable_en_formation_split[2] %> + <%= unavailable_en_formation_split[3] %> <% } %> @@ -45,17 +48,17 @@ <%= stats?.taux_en_emploi_6_mois?.valeur %>% - <%= description_en_emploi_6_mois %> + <%= description_en_emploi_6_mois_override %> - <%= details_en_emploi_6_mois[0] %> + <%= details_en_emploi_6_mois %> <% } else { %> - <%= unavailable_en_emploi_6_mois[0] %> - <%= unavailable_en_emploi_6_mois[1] %> - <%= unavailable_en_emploi_6_mois[2] %> + <%= unavailable_en_emploi_6_mois_split[0] %> + <%= unavailable_en_emploi_6_mois_split[1] %> + <%= unavailable_en_emploi_6_mois_split[2] %> <% } %> @@ -67,18 +70,18 @@ <%= stats?.taux_autres_6_mois?.valeur %>% - <%= description_autres_6_mois %> + <%= description_autres_6_mois_override %> - <%= details_autres_6_mois[0] %> - <%= details_autres_6_mois[1] %> - <%= details_autres_6_mois[2] %> + <%= details_autres_6_mois_split[0] %> + <%= details_autres_6_mois_split[1] %> + <%= details_autres_6_mois_split[2] %> <% } else { %> - <%= unavailable_autres_6_mois[0] %> - <%= unavailable_autres_6_mois[1] %> - <%= unavailable_autres_6_mois[2] %> + <%= unavailable_autres_6_mois_split[0] %> + <%= unavailable_autres_6_mois_split[1] %> + <%= unavailable_autres_6_mois_split[2] %> <% } %> diff --git a/server/src/http/widget/templates/lba/certification-vertical.svg.ejs b/server/src/http/widget/templates/lba/certification-vertical.svg.ejs index fd94be28..7190bdd0 100644 --- a/server/src/http/widget/templates/lba/certification-vertical.svg.ejs +++ b/server/src/http/widget/templates/lba/certification-vertical.svg.ejs @@ -3,18 +3,22 @@ <%- await include('../common/description'); %> <%- await include('common'); %> - <% if (region) { %> + + <% if (region) { %> <%= regionDesc[0] %> <%= regionDesc[1] %> + <% } else { %> + <%= detailVueNationale %> + <% } %> - <% } %> + - y="40" <% } %>> + @@ -31,10 +35,10 @@ <% } else { %> - <%= unavailable_en_formation[0] %> - <%= unavailable_en_formation[1] %> - <%= unavailable_en_formation[2] %> - <%= unavailable_en_formation[3] %> + <%= unavailable_en_formation_split[0] %> + <%= unavailable_en_formation_split[1] %> + <%= unavailable_en_formation_split[2] %> + <%= unavailable_en_formation_split[3] %> <% }%> @@ -46,16 +50,16 @@ <%= stats?.taux_en_emploi_6_mois?.valeur %>% - <%= description_en_emploi_6_mois %> + <%= description_en_emploi_6_mois_override %> - <%= details_en_emploi_6_mois[0] %> + <%= details_en_emploi_6_mois %> <% } else { %> - <%= unavailable_en_emploi_6_mois[0] %> - <%= unavailable_en_emploi_6_mois[1] %> - <%= unavailable_en_emploi_6_mois[2] %> + <%= unavailable_en_emploi_6_mois_split[0] %> + <%= unavailable_en_emploi_6_mois_split[1] %> + <%= unavailable_en_emploi_6_mois_split[2] %> <% }%> @@ -67,18 +71,18 @@ <%= stats?.taux_autres_6_mois?.valeur %>% - <%= description_autres_6_mois %> + <%= description_autres_6_mois_override %> - <%= details_autres_6_mois[0] %> - <%= details_autres_6_mois[1] %> - <%= details_autres_6_mois[2] %> + <%= details_autres_6_mois_split[0] %> + <%= details_autres_6_mois_split[1] %> + <%= details_autres_6_mois_split[2] %> <% } else { %> - <%= unavailable_autres_6_mois[0] %> - <%= unavailable_autres_6_mois[1] %> - <%= unavailable_autres_6_mois[2] %> + <%= unavailable_autres_6_mois_split[0] %> + <%= unavailable_autres_6_mois_split[1] %> + <%= unavailable_autres_6_mois_split[2] %> <% }%> diff --git a/server/src/http/widget/templates/lba/cfd-horizontal.svg.ejs b/server/src/http/widget/templates/lba/cfd-horizontal.svg.ejs index 57200fb4..bff23958 100644 --- a/server/src/http/widget/templates/lba/cfd-horizontal.svg.ejs +++ b/server/src/http/widget/templates/lba/cfd-horizontal.svg.ejs @@ -3,8 +3,10 @@ height=region ? 499 : 449 deltaHeight=215 -blocksHeight = (nbIndicateurPro && nbIndicateurApprentissage ? 2 : 1) * deltaHeight +deltaUnavailable = exist.pro && exist.apprentissage && (!hasPro || !hasApprentissage) ? 100 : 0 +blocksHeight = (hasPro && hasApprentissage ? 2 : 1) * deltaHeight height=region ? 70 + blocksHeight : 40 + blocksHeight +height = height + deltaUnavailable aboutPosY = region ? height - 50 : height - 20; -%> @@ -22,7 +24,8 @@ aboutPosY = region ? height - 50 : height - 20; <% } %> y="40" <% } %>> - <% if (nbIndicateurPro > 0 ) { %> + <% if (exist.pro) { %> + <% if (hasPro) { %> <%= filiereProDesc %> @@ -43,10 +46,10 @@ aboutPosY = region ? height - 50 : height - 20; <% } else { %> - <%= unavailable_en_formation[0] %> - <%= unavailable_en_formation[1] %> - <%= unavailable_en_formation[2] %> - <%= unavailable_en_formation[3] %> + <%= unavailable_en_formation_split[0] %> + <%= unavailable_en_formation_split[1] %> + <%= unavailable_en_formation_split[2] %> + <%= unavailable_en_formation_split[3] %> <% } %> @@ -58,17 +61,17 @@ aboutPosY = region ? height - 50 : height - 20; <%= stats?.pro?.taux_en_emploi_6_mois?.valeur %>% - <%= description_en_emploi_6_mois %> + <%= description_en_emploi_6_mois_override %> - <%= details_en_emploi_6_mois[0] %> + <%= details_en_emploi_6_mois %> <% } else { %> - <%= unavailable_en_emploi_6_mois[0] %> - <%= unavailable_en_emploi_6_mois[1] %> - <%= unavailable_en_emploi_6_mois[2] %> + <%= unavailable_en_emploi_6_mois_split[0] %> + <%= unavailable_en_emploi_6_mois_split[1] %> + <%= unavailable_en_emploi_6_mois_split[2] %> <% } %> @@ -80,98 +83,133 @@ aboutPosY = region ? height - 50 : height - 20; <%= stats?.pro?.taux_autres_6_mois?.valeur %>% - <%= description_autres_6_mois %> + <%= description_autres_6_mois_override %> - <%= details_autres_6_mois[0] %> - <%= details_autres_6_mois[1] %> - <%= details_autres_6_mois[2] %> + <%= details_autres_6_mois_split[0] %> + <%= details_autres_6_mois_split[1] %> + <%= details_autres_6_mois_split[2] %> <% } else { %> - <%= unavailable_autres_6_mois[0] %> - <%= unavailable_autres_6_mois[1] %> - <%= unavailable_autres_6_mois[2] %> + <%= unavailable_autres_6_mois_split[0] %> + <%= unavailable_autres_6_mois_split[1] %> + <%= unavailable_autres_6_mois_split[2] %> <% } %> - <% } %> - - <% if (nbIndicateurApprentissage > 0 ) { %> + <% } else { %> - <%= filiereApprentissageDesc %> + <%= filiereProDesc %> - - - <% if (stats?.apprentissage?.taux_en_formation) { %> - <%= stats?.apprentissage?.taux_en_formation?.valeur %>% - - - <%= description_en_formation %> - - - <%= details_en_formation[0] %> - <%= details_en_formation[1] %> - - <% } else { %> + + - <%= unavailable_en_formation[0] %> - <%= unavailable_en_formation[1] %> - <%= unavailable_en_formation[2] %> - <%= unavailable_en_formation[3] %> + <%= unavailablePro %> - <% } %> + + <% } %> + <% } %> - - - <% if (stats?.apprentissage?.taux_en_emploi_6_mois) { %> - - <%= stats?.apprentissage?.taux_en_emploi_6_mois?.valeur %>% - - - <%= description_en_emploi_6_mois %> - - - <%= details_en_emploi_6_mois[0] %> - + <% if (exist.apprentissage) { %> + + <% if (hasApprentissage ) { %> - <% } else { %> - - <%= unavailable_en_emploi_6_mois[0] %> - <%= unavailable_en_emploi_6_mois[1] %> - <%= unavailable_en_emploi_6_mois[2] %> - - <% } %> - + + + <%= filiereApprentissageDesc %> + + + + + + <% if (stats?.apprentissage?.taux_en_formation) { %> + <%= stats?.apprentissage?.taux_en_formation?.valeur %>% + + + <%= description_en_formation %> + + + <%= details_en_formation[0] %> + <%= details_en_formation[1] %> + + <% } else { %> + + <%= unavailable_en_formation_split[0] %> + <%= unavailable_en_formation_split[1] %> + <%= unavailable_en_formation_split[2] %> + <%= unavailable_en_formation_split[3] %> + + <% } %> + - - - <% if (stats?.apprentissage?.taux_autres_6_mois) { %> - - <%= stats?.apprentissage?.taux_autres_6_mois?.valeur %>% - - - <%= description_autres_6_mois %> - - - <%= details_autres_6_mois[0] %> - <%= details_autres_6_mois[1] %> - <%= details_autres_6_mois[2] %> - - <% } else { %> - - <%= unavailable_autres_6_mois[0] %> - <%= unavailable_autres_6_mois[1] %> - <%= unavailable_autres_6_mois[2] %> - - <% } %> - - + + + <% if (stats?.apprentissage?.taux_en_emploi_6_mois) { %> + + <%= stats?.apprentissage?.taux_en_emploi_6_mois?.valeur %>% + + + <%= description_en_emploi_6_mois_override %> + + + <%= details_en_emploi_6_mois %> + + + <% } else { %> + + <%= unavailable_en_emploi_6_mois_split[0] %> + <%= unavailable_en_emploi_6_mois_split[1] %> + <%= unavailable_en_emploi_6_mois_split[2] %> + + <% } %> + + + + + <% if (stats?.apprentissage?.taux_autres_6_mois) { %> + + <%= stats?.apprentissage?.taux_autres_6_mois?.valeur %>% + + + <%= description_autres_6_mois_override %> + + + <%= details_autres_6_mois_split[0] %> + <%= details_autres_6_mois_split[1] %> + <%= details_autres_6_mois_split[2] %> + + <% } else { %> + + <%= unavailable_autres_6_mois_split[0] %> + <%= unavailable_autres_6_mois_split[1] %> + <%= unavailable_autres_6_mois_split[2] %> + + <% } %> + + + + <% } else { %> + + + <%= filiereApprentissageDesc %> + + + + + + + <%= unavailableApprentissage %> + + + + <% } %> + <% } %> diff --git a/server/src/http/widget/templates/lba/cfd-vertical.svg.ejs b/server/src/http/widget/templates/lba/cfd-vertical.svg.ejs index fed3ebf1..f015c4df 100644 --- a/server/src/http/widget/templates/lba/cfd-vertical.svg.ejs +++ b/server/src/http/widget/templates/lba/cfd-vertical.svg.ejs @@ -3,7 +3,7 @@ height=region ? 620 : 600 deltaWidth=318 -blocksWidth = (nbIndicateurPro && nbIndicateurApprentissage ? 2 : 1) * deltaWidth +blocksWidth = (exist.pro && exist.apprentissage ? 2 : 1) * deltaWidth width=blocksWidth + 20 -%> @@ -22,7 +22,8 @@ width=blocksWidth + 20 <% } %> y="40" <% } %>> - <% if (nbIndicateurPro > 0 ) { %> + <% if (exist.pro) { %> + <% if (hasPro ) { %> <%= filiereProDesc %> @@ -44,10 +45,10 @@ width=blocksWidth + 20 <% } else { %> - <%= unavailable_en_formation[0] %> - <%= unavailable_en_formation[1] %> - <%= unavailable_en_formation[2] %> - <%= unavailable_en_formation[3] %> + <%= unavailable_en_formation_split[0] %> + <%= unavailable_en_formation_split[1] %> + <%= unavailable_en_formation_split[2] %> + <%= unavailable_en_formation_split[3] %> <% }%> @@ -59,16 +60,16 @@ width=blocksWidth + 20 <%= stats?.pro.taux_en_emploi_6_mois?.valeur %>% - <%= description_en_emploi_6_mois %> + <%= description_en_emploi_6_mois_override %> - <%= details_en_emploi_6_mois[0] %> + <%= details_en_emploi_6_mois %> <% } else { %> - <%= unavailable_en_emploi_6_mois[0] %> - <%= unavailable_en_emploi_6_mois[1] %> - <%= unavailable_en_emploi_6_mois[2] %> + <%= unavailable_en_emploi_6_mois_split[0] %> + <%= unavailable_en_emploi_6_mois_split[1] %> + <%= unavailable_en_emploi_6_mois_split[2] %> <% }%> @@ -80,98 +81,135 @@ width=blocksWidth + 20 <%= stats?.pro.taux_autres_6_mois?.valeur %>% - <%= description_autres_6_mois %> + <%= description_autres_6_mois_override %> - <%= details_autres_6_mois[0] %> - <%= details_autres_6_mois[1] %> - <%= details_autres_6_mois[2] %> + <%= details_autres_6_mois_split[0] %> + <%= details_autres_6_mois_split[1] %> + <%= details_autres_6_mois_split[2] %> <% } else { %> - <%= unavailable_autres_6_mois[0] %> - <%= unavailable_autres_6_mois[1] %> - <%= unavailable_autres_6_mois[2] %> + <%= unavailable_autres_6_mois_split[0] %> + <%= unavailable_autres_6_mois_split[1] %> + <%= unavailable_autres_6_mois_split[2] %> <% }%> - <% } %> - - <% if (nbIndicateurApprentissage > 0 ) { %> + <% } else { %> - <%= filiereApprentissageDesc %> + <%= filiereProDesc %> - + - <% if (stats?.apprentissage.taux_en_formation) { %> - - <%= stats?.apprentissage.taux_en_formation?.valeur %>% - - - <%= description_en_formation %> - - - <%= details_en_formation[0] %> - <%= details_en_formation[1] %> - - <% } else { %> - <%= unavailable_en_formation[0] %> - <%= unavailable_en_formation[1] %> - <%= unavailable_en_formation[2] %> - <%= unavailable_en_formation[3] %> + <%= unavailablePro.substr(0, 30) %> + <%= unavailablePro.substr(30, 26) %> + <%= unavailablePro.substr(56) %> - <% }%> + + <% } %> + <% } %> - - - <% if (stats?.apprentissage.taux_en_emploi_6_mois) { %> - - <%= stats?.apprentissage.taux_en_emploi_6_mois?.valeur %>% - - - <%= description_en_emploi_6_mois %> - - - <%= details_en_emploi_6_mois[0] %> - - <% } else { %> - - <%= unavailable_en_emploi_6_mois[0] %> - <%= unavailable_en_emploi_6_mois[1] %> - <%= unavailable_en_emploi_6_mois[2] %> - - <% }%> - + <% if (exist.apprentissage) { %> + + <% if (hasApprentissage ) { %> + + + <%= filiereApprentissageDesc %> + + + + + + <% if (stats?.apprentissage.taux_en_formation) { %> + + <%= stats?.apprentissage.taux_en_formation?.valeur %>% + + + <%= description_en_formation %> + + + <%= details_en_formation[0] %> + <%= details_en_formation[1] %> + + <% } else { %> + + <%= unavailable_en_formation_split[0] %> + <%= unavailable_en_formation_split[1] %> + <%= unavailable_en_formation_split[2] %> + <%= unavailable_en_formation_split[3] %> + + <% }%> + - - - <% if (stats?.apprentissage.taux_autres_6_mois) { %> - - <%= stats?.apprentissage.taux_autres_6_mois?.valeur %>% - - - <%= description_autres_6_mois %> - - - <%= details_autres_6_mois[0] %> - <%= details_autres_6_mois[1] %> - <%= details_autres_6_mois[2] %> - - <% } else { %> - - <%= unavailable_autres_6_mois[0] %> - <%= unavailable_autres_6_mois[1] %> - <%= unavailable_autres_6_mois[2] %> - - <% }%> - - + + + <% if (stats?.apprentissage.taux_en_emploi_6_mois) { %> + + <%= stats?.apprentissage.taux_en_emploi_6_mois?.valeur %>% + + + <%= description_en_emploi_6_mois_override %> + + + <%= details_en_emploi_6_mois %> + + <% } else { %> + + <%= unavailable_en_emploi_6_mois_split[0] %> + <%= unavailable_en_emploi_6_mois_split[1] %> + <%= unavailable_en_emploi_6_mois_split[2] %> + + <% }%> + + + + + <% if (stats?.apprentissage.taux_autres_6_mois) { %> + + <%= stats?.apprentissage.taux_autres_6_mois?.valeur %>% + + + <%= description_autres_6_mois_override %> + + + <%= details_autres_6_mois_split[0] %> + <%= details_autres_6_mois_split[1] %> + <%= details_autres_6_mois_split[2] %> + + <% } else { %> + + <%= unavailable_autres_6_mois_split[0] %> + <%= unavailable_autres_6_mois_split[1] %> + <%= unavailable_autres_6_mois_split[2] %> + + <% }%> + + + <% } else { %> + + + <%= filiereApprentissageDesc %> + + + + + + + <%= unavailableApprentissage.substr(0, 30) %> + <%= unavailableApprentissage.substr(30, 26) %> + <%= unavailableApprentissage.substr(56) %> + + + + <% } %> + <% } %> diff --git a/server/src/http/widget/templates/lba/error.svg.ejs b/server/src/http/widget/templates/lba/error-empty.svg.ejs similarity index 100% rename from server/src/http/widget/templates/lba/error.svg.ejs rename to server/src/http/widget/templates/lba/error-empty.svg.ejs diff --git a/server/src/http/widget/templates/lba/error-horizontal.svg.ejs b/server/src/http/widget/templates/lba/error-horizontal.svg.ejs new file mode 100644 index 00000000..6672e676 --- /dev/null +++ b/server/src/http/widget/templates/lba/error-horizontal.svg.ejs @@ -0,0 +1,38 @@ +<%- await include('variables'); %> +<% height=289 %> + + <%- await include('../common/description'); %> + <%- await include('common'); %> + + + + + <% if (type === "regionales") { %> + <%= regionDesc[0] %> <%= regionDesc[1] %> + <% } else if (type === "formations") { %> + <%= detailVueEtablissement %> + <% } else if (type === "certifications") { %> + <%= detailVueNationale %> + <% } %> + + + + + + + + + + <%= unavailable %> + + + + + + + <%= about %> + + + + + \ No newline at end of file diff --git a/server/src/http/widget/templates/lba/error-vertical.svg.ejs b/server/src/http/widget/templates/lba/error-vertical.svg.ejs new file mode 100644 index 00000000..9c6a61a9 --- /dev/null +++ b/server/src/http/widget/templates/lba/error-vertical.svg.ejs @@ -0,0 +1,46 @@ +<%- await include('variables'); %> +<% height=270 %> + + <%- await include('../common/description'); %> + <%- await include('common'); %> + + + + + <% if (type === "regionales") { %> + <%= regionDesc[0] %> + <%= regionDesc[1] %> + <% } else if (type === "formations") { %> + <%= detailVueEtablissement %> + <% } else if (type === "certifications") { %> + <%= detailVueNationale %> + <% } %> + + + + + + + + + + + <%= unavailable.substr(0, 30) %> + <%= unavailable.substr(30, 26) %> + <%= unavailable.substr(56) %> + + + + + + + <%= about_short[0] %> + + + + <%= about_short[1] %> + + + + + \ No newline at end of file diff --git a/server/src/http/widget/templates/lba/formation-horizontal.svg.ejs b/server/src/http/widget/templates/lba/formation-horizontal.svg.ejs index f9cbb57b..acd422a1 100644 --- a/server/src/http/widget/templates/lba/formation-horizontal.svg.ejs +++ b/server/src/http/widget/templates/lba/formation-horizontal.svg.ejs @@ -1,21 +1,19 @@ <%- await include('variables'); %> -<% height=region ? 289 : 239 %> +<% height=289 %> <%- await include('../common/description'); %> <%- await include('common'); %> - <% if (region) { %> - <%= regionDesc %> + <%= detailVueEtablissement %> - <% } %> - y="40" <% } %>> + @@ -31,10 +29,10 @@ <% } else { %> - <%= unavailable_en_formation[0] %> - <%= unavailable_en_formation[1] %> - <%= unavailable_en_formation[2] %> - <%= unavailable_en_formation[3] %> + <%= unavailable_en_formation_split[0] %> + <%= unavailable_en_formation_split[1] %> + <%= unavailable_en_formation_split[2] %> + <%= unavailable_en_formation_split[3] %> <% } %> @@ -46,17 +44,17 @@ <%= stats?.taux_en_emploi_6_mois?.valeur %>% - <%= description_en_emploi_6_mois %> + <%= description_en_emploi_6_mois_override %> - <%= details_en_emploi_6_mois[0] %> + <%= details_en_emploi_6_mois %> <% } else { %> - <%= unavailable_en_emploi_6_mois[0] %> - <%= unavailable_en_emploi_6_mois[1] %> - <%= unavailable_en_emploi_6_mois[2] %> + <%= unavailable_en_emploi_6_mois_split[0] %> + <%= unavailable_en_emploi_6_mois_split[1] %> + <%= unavailable_en_emploi_6_mois_split[2] %> <% } %> @@ -68,18 +66,18 @@ <%= stats?.taux_autres_6_mois?.valeur %>% - <%= description_autres_6_mois %> + <%= description_autres_6_mois_override %> - <%= details_autres_6_mois[0] %> - <%= details_autres_6_mois[1] %> - <%= details_autres_6_mois[2] %> + <%= details_autres_6_mois_split[0] %> + <%= details_autres_6_mois_split[1] %> + <%= details_autres_6_mois_split[2] %> <% } else { %> - <%= unavailable_autres_6_mois[0] %> - <%= unavailable_autres_6_mois[1] %> - <%= unavailable_autres_6_mois[2] %> + <%= unavailable_autres_6_mois_split[0] %> + <%= unavailable_autres_6_mois_split[1] %> + <%= unavailable_autres_6_mois_split[2] %> <% } %> diff --git a/server/src/http/widget/templates/lba/formation-vertical.svg.ejs b/server/src/http/widget/templates/lba/formation-vertical.svg.ejs index fd94be28..7f500285 100644 --- a/server/src/http/widget/templates/lba/formation-vertical.svg.ejs +++ b/server/src/http/widget/templates/lba/formation-vertical.svg.ejs @@ -1,20 +1,17 @@ <%- await include('variables'); %> -<% height=region ? 620 : 600 %> +<% height=600 %> <%- await include('../common/description'); %> <%- await include('common'); %> - <% if (region) { %> - <%= regionDesc[0] %> - <%= regionDesc[1] %> + <%= detailVueEtablissement %> - <% } %> - y="40" <% } %>> + @@ -31,10 +28,10 @@ <% } else { %> - <%= unavailable_en_formation[0] %> - <%= unavailable_en_formation[1] %> - <%= unavailable_en_formation[2] %> - <%= unavailable_en_formation[3] %> + <%= unavailable_en_formation_split[0] %> + <%= unavailable_en_formation_split[1] %> + <%= unavailable_en_formation_split[2] %> + <%= unavailable_en_formation_split[3] %> <% }%> @@ -46,16 +43,16 @@ <%= stats?.taux_en_emploi_6_mois?.valeur %>% - <%= description_en_emploi_6_mois %> + <%= description_en_emploi_6_mois_override %> - <%= details_en_emploi_6_mois[0] %> + <%= details_en_emploi_6_mois %> <% } else { %> - <%= unavailable_en_emploi_6_mois[0] %> - <%= unavailable_en_emploi_6_mois[1] %> - <%= unavailable_en_emploi_6_mois[2] %> + <%= unavailable_en_emploi_6_mois_split[0] %> + <%= unavailable_en_emploi_6_mois_split[1] %> + <%= unavailable_en_emploi_6_mois_split[2] %> <% }%> @@ -67,18 +64,18 @@ <%= stats?.taux_autres_6_mois?.valeur %>% - <%= description_autres_6_mois %> + <%= description_autres_6_mois_override %> - <%= details_autres_6_mois[0] %> - <%= details_autres_6_mois[1] %> - <%= details_autres_6_mois[2] %> + <%= details_autres_6_mois_split[0] %> + <%= details_autres_6_mois_split[1] %> + <%= details_autres_6_mois_split[2] %> <% } else { %> - <%= unavailable_autres_6_mois[0] %> - <%= unavailable_autres_6_mois[1] %> - <%= unavailable_autres_6_mois[2] %> + <%= unavailable_autres_6_mois_split[0] %> + <%= unavailable_autres_6_mois_split[1] %> + <%= unavailable_autres_6_mois_split[2] %> <% }%> diff --git a/server/src/http/widget/templates/lba/variables.ejs b/server/src/http/widget/templates/lba/variables.ejs index 8751fd49..95525742 100644 --- a/server/src/http/widget/templates/lba/variables.ejs +++ b/server/src/http/widget/templates/lba/variables.ejs @@ -1,27 +1,30 @@ <%_ -nbIndicateur=Object.values(stats).length; -nbIndicateurPro=Object.values(stats?.pro || {}).length; -nbIndicateurApprentissage=Object.values(stats?.apprentissage || {}).length; +await include('../common/variables'); -description_en_formation="sont inscrits en formation" -details_en_formation=["(Formation supérieure,redoublants,","changement de filière)"] -unavailable_en_formation=["Nous sommes désolés mais le","taux des inscrits en formation","n’est pas disponible pour le","moment."] +unavailable_en_formation_split=[ + unavailable_en_formation.substr(0, 27), + unavailable_en_formation.substr(27, 31), + unavailable_en_formation.substr(59, 28), + unavailable_en_formation.substr(85) +]; -description_en_emploi_6_mois="sont en emploi au bout de 6 mois" -details_en_emploi_6_mois=["(Tout type d'emploi salarié du privé)"] -unavailable_en_emploi_6_mois=["Nous sommes désolés mais le taux", "d’emploi au bout de 6 mois n’est pas", "disponible pour le moment."] - -description_autres_6_mois="sont dans d’autres cas" -details_autres_6_mois=["(Recherche d’emploi, service","civique, à l’étranger, statut","indépendant, etc.)"] -unavailable_autres_6_mois=["Nous sommes désolés mais le taux", "concernant les autres cas n’est pas", "disponible pour le moment."] - -millesimeText = millesime && millesime.length == 9 ? millesime.split('_').join(' à ') : millesime -about=`*Données issues du dispositif InserJeunes${millesime ? ' promotion ' + millesimeText : ''}` -about_short=[`*Données issues du dispositif InserJeunes`, `${millesime ? ' promotion ' + millesimeText : ''}`] - -regionDesc=[`Les chiffres pour la région`,`${region ? region.nom : ''}`] - -filiereProDesc="Pour la voie scolaire" -filiereApprentissageDesc="Pour la voie apprentissage" +description_en_emploi_6_mois_override="sont en emploi au bout de 6 mois"; +unavailable_en_emploi_6_mois_split=[ + unavailable_en_emploi_6_mois.substr(0, 33), + unavailable_en_emploi_6_mois.substr(33, 36), + unavailable_en_emploi_6_mois.substr(69) +]; +description_autres_6_mois_override="sont dans d’autres cas" +details_autres_6_mois_override="(Recherche d’emploi, service civique, à l’étranger, statut indépendant, etc.)" +details_autres_6_mois_split=[ + details_autres_6_mois_override.substr(0, 28), + details_autres_6_mois_override.substr(29, 29), + details_autres_6_mois_override.substr(59), +]; +unavailable_autres_6_mois_split=[ + unavailable_autres_6_mois.substr(0, 32), + unavailable_autres_6_mois.substr(32, 36), + unavailable_autres_6_mois.substr(68), +]; -%> \ No newline at end of file diff --git a/server/src/http/widget/templates/templates.js b/server/src/http/widget/templates/templates.js index e16dfd61..3315848b 100644 --- a/server/src/http/widget/templates/templates.js +++ b/server/src/http/widget/templates/templates.js @@ -21,8 +21,12 @@ export const templates = { horizontal: path.join(__dirname, `./dsfr/cfd-horizontal.svg.ejs`), }, error: { - vertical: path.join(__dirname, `./dsfr/error.svg.ejs`), - horizontal: path.join(__dirname, `./dsfr/error.svg.ejs`), + vertical: path.join(__dirname, `./dsfr/error-vertical.svg.ejs`), + horizontal: path.join(__dirname, `./dsfr/error-horizontal.svg.ejs`), + }, + errorEmpty: { + vertical: path.join(__dirname, `./dsfr/error-empty.svg.ejs`), + horizontal: path.join(__dirname, `./dsfr/error-empty.svg.ejs`), }, }, lba: { @@ -39,8 +43,12 @@ export const templates = { horizontal: path.join(__dirname, `./lba/cfd-horizontal.svg.ejs`), }, error: { - vertical: path.join(__dirname, `./lba/error.svg.ejs`), - horizontal: path.join(__dirname, `./lba/error.svg.ejs`), + vertical: path.join(__dirname, `./lba/error-vertical.svg.ejs`), + horizontal: path.join(__dirname, `./lba/error-horizontal.svg.ejs`), + }, + errorEmpty: { + vertical: path.join(__dirname, `./lba/error-empty.svg.ejs`), + horizontal: path.join(__dirname, `./lba/error-empty.svg.ejs`), }, }, }; diff --git a/server/src/http/widget/widget.js b/server/src/http/widget/widget.js index 5bc9c566..cfb1dc95 100644 --- a/server/src/http/widget/widget.js +++ b/server/src/http/widget/widget.js @@ -1,35 +1,17 @@ import { renderSVG } from "./templates/templates.js"; import { isNil, omitBy } from "lodash-es"; -import { findSeuil } from "./seuils.js"; - -function getNiveau(stats, name) { - const seuil = findSeuil(stats, name); - - const found = seuil.niveaux.find((niveau) => { - const value = stats[name]; - return niveau.min <= value && value <= niveau.max; - }); - - return found?.niveau; -} export const prepareStatsForWidget = (stats) => { return omitBy( { taux_en_emploi_6_mois: { valeur: stats.taux_en_emploi_6_mois, - libelles: ["sont en emploi 6 mois", "après la fin de la formation."], - niveau: getNiveau(stats, "taux_en_emploi_6_mois"), }, taux_autres_6_mois: { valeur: stats.taux_autres_6_mois, - libelles: ["sont en emploi 6 mois", "après la fin de la formation."], - niveau: getNiveau(stats, "taux_autres_6_mois"), }, taux_en_formation: { valeur: stats.taux_en_formation, - libelles: ["poursuivent leurs études."], - niveau: "info", }, }, (t) => isNil(t.valeur) @@ -44,10 +26,12 @@ export function buildWidget(templateName, data, options = {}) { return renderSVG( templateName, { + type: data.type || "", stats: data.stats || {}, description: data.description || {}, millesime: data.millesime || "", region: data.region || null, + exist: data.exist || {}, }, options ); diff --git a/server/tests/common/widget-test.js b/server/tests/common/widget-test.js index aace3613..5f25d9b4 100644 --- a/server/tests/common/widget-test.js +++ b/server/tests/common/widget-test.js @@ -14,44 +14,10 @@ describe("widget", () => { assert.deepStrictEqual(prepareStatsForWidget(stats), { taux_en_emploi_6_mois: { valeur: 80, - niveau: "success", - libelles: ["sont en emploi 6 mois", "après la fin de la formation."], }, taux_en_formation: { valeur: 80, - niveau: "info", - libelles: ["poursuivent leurs études."], }, }); }); - - it("Doit calculer les taux pour le widget (warning)", () => { - const stats = { - code_certification: "50034303", - diplome: { code: "3", libelle: "CAP" }, - filiere: "apprentissage", - taux_en_emploi_6_mois: 25, - taux_en_formation: 25, - }; - - const rates = prepareStatsForWidget(stats); - - assert.deepStrictEqual(rates.taux_en_emploi_6_mois.niveau, "warning"); - assert.deepStrictEqual(rates.taux_en_formation.niveau, "info"); - }); - - it("Doit calculer les taux pour le widget (danger)", () => { - const stats = { - code_certification: "50034303", - diplome: { code: "3", libelle: "CAP" }, - filiere: "apprentissage", - taux_en_emploi_6_mois: 5, - taux_en_formation: 5, - }; - - const rates = prepareStatsForWidget(stats); - - assert.deepStrictEqual(rates.taux_en_emploi_6_mois.niveau, "danger"); - assert.deepStrictEqual(rates.taux_en_formation.niveau, "info"); - }); }); diff --git a/server/tests/fixtures/widgets/dsfr/certifications/12345678_23830024202.svg b/server/tests/fixtures/widgets/dsfr/certifications/12345678_23830024202.svg index 13b4e8d3..2f0ec933 100644 --- a/server/tests/fixtures/widgets/dsfr/certifications/12345678_23830024202.svg +++ b/server/tests/fixtures/widgets/dsfr/certifications/12345678_23830024202.svg @@ -127,6 +127,7 @@ + @@ -136,7 +137,7 @@ Pour la voie scolaire - + @@ -149,7 +150,7 @@ fin de la formation - (tout type d'emploi salarié du privé) + (tout type d'emploi salarié du privé) @@ -195,8 +196,10 @@ + + @@ -207,7 +210,7 @@ Pour la voie apprentissage - + @@ -220,7 +223,7 @@ fin de la formation - (tout type d'emploi salarié du privé) + (tout type d'emploi salarié du privé) @@ -265,6 +268,7 @@ + diff --git a/server/tests/fixtures/widgets/dsfr/certifications/12345678_23830024202_apprentissage.svg b/server/tests/fixtures/widgets/dsfr/certifications/12345678_23830024202_apprentissage.svg index 1e412cbb..6e481ea0 100644 --- a/server/tests/fixtures/widgets/dsfr/certifications/12345678_23830024202_apprentissage.svg +++ b/server/tests/fixtures/widgets/dsfr/certifications/12345678_23830024202_apprentissage.svg @@ -129,6 +129,7 @@ + @@ -139,7 +140,7 @@ Pour la voie apprentissage - + @@ -152,7 +153,7 @@ fin de la formation - (tout type d'emploi salarié du privé) + (tout type d'emploi salarié du privé) @@ -197,6 +198,7 @@ + diff --git a/server/tests/fixtures/widgets/dsfr/certifications/12345678_23830024202_pro.svg b/server/tests/fixtures/widgets/dsfr/certifications/12345678_23830024202_pro.svg index 2215beef..fd69ae09 100644 --- a/server/tests/fixtures/widgets/dsfr/certifications/12345678_23830024202_pro.svg +++ b/server/tests/fixtures/widgets/dsfr/certifications/12345678_23830024202_pro.svg @@ -127,6 +127,7 @@ + @@ -136,7 +137,7 @@ Pour la voie scolaire - + @@ -149,7 +150,7 @@ fin de la formation - (tout type d'emploi salarié du privé) + (tout type d'emploi salarié du privé) @@ -195,6 +196,7 @@ + diff --git a/server/tests/fixtures/widgets/dsfr/certifications/23830024203.svg b/server/tests/fixtures/widgets/dsfr/certifications/23830024203.svg index 59ebc98a..b73093cf 100644 --- a/server/tests/fixtures/widgets/dsfr/certifications/23830024203.svg +++ b/server/tests/fixtures/widgets/dsfr/certifications/23830024203.svg @@ -1,207 +1,213 @@ - + + Certification 23830024203 Données InserJeunes pour la certification 23830024203 (BAC filière apprentissage) pour le millesime 2020 - - - - - - - - - - - - - - - - - - 6% - - - sont en emploi 6 mois après la - fin de la formation - - - (tout type d'emploi salarié du privé) - - - - - - - - - - - 5% - - - sont inscrits en formation - - - (Formation supérieure,redoublants, - changement de filière) - - - - - - - - - - 7% - - - sont dans d’autres situations - - - (recherche d’emploi, service civique, - à l’étranger, indépendant, etc.) - - - - - - - - - *Données issues du dispositif InserJeunes - - - promotion 2020 - - - - - - + + + + + + + + + + + + + + + + + + 6% + + + sont en emploi 6 mois après la + fin de la formation + + + (tout type d'emploi salarié du privé) + - - - - - Que deviennent les - apprenants après cette - formation ? + + + + + + + + + 5% + + + sont inscrits en formation - + + (Formation supérieure,redoublants, + changement de filière) + + + + + + + + + + + + 7% + + + sont dans d’autres situations + + + (recherche d’emploi, service civique, + à l’étranger, indépendant, etc.) + + + + + + + + + *Données issues du dispositif InserJeunes + + + promotion 2020 + + + + + + + + + + + Que deviennent les + apprenants après cette + formation ? + + Les chiffres au niveau national + + + + \ No newline at end of file diff --git a/server/tests/fixtures/widgets/dsfr/certifications/23830024203_filieres.svg b/server/tests/fixtures/widgets/dsfr/certifications/23830024203_filieres.svg index 8ff53613..fe3b56ff 100644 --- a/server/tests/fixtures/widgets/dsfr/certifications/23830024203_filieres.svg +++ b/server/tests/fixtures/widgets/dsfr/certifications/23830024203_filieres.svg @@ -127,6 +127,7 @@ + @@ -136,11 +137,11 @@ Pour la voie scolaire - - + + 50% @@ -149,16 +150,16 @@ fin de la formation - (tout type d'emploi salarié du privé) + (tout type d'emploi salarié du privé) + - - + 5% @@ -169,14 +170,15 @@ (Formation supérieure,redoublants, changement de filière) + - - + + 45% @@ -187,15 +189,17 @@ (recherche d’emploi, service civique, à l’étranger, indépendant, etc.) + - + + @@ -206,11 +210,11 @@ Pour la voie apprentissage - - + + 50% @@ -219,16 +223,16 @@ fin de la formation - (tout type d'emploi salarié du privé) + (tout type d'emploi salarié du privé) + - - + 5% @@ -239,14 +243,14 @@ (Formation supérieure,redoublants, changement de filière) + - - + 45% @@ -257,13 +261,14 @@ (recherche d’emploi, service civique, à l’étranger, indépendant, etc.) + - + diff --git a/server/tests/fixtures/widgets/dsfr/certifications/error.svg b/server/tests/fixtures/widgets/dsfr/certifications/error.svg index 24b49e87..30312d8d 100644 --- a/server/tests/fixtures/widgets/dsfr/certifications/error.svg +++ b/server/tests/fixtures/widgets/dsfr/certifications/error.svg @@ -1,2 +1,167 @@ - + + + + + + + + + + + + + + + + + + + + + Nous sommes désolés mais nous n'avons + + + aucune information disponible pour + + + cette formation. + + + + + + + + *Données issues du dispositif InserJeunes + + + + + + + + + + + + + + + Que deviennent les + apprenants après cette + formation ? + + Les chiffres au niveau national + + + + + \ No newline at end of file diff --git a/server/tests/fixtures/widgets/dsfr/certifications/error_empty.svg b/server/tests/fixtures/widgets/dsfr/certifications/error_empty.svg new file mode 100644 index 00000000..24b49e87 --- /dev/null +++ b/server/tests/fixtures/widgets/dsfr/certifications/error_empty.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/server/tests/fixtures/widgets/dsfr/formations/0751234J-1022105.svg b/server/tests/fixtures/widgets/dsfr/formations/0751234J-1022105.svg index 1e6e1880..3c615916 100644 --- a/server/tests/fixtures/widgets/dsfr/formations/0751234J-1022105.svg +++ b/server/tests/fixtures/widgets/dsfr/formations/0751234J-1022105.svg @@ -138,7 +138,7 @@ fin de la formation - (tout type d'emploi salarié du privé) + (tout type d'emploi salarié du privé) diff --git a/server/tests/fixtures/widgets/dsfr/formations/0751234J-1022105_data_0.svg b/server/tests/fixtures/widgets/dsfr/formations/0751234J-1022105_data_0.svg index df278482..56fc81e5 100644 --- a/server/tests/fixtures/widgets/dsfr/formations/0751234J-1022105_data_0.svg +++ b/server/tests/fixtures/widgets/dsfr/formations/0751234J-1022105_data_0.svg @@ -138,7 +138,7 @@ fin de la formation - (tout type d'emploi salarié du privé) + (tout type d'emploi salarié du privé) diff --git a/server/tests/fixtures/widgets/dsfr/formations/0751234J-1022105_horizontal.svg b/server/tests/fixtures/widgets/dsfr/formations/0751234J-1022105_horizontal.svg index d849126a..900ae45e 100644 --- a/server/tests/fixtures/widgets/dsfr/formations/0751234J-1022105_horizontal.svg +++ b/server/tests/fixtures/widgets/dsfr/formations/0751234J-1022105_horizontal.svg @@ -138,7 +138,7 @@ sont en emploi 6 mois après la fin de la formation - (tout type d'emploi salarié du privé) + (tout type d'emploi salarié du privé) diff --git a/server/tests/fixtures/widgets/dsfr/formations/0751234J-1022105_one_data_horizontal.svg b/server/tests/fixtures/widgets/dsfr/formations/0751234J-1022105_one_data_horizontal.svg index 135bfaa2..1f1c05d3 100644 --- a/server/tests/fixtures/widgets/dsfr/formations/0751234J-1022105_one_data_horizontal.svg +++ b/server/tests/fixtures/widgets/dsfr/formations/0751234J-1022105_one_data_horizontal.svg @@ -139,7 +139,7 @@ sont en emploi 6 mois après la fin de la formation - (tout type d'emploi salarié du privé) + (tout type d'emploi salarié du privé) diff --git a/server/tests/fixtures/widgets/dsfr/formations/0751234J-1022105_vertical.svg b/server/tests/fixtures/widgets/dsfr/formations/0751234J-1022105_vertical.svg index 44abc67b..0241b2c5 100644 --- a/server/tests/fixtures/widgets/dsfr/formations/0751234J-1022105_vertical.svg +++ b/server/tests/fixtures/widgets/dsfr/formations/0751234J-1022105_vertical.svg @@ -139,7 +139,7 @@ fin de la formation - (tout type d'emploi salarié du privé) + (tout type d'emploi salarié du privé) diff --git a/server/tests/fixtures/widgets/dsfr/formations/error.svg b/server/tests/fixtures/widgets/dsfr/formations/error.svg index 24b49e87..f0f348f8 100644 --- a/server/tests/fixtures/widgets/dsfr/formations/error.svg +++ b/server/tests/fixtures/widgets/dsfr/formations/error.svg @@ -1,2 +1,167 @@ - + + + + + + + + + + + + + + + + + + + + + Nous sommes désolés mais nous n'avons + + + aucune information disponible pour + + + cette formation. + + + + + + + + *Données issues du dispositif InserJeunes + + + + + + + + + + + + + + + Que deviennent les + apprenants après cette + formation ? + + Les chiffres pour cet établissement + + + + + \ No newline at end of file diff --git a/server/tests/fixtures/widgets/dsfr/formations/error_empty.svg b/server/tests/fixtures/widgets/dsfr/formations/error_empty.svg new file mode 100644 index 00000000..24b49e87 --- /dev/null +++ b/server/tests/fixtures/widgets/dsfr/formations/error_empty.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/server/tests/fixtures/widgets/dsfr/regionales/12345678_filiere.svg b/server/tests/fixtures/widgets/dsfr/regionales/12345678_filiere.svg index ecc9bf94..3ad66256 100644 --- a/server/tests/fixtures/widgets/dsfr/regionales/12345678_filiere.svg +++ b/server/tests/fixtures/widgets/dsfr/regionales/12345678_filiere.svg @@ -127,6 +127,7 @@ + @@ -136,11 +137,11 @@ Pour la voie scolaire - - + + 100% @@ -149,16 +150,16 @@ fin de la formation - (tout type d'emploi salarié du privé) + (tout type d'emploi salarié du privé) + - - + 10% @@ -169,14 +170,15 @@ (Formation supérieure,redoublants, changement de filière) + - - + + 0% @@ -187,15 +189,17 @@ (recherche d’emploi, service civique, à l’étranger, indépendant, etc.) + - + + @@ -206,11 +210,11 @@ Pour la voie apprentissage - - + + 100% @@ -219,16 +223,16 @@ fin de la formation - (tout type d'emploi salarié du privé) + (tout type d'emploi salarié du privé) + - - + 10% @@ -239,14 +243,14 @@ (Formation supérieure,redoublants, changement de filière) + - - + 0% @@ -257,13 +261,14 @@ (recherche d’emploi, service civique, à l’étranger, indépendant, etc.) + - + diff --git a/server/tests/fixtures/widgets/dsfr/regionales/23830024203.svg b/server/tests/fixtures/widgets/dsfr/regionales/23830024203.svg index ab1fe0a2..c31ce872 100644 --- a/server/tests/fixtures/widgets/dsfr/regionales/23830024203.svg +++ b/server/tests/fixtures/widgets/dsfr/regionales/23830024203.svg @@ -124,12 +124,12 @@ - + - + - + 8% @@ -138,16 +138,17 @@ fin de la formation - (tout type d'emploi salarié du privé) + (tout type d'emploi salarié du privé) + + - - + - + 5% @@ -158,13 +159,15 @@ (Formation supérieure,redoublants, changement de filière) + - - + + + 5% @@ -175,9 +178,9 @@ (recherche d’emploi, service civique, à l’étranger, indépendant, etc.) + - diff --git a/server/tests/fixtures/widgets/dsfr/regionales/error.svg b/server/tests/fixtures/widgets/dsfr/regionales/error.svg index 24b49e87..e28a21cb 100644 --- a/server/tests/fixtures/widgets/dsfr/regionales/error.svg +++ b/server/tests/fixtures/widgets/dsfr/regionales/error.svg @@ -1,2 +1,168 @@ - + + + + + + + + + + + + + + + + + + + + + Nous sommes désolés mais nous n'avons + + + aucune information disponible pour + + + cette formation. + + + + + + + + *Données issues du dispositif InserJeunes + + + + + + + + + + + + + + + Que deviennent les + apprenants après cette + formation ? + + Les chiffres pour la région + Île-de-France + + + + + \ No newline at end of file diff --git a/server/tests/fixtures/widgets/dsfr/regionales/error_empty.svg b/server/tests/fixtures/widgets/dsfr/regionales/error_empty.svg new file mode 100644 index 00000000..24b49e87 --- /dev/null +++ b/server/tests/fixtures/widgets/dsfr/regionales/error_empty.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/server/tests/fixtures/widgets/lba/certifications/12345678_23830024202.svg b/server/tests/fixtures/widgets/lba/certifications/12345678_23830024202.svg index 513b5450..9430c8d0 100644 --- a/server/tests/fixtures/widgets/lba/certifications/12345678_23830024202.svg +++ b/server/tests/fixtures/widgets/lba/certifications/12345678_23830024202.svg @@ -1,4 +1,6 @@ + + Certification 12345678 @@ -7,8 +9,7 @@ Données InserJeunes pour la certification 12345678 (BAC filière pro et BAC filière apprentissage) pour le millesime 2020 - - + - - - - Pour la voie apprentissage - - - - - - - - 10% - - - sont inscrits en formation - - - (Formation supérieure,redoublants, - changement de filière) - - - - - - - - - 100% - - - sont en emploi au bout de 6 mois - - - (Tout type d'emploi salarié du privé) - - - - - - - - 0% - - - sont dans d’autres cas - - - (Recherche d’emploi, service - civique, à l’étranger, statut - indépendant, etc.) - - - - + + + + + + Pour la voie apprentissage + + + + + + + + 10% + + + sont inscrits en formation + + + (Formation supérieure,redoublants, + changement de filière) + + + + + + + + + 100% + + + sont en emploi au bout de 6 mois + + + (tout type d'emploi salarié du privé) + + + + + + + + + 0% + + + sont dans d’autres cas + + + (Recherche d’emploi, service + civique, à l’étranger, statut + indépendant, etc.) + + + + + + diff --git a/server/tests/fixtures/widgets/lba/certifications/23830024203.svg b/server/tests/fixtures/widgets/lba/certifications/23830024203.svg index e2c1e8db..154b7c6a 100644 --- a/server/tests/fixtures/widgets/lba/certifications/23830024203.svg +++ b/server/tests/fixtures/widgets/lba/certifications/23830024203.svg @@ -1,146 +1,158 @@ - + + + + Certification 23830024203 Données InserJeunes pour la certification 23830024203 (BAC filière apprentissage) pour le millesime 2020 + + + + + + + + + Les chiffres au niveau national + + + + + + + + + + + + + 5% + + + sont inscrits en formation + + + (Formation supérieure,redoublants, + changement de filière) + + + + + + + + + 6% + + + sont en emploi au bout de 6 mois + + + (tout type d'emploi salarié du privé) + + + - - - - - - - - - - - - 5% - - - sont inscrits en formation - - - (Formation supérieure,redoublants, - changement de filière) - - - - - - - - - 6% - - - sont en emploi au bout de 6 mois - - - (Tout type d'emploi salarié du privé) - - - - - - - - - 7% - - - sont dans d’autres cas - - - (Recherche d’emploi, service - civique, à l’étranger, statut - indépendant, etc.) - - - - - - - - *Données issues du dispositif InserJeunes - - - - promotion 2020 - - + + + + + 7% + + + sont dans d’autres cas + + + (Recherche d’emploi, service + civique, à l’étranger, statut + indépendant, etc.) + + - + + + + + *Données issues du dispositif InserJeunes + + + + promotion 2020 + + + + \ No newline at end of file diff --git a/server/tests/fixtures/widgets/lba/certifications/23830024203_filieres.svg b/server/tests/fixtures/widgets/lba/certifications/23830024203_filieres.svg index 1af041b2..b73e1096 100644 --- a/server/tests/fixtures/widgets/lba/certifications/23830024203_filieres.svg +++ b/server/tests/fixtures/widgets/lba/certifications/23830024203_filieres.svg @@ -1,4 +1,6 @@ + + Certification 12345678 @@ -7,8 +9,7 @@ Données InserJeunes pour la certification 12345678 (BAC filière pro et BAC filière apprentissage) pour le millesime 2020 - - + - - - - Pour la voie apprentissage - - - - - - - - 5% - - - sont inscrits en formation - - - (Formation supérieure,redoublants, - changement de filière) - - - - - - - - - 50% - - - sont en emploi au bout de 6 mois - - - (Tout type d'emploi salarié du privé) - - - - - - - - 45% - - - sont dans d’autres cas - - - (Recherche d’emploi, service - civique, à l’étranger, statut - indépendant, etc.) - - - - + + + + + + Pour la voie apprentissage + + + + + + + + 5% + + + sont inscrits en formation + + + (Formation supérieure,redoublants, + changement de filière) + + + + + + + + + 50% + + + sont en emploi au bout de 6 mois + + + (tout type d'emploi salarié du privé) + + + + + + + + + 45% + + + sont dans d’autres cas + + + (Recherche d’emploi, service + civique, à l’étranger, statut + indépendant, etc.) + + + + + + diff --git a/server/tests/fixtures/widgets/lba/certifications/error.svg b/server/tests/fixtures/widgets/lba/certifications/error.svg index 24b49e87..00816a5b 100644 --- a/server/tests/fixtures/widgets/lba/certifications/error.svg +++ b/server/tests/fixtures/widgets/lba/certifications/error.svg @@ -1,2 +1,114 @@ - + + + + + + + + + + + + + + + Les chiffres au niveau national + + + + + + + + + + + + Nous sommes désolés mais nous + n'avons aucune information + disponible pour cette formation. + + + + + + + *Données issues du dispositif InserJeunes + + + + + + + + \ No newline at end of file diff --git a/server/tests/fixtures/widgets/lba/formations/0751234J-1022105.svg b/server/tests/fixtures/widgets/lba/formations/0751234J-1022105.svg index 2aee7bad..353ebe73 100644 --- a/server/tests/fixtures/widgets/lba/formations/0751234J-1022105.svg +++ b/server/tests/fixtures/widgets/lba/formations/0751234J-1022105.svg @@ -1,5 +1,6 @@ - + + Certification 1022105, établissement 0751234J @@ -7,8 +8,7 @@ Données InserJeunes pour la certification 1022105 (BAC filière apprentissage) dispensée par l'établissement 0751234J, pour le millesime 2018_2019 - - + - - Les chiffres pour la région - Île-de-France + Les chiffres pour cet établissement - - + @@ -119,7 +116,7 @@ sont en emploi au bout de 6 mois - (Tout type d'emploi salarié du privé) + (tout type d'emploi salarié du privé) diff --git a/server/tests/fixtures/widgets/lba/formations/0751234J-1022105_data_0.svg b/server/tests/fixtures/widgets/lba/formations/0751234J-1022105_data_0.svg index a12ea296..c1ca7daa 100644 --- a/server/tests/fixtures/widgets/lba/formations/0751234J-1022105_data_0.svg +++ b/server/tests/fixtures/widgets/lba/formations/0751234J-1022105_data_0.svg @@ -1,5 +1,6 @@ - + + Certification 1022105, établissement 0751234J @@ -7,8 +8,7 @@ Données InserJeunes pour la certification 1022105 (BAC filière apprentissage) dispensée par l'établissement 0751234J, pour le millesime 2018_2019 - - + - - Les chiffres pour la région - Île-de-France + Les chiffres pour cet établissement - - + @@ -119,7 +116,7 @@ sont en emploi au bout de 6 mois - (Tout type d'emploi salarié du privé) + (tout type d'emploi salarié du privé) diff --git a/server/tests/fixtures/widgets/lba/formations/0751234J-1022105_horizontal.svg b/server/tests/fixtures/widgets/lba/formations/0751234J-1022105_horizontal.svg index b2f655c4..6fc10a58 100644 --- a/server/tests/fixtures/widgets/lba/formations/0751234J-1022105_horizontal.svg +++ b/server/tests/fixtures/widgets/lba/formations/0751234J-1022105_horizontal.svg @@ -1,4 +1,5 @@ + Certification 1022105, établissement 0751234J @@ -7,8 +8,7 @@ Données InserJeunes pour la certification 1022105 (BAC filière apprentissage) dispensée par l'établissement 0751234J, pour le millesime 2018_2019 - - + - - Les chiffres pour la région,Île-de-France + Les chiffres pour cet établissement - - + @@ -119,7 +117,7 @@ sont en emploi au bout de 6 mois - (Tout type d'emploi salarié du privé) + (tout type d'emploi salarié du privé) diff --git a/server/tests/fixtures/widgets/lba/formations/0751234J-1022105_one_data_horizontal.svg b/server/tests/fixtures/widgets/lba/formations/0751234J-1022105_one_data_horizontal.svg index efd0337c..9ff421d3 100644 --- a/server/tests/fixtures/widgets/lba/formations/0751234J-1022105_one_data_horizontal.svg +++ b/server/tests/fixtures/widgets/lba/formations/0751234J-1022105_one_data_horizontal.svg @@ -1,4 +1,5 @@ + Certification 1022105, établissement 0751234J @@ -7,8 +8,7 @@ Données InserJeunes pour la certification 1022105 (BAC filière apprentissage) dispensée par l'établissement 0751234J, pour le millesime 2018_2019 - - + - - Les chiffres pour la région,Île-de-France + Les chiffres pour cet établissement - - + Nous sommes désolés mais le - taux des inscrits en formation + taux des inscrits en formation n’est pas disponible pour le - moment. + le moment. @@ -116,7 +114,7 @@ sont en emploi au bout de 6 mois - (Tout type d'emploi salarié du privé) + (tout type d'emploi salarié du privé) @@ -127,8 +125,8 @@ Nous sommes désolés mais le taux - concernant les autres cas n’est pas - disponible pour le moment. + concernant les autres cas n’est pas + disponible pour le moment. diff --git a/server/tests/fixtures/widgets/lba/formations/0751234J-1022105_vertical.svg b/server/tests/fixtures/widgets/lba/formations/0751234J-1022105_vertical.svg index 0ed1eeed..1c540358 100644 --- a/server/tests/fixtures/widgets/lba/formations/0751234J-1022105_vertical.svg +++ b/server/tests/fixtures/widgets/lba/formations/0751234J-1022105_vertical.svg @@ -1,5 +1,6 @@ - + + Certification 1022105, établissement 0751234J @@ -7,8 +8,7 @@ Données InserJeunes pour la certification 1022105 (BAC filière apprentissage) dispensée par l'établissement 0751234J, pour le millesime 2018_2019 - - + - - Les chiffres pour la région - Île-de-France + Les chiffres pour cet établissement - - + Nous sommes désolés mais le - taux des inscrits en formation + taux des inscrits en formation n’est pas disponible pour le - moment. + le moment. @@ -115,7 +112,7 @@ sont en emploi au bout de 6 mois - (Tout type d'emploi salarié du privé) + (tout type d'emploi salarié du privé) @@ -125,8 +122,8 @@ Nous sommes désolés mais le taux - concernant les autres cas n’est pas - disponible pour le moment. + concernant les autres cas n’est pas + disponible pour le moment. diff --git a/server/tests/fixtures/widgets/lba/formations/error.svg b/server/tests/fixtures/widgets/lba/formations/error.svg index 24b49e87..49e99574 100644 --- a/server/tests/fixtures/widgets/lba/formations/error.svg +++ b/server/tests/fixtures/widgets/lba/formations/error.svg @@ -1,2 +1,114 @@ - + + + + + + + + + + + + + + + Les chiffres pour cet établissement + + + + + + + + + + + + Nous sommes désolés mais nous + n'avons aucune information + disponible pour cette formation. + + + + + + + *Données issues du dispositif InserJeunes + + + + + + + + \ No newline at end of file diff --git a/server/tests/fixtures/widgets/lba/regionales/12345678_filiere.svg b/server/tests/fixtures/widgets/lba/regionales/12345678_filiere.svg index 3ca8e6b6..9d0a3de5 100644 --- a/server/tests/fixtures/widgets/lba/regionales/12345678_filiere.svg +++ b/server/tests/fixtures/widgets/lba/regionales/12345678_filiere.svg @@ -1,4 +1,5 @@ + Certification 12345678 @@ -7,8 +8,7 @@ Données InserJeunes pour la certification 12345678 (BAC filière pro et BAC filière apprentissage) pour le millesime 2018_2019 - - + - - - - Pour la voie apprentissage - - - - - - - - 10% - - - sont inscrits en formation - - - (Formation supérieure,redoublants, - changement de filière) - - - - - - - - 100% - - - sont en emploi au bout de 6 mois - - - (Tout type d'emploi salarié du privé) - - - - - - - - - 0% - - - sont dans d’autres cas - - - (Recherche d’emploi, service - civique, à l’étranger, statut - indépendant, etc.) - - - - + + + + + + Pour la voie apprentissage + + + + + + + + 10% + + + sont inscrits en formation + + + (Formation supérieure,redoublants, + changement de filière) + + + + + + + + + 100% + + + sont en emploi au bout de 6 mois + + + (tout type d'emploi salarié du privé) + + + + + + + + + 0% + + + sont dans d’autres cas + + + (Recherche d’emploi, service + civique, à l’étranger, statut + indépendant, etc.) + + + + + + diff --git a/server/tests/fixtures/widgets/lba/regionales/23830024203.svg b/server/tests/fixtures/widgets/lba/regionales/23830024203.svg index 00281ddc..4bf32a1e 100644 --- a/server/tests/fixtures/widgets/lba/regionales/23830024203.svg +++ b/server/tests/fixtures/widgets/lba/regionales/23830024203.svg @@ -1,4 +1,5 @@ + Certification 23830024203 @@ -7,8 +8,7 @@ Données InserJeunes pour la certification 23830024203 (BAC filière apprentissage) pour le millesime 2018_2019 - - + - + + Les chiffres pour la région Île-de-France + - + - + @@ -119,7 +121,7 @@ sont en emploi au bout de 6 mois - (Tout type d'emploi salarié du privé) + (tout type d'emploi salarié du privé) diff --git a/server/tests/fixtures/widgets/lba/regionales/error.svg b/server/tests/fixtures/widgets/lba/regionales/error.svg index 24b49e87..69fc605f 100644 --- a/server/tests/fixtures/widgets/lba/regionales/error.svg +++ b/server/tests/fixtures/widgets/lba/regionales/error.svg @@ -1,2 +1,115 @@ - + + + + + + + + + + + + + + + Les chiffres pour la région + Île-de-France + + + + + + + + + + + + Nous sommes désolés mais nous + n'avons aucune information + disponible pour cette formation. + + + + + + + *Données issues du dispositif InserJeunes + + + + + + + + \ No newline at end of file diff --git a/server/tests/http/certificationsRoutes-test.js b/server/tests/http/certificationsRoutes-test.js index 8b5cd2d0..975635b9 100644 --- a/server/tests/http/certificationsRoutes-test.js +++ b/server/tests/http/certificationsRoutes-test.js @@ -736,28 +736,92 @@ describe("certificationsRoutes", () => { expect(svgFixture).not.differentFrom(response.data, { relaxedSpace: true }); }); - it("Vérifie qu'on obtient une erreur quand la statistique n'existe pas", async () => { - const { httpClient } = await startServer(); + describe("Vérifie qu'on obtient une erreur quand la statistique n'existe pas", async () => { + it("Retourne une image d'erreur par défaut", async () => { + const { httpClient } = await startServer(); + const response = await httpClient.get("/api/inserjeunes/certifications/INCONNUE.svg"); - const response = await httpClient.get("/api/inserjeunes/certifications/INCONNUE.svg"); + const svgFixture = await fs.promises.readFile(`tests/fixtures/widgets/dsfr/certifications/error.svg`, "utf8"); - assert.strictEqual(response.status, 404); - assert.strictEqual(response.data.message, "Certification inconnue"); + assert.strictEqual(response.status, 200); + assert.strictEqual(response.data, svgFixture); + }); + + it("Retourne une image vide quand imageOnError est empty", async () => { + const { httpClient } = await startServer(); + const response = await httpClient.get("/api/inserjeunes/certifications/INCONNUE.svg?imageOnError=empty"); + + const svgFixture = await fs.promises.readFile( + `tests/fixtures/widgets/dsfr/certifications/error_empty.svg`, + "utf8" + ); + + assert.strictEqual(response.status, 200); + assert.strictEqual(response.data, svgFixture); + }); + + it("Quand imageOnError est false", async () => { + const { httpClient } = await startServer(); + + const response = await httpClient.get("/api/inserjeunes/certifications/INCONNUE.svg?imageOnError=false"); + + assert.strictEqual(response.status, 404); + assert.strictEqual(response.data.message, "Certification inconnue"); + }); }); - it("Vérifie qu'on obtient une erreur quand il n'y a pas de données disponible pour la stats", async () => { - const { httpClient } = await startServer(); - await dbCollection("certificationsStats").insertOne({ - code_certification: "23830024203", - code_formation_diplome: "12345678", - millesime: "2020", - filiere: "apprentissage", - diplome: { code: "4", libelle: "BAC" }, + describe("Vérifie qu'on obtient une erreur quand il n'y a pas de données disponible pour la stat", async () => { + it("Retourne une image d'erreur par défaut", async () => { + const { httpClient } = await startServer(); + await dbCollection("certificationsStats").insertOne({ + code_certification: "23830024203", + code_formation_diplome: "12345678", + millesime: "2020", + filiere: "apprentissage", + diplome: { code: "4", libelle: "BAC" }, + }); + const response = await httpClient.get("/api/inserjeunes/certifications/23830024203.svg"); + + const svgFixture = await fs.promises.readFile(`tests/fixtures/widgets/dsfr/certifications/error.svg`, "utf8"); + + assert.strictEqual(response.status, 200); + assert.strictEqual(response.data, svgFixture); }); - const response = await httpClient.get("/api/inserjeunes/certifications/23830024203.svg"); - assert.strictEqual(response.status, 404); - assert.strictEqual(response.data.message, "Données non disponibles"); + it("Retourne une image vide quand imageOnError est empty", async () => { + const { httpClient } = await startServer(); + await dbCollection("certificationsStats").insertOne({ + code_certification: "23830024203", + code_formation_diplome: "12345678", + millesime: "2020", + filiere: "apprentissage", + diplome: { code: "4", libelle: "BAC" }, + }); + const response = await httpClient.get("/api/inserjeunes/certifications/23830024203.svg?imageOnError=empty"); + + const svgFixture = await fs.promises.readFile( + `tests/fixtures/widgets/dsfr/certifications/error_empty.svg`, + "utf8" + ); + + assert.strictEqual(response.status, 200); + assert.strictEqual(response.data, svgFixture); + }); + + it("Quand imageOnError est false", async () => { + const { httpClient } = await startServer(); + await dbCollection("certificationsStats").insertOne({ + code_certification: "23830024203", + code_formation_diplome: "12345678", + millesime: "2020", + filiere: "apprentissage", + diplome: { code: "4", libelle: "BAC" }, + }); + const response = await httpClient.get("/api/inserjeunes/certifications/23830024203.svg?imageOnError=false"); + + assert.strictEqual(response.status, 404); + assert.strictEqual(response.data.message, "Données non disponibles"); + }); }); it("Vérifie qu'on obtient une erreur avec une direction invalide", async () => { diff --git a/server/tests/http/formationsRoutes-test.js b/server/tests/http/formationsRoutes-test.js index 557e84fb..f3832ac0 100644 --- a/server/tests/http/formationsRoutes-test.js +++ b/server/tests/http/formationsRoutes-test.js @@ -689,23 +689,71 @@ describe("formationsRoutes", () => { expect(svgFixture).not.differentFrom(response.data, { relaxedSpace: true }); }); - it("Vérifie qu'on obtient une erreur quand la statistique n'existe pas", async () => { - const { httpClient } = await startServer(); + describe("Vérifie qu'on obtient une erreur quand la statistique n'existe pas", async () => { + it("Retourne une image d'erreur par défaut", async () => { + const { httpClient } = await startServer(); + const response = await httpClient.get("/api/inserjeunes/formations/0751234P-1022101.svg"); - const response = await httpClient.get("/api/inserjeunes/formations/0751234P-1022101.svg"); + const svgFixture = await fs.promises.readFile(`tests/fixtures/widgets/dsfr/formations/error.svg`, "utf8"); - assert.strictEqual(response.status, 404); - assert.strictEqual(response.data.message, "Formation inconnue"); + assert.strictEqual(response.status, 200); + assert.strictEqual(response.data, svgFixture); + }); + + it("Retourne une image vide quand imageOnError est empty", async () => { + const { httpClient } = await startServer(); + + const response = await httpClient.get("/api/inserjeunes/formations/0751234P-1022101.svg?imageOnError=empty"); + + const svgFixture = await fs.promises.readFile(`tests/fixtures/widgets/dsfr/formations/error_empty.svg`, "utf8"); + + assert.strictEqual(response.status, 200); + assert.strictEqual(response.data, svgFixture); + }); + + it("Quand imageOnError est false", async () => { + const { httpClient } = await startServer(); + + const response = await httpClient.get("/api/inserjeunes/formations/0751234P-1022101.svg?imageOnError=false"); + + assert.strictEqual(response.status, 404); + assert.strictEqual(response.data.message, "Formation inconnue"); + }); }); - it("Vérifie qu'on obtient une erreur quand il n'y a pas de données disponible pour la stats", async () => { - const { httpClient } = await startServer(); - await formationsStats().insertOne(newFormationStats({ uai: "0751234J", code_certification: "1022105" })); + describe("Vérifie qu'on obtient une erreur quand il n'y a pas de données disponible pour la stats", async () => { + it("Retourne une image d'erreur par défaut", async () => { + const { httpClient } = await startServer(); + await formationsStats().insertOne(newFormationStats({ uai: "0751234J", code_certification: "1022105" })); - const response = await httpClient.get("/api/inserjeunes/formations/0751234J-1022105.svg"); + const response = await httpClient.get("/api/inserjeunes/formations/0751234J-1022105.svg"); - assert.strictEqual(response.status, 404); - assert.strictEqual(response.data.message, "Données non disponibles"); + const svgFixture = await fs.promises.readFile(`tests/fixtures/widgets/dsfr/formations/error.svg`, "utf8"); + + assert.strictEqual(response.status, 200); + assert.strictEqual(response.data, svgFixture); + }); + + it("Retourne une image vide quand imageOnError est empty", async () => { + const { httpClient } = await startServer(); + await formationsStats().insertOne(newFormationStats({ uai: "0751234J", code_certification: "1022105" })); + + const response = await httpClient.get("/api/inserjeunes/formations/0751234J-1022105.svg?imageOnError=empty"); + const svgFixture = await fs.promises.readFile(`tests/fixtures/widgets/dsfr/formations/error_empty.svg`, "utf8"); + + assert.strictEqual(response.status, 200); + assert.strictEqual(response.data, svgFixture); + }); + + it("Quand imageOnError est false", async () => { + const { httpClient } = await startServer(); + await formationsStats().insertOne(newFormationStats({ uai: "0751234J", code_certification: "1022105" })); + + const response = await httpClient.get("/api/inserjeunes/formations/0751234J-1022105.svg?imageOnError=false"); + + assert.strictEqual(response.status, 404); + assert.strictEqual(response.data.message, "Données non disponibles"); + }); }); it("Vérifie qu'on obtient une erreur quand le format de l'UAI est invalide", async () => { diff --git a/server/tests/http/regionalesRoutes-test.js b/server/tests/http/regionalesRoutes-test.js index 772b02bf..23423b84 100644 --- a/server/tests/http/regionalesRoutes-test.js +++ b/server/tests/http/regionalesRoutes-test.js @@ -944,29 +944,99 @@ describe("regionalesRoutes", () => { expect(svgFixture).not.differentFrom(response.data, { relaxedSpace: true }); }); - it("Vérifie qu'on obtient une erreur quand la statistique n'existe pas", async () => { - const { httpClient } = await startServer(); + describe("Vérifie qu'on obtient une erreur quand la statistique n'existe pas", async () => { + it("Retourne une image d'erreur par défaut", async () => { + const { httpClient } = await startServer(); - const response = await httpClient.get("/api/inserjeunes/regionales/11/certifications/INCONNUE.svg"); + const response = await httpClient.get("/api/inserjeunes/regionales/11/certifications/INCONNUE.svg"); - assert.strictEqual(response.status, 404); - assert.strictEqual(response.data.message, "Pas de données disponibles"); + const svgFixture = await fs.promises.readFile(`tests/fixtures/widgets/dsfr/regionales/error.svg`, "utf8"); + + assert.strictEqual(response.status, 200); + assert.strictEqual(response.data, svgFixture); + }); + + it("Retourne une image vide quand imageOnError est empty", async () => { + const { httpClient } = await startServer(); + + const response = await httpClient.get( + "/api/inserjeunes/regionales/11/certifications/INCONNUE.svg?imageOnError=empty" + ); + + const svgFixture = await fs.promises.readFile(`tests/fixtures/widgets/dsfr/regionales/error_empty.svg`, "utf8"); + + assert.strictEqual(response.status, 200); + assert.strictEqual(response.data, svgFixture); + }); + + it("Quand imageOnError est false", async () => { + const { httpClient } = await startServer(); + + const response = await httpClient.get( + "/api/inserjeunes/regionales/11/certifications/INCONNUE.svg?imageOnError=false" + ); + + assert.strictEqual(response.status, 404); + assert.strictEqual(response.data.message, "Pas de données disponibles"); + }); }); - it("Vérifie qu'on obtient une erreur quand il n'y a pas de données disponible pour la stats", async () => { - const { httpClient } = await startServer(); - await dbCollection("regionalesStats").insertOne({ - region: { code: "11", nom: "Île-de-France" }, - code_certification: "23830024203", - code_formation_diplome: "12345678", - millesime: "2018_2019", - filiere: "apprentissage", - diplome: { code: "4", libelle: "BAC" }, + describe("Vérifie qu'on obtient une erreur quand il n'y a pas de données disponible pour la stats", async () => { + it("Retourne une image d'erreur par défaut", async () => { + const { httpClient } = await startServer(); + await dbCollection("regionalesStats").insertOne({ + region: { code: "11", nom: "Île-de-France" }, + code_certification: "23830024203", + code_formation_diplome: "12345678", + millesime: "2018_2019", + filiere: "apprentissage", + diplome: { code: "4", libelle: "BAC" }, + }); + const response = await httpClient.get("/api/inserjeunes/regionales/11/certifications/23830024203.svg"); + + const svgFixture = await fs.promises.readFile(`tests/fixtures/widgets/dsfr/regionales/error.svg`, "utf8"); + + assert.strictEqual(response.status, 200); + assert.strictEqual(response.data, svgFixture); }); - const response = await httpClient.get("/api/inserjeunes/regionales/11/certifications/23830024203.svg"); - assert.strictEqual(response.status, 404); - assert.strictEqual(response.data.message, "Données non disponibles"); + it("Retourne une image vide quand imageOnError est empty", async () => { + const { httpClient } = await startServer(); + await dbCollection("regionalesStats").insertOne({ + region: { code: "11", nom: "Île-de-France" }, + code_certification: "23830024203", + code_formation_diplome: "12345678", + millesime: "2018_2019", + filiere: "apprentissage", + diplome: { code: "4", libelle: "BAC" }, + }); + const response = await httpClient.get( + "/api/inserjeunes/regionales/11/certifications/23830024203.svg?imageOnError=empty" + ); + + const svgFixture = await fs.promises.readFile(`tests/fixtures/widgets/dsfr/regionales/error_empty.svg`, "utf8"); + + assert.strictEqual(response.status, 200); + assert.strictEqual(response.data, svgFixture); + }); + + it("Quand imageOnError est false", async () => { + const { httpClient } = await startServer(); + await dbCollection("regionalesStats").insertOne({ + region: { code: "11", nom: "Île-de-France" }, + code_certification: "23830024203", + code_formation_diplome: "12345678", + millesime: "2018_2019", + filiere: "apprentissage", + diplome: { code: "4", libelle: "BAC" }, + }); + const response = await httpClient.get( + "/api/inserjeunes/regionales/11/certifications/23830024203.svg?imageOnError=false" + ); + + assert.strictEqual(response.status, 404); + assert.strictEqual(response.data.message, "Données non disponibles"); + }); }); it("Vérifie qu'on obtient une erreur avec une direction invalide", async () => {