Corrections sur les jobs En retard

This commit is contained in:
2026-07-12 17:39:57 +02:00
parent 0d8f92bc9a
commit ec3c7f7cab
4 changed files with 225 additions and 42 deletions
+43 -15
View File
@@ -7,6 +7,7 @@ import db from '../db/index.js';
import { HttpError } from '../middleware/errorHandler.js';
import { requireInvestisseur } from '../middleware/investisseurScope.js';
import { generateSimul, generateSimulWithReinvestissements } from '../utils/schedule.js';
import { recordHistory, detectChangements, detectTypeEvenement } from './investissements.js';
const router = Router();
@@ -417,7 +418,7 @@ router.post('/dossier', (req, res, next) => {
/* ── 2. Chercher l'investissement existant (clé naturelle) */
const existing = db.prepare(`
SELECT id FROM investissements
SELECT * FROM investissements
WHERE investisseur_id = ? AND nom_projet = ? AND date_souscription = ?
LIMIT 1
`).get(req.investisseur.id, inv.nom_projet, inv.date_souscription);
@@ -499,6 +500,20 @@ router.post('/dossier', (req, res, next) => {
} else {
/* ────────────── SCÉNARIO UPDATE ──────────────────────── */
investissementId = existing.id;
const nouveau = {
plateforme_id: plateformeId,
date_premiere_echeance: inv.date_premiere_echeance || null,
date_cible: inv.date_cible || null,
date_debut_simul: inv.date_debut_simul || null,
montant_investi: Number(inv.montant_investi),
taux_interet: inv.taux_interet ?? null,
duree_mois: inv.duree_mois ?? null,
type_remb: inv.type_remb || 'in_fine',
freq_interets: inv.freq_interets || 'mensuel',
statut: inv.statut || 'en_cours',
};
db.prepare(`
UPDATE investissements SET
plateforme_id = ?, emetteur = ?,
@@ -508,11 +523,10 @@ router.post('/dossier', (req, res, next) => {
reference = ?, notes = ?
WHERE id = ?
`).run(
plateformeId, inv.emetteur || null,
inv.date_premiere_echeance || null, inv.date_cible || null, inv.date_debut_simul || null,
Number(inv.montant_investi), inv.taux_interet ?? null, inv.duree_mois ?? null,
inv.type_remb || 'in_fine', inv.freq_interets || 'mensuel',
inv.statut || 'en_cours',
nouveau.plateforme_id, inv.emetteur || null,
nouveau.date_premiere_echeance, nouveau.date_cible, nouveau.date_debut_simul,
nouveau.montant_investi, nouveau.taux_interet, nouveau.duree_mois,
nouveau.type_remb, nouveau.freq_interets, nouveau.statut,
inv.reference || null, inv.notes || null,
investissementId,
);
@@ -565,15 +579,29 @@ router.post('/dossier', (req, res, next) => {
}
}
// Entrée d'historique de la mise à jour
db.prepare(`
INSERT INTO investissement_historique (investissement_id, type_evenement, changements)
VALUES (?, 'import', ?)
`).run(investissementId, JSON.stringify([{
champ: 'import', label: 'Mise à jour dossier',
ancienne_valeur: null,
nouvelle_valeur: `${dossier.exported_at || 'inconnu'}${rembInserted} remb. ajouté(s), ${reinvInserted} réinvest. ajouté(s)`,
}]));
// Entrée d'historique de la mise à jour — diff précis champ par champ
// (même logique que l'édition manuelle, pour que la date_cible/date_premiere_echeance
// etc. écrasées par ce ré-import restent traçables dans l'historique du prêt).
const changements = detectChangements(existing, nouveau);
const notesImport = `Import dossier (${dossier.exported_at || 'date export inconnue'}) — ` +
`${rembInserted} remb. ajouté(s), ${reinvInserted} réinvest. ajouté(s)`;
if (changements.length > 0) {
recordHistory(investissementId, {
type_evenement: detectTypeEvenement(changements),
changements,
notes: notesImport,
});
} else {
recordHistory(investissementId, {
type_evenement: 'import',
changements: [{
champ: 'import', label: 'Mise à jour dossier',
ancienne_valeur: null,
nouvelle_valeur: notesImport,
}],
});
}
action = 'updated';
}