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', 'kota', 'user']) ->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.'); } // Jika request adalah AJAX, kembalikan response JSON if (request()->ajax()) { return response()->json([ 'id' => $sewa->id, 'tanggal_pembayaran' => $sewa->tanggal_pembayaran ? $sewa->tanggal_pembayaran->format('d/m/Y H:i') : null, 'status_pembayaran' => $sewa->nominal_pembayaran ? ($sewa->nominal_pembayaran >= $sewa->total_harga ? 'Lunas' : 'DP ' . number_format(($sewa->nominal_pembayaran / $sewa->total_harga) * 100, 0) . '%') : 'Belum Bayar', 'lokasi' => $sewa->lokasi, 'kota' => $sewa->kota, 'ongkir' => $sewa->ongkir, 'bukti_pembayaran' => $sewa->bukti_pembayaran, 'jenis_jaminan' => $sewa->jenis_jaminan, 'foto_jaminan' => $sewa->foto_jaminan ]); } 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.'); } /** * Menghapus riwayat pemesanan */ public function hapus($id) { $sewa = Sewa::findOrFail($id); // Pastikan yang menghapus adalah pemilik pesanan if ($sewa->user_id != Auth::id()) { return redirect()->route('riwayat') ->with('error', 'Anda tidak memiliki akses untuk menghapus pesanan ini.'); } // Hanya bisa menghapus pesanan yang sudah selesai atau dibatalkan if (!in_array($sewa->status, ['completed', 'dibatalkan'])) { return redirect()->route('riwayat') ->with('error', 'Hanya pesanan yang sudah selesai atau dibatalkan yang dapat dihapus.'); } // Hapus file bukti pembayaran dan jaminan jika ada if ($sewa->bukti_pembayaran) { Storage::disk('public')->delete($sewa->bukti_pembayaran); } if ($sewa->foto_jaminan) { Storage::disk('public')->delete($sewa->foto_jaminan); } $sewa->delete(); return redirect()->route('riwayat') ->with('success', 'Riwayat pesanan berhasil dihapus.'); } }