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.
This commit is contained in:
parent
c2a61ea5a0
commit
ca98d0a665
|
|
@ -6,10 +6,8 @@
|
||||||
use App\Models\Buku;
|
use App\Models\Buku;
|
||||||
use App\Models\Anggota;
|
use App\Models\Anggota;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Barryvdh\DomPDF\Facade\Pdf;
|
|
||||||
use Illuminate\Support\Facades\Http;
|
use Illuminate\Support\Facades\Http;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
use Illuminate\Support\Facades\Storage;
|
|
||||||
|
|
||||||
class AdminPeminjamanController extends Controller
|
class AdminPeminjamanController extends Controller
|
||||||
{
|
{
|
||||||
|
|
@ -197,42 +195,42 @@ private function prediksiLokasiRakUntukAdmin($nomor_panggil)
|
||||||
|
|
||||||
return match (true) {
|
return match (true) {
|
||||||
$kode_utama >= 0 && $kode_utama <= 99 => match (true) {
|
$kode_utama >= 0 && $kode_utama <= 99 => match (true) {
|
||||||
$kode_utama <= 19 => ['rak' => 'Rak 01', 'area' => 'Karya Umum'],
|
$kode_utama <= 19 => ['rak' => 'Rak 01', 'area' => 'Karya Umum'],
|
||||||
$kode_utama <= 50 => ['rak' => 'Rak 02', 'area' => 'Karya Umum'],
|
$kode_utama <= 50 => ['rak' => 'Rak 02', 'area' => 'Karya Umum'],
|
||||||
default => ['rak' => 'Rak 03-05', 'area' => 'Karya Umum Lainnya'],
|
default => ['rak' => 'Rak 03-05', 'area' => 'Karya Umum Lainnya'],
|
||||||
},
|
},
|
||||||
$kode_utama >= 100 && $kode_utama <= 199 => match (true) {
|
$kode_utama >= 100 && $kode_utama <= 199 => match (true) {
|
||||||
$kode_utama <= 150 => ['rak' => 'Rak 06-10', 'area' => 'Filsafat'],
|
$kode_utama <= 150 => ['rak' => 'Rak 06-10', 'area' => 'Filsafat'],
|
||||||
default => ['rak' => 'Rak 11-14', 'area' => 'Psikologi'],
|
default => ['rak' => 'Rak 11-14', 'area' => 'Psikologi'],
|
||||||
},
|
},
|
||||||
$kode_utama >= 200 && $kode_utama <= 299 => match (true) {
|
$kode_utama >= 200 && $kode_utama <= 299 => match (true) {
|
||||||
$kode_utama == 297 => ['rak' => 'Rak 25-32', 'area' => 'Agama Islam'],
|
$kode_utama == 297 => ['rak' => 'Rak 25-32', 'area' => 'Agama Islam'],
|
||||||
default => ['rak' => 'Rak 15-24', 'area' => 'Agama Umum'],
|
default => ['rak' => 'Rak 15-24', 'area' => 'Agama Umum'],
|
||||||
},
|
},
|
||||||
$kode_utama >= 300 && $kode_utama <= 399 => match (true) {
|
$kode_utama >= 300 && $kode_utama <= 399 => match (true) {
|
||||||
$kode_utama <= 330 => ['rak' => 'Rak 33-36', 'area' => 'Sosiologi & Politik'],
|
$kode_utama <= 330 => ['rak' => 'Rak 33-36', 'area' => 'Sosiologi & Politik'],
|
||||||
$kode_utama <= 360 => ['rak' => 'Rak 37-40', 'area' => 'Ekonomi & Hukum'],
|
$kode_utama <= 360 => ['rak' => 'Rak 37-40', 'area' => 'Ekonomi & Hukum'],
|
||||||
default => ['rak' => 'Rak 41-44', 'area' => 'Pendidikan & Adat'],
|
default => ['rak' => 'Rak 41-44', 'area' => 'Pendidikan & Adat'],
|
||||||
},
|
},
|
||||||
$kode_utama >= 400 && $kode_utama <= 499 => ['rak' => 'Rak 45', 'area' => 'Bahasa'],
|
$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 >= 500 && $kode_utama <= 599 => ['rak' => 'Rak 46-48', 'area' => 'Ilmu Murni'],
|
||||||
$kode_utama >= 600 && $kode_utama <= 699 => match (true) {
|
$kode_utama >= 600 && $kode_utama <= 699 => match (true) {
|
||||||
$kode_utama <= 610 => ['rak' => 'Rak 49-53', 'area' => 'Kedokteran'],
|
$kode_utama <= 610 => ['rak' => 'Rak 49-53', 'area' => 'Kedokteran'],
|
||||||
$kode_utama <= 630 => ['rak' => 'Rak 54-58', 'area' => 'Teknik'],
|
$kode_utama <= 630 => ['rak' => 'Rak 54-58', 'area' => 'Teknik'],
|
||||||
$kode_utama <= 650 => ['rak' => 'Rak 59-63', 'area' => 'Pertanian'],
|
$kode_utama <= 650 => ['rak' => 'Rak 59-63', 'area' => 'Pertanian'],
|
||||||
default => ['rak' => 'Rak 64-68', 'area' => 'Manajemen Bisnis'],
|
default => ['rak' => 'Rak 64-68', 'area' => 'Manajemen Bisnis'],
|
||||||
},
|
},
|
||||||
$kode_utama >= 700 && $kode_utama <= 799 => match (true) {
|
$kode_utama >= 700 && $kode_utama <= 799 => match (true) {
|
||||||
$kode_utama <= 739 => ['rak' => 'Rak 71', 'area' => 'Kesenian'],
|
$kode_utama <= 739 => ['rak' => 'Rak 71', 'area' => 'Kesenian'],
|
||||||
$kode_utama <= 769 => ['rak' => 'Rak 72', 'area' => 'Seni Rupa'],
|
$kode_utama <= 769 => ['rak' => 'Rak 72', 'area' => 'Seni Rupa'],
|
||||||
$kode_utama <= 789 => ['rak' => 'Rak 73', 'area' => 'Fotografi/Musik'],
|
$kode_utama <= 789 => ['rak' => 'Rak 73', 'area' => 'Fotografi/Musik'],
|
||||||
default => ['rak' => 'Rak 74', 'area' => 'Olahraga'],
|
default => ['rak' => 'Rak 74', 'area' => 'Olahraga'],
|
||||||
},
|
},
|
||||||
$kode_utama >= 800 && $kode_utama <= 899 => ['rak' => 'Rak 77-79', 'area' => 'Sastra'],
|
$kode_utama >= 800 && $kode_utama <= 899 => ['rak' => 'Rak 77-79', 'area' => 'Sastra'],
|
||||||
$kode_utama >= 900 && $kode_utama <= 999 => match (true) {
|
$kode_utama >= 900 && $kode_utama <= 999 => match (true) {
|
||||||
$kode_utama <= 919 => ['rak' => 'Rak 69, 70', 'area' => 'Geografi'],
|
$kode_utama <= 919 => ['rak' => 'Rak 69, 70', 'area' => 'Geografi'],
|
||||||
default => ['rak' => 'Rak 80-84', 'area' => 'Sejarah Umum'],
|
default => ['rak' => 'Rak 80-84', 'area' => 'Sejarah Umum'],
|
||||||
},
|
},
|
||||||
default => ['rak' => 'Rak 75-76', 'area' => 'Koleksi Terbaru'],
|
default => ['rak' => 'Rak 75-76', 'area' => 'Koleksi Terbaru'],
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,6 @@
|
||||||
use Barryvdh\DomPDF\Facade\Pdf;
|
use Barryvdh\DomPDF\Facade\Pdf;
|
||||||
use Illuminate\Support\Facades\Http;
|
use Illuminate\Support\Facades\Http;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
use Illuminate\Support\Facades\Storage;
|
|
||||||
|
|
||||||
class PeminjamanController extends Controller
|
class PeminjamanController extends Controller
|
||||||
{
|
{
|
||||||
|
|
@ -110,9 +109,9 @@ public function store(Request $request)
|
||||||
$response = Http::withoutVerifying()->timeout(15)->withHeaders([
|
$response = Http::withoutVerifying()->timeout(15)->withHeaders([
|
||||||
'Authorization' => $fonnteToken,
|
'Authorization' => $fonnteToken,
|
||||||
])->attach('file', file_get_contents($filePath), $fileName)->post('https://api.fonnte.com/send', [
|
])->attach('file', file_get_contents($filePath), $fileName)->post('https://api.fonnte.com/send', [
|
||||||
'target' => $targetNum,
|
'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*"
|
'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
|
// Cek respon resmi fonnte API
|
||||||
if ($response->successful() && ($response->json('status') == true)) {
|
if ($response->successful() && ($response->json('status') == true)) {
|
||||||
|
|
@ -128,7 +127,6 @@ public function store(Request $request)
|
||||||
if (file_exists($filePath)) {
|
if (file_exists($filePath)) {
|
||||||
unlink($filePath);
|
unlink($filePath);
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
// Bila error (misal: memori PDF kurang, library dompdf crash, timeout dari Fonnte)
|
// Bila error (misal: memori PDF kurang, library dompdf crash, timeout dari Fonnte)
|
||||||
// Error ditangkap agar sistem tidak langsung menampilkan layar error 500 ke User.
|
// Error ditangkap agar sistem tidak langsung menampilkan layar error 500 ke User.
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,57 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
return new class extends Migration
|
||||||
|
{
|
||||||
|
public function up(): void
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
DB::statement('ALTER TABLE peminjaman DROP FOREIGN KEY peminjaman_ibfk_2');
|
||||||
|
} catch (\Throwable $e) {
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
DB::statement('ALTER TABLE peminjaman DROP FOREIGN KEY fk_peminjaman_buku');
|
||||||
|
} catch (\Throwable $e) {
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
Schema::table('peminjaman', function (Blueprint $table) {
|
||||||
|
$table->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();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
@ -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">
|
class="w-full border-gray-300 rounded-lg shadow-sm focus:border-blue-500 focus:ring-blue-500">
|
||||||
<option value="">-- Pilih Buku --</option>
|
<option value="">-- Pilih Buku --</option>
|
||||||
@foreach ($buku as $b)
|
@foreach ($buku as $b)
|
||||||
<option value="{{ $b->id }}" {{ old('id_buku') == $b->id ? 'selected' : '' }}>
|
<option value="{{ $b->id_buku }}" {{ old('id_buku') == $b->id_buku ? 'selected' : '' }}>
|
||||||
{{ $b->bibid }} - {{ $b->judul }} (Stok: {{ $b->eksemplar }})
|
{{ $b->bibid }} - {{ $b->judul }} (Stok: {{ $b->eksemplar }})
|
||||||
</option>
|
</option>
|
||||||
@endforeach
|
@endforeach
|
||||||
|
|
|
||||||
|
|
@ -251,7 +251,8 @@ class="mt-1 block w-full border-gray-300 focus:border-indigo-500 focus:ring-indi
|
||||||
required>
|
required>
|
||||||
<option value="">-- Pilih Buku --</option>
|
<option value="">-- Pilih Buku --</option>
|
||||||
@foreach ($buku as $b)
|
@foreach ($buku as $b)
|
||||||
<option value="{{ $b->id }}" {{ old('id_buku') == $b->id ? 'selected' : '' }}>
|
<option value="{{ $b->id_buku }}"
|
||||||
|
{{ old('id_buku') == $b->id_buku ? 'selected' : '' }}>
|
||||||
{{ $b->bibid }} - {{ $b->judul }} (Stok: {{ $b->eksemplar }})
|
{{ $b->bibid }} - {{ $b->judul }} (Stok: {{ $b->eksemplar }})
|
||||||
</option>
|
</option>
|
||||||
@endforeach
|
@endforeach
|
||||||
|
|
@ -440,7 +441,7 @@ class="mt-1 block w-full border-gray-300 focus:border-indigo-500 focus:ring-indi
|
||||||
required>
|
required>
|
||||||
<option value="">-- Pilih Buku --</option>
|
<option value="">-- Pilih Buku --</option>
|
||||||
@foreach ($buku as $b)
|
@foreach ($buku as $b)
|
||||||
<option value="{{ $b->id }}">{{ $b->bibid }} - {{ $b->judul }}
|
<option value="{{ $b->id_buku }}">{{ $b->bibid }} - {{ $b->judul }}
|
||||||
</option>
|
</option>
|
||||||
@endforeach
|
@endforeach
|
||||||
</select>
|
</select>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue