@extends('layouts.admin')
@section('title', 'Indicadores & Analytics')
@section('breadcrumb')
Indicadores
@endsection
@push('styles')
@endpush
@section('content')
@php
$periodLabel = match($period) {
'quarter' => 'Trimestre Atual',
'semester' => 'Últimos 6 Meses',
'year' => 'Ano Atual',
default => 'Mês Atual',
};
function pctDiff($current, $prev): array {
if ($prev == 0) return ['pct' => null, 'dir' => 'flat'];
$pct = round(($current - $prev) / $prev * 100, 1);
return ['pct' => $pct, 'dir' => $pct > 0 ? 'up' : ($pct < 0 ? 'down' : 'flat')];
}
@endphp
{{-- ═══ HEADER ════════════════════════════════════════════════════════════ --}}
{{-- ═══ KPIs COMPARATIVOS ═════════════════════════════════════════════════ --}}
{{-- Receita --}}
Receita do Período
R$ {{ number_format($revenue,2,',','.') }}
@if($revenueChg['pct'] !== null)
{{ $revenueChg['dir'] === 'up' ? '▲' : '▼' }} {{ abs($revenueChg['pct']) }}%
@endif
anterior: R$ {{ number_format($revenuePrev,2,',','.') }}
{{-- Reservas --}}
Reservas
{{ $reservations }}
@if($reservChg['pct'] !== null)
{{ $reservChg['dir'] === 'up' ? '▲' : '▼' }} {{ abs($reservChg['pct']) }}%
@endif
anterior: {{ $reservationsPrev }}
{{-- ADR --}}
ADR (Diária Média)
R$ {{ number_format($adr,2,',','.') }}
@if($adrChg['pct'] !== null)
{{ $adrChg['dir'] === 'up' ? '▲' : '▼' }} {{ abs($adrChg['pct']) }}%
@endif
anterior: R$ {{ number_format($adrPrev,2,',','.') }}
{{-- Ocupação --}}
Ocupação Média
{{ $avgOcc }}%
@if($occChg['pct'] !== null)
{{ $occChg['dir'] === 'up' ? '▲' : '▼' }} {{ abs($occChg['pct']) }}%
@endif
anterior: {{ $avgOccPrev }}%
{{-- Ticket Médio --}}
Ticket Médio
R$ {{ number_format($ticketMedio,2,',','.') }}
@if($ticketChg['pct'] !== null)
{{ $ticketChg['dir'] === 'up' ? '▲' : '▼' }} {{ abs($ticketChg['pct']) }}%
@endif
anterior: R$ {{ number_format($ticketMedioPrev,2,',','.') }}
{{-- Noites Vendidas --}}
Noites Vendidas
{{ $nightsSold }}
@if($nightsChg['pct'] !== null)
{{ $nightsChg['dir'] === 'up' ? '▲' : '▼' }} {{ abs($nightsChg['pct']) }}%
@endif
anterior: {{ $nightsSoldPrev }}
{{-- Taxa de Cancelamento --}}
Taxa de Cancelamento
{{ $cancellationRate }}%
das reservas criadas no período
{{-- RevPAR --}}
RevPAR
R$ {{ number_format($revpar,2,',','.') }}
receita/UH disponível/dia
{{-- ═══ GRÁFICO PRINCIPAL: Receita 12 meses + ADR ══════════════════════════ --}}
{{-- Ranking de Quartos --}}
@php $maxRoom = $topRooms->max('total') ?: 1; @endphp
@forelse($topRooms as $i => $room)
{{ $i+1 }}
{{ $room->room ?? '—' }}
R$ {{ number_format((float)$room->total,2,',','.') }}
{{ $room->stays }} reserva{{ $room->stays != 1 ? 's' : '' }}
@empty
Nenhum dado no período.
@endforelse
{{-- Ranking de Hóspedes --}}
@forelse($topGuests as $i => $guest)
{{ $i+1 }}
{{ trim($guest->guest_name) ?: 'Hóspede #'.$guest->guest_id }}
@if($guest->vip_level && $guest->vip_level !== 'none')
{{ strtoupper($guest->vip_level) }}
@endif
R$ {{ number_format((float)$guest->total,2,',','.') }}
{{ $guest->stays }}x
@empty
Nenhum dado no período.
@endforelse
@endsection
@push('scripts')
@endpush