carrentalservice/app/Http/Controllers/QuickRentalController.php
2026-02-19 22:05:20 +00:00

92 lines
2.8 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\Car;
use App\Models\Customer;
use App\Models\Rental;
use App\Models\Payment;
use Illuminate\Http\Request;
use PDF;
use Carbon\Carbon;
class QuickRentalController extends Controller
{
public function getCustomers()
{
$customers = Customer::where('status', 'active')->get(['id', 'name', 'email', 'phone', 'license_number']);
return response()->json($customers);
}
public function getCars()
{
$cars = Car::where('status', 'available')->get();
return response()->json($cars);
}
public function store(Request $request)
{
// Validate the request
$request->validate([
'customer_id' => 'required',
'car_id' => 'required',
'rental_type' => 'required',
'start_date' => 'required|date',
'end_date' => 'required|date|after:start_date',
'total_amount' => 'required|numeric',
'advance_payment' => 'nullable|numeric',
]);
// Create rental
$rental = Rental::create([
'customer_id' => $request->customer_id,
'car_id' => $request->car_id,
'rental_type' => $request->rental_type,
'start_date' => $request->start_date,
'pickup_time' => $request->pickup_time,
'end_date' => $request->end_date,
'return_time' => $request->return_time,
'total_amount' => $request->total_amount,
'advance_payment' => $request->advance_payment ?? 0,
'status' => 'active',
'notes' => $request->notes,
'customer_signature' => $request->customer_signature,
]);
// Update car status
Car::find($request->car_id)->update(['status' => 'rented']);
// Create advance payment if paid
if ($request->advance_payment > 0) {
Payment::create([
'rental_id' => $rental->id,
'amount' => $request->advance_payment,
'method' => $request->payment_method ?? 'cash',
'status' => 'completed',
]);
}
return response()->json([
'success' => true,
'rental_id' => $rental->id,
]);
}
public function generateContract($rentalId)
{
$rental = Rental::with(['car', 'customer', 'payments'])->findOrFail($rentalId);
$pdf = PDF::loadView('contracts.rental', [
'rental' => $rental,
'company' => [
'name' => 'On The Road',
'address' => 'Manama, Bahrain',
'phone' => '+973-00000000',
'email' => 'info@ontheroad.bh',
]
]);
return $pdf->download('rental-contract-' . $rental->id . '.pdf');
}
}