From 5df740fcf8f4cec4e0f91feef16c981c9d932158 Mon Sep 17 00:00:00 2001 From: Bro Date: Fri, 24 Jul 2026 18:12:39 +0700 Subject: [PATCH] feat: status presensi per kelas di dropdown input MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Dropdown kelas sekarang menampilkan: - ⬜ Nama Kelas → belum ada data presensi - ✅ Nama Kelas (5/36) → sudah terisi (X siswa terdata dari total) - Legend kecil di bawah dropdown sebagai panduan --- app/Http/Controllers/AttendanceController.php | 21 ++++++++++++++++++- resources/views/attendances/create.blade.php | 12 ++++++++++- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/AttendanceController.php b/app/Http/Controllers/AttendanceController.php index f738d7c..9c26d0e 100644 --- a/app/Http/Controllers/AttendanceController.php +++ b/app/Http/Controllers/AttendanceController.php @@ -105,11 +105,30 @@ class AttendanceController extends Controller ->orderBy('class_name') ->pluck('class_name'); + // Cek status presensi per kelas untuk tanggal ini + $classAttendanceStatus = []; + foreach ($classNames as $cn) { + $studentIdsInClass = Student::where('is_active', true) + ->where('class_name', $cn) + ->pluck('id'); + $count = Attendance::where('date', $date) + ->whereIn('student_id', $studentIdsInClass) + ->distinct('student_id') + ->count('student_id'); + $totalStudents = $studentIdsInClass->count(); + $classAttendanceStatus[$cn] = [ + 'has_data' => $count > 0, + 'recorded' => $count, + 'total' => $totalStudents, + ]; + } + $lessonHours = range(1, 10); return view('attendances.create', compact( 'students', 'date', 'className', - 'classNames', 'lessonHours', 'existing' + 'classNames', 'lessonHours', 'existing', + 'classAttendanceStatus' )); } diff --git a/resources/views/attendances/create.blade.php b/resources/views/attendances/create.blade.php index 1d34422..ed7be48 100644 --- a/resources/views/attendances/create.blade.php +++ b/resources/views/attendances/create.blade.php @@ -27,9 +27,19 @@ class="w-full px-4 py-2.5 border border-gray-200 rounded-xl text-sm bg-gray-50/50 focus:bg-white focus:outline-none focus:ring-2 focus:ring-blue-500/20 focus:border-blue-500 transition"> @foreach($classNames as $cn) - + @php + $stat = $classAttendanceStatus[$cn] ?? ['has_data' => false, 'recorded' => 0, 'total' => 0]; + $label = $stat['has_data'] + ? '✅ ' . $cn . ' (' . $stat['recorded'] . '/' . $stat['total'] . ')' + : '⬜ ' . $cn; + @endphp + @endforeach +
+ ⬜ Belum diisi + ✅ Sudah diisi (siswa terdata/total) +