MIF_E31230333/app/Http/Controllers/Admin/DashboardController.php

58 lines
2.3 KiB
PHP

<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Models\Konsultasi;
use App\Models\Penyakit;
use App\Models\Gejala;
use App\Models\Rule;
use App\Models\HasilDiagnosa;
use Illuminate\Support\Facades\DB;
class DashboardController extends Controller
{
public function index()
{
$totalKonsultasi = Konsultasi::count();
$konsultasiHariIni = Konsultasi::whereDate('tanggal', today())->count();
$totalPenyakit = Penyakit::count();
$totalHama = Penyakit::where('jenis', 'Hama')->count();
$totalPenyakitOnly = Penyakit::where('jenis', 'Penyakit')->count();
$totalGejala = Gejala::count();
$totalRule = Rule::count();
$totalTerdeteksi = Konsultasi::where('status', 'selesai')->count();
$totalTidakTerdeteksi = Konsultasi::where('status', 'tidak_terdeteksi')->count();
// Penyakit paling sering menjadi diagnosa utama
$penyakitTerbanyak = HasilDiagnosa::select('id_penyakit', DB::raw('count(*) as total'))
->with('penyakit')
->where('ranking', 1)
->groupBy('id_penyakit')
->orderByDesc('total')
->limit(6)
->get();
// 6 konsultasi terbaru
$konsultasiTerbaru = Konsultasi::with(['hasilUtama.penyakit', 'user'])
->latest('tanggal')
->limit(6)
->get();
// Konsultasi per bulan (tahun ini) — untuk grafik
$konsultasiPerBulanRaw = Konsultasi::selectRaw('MONTH(tanggal) as bulan, COUNT(*) as total')
->whereYear('tanggal', now()->year)
->groupBy('bulan')
->orderBy('bulan')
->pluck('total', 'bulan');
// Isi array 12 bulan, bulan yang kosong = 0
$konsultasiPerBulan = collect(range(1, 12))->map(fn($b) => $konsultasiPerBulanRaw[$b] ?? 0)->values()->toArray();
return view('admin.dashboard', compact(
'totalKonsultasi', 'konsultasiHariIni',
'totalPenyakit', 'totalHama', 'totalPenyakitOnly',
'totalGejala', 'totalRule',
'totalTerdeteksi', 'totalTidakTerdeteksi',
'penyakitTerbanyak', 'konsultasiTerbaru',
'konsultasiPerBulan'
));
}
}