Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 8 additions & 2 deletions database/seeders/CategorySeeder.php
Original file line number Diff line number Diff line change
Expand Up @@ -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.
*/
Expand Down Expand Up @@ -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);
}
Expand Down
65 changes: 65 additions & 0 deletions database/seeders/Concerns/FiltersSeedableCompanies.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
<?php

namespace Database\Seeders\Concerns;

use App\Models\Company;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Collection;

trait FiltersSeedableCompanies
{
/**
* List of company names that should be ignored by the default seeders.
*
* @return list<string>
*/
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<int, Company>
*/
protected function seedableCompanies(): Collection
{
return $this->seedableCompanyQuery()->get();
}

/**
* Retrieve the identifiers of the companies that must be ignored.
*
* @return Collection<int, int>
*/
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);
}
}
4 changes: 4 additions & 0 deletions database/seeders/IngredientThresholdSeeder.php
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down
54 changes: 31 additions & 23 deletions database/seeders/LocationSeeder.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,43 +4,51 @@

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.
*/
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');
Expand Down
5 changes: 4 additions & 1 deletion database/seeders/LossSeeder.php
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
6 changes: 4 additions & 2 deletions database/seeders/MenuCategorySeeder.php
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
5 changes: 4 additions & 1 deletion database/seeders/MenuSeeder.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,16 +9,19 @@
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;
use Illuminate\Support\Str;

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)
Expand Down
4 changes: 4 additions & 0 deletions database/seeders/OrderHistorySeeder.php
Original file line number Diff line number Diff line change
Expand Up @@ -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();

Expand Down
5 changes: 4 additions & 1 deletion database/seeders/OrderSeeder.php
Original file line number Diff line number Diff line change
Expand Up @@ -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()) {
Expand Down
8 changes: 7 additions & 1 deletion database/seeders/OrderStepSeeder.php
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
7 changes: 7 additions & 0 deletions database/seeders/PerishableSeeder.php
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand All @@ -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
Expand Down
4 changes: 4 additions & 0 deletions database/seeders/PreparationThresholdSeeder.php
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down
5 changes: 4 additions & 1 deletion database/seeders/QuickAccessSeeder.php
Original file line number Diff line number Diff line change
Expand Up @@ -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.
*
Expand Down Expand Up @@ -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(
[
Expand Down
Loading