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 @@
-
- {{-- Form ini tidak akan berfungsi karena tidak ada backend --}} + {{-- TAMBAHKAN ID PADA FORM --}} +
- +
- +
-
+
- +
-
+
- +
-
+
- + +
+ +
+ +
- - + +
@@ -77,5 +76,29 @@
-
z - +
+ + @push('scripts') + + @endpush + \ No newline at end of file diff --git a/resources/views/admin/buku/edit.blade.php b/resources/views/admin/buku/edit.blade.php index ffaa238..52f23eb 100644 --- a/resources/views/admin/buku/edit.blade.php +++ b/resources/views/admin/buku/edit.blade.php @@ -13,60 +13,55 @@
- - {{-- Form ini tidak akan berfungsi karena tidak ada backend --}} + {{-- TAMBAHKAN ID PADA FORM --}} +
- +
- +
- +
- +
@php - $tipe_akses = is_array($buku['tipe_akses']) - ? $buku['tipe_akses'] - : [$buku['tipe_akses']]; + $tipe_akses = is_array($buku['tipe_akses']) ? $buku['tipe_akses'] : [$buku['tipe_akses']]; $isOffline = in_array('offline', $tipe_akses); @endphp - {{-- Field Kode Buku - Hanya untuk Buku Offline --}} @if($isOffline) -
- - +
+
+ + +
+
+ + +
@endif
- - + +
- +
@@ -76,8 +71,7 @@
- Cover saat ini + Cover saat ini
@@ -91,4 +85,28 @@ class="img-thumbnail mt-2" width="150">
+ + @push('scripts') + + @endpush \ No newline at end of file diff --git a/resources/views/admin/buku/index.blade.php b/resources/views/admin/buku/index.blade.php index 625544a..4bc1863 100644 --- a/resources/views/admin/buku/index.blade.php +++ b/resources/views/admin/buku/index.blade.php @@ -11,13 +11,14 @@
@@ -25,7 +26,7 @@ {{-- TAB UNTUK BUKU OFFLINE --}}
- +
@@ -33,45 +34,46 @@ + - + @forelse($bukuOffline as $buku) - - - - + + + + + @empty - - - + @endforelse
NoJudul Kode Buku PenulisStok StatusAksiAksi
{{ $loop->iteration }}{{ $buku['judul'] }}{{ $buku['judul'] }}
{{ $loop->iteration }}{{ $buku['judul'] }}{{ $buku['judul'] }} {{ $buku['kode_buku'] }} {{ $buku['penulis'] }}{{ $buku['stok'] ?? 0 }} @if ($buku['status'] == 'Tersedia') - Tersedia + Tersedia @else - Dipinjam + Dipinjam @endif - +
+ + +
Tidak ada data buku offline.
Tidak ada data buku offline.
@@ -81,7 +83,7 @@ class="badge bg-warning-subtle text-warning-emphasis">Dipinjam {{-- TAB UNTUK BUKU ONLINE --}}
- +
@@ -89,45 +91,67 @@ class="badge bg-warning-subtle text-warning-emphasis">Dipinjam - + @forelse($bukuOnline as $buku) - - - - + + + + - + @empty - - - + @endforelse
No Judul Penulis File PDFAksiAksi
{{ $loop->iteration }}{{ $buku['judul'] }}{{ $buku['judul'] }}
{{ $loop->iteration }}{{ $buku['judul'] }}{{ $buku['judul'] }} {{ $buku['penulis'] }}{{ $buku['file_pdf'] ?? 'N/A' }} - {{ $buku['file_pdf'] ?? 'N/A' }} - +
+ + +
Tidak ada data buku online.
Tidak ada data buku online.
+ + {{-- TAB UNTUK ARSIP --}} +
+
+ + + + + + + + + + + + + + +
NoCoverJudulPenulisTipeAksi
Belum ada buku yang diarsipkan.
+
+
+
+ {{-- MODAL DETAIL BUKU --}} @@ -122,53 +127,47 @@
- @push('scripts') @endpush - + \ No newline at end of file diff --git a/resources/views/admin/peminjaman/index.blade.php b/resources/views/admin/peminjaman/index.blade.php index 40be248..417cba0 100644 --- a/resources/views/admin/peminjaman/index.blade.php +++ b/resources/views/admin/peminjaman/index.blade.php @@ -1,26 +1,34 @@ @section('page-title', $pageTitle) -
+

Manajemen Peminjaman

Daftar ini hanya menampilkan buku yang masih berstatus "Dipinjam".

- - Buat Peminjaman Manual - +
+
+ + +
+ + + Peminjaman Manual + +
- +
- + @@ -41,10 +49,16 @@ $isHariIni = $now->startOfDay()->isSameDay($tenggat->startOfDay()); $selisihHari = $now->startOfDay()->diffInDays($tenggat->startOfDay(), false); + $isGuru = isset($transaksi['role']) && strtolower($transaksi['role']) == 'guru'; + if ($isTerlambat) { - $statusClass = 'badge rounded-pill bg-danger-subtle text-danger-emphasis'; - $statusText = - 'Terlambat ' . $tenggat->startOfDay()->diffInDays($now->startOfDay()) . ' hari'; + if ($isGuru) { + $statusClass = 'badge rounded-pill bg-info-subtle text-info-emphasis'; + $statusText = 'Terlambat (Bebas Denda)'; + } else { + $statusClass = 'badge rounded-pill bg-danger-subtle text-danger-emphasis'; + $statusText = 'Terlambat ' . $tenggat->startOfDay()->diffInDays($now->startOfDay()) . ' hari'; + } } elseif ($isHariIni) { $statusClass = 'badge rounded-pill bg-warning-subtle text-warning-emphasis'; $statusText = 'Jatuh Tempo Hari Ini'; @@ -57,8 +71,7 @@ {{-- MODAL PENGEMBALIAN --}} - - - + @endforelse
NO ID PEMINJAMANNAMAPEMINJAM (JABATAN/KELAS) JUDUL BUKU TGL. PINJAM TENGGAT KEMBALI
{{ $counter++ }} - {{ $transaksi['id_peminjaman'] }} + {{ $transaksi['id_peminjaman'] }}
{{ $transaksi['peminjam'] }}
@@ -85,125 +98,104 @@ class="badge bg-primary-subtle text-primary fw-bold">{{ $transaksi['id_peminjama
Tidak ada data.
Tidak ada data.
@@ -223,69 +213,49 @@ class="d-flex justify-content-between align-items-center mb-3 bg-danger bg-opaci @push('scripts') @endpush - + \ No newline at end of file diff --git a/resources/views/admin/pengguna/create.blade.php b/resources/views/admin/pengguna/create.blade.php index a8020dc..22c004f 100644 --- a/resources/views/admin/pengguna/create.blade.php +++ b/resources/views/admin/pengguna/create.blade.php @@ -11,53 +11,50 @@
-
+ @csrf
- - - - + + @error('role') -
{{ $message }}
+
{{ $message }}
@enderror
{{-- Bagian Form Dinamis --}}
- {{-- Nama Lengkap --}}
- {{-- Identitas Unik (NISN/NIP) --}}
@error('nomor_induk') -
{{ $message }}
+
{{ $message }}
@enderror
- {{-- Kontak (Email & HP) --}}
@error('email') -
{{ $message }}
+
{{ $message }}
@enderror
@@ -67,7 +64,6 @@
- {{-- Field Khusus Siswa (Kelas & Golongan) --}}