map(function ($item) { // Hitung Denda Flat 1000/hari $tenggat = Carbon::parse($item['tenggat_kembali']); $now = Carbon::now(); $item['hari_terlambat'] = 0; $item['total_denda'] = 0; if ($now->greaterThan($tenggat)) { $hariTelat = $tenggat->diffInDays($now); $item['hari_terlambat'] = $hariTelat; $item['total_denda'] = $hariTelat * 1000; $item['denda_per_hari'] = 1000; } // Generate WA Link $hp = $item['nomor_hp']; if (substr($hp, 0, 1) == '0') { $hp = '62' . substr($hp, 1); } $pesan = "Halo kak {$item['peminjam']}, buku anda sudah terlambat {$item['hari_terlambat']} hari dengan denda Rp " . number_format($item['total_denda'], 0, ',', '.') . ". Mohon segera dikembalikan ya."; $item['wa_link'] = "https://wa.me/{$hp}?text=" . urlencode($pesan); return $item; }); $daftarPeminjam = $peminjamanAktif->pluck('peminjam')->unique(); return view('admin.peminjaman.index', [ 'pageTitle' => 'Manajemen Peminjaman & Denda', 'peminjamanAktif' => $peminjamanAktif, 'daftarPeminjam' => $daftarPeminjam, ]); } public function create() { $allUsers = collect(DummyDataService::getAllSiswa()); $peminjamanAktif = DummyDataService::getAdminPeminjamanAktif(); $groupedUsers = $allUsers ->whereIn('role', ['siswa', 'guru']) ->map(function ($user) use ($peminjamanAktif) { // Hitung berapa buku yang sedang dipinjam $jumlahPinjam = $peminjamanAktif->where('peminjam', $user['nama_lengkap'])->count(); // Cek Status $user['jumlah_pinjam'] = $jumlahPinjam; $user['kena_limit'] = $jumlahPinjam >= 2; // Cek apakah user di-banned (Nonaktif Manual) $user['is_banned'] = $user['is_banned'] ?? false; $user['disabled'] = $user['kena_limit'] || $user['is_banned']; if ($user['is_banned']) { $user['status_text'] = "(Akun Dibekukan)"; } elseif ($user['kena_limit']) { $user['status_text'] = "(Limit Penuh: 2/2)"; } else { $user['status_text'] = ""; } return $user; }) ->groupBy('role'); $daftarBuku = DummyDataService::getAllBooks() ->where('status', 'Tersedia') ->filter(function ($buku) { if (is_array($buku['tipe_akses'])) { return in_array('offline', $buku['tipe_akses']); } return $buku['tipe_akses'] === 'offline'; }); return view('admin.peminjaman.create', [ 'pageTitle' => 'Buat Peminjaman Manual', 'groupedUsers' => $groupedUsers, 'daftarBuku' => $daftarBuku, ]); } /** * Menampilkan halaman KHUSUS Manajemen Denda (Siswa & Guru Telat). */ public function dendaIndex() { $allData = DummyDataService::getAdminPeminjamanAktif(); $allSiswaRaw = collect(DummyDataService::getAllSiswa()); $now = \Carbon\Carbon::now(); // LOGIC AUTO-BAN $allSiswa = $allSiswaRaw->map(function ($siswa) use ($allData, $now) { // Cek siswa punya pinjaman yang telat $pinjamanUser = $allData->firstWhere('user_id', $siswa['id']); $isTelat = false; if ($pinjamanUser) { $isTelat = $pinjamanUser['tenggat_kembali']->startOfDay()->lt($now->startOfDay()); } // Jika Role SISWA dan TELAT -> Wajib AUTO BAN (Override true) // ika Role GURU -> Ikut status asli database (Manual Ban) if ($siswa['role'] === 'siswa' && $isTelat) { $siswa['is_banned'] = true; } return $siswa; }); $siswaTelat = $allData->filter(function ($item) use ($now, $allSiswa) { $userData = $allSiswa->firstWhere('id', $item['user_id']); if (!$userData) return false; $isTelat = $item['tenggat_kembali']->startOfDay()->lt($now->startOfDay()); $isBanned = $userData['is_banned']; $isTargetRole = in_array($userData['role'], ['siswa', 'guru']); return ($isTelat || $isBanned) && $isTargetRole; })->map(function ($item) use ($now, $allSiswa) { // Hitungan Denda $tenggat = $item['tenggat_kembali']->startOfDay(); // Jika belum telat (tapi banned/manual), hari telat 0 $hariTelat = ($tenggat->lt($now->startOfDay())) ? $tenggat->diffInDays($now->startOfDay()) : 0; $totalDenda = $hariTelat * $item['denda_per_hari']; $item['hari_terlambat'] = $hariTelat; $item['total_denda'] = $totalDenda; // Ambil status is_banned TERBARU dari $allSiswa $dataSiswa = $allSiswa->firstWhere('id', $item['user_id']); $item['is_banned'] = $dataSiswa['is_banned'] ?? false; $item['kelas'] = $dataSiswa['kelas'] ?? 'Guru'; // Link WA $hp = $item['nomor_hp']; if (substr($hp, 0, 1) == '0') $hp = '62' . substr($hp, 1); if ($hariTelat > 0) { $pesan = "Halo {$item['peminjam']}, anda terlambat pengembalian buku. Total Denda: Rp " . number_format($totalDenda, 0, ',', '.'); } else { $pesan = "Halo {$item['peminjam']}, akun anda sedang dinonaktifkan sementara. Mohon hubungi petugas."; } $item['wa_link'] = "https://wa.me/{$hp}?text=" . urlencode($pesan); return $item; }); $listKelas = $siswaTelat->pluck('kelas')->unique()->values(); return view('admin.denda.index', [ 'pageTitle' => 'Manajemen Denda & Sanksi', 'siswaTelat' => $siswaTelat, 'listKelas' => $listKelas ]); } /** * Dummy function untuk tombol Sanksi */ public function berikanSanksi(Request $request) { return response()->json(['status' => 'success']); } }