From 772dff3061410cbcc7d456114a3f0e95899e9a4d Mon Sep 17 00:00:00 2001 From: Manus Date: Wed, 10 Jun 2026 09:36:47 +0000 Subject: [PATCH] =?UTF-8?q?Checkpoint:=20Ajout=20de=20mode=5Fventilation?= =?UTF-8?q?=20dans=20buildLignesFromSource=20(copi=C3=A9=20depuis=20p.mode?= =?UTF-8?q?=5Fventilation=20du=20JSON).=20Enrichissement=20de=20loadOpexSt?= =?UTF-8?q?ate=20pour=20fusionner=20mode=5Fventilation=20depuis=20la=20sou?= =?UTF-8?q?rce=20JSON=20sur=20les=20lignes=20d=C3=A9j=C3=A0=20sauvegard?= =?UTF-8?q?=C3=A9es=20dans=20localStorage=20(r=C3=A9trocompatibilit=C3=A9)?= =?UTF-8?q?.=20La=20colonne=20Ventilation=20affiche=20maintenant=20les=20v?= =?UTF-8?q?raies=20valeurs=20du=20fichier=20Excel=20source.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/src/pages/DsiOpex.tsx | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/client/src/pages/DsiOpex.tsx b/client/src/pages/DsiOpex.tsx index 2f7f689..c71efd9 100644 --- a/client/src/pages/DsiOpex.tsx +++ b/client/src/pages/DsiOpex.tsx @@ -166,6 +166,7 @@ function buildLignesFromSource(annee?: number): LigneOpex[] { budget_n1: p.budget_n1 ?? 0, montant: (annee === 2025 ? p.montant_previsionnel_2025 : p.montant_previsionnel_2026) ?? 0, isCustom: false, + mode_ventilation: p.mode_ventilation ?? null, })); } @@ -192,13 +193,20 @@ function loadOpexState(annee: number): OpexAnneeState { if (parsed.lignes && Array.isArray(parsed.lignes)) { // Filtrer les lignes parasites (libellés = noms de catégories ou de synthèse) const lignesFiltrees = parsed.lignes.filter(l => !isLigneParasite(l)); - if (lignesFiltrees.length !== parsed.lignes.length) { - // Purger et sauvegarder la version nettoyée - const cleaned = { ...parsed, lignes: lignesFiltrees }; + // Enrichir avec mode_ventilation depuis la source JSON (les anciennes sauvegardes ne l'ont pas) + const srcLignes = (annee === 2025 || annee === 2026) ? buildLignesFromSource(annee) : []; + const srcMap = new Map(srcLignes.map(l => [l.libelle, l])); + const lignesEnrichies = lignesFiltrees.map(l => ({ + ...l, + mode_ventilation: l.mode_ventilation ?? srcMap.get(l.libelle)?.mode_ventilation ?? null, + })); + const needsSave = lignesFiltrees.length !== parsed.lignes.length || lignesEnrichies.some((l, i) => l.mode_ventilation !== lignesFiltrees[i]?.mode_ventilation); + if (needsSave) { + const cleaned = { ...parsed, lignes: lignesEnrichies }; try { localStorage.setItem(getOpexStorageKey(annee), JSON.stringify(cleaned)); } catch { /* ignore */ } return cleaned; } - return parsed; + return { ...parsed, lignes: lignesEnrichies }; } } } catch { /* ignore */ }