From 22d0c2f645db61547336ad562c9a81b05cce8f67 Mon Sep 17 00:00:00 2001 From: cukiprit Date: Sat, 7 Feb 2026 18:10:11 +0700 Subject: [PATCH] Fix: role petugas perpus --- .../Admin/AdminPeminjamanController.php | 42 ++++++++++++ .../Admin/AdminRekomendasiController.php | 38 +++++++++++ app/Http/Controllers/Admin/BookController.php | 66 ++++++++++++++++++- .../Admin/PengumumanController.php | 48 ++++++++++++++ app/Http/Controllers/Admin/UserController.php | 56 +++++++++++++++- resources/views/admin/buku/create.blade.php | 36 +++++----- resources/views/admin/buku/edit.blade.php | 60 +++++++++-------- .../views/admin/peminjaman/create.blade.php | 13 +++- .../views/admin/pengguna/create.blade.php | 32 +++++---- resources/views/admin/pengguna/edit.blade.php | 42 ++++++++---- .../views/admin/pengumuman/create.blade.php | 19 +++--- .../views/admin/pengumuman/edit.blade.php | 29 ++++---- .../views/admin/rekomendasi/create.blade.php | 11 ++-- .../views/admin/rekomendasi/edit.blade.php | 12 ++-- routes/web.php | 16 ++++- 15 files changed, 413 insertions(+), 107 deletions(-) diff --git a/app/Http/Controllers/Admin/AdminPeminjamanController.php b/app/Http/Controllers/Admin/AdminPeminjamanController.php index 46850d9..fc5a32a 100644 --- a/app/Http/Controllers/Admin/AdminPeminjamanController.php +++ b/app/Http/Controllers/Admin/AdminPeminjamanController.php @@ -83,6 +83,48 @@ public function create() ]); } + public function store(Request $request) + { + $validated = $request->validate([ + 'peminjam_id' => 'required|exists:users,id', + 'tanggal_pinjam' => 'required|date', + 'tanggal_kembali' => 'required|date|after:tanggal_pinjam', + 'buku_ids' => 'required|array|min:1|max:2', + 'buku_ids.*' => 'exists:books,id', + ]); + + \DB::beginTransaction(); + try { + foreach ($validated['buku_ids'] as $bookId) { + $book = Book::findOrFail($bookId); + + // Check if book is available + if ($book->status !== 'Tersedia') { + throw new \Exception("Buku '{$book->judul}' tidak tersedia."); + } + + // Create loan record + Loan::create([ + 'user_id' => $validated['peminjam_id'], + 'book_id' => $bookId, + 'loan_code' => 'LOAN-' . date('Ymd') . '-' . strtoupper(substr(md5(uniqid()), 0, 6)), + 'borrowed_at' => $validated['tanggal_pinjam'], + 'due_at' => $validated['tanggal_kembali'], + 'status' => 'Dipinjam', + ]); + + // Update book status + $book->update(['status' => 'Dipinjam']); + } + + \DB::commit(); + return redirect()->route('admin.peminjaman.index')->with('success', 'Peminjaman berhasil dibuat.'); + } catch (\Exception $e) { + \DB::rollBack(); + return back()->withErrors(['error' => $e->getMessage()])->withInput(); + } + } + public function dendaIndex() { $now = Carbon::now(); diff --git a/app/Http/Controllers/Admin/AdminRekomendasiController.php b/app/Http/Controllers/Admin/AdminRekomendasiController.php index 1ff80b3..4fed83b 100644 --- a/app/Http/Controllers/Admin/AdminRekomendasiController.php +++ b/app/Http/Controllers/Admin/AdminRekomendasiController.php @@ -54,4 +54,42 @@ public function edit($id) 'rekomendasi' => $rekomendasi ]); } + + public function store(Request $request) + { + $validated = $request->validate([ + 'judul' => 'required|string|max:255', + 'kategori' => 'required|string|max:100', + 'youtube_link' => 'required|url', + 'deskripsi' => 'required|string', + ]); + + Recommendation::create($validated); + + return redirect()->route('admin.rekomendasi.index')->with('success', 'Rekomendasi berhasil ditambahkan.'); + } + + public function update(Request $request, $id) + { + $rekomendasi = Recommendation::findOrFail($id); + + $validated = $request->validate([ + 'judul' => 'required|string|max:255', + 'kategori' => 'required|string|max:100', + 'youtube_link' => 'required|url', + 'deskripsi' => 'required|string', + ]); + + $rekomendasi->update($validated); + + return redirect()->route('admin.rekomendasi.index')->with('success', 'Rekomendasi berhasil diperbarui.'); + } + + public function destroy($id) + { + $rekomendasi = Recommendation::findOrFail($id); + $rekomendasi->delete(); + + return redirect()->route('admin.rekomendasi.index')->with('success', 'Rekomendasi berhasil dihapus.'); + } } \ No newline at end of file diff --git a/app/Http/Controllers/Admin/BookController.php b/app/Http/Controllers/Admin/BookController.php index dfb8cbb..d47f9a4 100644 --- a/app/Http/Controllers/Admin/BookController.php +++ b/app/Http/Controllers/Admin/BookController.php @@ -57,5 +57,69 @@ public function edit($id) ]); } - // You might also want to implement store, update, destroy here later + public function store(Request $request) + { + $validated = $request->validate([ + 'judul' => 'required|string|max:255', + 'penulis' => 'required|string|max:255', + 'category_id' => 'required|exists:categories,id', + 'tahun' => 'required|integer', + 'kode_buku' => 'nullable|string', + 'tipe_akses' => 'required|array', + 'cover' => 'nullable|image|mimes:jpeg,png,jpg|max:2048', + 'file_pdf' => 'nullable|mimes:pdf|max:10240', + ]); + + if ($request->hasFile('cover')) { + $path = $request->file('cover')->store('covers', 'public'); + $validated['cover'] = 'storage/' . $path; + } + + if ($request->hasFile('file_pdf')) { + $path = $request->file('file_pdf')->store('books', 'local'); + $validated['file_pdf'] = basename($path); + } + + Book::create($validated); + + return redirect()->route('admin.buku.index')->with('success', 'Buku berhasil ditambahkan.'); + } + + public function update(Request $request, $id) + { + $buku = Book::findOrFail($id); + + $validated = $request->validate([ + 'judul' => 'required|string|max:255', + 'penulis' => 'required|string|max:255', + 'category_id' => 'required|exists:categories,id', + 'tahun' => 'required|integer', + 'kode_buku' => 'nullable|string', + 'tipe_akses' => 'required|array', + 'cover' => 'nullable|image|mimes:jpeg,png,jpg|max:2048', + 'file_pdf' => 'nullable|mimes:pdf|max:10240', + ]); + + if ($request->hasFile('cover')) { + $path = $request->file('cover')->store('covers', 'public'); + $validated['cover'] = 'storage/' . $path; + } + + if ($request->hasFile('file_pdf')) { + $path = $request->file('file_pdf')->store('books', 'local'); + $validated['file_pdf'] = basename($path); + } + + $buku->update($validated); + + return redirect()->route('admin.buku.index')->with('success', 'Buku berhasil diperbarui.'); + } + + public function destroy($id) + { + $buku = Book::findOrFail($id); + $buku->delete(); + + return redirect()->route('admin.buku.index')->with('success', 'Buku berhasil dihapus.'); + } } \ No newline at end of file diff --git a/app/Http/Controllers/Admin/PengumumanController.php b/app/Http/Controllers/Admin/PengumumanController.php index 10d47d9..175ad4d 100644 --- a/app/Http/Controllers/Admin/PengumumanController.php +++ b/app/Http/Controllers/Admin/PengumumanController.php @@ -42,4 +42,52 @@ public function edit($id) 'pengumuman' => $pengumuman, ]); } + + public function store(Request $request) + { + $validated = $request->validate([ + 'title' => 'required|string|max:255', + 'content' => 'required|string', + 'type' => 'required|in:info,warning,success,danger', + 'icon' => 'nullable|string|max:50', + ]); + + // Provide default icon if not provided + if (!isset($validated['icon']) || empty($validated['icon'])) { + $validated['icon'] = 'bi-megaphone'; + } + + Announcement::create($validated); + + return redirect()->route('admin.pengumuman.index')->with('success', 'Pengumuman berhasil ditambahkan.'); + } + + public function update(Request $request, $id) + { + $pengumuman = Announcement::findOrFail($id); + + $validated = $request->validate([ + 'title' => 'required|string|max:255', + 'content' => 'required|string', + 'type' => 'required|in:info,warning,success,danger', + 'icon' => 'nullable|string|max:50', + ]); + + // Provide default icon if not provided + if (!isset($validated['icon']) || empty($validated['icon'])) { + $validated['icon'] = 'bi-megaphone'; + } + + $pengumuman->update($validated); + + return redirect()->route('admin.pengumuman.index')->with('success', 'Pengumuman berhasil diperbarui.'); + } + + public function destroy($id) + { + $pengumuman = Announcement::findOrFail($id); + $pengumuman->delete(); + + return redirect()->route('admin.pengumuman.index')->with('success', 'Pengumuman berhasil dihapus.'); + } } \ No newline at end of file diff --git a/app/Http/Controllers/Admin/UserController.php b/app/Http/Controllers/Admin/UserController.php index aec6830..f30097c 100644 --- a/app/Http/Controllers/Admin/UserController.php +++ b/app/Http/Controllers/Admin/UserController.php @@ -5,6 +5,7 @@ use App\Http\Controllers\Controller; use App\Models\User; use Illuminate\Http\Request; +use Illuminate\Support\Facades\Hash; class UserController extends Controller { @@ -40,5 +41,58 @@ public function edit($id) ]); } - // You might also want to implement store, update, destroy here later + public function store(Request $request) + { + $validated = $request->validate([ + 'nama_lengkap' => 'required|string|max:255', + 'email' => 'required|email|unique:users,email', + 'nomor_induk' => 'nullable|string|max:50', + 'phone' => 'nullable|string|max:20', + 'role' => 'required|in:siswa,guru,penjaga perpus', + 'kelas' => 'nullable|string|max:50', + 'password' => 'required|string|min:8|confirmed', + ]); + + $validated['password'] = Hash::make($validated['password']); + $validated['name'] = $validated['nama_lengkap']; // Set name field for compatibility + + User::create($validated); + + return redirect()->route('admin.pengguna.index')->with('success', 'Pengguna berhasil ditambahkan.'); + } + + public function update(Request $request, $id) + { + $pengguna = User::findOrFail($id); + + $validated = $request->validate([ + 'nama_lengkap' => 'required|string|max:255', + 'email' => 'required|email|unique:users,email,' . $id, + 'nomor_induk' => 'nullable|string|max:50', + 'phone' => 'nullable|string|max:20', + 'role' => 'required|in:siswa,guru,penjaga perpus', + 'kelas' => 'nullable|string|max:50', + 'password' => 'nullable|string|min:8|confirmed', + ]); + + if ($request->filled('password')) { + $validated['password'] = Hash::make($validated['password']); + } else { + unset($validated['password']); + } + + $validated['name'] = $validated['nama_lengkap']; // Set name field for compatibility + + $pengguna->update($validated); + + return redirect()->route('admin.pengguna.index')->with('success', 'Pengguna berhasil diperbarui.'); + } + + public function destroy($id) + { + $pengguna = User::findOrFail($id); + $pengguna->delete(); + + return redirect()->route('admin.pengguna.index')->with('success', 'Pengguna berhasil dihapus.'); + } } \ No newline at end of file diff --git a/resources/views/admin/buku/create.blade.php b/resources/views/admin/buku/create.blade.php index 24c5b13..d83a82f 100644 --- a/resources/views/admin/buku/create.blade.php +++ b/resources/views/admin/buku/create.blade.php @@ -13,46 +13,50 @@
-
- {{-- Form ini tidak akan berfungsi karena tidak ada backend --}} + + @csrf
- +
- +
- - + +
- +
-
- +
- +
@@ -60,11 +64,11 @@
- +
- +
diff --git a/resources/views/admin/buku/edit.blade.php b/resources/views/admin/buku/edit.blade.php index ffaa238..bce3589 100644 --- a/resources/views/admin/buku/edit.blade.php +++ b/resources/views/admin/buku/edit.blade.php @@ -13,60 +13,64 @@
- - {{-- Form ini tidak akan berfungsi karena tidak ada backend --}} + + @csrf + @method('PUT')
- +
- +
- - + +
- +
@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
- +
- +
- +
@@ -75,10 +79,14 @@
- - Cover saat ini + Cover saat ini
+
+ + +

diff --git a/resources/views/admin/peminjaman/create.blade.php b/resources/views/admin/peminjaman/create.blade.php index a2b8c5b..01dd5d3 100644 --- a/resources/views/admin/peminjaman/create.blade.php +++ b/resources/views/admin/peminjaman/create.blade.php @@ -8,7 +8,18 @@

Formulir Peminjaman Manual

- @csrf + @csrf + @if ($errors->any()) + + @endif
diff --git a/resources/views/admin/pengguna/create.blade.php b/resources/views/admin/pengguna/create.blade.php index e284779..443a4e0 100644 --- a/resources/views/admin/pengguna/create.blade.php +++ b/resources/views/admin/pengguna/create.blade.php @@ -12,37 +12,47 @@
- + + @csrf
- +
- +
- - + + +
+
+ + +
+
+ +
- + +
- +
- +

diff --git a/resources/views/admin/pengguna/edit.blade.php b/resources/views/admin/pengguna/edit.blade.php index 40bebef..c00d7f6 100644 --- a/resources/views/admin/pengguna/edit.blade.php +++ b/resources/views/admin/pengguna/edit.blade.php @@ -12,41 +12,55 @@
- + + @csrf + @method('PUT')
- +
- +
- - + + +
+
+ + +
+
+ +
- + + - +
-
- +

diff --git a/resources/views/admin/pengumuman/create.blade.php b/resources/views/admin/pengumuman/create.blade.php index 7021a99..104b3e9 100644 --- a/resources/views/admin/pengumuman/create.blade.php +++ b/resources/views/admin/pengumuman/create.blade.php @@ -12,27 +12,26 @@
- - {{-- Form ini tidak akan berfungsi karena tidak ada backend --}} + + @csrf
- - + +
- - + -
- +

diff --git a/resources/views/admin/pengumuman/edit.blade.php b/resources/views/admin/pengumuman/edit.blade.php index 48c8e8c..8777cd4 100644 --- a/resources/views/admin/pengumuman/edit.blade.php +++ b/resources/views/admin/pengumuman/edit.blade.php @@ -12,32 +12,31 @@
- - {{-- Form ini tidak akan berfungsi karena tidak ada backend --}} + + @csrf + @method('PUT')
- - + +
- - + + - - - -
- +

diff --git a/resources/views/admin/rekomendasi/create.blade.php b/resources/views/admin/rekomendasi/create.blade.php index 8c491f7..38da5db 100644 --- a/resources/views/admin/rekomendasi/create.blade.php +++ b/resources/views/admin/rekomendasi/create.blade.php @@ -12,15 +12,16 @@
- + + @csrf
+ name="judul" class="form-control" required>
+ name="kategori" class="form-control" placeholder="Contoh: Teknologi, Sains, Biologi" required>
+ name="youtube_link" class="form-control" placeholder="https://www.youtube.com/watch?v=xxxxxx" required>
- +

- +