Commit Graph

3 Commits

Author SHA1 Message Date
tristan 64c3b9b6ec feat(catalog) : M6 — écran Modification produit + onglets placeholder (ERP-206)
Écran de modification (ajout pré-rempli, bouton « Enregistrer ») et pose des
onglets Fournisseurs/Clients en placeholder « en cours de développement ».

- route /admin/products/{id}/edit : useProduct(id) charge le détail, prefill du formulaire principal
- RG-6.08 : useProductForm en mode édition → PATCH /products/{id} (merge-patch), bouton « Enregistrer »
- unicité du code re-validée serveur en édition (409 doublon mappé inline)
- onglets Fournisseurs + Clients : ComingSoonPlaceholder, aucun appel API ni champ (HP-M6-01 / RG-6.10)
- mêmes onglets placeholder posés sur l'écran Ajouter (cohérence)
- i18n admin.products.edit / tab ; 11 tests Vitest (prefill + PATCH + placeholder)
2026-06-25 18:01:33 +02:00
tristan ce0e274743 feat(catalog) : M6 — écran Ajouter un produit /admin/products/new (ERP-205)
Formulaire principal de création produit (admin-only) : état, sites, nom,
code, catégorie (type PRODUIT), types de stockage, booléens conditionnels.

- RG-6.03 : « Fabriqué » / « Contient de la mélasse » visibles uniquement si l'état contient « Vendu »
- RG-6.06 : cascade Site → Type de stockage (rechargement + purge des types indisponibles) dans useProductForm
- RG-6.01 : POST /products (toast:false) ; 422 mappées inline (useFormErrors), 409 doublon de code → setError + toast
- bouton « Valider » toujours actif, validation autoritaire serveur (ERP-101)
- composables useSiteOptions / useCategoryOptions / useStorageTypeOptions (?pagination=false)
- i18n admin.products.form ; 15 tests Vitest (useProductForm + page)
2026-06-25 17:52:02 +02:00
tristan f12a378126 feat(catalog) : M6 — page liste produits /admin/products (ERP-204)
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Successful in 1m59s
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Successful in 5m35s
Ecran d'entree du catalogue produit (admin-only) : liste paginee
(usePaginatedList), drawer de filtres (categorie/etat/sites), export
XLSX et navigation vers creation/edition.

- colonnes Nom / Numero (code) / Categorie (category.name), tri name ASC serveur
- filtres mappes sur les query params du provider (categoryId, state, siteId[])
- etat du tableau 100% local (jamais dans l'URL)
- type Product calque sur le contrat JSON capture (ERP-203)
- i18n admin.products ; 11 tests Vitest
2026-06-25 17:39:41 +02:00