orderBy('tanggal_pinjam', 'desc') ->get(); return view('dashboard.sirkulasi.index', compact('transactions')); } public function create() { $anggota = Anggota::all(); $koleksi = Koleksi::available()->get(); return view('dashboard.sirkulasi.create', compact('anggota', 'koleksi')); } public function store(Request $request) { $request->validate([ 'anggota_id' => 'required|exists:anggota,id', 'koleksi_id' => 'required|exists:koleksis,biblio_id', 'tanggal_pinjam' => 'required|date', 'tanggal_kembali' => 'nullable|date|after_or_equal:tanggal_pinjam', 'surat_pengantar' => 'nullable|mimes:pdf|max:2048', ]); $alreadyBorrowed = BorrowTransaction::where('koleksi_id', $request->koleksi_id) ->where('status', 'dipinjam') ->exists(); if ($alreadyBorrowed) { return redirect()->back()->withErrors(['koleksi_id' => 'Buku ini sedang dipinjam.']); } $fileName = null; if ($request->hasFile('surat_pengantar')) { $file = $request->file('surat_pengantar'); $fileName = time() . '_' . $file->getClientOriginalName(); $file->storeAs('public/surat_pengantar', $fileName); } BorrowTransaction::create([ 'anggota_id' => $request->anggota_id, 'koleksi_id' => $request->koleksi_id, 'tanggal_pinjam' => $request->tanggal_pinjam, 'tanggal_kembali' => $request->tanggal_kembali, 'status' => 'dipinjam', 'surat_pengantar' => $fileName, ]); return redirect()->route('dashboard.sirkulasi.index') ->with('success', 'Transaksi peminjaman berhasil disimpan!'); } public function kembalikan($id) { $transaction = BorrowTransaction::findOrFail($id); if ($transaction->status != 'dipinjam') { return redirect()->route('dashboard.sirkulasi.index') ->with('error', 'Transaksi ini sudah dikembalikan.'); } $transaction->update([ 'status' => 'dikembalikan', 'tanggal_kembali' => now(), ]); return redirect()->route('dashboard.sirkulasi.index') ->with('success', 'Buku berhasil dikembalikan!'); } }