diff --git a/src/Module/Commercial/Infrastructure/DataFixtures/SupplierFixtures.php b/src/Module/Commercial/Infrastructure/DataFixtures/SupplierFixtures.php index ac89f22..6ef37fe 100644 --- a/src/Module/Commercial/Infrastructure/DataFixtures/SupplierFixtures.php +++ b/src/Module/Commercial/Infrastructure/DataFixtures/SupplierFixtures.php @@ -82,6 +82,12 @@ use Symfony\Component\DependencyInjection\Attribute\Autowire; */ class SupplierFixtures extends Fixture implements DependentFixtureInterface { + /** + * Type de categorie exige pour un fournisseur et ses adresses (RG-2.10). + * Miroir de Supplier::REQUIRED_CATEGORY_TYPE_CODE (non importable — regle n°1). + */ + private const string SUPPLIER_CATEGORY_TYPE_CODE = 'FOURNISSEUR'; + /** Cache des categories resolues par nom (evite des requetes repetees). */ private array $categoryCache = []; @@ -415,19 +421,27 @@ class SupplierFixtures extends Fixture implements DependentFixtureInterface return $this->categoryCache[$name]; } - $category = $manager->getRepository(CategoryInterface::class)->findOneBy([ + // RG-2.10 : on filtre explicitement sur le type FOURNISSEUR. Un lookup par + // le seul `name` rattacherait une categorie homonyme d'un autre type (ex. + // futur PRESTA) — donc du MAUVAIS type — ce qui violerait « au moins une + // categorie de type FOURNISSEUR ». Le filtre type est porte cote PHP + // (findBy ne sait pas filtrer une propriete imbriquee categoryType.code). + $candidates = $manager->getRepository(CategoryInterface::class)->findBy([ 'name' => $name, 'deletedAt' => null, ]); - if (!$category instanceof CategoryInterface) { - throw new RuntimeException(sprintf( - 'Categorie "%s" introuvable : CategoryFixtures doit tourner avant SupplierFixtures.', - $name, - )); + foreach ($candidates as $candidate) { + if ($candidate instanceof CategoryInterface + && self::SUPPLIER_CATEGORY_TYPE_CODE === $candidate->getCategoryTypeCode()) { + return $this->categoryCache[$name] = $candidate; + } } - return $this->categoryCache[$name] = $category; + throw new RuntimeException(sprintf( + 'Categorie FOURNISSEUR "%s" introuvable : CategoryFixtures doit tourner avant SupplierFixtures.', + $name, + )); } /**