Files
Additional/app/Filament/Widgets/RevenueChart.php
T
twotalesanimation 6de01c13c5 New Initial Commit
2025-12-09 12:04:54 +02:00

70 lines
1.7 KiB
PHP

<?php
namespace App\Filament\Widgets;
use App\Models\Order;
use Filament\Widgets\ChartWidget;
use Illuminate\Support\Facades\DB;
class RevenueChart extends ChartWidget
{
protected ?string $heading = 'Revenue (Last 7 Days)';
protected static ?int $sort = 3;
protected function getData(): array
{
$data = Order::where('payment_status', 'paid')
->where('created_at', '>=', now()->subDays(7))
->select(
DB::raw('DATE(created_at) as date'),
DB::raw('SUM(total) as revenue')
)
->groupBy('date')
->orderBy('date')
->get();
$labels = [];
$revenues = [];
// Fill in last 7 days
for ($i = 6; $i >= 0; $i--) {
$date = now()->subDays($i)->format('Y-m-d');
$dayName = now()->subDays($i)->format('D');
$labels[] = $dayName;
$dayData = $data->firstWhere('date', $date);
$revenues[] = $dayData ? $dayData->revenue : 0;
}
return [
'datasets' => [
[
'label' => 'Revenue (R)',
'data' => $revenues,
'backgroundColor' => 'rgba(59, 130, 246, 0.1)',
'borderColor' => 'rgb(59, 130, 246)',
'fill' => true,
],
],
'labels' => $labels,
];
}
protected function getType(): string
{
return 'line';
}
protected function getOptions(): array
{
return [
'scales' => [
'y' => [
'beginAtZero' => true,
],
],
];
}
}