From b0c7a8b2cf915f1a18a9b7781e072ab11014584a Mon Sep 17 00:00:00 2001 From: cukiprit Date: Sun, 8 Mar 2026 03:26:36 +0700 Subject: [PATCH] feat: Add book detail page and update book index to navigate to it instead of using a modal. --- .../Admin/AdminPeminjamanController.php | 39 ++++--- app/Http/Controllers/Admin/BookController.php | 13 +++ app/Http/Controllers/ProfileController.php | 20 ++++ app/Models/User.php | 5 + resources/views/admin/buku/create.blade.php | 14 ++- resources/views/admin/buku/edit.blade.php | 13 ++- resources/views/admin/buku/index.blade.php | 107 +----------------- resources/views/admin/buku/show.blade.php | 107 ++++++++++++++++++ .../views/admin/pengguna/index.blade.php | 5 +- resources/views/profile/index.blade.php | 75 ++++++------ routes/web.php | 1 + 11 files changed, 236 insertions(+), 163 deletions(-) create mode 100644 resources/views/admin/buku/show.blade.php diff --git a/app/Http/Controllers/Admin/AdminPeminjamanController.php b/app/Http/Controllers/Admin/AdminPeminjamanController.php index 3d6a9cb..d55a783 100644 --- a/app/Http/Controllers/Admin/AdminPeminjamanController.php +++ b/app/Http/Controllers/Admin/AdminPeminjamanController.php @@ -150,41 +150,48 @@ public function export(Request $request) $date = Carbon::parse($request->bulan_laporan); $query->whereMonth('borrowed_at', $date->month) ->whereYear('borrowed_at', $date->year); - $fileName = 'Laporan_Peminjaman_'.$date->format('Y-m').'.csv'; + $fileName = 'Laporan_Peminjaman_'.$date->format('Y-m').'.xls'; // Changed to .xls } else { - $fileName = 'Laporan_Peminjaman_Semua.csv'; + $fileName = 'Laporan_Peminjaman_Semua.xls'; // Changed to .xls } $loans = $query->get(); $headers = [ - "Content-type" => "text/csv", + "Content-Type" => "application/vnd.ms-excel", "Content-Disposition" => "attachment; filename=$fileName", "Pragma" => "no-cache", "Cache-Control" => "must-revalidate, post-check=0, pre-check=0", "Expires" => "0" ]; - $columns = ['NO', 'ID PEMINJAMAN', 'PEMINJAM', 'ROLE', 'JUDUL BUKU', 'TGL PINJAM', 'T tenggat KEMBALI', 'STATUS', 'DENDA KETERLAMBATAN']; + $columns = ['NO', 'ID PEMINJAMAN', 'PEMINJAM', 'ROLE', 'JUDUL BUKU', 'TGL PINJAM', 'TENGGAT KEMBALI', 'STATUS', 'DENDA KETERLAMBATAN']; $callback = function() use($loans, $columns) { $file = fopen('php://output', 'w'); - fputcsv($file, $columns); + + // Generate HTML table for Excel + echo ''; + echo ''; + foreach($columns as $col) echo ""; + echo ''; + echo ''; $i = 1; foreach ($loans as $loan) { - $row['NO'] = $i++; - $row['ID_PEMINJAMAN'] = $loan->loan_code; - $row['PEMINJAM'] = $loan->user->nama_lengkap ?? 'Unknown'; - $row['ROLE'] = $loan->user->role ?? '-'; - $row['JUDUL_BUKU'] = $loan->book->judul ?? 'Unknown'; - $row['TGL_PINJAM'] = $loan->borrowed_at->format('d/m/Y'); - $row['TENGGAT_KEMBALI'] = $loan->due_at ? $loan->due_at->format('d/m/Y') : '-'; - $row['STATUS'] = $loan->status; - $row['DENDA'] = $loan->fine_overdue ?? 0; - - fputcsv($file, array_values($row)); + echo ''; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ''; } + echo '
$col
" . $i++ . "" . ($loan->loan_code ?? '-') . "" . ($loan->user->nama_lengkap ?? 'Unknown') . "" . ($loan->user->role ?? '-') . "" . ($loan->book->judul ?? 'Unknown') . "" . $loan->borrowed_at->format('d/m/Y') . "" . ($loan->due_at ? $loan->due_at->format('d/m/Y') : '-') . "" . ($loan->status ?? '-') . "" . ($loan->fine_overdue ?? 0) . "
'; fclose($file); }; diff --git a/app/Http/Controllers/Admin/BookController.php b/app/Http/Controllers/Admin/BookController.php index 3f78646..2d41506 100644 --- a/app/Http/Controllers/Admin/BookController.php +++ b/app/Http/Controllers/Admin/BookController.php @@ -53,6 +53,19 @@ public function create() ]); } + /** + * Menampilkan detail buku. + */ + public function show($id) + { + $buku = Book::with('category')->findOrFail($id); + + return view('admin.buku.show', [ + 'pageTitle' => 'Detail Buku: ' . $buku->judul, + 'buku' => $buku + ]); + } + public function edit($id) { $buku = Book::with('category')->findOrFail($id); diff --git a/app/Http/Controllers/ProfileController.php b/app/Http/Controllers/ProfileController.php index baa8758..983123f 100644 --- a/app/Http/Controllers/ProfileController.php +++ b/app/Http/Controllers/ProfileController.php @@ -104,6 +104,26 @@ public function index(Request $request): \Illuminate\View\View|\Illuminate\Http\ ['label' => 'Buku dikembalikan', 'value' => Loan::where('user_id', $user->id)->where('status', 'Dikembalikan')->count(), 'icon' => 'bi-check-circle', 'color' => 'success'], ['label' => 'History Baca', 'value' => Loan::where('user_id', $user->id)->count(), 'icon' => 'bi-hourglass-split', 'color' => 'warning'], ]; + + // Analytics for Siswa (same as Guru for consistency) + $viewData['laporan'] = [ + 'buku_terpopuler' => Book::withCount('loans') + ->orderBy('loans_count', 'desc') + ->take(3) + ->get() + ->map(fn($b) => [ + 'judul' => $b->judul, + 'total_pembaca' => $b->loans_count + ]), + 'kategori_populer' => \App\Models\Category::select('categories.name as nama') + ->join('books', 'categories.id', '=', 'books.category_id') + ->join('loans', 'books.id', '=', 'loans.book_id') + ->selectRaw('count(loans.id) as total_pembaca') + ->groupBy('categories.id', 'categories.name') + ->orderBy('total_pembaca', 'desc') + ->take(3) + ->get(), + ]; } return view('profile.index', $viewData); diff --git a/app/Models/User.php b/app/Models/User.php index 80a0e58..f1fc766 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -58,4 +58,9 @@ public function getNamaLengkapAttribute() { return $this->name; } + + public function loans() + { + return $this->hasMany(Loan::class); + } } diff --git a/resources/views/admin/buku/create.blade.php b/resources/views/admin/buku/create.blade.php index e90bd52..6d8dc71 100644 --- a/resources/views/admin/buku/create.blade.php +++ b/resources/views/admin/buku/create.blade.php @@ -39,8 +39,12 @@
- +
@@ -49,7 +53,7 @@
-
@@ -73,11 +77,11 @@
- +
- +
diff --git a/resources/views/admin/buku/edit.blade.php b/resources/views/admin/buku/edit.blade.php index 26cb511..408db3d 100644 --- a/resources/views/admin/buku/edit.blade.php +++ b/resources/views/admin/buku/edit.blade.php @@ -41,8 +41,13 @@
- +
@@ -84,13 +89,13 @@
- + Cover saat ini
- +
diff --git a/resources/views/admin/buku/index.blade.php b/resources/views/admin/buku/index.blade.php index b166ad1..0311771 100644 --- a/resources/views/admin/buku/index.blade.php +++ b/resources/views/admin/buku/index.blade.php @@ -69,16 +69,9 @@ class="badge bg-warning-subtle text-warning-emphasis">Dipinjam @endif - + + - - - - - - @push('scripts')