From ca98d0a6654049899a864f3901c93a69e1184e18 Mon Sep 17 00:00:00 2001 From: Lutfi Hakim Date: Fri, 1 May 2026 23:36:20 +0700 Subject: [PATCH] Fix peminjaman FK and use id_buku in views Add migration to fix peminjaman.id_buku foreign key: modify column to INT UNSIGNED and re-create FK referencing buku.id_buku with cascadeOnDelete. Update admin peminjaman blades to use $b->id_buku for option values. Remove unused imports and tidy up formatting/whitespace in Peminjaman and AdminPeminjaman controllers (including small reformat of Fonnte API payload). These changes ensure the dropdowns use the correct book identifier and the DB relation is consistent. --- .../Controllers/AdminPeminjamanController.php | 62 +++++++++---------- app/Http/Controllers/PeminjamanController.php | 10 ++- ..._000001_fix_peminjaman_buku_fk_to_buku.php | 57 +++++++++++++++++ .../views/admin/peminjaman/create.blade.php | 2 +- .../views/admin/peminjaman/index.blade.php | 5 +- 5 files changed, 95 insertions(+), 41 deletions(-) create mode 100644 database/migrations/2026_05_01_000001_fix_peminjaman_buku_fk_to_buku.php diff --git a/app/Http/Controllers/AdminPeminjamanController.php b/app/Http/Controllers/AdminPeminjamanController.php index 722d92f..12af923 100644 --- a/app/Http/Controllers/AdminPeminjamanController.php +++ b/app/Http/Controllers/AdminPeminjamanController.php @@ -6,10 +6,8 @@ use App\Models\Buku; use App\Models\Anggota; use Illuminate\Http\Request; -use Barryvdh\DomPDF\Facade\Pdf; use Illuminate\Support\Facades\Http; use Illuminate\Support\Facades\Log; -use Illuminate\Support\Facades\Storage; class AdminPeminjamanController extends Controller { @@ -197,42 +195,42 @@ private function prediksiLokasiRakUntukAdmin($nomor_panggil) return match (true) { $kode_utama >= 0 && $kode_utama <= 99 => match (true) { - $kode_utama <= 19 => ['rak' => 'Rak 01', 'area' => 'Karya Umum'], - $kode_utama <= 50 => ['rak' => 'Rak 02', 'area' => 'Karya Umum'], - default => ['rak' => 'Rak 03-05', 'area' => 'Karya Umum Lainnya'], - }, + $kode_utama <= 19 => ['rak' => 'Rak 01', 'area' => 'Karya Umum'], + $kode_utama <= 50 => ['rak' => 'Rak 02', 'area' => 'Karya Umum'], + default => ['rak' => 'Rak 03-05', 'area' => 'Karya Umum Lainnya'], + }, $kode_utama >= 100 && $kode_utama <= 199 => match (true) { - $kode_utama <= 150 => ['rak' => 'Rak 06-10', 'area' => 'Filsafat'], - default => ['rak' => 'Rak 11-14', 'area' => 'Psikologi'], - }, + $kode_utama <= 150 => ['rak' => 'Rak 06-10', 'area' => 'Filsafat'], + default => ['rak' => 'Rak 11-14', 'area' => 'Psikologi'], + }, $kode_utama >= 200 && $kode_utama <= 299 => match (true) { - $kode_utama == 297 => ['rak' => 'Rak 25-32', 'area' => 'Agama Islam'], - default => ['rak' => 'Rak 15-24', 'area' => 'Agama Umum'], - }, + $kode_utama == 297 => ['rak' => 'Rak 25-32', 'area' => 'Agama Islam'], + default => ['rak' => 'Rak 15-24', 'area' => 'Agama Umum'], + }, $kode_utama >= 300 && $kode_utama <= 399 => match (true) { - $kode_utama <= 330 => ['rak' => 'Rak 33-36', 'area' => 'Sosiologi & Politik'], - $kode_utama <= 360 => ['rak' => 'Rak 37-40', 'area' => 'Ekonomi & Hukum'], - default => ['rak' => 'Rak 41-44', 'area' => 'Pendidikan & Adat'], - }, + $kode_utama <= 330 => ['rak' => 'Rak 33-36', 'area' => 'Sosiologi & Politik'], + $kode_utama <= 360 => ['rak' => 'Rak 37-40', 'area' => 'Ekonomi & Hukum'], + default => ['rak' => 'Rak 41-44', 'area' => 'Pendidikan & Adat'], + }, $kode_utama >= 400 && $kode_utama <= 499 => ['rak' => 'Rak 45', 'area' => 'Bahasa'], $kode_utama >= 500 && $kode_utama <= 599 => ['rak' => 'Rak 46-48', 'area' => 'Ilmu Murni'], $kode_utama >= 600 && $kode_utama <= 699 => match (true) { - $kode_utama <= 610 => ['rak' => 'Rak 49-53', 'area' => 'Kedokteran'], - $kode_utama <= 630 => ['rak' => 'Rak 54-58', 'area' => 'Teknik'], - $kode_utama <= 650 => ['rak' => 'Rak 59-63', 'area' => 'Pertanian'], - default => ['rak' => 'Rak 64-68', 'area' => 'Manajemen Bisnis'], - }, + $kode_utama <= 610 => ['rak' => 'Rak 49-53', 'area' => 'Kedokteran'], + $kode_utama <= 630 => ['rak' => 'Rak 54-58', 'area' => 'Teknik'], + $kode_utama <= 650 => ['rak' => 'Rak 59-63', 'area' => 'Pertanian'], + default => ['rak' => 'Rak 64-68', 'area' => 'Manajemen Bisnis'], + }, $kode_utama >= 700 && $kode_utama <= 799 => match (true) { - $kode_utama <= 739 => ['rak' => 'Rak 71', 'area' => 'Kesenian'], - $kode_utama <= 769 => ['rak' => 'Rak 72', 'area' => 'Seni Rupa'], - $kode_utama <= 789 => ['rak' => 'Rak 73', 'area' => 'Fotografi/Musik'], - default => ['rak' => 'Rak 74', 'area' => 'Olahraga'], - }, + $kode_utama <= 739 => ['rak' => 'Rak 71', 'area' => 'Kesenian'], + $kode_utama <= 769 => ['rak' => 'Rak 72', 'area' => 'Seni Rupa'], + $kode_utama <= 789 => ['rak' => 'Rak 73', 'area' => 'Fotografi/Musik'], + default => ['rak' => 'Rak 74', 'area' => 'Olahraga'], + }, $kode_utama >= 800 && $kode_utama <= 899 => ['rak' => 'Rak 77-79', 'area' => 'Sastra'], $kode_utama >= 900 && $kode_utama <= 999 => match (true) { - $kode_utama <= 919 => ['rak' => 'Rak 69, 70', 'area' => 'Geografi'], - default => ['rak' => 'Rak 80-84', 'area' => 'Sejarah Umum'], - }, + $kode_utama <= 919 => ['rak' => 'Rak 69, 70', 'area' => 'Geografi'], + default => ['rak' => 'Rak 80-84', 'area' => 'Sejarah Umum'], + }, default => ['rak' => 'Rak 75-76', 'area' => 'Koleksi Terbaru'], }; } @@ -247,7 +245,7 @@ public function update(Request $request, $id) ]); $peminjaman = Peminjaman::findOrFail($id); - + // If the book changed, adjust stock if ($peminjaman->id_buku != $validated['id_buku']) { if ($peminjaman->status_peminjaman == 'Dipinjam') { @@ -267,7 +265,7 @@ public function update(Request $request, $id) public function destroy($id) { $peminjaman = Peminjaman::findOrFail($id); - + if ($peminjaman->status_peminjaman == 'Dipinjam' && $peminjaman->buku) { $peminjaman->buku->increment('eksemplar'); } @@ -280,7 +278,7 @@ public function destroy($id) public function kembalikan($id) { $peminjaman = Peminjaman::findOrFail($id); - + $tglTenggat = \Carbon\Carbon::parse($peminjaman->tanggal_kembali)->startOfDay(); $tglSekarang = \Carbon\Carbon::now()->startOfDay(); diff --git a/app/Http/Controllers/PeminjamanController.php b/app/Http/Controllers/PeminjamanController.php index 8eb5fa7..9a20d49 100644 --- a/app/Http/Controllers/PeminjamanController.php +++ b/app/Http/Controllers/PeminjamanController.php @@ -9,7 +9,6 @@ use Barryvdh\DomPDF\Facade\Pdf; use Illuminate\Support\Facades\Http; use Illuminate\Support\Facades\Log; -use Illuminate\Support\Facades\Storage; class PeminjamanController extends Controller { @@ -110,9 +109,9 @@ public function store(Request $request) $response = Http::withoutVerifying()->timeout(15)->withHeaders([ 'Authorization' => $fonnteToken, ])->attach('file', file_get_contents($filePath), $fileName)->post('https://api.fonnte.com/send', [ - 'target' => $targetNum, - 'message' => "Halo Kak *{$peminjaman->anggota->nama}*! šŸ“šāœØ\n\nTerima kasih telah meminjam buku di *Perpustakaan Daerah Jember*.\n\nBersama pesan ini, kami lampirkan file e-Struk (PDF) untuk peminjaman buku:\nšŸ“– Judul: _{$peminjaman->buku->judul}_\nšŸ“… Batas Kembali: *{$peminjaman->tanggal_kembali}*\n\nMohon simpan dokumen PDF ini sebagai bukti transaksi yang sah. Harap kembalikan buku tepat waktu untuk menghindari denda keterlambatan.\n\nSelamat menikmati waktu membaca Anda!\n\nSalam Literasi,\n*Sistem Sarakata Jember*" - ]); + 'target' => $targetNum, + 'message' => "Halo Kak *{$peminjaman->anggota->nama}*! šŸ“šāœØ\n\nTerima kasih telah meminjam buku di *Perpustakaan Daerah Jember*.\n\nBersama pesan ini, kami lampirkan file e-Struk (PDF) untuk peminjaman buku:\nšŸ“– Judul: _{$peminjaman->buku->judul}_\nšŸ“… Batas Kembali: *{$peminjaman->tanggal_kembali}*\n\nMohon simpan dokumen PDF ini sebagai bukti transaksi yang sah. Harap kembalikan buku tepat waktu untuk menghindari denda keterlambatan.\n\nSelamat menikmati waktu membaca Anda!\n\nSalam Literasi,\n*Sistem Sarakata Jember*" + ]); // Cek respon resmi fonnte API if ($response->successful() && ($response->json('status') == true)) { @@ -128,7 +127,6 @@ public function store(Request $request) if (file_exists($filePath)) { unlink($filePath); } - } catch (\Exception $e) { // Bila error (misal: memori PDF kurang, library dompdf crash, timeout dari Fonnte) // Error ditangkap agar sistem tidak langsung menampilkan layar error 500 ke User. @@ -184,4 +182,4 @@ public function indexPengembalian() return view('admin.peminjaman.pengembalian', compact('pengembalian')); } -} \ No newline at end of file +} diff --git a/database/migrations/2026_05_01_000001_fix_peminjaman_buku_fk_to_buku.php b/database/migrations/2026_05_01_000001_fix_peminjaman_buku_fk_to_buku.php new file mode 100644 index 0000000..4b821da --- /dev/null +++ b/database/migrations/2026_05_01_000001_fix_peminjaman_buku_fk_to_buku.php @@ -0,0 +1,57 @@ +dropForeign(['id_buku']); + }); + } catch (\Throwable $e) { + } + + DB::statement('ALTER TABLE peminjaman MODIFY id_buku INT UNSIGNED NOT NULL'); + + Schema::table('peminjaman', function (Blueprint $table) { + $table->foreign('id_buku') + ->references('id_buku') + ->on('buku') + ->cascadeOnDelete(); + }); + } + + public function down(): void + { + try { + Schema::table('peminjaman', function (Blueprint $table) { + $table->dropForeign(['id_buku']); + }); + } catch (\Throwable $e) { + } + + DB::statement('ALTER TABLE peminjaman MODIFY id_buku BIGINT UNSIGNED NOT NULL'); + + Schema::table('peminjaman', function (Blueprint $table) { + $table->foreign('id_buku') + ->references('id') + ->on('bukus') + ->cascadeOnDelete(); + }); + } +}; diff --git a/resources/views/admin/peminjaman/create.blade.php b/resources/views/admin/peminjaman/create.blade.php index 8b680c5..ffd39bc 100644 --- a/resources/views/admin/peminjaman/create.blade.php +++ b/resources/views/admin/peminjaman/create.blade.php @@ -41,7 +41,7 @@ class="w-full border-gray-300 rounded-lg shadow-sm focus:border-blue-500 focus:r class="w-full border-gray-300 rounded-lg shadow-sm focus:border-blue-500 focus:ring-blue-500"> @foreach ($buku as $b) - @endforeach diff --git a/resources/views/admin/peminjaman/index.blade.php b/resources/views/admin/peminjaman/index.blade.php index 52589f0..fcb7c7e 100644 --- a/resources/views/admin/peminjaman/index.blade.php +++ b/resources/views/admin/peminjaman/index.blade.php @@ -251,7 +251,8 @@ class="mt-1 block w-full border-gray-300 focus:border-indigo-500 focus:ring-indi required> @foreach ($buku as $b) - @endforeach @@ -440,7 +441,7 @@ class="mt-1 block w-full border-gray-300 focus:border-indigo-500 focus:ring-indi required> @foreach ($buku as $b) - @endforeach