39498-vm/app/Filament/Widgets/JourneyStoryboard.php
2026-04-06 07:35:25 +00:00

41 lines
1.2 KiB
PHP

<?php
namespace App\Filament\Widgets;
use App\Models\Booking;
use App\Models\Event;
use App\Models\Ride;
use Filament\Widgets\Widget;
class JourneyStoryboard extends Widget
{
protected static string $view = 'filament.widgets.journey-storyboard';
protected int | string | array $columnSpan = 'full';
protected static ?int $sort = 1;
protected function getViewData(): array
{
$rides = Ride::count();
$views = Event::where('event_type', 'recommendation_viewed')->count();
$clicks = Event::where('event_type', 'recommendation_clicked')->count();
$bookingsCount = Booking::count();
$commission = (float) Booking::sum('commission_amount');
$gmv = (float) Booking::sum('amount');
$rideToBooking = $rides > 0 ? round(($bookingsCount / $rides) * 100, 1) : 0;
$clickThrough = $views > 0 ? round(($clicks / $views) * 100, 1) : 0;
return [
'rides' => $rides,
'views' => $views,
'clicks' => $clicks,
'bookingsCount' => $bookingsCount,
'commission' => $commission,
'gmv' => $gmv,
'rideToBooking' => $rideToBooking,
'clickThrough' => $clickThrough,
];
}
}