164 lines
5.4 KiB
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'
|
|
));
|
|
}
|
|
}
|