setName('Gmail SMTP') ->setHost('smtp.gmail.com') ->setPort(587) ->setEncryption('tls') ->setUsername('devyayaly@gmail.com') ->setPassword('tnwszixxmbbvkbks') ->setFromEmail('devyayaly@gmail.com') ->setFromName('Yaya System-GMAIL') ->setAuthRequired(true) ->setIsActive(false) ->setDescription('Configuration SMTP Gmail pour les emails système'); $manager->persist($gmailConfig); // Configuration serveur autohebergé $autoConfig = new SmtpConfiguration(); $autoConfig->setName('Serveur Autohebergé') ->setHost('mail.yayaly.xyz') ->setPort(587) ->setEncryption('tls') ->setUsername('contact@yayaly.xyz') ->setPassword('A1088rQe-Ch') ->setFromEmail('contact@yayaly.xyz') ->setFromName('Yima-Shop') ->setAuthRequired(true) ->setIsActive(true) ->setDescription('Configuration SMTP serveur autohebergé yaya.xyz'); $manager->persist($autoConfig); // Configuration de test locale (sans authentification) $localConfig = new SmtpConfiguration(); $localConfig->setName('Test Local') ->setHost('localhost') ->setPort(1025) ->setEncryption('none') ->setUsername(null) ->setPassword(null) ->setFromEmail('contact@yaya.xyz') ->setFromName('Yaya System Test') ->setAuthRequired(false) ->setIsActive(false) ->setDescription('Configuration pour tests locaux avec MailHog ou similaire'); $manager->persist($localConfig); // Create sample users $this->createSampleUsers($manager); // Client de test : AmansaShop + son manager + sa base de données $this->createAmansaShop($manager); $manager->flush(); } /** * Client de test « AmansaShop » : boutique + manager (yalya96@gmail.com) + base cliente `amansa`. * Idempotent : si le manager existe déjà, on ne recrée rien (permet `doctrine:fixtures:load --append`). */ private function createAmansaShop(ObjectManager $manager): void { $existing = $manager->getRepository(User::class)->findOneBy(['email' => 'yalya96@gmail.com']); if ($existing !== null) { return; } // Boutique $company = new Company(); $company->setName('AmansaShop'); $company->setEmail('yalya96@gmail.com'); $company->setIsActive(true); $manager->persist($company); // Manager — flags « login API propre » (2FA off, actif, pas d'approbation d'appareil) $managerUser = new User(); $managerUser->setEmail('yalya96@gmail.com'); $managerUser->setUsername('yalya96@gmail.com'); $managerUser->setFirstName('Amansa'); $managerUser->setLastName('Manager'); $managerUser->setRoles(['ROLE_MANAGER', 'ROLE_USER']); $managerUser->setPassword($this->passwordHasher->hashPassword($managerUser, 'Welcome123@')); $managerUser->setIsActive(true); $managerUser->markEmailAsVerified(); $managerUser->setIs2faEnabled(false); $managerUser->setRequireDeviceApproval(false); $managerUser->setIsIpValidationEnabled(false); $managerUser->setIsCountryValidationEnabled(false); $managerUser->setReceiveLoginAlerts(false); $managerUser->setMustChangePassword(false); $managerUser->setIsFirstLogin(false); $managerUser->markPasswordChanged(); $managerUser->setPreferredLanguage('fr'); $managerUser->setTimezone('Africa/Dakar'); $manager->persist($managerUser); // Lien manager ↔ boutique $userCompany = new UserCompany(); $userCompany->setUser($managerUser); $userCompany->setCompany($company); $userCompany->setRole('manager'); $userCompany->setIsActive(true); $manager->persist($userCompany); // Base de données cliente `amansa` (même MariaDB local, mot de passe chiffré) $database = new CompanyDatabase(); $database->setCompany($company); $database->setDriver('mysql'); $database->setHost('127.0.0.1'); $database->setPort(3306); $database->setDatabaseName('amansa'); $database->setUsername('root'); $database->setPasswordEncrypted($this->encryptionService->encrypt('welcome')); $database->setCharset('utf8mb4'); $database->setIsActive(true); $manager->persist($database); // Catalogue de démonstration (prix en centimes XOF) $this->createDemoCatalogue($company, $manager); } /** * Catalogue de démonstration pour AmansaShop : quelques catégories + produits. * Montants en centimes de FCFA (XOF), TVA 18 %. */ private function createDemoCatalogue(Company $company, ObjectManager $manager): void { $categories = []; foreach (['Boissons', 'Épicerie', 'Hygiène'] as $categoryName) { $category = new ProductCategory(); $category->setCompany($company); $category->setName($categoryName); $category->setIsActive(true); $manager->persist($category); $categories[$categoryName] = $category; } // [nom, catégorie, prix en centimes XOF, sku, code-barres] $products = [ ['Eau minérale 1,5 L', 'Boissons', 50000, 'BOIS-EAU15', '6001234500011'], ['Jus de bissap 1 L', 'Boissons', 90000, 'BOIS-BIS10', '6001234500028'], ['Café Touba 250 g', 'Épicerie', 150000, 'EPIC-CAF25', '6001234500035'], ['Riz parfumé 5 kg', 'Épicerie', 480000, 'EPIC-RIZ05', '6001234500042'], ['Sucre en poudre 1 kg', 'Épicerie', 85000, 'EPIC-SUC01', '6001234500059'], ['Savon de Marseille', 'Hygiène', 60000, 'HYG-SAV01', '6001234500066'], ['Dentifrice 75 ml', 'Hygiène', 120000, 'HYG-DEN75', '6001234500073'], ]; $stockLevels = [40, 25, 60, 30, 50, 80, 45]; // Seuils d'alerte de démo : bissap (25≤30), riz (30≤35) et dentifrice (45≤50) déclenchent une alerte. $lowStockThresholds = [10, 30, 15, 35, 20, 20, 50]; foreach ($products as $index => [$name, $categoryName, $priceCents, $sku, $barcode]) { $product = new Product(); $product->setCompany($company); $product->setCategory($categories[$categoryName] ?? null); $product->setName($name); $product->setSku($sku); $product->setBarcode($barcode); $product->setPriceCents($priceCents); $product->setVatRate(18); $product->setIsActive(true); $product->setLowStockThreshold($lowStockThresholds[$index] ?? null); $manager->persist($product); // Stock initial de démonstration. $stock = new StockItem(); $stock->setCompany($company); $stock->setProduct($product); $stock->setQuantityOnHand($stockLevels[$index] ?? 0); $manager->persist($stock); } } private function createSampleUsers(ObjectManager $manager): void { // Idempotent : ne pas recréer le super-admin s'il existe (permet --append) if ($manager->getRepository(User::class)->findOneBy(['email' => 'devyayaly@gmail.com']) !== null) { return; } // Super Admin user abdoulaye.sall@gmail.com $superAdmin = new User(); $superAdmin->setEmail('devyayaly@gmail.com'); $superAdmin->setUsername('devyayaly@gmail.com'); $superAdmin->setFirstName('Super'); $superAdmin->setLastName('Admin'); $superAdmin->setRoles([ 'ROLE_ADMIN', 'ROLE_USER']); $superAdmin->setPassword($this->passwordHasher->hashPassword($superAdmin, 'Welcome123@')); $superAdmin->setIsActive(true); $superAdmin->setIs2faEnabled(true); $superAdmin->setReceiveLoginAlerts(false); $superAdmin->setMustChangePassword(false); $superAdmin->setIsFirstLogin(false); $superAdmin->markPasswordChanged(); $superAdmin->setBio('Super administrateur du système Yaya avec tous les privilèges'); $superAdmin->setPreferredLanguage('fr'); $superAdmin->setTimezone('Africa/Dakar'); $manager->persist($superAdmin); } }