import { useEffect, useState } from 'react'; import { api } from '../api.js'; import { useInvestisseur } from '../context/InvestisseurContext.jsx'; import { fmtEUR, fmtDate } from '../utils/format.js'; export default function SimulRemboursements() { const { activeId } = useInvestisseur(); const [investissements, setInvestissements] = useState([]); const [selected, setSelected] = useState(''); const [echeances, setEcheances] = useState([]); const [busy, setBusy] = useState(false); const [msg, setMsg] = useState(null); useEffect(() => { if (!activeId) return; api.get('/investissements').then(setInvestissements); }, [activeId]); useEffect(() => { if (!selected) { setEcheances([]); return; } api.get('/simul', { investissement_id: selected }).then(setEcheances); }, [selected]); const generate = async () => { if (!selected) return; setBusy(true); setMsg(null); try { const r = await api.post('/simul/generate', { investissement_id: Number(selected), replace: true, }); setMsg(`✔ ${r.inserted} échéances générées.`); const e = await api.get('/simul', { investissement_id: selected }); setEcheances(e); } catch (e) { setMsg(`✗ ${e.message}`); } finally { setBusy(false); } }; const inv = investissements.find(i => i.id === Number(selected)); const totals = echeances.reduce((acc, e) => { acc.capital += e.capital_prevu; acc.interets += e.interets_prevus; acc.total += e.total_prevu; return acc; }, { capital: 0, interets: 0, total: 0 }); return ( <>
| # | Date prévue | Capital | Intérêts | Total échéance |
|---|---|---|---|---|
| {e.numero_echeance} | {fmtDate(e.date_prevue)} | {fmtEUR(e.capital_prevu)} | {fmtEUR(e.interets_prevus)} | {fmtEUR(e.total_prevu)} |