58 lines
2.3 KiB
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'
|
|
));
|
|
}
|
|
} |