a5de67940b
## ERP-56 — Référentiels comptables en lecture seule
Expose les 4 référentiels comptables (M1 Commercial) en **lecture seule** via API Platform. Aucune nouvelle entité ni migration : seule la couche API (`#[ApiResource]`) est ajoutée sur des entités existantes (ERP-53/54).
> **Stacked PR** — base = `feature/ERP-59-declarer-permissions-commercial-clients-rbac` (la security `commercial.clients.view` est déclarée par ERP-59).
### Endpoints exposés
| Méthode | URL |
|---|---|
| `GET` | `/api/tva_modes` · `/api/tva_modes/{id}` |
| `GET` | `/api/payment_delays` · `/api/payment_delays/{id}` |
| `GET` | `/api/payment_types` · `/api/payment_types/{id}` |
| `GET` | `/api/banks` · `/api/banks/{id}` |
OpenAPI exposée automatiquement.
### Détails techniques
- **Opérations** : `GetCollection` + `Get` uniquement. Aucune écriture déclarée → `POST` / `PATCH` / `DELETE` renvoient **405**.
- **Security** : `is_granted('commercial.clients.view')` au niveau opérations **et** ressource.
- **Tri par défaut** : `position ASC` puis `label ASC` (spec § 4.7) via `order:` sur `GetCollection` (provider Doctrine par défaut, aligné sur le pattern `CategoryType` ERP-46 — pas de provider custom car référentiels sans filtre).
- **Pagination (ERP-72)** : pagination serveur conservée sur ces collections autonomes. `paginationClientEnabled: true` par opération pour activer l'échappatoire `?pagination=false` (alimenter un `<MalioSelect>` complet). Note : `client_enabled` est `false` globalement, d'où l'activation explicite par opération.
### Tests (`tests/Module/Commercial/Api/ReferentialApiTest.php`)
`make test` → **364 tests OK** (dont 21 nouveaux, 70 assertions) :
- 4 endpoints → **200** avec le seed (`CommercialReferentialFixtures`) ;
- tri **position ASC** vérifié + départage **label ASC** (lignes de test purgées en `tearDown`) ;
- `GET` item → 200 ;
- `POST` (×4) / `PATCH` / `DELETE` → **405** ;
- user authentifié sans `commercial.clients.view` → **403** ;
- anonyme → **401** ;
- pagination serveur active (page 2 vide) + `?pagination=false` cohérent.
`make php-cs-fixer-allow-risky` : clean.
### Review
Reviewer souhaité : @tristan
À **squash merge** (sélectionner manuellement dans l'UI Gitea).
---------
Co-authored-by: Matthieu <contact@malio.fr>
Reviewed-on: #34
Co-authored-by: THOLOT DECHENE Matthieu <matthieu@yuno.malio.fr>
Co-committed-by: THOLOT DECHENE Matthieu <matthieu@yuno.malio.fr>