kolat_id) { $query->where('kolat_id', $request->kolat_id); } if ($request->status) { $query->where('status', $request->status); } $anggota = $query->get(); // 3. Transformasi data untuk Rekap $dataRekap = $anggota->map(function ($item) { // Logika Presensi $totalPertemuan = $item->presensi->count(); $hadir = $item->presensi->where('status', 'hadir')->count(); $persentasePresensi = $totalPertemuan > 0 ? ($hadir / $totalPertemuan) * 100 : 0; // Logika SPP $punyaTunggakan = $item->spp->where('status', 'belum_lunas')->count() > 0; // Logika Keaktifan $statusAktif = ($totalPertemuan > 0 && $persentasePresensi > 0) ? 'Aktif' : 'Non-Aktif'; // Syarat Ujian (Presensi >= 75% dan SPP Lunas) $layakUjian = ($persentasePresensi >= 75 && !$punyaTunggakan); return [ 'nama' => $item->nama_lengkap, // Sesuaikan dengan kolom tabel Anda 'no_induk' => $item->no_induk, 'tingkatan' => $item->tingkatan, 'nama_kolat' => $item->kolat->nama_kolat ?? '-', 'status_aktif' => $statusAktif, 'persentase_presensi' => round($persentasePresensi, 1), 'status_spp' => $punyaTunggakan ? 'Ada Tunggakan' : 'Lunas', 'layak' => $layakUjian ]; }); // 4. Kirim variabel yang dibutuhkan view return view('rekap.index', compact('dataRekap', 'data_kolat')); } }