minor changes
This commit is contained in:
parent
a929c0770c
commit
4f82b29f18
|
|
@ -15,7 +15,6 @@ const routes = require('./routes');
|
||||||
const app = express();
|
const app = express();
|
||||||
|
|
||||||
// Configuration du moteur de rendu HTML avec EJS
|
// Configuration du moteur de rendu HTML avec EJS
|
||||||
app.set('views', path.join(process.cwd(), 'views'));
|
|
||||||
app.set('view engine', 'ejs');
|
app.set('view engine', 'ejs');
|
||||||
app.engine('ejs', require('ejs').__express);
|
app.engine('ejs', require('ejs').__express);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,7 @@ const renderPage = require("../utils/renderHelper");
|
||||||
const logger = require("../utils/logger");
|
const logger = require("../utils/logger");
|
||||||
const parcoursService = require("../services/parcoursService");
|
const parcoursService = require("../services/parcoursService");
|
||||||
const clientService = require("../services/clientService");
|
const clientService = require("../services/clientService");
|
||||||
const { fmtDateFR } = require("../utils/dateHelper");
|
const { fmtDateFR, xmlEsc, cellXml, rowXml } = require("../services/globalService");
|
||||||
const { xmlEsc, cellXml, rowXml } = require("../utils/xmlHelper");
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Construit les filtres et le tri PocketBase à partir des paramètres DataTables
|
* Construit les filtres et le tri PocketBase à partir des paramètres DataTables
|
||||||
|
|
|
||||||
Binary file not shown.
|
|
@ -76,10 +76,71 @@ function cleanDoubleSpaces(inputString) {
|
||||||
return inputString.replace(/\s{2,}/g, " ");
|
return inputString.replace(/\s{2,}/g, " ");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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)
|
||||||
|
* @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}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* É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, """)
|
||||||
|
.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 `<Cell><Data ss:Type="String">${xmlEsc(v)}</Data></Cell>`;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Génère une ligne XML pour Excel
|
||||||
|
* @param {Array<string>} cells - Tableau de valeurs pour les cellules
|
||||||
|
* @returns {string} Ligne XML formatée
|
||||||
|
*/
|
||||||
|
function rowXml(cells) {
|
||||||
|
return `<Row>${cells.map(cellXml).join("")}</Row>`;
|
||||||
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
getRecordIdFromFieldValue,
|
getRecordIdFromFieldValue,
|
||||||
fetchInfoByCriteria,
|
fetchInfoByCriteria,
|
||||||
updateRecordFromData,
|
updateRecordFromData,
|
||||||
cleanDoubleSpaces,
|
cleanDoubleSpaces,
|
||||||
customFormatNumber,
|
customFormatNumber,
|
||||||
|
fmtDateFR,
|
||||||
|
xmlEsc,
|
||||||
|
cellXml,
|
||||||
|
rowXml,
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -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
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
@ -1,6 +1,13 @@
|
||||||
const ejs = require('ejs');
|
const ejs = require('ejs');
|
||||||
const path = require('path');
|
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) {
|
function renderPage(routePath, res, options = {}, fragment = false) {
|
||||||
ejs.renderFile(path.join(process.cwd(), 'views', routePath), options, (err, str) => {
|
ejs.renderFile(path.join(process.cwd(), 'views', routePath), options, (err, str) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
|
|
|
||||||
|
|
@ -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, """)
|
|
||||||
.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 `<Cell><Data ss:Type="String">${xmlEsc(v)}</Data></Cell>`;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Génère une ligne XML pour Excel
|
|
||||||
* @param {Array<string>} cells - Tableau de valeurs pour les cellules
|
|
||||||
* @returns {string} Ligne XML formatée
|
|
||||||
*/
|
|
||||||
function rowXml(cells) {
|
|
||||||
return `<Row>${cells.map(cellXml).join("")}</Row>`;
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
xmlEsc,
|
|
||||||
cellXml,
|
|
||||||
rowXml
|
|
||||||
};
|
|
||||||
|
|
||||||
Loading…
Reference in New Issue