fix(front) : RIB neuf vide soumis (422 inline) quand c'est le seul RIB restant

Onglet Comptabilite : on ne saute une amorce RIB neuve vide QUE s'il reste un autre
RIB soumettable (garde hasSubmittableRib, miroir de l'onglet Contacts). Sinon — ex.
unique RIB existant supprime puis remplace par un bloc vide en LCR — le bloc vide est
soumis et le back renvoie une 422 NotBlank mappee en rouge sous label/bic/iban, au lieu
de laisser le DELETE echouer en « dernier RIB d'une LCR » (message plat sans propertyPath).
L'ancien RIB est preserve (arret avant le DELETE). Applique creation + edition, fournisseur + client.
This commit is contained in:
2026-06-11 08:53:06 +02:00
parent f2ad41ad64
commit 71db3418e3
4 changed files with 27 additions and 17 deletions
@@ -841,7 +841,11 @@ async function submitAccounting(): Promise<void> {
accountingErrors.clearErrors()
try {
// 1) POST/PATCH des RIB d'abord (erreurs inline par ligne, tous les blocs
// tentes). Seuls les blocs RIB TOTALEMENT vides (amorce neuve) sont ignores.
// tentes). On ne saute une amorce neuve vide QUE s'il reste un autre RIB
// soumettable : sinon (ex. l'unique RIB existant supprime, remplace par un
// bloc vide), on la soumet pour declencher la 422 NotBlank inline plutot que
// de laisser le DELETE echouer en « dernier RIB d'une LCR » (message plat).
const hasSubmittableRib = ribs.value.some(r => r.id !== null || !isRibBlank(r))
const ribHasError = await submitRows(
ribs.value,
ribErrors,
@@ -862,7 +866,7 @@ async function submitAccounting(): Promise<void> {
}
},
error => showError(error),
rib => rib.id === null && isRibBlank(rib),
rib => hasSubmittableRib && rib.id === null && isRibBlank(rib),
)
if (ribHasError) return
@@ -782,8 +782,10 @@ async function submitAccounting(): Promise<void> {
tabSubmitting.value = true
accountingErrors.clearErrors()
try {
// 1) POST/PATCH des RIB d'abord (erreurs inline par ligne). Seuls les blocs
// RIB TOTALEMENT vides (amorce neuve) sont ignores.
// 1) POST/PATCH des RIB d'abord (erreurs inline par ligne). On ne saute une
// amorce neuve vide QUE s'il reste un autre RIB soumettable : sinon (LCR sans
// aucun RIB rempli) on la soumet pour declencher la 422 NotBlank inline.
const hasSubmittableRib = ribs.value.some(r => r.id !== null || !isRibBlank(r))
const ribHasError = await submitRows(
ribs.value,
ribErrors,
@@ -802,7 +804,7 @@ async function submitAccounting(): Promise<void> {
}
},
error => toast.error({ title: t('commercial.suppliers.toast.error'), message: apiErrorMessage(error) }),
rib => rib.id === null && isRibBlank(rib),
rib => hasSubmittableRib && rib.id === null && isRibBlank(rib),
)
if (ribHasError) return