@extends('templates.adminlte') @section('content-header')

Paquetes

@endsection @section('main-content') @php $formatCurrency = fn($amount) => '$' . number_format((float) $amount, 2); $packageRows = $packages->values(); $selectedPackage = $packageRows->sortByDesc('events_count')->first() ?? $packageRows->first(); $configuredPackages = $packageRows ->filter(fn($package) => $package->materials->isNotEmpty() || $package->equipments->isNotEmpty()) ->count(); $mostReservedPackage = $packageRows->sortByDesc('events_count')->first(); $highestValuePackage = $packageRows->sortByDesc(fn($package) => (float) $package->price)->first(); $statusMeta = function ($package) { $hasComposition = $package->materials->isNotEmpty() || $package->equipments->isNotEmpty(); if (!$hasComposition) { return [ 'label' => 'Incompleto', 'classes' => 'border-warning/30 bg-warning/10 text-warning', ]; } if ((int) $package->events_count > 0) { return [ 'label' => 'Reservado', 'classes' => 'border-secondary/30 bg-secondary/10 text-secondary', ]; } return [ 'label' => 'Disponible', 'classes' => 'border-accent/30 bg-accent/10 text-accent', ]; }; @endphp
Catalogo de Paquetes {{ number_format($packageRows->count()) }} registros configurados

Comercial y Operativo

Paquetes listos para venta, edición y seguimiento interno.

Administra paquetes comerciales, revisa su composición, valida nivel operativo y mantén control del catálogo desde una vista alineada al branding del panel.

inventory_2 {{ number_format($configuredPackages) }} con composición cargada
sell {{ $mostReservedPackage ? $mostReservedPackage->name : 'Sin reservas aún' }}
payments {{ $highestValuePackage ? $formatCurrency($highestValuePackage->price) : '$0.00' }} valor tope

Total de paquetes

{{ number_format($packageRows->count()) }}

Con reservas

{{ number_format($packageRows->filter(fn($package) => (int) $package->events_count > 0)->count()) }}

Mayor valor

{{ $highestValuePackage ? $formatCurrency($highestValuePackage->price) : '$0.00' }}

Total de paquetes

{{ number_format($packageRows->count()) }}

Catálogo comercial disponible en configuración.

Paquetes configurados

{{ number_format($configuredPackages) }}

Con materiales o equipos ya vinculados al paquete.

Más reservado

{{ $mostReservedPackage ? $mostReservedPackage->name : 'Sin dato' }}

{{ $mostReservedPackage ? $mostReservedPackage->events_count . ' eventos asociados' : 'Aún sin reservas registradas.' }}

Mayor valor

{{ $highestValuePackage ? $formatCurrency($highestValuePackage->price) : '$0.00' }}

{{ $highestValuePackage ? $highestValuePackage->name : 'No hay paquetes disponibles.' }}

search

Listado de paquetes

Configuraciones registradas

La tabla ahora conserva ancho útil y hace scroll horizontal controlado cuando el espacio no alcanza.

table_view {{ number_format($packageRows->count()) }} filas visibles
@if ($packageRows->isEmpty())
inventory_2

Sin paquetes registrados

Crea el primer paquete para comenzar a gestionar el catálogo comercial.

add_circle Nuevo paquete
@else
@foreach ($packageRows as $package) @php $status = $statusMeta($package); $isFeatured = $selectedPackage && $selectedPackage->id === $package->id; @endphp @endforeach
Nombre del paquete Tipo / Nivel Contenido Reservas Precio Estatus Acciones

{{ $package->name }}

COD: PKG-{{ str_pad((string) $package->id, 4, '0', STR_PAD_LEFT) }}

{{ optional($package->experienceLevel)->name ?: 'Sin nivel asignado' }} {{ filled($package->duration) ? $package->duration : 'Duración no capturada' }}

{{ $package->materials->count() }}

Materiales

{{ $package->equipments->count() }}

Equipos

{{ number_format($package->events_count) }} eventos {{ $formatCurrency($package->price) }} {{ $status['label'] }}
visibility edit

Mostrando {{ $packageRows->count() }} paquetes registrados.

@endif
@endsection @section('extra-script') @endsection