@extends('layouts.app') @section('title', 'Cancellations & No-Shows') @section('nav_reports', 'bg-teal-50 text-teal-700 font-semibold') @section('page_title', 'Reports') @section('page_subtitle', 'Cancellations & No-Shows') @section('content') @include('reports._filter', [ 'active' => 'reports.cancellations', 'mode' => 'range', 'from' => $from, 'to' => $to, 'title' => 'Cancellations & No-Shows', 'subtitle' => 'Arrivals ' . \Carbon\Carbon::parse($from)->format('M j') . ' – ' . \Carbon\Carbon::parse($to)->format('M j, Y') . ' that were lost', ]) {{-- Summary tiles --}}

Lost Bookings

{{ number_format($lostCount) }}

{{ $cancelledCount }} cancelled · {{ $noShowCount }} no-show

Lost Revenue

₱{{ number_format($lostRevenue, 2) }}

{{ number_format($lostRoomNights) }} room-nights

Cancellation Rate

{{ number_format($cancellationRate, 1) }}%

of {{ number_format($totalBookings) }} arriving bookings

Deposits Forfeited

₱{{ number_format($forfeitedTotal, 2) }}

recovered from lost bookings

{{-- By source --}}

By Booking Source

Which channels leak the most

@if($bySource->isEmpty())

No lost bookings for this period.

@else
@foreach($bySource as $source => $row) @endforeach
Source Lost Nights Lost Revenue
{{ $source }} {{ $row['count'] }} {{ $row['nights'] }} ₱{{ number_format($row['revenue'], 2) }}
@endif
{{-- By room type --}}

By Room Type

Lost demand per category

@if($byRoomType->isEmpty())

No lost bookings for this period.

@else
@foreach($byRoomType as $type => $row) @endforeach
Room Type Lost Nights Lost Revenue
{{ $type }} {{ $row['count'] }} {{ $row['nights'] }} ₱{{ number_format($row['revenue'], 2) }}
@endif
{{-- Detail --}}

Lost Bookings

Highest value first

@if($rows->isEmpty())

No cancellations or no-shows in this period. 🎉

@else
@foreach($rows as $row) @endforeach
Guest / Booking Room Source Arrival Nights Status Lost Forfeited

{{ $row['guest_name'] }}

{{ $row['booking_no'] }}

{{ $row['room_no'] }}

{{ $row['room_type'] }}

{{ $row['source'] }} {{ $row['check_in']->format('M j, Y') }} {{ $row['nights'] }} {{ $row['status'] === 'no_show' ? 'No Show' : 'Cancelled' }} ₱{{ number_format($row['amount'], 2) }} {{ $row['forfeited'] > 0 ? '₱' . number_format($row['forfeited'], 2) : '—' }}
Total ₱{{ number_format($lostRevenue, 2) }} ₱{{ number_format($forfeitedTotal, 2) }}
@endif
@endsection