where('user_id', Auth::id()) ->where('status', '!=', 'draft') ->orderBy('created_at', 'desc') ->get(); return view('riwayat', compact('sewas')); } /** * Menampilkan detail riwayat pemesanan */ public function show($id) { $sewa = Sewa::with('paket')->findOrFail($id); // Pastikan yang melihat adalah pemilik pesanan if ($sewa->user_id != Auth::id() && !Auth::user()->tipe_pengguna == 'admin') { return redirect()->route('riwayat') ->with('error', 'Anda tidak memiliki akses untuk melihat pesanan ini.'); } return view('detail-riwayat', compact('sewa')); } /** * Membatalkan pemesanan */ public function cancel($id) { $sewa = Sewa::findOrFail($id); // Pastikan yang membatalkan adalah pemilik pesanan if ($sewa->user_id != Auth::id()) { return redirect()->route('riwayat') ->with('error', 'Anda tidak memiliki akses untuk membatalkan pesanan ini.'); } // Izinkan pembatalan untuk status yang belum selesai atau dibatalkan if (in_array($sewa->status, ['completed', 'dibatalkan', 'ongoing'])) { return redirect()->route('riwayat') ->with('error', 'Pesanan ini tidak dapat dibatalkan karena status sudah ' . $sewa->status); } // Tambahkan catatan jika pembatalan setelah disetujui if ($sewa->status === 'confirmed') { $sewa->catatan = ($sewa->catatan ? $sewa->catatan . "\n" : '') . "[DIBATALKAN OLEH PENYEWA SETELAH DISETUJUI] - " . now(); } $sewa->status = 'dibatalkan'; $sewa->save(); $message = 'Pesanan berhasil dibatalkan.'; if ($sewa->status === 'confirmed') { $message .= ' Mohon hubungi admin untuk informasi biaya pembatalan.'; } return redirect()->route('riwayat') ->with('success', $message); } /** * Halaman untuk admin melihat semua riwayat pesanan */ public function adminIndex() { // Hanya admin yang bisa akses if (!Auth::user()->tipe_pengguna == 'admin') { return redirect()->route('dashboard'); } $sewas = Sewa::with(['paket', 'user']) ->orderBy('created_at', 'desc') ->get(); return view('admin.riwayat', compact('sewas')); } /** * Mengubah status pemesanan (khusus admin) */ public function updateStatus(Request $request, $id) { // Hanya admin yang bisa akses if (!Auth::user()->tipe_pengguna == 'admin') { return redirect()->route('dashboard'); } $request->validate([ 'status' => 'required|in:pending,confirmed,ongoing,completed,dibatalkan', ]); $sewa = Sewa::findOrFail($id); $sewa->status = $request->status; $sewa->save(); return redirect()->route('admin.riwayat') ->with('success', 'Status pesanan berhasil diperbarui.'); } }