getDashboardData($request)); } public function verifikatorDashboard(Request $request) { return view('verifikator.dashboard', $this->getDashboardData($request)); } private function getDashboardData(Request $request) { // 1. Ambil SEMUA periode untuk pilihan di dropdown $semuaPeriode = Periode::orderBy('id', 'desc')->get(); // 2. Tentukan periode mana yang sedang ingin dilihat $periodeId = $request->query('periode_id'); if ($periodeId) { $periodeDitampilkan = Periode::find($periodeId); } else { // Default: Cari yang aktif, jika tidak ada, ambil yang paling baru $periodeDitampilkan = Periode::where('is_aktif', true)->first() ?? Periode::latest()->first(); } // Default value untuk statistik periode terpilih $utama = 0; $cadangan = 0; $tidakLayak = 0; $dialihkan = 0; $kuota = 0; $topWarga = collect(); if ($periodeDitampilkan) { $kuota = $periodeDitampilkan->kuota; // Hitung status keputusan untuk grafik batang/pie periode terpilih $hasilStats = HasilSeleksi::where('periode_id', $periodeDitampilkan->id) ->selectRaw('status_keputusan, count(*) as total') ->groupBy('status_keputusan') ->pluck('total', 'status_keputusan'); $utama = $hasilStats['Layak Prioritas Utama'] ?? 0; $cadangan = $hasilStats['Layak Cadangan'] ?? 0; $tidakLayak = $hasilStats['Tidak Layak'] ?? 0; $dialihkan = $hasilStats['Dialihkan (Pemerataan)'] ?? 0; // Ambil 5 peringkat teratas untuk tabel ranking $topWarga = HasilSeleksi::with('warga') ->where('periode_id', $periodeDitampilkan->id) ->orderBy('ranking', 'asc') ->take(5) ->get(); } // 3. Rekap semua status verifikasi warga (Global - Seluruh Warga di Sistem) $wargaStats = Warga::selectRaw('status_verifikasi, count(*) as total') ->groupBy('status_verifikasi') ->pluck('total', 'status_verifikasi'); $totalWarga = array_sum($wargaStats->toArray()); $wargaPendingList = Warga::where('status_verifikasi', 'pending') ->orderBy('created_at', 'asc') ->take(5) ->get(); // 4. LOGIKA TAMBAHAN: Data Tren Histori (Line Chart) // Mengambil 6 periode terakhir secara urutan ID (kronologis) $periodeTren = Periode::orderBy('id', 'asc')->take(6)->get(); $labelTren = []; $dataUtamaTren = []; foreach ($periodeTren as $pt) { $labelTren[] = $pt->nama_periode; // Contoh: "April 2026" // Hitung jumlah warga yang masuk Prioritas Utama di periode ini $jumlahUtama = HasilSeleksi::where('periode_id', $pt->id) ->where('status_keputusan', 'Layak Prioritas Utama') ->count(); $dataUtamaTren[] = $jumlahUtama; } // demografi $semuaKriteria = Kriteria::all(); // Tangkap ID kriteria dari request dropdown (misal: ?kriteria_chart=2) $selectedKriteriaId = $request->query('kriteria_chart'); // Jika tidak ada yang dipilih (pertama kali load), otomatis pilih kriteria urutan pertama if (!$selectedKriteriaId && $semuaKriteria->count() > 0) { $selectedKriteriaId = $semuaKriteria->first()->id; } $kriteriaDitampilkan = null; $statistikKriteria = collect(); // Set nilai default kosong agar tidak error // Jika ada kriteria yang aktif/terpilih, baru jalankan query ke database if ($selectedKriteriaId) { $kriteriaDitampilkan = \App\Models\Kriteria::find($selectedKriteriaId); // PERUBAHAN DI SINI: Tambahkan "warga_details." di dalam where() $statistikKriteria = \App\Models\WargaDetail::where('warga_details.kriteria_id', $selectedKriteriaId) ->join('sub_kriterias', 'warga_details.sub_kriteria_id', '=', 'sub_kriterias.id') ->selectRaw('sub_kriterias.nama_sub as label, count(*) as total') ->groupBy('sub_kriterias.nama_sub') ->pluck('total', 'label'); } return [ 'user' => Auth::user(), 'countUser' => User::count(), 'countWarga' => $totalWarga, 'countVerif' => $wargaStats['setuju'] ?? 0, 'countPending' => $wargaStats['pending'] ?? 0, 'countTolak' => $wargaStats['tolak'] ?? 0, 'countKriteria' => Kriteria::count(), // Variabel Chart Batang & Ranking Periode Terpilih 'chartUtama' => $utama, 'chartCadangan' => $cadangan, 'chartTidakLayak' => $tidakLayak, 'chartDialihkan' => $dialihkan, 'countRanking' => $utama + $cadangan + $tidakLayak + $dialihkan, // Variabel Kuota & Tabel Top 5 'kuota' => $kuota, 'persentaseKuota' => $kuota > 0 ? round(($utama / $kuota) * 100) : 0, 'topWarga' => $topWarga, // Variabel Untuk Grafik Tren Histori (Line Chart) 'labelTren' => $labelTren, 'dataUtamaTren' => $dataUtamaTren, 'wargaPendingList' => $wargaPendingList, // Variabel Untuk Filter Dropdown 'semuaPeriode' => $semuaPeriode, 'periodeDitampilkan' => $periodeDitampilkan, 'namaPeriode' => $periodeDitampilkan ? $periodeDitampilkan->nama_periode : 'Belum Ada Periode', // demografi 'semuaKriteria' => $semuaKriteria, 'kriteriaDitampilkan' => $kriteriaDitampilkan, 'statistikKriteria' => $statistikKriteria, ]; } }