From 9b476f22bb637ad9981bca617dd03745ed4261a6 Mon Sep 17 00:00:00 2001 From: tristan Date: Wed, 24 Jun 2026 16:14:32 +0200 Subject: [PATCH] =?UTF-8?q?fix(front)=20:=20422=20de=20pes=C3=A9e=20manuel?= =?UTF-8?q?le=20mapp=C3=A9=20sous=20le=20bon=20champ=20(poids/DSD)=20(ERP-?= =?UTF-8?q?193)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit La modale de pesée manuelle plaçait toute erreur du POST /weighbridge_readings sous le champ Poids : un 422 Assert\Positive sur le DSD (DSD ≤ 0) s'affichait donc sous Poids, le champ DSD restant vierge. confirmManual mappe désormais les violations par propertyPath via mapViolationsToRecord (le nom du champ front = le propertyPath back), et ne retombe sur le message générique sous Poids que pour les erreurs sans violations (503 pont indisponible, réseau). Appliqué à new.vue et [id]/edit.vue. --- .../logistique/pages/weighing-tickets/[id]/edit.vue | 9 ++++++++- .../modules/logistique/pages/weighing-tickets/new.vue | 9 ++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/frontend/modules/logistique/pages/weighing-tickets/[id]/edit.vue b/frontend/modules/logistique/pages/weighing-tickets/[id]/edit.vue index 1b7085b..4686a8d 100644 --- a/frontend/modules/logistique/pages/weighing-tickets/[id]/edit.vue +++ b/frontend/modules/logistique/pages/weighing-tickets/[id]/edit.vue @@ -192,6 +192,7 @@ import { useWeighbridge } from '~/modules/logistique/composables/useWeighbridge' import { useWeighingTicket } from '~/modules/logistique/composables/useWeighingTicket' import { useWeighingTicketReferentials, type RefOption } from '~/modules/logistique/composables/useWeighingTicketReferentials' import { NUMERIC_MASK, PLATE_MASK, FREE_PLATE_MASK } from '~/modules/logistique/utils/weighingMasks' +import { mapViolationsToRecord } from '~/shared/utils/api' const { t } = useI18n() const api = useApi() @@ -344,7 +345,13 @@ async function confirmManual(): Promise { await saveDraft() } catch (e) { - manualModal.errors = { weight: weighbridge.extractWeighbridgeError(e) } + // 422 de pesée (poids/DSD ≤ 0, Assert\Positive) → erreur sous le BON champ + // (le propertyPath back `weight`/`dsd` = nom du champ de la modale). Sinon + // (503 pont indispo, réseau) → message générique sous le champ Poids. + const violations = mapViolationsToRecord((e as { response?: { _data?: unknown } })?.response?._data) + manualModal.errors = Object.keys(violations).length > 0 + ? violations + : { weight: weighbridge.extractWeighbridgeError(e) } } finally { manualModal.loading = false diff --git a/frontend/modules/logistique/pages/weighing-tickets/new.vue b/frontend/modules/logistique/pages/weighing-tickets/new.vue index defd585..73bb45c 100644 --- a/frontend/modules/logistique/pages/weighing-tickets/new.vue +++ b/frontend/modules/logistique/pages/weighing-tickets/new.vue @@ -181,6 +181,7 @@ import { useWeighingTicketForm, type WeighingBlockState } from '~/modules/logist import { useWeighbridge } from '~/modules/logistique/composables/useWeighbridge' import { useWeighingTicketReferentials, type RefOption } from '~/modules/logistique/composables/useWeighingTicketReferentials' import { NUMERIC_MASK, PLATE_MASK, FREE_PLATE_MASK } from '~/modules/logistique/utils/weighingMasks' +import { mapViolationsToRecord } from '~/shared/utils/api' const { t } = useI18n() const api = useApi() @@ -309,7 +310,13 @@ async function confirmManual(): Promise { await saveDraft() } catch (error) { - manualModal.errors = { weight: weighbridge.extractWeighbridgeError(error) } + // 422 de pesée (poids/DSD ≤ 0, Assert\Positive) → erreur sous le BON champ + // (le propertyPath back `weight`/`dsd` = nom du champ de la modale). Sinon + // (503 pont indispo, réseau) → message générique sous le champ Poids. + const violations = mapViolationsToRecord((error as { response?: { _data?: unknown } })?.response?._data) + manualModal.errors = Object.keys(violations).length > 0 + ? violations + : { weight: weighbridge.extractWeighbridgeError(error) } } finally { manualModal.loading = false