This commit is contained in:
2026-07-12 19:29:52 +02:00
parent 96effbe15a
commit 47c5ad34fa
+49 -8
View File
@@ -460,14 +460,55 @@ export function generateSimulWithReinvestissements(db, investissementId) {
} }
db.transaction(() => { db.transaction(() => {
db.prepare('DELETE FROM simul_remboursements WHERE investissement_id=?').run(investissementId); if (inv.date_debut_simul) {
const stmt = db.prepare(` // ── Mode restructuration ──────────────────────────────────────────────
INSERT INTO simul_remboursements // Même logique que generateSimul() : conserver les échéances déjà payées avant
(investissement_id, numero_echeance, date_prevue, capital_prevu, interets_prevus, total_prevu) // la date de restructuration, supprimer le reste, et renuméroter à partir du
VALUES (?,?,?,?,?,?) // nombre de mois réellement écoulés (pas de repartir à 1, qui ferait disparaître
`); // les échéances passées — déjà payées — de la table des projections).
for (const e of schedule) { const keptEntries = db.prepare(`
stmt.run(investissementId, e.n, e.date, e.capital, e.interets, e.total); SELECT sr.id, sr.numero_echeance FROM simul_remboursements sr
WHERE sr.investissement_id = ?
AND sr.date_prevue < ?
AND EXISTS (
SELECT 1 FROM remboursements r
WHERE r.investissement_id = sr.investissement_id
AND substr(r.date_remb, 1, 7) = substr(sr.date_prevue, 1, 7)
)
ORDER BY sr.numero_echeance
`).all(investissementId, inv.date_debut_simul);
if (keptEntries.length > 0) {
db.prepare(
`DELETE FROM simul_remboursements WHERE investissement_id = ? AND id NOT IN (${keptEntries.map(() => '?').join(',')})`
).run(investissementId, ...keptEntries.map(e => e.id));
} else {
db.prepare('DELETE FROM simul_remboursements WHERE investissement_id=?').run(investissementId);
}
const elapsedMonths = (inv.date_premiere_echeance && inv.date_debut_simul > inv.date_premiere_echeance)
? monthsDiff(inv.date_premiere_echeance, inv.date_debut_simul)
: keptEntries.length;
const stmt = db.prepare(`
INSERT INTO simul_remboursements
(investissement_id, numero_echeance, date_prevue, capital_prevu, interets_prevus, total_prevu)
VALUES (?,?,?,?,?,?)
`);
for (const e of schedule) {
stmt.run(investissementId, elapsedMonths + e.n, e.date, e.capital, e.interets, e.total);
}
} else {
// ── Mode standard : régénération complète ────────────────────────────
db.prepare('DELETE FROM simul_remboursements WHERE investissement_id=?').run(investissementId);
const stmt = db.prepare(`
INSERT INTO simul_remboursements
(investissement_id, numero_echeance, date_prevue, capital_prevu, interets_prevus, total_prevu)
VALUES (?,?,?,?,?,?)
`);
for (const e of schedule) {
stmt.run(investissementId, e.n, e.date, e.capital, e.interets, e.total);
}
} }
})(); })();
} }