feat(commercial) : sous-ressources M2 fournisseurs (contacts/adresses/ribs) (ERP-88) #67

Merged
malio merged 1 commits from feature/ERP-88-sous-ressources-m2 into develop 2026-06-08 07:31:48 +00:00
Owner

ERP-88 — Sous-ressources M2 (contacts / adresses / ribs)

Étape 4/7 du pipeline M2. Dépend de #86 (entités) et #87 (Provider/Processor). Bloque #92.

Contenu

Opérations API Platform + Processors d'écriture des sous-collections du fournisseur (POST/PATCH/DELETE + GET unitaire).

SupplierContactProcessor

  • Rattachement au fournisseur parent (404 si absent).
  • Normalisation serveur RG-2.12 (Title Case nom/prénom, téléphones chiffres seuls, email lowercase).
  • RG-2.04 : firstName ou lastName obligatoire (422 sur firstName).
  • DELETE libre (RG-2.13 front-driven : collection peut rester vide côté back).

SupplierAddressProcessor

  • Rattachement au fournisseur parent.
  • RG-2.05 (CP ^[0-9]{4,5}$), RG-2.06 (≥1 site), RG-2.09 (type d'adresse) portées par les contraintes d'entité (ERP-86).
  • RG-2.10 (catégorie de type FOURNISSEUR) ajoutée via Assert\Callback validateCategoryType (propertyPath=categories).

SupplierRibProcessor

  • Rattachement au fournisseur parent.
  • RG-2.08 : refus du DELETE du dernier RIB quand paymentType.code = LCR409.

Security différenciée

Sous-ressource Écriture Lecture
contacts / adresses commercial.suppliers.manage commercial.suppliers.view
ribs commercial.suppliers.accounting.manage commercial.suppliers.accounting.view

POST en read:false (parent rattaché manuellement) — parade NonUniqueResult héritée du M1. Messages FR (ERP-107) + violations[].propertyPath aligné (ERP-101).

Vérifications

  • make php-cs-fixer-allow-risky : 0 fichier à corriger
  • make test : 483 tests OK
  • debug:router : 12 routes générées (4 par sous-ressource)

Hors périmètre (tickets suivants)

  • Déclaration RBAC commercial.suppliers.* dans CommercialModule (#7) — sans elle, l'accès reste 403.
  • Tests fonctionnels de la matrice RG (#8) — dépendent du RBAC + fixtures Supplier.

Notes de review (non bloquantes, alignées M1)

  • position des sous-collections non exposé à l'API (décision ERP-86, géré serveur).
  • M2M SupplierAddress.contacts non vérifié same-supplier — comportement identique au M1 (ClientAddress), à traiter globalement si besoin.
## ERP-88 — Sous-ressources M2 (contacts / adresses / ribs) Étape 4/7 du pipeline M2. Dépend de #86 (entités) et #87 (Provider/Processor). Bloque #92. ### Contenu Opérations API Platform + Processors d'écriture des sous-collections du fournisseur (POST/PATCH/DELETE + GET unitaire). **SupplierContactProcessor** - Rattachement au fournisseur parent (404 si absent). - Normalisation serveur RG-2.12 (Title Case nom/prénom, téléphones chiffres seuls, email lowercase). - RG-2.04 : firstName **ou** lastName obligatoire (422 sur `firstName`). - DELETE libre (RG-2.13 front-driven : collection peut rester vide côté back). **SupplierAddressProcessor** - Rattachement au fournisseur parent. - RG-2.05 (CP `^[0-9]{4,5}$`), RG-2.06 (≥1 site), RG-2.09 (type d'adresse) portées par les contraintes d'entité (ERP-86). - RG-2.10 (catégorie de type FOURNISSEUR) ajoutée via `Assert\Callback validateCategoryType` (propertyPath=`categories`). **SupplierRibProcessor** - Rattachement au fournisseur parent. - RG-2.08 : refus du DELETE du dernier RIB quand `paymentType.code = LCR` → **409**. ### Security différenciée | Sous-ressource | Écriture | Lecture | |---|---|---| | contacts / adresses | `commercial.suppliers.manage` | `commercial.suppliers.view` | | ribs | `commercial.suppliers.accounting.manage` | `commercial.suppliers.accounting.view` | POST en `read:false` (parent rattaché manuellement) — parade NonUniqueResult héritée du M1. Messages FR (ERP-107) + `violations[].propertyPath` aligné (ERP-101). ### Vérifications - `make php-cs-fixer-allow-risky` : 0 fichier à corriger - `make test` : 483 tests OK - `debug:router` : 12 routes générées (4 par sous-ressource) ### Hors périmètre (tickets suivants) - Déclaration RBAC `commercial.suppliers.*` dans `CommercialModule` (#7) — sans elle, l'accès reste 403. - Tests fonctionnels de la matrice RG (#8) — dépendent du RBAC + fixtures Supplier. ### Notes de review (non bloquantes, alignées M1) - `position` des sous-collections non exposé à l'API (décision ERP-86, géré serveur). - M2M `SupplierAddress.contacts` non vérifié same-supplier — comportement identique au M1 (ClientAddress), à traiter globalement si besoin.
matthieu added the backM2-Fournisseurtype/feat labels 2026-06-05 09:58:23 +00:00
matthieu changed target branch from main to feature/ERP-87-provider-processor-m2 2026-06-05 11:59:17 +00:00
malio changed target branch from feature/ERP-87-provider-processor-m2 to develop 2026-06-08 07:29:53 +00:00
matthieu added 1 commit 2026-06-08 07:31:36 +00:00
feat(commercial) : sous-ressources M2 fournisseurs (contacts/adresses/ribs) (ERP-88)
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Failing after 1m51s
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Successful in 1m8s
7dccc4edf4
Ajoute les opérations API Platform et les Processors d'écriture des
sous-collections du fournisseur (POST/PATCH/DELETE + GET unitaire) :

- SupplierContactProcessor : rattachement parent, normalisation serveur
  (RG-2.12), validation RG-2.04 (prénom OU nom). DELETE libre (RG-2.13).
- SupplierAddressProcessor : rattachement parent. RG-2.05/2.06/2.09 portées
  par les contraintes d'entité ; RG-2.10 (catégorie type FOURNISSEUR) via
  Assert\Callback validateCategoryType.
- SupplierRibProcessor : rattachement parent, RG-2.08 (refus DELETE du
  dernier RIB sous LCR -> 409).

Security différenciée : contacts/adresses -> commercial.suppliers.manage ;
ribs -> commercial.suppliers.accounting.manage (+ .view pour le GET).
POST en read:false (parent rattaché manuellement, 404 si absent) — parade
NonUniqueResult du M1. Messages FR (ERP-107) + propertyPath aligné (ERP-101).
matthieu force-pushed feature/ERP-88-sous-ressources-m2 from 3548224298 to 7dccc4edf4 2026-06-08 07:31:36 +00:00 Compare
malio merged commit 145d4362db into develop 2026-06-08 07:31:48 +00:00
malio deleted branch feature/ERP-88-sous-ressources-m2 2026-06-08 07:31:48 +00:00
Sign in to join this conversation.