rshabk-app/app/Filament/Widgets/StatsPendapatanTrends.php
2025-04-27 18:03:42 +07:00

63 lines
1.7 KiB
PHP

<?php
namespace App\Filament\Widgets;
use App\Models\TrRegistrasi;
use App\Models\TrTransaksi;
use Carbon\Carbon;
use Filament\Widgets\ChartWidget;
use Livewire\Attributes\On;
class StatsPendapatanTrends extends ChartWidget
{
protected static ?string $heading = 'Trends Pendapatan';
public $filtering_date;
#[On('filter')]
public function filter($data)
{
$this->filtering_date = $data;
}
protected function getData(): array
{
if ($this->filtering_date) {
$filtering_date = explode(' - ', $this->filtering_date);
$start_date = $filtering_date[0];
$end_date = $filtering_date[1];
// Format pakai Carbon
$start_date = Carbon::createFromFormat('d/m/Y', $start_date)->format('Y-m-d');
$end_date = Carbon::createFromFormat('d/m/Y', $end_date)->format('Y-m-d');
$query = TrTransaksi::whereBetween('created_at', [$start_date, $end_date]);
} else {
$query = TrTransaksi::query();
}
$data = $query->where('status', 'paid')
->selectRaw('DATE(created_at) as tanggal, SUM(total_harga) as total')
->groupBy('tanggal')
->orderBy('tanggal')
->get()
->pluck('total', 'tanggal');
return [
'datasets' => [
[
'label' => 'Pendapatan',
'data' => $data->values(),
'borderColor' => '#4f46e5',
'backgroundColor' => '#c7d2fe',
],
],
'labels' => $data->keys(),
];
}
protected function getType(): string
{
return 'line';
}
}