From 077e2746f612648603e86f33f45150e4723e508e Mon Sep 17 00:00:00 2001 From: wardhatul1765 Date: Tue, 5 May 2026 02:42:52 +0700 Subject: [PATCH] Memperbarui fitur Buku Tamu dan form Tambah Buku --- app/Http/Controllers/AdminBukuController.php | 20 ++-- .../Controllers/AdminPeminjamanController.php | 8 +- app/Http/Controllers/AnggotaController.php | 16 +-- app/Http/Controllers/BukuTamuController.php | 10 +- app/Models/BukuTamu.php | 1 + ...u_to_auto_increment_in_buku_tamu_table.php | 24 +++++ resources/views/admin/buku/create.blade.php | 12 +-- resources/views/admin/buku/edit.blade.php | 14 +-- resources/views/admin/buku/index.blade.php | 12 +-- .../views/admin/peminjaman/create.blade.php | 2 + .../views/admin/peminjaman/index.blade.php | 12 ++- resources/views/anggota/edit.blade.php | 6 +- resources/views/anggota/index.blade.php | 10 +- resources/views/buku_tamu/index.blade.php | 100 +++++++++++++----- resources/views/layouts/admin.blade.php | 64 +++++++++++ resources/views/layouts/guest.blade.php | 64 ++++++++++- resources/views/welcome.blade.php | 59 +---------- 17 files changed, 286 insertions(+), 148 deletions(-) create mode 100644 database/migrations/2026_05_04_072333_change_id_tamu_to_auto_increment_in_buku_tamu_table.php diff --git a/app/Http/Controllers/AdminBukuController.php b/app/Http/Controllers/AdminBukuController.php index fa8aa99..5613eca 100644 --- a/app/Http/Controllers/AdminBukuController.php +++ b/app/Http/Controllers/AdminBukuController.php @@ -20,11 +20,11 @@ public function store(Request $request) 'bibid' => 'required|string|max:30|unique:buku,bibid', 'judul' => 'required|string', 'pengarang' => 'required|string|max:100', - 'penerbit' => 'nullable|string', - 'tahun_terbit' => 'nullable|digits:4', - 'edisi' => 'nullable|string|max:50', - 'deskripsi_fisik' => 'nullable|string|max:100', - 'nomor_panggil' => 'required|string|max:50', + 'penerbit' => 'required|string', + 'tahun_terbit' => 'required|digits:4', + 'edisi' => 'required|digits:4', + 'deskripsi_fisik' => 'required|string|max:100', + 'nomor_panggil' => 'required|string|max:50|unique:buku,nomor_panggil', 'eksemplar' => 'required|integer|min:1', 'id_kategori' => 'required|exists:kategori,id_kategori', 'cover' => 'image|mimes:jpeg,png,jpg,webp|max:2048', @@ -71,11 +71,11 @@ public function update(Request $request, $id) 'bibid' => 'required|string|max:30|unique:buku,bibid,' . $id . ',id_buku', 'judul' => 'required|string', 'pengarang' => 'required|string|max:100', - 'penerbit' => 'nullable|string', - 'tahun_terbit' => 'nullable|digits:4', - 'edisi' => 'nullable|string|max:50', - 'deskripsi_fisik' => 'nullable|string|max:100', - 'nomor_panggil' => 'required|string|max:50', + 'penerbit' => 'required|string', + 'tahun_terbit' => 'required|digits:4', + 'edisi' => 'required|digits:4', + 'deskripsi_fisik' => 'required|string|max:100', + 'nomor_panggil' => 'required|string|max:50|unique:buku,nomor_panggil,' . $id . ',id_buku', 'eksemplar' => 'required|integer|min:1', 'id_kategori' => 'required|exists:kategori,id_kategori', 'cover' => 'image|mimes:jpeg,png,jpg,webp|max:2048' diff --git a/app/Http/Controllers/AdminPeminjamanController.php b/app/Http/Controllers/AdminPeminjamanController.php index bb55361..9743d57 100644 --- a/app/Http/Controllers/AdminPeminjamanController.php +++ b/app/Http/Controllers/AdminPeminjamanController.php @@ -58,8 +58,8 @@ public function store(Request $request) $validated = $request->validate([ 'id_anggota' => 'required|exists:anggotas,id', 'id_buku' => 'required|exists:buku,id_buku', - 'tanggal_pinjam' => 'required|date', - 'tanggal_kembali' => 'required|date|after_or_equal:tanggal_pinjam', + 'tanggal_pinjam' => 'required|date_format:Y-m-d|after_or_equal:2000-01-01|before_or_equal:2100-12-31', + 'tanggal_kembali' => 'required|date_format:Y-m-d|after_or_equal:tanggal_pinjam|before_or_equal:2100-12-31', ]); $validated['status_peminjaman'] = 'Dipinjam'; @@ -240,8 +240,8 @@ public function update(Request $request, $id) $validated = $request->validate([ 'id_anggota' => 'required|exists:anggotas,id', 'id_buku' => 'required|exists:buku,id_buku', - 'tanggal_pinjam' => 'required|date', - 'tanggal_kembali' => 'required|date|after_or_equal:tanggal_pinjam', + 'tanggal_pinjam' => 'required|date_format:Y-m-d|after_or_equal:2000-01-01|before_or_equal:2100-12-31', + 'tanggal_kembali' => 'required|date_format:Y-m-d|after_or_equal:tanggal_pinjam|before_or_equal:2100-12-31', ]); $peminjaman = Peminjaman::findOrFail($id); diff --git a/app/Http/Controllers/AnggotaController.php b/app/Http/Controllers/AnggotaController.php index 0c94bdd..b4d189b 100644 --- a/app/Http/Controllers/AnggotaController.php +++ b/app/Http/Controllers/AnggotaController.php @@ -33,12 +33,12 @@ public function store(Request $request) 'nama' => 'required|string|max:255', 'jenis_anggota' => 'required|in:Mahasiswa,Siswa,Dosen,Umum', 'no_identitas' => 'required|unique:anggotas,no_identitas', - 'no_ktp' => 'nullable|numeric|digits_between:1,16', - 'prodi' => 'nullable|string|max:255', - 'no_hp' => 'required|string|max:20', + 'no_ktp' => 'required|numeric|digits_between:1,16|unique:anggotas,no_ktp', + 'prodi' => 'required_unless:jenis_anggota,Umum|nullable|string|max:255', + 'no_hp' => 'required|numeric|digits_between:10,13', 'alamat' => 'required|string', 'nama_wali' => 'required|string|max:255', - 'no_hp_wali' => 'required|string|max:20', + 'no_hp_wali' => 'required|numeric|digits_between:10,13', 'hubungan_wali' => 'required|in:Orang Tua,Saudara,Dosen Wali,Lainnya', ]); @@ -60,12 +60,12 @@ public function update(Request $request, Anggota $member) 'nama' => 'required|string|max:255', 'jenis_anggota' => 'required|in:Mahasiswa,Siswa,Dosen,Umum', 'no_identitas' => 'required|unique:anggotas,no_identitas,' . $member->id, - 'no_ktp' => 'nullable|numeric|digits_between:1,16', - 'prodi' => 'nullable|string|max:255', - 'no_hp' => 'required|string|max:20', + 'no_ktp' => 'required|numeric|digits_between:1,16|unique:anggotas,no_ktp,' . $member->id, + 'prodi' => 'required_unless:jenis_anggota,Umum|nullable|string|max:255', + 'no_hp' => 'required|numeric|digits_between:10,13', 'alamat' => 'required|string', 'nama_wali' => 'required|string|max:255', - 'no_hp_wali' => 'required|string|max:20', + 'no_hp_wali' => 'required|numeric|digits_between:10,13', 'hubungan_wali' => 'required|in:Orang Tua,Saudara,Dosen Wali,Lainnya', ]); diff --git a/app/Http/Controllers/BukuTamuController.php b/app/Http/Controllers/BukuTamuController.php index 4a0c9c8..5f9b6ce 100644 --- a/app/Http/Controllers/BukuTamuController.php +++ b/app/Http/Controllers/BukuTamuController.php @@ -23,10 +23,10 @@ public function store(Request $request) 'keperluan' => 'required', ]); - $anggota = Anggota::where('no_identitas', $request->no_anggota)->first(); + $anggota = Anggota::where('no_ktp', $request->no_anggota)->orWhere('no_identitas', $request->no_anggota)->first(); if (!$anggota) { - return back()->withErrors(['no_anggota' => 'Nomor Anggota tidak ditemukan dalam sistem kami.'])->withInput(); + return back()->withErrors(['no_anggota' => 'Nomor KTP / NIK tidak ditemukan dalam sistem kami.'])->withInput(); } // Cari user terkait untuk id_user @@ -47,10 +47,10 @@ public function store(Request $request) // Jalur tamu: isi manual $request->validate([ 'nama_tamu' => 'required|string|max:255', - 'email' => 'nullable|email|max:255', - 'no_hp' => 'nullable|string|max:20', + 'email' => 'required|email|max:255', + 'no_hp' => 'required|digits_between:10,13', 'asal_instansi' => 'required|string|max:255', - 'status' => 'nullable|string|max:255', + 'status' => 'required|string|max:255', 'keperluan' => 'required', ]); diff --git a/app/Models/BukuTamu.php b/app/Models/BukuTamu.php index 2afe761..72a144b 100644 --- a/app/Models/BukuTamu.php +++ b/app/Models/BukuTamu.php @@ -10,6 +10,7 @@ class BukuTamu extends Model use HasFactory; protected $table = 'buku_tamu'; + protected $primaryKey = 'id_tamu'; public $timestamps = false; protected $fillable = [ diff --git a/database/migrations/2026_05_04_072333_change_id_tamu_to_auto_increment_in_buku_tamu_table.php b/database/migrations/2026_05_04_072333_change_id_tamu_to_auto_increment_in_buku_tamu_table.php new file mode 100644 index 0000000..36137b2 --- /dev/null +++ b/database/migrations/2026_05_04_072333_change_id_tamu_to_auto_increment_in_buku_tamu_table.php @@ -0,0 +1,24 @@ +
- @foreach($kategori as $kat)
@@ -431,7 +433,7 @@ class="w-10 h-10 rounded-full bg-gray-50 hover:bg-red-50 text-gray-400 hover:tex @foreach ($buku as $b) @@ -459,11 +461,13 @@ class="mt-1 block w-full border-gray-300 focus:border-indigo-500 focus:ring-indi
diff --git a/resources/views/anggota/edit.blade.php b/resources/views/anggota/edit.blade.php index 8490b77..327e912 100644 --- a/resources/views/anggota/edit.blade.php +++ b/resources/views/anggota/edit.blade.php @@ -64,7 +64,7 @@
- +
@@ -92,7 +92,7 @@
- +
@@ -131,8 +131,10 @@ function toggleProdi() { if (jenis === 'Umum') { prodiField.style.display = 'none'; document.getElementById('prodi').value = ''; + document.getElementById('prodi').removeAttribute('required'); } else { prodiField.style.display = 'block'; + document.getElementById('prodi').setAttribute('required', 'required'); } // Logika Dynamic Form untuk Identitas Siswa / Pelajar diff --git a/resources/views/anggota/index.blade.php b/resources/views/anggota/index.blade.php index 416336c..41ddc8e 100644 --- a/resources/views/anggota/index.blade.php +++ b/resources/views/anggota/index.blade.php @@ -6,7 +6,7 @@
- @@ -185,7 +185,7 @@ class="inline-block px-4 pt-5 pb-4 overflow-hidden text-left align-bottom transi
- +
@@ -199,7 +199,7 @@ class="inline-block px-4 pt-5 pb-4 overflow-hidden text-left align-bottom transi
- +
@@ -224,7 +224,7 @@ class="inline-block px-4 pt-5 pb-4 overflow-hidden text-left align-bottom transi
- +
@@ -244,7 +244,7 @@ class="inline-block px-4 pt-5 pb-4 overflow-hidden text-left align-bottom transi -
diff --git a/resources/views/buku_tamu/index.blade.php b/resources/views/buku_tamu/index.blade.php index 34d8cb1..b284de5 100644 --- a/resources/views/buku_tamu/index.blade.php +++ b/resources/views/buku_tamu/index.blade.php @@ -26,6 +26,31 @@ @keyframes blob { 0% { transform: translate(0,0) scale(1); } 33% { transform: translate(30px,-50px) scale(1.1); } 66% { transform: translate(-20px,20px) scale(0.9); } 100% { transform: translate(0,0) scale(1); } } .animate-blob { animation: blob 7s infinite; } .animation-delay-2000 { animation-delay: 2s; } + + /* Hide spin buttons for number input */ + input::-webkit-outer-spin-button, + input::-webkit-inner-spin-button { + -webkit-appearance: none; + margin: 0; + } + input[type=number] { + -moz-appearance: textfield; + } + + /* Custom Scrollbar */ + ::-webkit-scrollbar { + width: 6px; + } + ::-webkit-scrollbar-track { + background: transparent; + } + ::-webkit-scrollbar-thumb { + background: rgba(255, 255, 255, 0.15); + border-radius: 10px; + } + ::-webkit-scrollbar-thumb:hover { + background: rgba(255, 255, 255, 0.3); + } @@ -79,8 +104,12 @@ {{-- RIGHT PANEL (Form) --}}
-
-

Buku Tamu

+ @php $activeTipe = old('tipe', request('tipe', 'member')); @endphp + +
+

+ {{ $activeTipe == 'member' ? 'Buku Tamu Anggota' : 'Buku Tamu Pengunjung Umum' }} +

Isi data kunjungan Anda hari ini.

@@ -96,65 +125,73 @@
@endif + + {{-- Toggle --}}
-
@csrf - + -
+
- - + +
- + {{-- SweetAlert2 for Global Delete Confirmation --}} + + + @stack('scripts') \ No newline at end of file diff --git a/resources/views/layouts/guest.blade.php b/resources/views/layouts/guest.blade.php index 0424f56..7e1e25a 100644 --- a/resources/views/layouts/guest.blade.php +++ b/resources/views/layouts/guest.blade.php @@ -139,13 +139,13 @@ class="relative transition-colors {{ request()->routeIs('home') ? 'text-primary- class="relative transition-colors {{ request()->routeIs('katalog.*') ? 'text-primary-600 font-semibold' : 'text-gray-600 hover:text-primary-600' }} after:absolute after:bottom-[-4px] after:left-0 {{ request()->routeIs('katalog.*') ? 'after:w-full' : 'after:w-0 hover:after:w-full' }} after:h-0.5 after:bg-primary-500 after:transition-all">Katalog Buku Fitur + class="relative transition-colors text-gray-600 hover:text-primary-600 after:absolute after:bottom-[-4px] after:left-0 after:w-0 after:h-0.5 after:bg-primary-500 after:transition-all hover:after:w-full">Fitur Koleksi + class="relative transition-colors text-gray-600 hover:text-primary-600 after:absolute after:bottom-[-4px] after:left-0 after:w-0 after:h-0.5 after:bg-primary-500 after:transition-all hover:after:w-full">Koleksi @guest @guest - @@ -275,6 +275,52 @@ class="fab fa-twitter text-sm">
+ + + @stack('scripts') diff --git a/resources/views/welcome.blade.php b/resources/views/welcome.blade.php index 6a3a142..52f942e 100644 --- a/resources/views/welcome.blade.php +++ b/resources/views/welcome.blade.php @@ -11,61 +11,4 @@ @include('welcome.rekomendasi') - -@endsection - -@push('scripts') - -@endpush \ No newline at end of file +@endsection \ No newline at end of file