Commit Graph

2 Commits

Author SHA1 Message Date
matthieu 9cda225bdf Correctifs post-review M2 fournisseurs (P1 + P2/P3 + alignement M1) (#74)
Auto Tag Develop / tag (push) Successful in 8s
Correctifs issus de la review lead du stack M2 fournisseurs (ERP-84→113), répartis en priorités. Base : `develop`. Suite verte : `make test` 577 tests / 2475 assertions, `php-cs-fixer` 0 correction.

## P1 — défauts bloquants
- **ERP-89** — Le message de complétude Information ne fuit plus le nom de champ technique (`(champ "%s")` retiré). Correction miroir appliquée aux deux validators (Supplier + Client), accent uniformisé. Le `propertyPath` est conservé pour le mapping inline front.
- **ERP-112** — La fixture fournisseurs résout désormais la catégorie en filtrant sur le type `FOURNISSEUR` (via `CategoryInterface::getCategoryTypeCode()`), évitant de rattacher une catégorie homonyme d'un autre type (RG-2.10).
- **ERP-113** — Tests d'export complétés : dédup F3 (fournisseur multi-catégories rendu sur une seule ligne) ; gating SIREN prouvé via un utilisateur minimal non-admin portant `suppliers.view` + `suppliers.accounting.view` (nouveau helper `createUserWithPermissions`).

## P2 / P3
- **ERP-86** — `maxMessage` explicite sur `competitors` (Supplier).
- **ERP-92** — Garde `skipIfSitesModuleDisabled()` sur le test POST adresse sans site (évite un faux positif si le module Sites est désactivé).
- **ERP-89 bis** — Nouveau test : Admin authentifié non-Commerciale + Information incomplète → 200 (distinct du cas `user=null`).
- **ERP-85** — `down()` de la migration fournisseurs en `DROP TABLE IF EXISTS`.
- **ERP-87** — Reset de la mémoïsation payload en début de `process()` du SupplierProcessor + documentation du filtre `?archivedOnly` de l'export (parité avec le provider liste).
- **spec-back.md (M2)** — Alignée sur le code (le code fait foi) : security PATCH `manage or accounting.manage`, gating accounting par ajout de groupe (`SupplierReadGroupContextBuilder`), anti-N+1 via `hydrateListCollections` (pas de fetch-join), types de colonnes réels (`IDENTITY` / `TIMESTAMP(0)`).

## Alignement M1 ↔ M2
- **ERP-86/87 (Client)** — Mêmes corrections appliquées aux jumeaux M1 : message `competitors` explicite + reset mémoïsation `ClientProcessor`.

## Décision actée
- **RG-2.10 (catégorie)** : court-circuit conservé (une seule violation sur `categories`). Les violations partageant path + message sont fusionnées côté front ; ERP-101 (toutes les erreurs en un aller-retour) est déjà respecté car le Callback n'interrompt pas la validation des autres champs.

---------

Co-authored-by: admin malio <malio@yuno.malio.fr>
Co-authored-by: Matthieu <contact@malio.fr>
Reviewed-on: #74
Co-authored-by: THOLOT DECHENE Matthieu <matthieu@yuno.malio.fr>
Co-committed-by: THOLOT DECHENE Matthieu <matthieu@yuno.malio.fr>
2026-06-08 08:47:43 +00:00
matthieu 1a29bcf76c feat(commercial) : migration BDD M2 fournisseurs (supplier + sous-collections + M2M) (ERP-85) (#64)
Auto Tag Develop / tag (push) Successful in 7s
## ERP-85 — Migration BDD M2 Fournisseurs (étape 1/7)

PR **empilée sur ERP-84** (#63) : ne contient que le commit ERP-85. À merger après #63 (la base rebascule sur develop automatiquement au merge de #63).

### Contenu
Migration `Version20260605130000.php` (namespace racine `DoctrineMigrations`) — schéma M2 sous le module Commercial, jumeau du M1 client.

**8 tables** : `supplier`, `supplier_category` (M2M), `supplier_contact`, `supplier_address`, `supplier_address_site` / `_contact` / `_category` (3 M2M), `supplier_rib`.

**Spécificités M2 (vs M1 client)**
- `supplier` **sans contact inline** (ERP-106) ni auto-référence distributor/broker ; ajout `volume_forecast`.
- `supplier_address` : enum `address_type` `CHECK (PROSPECT|DEPART|RENDU)`, `bennes` + `triage_provider`, **pas** de `billing_email`.
- Index partiel unique `uq_supplier_company_name_active` (nom seul, hors archives/soft-delete).

**Réutilisations (zéro duplication)** : référentiels comptables M1 (`tva_mode`/`payment_delay`/`payment_type`/`bank`) + `CategoryType FOURNISSEUR` (seedé par ERP-84). Pas de re-seed.

**Conventions** : `COMMENT ON COLUMN` sur chaque colonne (règle n°12) + helper Timestampable/Blamable ; namespace racine (FK cross-module, exception règle n°11).

### Vérifications
- `make db-reset`  de bout en bout (aucune erreur FK)
- `make test`  483 tests OK (`ColumnsHaveSqlCommentTest` vert, 0 colonne sans commentaire)
- `make php-cs-fixer-allow-risky`  0 fichier à corriger

Bloque : #86 (entités `Supplier*` + ApiResource).
---------

Co-authored-by: admin malio <malio@yuno.malio.fr>
Co-authored-by: Matthieu <contact@malio.fr>
Reviewed-on: #64
Co-authored-by: THOLOT DECHENE Matthieu <matthieu@yuno.malio.fr>
Co-committed-by: THOLOT DECHENE Matthieu <matthieu@yuno.malio.fr>
2026-06-08 07:06:01 +00:00