Correction importation
This commit is contained in:
@@ -6,9 +6,10 @@ import fs from 'node:fs';
|
||||
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 { generateSimul, generateSimulWithReinvestissements, adjustSimulForActuals } from '../utils/schedule.js';
|
||||
import { recordHistory, detectChangements, detectTypeEvenement } from './investissements.js';
|
||||
import { checkDonneesIncompletes } from '../jobs/checkDonneesIncompletes.js';
|
||||
import { syncInvestissementStatut } from './remboursements.js';
|
||||
|
||||
const router = Router();
|
||||
|
||||
@@ -332,6 +333,10 @@ router.post('/apply', (req, res, next) => {
|
||||
|
||||
let inserted = 0, skipped = 0, duplicates = 0;
|
||||
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)
|
||||
// — sert à détecter une date antérieure à la date d'ouverture déclarée sur la plateforme.
|
||||
const platMinDate = new Map();
|
||||
@@ -458,6 +463,7 @@ router.post('/apply', (req, res, next) => {
|
||||
v('statut') || 'paye',
|
||||
srcLabel,
|
||||
);
|
||||
affectedInvestissementIds.add(investissementId);
|
||||
|
||||
} else if (module === 'plateformes') {
|
||||
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
|
||||
const anomalies = [];
|
||||
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;
|
||||
const inv = db.prepare('SELECT montant_investi FROM investissements WHERE id=?').get(investissement_id);
|
||||
if (!inv) return;
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user