This commit is contained in:
ocroguennec committed 2026-09-26 18:48:18 +02:00
1 parent b18ffc63ee
commit add66a9310
3 files changed
+20 -5

No files matched your search

+16 -4
View File
@@ -842,20 +842,32 @@ router.post('/exports/:filename/restore', async (req, res, next) => {
/** Liste les valeurs `banque` distinctes non reliées à institution_id, avec suggestion */
router.get('/comptes-orphelins', (_req, res) => {
// Groupé par (banque, user_id, investisseur_id) : `user_id` est le compte de connexion
// (potentiellement partagé par toute une famille — cf. `investisseurs`), `investisseur_id`
// le détenteur réel du compte bancaire (Olivier, Marine, Clément...). Sans ce second niveau,
// tous les comptes d'une même famille apparaissent à tort sous le seul nom du titulaire du
// compte de connexion (constaté par Olivier le 26/09/26).
const rows = db.prepare(`
SELECT c.banque, u.id AS user_id, u.email AS user_email, u.display_name AS user_display_name, COUNT(*) AS nb
SELECT c.banque, u.id AS user_id, u.email AS user_email, u.display_name AS user_display_name,
c.investisseur_id, i.nom AS investisseur_nom,
COUNT(*) AS nb
FROM comptes c
JOIN users u ON u.id = c.user_id
LEFT JOIN investisseurs i ON i.id = c.investisseur_id
WHERE c.institution_id IS NULL AND c.banque IS NOT NULL AND TRIM(c.banque) != ''
GROUP BY c.banque, u.id
ORDER BY c.banque, u.email
GROUP BY c.banque, u.id, c.investisseur_id
ORDER BY c.banque, i.nom, u.email
`).all();
const byBanque = {};
for (const r of rows) {
if (!byBanque[r.banque]) byBanque[r.banque] = { banque: r.banque, total: 0, users: [] };
byBanque[r.banque].total += r.nb;
byBanque[r.banque].users.push({ id: r.user_id, email: r.user_email, display_name: r.user_display_name, nb: r.nb });
byBanque[r.banque].users.push({
id: r.user_id, email: r.user_email, display_name: r.user_display_name,
investisseur_id: r.investisseur_id, investisseur_nom: r.investisseur_nom,
nb: r.nb,
});
}
const refs = db.prepare('SELECT id, nom FROM institutions_referentiel ORDER BY nom').all();