feat(catalog) : M6 — écran Ajouter un produit /admin/products/new (ERP-205) #157

Open
tristan wants to merge 1 commits from feat/erp-205-product-create-form into feat/erp-204-products-list-front
Owner

ERP-205 (1.9) — Écran Ajouter un produit /admin/products/new

⚠️ MR empilée sur feat/erp-204-products-list-front (ERP-204, non encore mergée). À merger après ERP-204 ; rebaser sur develop une fois ERP-204 intégrée.

Formulaire principal de création produit (admin-only), référence visuelle = écran « Ajouter un client / prestataire ».

Champs (composants Malio*)

  • État du produitMalioSelectCheckbox (≥ 1) → enum PURCHASE/SALE/OTHER.
  • SiteMalioSelectCheckbox (≥ 1), useSiteOptions().
  • Nom / CodeMalioInputText.
  • CatégorieMalioSelect, useCategoryOptions({ typeCode: 'PRODUIT' }).
  • Type de stockageMalioSelectCheckbox, useStorageTypeOptions() filtré par sites.
  • Fabriqué / Contient de la mélasseMalioCheckbox.

Règles

  • RG-6.03 : booléens « Fabriqué » / « mélasse » visibles uniquement si l'état contient « Vendu » (et forcés false au payload sinon).
  • RG-6.06 (cascade) : à chaque changement de Site, rechargement des Types de stockage + purge des types devenus indisponibles — logique dans useProductForm().
  • RG-6.01 / validation : POST /api/products via useApi().post(..., { toast: false }) ; 422 mappées inline par champ (useFormErrors) ; 409 doublon de codesetError('code', …) + toast explicite.
  • Bouton « Valider » toujours actif (validation autoritaire serveur, ERP-101).

Garde-fous

  • useApi() only, aucun <input>/<select> brut ; 4 espaces ; commentaires FR ; libellés i18n.

Vérifications

  • make nuxt-test : 700 tests OK (dont 15 nouveaux — useProductForm : conditionnels SALE, cascade site→stockage, mapping 422/409 ; page : rendu conditionnel + submit→redirect + gating).
  • eslint clean.
  • ⚠️ Golden path navigateur non lancé (nécessite dev-nuxt + navigateur).
## ERP-205 (1.9) — Écran Ajouter un produit `/admin/products/new` > ⚠️ **MR empilée** sur `feat/erp-204-products-list-front` (ERP-204, non encore mergée). À merger **après** ERP-204 ; rebaser sur `develop` une fois ERP-204 intégrée. Formulaire principal de création produit (**admin-only**), référence visuelle = écran « Ajouter un client / prestataire ». ### Champs (composants Malio*) - **État du produit** — `MalioSelectCheckbox` (≥ 1) → enum `PURCHASE/SALE/OTHER`. - **Site** — `MalioSelectCheckbox` (≥ 1), `useSiteOptions()`. - **Nom** / **Code** — `MalioInputText`. - **Catégorie** — `MalioSelect`, `useCategoryOptions({ typeCode: 'PRODUIT' })`. - **Type de stockage** — `MalioSelectCheckbox`, `useStorageTypeOptions()` filtré par sites. - **Fabriqué** / **Contient de la mélasse** — `MalioCheckbox`. ### Règles - **RG-6.03** : booléens « Fabriqué » / « mélasse » visibles **uniquement si l'état contient « Vendu »** (et forcés `false` au payload sinon). - **RG-6.06 (cascade)** : à chaque changement de Site, rechargement des Types de stockage + purge des types devenus indisponibles — logique dans `useProductForm()`. - **RG-6.01 / validation** : `POST /api/products` via `useApi().post(..., { toast: false })` ; 422 mappées inline par champ (`useFormErrors`) ; **409 doublon de code** → `setError('code', …)` + toast explicite. - Bouton « Valider » **toujours actif** (validation autoritaire serveur, ERP-101). ### Garde-fous - `useApi()` only, aucun `<input>`/`<select>` brut ; 4 espaces ; commentaires FR ; libellés i18n. ### Vérifications - ✅ `make nuxt-test` : 700 tests OK (dont 15 nouveaux — `useProductForm` : conditionnels SALE, cascade site→stockage, mapping 422/409 ; page : rendu conditionnel + submit→redirect + gating). - ✅ eslint clean. - ⚠️ Golden path navigateur non lancé (nécessite dev-nuxt + navigateur).
tristan added the type/featfrontM6-Produit labels 2026-06-25 15:52:33 +00:00
tristan added 1 commit 2026-06-25 15:52:34 +00:00
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)
This pull request can be merged automatically.
You are not authorized to merge this pull request.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin feat/erp-205-product-create-form:feat/erp-205-product-create-form
git checkout feat/erp-205-product-create-form
Sign in to join this conversation.