user_id; $selectedJurusan = $request->jurusan_id; $selectedKecerdasan = $request->kecerdasan_id; // Data filter dropdown $users = User::orderBy('name')->get(); $jurusanList = Jurusan::orderBy('nama')->get(); $kecerdasanList = Kecerdasan::orderBy('nama')->get(); // Labels untuk 7 hari terakhir $labels = collect(range(0, 6))->map(fn($i) => now()->subDays(6 - $i)->format('d-m')); // Diagnosa per hari (filter: user + kecerdasan) $diagPerDay = Diagnosa::select( DB::raw('DATE(created_at) AS date'), DB::raw('count(*) AS total') ) ->when($selectedUser, fn($q) => $q->where('user_id', $selectedUser)) ->when($selectedKecerdasan, fn($q) => $q->where('kecerdasan_id', $selectedKecerdasan)) ->where('created_at', '>=', now()->subDays(6)->startOfDay()) ->groupBy('date') ->orderBy('date') ->get(); // AHP per hari (filter: user + jurusan) $ahpPerDay = HasilAhp::select( DB::raw('DATE(created_at) AS date'), DB::raw('count(*) AS total') ) ->when($selectedUser, fn($q) => $q->where('user_id', $selectedUser)) ->when($selectedJurusan, fn($q) => $q->where('jurusan_id', $selectedJurusan)) ->where('created_at', '>=', now()->subDays(6)->startOfDay()) ->groupBy('date') ->orderBy('date') ->get(); // Map data per tanggal (format d-m) $diagMap = $diagPerDay->keyBy(fn($item) => Carbon::parse($item->date)->format('d-m')); $ahpMap = $ahpPerDay->keyBy(fn($item) => Carbon::parse($item->date)->format('d-m')); // Hitung counts per hari sesuai label $diagCounts = $labels->map(fn($d) => (int) ($diagMap[$d]->total ?? 0)); $ahpCounts = $labels->map(fn($d) => (int) ($ahpMap[$d]->total ?? 0)); // Rata-rata $avgDiag = $diagCounts->avg(); $avgAhp = $ahpCounts->avg(); // Top 3 Jurusan (berdasarkan AHP) $topJurusan = HasilAhp::select('jurusan_id', DB::raw('count(*) as total')) ->when($selectedJurusan, fn($q) => $q->where('jurusan_id', $selectedJurusan)) ->where('created_at', '>=', now()->subDays(7)) ->groupBy('jurusan_id') ->orderByDesc('total') ->limit(3) ->get() ->map(fn($r) => [ 'nama' => optional($jurusanList->firstWhere('id', $r->jurusan_id))->nama ?? '-', 'total' => $r->total, ]); // Top 3 Kecerdasan (berdasarkan Diagnosa) $topKecerdasan = Diagnosa::select('kecerdasan_id', DB::raw('count(*) as total')) ->when($selectedKecerdasan, fn($q) => $q->where('kecerdasan_id', $selectedKecerdasan)) ->where('created_at', '>=', now()->subDays(7)) ->groupBy('kecerdasan_id') ->orderByDesc('total') ->limit(3) ->get() ->map(fn($r) => [ 'nama' => optional($kecerdasanList->firstWhere('id', $r->kecerdasan_id))->nama ?? '-', 'total' => $r->total, ]); return view('admin.dashboard', compact( 'users','jurusanList','kecerdasanList', 'selectedUser','selectedJurusan','selectedKecerdasan', 'labels','diagCounts','ahpCounts', 'avgDiag','avgAhp', 'topJurusan','topKecerdasan' )); } }