MIF_E31222663/app/Http/Controllers/DashboardController.php

164 lines
5.4 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class DashboardController extends Controller
{
// Fungsi default, menampilkan data untuk tahun 2023
public function index(Request $request)
{
$tahunTerpilih = 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')->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();
// Ambil tahun-tahun yang tersedia dari tabel 'kasus'
$availableYears = DB::table('kasus')
->select('tahun')
->distinct()
->orderByDesc('tahun')
->pluck('tahun');
// Ambil tahun yang dipilih dari input user (jika ada), jika tidak pakai default
$selectedYear = $request->input('year') ?? $tahunTerpilih;
// 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',
'tahunTerpilih'
));
}
// 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')->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'
));
}
}