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 */ }