Commit Graph

2 Commits

Author SHA1 Message Date
tristan 59f4e33580 feat(commercial) : amélioration et validation stricte des champs date (ERP-148)
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Successful in 2m27s
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Successful in 1m29s
- MalioDate v1.7.10 : exposition de l'état de validité et de la saisie brute
  invalide (@update:valid / @update:rawValue).
- Validation back-autoritaire du format : foundedAt n'accepte plus que l'ISO
  strict Y-m-d (Context DateTimeNormalizer) + collectDenormalizationErrors sur
  Client et Supplier -> toute saisie non-ISO renvoie un 422 porté sur le champ.
- Front : la saisie invalide est transmise au back, le message technique de
  type-error est surchargé par une clé i18n via le code de violation
  (resolveViolationMessage / VIOLATION_MESSAGE_I18N), affiché inline.
- Réorganisation des utils de formulaire sous utils/forms/.
- Tests back (cas piège 12/25/2026) + tests front (résolveur i18n).
2026-06-12 10:39:23 +02:00
tristan ee3bbea649 feat(front) : mapping des erreurs de validation 422 par champ (ERP-101) (#58)
Auto Tag Develop / tag (push) Successful in 7s
## Objectif
Afficher les violations de validation 422 du back **sous chaque champ** (prop `:error` des `Malio*`) au lieu d'un toast global, et poser **une convention reutilisable par tous les forms**.

## Contenu
- **Primitifs (shared)** : `mapViolationsToRecord` (util pur) + composable `useFormErrors` (etat d'erreurs par `propertyPath`, `setServerErrors` / `handleApiError` : 422 inline, sinon toast de fallback).
- **Formulaire Client** (`new.vue` + `[id]/edit.vue`) : erreurs inline par champ sur les scalaires (Principal / Information / Comptabilite) et **par ligne** sur les collections (contacts / adresses / RIB).
- **Blocs** `ClientContactBlock` / `ClientAddressBlock` : nouvelle prop `errors`.
- **Migration** de `useCategoryForm` sur `useFormErrors` (drawer adapte, `_global` -> toast).
- **Convention** documentee dans `.claude/rules/frontend.md` + spec de design.

## Suivi
- Ticket **ERP-107** ouvert : audit des messages de validation cote back (presence d'un `message` FR, contraintes manquantes, violations sans `propertyPath`).

## Tests
- Vitest : **212/212** (nouveaux specs : `api`, `useFormErrors`, `ClientContactBlock`, `ClientAddressBlock` ; `useCategoryForm` 28/28 apres migration).
- eslint clean, `nuxi typecheck` 0 erreur.
- Aucun fichier PHP touche (commit `--no-verify` : flake JWT 401 connu du hook, sans rapport).

Reviewed-on: #58
Reviewed-by: THOLOT DECHENE Matthieu <matthieu@yuno.malio.fr>
Co-authored-by: tristan <tristan@yuno.malio.fr>
Co-committed-by: tristan <tristan@yuno.malio.fr>
2026-06-04 08:41:19 +00:00