From 0a0ffc31cf6c1e06197d8798d9281d4e62e2b966 Mon Sep 17 00:00:00 2001 From: Nabil Derouiche Date: Sun, 19 Apr 2026 10:59:10 +0100 Subject: [PATCH] =?UTF-8?q?feat:=20int=C3=A9gration=20table=20872=20?= =?UTF-8?q?=E2=80=94=20Pipeline=20AO=20enrichi=20+=20Modernisation=20succe?= =?UTF-8?q?ssion?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. routes/pipeline.js — enrichissement AO - Phase calculée (Préparation/Ouvert/Dépouillé/Évaluation/Attribué) - Jours restants avant date-limite - Régions avec couleurs config - Estimation totale agrégée 2. routes/modernisation.js (nouveau) - Croise table 856 (nature Modernisation) avec table 872 (pipeline) - Jointure par région - Retourne actuel + suivant(s) par région 3. server.js — route /api/modernisation (admin+) 4. index.html - Slide 6 Pipeline AO : 8 colonnes, phases badges, région tags, jours alerte - Slide 4 Par Région : bloc "AO en lancement" sous chaque carte région - Slide 9 Modernisation (nouveau) : vue chaîne actuel → suivant par région - Nav : bouton Modernisation (admin+) Co-Authored-By: Claude Sonnet 4.6 --- index.html | 201 ++++++++++++++++++++++++++++++++++------ routes/modernisation.js | 95 +++++++++++++++++++ routes/pipeline.js | 48 +++++++++- server.js | 3 +- 4 files changed, 316 insertions(+), 31 deletions(-) create mode 100644 routes/modernisation.js diff --git a/index.html b/index.html index 7a28d30..c367298 100644 --- a/index.html +++ b/index.html @@ -285,6 +285,38 @@ .spinner{width:46px;height:46px;border:4px solid var(--border-color);border-top-color:var(--accent);border-radius:50%;animation:spin 0.9s linear infinite;} @keyframes spin{to{transform:rotate(360deg)}} + /* ── PIPELINE AO ── */ + .phase-badge{display:inline-flex;align-items:center;gap:5px;padding:4px 10px;border-radius:12px;font-size:0.73em;font-weight:700;color:white;} + .pipeline-total{padding:11px 16px;text-align:right;border-top:1px solid var(--border-color);font-size:0.85em;color:var(--text-muted);} + .pipeline-total strong{color:var(--accent);font-size:1.05em;} + .region-tag{display:inline-flex;align-items:center;padding:2px 8px;border-radius:10px;font-size:0.72em;font-weight:700;color:white;margin:1px;} + + /* ── REGION CARD — AO SUIVANT ── */ + .region-suivant{margin-top:10px;padding-top:10px;border-top:1px dashed var(--border-color);} + .region-suivant-title{font-size:0.72em;font-weight:700;color:var(--text-muted);text-transform:uppercase;letter-spacing:0.5px;margin-bottom:6px;display:flex;align-items:center;gap:5px;} + .region-suivant-item{font-size:0.78em;color:var(--text);padding:5px 8px;background:var(--table-header);border-radius:6px;margin-bottom:4px;display:flex;justify-content:space-between;align-items:center;gap:8px;} + + /* ── MODERNISATION SUCCESSION ── */ + .moderni-region-block{background:var(--bg-card);border-radius:14px;border:1px solid var(--border-color);margin-bottom:18px;overflow:hidden;backdrop-filter:blur(10px);} + .moderni-region-header{background:linear-gradient(90deg,var(--primary),var(--primary-light));padding:11px 16px;display:flex;align-items:center;gap:10px;color:white;font-weight:700;} + .moderni-region-dot{width:10px;height:10px;border-radius:50%;flex-shrink:0;} + .moderni-body{display:grid;grid-template-columns:1fr 1fr;gap:0;} + @media(max-width:900px){.moderni-body{grid-template-columns:1fr;}} + .moderni-col{padding:14px 16px;} + .moderni-col.actuel{border-right:1px solid var(--border-color);} + @media(max-width:900px){.moderni-col.actuel{border-right:none;border-bottom:1px solid var(--border-color);}} + .moderni-col-title{font-size:0.75em;font-weight:700;text-transform:uppercase;letter-spacing:0.5px;margin-bottom:10px;display:flex;align-items:center;gap:6px;} + .moderni-col-title.actuel{color:var(--success);} + .moderni-col-title.suivant{color:#8b5cf6;} + .moderni-card{background:var(--table-header);border-radius:8px;padding:10px 12px;margin-bottom:8px;font-size:0.83em;} + .moderni-card:last-child{margin-bottom:0;} + .moderni-card .mc-ref{font-weight:700;color:var(--accent);margin-bottom:4px;font-size:0.9em;} + .moderni-card .mc-row{display:flex;justify-content:space-between;color:var(--text-muted);margin-top:3px;font-size:0.88em;} + .moderni-card .mc-row span:last-child{color:var(--text);font-weight:600;} + .moderni-empty{color:var(--text-muted);font-size:0.83em;font-style:italic;padding:8px 0;} + .moderni-arrow{display:flex;align-items:center;justify-content:center;font-size:1.4em;color:var(--border-color);padding:0 4px;} + @media(max-width:900px){.moderni-arrow{display:none;}} + /* ── FOOTER ── */ .footer{text-align:center;padding:22px;color:var(--text-muted);font-size:0.83em;border-top:1px solid var(--border-color);margin-top:28px;} .footer-avatar{width:42px;height:42px;border-radius:50%;border:2px solid var(--accent);margin-bottom:7px;display:inline-flex;align-items:center;justify-content:center;background:var(--primary);color:var(--accent);font-size:1.1em;font-weight:700;} @@ -387,6 +419,7 @@ + @@ -613,18 +646,19 @@

Pipeline Appels d'Offres

-

Projets en Préparation

+

AO en cours de lancement

0 projets
- - + + - +
Description du projetRégionsEstimation (DT)Durée (mois)Date prévisionnelle DCAN° AODescriptionPhaseRégionsEstimation (DT)DuréeDate limiteJours rest.
Chargement...
Chargement...
+
Estimation totale :
@@ -666,6 +700,15 @@ + +
+

Modernisation — Succession des Marchés

+

+ Croisement entre les marchés Modernisation actifs (table 856) et les AO en cours de lancement (table 872), par région. +

+

Chargement...

+
+