Cancellation Metrics & Analytics

Back to List
Total Cancellations
{{ $totalCancellations }}
in the last {{ $period }} days
Pending Review
{{ $pendingCancellations }}
require action
Approved
{{ $approvedCancellations }}
{{ $totalCancellations > 0 ? round(($approvedCancellations / $totalCancellations) * 100, 1) : 0 }}% approval rate
Rejected
{{ $rejectedCancellations }}
{{ $totalCancellations > 0 ? round(($rejectedCancellations / $totalCancellations) * 100, 1) : 0 }}% rejection rate
Total Refunded to Clients
${{ number_format($totalRefundedToClients, 2) }}
via Stripe refunds
Total Paid to Golfers
${{ number_format($totalPaidToGolfers, 2) }}
as cancellation compensation
Platform Revenue Lost
${{ number_format($totalPlatformRevenueLost, 2) }}
in platform fees

Refund Policy Distribution

@if($policyDistribution->isEmpty())

No data available

@else
@foreach($policyDistribution as $policy)
@if($policy->refund_policy === 'full_refund') Full Refund (>72h) @elseif($policy->refund_policy === 'partial_refund') Partial Refund (24-72h) @else No Refund (<24h) @endif {{ $policy->count }} cancellations
${{ number_format($policy->total_refunded, 2) }} refunded to clients
@endforeach
@endif

Top Cancellation Reasons

@if($reasonsBreakdown->isEmpty())

No data available

@else
@foreach($reasonsBreakdown->take(5) as $reason)
@php $labels = [ 'schedule_conflict' => 'Schedule Conflict', 'personal_emergency' => 'Personal Emergency', 'weather_conditions' => 'Weather Conditions', 'health_reasons' => 'Health Reasons', 'travel_issues' => 'Travel Issues', 'found_alternative' => 'Found Alternative', 'financial_reasons' => 'Financial Reasons', 'dissatisfaction' => 'Dissatisfaction', 'other' => 'Other', ]; @endphp {{ $labels[$reason->cancellation_type] ?? 'Unknown' }}
{{ $reason->count }} ({{ $totalCancellations > 0 ? round(($reason->count / $totalCancellations) * 100, 1) : 0 }}%)
@endforeach
@endif

Cancellations by Role

@if($cancellationsByRole->isEmpty())

No data available

@else
@foreach($cancellationsByRole as $role => $count)
{{ ucfirst($role) }}s {{ $count }} cancellations
{{ $totalCancellations > 0 ? round(($count / $totalCancellations) * 100, 1) : 0 }}% of all cancellations
@endforeach
@endif

Average Notice Period

{{ round($avgHoursUntilBooking, 1) }}
hours before booking
This indicates how much advance notice is typically given when cancelling bookings

Recent Cancellations

@if($recentCancellations->isEmpty())
No recent cancellations
@else @foreach($recentCancellations as $cancellation) @endforeach
ID Booking Cancelled By Policy Status Date Actions
#{{ $cancellation->id }} Booking #{{ $cancellation->booking_id }}
{{ $cancellation->cancelledBy->name }}
{{ ucfirst($cancellation->cancelledBy->role) }}
{{ $cancellation->refund_policy === 'full_refund' ? '100%' : ($cancellation->refund_policy === 'partial_refund' ? '50/50' : '0%') }} {{ $cancellation->getStatusLabel() }} {{ $cancellation->created_at->format('M d, Y') }} View
@endif