Correction importation
This commit is contained in:
@@ -6,9 +6,10 @@ import fs from 'node:fs';
|
|||||||
import db from '../db/index.js';
|
import db from '../db/index.js';
|
||||||
import { HttpError } from '../middleware/errorHandler.js';
|
import { HttpError } from '../middleware/errorHandler.js';
|
||||||
import { requireInvestisseur } from '../middleware/investisseurScope.js';
|
import { requireInvestisseur } from '../middleware/investisseurScope.js';
|
||||||
import { generateSimul, generateSimulWithReinvestissements } from '../utils/schedule.js';
|
import { generateSimul, generateSimulWithReinvestissements, adjustSimulForActuals } from '../utils/schedule.js';
|
||||||
import { recordHistory, detectChangements, detectTypeEvenement } from './investissements.js';
|
import { recordHistory, detectChangements, detectTypeEvenement } from './investissements.js';
|
||||||
import { checkDonneesIncompletes } from '../jobs/checkDonneesIncompletes.js';
|
import { checkDonneesIncompletes } from '../jobs/checkDonneesIncompletes.js';
|
||||||
|
import { syncInvestissementStatut } from './remboursements.js';
|
||||||
|
|
||||||
const router = Router();
|
const router = Router();
|
||||||
|
|
||||||
@@ -332,6 +333,10 @@ router.post('/apply', (req, res, next) => {
|
|||||||
|
|
||||||
let inserted = 0, skipped = 0, duplicates = 0;
|
let inserted = 0, skipped = 0, duplicates = 0;
|
||||||
const errors = [];
|
const errors = [];
|
||||||
|
// Investissements touchés par un remboursement importé (module 'remboursements') — sert à
|
||||||
|
// reproduire après coup ce que fait la création manuelle d'un remboursement (statut auto
|
||||||
|
// + réajustement de l'échéancier), que l'import ne faisait pas jusqu'ici.
|
||||||
|
const affectedInvestissementIds = new Set();
|
||||||
// Date la plus ancienne rencontrée par plateforme (dépôts/retraits + investissements)
|
// Date la plus ancienne rencontrée par plateforme (dépôts/retraits + investissements)
|
||||||
// — sert à détecter une date antérieure à la date d'ouverture déclarée sur la plateforme.
|
// — sert à détecter une date antérieure à la date d'ouverture déclarée sur la plateforme.
|
||||||
const platMinDate = new Map();
|
const platMinDate = new Map();
|
||||||
@@ -458,6 +463,7 @@ router.post('/apply', (req, res, next) => {
|
|||||||
v('statut') || 'paye',
|
v('statut') || 'paye',
|
||||||
srcLabel,
|
srcLabel,
|
||||||
);
|
);
|
||||||
|
affectedInvestissementIds.add(investissementId);
|
||||||
|
|
||||||
} else if (module === 'plateformes') {
|
} else if (module === 'plateformes') {
|
||||||
const nom = String(v('nom') || '').trim();
|
const nom = String(v('nom') || '').trim();
|
||||||
@@ -524,6 +530,22 @@ router.post('/apply', (req, res, next) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Reproduit après import ce que fait la création manuelle d'un remboursement :
|
||||||
|
// passage automatique au statut "rembourse" si le capital est intégralement remboursé,
|
||||||
|
// et réajustement de l'échéancier (troncature des échéances futures devenues caduques en
|
||||||
|
// cas de remboursement anticipé). Sans cela, un investissement soldé via import restait
|
||||||
|
// affiché "En cours" avec un échéancier complet non réajusté (contrairement à la saisie manuelle).
|
||||||
|
if (module === 'remboursements' && affectedInvestissementIds.size > 0) {
|
||||||
|
for (const invId of affectedInvestissementIds) {
|
||||||
|
try {
|
||||||
|
syncInvestissementStatut(invId);
|
||||||
|
adjustSimulForActuals(db, invId);
|
||||||
|
} catch (e) {
|
||||||
|
console.error(`[imports] réajustement post-import échoué pour l'investissement #${invId} :`, e.message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Anomalie : une date importée précède la date d'ouverture déclarée sur la plateforme
|
// Anomalie : une date importée précède la date d'ouverture déclarée sur la plateforme
|
||||||
const anomalies = [];
|
const anomalies = [];
|
||||||
if (platMinDate.size > 0) {
|
if (platMinDate.size > 0) {
|
||||||
|
|||||||
@@ -86,7 +86,7 @@ function syncAutoRetrait(rembId, methode, netRecu, investissementId, dateRemb) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function syncInvestissementStatut(investissement_id) {
|
export function syncInvestissementStatut(investissement_id) {
|
||||||
if (!investissement_id) return;
|
if (!investissement_id) return;
|
||||||
const inv = db.prepare('SELECT montant_investi FROM investissements WHERE id=?').get(investissement_id);
|
const inv = db.prepare('SELECT montant_investi FROM investissements WHERE id=?').get(investissement_id);
|
||||||
if (!inv) return;
|
if (!inv) return;
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user