feat: v3 — refonte thème + avancement physique + exports conformes cibles

- index.html: refonte complète thème dark gradient (top-header + slide-nav, 9 vues)
- calc.js: ajout resultatPhysique(), avancement physique partout
- routes/pilotage.js: catégories Normal/Sous Avancement/Dépassement/Non déterminé
- services/export-xlsx.js: rapport complet multi-feuilles (Situation + Pilotage)
- routes/export.js: XLSX/PPTX/DOCX — sortie unique complète Zone Sud
  - PPTX: 5 slides (couverture, synthèse, alertes, pilotage, par région)
  - DOCX: rapport structuré (couverture, KPIs, alertes, par région, pilotage)
- services/export-pdf.js: colonnes avancement physique uniquement

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Nabil Derouiche
2026-03-13 19:45:53 +01:00
co-authored by Claude Sonnet 4.6
parent 88a0dbe6d2
commit 8d901da125
14 changed files with 1911 additions and 1861 deletions
+8 -6
View File
@@ -187,9 +187,10 @@ function generateEnService(data) {
return pdfToBuffer(doc, d => {
header(d, 'Marchés en Service — RLA', `${data.count||0} marché(s) actif(s)`);
table(d, { title:'Liste des Marchés en Service',
headers:['Réf.','Projet','Région','Entrepreneur','Montant','Taux Phy.','Taux Fin.','Date Fin','Alerte'],
colWidths:[60,140,65,115,90,50,50,65,55],
rows: (data.items||[]).map(r=>[r.ref,r.projet,r.region,r.entrepreneur,r.montant,r.taux_phy,r.taux_fin,r.date_fin,NL(r.niveau_alerte)]) });
headers:['Réf.','Projet','Région','Entrepreneur','Montant Max','Période','Avt. Phy.','Délai Rest.','Alerte'],
colWidths:[65,140,65,110,90,90,55,55,60],
rows: (data.items||[]).map(r=>[r.ref,r.projet,r.region,r.entrepreneur,r.montant,
`${r.date_debut||'—'}${r.date_fin||'—'}`,r.taux_phy,r.delai_restant??'—',NL(r.niveau_alerte)]) });
footer(d, 1);
});
}
@@ -199,9 +200,10 @@ function generateEnCours(data) {
return pdfToBuffer(doc, d => {
header(d, 'Marchés en Cours — RLA', `${data.count||0} marché(s) en cours`);
table(d, { title:'Liste des Marchés en Cours',
headers:['Réf.','Projet','Région','Entrepreneur','Montant','Taux Phy.','Taux Fin.','Date Fin','Niveau Avt.'],
colWidths:[60,135,65,115,90,50,50,65,60],
rows: (data.items||[]).map(r=>[r.ref,r.projet,r.region,r.entrepreneur,r.montant,r.taux_phy,r.taux_fin,r.date_fin,r.niveau_avancement]) });
headers:['Réf.','Projet','Région','Entrepreneur','Montant Max','Période','Avt. Phy.','Niveau Avt.'],
colWidths:[65,140,65,110,90,90,60,70],
rows: (data.items||[]).map(r=>[r.ref,r.projet,r.region,r.entrepreneur,r.montant,
`${r.date_debut||'—'}${r.date_fin||'—'}`,r.taux_phy,r.niveau_avancement||'—']) });
footer(d, 1);
});
}