minor changes
This commit is contained in:
parent
a929c0770c
commit
4f82b29f18
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -76,10 +76,71 @@ function cleanDoubleSpaces(inputString) {
|
|||
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 = {
|
||||
getRecordIdFromFieldValue,
|
||||
fetchInfoByCriteria,
|
||||
updateRecordFromData,
|
||||
cleanDoubleSpaces,
|
||||
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 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) {
|
||||
|
|
|
|||
|
|
@ -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