Fixe bug
This commit is contained in:
@@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})();
|
})();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user