filters['startDate'] ?? null; $endDate = $this->filters['endDate'] ?? null; $data = Report::query() ->select( DB::raw('COUNT(*) as count'), DB::raw('status'), DB::raw("DATE_FORMAT(created_at, '%Y-%m') as month") ) ->when($startDate, fn ($q) => $q->whereDate('created_at', '>=', $startDate)) ->when(! $startDate, fn ($q) => $q->where('created_at', '>=', now()->subMonths(6))) ->when($endDate, fn ($q) => $q->whereDate('created_at', '<=', $endDate)) ->groupBy('month', 'status') ->orderBy('month') ->get(); $months = $data->pluck('month')->unique()->sort()->values(); $acceptedData = []; $pendingData = []; $rejectedData = []; foreach ($months as $month) { $acceptedData[] = $data->where('month', $month)->accepted()->first()?->count ?? 0; $pendingData[] = $data->where('month', $month)->pending()->first()?->count ?? 0; $rejectedData[] = $data->where('month', $month)->rejected()->first()?->count ?? 0; } return [ 'datasets' => [ [ 'label' => 'Disetujui', 'data' => $acceptedData, 'backgroundColor' => '#10B981', ], [ 'label' => 'Menunggu', 'data' => $pendingData, 'backgroundColor' => '#F59E0B', ], [ 'label' => 'Ditolak', 'data' => $rejectedData, 'backgroundColor' => '#EF4444', ], ], 'labels' => $months->map(fn ($m) => Carbon::createFromFormat('Y-m', $m)->translatedFormat('M Y'))->toArray(), ]; } protected function getType(): string { return 'bar'; } }