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 "| $col | ";
+ 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 "| " . $i++ . " | ";
+ echo "" . ($loan->loan_code ?? '-') . " | ";
+ echo "" . ($loan->user->nama_lengkap ?? 'Unknown') . " | ";
+ echo "" . ($loan->user->role ?? '-') . " | ";
+ echo "" . ($loan->book->judul ?? 'Unknown') . " | ";
+ echo "" . $loan->borrowed_at->format('d/m/Y') . " | ";
+ echo "" . ($loan->due_at ? $loan->due_at->format('d/m/Y') : '-') . " | ";
+ echo "" . ($loan->status ?? '-') . " | ";
+ echo "" . ($loan->fine_overdue ?? 0) . " | ";
+ echo '
';
}
+ echo '
';
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 @@
-
+
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
-
+
|
-
+
|