get(); return view('rentals.index', compact('rentals')); } public function create() { $cars = Car::where('status', 'available')->get(); $customers = Customer::where('status', 'active')->get(); return view('rentals.create', compact('cars', 'customers')); } public function store(Request $request) { $request->validate([ 'car_id' => 'required', 'customer_id' => 'required', 'rental_type' => 'required', 'start_date' => 'required|date', 'pickup_time' => 'nullable', 'end_date' => 'required|date|after:start_date', 'return_time' => 'nullable', 'total_amount' => 'required|numeric', 'advance_payment' => 'nullable|numeric' ]); $rental = Rental::create($request->all()); // Update car status Car::find($request->car_id)->update(['status' => 'rented']); // Create payment if advance is paid if ($request->advance_payment > 0) { Payment::create([ 'rental_id' => $rental->id, 'amount' => $request->advance_payment, 'method' => 'cash', 'status' => 'completed' ]); } return redirect()->route('rentals.index')->with('success', 'Rental created successfully!'); } public function show(Rental $rental) { $rental->load(['car', 'customer', 'payments']); return view('rentals.show', compact('rental')); } public function edit(Rental $rental) { $cars = Car::all(); $customers = Customer::all(); return view('rentals.edit', compact('rental', 'cars', 'customers')); } public function update(Request $request, Rental $rental) { $request->validate([ 'car_id' => 'required', 'customer_id' => 'required', 'rental_type' => 'required', 'start_date' => 'required|date', 'end_date' => 'required|date|after:start_date', 'total_amount' => 'required|numeric' ]); $rental->update($request->all()); return redirect()->route('rentals.index')->with('success', 'Rental updated successfully!'); } public function destroy(Rental $rental) { // Reset car status Car::find($rental->car_id)->update(['status' => 'available']); $rental->delete(); return redirect()->route('rentals.index')->with('success', 'Rental deleted successfully!'); } public function updateStatus(Request $request, Rental $rental, $status) { $rental->update(['status' => $status]); if ($status == 'completed' || $status == 'cancelled') { Car::find($rental->car_id)->update(['status' => 'available']); } elseif ($status == 'active') { Car::find($rental->car_id)->update(['status' => 'rented']); } return redirect()->back()->with('success', 'Status updated!'); } public function contract(Rental $rental) { $rental->load(['car', 'customer']); return view('contracts.rental', compact('rental')); } public function downloadContract(Rental $rental) { $rental->load(['car', 'customer']); $pdf = \PDF::loadView('contracts.rental', compact('rental')); return $pdf->download('contract-' . str_pad($rental->id, 6, '0', STR_PAD_LEFT) . '.pdf'); } }