select('data_tahun') ->distinct() ->orderByDesc('data_tahun') ->pluck('data_tahun'); // Ambil tahun dari request (GET), kalau tidak ada pakai yang paling atas (terbaru) $selectedYear = $request->input('tahun', $tahunTersedia->first()); // Hitung total kasus berdasarkan tahun yang dipilih $jumlahKasusDataLatih = DB::table('data_latih') ->where('data_tahun', $selectedYear) ->sum('kasus_2023'); $data_latih = DB::table('data_latih')->get(); $stats = DB::table('data_latih') ->selectRaw(' ROUND(AVG(phbs), 2) AS persen_phbs_baik, ROUND(100 - AVG(phbs), 2) AS persen_phbs_tidak_baik, ROUND(AVG(imunisasi), 2) AS persen_imunisasi, ROUND(100 - AVG(imunisasi), 2) AS persen_tidak_imunisasi, ROUND(AVG(merokok), 2) AS persen_merokok, ROUND(100 - AVG(merokok), 2) AS persen_tidak_merokok ') ->first(); // Ambil semua kolom dari tabel data_latih $columns = DB::getSchemaBuilder()->getColumnListing('data_latih'); $selectedYear = $request->input('tahun') ?? $tahunTersedia->first(); $kabupatens = DB::table('kabupatens') ->join('data_latih', 'kabupatens.nama', '=', 'data_latih.kecamatan') ->select('kabupatens.nama', 'kabupatens.latitude', 'kabupatens.longitude', 'data_latih.hipotesis') ->get(); $topKasus = DB::table('data_latih') ->join('kabupatens', 'data_latih.kecamatan', '=', 'kabupatens.nama') ->select('kabupatens.nama', 'data_latih.kasus_2023') ->orderByDesc('data_latih.kasus_2023') ->take(5) ->get(); // Ambil tahun-tahun yang tersedia dari tabel 'kasus' $availableYears = DB::table('kasus') ->select('tahun') ->distinct() ->orderByDesc('tahun') ->pluck('tahun'); if (!$selectedYear) { $selectedYear = DB::table('data_latih') ->orderByDesc('data_tahun') ->value('data_tahun'); // Ambil 1 nilai tahun terbaru } // Data kasus per bulan untuk tahun yang dipilih $kasusPerBulan = DB::table('kasus') ->select('bulan', DB::raw('SUM(jumlah_kasus) as total')) ->where('tahun', $selectedYear) ->groupBy('bulan') ->orderByRaw("FIELD(bulan, 'Januari','Februari','Maret','April','Mei','Juni','Juli','Agustus','September','Oktober','November','Desember')") ->get(); $bulanLabels = []; $totalKasus = []; foreach ($kasusPerBulan as $item) { $bulanLabels[] = $item->bulan; $totalKasus[] = $item->total; } // Data kasus per bulan untuk semua tahun (opsional, untuk perbandingan multiyear) $kasusPerBulanByYear = []; foreach ($availableYears as $year) { $kasusPerBulanByYear[$year] = DB::table('kasus') ->where('tahun', $year) ->orderByRaw("FIELD(bulan, 'Januari','Februari','Maret','April','Mei','Juni','Juli','Agustus','September','Oktober','November','Desember')") ->get(['bulan', 'jumlah_kasus']); } return view('admin.dashboard', compact( 'stats', 'kabupatens', 'jumlahKasusDataLatih', 'topKasus', 'bulanLabels', 'totalKasus', 'data_latih', 'kasusPerBulanByYear', 'availableYears', 'selectedYear', 'tahunTersedia', 'selectedYear' )); } // Fungsi dashboard dengan filter tahun dinamis public function dashboard(Request $request) { $tahunTerpilih = $request->input('tahun', 2023); $data_latih = DB::table('data_latih')->get(); $stats = DB::table('data_latih') ->selectRaw(' ROUND(AVG(phbs), 2) AS persen_phbs_baik, ROUND(100 - AVG(phbs), 2) AS persen_phbs_tidak_baik, ROUND(AVG(imunisasi), 2) AS persen_imunisasi, ROUND(100 - AVG(imunisasi), 2) AS persen_tidak_imunisasi, ROUND(AVG(merokok), 2) AS persen_merokok, ROUND(100 - AVG(merokok), 2) AS persen_tidak_merokok ') ->first(); $jumlahKasusDataLatih = DB::table('data_latih') ->where('data_tahun', $tahunTerpilih) ->sum('kasus_2023'); $kabupatens = DB::table('kabupatens') ->join('data_latih', 'kabupatens.nama', '=', 'data_latih.kecamatan') ->select('kabupatens.nama', 'kabupatens.latitude', 'kabupatens.longitude', 'data_latih.hipotesis') ->get(); $topKasus = DB::table('data_latih') ->join('kabupatens', 'data_latih.kecamatan', '=', 'kabupatens.nama') ->select('kabupatens.nama', 'data_latih.kasus_2023') ->orderByDesc('data_latih.kasus_2023') ->take(5) ->get(); $kasusPerBulan = DB::table('kasus') ->select('bulan', DB::raw('SUM(jumlah_kasus) as total')) ->where('tahun', $tahunTerpilih) ->groupBy('bulan') ->orderByRaw("FIELD(bulan, 'Januari','Februari','Maret','April','Mei','Juni','Juli','Agustus','September','Oktober','November','Desember')") ->get(); $bulanLabels = []; $totalKasus = []; foreach ($kasusPerBulan as $item) { $bulanLabels[] = $item->bulan; $totalKasus[] = $item->total; } $availableYears = DB::table('kasus') ->selectRaw('YEAR(tanggal) as year') ->distinct() ->orderBy('year', 'desc') ->pluck('year'); $selectedYear = 2023; // Sesuaikan defaultnya // Lalu tambahkan ke compact return view('admin.dashboard', compact( 'stats', 'kabupatens', 'jumlahKasusDataLatih', 'topKasus', 'bulanLabels', 'totalKasus', 'data_latih', 'tahunTersedia', 'tahunTerpilih', 'availableYears', 'selectedYear' )); } }