tristan
5e15c1f69f
fix : retours métier ERP-193 (4 répertoires) ( #139 )
...
Auto Tag Develop / tag (push) Successful in 11s
Lot de retours métier **ERP-193** (« Fix tous les retours starseed »), transverse aux 4 répertoires (clients, fournisseurs, prestataires, transporteurs).
## Contenu
- **Pagination** : défaut à 25 items/page sur les 4 répertoires.
- **Libellé** : colonne « Dernière activité » → « Dernière modification ».
- **Consultation** : masquage des onglets vides (coquilles « à venir » + onglets de données sans donnée).
- **Chiffre d'affaires** : plafonné à 999 999 999 999,99 (clamp front + `Assert\LessThanOrEqual` back).
- **Date de création** : interdiction des dates futures (`:max` MalioDate + `Assert\LessThanOrEqual('today')` back).
- **Caractères spéciaux** : blocage des caractères parasites (`²³§~#|…`) dans les champs texte via une allow-list par profil (nom de personne / texte libre / adresse / code alphanumérique) — filtrage front à la frappe + `Assert\Regex` back autoritaire. Email/IBAN/BIC/TVA conservent leurs validateurs de format.
- **UI** : champs en consultation et onglets validés grisés (`readonly` → `disabled`).
- **UI** : boutons « Archiver » en rouge (variant `danger`).
## Tests
- Back : nouveaux tests RG (plafond CA, dates futures, caractères spéciaux) + garde-fou contraintes — suite complète verte (813 tests).
- Front : nouveaux tests unitaires (sanitizers, helpers date/montant) — 615 tests verts, eslint clean.
---------
Co-authored-by: THOLOT DECHENE Matthieu <matthieu@yuno.malio.fr >
Reviewed-on: #139
Co-authored-by: tristan <tristan@yuno.malio.fr >
Co-committed-by: tristan <tristan@yuno.malio.fr >
2026-06-22 09:40:40 +00:00
Matthieu
7012306a78
feat(transport) : sous-ressource adresses transporteur (ERP-159)
...
POST /api/carriers/{id}/addresses + PATCH/DELETE /api/carrier_addresses/{id}
(security transport.carriers.manage), spec-back § 4.5. Jumelle de SupplierAddress
(M2) / ProviderAddress (M3), sans address_type ni M2M.
- CarrierAddress : ajout #[ApiResource] (Get/Post/Patch/Delete) + groupe
d'ecriture carrier:write:addresses + contraintes FR. RG-4.06 : code postal
^[0-9]{4,5}$ (Assert\Regex). Mapping ORM/colonnes inchange.
- CarrierAddressProcessor : rattachement parent (404 si absent) + RG-4.05
(transporteur affrete -> Pays/CP/Ville/Adresse obligatoires, 422 par champ).
RG-4.05 portee par le processor car le parent est indisponible a la validation
Symfony sur un POST sous-ressource read:false. RG-4.07 = front (PATCH accepte).
- EXCLUDED_LENGTH_MIRROR : CarrierAddress::postalCode (Regex borne la longueur).
- Tests : CP invalide 422, affrete incomplet 422, affrete complet 201,
PATCH/DELETE OK (manage), 403 sans manage.
2026-06-16 15:13:10 +02:00
Matthieu
dc75945f3e
feat(transport) : schéma + entités Carrier + contrat lecture (ERP-155/157)
...
Schéma BDD du répertoire transporteurs (M4) + entités + contrat de lecture
(liste + détail), socle du front.
- Migration Version20260615150000 : tables carrier / carrier_address /
carrier_contact / carrier_price (FK cross-module, CHECK enum, index partiel
uq_carrier_name_active, COMMENT ON COLUMN). uploaded_document et
qualimat_carrier réutilisées (non recréées).
- Entités Carrier* (#[Auditable], Timestampable/Blamable) + ApiResource
LECTURE seule (GetCollection + Get via CarrierProvider, anti-N+1, exclusion
archivés + ?includeArchived). Écriture (POST/PATCH + Processor) reportée WT4+.
- QualimatCarrier : mapping ORM lecture seule sur la table référentielle
existante (sortie du schema_filter, mapping aligné DDL ERP-39, schema:update
no-op) + endpoint de recherche read-only (§ 4.7).
- Relations cross-module des prix (Client/Supplier/adresses) via contrats
Shared (ClientInterface, SupplierInterface, ClientAddressInterface,
SupplierAddressInterface) + resolve_target_entities — sans import inter-module
(règle n°1). Ajout du groupe supplier_address:read aux champs de
SupplierAddress pour l'embed.
- Garde-fous : ColumnCommentsCatalog (carrier* + qualimat_carrier), makefile
test-db-setup (index partiel carrier), i18n audit (transport_carrier*),
EntitiesAreTimestampableBlamableTest (QualimatCarrier whitelisté).
- CarrierSerializationContractTest : contrat JSON liste + détail vérifié
(embeds objet, booléens, enveloppe Hydra) ; JSON réel capturé dans
spec-back § 4.0.bis.
make db-reset OK, make test vert (731), make nuxt-test vert (480),
php-cs-fixer OK.
2026-06-16 15:13:10 +02:00