where('codigo', 'fiesta_futbol_infantil')->first(); if (! $tenant) { throw new RuntimeException("Tenant 'fiesta_futbol_infantil' no encontrado."); } $this->deleteExistingCatalog($tenant); $ticketCategory = Category::query()->firstOrCreate([ 'nombre' => 'Entradas', 'tenant_code' => null, ]); $foodCategory = Category::query()->firstOrCreate([ 'nombre' => 'Gastronomía', 'tenant_code' => null, ]); $dates = ['2026-10-09', '2026-10-10', '2026-10-11', '2026-10-12']; $generalAdmission = $this->catalogService->create([ 'tenant_code' => $tenant->codigo, 'category_id' => $ticketCategory->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, 'inventory_policy' => InventoryPolicy::Unlimited->value, 'has_tickets' => true, 'minimum_use_date' => $dates[0].' 00:00:00', 'maximum_use_date' => $dates[array_key_last($dates)].' 23:59:59', 'attribute_codes' => ['fecha'], 'variants' => array_map( fn (string $date): array => [ 'real_stock' => 0, 'values' => ['fecha' => $date], ], $dates, ), ]); $items = [ ['slug' => 'hamburguesa-papa-frita', 'nombre' => 'Hamburguesa con papa frita', 'precio' => 8000, 'category_id' => $foodCategory->id], ['slug' => 'pancho', 'nombre' => 'Pancho', 'precio' => 4000, 'category_id' => $foodCategory->id], ['slug' => 'coca-cola-500ml', 'nombre' => 'Coca Cola 500ml', 'precio' => 3000, 'category_id' => $foodCategory->id], ['slug' => 'agua-mineral-1l', 'nombre' => 'Agua Mineral 1L', 'precio' => 2500, 'category_id' => $foodCategory->id], ['slug' => 'estacionamiento-auto', 'nombre' => 'Estacionamiento Auto', 'precio' => 5000, 'category_id' => $ticketCategory->id], ['slug' => 'estacionamiento-moto', 'nombre' => 'Estacionamiento Moto', 'precio' => 2000, 'category_id' => $ticketCategory->id], ]; $createdItems = []; foreach ($items as $item) { $createdItems[$item['slug']] = $this->catalogService->create([ 'tenant_code' => $tenant->codigo, 'descripcion' => $item['descripcion'] ?? $item['nombre'], 'inventory_policy' => InventoryPolicy::Unlimited->value, 'real_stock' => 0, ...$item, ]); } $this->catalogService->create([ 'tenant_code' => $tenant->codigo, 'type' => CatalogItemType::Bundle->value, 'slug' => 'entrada-general-todos-los-dias', '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, 'category_id' => $ticketCategory->id, 'components' => $generalAdmission->variants ->map(fn ($variant): array => [ 'catalog_item_id' => $generalAdmission->id, 'variant_id' => $variant->id, 'quantity' => 1, ]) ->all(), ]); $this->catalogService->create([ 'tenant_code' => $tenant->codigo, 'type' => CatalogItemType::Bundle->value, 'slug' => 'combo-2-panchos-2-hamburguesas', 'nombre' => 'Combo 2 Panchos + 2 Hamburguesas', 'descripcion' => 'Incluye 2 panchos y 2 hamburguesas con papa frita.', 'precio' => 24000, 'category_id' => $foodCategory->id, 'components' => [ [ 'catalog_item_id' => $createdItems['pancho']->id, 'quantity' => 2, ], [ 'catalog_item_id' => $createdItems['hamburguesa-papa-frita']->id, 'quantity' => 2, ], ], ]); $this->seedFeaturedGroups($tenant); } private function deleteExistingCatalog(Tenant $tenant): void { CatalogItem::query() ->where('tenant_code', $tenant->codigo) ->where('type', CatalogItemType::Bundle->value) ->each(fn (CatalogItem $item) => $this->catalogService->delete($item)); CatalogItem::query() ->where('tenant_code', $tenant->codigo) ->where('type', CatalogItemType::Standard->value) ->each(fn (CatalogItem $item) => $this->catalogService->delete($item)); } private function seedFeaturedGroups(Tenant $tenant): void { FeaturedGroup::query()->where('tenant_code', $tenant->codigo)->delete(); $groups = [ 'Entradas' => [ 'entrada-general', 'entrada-general-todos-los-dias', ], 'Estacionamiento' => [ 'estacionamiento-auto', 'estacionamiento-moto', ], 'Comidas' => [ 'hamburguesa-papa-frita', 'pancho', 'combo-2-panchos-2-hamburguesas', ], 'Bebidas' => [ 'coca-cola-500ml', 'agua-mineral-1l', ], ]; $catalogItems = CatalogItem::query() ->where('tenant_code', $tenant->codigo) ->whereIn('slug', collect($groups)->flatten()->all()) ->get() ->keyBy('slug'); $groupOrder = 0; foreach ($groups as $groupName => $slugs) { $featuredGroup = FeaturedGroup::query()->create([ 'tenant_code' => $tenant->codigo, 'product_layout' => ProductLayout::Row, 'group_layout' => GroupLayout::Paginated, 'group_name' => $groupName, 'group_order' => $groupOrder++, ]); $featuredGroup->featuredItems()->createMany( collect($slugs)->values()->map( fn (string $slug, int $order): array => [ 'catalog_item_id' => $catalogItems->get($slug)->id, 'order' => $order, ] )->all() ); } } }