Files
shopit-back/database/seeders/FiestaFutbolInfantilProductSeeder.php

96 lines
4.0 KiB
PHP

<?php
namespace Database\Seeders;
use App\Domains\Catalog\Enums\InventoryPolicy;
use App\Domains\Catalog\Models\Attribute;
use App\Domains\Catalog\Models\Category;
use App\Domains\Catalog\Models\Product;
use App\Domains\Catalog\Services\ProductService;
use App\Domains\Tenant\Models\Tenant;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use RuntimeException;
class FiestaFutbolInfantilProductSeeder extends Seeder
{
public function __construct(private readonly ProductService $productService) {}
public function run(): void
{
$tenant = Tenant::query()->where('codigo', 'fiesta_futbol_infantil')->first();
if (! $tenant) {
throw new RuntimeException("Tenant 'fiesta_futbol_infantil' no encontrado.");
}
// Delete existing products for this tenant
$existingProducts = Product::query()
->where('tenant_codigo', $tenant->codigo)
->get();
foreach ($existingProducts as $product) {
$this->productService->delete($product);
}
// We need a category, let's just use 'Accesorios' or create an 'Entradas' category
$category = Category::firstOrCreate(['nombre' => 'Entradas', 'tenant_code' => null]);
$dates = ['2026-10-09', '2026-10-10', '2026-10-11', '2026-10-12'];
// 1. Entrada General
$entrada = $this->productService->create($tenant, [
'categoria_id' => $category->id,
'slug' => 'entrada-general',
'nombre' => 'Entrada General',
'descripcion' => 'Acceso total al predio. No incluye acceso a estacionamiento. Niños menores de 5 años ingresan gratis.',
'precio' => 10000,
'stock' => 0,
'inventory_policy' => InventoryPolicy::Unlimited->value,
'attribute_ids' => [Attribute::where('codigo', 'fecha')->where('tenant_codigo', $tenant->codigo)->first()?->id],
]);
foreach ($dates as $date) {
$this->productService->createVariant($entrada, [
'stock' => 0,
'inventory_policy' => InventoryPolicy::Unlimited->value,
'has_tickets' => true,
'minimum_use_date' => $date.' 00:00:00',
'maximum_use_date' => $date.' 23:59:59',
'definitions' => [
[
'products_attribute_id' => DB::table('products_attributes')
->where('product_id', $entrada->id)
->first()?->id,
'value' => $date,
],
],
]);
}
// Other products without variants
$gastronomiaCategory = Category::firstOrCreate(['nombre' => 'Gastronomía', 'tenant_code' => null]);
$simpleProducts = [
['slug' => 'hamburguesa-papa-frita', 'nombre' => 'Hamburguesa con papa frita', 'precio' => 8000, 'cat' => $gastronomiaCategory->id],
['slug' => 'pancho', 'nombre' => 'Pancho', 'precio' => 4000, 'cat' => $gastronomiaCategory->id],
['slug' => 'coca-cola-500ml', 'nombre' => 'Coca Cola 500ml', 'precio' => 3000, 'cat' => $gastronomiaCategory->id],
['slug' => 'agua-mineral-1l', 'nombre' => 'Agua Mineral 1L', 'precio' => 2500, 'cat' => $gastronomiaCategory->id],
['slug' => 'estacionamiento-auto', 'nombre' => 'Estacionamiento Auto', 'precio' => 5000, 'cat' => $category->id],
['slug' => 'estacionamiento-moto', 'nombre' => 'Estacionamiento Moto', 'precio' => 2000, 'cat' => $category->id],
];
foreach ($simpleProducts as $p) {
$this->productService->create($tenant, [
'categoria_id' => $p['cat'],
'slug' => $p['slug'],
'nombre' => $p['nombre'],
'descripcion' => $p['nombre'],
'precio' => $p['precio'],
'stock' => 0,
'inventory_policy' => InventoryPolicy::Unlimited->value,
]);
}
}
}