From 5273f11e05985e195575bd93c0fb39c21e9affd8 Mon Sep 17 00:00:00 2001 From: Olivier Date: Sun, 16 Aug 2026 11:35:21 +0200 Subject: [PATCH] Correctif --- frontend/src/components/MouvementsShared.jsx | 1 + frontend/src/pages/DepotsRetraits.jsx | 14 +++++++++++--- frontend/src/pages/Plateformes.jsx | 14 +++++++++++--- 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/frontend/src/components/MouvementsShared.jsx b/frontend/src/components/MouvementsShared.jsx index b2caf2e..f298e6a 100644 --- a/frontend/src/components/MouvementsShared.jsx +++ b/frontend/src/components/MouvementsShared.jsx @@ -177,6 +177,7 @@ export function DetailPanel({ row, onEdit, onDeleteCorrection, onViewRemb, onVie { label: 'Montant', value: montantFmt, color: montantColor }, { label: 'Date', value: fmtDate(row.date_operation) }, isRemb && !isBonus && row.libelle && { label: 'Projet', value: row.libelle }, + isBonus && row.libelle && { label: 'Projet', value: row.libelle }, isRemb && !isBonus && { label: 'Capital', value: fmtEUR(row._capital) }, isRemb && !isBonus && row._cashback > 0 && { label: 'Cashback', value: fmtEUR(row._cashback) }, isRemb && !isBonus && { label: 'Intérêts bruts', value: fmtEUR(row._interets_bruts) }, diff --git a/frontend/src/pages/DepotsRetraits.jsx b/frontend/src/pages/DepotsRetraits.jsx index b21cc83..b446699 100644 --- a/frontend/src/pages/DepotsRetraits.jsx +++ b/frontend/src/pages/DepotsRetraits.jsx @@ -295,7 +295,11 @@ export default function DepotsRetraits() { const pfuReellementRetenu = isFlatTax && !isExonere; const taxeLocale = r.taxe_locale || 0; const grossInterets = r.interets_bruts_avant_local > 0 ? r.interets_bruts_avant_local : (r.interets_bruts || 0); - const grossMontant = (r.capital || 0) + (r.cashback || 0) + grossInterets; + // Le cashback est désormais toujours sorti dans sa propre ligne "Bonus / Cashback", + // même sur un remboursement de type 'normal' — le champ cashback du formulaire est + // libre et saisissable sur n'importe quel type, sans lien avec bonus_parrainage/plateforme. + const cashback = r.cashback || 0; + const grossMontant = (r.capital || 0) + grossInterets; if (grossMontant) { out.push({ @@ -307,13 +311,17 @@ export default function DepotsRetraits() { _isAutoSweep: r.methode_remboursement === 'compte_courant', _taxeLocale: taxeLocale, _capital: r.capital || 0, - _cashback: r.cashback || 0, + _cashback: 0, _interets_bruts: r.interets_bruts || 0, _interets_nets: r.interets_nets || 0, _net_recu: r.net_recu || 0, }); } + if (cashback > 0) { + out.push({ ...base, id: `remb_${r.id}_cashback`, type: 'bonus', montant: cashback }); + } + if (taxeLocale > 0) { out.push({ ...base, id: `remb_${r.id}_local`, type: 'prelevement_local', montant: taxeLocale }); } @@ -405,7 +413,7 @@ export default function DepotsRetraits() { const corrPart = showCorr ? filteredCorrections.map(c => ({ ...c, _projet: '' })) : []; const rembPart = filteredRembMouvements .filter(r => !filter.type || r.type === filter.type) - .map(r => ({ ...r, _projet: r.type === 'bonus' ? '' : (r.libelle || '') })); + .map(r => ({ ...r, _projet: r.libelle || '' })); const subPart = filteredSouscriptionMouvements .filter(r => !filter.type || r.type === filter.type) .map(r => ({ ...r, _projet: r.libelle || '' })); diff --git a/frontend/src/pages/Plateformes.jsx b/frontend/src/pages/Plateformes.jsx index cf42323..b4b56f8 100644 --- a/frontend/src/pages/Plateformes.jsx +++ b/frontend/src/pages/Plateformes.jsx @@ -989,7 +989,11 @@ export default function Plateformes() { const pfuReellementRetenu = isFlatTax && !isExonere; const taxeLocale = r.taxe_locale || 0; const grossInterets = r.interets_bruts_avant_local > 0 ? r.interets_bruts_avant_local : (r.interets_bruts || 0); - const grossMontant = (r.capital || 0) + (r.cashback || 0) + grossInterets; + // Le cashback est désormais toujours sorti dans sa propre ligne "Bonus / Cashback", + // même sur un remboursement de type 'normal' — le champ cashback du formulaire est + // libre et saisissable sur n'importe quel type, sans lien avec bonus_parrainage/plateforme. + const cashback = r.cashback || 0; + const grossMontant = (r.capital || 0) + grossInterets; if (grossMontant) { out.push({ @@ -1001,13 +1005,17 @@ export default function Plateformes() { _isAutoSweep: r.methode_remboursement === 'compte_courant', _taxeLocale: taxeLocale, _capital: r.capital || 0, - _cashback: r.cashback || 0, + _cashback: 0, _interets_bruts: r.interets_bruts || 0, _interets_nets: r.interets_nets || 0, _net_recu: r.net_recu || 0, }); } + if (cashback > 0) { + out.push({ ...base, id: `remb_${r.id}_cashback`, type: 'bonus', montant: cashback }); + } + if (taxeLocale > 0) { out.push({ ...base, id: `remb_${r.id}_local`, type: 'prelevement_local', montant: taxeLocale }); } @@ -1106,7 +1114,7 @@ export default function Plateformes() { const corrPart = showCorr ? mvFilteredCorrections.map(c => ({ ...c, _projet: '' })) : []; const rembPart = mvFilteredRembMouvements .filter(r => !mvFilter.type || r.type === mvFilter.type) - .map(r => ({ ...r, _projet: r.type === 'bonus' ? '' : (r.libelle || '') })); + .map(r => ({ ...r, _projet: r.libelle || '' })); const subPart = mvFilteredSouscriptionMouvements .filter(r => !mvFilter.type || r.type === mvFilter.type) .map(r => ({ ...r, _projet: r.libelle || '' }));