diff --git a/client/src/pages/DsiOpex.tsx b/client/src/pages/DsiOpex.tsx index 6d1b080..7bab533 100644 --- a/client/src/pages/DsiOpex.tsx +++ b/client/src/pages/DsiOpex.tsx @@ -454,6 +454,32 @@ export default function DsiOpex() { toast.info('Montants réinitialisés', { description: 'Les valeurs ont été restaurées depuis les données sources.' }); }, [isValidated, annee]); + // Créer depuis l'année précédente (N-1) + const handleCreateFromN1 = useCallback(() => { + const anneeN1 = annee - 1; + const stateN1 = loadOpexState(anneeN1); + if (stateN1.lignes.length === 0) { + toast.error(`Aucune donnée disponible pour ${anneeN1}`, { + description: `Veuillez d'abord créer ou importer l'OPEX ${anneeN1}.`, + }); + return; + } + // Cloner les lignes de N-1 en mettant budget_n1 = montant N-1 et montant = montant N-1 + const lignesClonees: LigneOpex[] = stateN1.lignes.map(l => ({ + ...l, + id: l.isCustom ? genId() : l.id, + budget_n1: l.montant, + montant: l.montant, + })); + const newState: OpexAnneeState = { lignes: lignesClonees, validated: false, savedAt: new Date().toISOString() }; + setOpexState(newState); + saveOpexState(annee, newState); + setIsDirty(false); + toast.success(`OPEX ${annee} créé depuis ${anneeN1}`, { + description: `${lignesClonees.length} postes de charges copiés. Vous pouvez maintenant les modifier.`, + }); + }, [annee]); + // Valider définitivement const handleValidate = useCallback(() => { const newState: OpexAnneeState = { @@ -822,8 +848,54 @@ export default function DsiOpex() { {/* Contenu principal */}
+ L'OPEX {annee} n'a pas encore été créé. Vous pouvez le créer en copiant les charges de {annee - 1} ou en ajoutant les lignes manuellement. +
+