feat : M5 — Tickets de pesée (ERP-188 → ERP-193) (#144)
Auto Tag Develop / tag (push) Successful in 8s
Auto Tag Develop / tag (push) Successful in 8s
MR unique regroupant tout le module M5 « Tickets de pesée » (remplace les MR empilées #140/#141/#142/#143).
## Périmètre
- **ERP-188** — Page liste des tickets de pesée + export XLSX (colonnes Fournisseur/Client/Autre + Statut).
- **ERP-189** — Écran « Ajouter » (4 champs en haut, 2 blocs de pesée, pesée bascule/manuelle, date+heure horodatée à la validation).
- **ERP-190** — Écran « Modifier » + bouton Imprimer.
- **ERP-191** — i18n + libellés + branchement site courant.
- **ERP-192** — Bon de pesée PDF généré côté back (template Twig → Dompdf), endpoint `GET /api/weighing_tickets/{id}/print.pdf`.
- **ERP-193** — Cycle de vie brouillon/validé (status DRAFT/VALIDATED, numéro attribué à la validation), DSD saisi conservé en pesée manuelle, retours métier design.
## Vérifications
- Back : tests Logistique + architecture verts, php-cs-fixer propre, migrations appliquées (dev + test).
- Front : suite Vitest complète verte, ESLint propre.
Base : `develop` — contient les 16 commits du M5 (rien d'autre).
Reviewed-on: #144
Co-authored-by: tristan <tristan@yuno.malio.fr>
Co-committed-by: tristan <tristan@yuno.malio.fr>
This commit was merged in pull request #144.
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
import type { MaskInputOptions } from 'maska'
|
||||
|
||||
/**
|
||||
* Masques de saisie du module « Tickets de pesée » (M5). Partagés entre le
|
||||
* composant de bloc (`WeighingBlock`) et les modales de pesée (écrans Ajouter /
|
||||
* Modifier). La validation de format reste autoritaire côté serveur (RG-5.01).
|
||||
*/
|
||||
|
||||
/**
|
||||
* Masque « chiffres uniquement » (longueur libre) — Poids et DSD. Verrouille la
|
||||
* saisie sur des entiers.
|
||||
*/
|
||||
export const NUMERIC_MASK: MaskInputOptions = {
|
||||
mask: 'D',
|
||||
tokens: { D: { pattern: /[0-9]/, multiple: true } },
|
||||
}
|
||||
|
||||
/**
|
||||
* Masque plaque FR SIV `XX-000-XX` : 2 lettres, 3 chiffres, 2 lettres, majuscules
|
||||
* forcées. Utilisé quand « Tout format » n'est pas coché (RG-5.01).
|
||||
*/
|
||||
export const PLATE_MASK: MaskInputOptions = {
|
||||
mask: 'AA-###-AA',
|
||||
tokens: { A: { pattern: /[A-Za-z]/, transform: (c: string) => c.toUpperCase() } },
|
||||
}
|
||||
|
||||
/**
|
||||
* Masque « Tout format » (RG-5.01) : plaques anciennes / étrangères / engins. On
|
||||
* autorise lettres, chiffres, espace et tiret, en MAJUSCULES, longueur libre —
|
||||
* mais on filtre tout le reste (accents, ponctuation, symboles : « &é"'(_ç… »).
|
||||
* Pattern maska charset du projet (cf. shared/utils/textSanitize) : `preProcess`
|
||||
* retire d'abord les caractères hors charset (le token `multiple` glouton
|
||||
* s'arrêterait sinon au 1er invalide), puis le token laisse passer le reste.
|
||||
*/
|
||||
export const FREE_PLATE_MASK: MaskInputOptions = {
|
||||
mask: 'P',
|
||||
tokens: { P: { pattern: /[A-Z0-9 -]/, multiple: true } },
|
||||
preProcess: (value: string) => value.toUpperCase().replace(/[^A-Z0-9 -]/g, ''),
|
||||
}
|
||||
Reference in New Issue
Block a user