diff --git a/app/Http/Controllers/Admin/AdminPeminjamanController.php b/app/Http/Controllers/Admin/AdminPeminjamanController.php index c56109e..ac8c240 100644 --- a/app/Http/Controllers/Admin/AdminPeminjamanController.php +++ b/app/Http/Controllers/Admin/AdminPeminjamanController.php @@ -12,29 +12,47 @@ class AdminPeminjamanController extends Controller public function index(Request $request) { $peminjamanAktif = DummyDataService::getAdminPeminjamanAktif(); + $allUsers = collect(DummyDataService::getAllSiswa()); // LOGIC DENDA & WA LINK (Update Request Client) - $peminjamanAktif = $peminjamanAktif->map(function ($item) { + $peminjamanAktif = $peminjamanAktif->map(function ($item) use ($allUsers) { + $userData = $allUsers->firstWhere('id', $item['user_id']); + $role = $userData ? strtolower($userData['role']) : 'siswa'; + $item['role'] = $role; + // Hitung Denda Flat 1000/hari $tenggat = Carbon::parse($item['tenggat_kembali']); $now = Carbon::now(); $item['hari_terlambat'] = 0; $item['total_denda'] = 0; + $item['denda_per_hari'] = 1000; if ($now->greaterThan($tenggat)) { $hariTelat = $tenggat->diffInDays($now); $item['hari_terlambat'] = $hariTelat; - $item['total_denda'] = $hariTelat * 1000; - $item['denda_per_hari'] = 1000; + + if ($role === 'guru') { + $item['total_denda'] = 0; + $item['denda_per_hari'] = 0; + } else { + $item['total_denda'] = $hariTelat * 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."; + // Pesan WA dibedakan antara Guru dan Siswa + if ($role === 'guru') { + $pesan = "Halo Bapak/Ibu {$item['peminjam']}, buku yang dipinjam sudah melewati tenggat waktu {$item['hari_terlambat']} hari. Mohon berkenan untuk segera dikembalikan ke perpustakaan ya."; + } else { + $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; @@ -43,7 +61,7 @@ public function index(Request $request) $daftarPeminjam = $peminjamanAktif->pluck('peminjam')->unique(); return view('admin.peminjaman.index', [ - 'pageTitle' => 'Manajemen Peminjaman & Denda', + 'pageTitle' => 'Manajemen Peminjaman', 'peminjamanAktif' => $peminjamanAktif, 'daftarPeminjam' => $daftarPeminjam, ]); @@ -61,9 +79,12 @@ public function create() // 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; + if (strtolower($user['role']) === 'siswa') { + $user['kena_limit'] = $jumlahPinjam >= 2; + } else { + $user['kena_limit'] = false; + } // Cek apakah user di-banned (Nonaktif Manual) $user['is_banned'] = $user['is_banned'] ?? false; @@ -77,6 +98,8 @@ public function create() $user['status_text'] = ""; } + $user['jabatan'] = $user['jabatan'] ?? 'Guru Mata Pelajaran'; + return $user; }) ->groupBy('role'); @@ -108,17 +131,13 @@ public function dendaIndex() // 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; } @@ -129,8 +148,7 @@ public function dendaIndex() $siswaTelat = $allData->filter(function ($item) use ($now, $allSiswa) { $userData = $allSiswa->firstWhere('id', $item['user_id']); - if (!$userData) - return false; + if (!$userData) return false; $isTelat = $item['tenggat_kembali']->startOfDay()->lt($now->startOfDay()); $isBanned = $userData['is_banned']; @@ -139,34 +157,35 @@ public function dendaIndex() return ($isTelat || $isBanned) && $isTargetRole; })->map(function ($item) use ($now, $allSiswa) { - // Hitungan Denda $tenggat = $item['tenggat_kembali']->startOfDay(); + $hariTelat = ($tenggat->lt($now->startOfDay())) ? $tenggat->diffInDays($now->startOfDay()) : 0; - // Jika belum telat (tapi banned/manual), hari telat 0 - $hariTelat = ($tenggat->lt($now->startOfDay())) - ? $tenggat->diffInDays($now->startOfDay()) - : 0; + $dataSiswa = $allSiswa->firstWhere('id', $item['user_id']); + $role = $dataSiswa ? strtolower($dataSiswa['role']) : 'siswa'; + $item['role'] = $role; - $totalDenda = $hariTelat * $item['denda_per_hari']; + if ($role === 'guru') { + $item['total_denda'] = 0; + } else { + $item['total_denda'] = $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 (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, ',', '.'); + if ($hariTelat > 0 && $role !== 'guru') { + $pesan = "Halo {$item['peminjam']}, anda terlambat pengembalian buku. Total Denda: Rp " . number_format($item['total_denda'], 0, ',', '.'); + } elseif ($hariTelat > 0 && $role === 'guru') { + $pesan = "Halo Bapak/Ibu {$item['peminjam']}, mohon berkenan untuk mengembalikan buku yang telah melewati tenggat waktu."; } 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; diff --git a/app/Http/Controllers/Admin/UserController.php b/app/Http/Controllers/Admin/UserController.php index eb556a1..8b9e6d0 100644 --- a/app/Http/Controllers/Admin/UserController.php +++ b/app/Http/Controllers/Admin/UserController.php @@ -12,7 +12,14 @@ class UserController extends Controller { public function index() { - $users = User::orderBy('created_at', 'desc')->paginate(10); + $query = User::orderBy('created_at', 'desc'); + + if (request()->has('role') && request('role') != '') { + $query->where('role', request('role')); + } + + $users = $query->paginate(10)->appends(request()->query()); + $whitelists = MasterInduk::orderBy('created_at', 'desc')->get(); return view('admin.pengguna.index', [ diff --git a/app/Http/Controllers/RiwayatController.php b/app/Http/Controllers/RiwayatController.php index 9180c87..92fc019 100644 --- a/app/Http/Controllers/RiwayatController.php +++ b/app/Http/Controllers/RiwayatController.php @@ -4,16 +4,24 @@ use App\Services\DummyDataService; use Illuminate\Http\Request; -use Illuminate\Support\Facades\Auth; // Tambahkan ini +use Illuminate\Support\Facades\Auth; class RiwayatController extends Controller { public function offlineIndex() { - $user = \Illuminate\Support\Facades\Auth::user(); + $user = Auth::user(); if (!$user) $user = (object) ['id' => 1]; - $riwayatOffline = DummyDataService::getRiwayatOffline($user); + $dataOffline = DummyDataService::getRiwayatOffline($user); + + $riwayatOffline = collect($dataOffline) + ->sortBy([ + ['status', 'asc'], + ['tanggal_pinjam', 'desc'] + ]) + ->values() + ->all(); return view('riwayat.offline', [ 'pageTitle' => 'Riwayat Peminjaman Offline', @@ -23,7 +31,15 @@ public function offlineIndex() public function onlineIndex() { - $riwayatOnline = DummyDataService::getRiwayatOnline(); + $dataOnline = DummyDataService::getRiwayatOnline(); + + $riwayatOnline = collect($dataOnline) + ->sortBy([ + ['status', 'asc'], + ['tanggal_baca', 'desc'] + ]) + ->values() + ->all(); return view('riwayat.online', [ 'pageTitle' => 'Riwayat Baca Online', diff --git a/resources/views/admin/buku/create.blade.php b/resources/views/admin/buku/create.blade.php index 24c5b13..bcfa8f8 100644 --- a/resources/views/admin/buku/create.blade.php +++ b/resources/views/admin/buku/create.blade.php @@ -13,43 +13,42 @@