feat(catalog) : categories multi-types (M:N) + filtres liste
Volet A — relation Category <-> CategoryType passee de ManyToOne a ManyToMany (jonction category_category_type). Au moins un type obligatoire (Assert\Count), unicite du nom desormais GLOBALE parmi les actifs (uq_category_name_active). Migration avec backfill + drop de l'ancienne colonne. Contrat Shared CategoryInterface : getCategoryTypeCode() -> getCategoryTypeCodes(): array ; RG-2.10 fournisseurs (Supplier / SupplierAddress / fixtures) revalident « contient FOURNISSEUR ». Provider/Repository : filtre type via sous-requete EXISTS (sans tronquer la collection embarquee), eager-load anti-N+1. Volet B — bouton « Filtres » sur la liste des categories (recherche nom + types multi en OR), sur le modele du Repertoire Clients ; etat local, jamais persiste en URL. Filtres back ?name= et ?typeId[]= sur la collection. Front : multi-select MalioSelectCheckbox, useCategoryForm en categoryTypeIds[], colonne « Types », i18n. ColumnCommentsCatalog + makefile test-db-setup alignes sur le nouvel index partiel. Tests Catalog/Commercial adaptes + CategoryFilterTest.
This commit is contained in:
@@ -35,10 +35,14 @@ interface CategoryInterface
|
||||
public function getCode(): ?string;
|
||||
|
||||
/**
|
||||
* Code du type de categorie rattache (CategoryType::code), ou null si la
|
||||
* categorie n'a pas de type. Depuis ERP-78, le modele n'a plus qu'un seul
|
||||
* type (CLIENT) : le filtrage metier passe desormais par getCode() ci-dessus.
|
||||
* Conserve pour l'affichage / la retrocompatibilite.
|
||||
* Codes des types de categorie rattaches (CategoryType::code), tableau vide
|
||||
* si aucun. Depuis le passage en ManyToMany, une categorie peut porter
|
||||
* plusieurs types : un module tiers teste l'appartenance via
|
||||
* `in_array($code, $category->getCategoryTypeCodes(), true)`. Pilote, cote
|
||||
* M2 Commercial, la RG-2.10 (une categorie de fournisseur doit etre de type
|
||||
* FOURNISSEUR).
|
||||
*
|
||||
* @return list<string>
|
||||
*/
|
||||
public function getCategoryTypeCode(): ?string;
|
||||
public function getCategoryTypeCodes(): array;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user