diff --git a/backend/src/routes/admin.js b/backend/src/routes/admin.js index 009bb78..878c2c1 100644 --- a/backend/src/routes/admin.js +++ b/backend/src/routes/admin.js @@ -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(); diff --git a/design/icones institutions/Credit agricole.webp b/design/icones institutions/Credit agricole.webp new file mode 100644 index 0000000..a568836 Binary files /dev/null and b/design/icones institutions/Credit agricole.webp differ diff --git a/frontend/src/pages/AdminInstitutions.jsx b/frontend/src/pages/AdminInstitutions.jsx index 855adcd..8fc76d2 100644 --- a/frontend/src/pages/AdminInstitutions.jsx +++ b/frontend/src/pages/AdminInstitutions.jsx @@ -811,7 +811,10 @@ function ComptesOrphelinsSection() { )}