61 lines
2.0 KiB
PHP
61 lines
2.0 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\Anggota;
|
|
use App\Models\Kolat;
|
|
use Illuminate\Http\Request;
|
|
|
|
class RekapController extends Controller
|
|
{
|
|
public function index(Request $request) // Tambahkan Request untuk filter
|
|
{
|
|
// 1. Ambil data Kolat untuk dropdown filter
|
|
$data_kolat = Kolat::all();
|
|
|
|
// 2. Query data anggota dengan filter
|
|
$query = Anggota::with(['presensi', 'spp', 'kolat']);
|
|
|
|
if ($request->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'));
|
|
}
|
|
}
|