filters['startDate'] ?? null; $endDate = $this->filters['endDate'] ?? null; $data = VerificationRequest::query() ->select( DB::raw('COUNT(*) as count'), DB::raw('status'), DB::raw("DATE_FORMAT(created_at, '%Y-%m') as month") ) ->whereIn('status', [VerificationStatus::APPROVED, VerificationStatus::REJECTED]) ->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(); $approvedData = []; $rejectedData = []; foreach ($months as $month) { $approvedData[] = $data->where('month', $month)->where('status', VerificationStatus::APPROVED)->first()?->count ?? 0; $rejectedData[] = $data->where('month', $month)->where('status', VerificationStatus::REJECTED)->first()?->count ?? 0; } return [ 'datasets' => [ [ 'label' => 'Disetujui', 'data' => $approvedData, 'backgroundColor' => '#10B981', ], [ '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'; } }