This commit is contained in:
2026-07-12 19:38:41 +02:00
parent 47c5ad34fa
commit 316a86c95a
6 changed files with 21 additions and 9 deletions
+8 -2
View File
@@ -661,7 +661,13 @@ export default function InvestissementDetail() {
});
setRevisionModalOpen(false);
await load();
} catch (e) { setRevisionErr(e.message); } finally { setRevisionSaving(false); }
} catch (e) {
// Surface le détail des erreurs de validation (Zod) plutôt que le message générique
// "Validation error" renvoyé par errorHandler.js.
const fieldErrors = e.details?.fieldErrors;
const detail = fieldErrors ? Object.values(fieldErrors).flat().filter(Boolean).join(' ') : '';
setRevisionErr(detail || e.message);
} finally { setRevisionSaving(false); }
};
const deleteRevision = async (rid) => {
@@ -2603,7 +2609,7 @@ export default function InvestissementDetail() {
</svg>
Traitement en masse des remboursements
</button>
{inv.taux_interet && inv.duree_mois ? (
{inv.taux_interet != null && inv.duree_mois ? (
<button
style={{ display: 'flex', alignItems: 'center', gap: 8, width: '100%', padding: '8px 14px', background: 'none', border: 'none', cursor: recalculating ? 'not-allowed' : 'pointer', fontSize: 'var(--fs-sm)', color: recalculating ? 'var(--text-muted)' : 'var(--text)', textAlign: 'left', opacity: recalculating ? 0.6 : 1 }}
onMouseEnter={e => { if (!recalculating) e.currentTarget.style.background = 'var(--surface-2)'; }}
+1 -1
View File
@@ -1286,7 +1286,7 @@ export default function Remboursements() {
{simulMsg}
</div>
)}
{simulInv && (!simulInv.taux_interet || !simulInv.duree_mois) && (
{simulInv && (simulInv.taux_interet == null || !simulInv.duree_mois) && (
<div className="error" style={{ marginTop: 12 }}>
Cet investissement n'a pas de <strong>taux</strong> et/ou de <strong>durée</strong>. Renseignez-les dans la fiche.
</div>
+1 -1
View File
@@ -69,7 +69,7 @@ export default function SimulRemboursements() {
</div>
</div>
{msg && <div className={msg.startsWith('✔') ? 'success-msg' : 'error'} style={{ marginTop: 12 }}>{msg}</div>}
{inv && (!inv.taux_interet || !inv.duree_mois) && (
{inv && (inv.taux_interet == null || !inv.duree_mois) && (
<div className="error" style={{ marginTop: 12 }}>
Cet investissement n'a pas de <strong>taux</strong> et/ou de <strong>durée</strong>. Renseignez-les dans la fiche.
</div>