From 4f82b29f18113e8492f19854b18e61a28aaa4f79 Mon Sep 17 00:00:00 2001 From: Alexis Burnaz <48258099+alxsbrz@users.noreply.github.com> Date: Fri, 19 Dec 2025 18:27:17 +0100 Subject: [PATCH] minor changes --- ecole/src/app.js | 1 - .../historiqueParcoursController.js | 3 +- ecole/src/db/pb_data/logs.db-wal | Bin 4243632 -> 4243632 bytes ecole/src/services/globalService.js | 61 ++++++++++++++++++ ecole/src/utils/dateHelper.js | 33 ---------- ecole/src/utils/renderHelper.js | 7 ++ ecole/src/utils/xmlHelper.js | 42 ------------ 7 files changed, 69 insertions(+), 78 deletions(-) delete mode 100644 ecole/src/utils/dateHelper.js delete mode 100644 ecole/src/utils/xmlHelper.js diff --git a/ecole/src/app.js b/ecole/src/app.js index f1733da4..40da0a56 100644 --- a/ecole/src/app.js +++ b/ecole/src/app.js @@ -15,7 +15,6 @@ const routes = require('./routes'); const app = express(); // Configuration du moteur de rendu HTML avec EJS -app.set('views', path.join(process.cwd(), 'views')); app.set('view engine', 'ejs'); app.engine('ejs', require('ejs').__express); diff --git a/ecole/src/controllers/historiqueParcoursController.js b/ecole/src/controllers/historiqueParcoursController.js index aa65a926..65def7dc 100644 --- a/ecole/src/controllers/historiqueParcoursController.js +++ b/ecole/src/controllers/historiqueParcoursController.js @@ -5,8 +5,7 @@ const renderPage = require("../utils/renderHelper"); const logger = require("../utils/logger"); const parcoursService = require("../services/parcoursService"); const clientService = require("../services/clientService"); -const { fmtDateFR } = require("../utils/dateHelper"); -const { xmlEsc, cellXml, rowXml } = require("../utils/xmlHelper"); +const { fmtDateFR, xmlEsc, cellXml, rowXml } = require("../services/globalService"); /** * Construit les filtres et le tri PocketBase à partir des paramètres DataTables diff --git a/ecole/src/db/pb_data/logs.db-wal b/ecole/src/db/pb_data/logs.db-wal index 703b1724ed6ed201b0fd6a38c745b8ab23d97c0c..deb3c7be385b371e5f2b0c56bd3c58313d69f819 100644 GIT binary patch delta 30976 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/g, ">") + .replace(/"/g, """) + .replace(/'/g, "'"); +} + +/** + * Génère une cellule XML pour Excel + * @param {string} v - Valeur de la cellule + * @returns {string} Cellule XML formatée + */ +function cellXml(v) { + return `${xmlEsc(v)}`; +} + +/** + * Génère une ligne XML pour Excel + * @param {Array} cells - Tableau de valeurs pour les cellules + * @returns {string} Ligne XML formatée + */ +function rowXml(cells) { + return `${cells.map(cellXml).join("")}`; +} + module.exports = { getRecordIdFromFieldValue, fetchInfoByCriteria, updateRecordFromData, cleanDoubleSpaces, customFormatNumber, + fmtDateFR, + xmlEsc, + cellXml, + rowXml, }; diff --git a/ecole/src/utils/dateHelper.js b/ecole/src/utils/dateHelper.js deleted file mode 100644 index 1c04f2b1..00000000 --- a/ecole/src/utils/dateHelper.js +++ /dev/null @@ -1,33 +0,0 @@ -/** - * Utilitaires de formatage de dates côté serveur - */ - -/** - * Formate une date ISO en format français (jj/mm/aaaa) - * @param {string|Date} iso - Date au format ISO - * @param {boolean} withTime - Inclure l'heure (défaut: false pour compatibilité avec fmtFR) - * @returns {string} Date formatée (dd/mm/yyyy ou dd/mm/yyyy hh:mm) - */ -function fmtDateFR(iso, withTime = false) { - if (!iso) return "NC"; - - const d = new Date(iso); - if (isNaN(d.getTime())) return "NC"; - - const dd = String(d.getDate()).padStart(2, "0"); - const mm = String(d.getMonth() + 1).padStart(2, "0"); - const yyyy = d.getFullYear(); - - if (!withTime) { - return `${dd}/${mm}/${yyyy}`; - } - - const hh = String(d.getHours()).padStart(2, "0"); - const mi = String(d.getMinutes()).padStart(2, "0"); - return `${dd}/${mm}/${yyyy} ${hh}:${mi}`; -} - -module.exports = { - fmtDateFR -}; - diff --git a/ecole/src/utils/renderHelper.js b/ecole/src/utils/renderHelper.js index 89c9598e..b9c6fdc6 100644 --- a/ecole/src/utils/renderHelper.js +++ b/ecole/src/utils/renderHelper.js @@ -1,6 +1,13 @@ const ejs = require('ejs'); const path = require('path'); +/** + * Rend une page EJS + * @param {string} routePath - Chemin vers le fichier EJS + * @param {Object} res - Objet response Express + * @param {Object} options - Options à passer au template + * @param {boolean} fragment - Si true, envoie uniquement le fragment sans layout + */ function renderPage(routePath, res, options = {}, fragment = false) { ejs.renderFile(path.join(process.cwd(), 'views', routePath), options, (err, str) => { if (err) { diff --git a/ecole/src/utils/xmlHelper.js b/ecole/src/utils/xmlHelper.js deleted file mode 100644 index c218872b..00000000 --- a/ecole/src/utils/xmlHelper.js +++ /dev/null @@ -1,42 +0,0 @@ -/** - * Utilitaires pour la génération de fichiers XML (format Excel SpreadsheetML) - */ - -/** - * Échappe les caractères spéciaux XML - * @param {string} s - Chaîne à échapper - * @returns {string} Chaîne échappée - */ -function xmlEsc(s) { - return String(s ?? "") - .replace(/&/g, "&") - .replace(//g, ">") - .replace(/"/g, """) - .replace(/'/g, "'"); -} - -/** - * Génère une cellule XML pour Excel - * @param {string} v - Valeur de la cellule - * @returns {string} Cellule XML formatée - */ -function cellXml(v) { - return `${xmlEsc(v)}`; -} - -/** - * Génère une ligne XML pour Excel - * @param {Array} cells - Tableau de valeurs pour les cellules - * @returns {string} Ligne XML formatée - */ -function rowXml(cells) { - return `${cells.map(cellXml).join("")}`; -} - -module.exports = { - xmlEsc, - cellXml, - rowXml -}; -