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