From 0adfcba5d243d2e6ffbd650904c470a882bb627c Mon Sep 17 00:00:00 2001 From: Manus Date: Wed, 3 Jun 2026 10:04:55 +0000 Subject: [PATCH] =?UTF-8?q?Checkpoint:=20Renouvellement=20PC=20affiche=20u?= =?UTF-8?q?n=20=C3=A9tat=20vide=20pour=20les=20ann=C3=A9es=20sans=20invent?= =?UTF-8?q?aire=20import=C3=A9=20(hors=202026-2027).=20Construction=20Budg?= =?UTF-8?q?et=20affiche=20la=20valeur=20de=20renouvellement=20de=20l'ann?= =?UTF-8?q?=C3=A9e=20N-1=20dans=20les=20donn=C3=A9es=20historiques=20(depu?= =?UTF-8?q?is=20les=20saisies=20CAPEX=20N-1=20ou=20l'enveloppe=202026=20du?= =?UTF-8?q?=20fichier=20BP2027=20en=20fallback).=20Titre=20du=20formulaire?= =?UTF-8?q?=20dynamique=20selon=20l'ann=C3=A9e.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/src/pages/Budget2027.tsx | 68 ++++++++++++++++++++++----------- client/src/pages/Home.tsx | 18 ++++++++- 2 files changed, 63 insertions(+), 23 deletions(-) diff --git a/client/src/pages/Budget2027.tsx b/client/src/pages/Budget2027.tsx index 8ab376b..af43b53 100644 --- a/client/src/pages/Budget2027.tsx +++ b/client/src/pages/Budget2027.tsx @@ -387,34 +387,58 @@ export default function Budget2027() { {selectedCode && selectedBP && ( <> - {/* Données informatives 2026 */} -
-
- -
-

- Données historiques — à titre informatif -

-

- Enveloppes de renouvellement allouées par le Siège Itinova (non modifiables) -

-
-
-
-

Renouvellement 2026

-

- {selectedBP.renouvellement_2026 > 0 ? formatEuros(selectedBP.renouvellement_2026) : '—'} -

-

Enveloppe Siège

-
-
+ {/* Données historiques N-1 */} + {(() => { + const anneeN1 = annee - 1; + // Valeur N-1 : d'abord chercher dans les saisies CAPEX de l'année N-1, + // sinon utiliser l'enveloppe 2026 issue du fichier BP2027 (si N-1 === 2026) + let valeurN1: number = 0; + try { + const storageN1 = localStorage.getItem(`itinova_budget_capex_${anneeN1}`); + if (storageN1) { + const saisiesN1 = JSON.parse(storageN1) as Record; + const saisieEtab = saisiesN1[selectedCode]; + if (saisieEtab?.renouvellement_2027 !== undefined) { + valeurN1 = saisieEtab.renouvellement_2027; + } + } + } catch {} + // Fallback : enveloppe 2026 du fichier BP2027 si N-1 = 2026 + if (valeurN1 === 0 && anneeN1 === 2026 && selectedBP.renouvellement_2026 > 0) { + valeurN1 = selectedBP.renouvellement_2026; + } + return ( +
+
+ +
+

+ Données historiques — à titre informatif +

+

+ Renouvellement de l'année précédente ({anneeN1}) — non modifiable +

+
+
+
+

Renouvellement {anneeN1}

+

+ {valeurN1 > 0 ? formatEuros(valeurN1) : '0 €'} +

+

+ {valeurN1 > 0 ? 'Valeur saisie ou enveloppe allouée' : 'Aucune saisie pour cet exercice'} +

+
+
+ ); + })()} {/* Formulaire de saisie */}

- Budget prévisionnel 2027 — Saisie directeur + Budget prévisionnel {annee} — Saisie directeur

(tous les champs sont optionnels)
diff --git a/client/src/pages/Home.tsx b/client/src/pages/Home.tsx index b852fc6..f873454 100644 --- a/client/src/pages/Home.tsx +++ b/client/src/pages/Home.tsx @@ -45,6 +45,9 @@ export default function Home() { } = useBudgetData(); const { annee } = useAnnee(); + // Les données de parc ne sont disponibles que pour 2026 et 2027 + const ANNEES_AVEC_DONNEES = [2026, 2027]; + const hasDonnees = ANNEES_AVEC_DONNEES.includes(annee); const [selectedEtab, setSelectedEtab] = useState(null); const [sidebarCollapsed, setSidebarCollapsed] = useState(false); const [viewMode, setViewMode] = useState('grid'); @@ -232,7 +235,20 @@ export default function Home() { {/* Contenu — vue vignettes ou liste */}
- {etablissements.length === 0 ? ( + {!hasDonnees ? ( +
+
+ +
+

+ Aucune donnée pour {annee} +

+

+ Les données d'inventaire parc PC pour l'exercice {annee} n'ont pas encore été importées. + Les années disponibles sont 2026 et 2027. +

+
+ ) : etablissements.length === 0 ? (

Aucun établissement trouvé