where('codigo', 'fiesta_futbol_infantil')->first(); if (! $tenant) { throw new RuntimeException("Tenant 'fiesta_futbol_infantil' no encontrado."); } // Bundles reference product variants, so remove them before reseeding products. Bundle::query()->where('tenant_codigo', $tenant->codigo)->delete(); // 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']; $entradaVariants = []; // 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) { $entradaVariants[] = $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], ]; $createdProducts = []; foreach ($simpleProducts as $p) { $createdProducts[$p['slug']] = $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, ]); } $allDaysBundle = Bundle::query()->create([ 'tenant_codigo' => $tenant->codigo, 'nombre' => 'Entrada General - Todos los días', 'descripcion' => 'Incluye una entrada para cada día de la Fiesta Nacional del Fútbol Infantil.', 'precio' => 40000, ]); foreach ($entradaVariants as $variant) { $allDaysBundle->items()->create([ 'producto_variante_id' => $variant->id, 'cantidad' => 1, ]); } $foodBundle = Bundle::query()->create([ 'tenant_codigo' => $tenant->codigo, 'nombre' => 'Combo 2 Panchos + 2 Hamburguesas', 'descripcion' => 'Incluye 2 panchos y 2 hamburguesas con papa frita.', 'precio' => 24000, ]); $foodBundle->items()->createMany([ [ 'producto_variante_id' => $createdProducts['pancho']->variants()->sole()->id, 'cantidad' => 2, ], [ 'producto_variante_id' => $createdProducts['hamburguesa-papa-frita']->variants()->sole()->id, 'cantidad' => 2, ], ]); } }