diff --git a/database/seeders/CategorySeeder.php b/database/seeders/CategorySeeder.php index 0403fae..781b511 100644 --- a/database/seeders/CategorySeeder.php +++ b/database/seeders/CategorySeeder.php @@ -4,11 +4,14 @@ use App\Models\Category; use App\Models\Company; +use Database\Seeders\Concerns\FiltersSeedableCompanies; use Illuminate\Database\Seeder; use Illuminate\Support\Collection; class CategorySeeder extends Seeder { + use FiltersSeedableCompanies; + /** * Run the database seeds. */ @@ -68,12 +71,15 @@ public function run(): void $company = Company::where('name', 'GoofyTeam')->first(); - if ($company !== null) { + if ($company !== null && ! $this->isExcludedCompanyId($company->id)) { $this->seedCategoriesForCompany($company, $categories); } // Create categories for other companies - $otherCompanies = Company::where('name', '!=', 'GoofyTeam')->get(); + $otherCompanies = Company::query() + ->where('name', '!=', 'GoofyTeam') + ->whereNotIn('name', $this->excludedCompanyNames()) + ->get(); foreach ($otherCompanies as $company) { $this->seedCategoriesForCompany($company, $categories); } diff --git a/database/seeders/Concerns/FiltersSeedableCompanies.php b/database/seeders/Concerns/FiltersSeedableCompanies.php new file mode 100644 index 0000000..fe9ac41 --- /dev/null +++ b/database/seeders/Concerns/FiltersSeedableCompanies.php @@ -0,0 +1,65 @@ + + */ + protected function excludedCompanyNames(): array + { + return [ + 'Maison Gustave', + 'La Table des Canuts', + 'Bistro Maelle', + ]; + } + + /** + * Retrieve a query builder limited to companies handled by the database seeder. + */ + protected function seedableCompanyQuery(): Builder + { + return Company::query()->whereNotIn('name', $this->excludedCompanyNames()); + } + + /** + * Retrieve the collection of companies handled by the database seeder. + * + * @return Collection + */ + protected function seedableCompanies(): Collection + { + return $this->seedableCompanyQuery()->get(); + } + + /** + * Retrieve the identifiers of the companies that must be ignored. + * + * @return Collection + */ + protected function excludedCompanyIds(): Collection + { + static $ids; + + if ($ids === null) { + $ids = Company::query() + ->whereIn('name', $this->excludedCompanyNames()) + ->pluck('id'); + } + + return $ids; + } + + protected function isExcludedCompanyId(?int $companyId): bool + { + return $companyId !== null && $this->excludedCompanyIds()->contains($companyId); + } +} diff --git a/database/seeders/IngredientThresholdSeeder.php b/database/seeders/IngredientThresholdSeeder.php index dcd5928..63c1fdb 100644 --- a/database/seeders/IngredientThresholdSeeder.php +++ b/database/seeders/IngredientThresholdSeeder.php @@ -3,14 +3,18 @@ namespace Database\Seeders; use App\Models\Ingredient; +use Database\Seeders\Concerns\FiltersSeedableCompanies; use Faker\Generator as FakerGenerator; use Illuminate\Database\Seeder; class IngredientThresholdSeeder extends Seeder { + use FiltersSeedableCompanies; + public function run(): void { $ingredients = Ingredient::query() + ->whereHas('company', fn ($query) => $query->whereNotIn('name', $this->excludedCompanyNames())) ->whereNull('threshold') ->inRandomOrder() ->get(); diff --git a/database/seeders/LocationSeeder.php b/database/seeders/LocationSeeder.php index ab57a53..9a504cb 100644 --- a/database/seeders/LocationSeeder.php +++ b/database/seeders/LocationSeeder.php @@ -4,10 +4,13 @@ use App\Models\Company; use App\Models\Location; +use Database\Seeders\Concerns\FiltersSeedableCompanies; use Illuminate\Database\Seeder; class LocationSeeder extends Seeder { + use FiltersSeedableCompanies; + /** * Run the database seeds. */ @@ -15,32 +18,37 @@ public function run(): void { $company = Company::where('name', 'GoofyTeam')->first(); - // Récupérer les types de localisation de GoofyTeam - $locationTypes = $company->locationTypes()->get()->keyBy('name'); - - // Définir la map entre le nom de la location et son type - $locationTypeMap = [ - 'Chambre froide principale' => 'Réfrigérateur', - 'Congélateur cuisine' => 'Congélateur', - 'Réserve sèche' => 'Autre', - 'Bar' => 'Autre', - 'Cave à vin' => 'Autre', - 'Étagère condiments' => 'Autre', - 'Placard pâtisserie' => 'Autre', - 'Réfrigérateur préparations' => 'Réfrigérateur', - ]; - - // Créer des emplacements pour GoofyTeam avec leurs types - foreach ($locationTypeMap as $locationName => $typeName) { - Location::factory()->create([ - 'name' => $locationName, - 'company_id' => $company->id, - 'location_type_id' => $locationTypes[$typeName]->id, - ]); + if ($company !== null && ! $this->isExcludedCompanyId($company->id)) { + // Récupérer les types de localisation de GoofyTeam + $locationTypes = $company->locationTypes()->get()->keyBy('name'); + + // Définir la map entre le nom de la location et son type + $locationTypeMap = [ + 'Chambre froide principale' => 'Réfrigérateur', + 'Congélateur cuisine' => 'Congélateur', + 'Réserve sèche' => 'Autre', + 'Bar' => 'Autre', + 'Cave à vin' => 'Autre', + 'Étagère condiments' => 'Autre', + 'Placard pâtisserie' => 'Autre', + 'Réfrigérateur préparations' => 'Réfrigérateur', + ]; + + // Créer des emplacements pour GoofyTeam avec leurs types + foreach ($locationTypeMap as $locationName => $typeName) { + Location::factory()->create([ + 'name' => $locationName, + 'company_id' => $company->id, + 'location_type_id' => $locationTypes[$typeName]->id, + ]); + } } // Créer quelques emplacements pour les autres entreprises - $otherCompanies = Company::where('name', '!=', 'GoofyTeam')->get(); + $otherCompanies = Company::query() + ->where('name', '!=', 'GoofyTeam') + ->whereNotIn('name', $this->excludedCompanyNames()) + ->get(); foreach ($otherCompanies as $company) { // Récupérer les types de localisation de cette entreprise $companyLocationTypes = $company->locationTypes()->get()->keyBy('name'); diff --git a/database/seeders/LossSeeder.php b/database/seeders/LossSeeder.php index 109c9fd..ea3d223 100644 --- a/database/seeders/LossSeeder.php +++ b/database/seeders/LossSeeder.php @@ -6,16 +6,19 @@ use App\Models\Ingredient; use App\Models\Loss; use App\Models\Preparation; +use Database\Seeders\Concerns\FiltersSeedableCompanies; use Illuminate\Database\Seeder; class LossSeeder extends Seeder { + use FiltersSeedableCompanies; + /** * Génère des pertes factices pour chaque entreprise. */ public function run(): void { - Company::all()->each(function (Company $company) { + $this->seedableCompanies()->each(function (Company $company) { $user = $company->users()->inRandomOrder()->first(); $company->locations->each(function ($location) use ($company, $user) { diff --git a/database/seeders/MenuCategorySeeder.php b/database/seeders/MenuCategorySeeder.php index cbcf17a..22b5645 100644 --- a/database/seeders/MenuCategorySeeder.php +++ b/database/seeders/MenuCategorySeeder.php @@ -2,15 +2,17 @@ namespace Database\Seeders; -use App\Models\Company; use App\Models\MenuCategory; +use Database\Seeders\Concerns\FiltersSeedableCompanies; use Illuminate\Database\Seeder; class MenuCategorySeeder extends Seeder { + use FiltersSeedableCompanies; + public function run(): void { - $companies = Company::all(); + $companies = $this->seedableCompanies(); foreach ($companies as $company) { foreach (['halal', 'casher', 'vegan'] as $name) { diff --git a/database/seeders/MenuSeeder.php b/database/seeders/MenuSeeder.php index 827f361..1278a2f 100644 --- a/database/seeders/MenuSeeder.php +++ b/database/seeders/MenuSeeder.php @@ -9,6 +9,7 @@ use App\Models\MenuItem; use App\Models\MenuType; use App\Models\Preparation; +use Database\Seeders\Concerns\FiltersSeedableCompanies; use Illuminate\Database\Seeder; use Illuminate\Support\Collection; use Illuminate\Support\Facades\Storage; @@ -16,9 +17,11 @@ class MenuSeeder extends Seeder { + use FiltersSeedableCompanies; + public function run(): void { - $companies = Company::all(); + $companies = $this->seedableCompanies(); foreach ($companies as $company) { $ingredients = Ingredient::where('company_id', $company->id) diff --git a/database/seeders/OrderHistorySeeder.php b/database/seeders/OrderHistorySeeder.php index dd9253a..602bd81 100644 --- a/database/seeders/OrderHistorySeeder.php +++ b/database/seeders/OrderHistorySeeder.php @@ -11,16 +11,20 @@ use App\Models\StepMenu; use App\Models\User; use App\Services\OrderHistoryService; +use Database\Seeders\Concerns\FiltersSeedableCompanies; use Illuminate\Database\Seeder; class OrderHistorySeeder extends Seeder { + use FiltersSeedableCompanies; + public function run(): void { /** @var OrderHistoryService $historyService */ $historyService = app(OrderHistoryService::class); $orders = Order::query() + ->whereHas('company', fn ($query) => $query->whereNotIn('name', $this->excludedCompanyNames())) ->with(['user', 'steps.stepMenus']) ->get(); diff --git a/database/seeders/OrderSeeder.php b/database/seeders/OrderSeeder.php index 1bd1411..1136f46 100644 --- a/database/seeders/OrderSeeder.php +++ b/database/seeders/OrderSeeder.php @@ -8,17 +8,20 @@ use App\Models\Room; use App\Models\Table; use Carbon\Carbon; +use Database\Seeders\Concerns\FiltersSeedableCompanies; use Illuminate\Database\Seeder; use Illuminate\Support\Collection; class OrderSeeder extends Seeder { + use FiltersSeedableCompanies; + /** * Run the database seeds. */ public function run(): void { - $companies = Company::query()->with('users')->get(); + $companies = $this->seedableCompanyQuery()->with('users')->get(); foreach ($companies as $company) { if ($company->users->isEmpty()) { diff --git a/database/seeders/OrderStepSeeder.php b/database/seeders/OrderStepSeeder.php index 11c7927..fcae5e2 100644 --- a/database/seeders/OrderStepSeeder.php +++ b/database/seeders/OrderStepSeeder.php @@ -6,16 +6,22 @@ use App\Enums\OrderStepStatus; use App\Models\Order; use App\Models\OrderStep; +use Database\Seeders\Concerns\FiltersSeedableCompanies; use Illuminate\Database\Seeder; class OrderStepSeeder extends Seeder { + use FiltersSeedableCompanies; + /** * Run the database seeds. */ public function run(): void { - $orders = Order::query()->withCount('steps')->get(); + $orders = Order::query() + ->whereHas('company', fn ($query) => $query->whereNotIn('name', $this->excludedCompanyNames())) + ->withCount('steps') + ->get(); foreach ($orders as $order) { if ($order->steps_count > 0) { diff --git a/database/seeders/PerishableSeeder.php b/database/seeders/PerishableSeeder.php index d727284..4235756 100644 --- a/database/seeders/PerishableSeeder.php +++ b/database/seeders/PerishableSeeder.php @@ -5,11 +5,14 @@ use App\Models\Ingredient; use App\Models\Loss; use App\Services\PerishableService; +use Database\Seeders\Concerns\FiltersSeedableCompanies; use Illuminate\Database\Seeder; use Illuminate\Support\Facades\DB; class PerishableSeeder extends Seeder { + use FiltersSeedableCompanies; + public function run(PerishableService $service): void { $rows = DB::table('ingredient_location')->where('quantity', '>', 0)->get(); @@ -24,6 +27,10 @@ public function run(PerishableService $service): void } $companyId = $ingredient->company_id; + if ($this->isExcludedCompanyId($companyId)) { + continue; + } + $perishable = $service->add($row->ingredient_id, $row->location_id, $companyId, $row->quantity); if (! $perishable) { continue; // not perishable diff --git a/database/seeders/PreparationThresholdSeeder.php b/database/seeders/PreparationThresholdSeeder.php index a7ac4e5..11fda03 100644 --- a/database/seeders/PreparationThresholdSeeder.php +++ b/database/seeders/PreparationThresholdSeeder.php @@ -3,14 +3,18 @@ namespace Database\Seeders; use App\Models\Preparation; +use Database\Seeders\Concerns\FiltersSeedableCompanies; use Faker\Generator as FakerGenerator; use Illuminate\Database\Seeder; class PreparationThresholdSeeder extends Seeder { + use FiltersSeedableCompanies; + public function run(): void { $preparations = Preparation::query() + ->whereHas('company', fn ($query) => $query->whereNotIn('name', $this->excludedCompanyNames())) ->whereNull('threshold') ->inRandomOrder() ->get(); diff --git a/database/seeders/QuickAccessSeeder.php b/database/seeders/QuickAccessSeeder.php index 8d7bbef..31ff4fb 100644 --- a/database/seeders/QuickAccessSeeder.php +++ b/database/seeders/QuickAccessSeeder.php @@ -4,10 +4,13 @@ use App\Models\Company; use App\Models\QuickAccess; +use Database\Seeders\Concerns\FiltersSeedableCompanies; use Illuminate\Database\Seeder; class QuickAccessSeeder extends Seeder { + use FiltersSeedableCompanies; + /** * Available quick access shortcuts keyed by their url_key. * @@ -64,7 +67,7 @@ public function run(): void $defaults = array_values(self::defaults()); $allowedIndexes = array_column($defaults, 'index'); - Company::all()->each(function (Company $company) use ($defaults, $allowedIndexes) { + $this->seedableCompanies()->each(function (Company $company) use ($defaults, $allowedIndexes) { foreach ($defaults as $row) { QuickAccess::updateOrCreate( [ diff --git a/database/seeders/StepMenuSeeder.php b/database/seeders/StepMenuSeeder.php index 90c00a3..5cc5bf7 100644 --- a/database/seeders/StepMenuSeeder.php +++ b/database/seeders/StepMenuSeeder.php @@ -7,11 +7,14 @@ use App\Models\Menu; use App\Models\OrderStep; use App\Models\StepMenu; +use Database\Seeders\Concerns\FiltersSeedableCompanies; use Illuminate\Database\Seeder; use Illuminate\Support\Arr; class StepMenuSeeder extends Seeder { + use FiltersSeedableCompanies; + private const SAMPLE_NOTES = [ 'Allergie : retirer les noisettes.', 'Cuisson demandée : saignant.', @@ -25,9 +28,13 @@ class StepMenuSeeder extends Seeder */ public function run(): void { - $menusByCompany = Menu::query()->get()->groupBy('company_id'); + $menusByCompany = Menu::query() + ->whereHas('company', fn ($query) => $query->whereNotIn('name', $this->excludedCompanyNames())) + ->get() + ->groupBy('company_id'); $steps = OrderStep::query() + ->whereHas('order.company', fn ($query) => $query->whereNotIn('name', $this->excludedCompanyNames())) ->with('order') ->withCount('stepMenus') ->get(); diff --git a/database/seeders/StockMovementSeeder.php b/database/seeders/StockMovementSeeder.php index 36208ec..68aa4f8 100644 --- a/database/seeders/StockMovementSeeder.php +++ b/database/seeders/StockMovementSeeder.php @@ -5,10 +5,13 @@ use App\Models\Ingredient; use App\Models\Preparation; use Carbon\Carbon; +use Database\Seeders\Concerns\FiltersSeedableCompanies; use Illuminate\Database\Seeder; class StockMovementSeeder extends Seeder { + use FiltersSeedableCompanies; + public function run(): void { $this->seedIngredientMovements(); @@ -17,7 +20,9 @@ public function run(): void private function seedIngredientMovements(): void { - Ingredient::whereHas('locations', fn ($q) => $q->where('quantity', '>', 0)) + Ingredient::query() + ->whereHas('company', fn ($query) => $query->whereNotIn('name', $this->excludedCompanyNames())) + ->whereHas('locations', fn ($q) => $q->where('quantity', '>', 0)) ->get() ->each(function ($ingredient) { $ingredient->locations->each(function ($location) use ($ingredient) { @@ -115,7 +120,9 @@ private function seedIngredientMovements(): void private function seedPreparationMovements(): void { - Preparation::whereHas('locations', fn ($q) => $q->where('quantity', '>', 0)) + Preparation::query() + ->whereHas('company', fn ($query) => $query->whereNotIn('name', $this->excludedCompanyNames())) + ->whereHas('locations', fn ($q) => $q->where('quantity', '>', 0)) ->get() ->each(function ($prep) { $prep->locations->each(function ($location) use ($prep) { diff --git a/database/seeders/UserSeeder.php b/database/seeders/UserSeeder.php index ebc0894..935b8ea 100644 --- a/database/seeders/UserSeeder.php +++ b/database/seeders/UserSeeder.php @@ -4,10 +4,13 @@ use App\Models\Company; use App\Models\User; +use Database\Seeders\Concerns\FiltersSeedableCompanies; use Illuminate\Database\Seeder; class UserSeeder extends Seeder { + use FiltersSeedableCompanies; + /** * Run the database seeds. * @@ -17,6 +20,10 @@ public function run() { $goofyCompany = Company::where('name', 'GoofyTeam')->first(); + if ($goofyCompany === null || $this->isExcludedCompanyId($goofyCompany->id)) { + return; + } + $users = [ ['name' => 'Luca', 'email' => 'luca@example.com'], ['name' => 'Adrien', 'email' => 'adrien@example.com'], @@ -37,14 +44,18 @@ public function run() $charlieCompany = Company::where('name', 'Charlie Kirk')->first(); - User::factory() - ->create([ - 'name' => 'Charlie', - 'email' => 'charlie@example.com', - 'company_id' => $charlieCompany->id, - ]); + if ($charlieCompany !== null && ! $this->isExcludedCompanyId($charlieCompany->id)) { + User::factory() + ->create([ + 'name' => 'Charlie', + 'email' => 'charlie@example.com', + 'company_id' => $charlieCompany->id, + ]); + } - $otherCompanies = Company::whereNotIn('name', ['GoofyTeam', 'Charlie Kirk'])->get(); + $otherCompanies = Company::query() + ->whereNotIn('name', array_merge(['GoofyTeam', 'Charlie Kirk'], $this->excludedCompanyNames())) + ->get(); foreach ($otherCompanies as $company) { User::factory()