feat(catalog) : M7 — écran Ajouter un stockage /admin/storages/new (ERP-217) #169

Open
tristan wants to merge 1 commits from feat/erp-217-storage-create-form into feat/erp-216-storages-list-page
Owner

Écran de création d'un stockage (admin-only), empilé sur ERP-216 (#168) — base = feat/erp-216-storages-list-page.

Contenu

  • Route /admin/storages/new (shell admin), gate catalog.storages.manage (redirection sinon).
  • Formulaire à plat (pas d'onglets — HP-M7-06), miroir de l'écran Ajouter produit / Client.
  • Champs (étoile rouge sur obligatoires), composants @malio/layer-ui :
    • Site MalioSelect (RG-7.02)
    • Type de stockage MalioSelect
    • Numéro MalioInputText (RG-7.01, trim serveur)
    • État du type de stockage MalioSelectCheckbox (multi ≥ 1, RG-7.04)
  • Validation inline 422 par champ via useFormErrors ({ toast: false }), bouton Valider toujours actif (ERP-101).
  • RG-7.01 : 409 doublon (site, type, numéro) → setError('numero', …) + toast explicite.
  • Composable useStorageForm (POST /api/storages, relations en IRI), libellés i18n.

⚠ Écart spec assumé — RG-7.03 (cascade Site→Type)

Le prompt demandait une cascade Site→Type (?siteId[]). Non implémentée, sur décision (30/06) de rester fidèle au back :

  • StorageType est un référentiel plat sans relation Site (jointure storage_type_site droppée en M6, migration Version20260626100000) ; StorageTypeProvider ignore ?siteId[].
  • Le docblock du StorageProcessor le signale déjà : « RG-7.03 n'est PAS portée… à reclarifier côté spec. »

→ Choix : Site et Type indépendants, tous les types chargés une fois. RG-7.03 à reclarifier / mettre à jour dans la spec M7 (et ré-ouvrir un ticket back si le filtrage par site doit revenir).

Fichiers

  • frontend/modules/catalog/composables/useStorageForm.ts
  • frontend/modules/catalog/pages/admin/storages/new.vue
  • frontend/modules/catalog/composables/__tests__/useStorageForm.spec.ts (7 tests)
  • frontend/i18n/locales/fr.json (bloc admin.storages.form.* + toast.createSuccess)

Vérifications

  • make nuxt-test : 743 tests
  • Suite back PHPUnit (hook pre-commit) : 940 tests
Écran de création d'un stockage (admin-only), **empilé sur ERP-216 (#168)** — base = `feat/erp-216-storages-list-page`. ## Contenu - Route `/admin/storages/new` (shell admin), gate `catalog.storages.manage` (redirection sinon). - Formulaire **à plat** (pas d'onglets — HP-M7-06), miroir de l'écran Ajouter produit / Client. - Champs (étoile rouge sur obligatoires), composants `@malio/layer-ui` : - **Site** `MalioSelect` (RG-7.02) - **Type de stockage** `MalioSelect` - **Numéro** `MalioInputText` (RG-7.01, trim serveur) - **État du type de stockage** `MalioSelectCheckbox` (multi ≥ 1, RG-7.04) - Validation inline 422 par champ via `useFormErrors` (`{ toast: false }`), bouton Valider toujours actif (ERP-101). - **RG-7.01** : 409 doublon (site, type, numéro) → `setError('numero', …)` + toast explicite. - Composable `useStorageForm` (`POST /api/storages`, relations en IRI), libellés i18n. ## ⚠ Écart spec assumé — RG-7.03 (cascade Site→Type) Le prompt demandait une cascade Site→Type (`?siteId[]`). **Non implémentée**, sur décision (30/06) de rester **fidèle au back** : - `StorageType` est un **référentiel plat** sans relation `Site` (jointure `storage_type_site` droppée en M6, migration `Version20260626100000`) ; `StorageTypeProvider` ignore `?siteId[]`. - Le docblock du `StorageProcessor` le signale déjà : *« RG-7.03 n'est PAS portée… à reclarifier côté spec. »* → Choix : Site et Type indépendants, tous les types chargés une fois. **RG-7.03 à reclarifier / mettre à jour dans la spec M7** (et ré-ouvrir un ticket back si le filtrage par site doit revenir). ## Fichiers - `frontend/modules/catalog/composables/useStorageForm.ts` - `frontend/modules/catalog/pages/admin/storages/new.vue` - `frontend/modules/catalog/composables/__tests__/useStorageForm.spec.ts` (7 tests) - `frontend/i18n/locales/fr.json` (bloc `admin.storages.form.*` + `toast.createSuccess`) ## Vérifications - `make nuxt-test` : ✅ 743 tests - Suite back PHPUnit (hook pre-commit) : ✅ 940 tests
tristan added the type/featfrontM7-Stockage labels 2026-06-30 09:29:49 +00:00
tristan added 1 commit 2026-06-30 09:29:49 +00:00
- Formulaire de création à plat (pas d'onglets, HP-M7-06), gate catalog.storages.manage
- Champs Site, Type de stockage, Numéro, État (multi ≥1) en composants Malio, validation inline 422 par champ via useFormErrors
- 409 doublon (site, type, numéro) RG-7.01 → erreur inline sous Numéro + toast explicite
- Composable useStorageForm (POST /storages, payload relations en IRI), libellés i18n
- Référentiel des types PLAT : pas de cascade Site→Type (RG-7.03 non portée côté back, StorageType sans relation Site — à reclarifier spec)
- Tests Vitest de useStorageForm (référentiel plat, submit, 409/422)
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-217-storage-create-form:feat/erp-217-storage-create-form
git checkout feat/erp-217-storage-create-form
Sign in to join this conversation.