@extends('layouts.admin') @section('title', 'Reservas') @section('breadcrumb') Operacional / Reservas @endsection @push('styles') @endpush @section('content') @php $statusColors = \App\Models\Reservation::$statusColors; $statusLabels = \App\Models\Reservation::$statusLabels; function sortLink(string $col, string $currentSort, string $currentDir, array $filters): string { $dir = ($currentSort === $col && $currentDir === 'asc') ? 'desc' : 'asc'; $icon = $currentSort === $col ? ($currentDir === 'asc' ? '↑' : '↓') : '↕'; $url = request()->fullUrlWithQuery(array_merge($filters, ['sort' => $col, 'direction' => $dir])); return "{$icon}"; } @endphp {{-- ─── PAGE HEADER ─── --}} {{-- FLASH --}} @if(session('success'))
{{ session('success') }}
@endif @if(session('error'))
{{ session('error') }}
@endif {{-- ─── TOOLBAR / BUSCA + FILTROS ─── --}}
{{-- Manter sort/direction --}} {{-- Busca rápida --}}
{{-- Status (multi-select implícito via chips visíveis) --}} {{-- Toggle filtros avançados --}} @if(collect($filters)->filter()->isNotEmpty()) Limpar @endif
{{-- ─── Painel de filtros avançados ─── --}}
{{-- UH --}}
{{-- Categoria --}}
{{-- Canal --}}
{{-- Check-in de --}}
{{-- Check-in até --}}
{{-- Check-out de --}}
{{-- Check-out até --}}
Limpar
{{-- ─── TABELA PRINCIPAL ─── --}}
@forelse($reservations as $res) @php $sc = $statusColors[$res->status] ?? ['bg'=>'#e2e8f0','text'=>'#475569','border'=>'#cbd5e1']; $nights = $res->nights; @endphp {{-- Locator --}} {{-- Hóspede --}} {{-- UH --}} {{-- Categoria --}} {{-- Check-in --}} {{-- Check-out --}} {{-- Pax --}} {{-- Canal --}} {{-- Status --}} {{-- Total --}} {{-- Ações --}} @empty @endforelse
Reserva {!! sortLink('locator', $sort, $direction, $filters) !!} Hóspede UH Categoria Check-in {!! sortLink('check_in_expected', $sort, $direction, $filters) !!} Check-out {!! sortLink('check_out_expected', $sort, $direction, $filters) !!} Pax Canal Status {!! sortLink('status', $sort, $direction, $filters) !!} Total {!! sortLink('total_expected', $sort, $direction, $filters) !!} Ações
{{ $res->locator }}
{{ $nights }} diária{{ $nights !== 1 ? 's' : '' }}
{{ $res->guest?->full_name ?? '—' }} @if($res->guest?->document_number)
{{ strtoupper($res->guest->document_type ?? '') }}: {{ $res->guest->document_number }} @endif
{{ $res->room?->name ?? '—' }}{{ $res->category?->name ?? '—' }} {{ $res->check_in_expected->format('d/m/Y') }} @if($res->check_in_realized)
✓ {{ $res->check_in_realized->format('H:i') }} @endif
{{ $res->check_out_expected->format('d/m/Y') }} @if($res->check_out_realized)
✓ {{ $res->check_out_realized->format('H:i') }} @endif
👤 {{ $res->adults }} @if($res->children) +{{ $res->children }}🧒 @endif @if($res->salesChannel)
@if($res->salesChannel->icon_svg) {!! $res->salesChannel->icon_svg !!} @endif {{ $res->salesChannel->short_name ?? $res->salesChannel->name }}
@else Direto @endif
{{ $res->status_label }} R$ {{ number_format($res->total_expected, 2, ',', '.') }} @if($res->balance > 0)
Saldo: R$ {{ number_format($res->balance, 2, ',', '.') }} @elseif($res->total_paid > 0)
Pago @endif
{{-- Ver --}} {{-- Editar --}} @if($res->canEdit()) @endif {{-- Check-in --}} @if($res->canCheckIn()) @endif {{-- Check-out --}} @if($res->canCheckOut()) @endif {{-- Histórico --}} {{-- Cancelar --}} @if($res->canCancel()) @endif

Nenhuma reserva encontrada

@if(collect($filters)->filter()->isNotEmpty()) Tente ajustar os filtros aplicados ou limpe a busca. @else Nenhuma reserva registrada ainda. Crie uma nova pelo mapa ou pelo botão acima. @endif

Ir para o Mapa
{{-- Paginação --}} @if($reservations->hasPages()) @endif
{{-- ─── MODAL DE CANCELAMENTO ─── --}} @endsection @push('scripts') @endpush