Corrections sur les jobs En retard
This commit is contained in:
@@ -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';
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user