File: /var/www/html/dashboard.orbiwheels.com/app/Http/Controllers/Transporter/RideController.php
<?php
namespace App\Http\Controllers\Transporter;
use App\DataTables\Transporter\RideDataTable;
use App\Http\Controllers\Controller;
use App\Models\Booking;
use App\Models\BookingRide;
use App\Models\Driver;
use App\Models\RideRequest;
use App\Models\TransporterRequest;
use App\Models\TransporterSetting;
use App\Models\Vehicle;
use Illuminate\Http\Request;
class RideController extends Controller
{
public function index(RideDataTable $dataTable)
{
$transporterId = auth()->guard('trans')->user()->id;
$drivers = Driver::where('transporter_id', $transporterId)->where('status', 'active')->where('is_verified', 1)->limit(10)->get();
$vehicles = Vehicle::with(['documents' => function ($q) {
$q->where('doc_type', 'rc');
}])
->where('transporter_id', $transporterId)
->where('status', 'active')
->where('is_verified', 1)
->limit(10)
->get();
return $dataTable->render('transporter.rides.index', compact('drivers', 'vehicles'));
}
public function view($id)
{
$transporterId = auth()->guard('trans')->user()->id;
$drivers = Driver::where('transporter_id', $transporterId)->where('status', 'active')->where('is_verified', 1)->limit(10)->get();
$vehicles = Vehicle::with(['documents' => function ($q) {
$q->where('doc_type', 'rc');
}])
->where('transporter_id', $transporterId)
->where('status', 'active')
->where('is_verified', 1)
->limit(10)
->get();
$ride = BookingRide::with('booking')->findOrFail(decrypt($id));
$canSeeCustomer = TransporterSetting::where('transporter_id', $transporterId)
->where('key', 'can_see_customer')
->where('value', 1)
->exists();
return view('transporter.rides.view', compact(['ride', 'drivers', 'vehicles', 'canSeeCustomer']));
}
public function assign(Request $request, $rideId)
{
try {
$transporterId = auth()->guard('trans')->user()->id;
$ride = BookingRide::findOrFail(decrypt($rideId));
$driverId = $request->driver_id;
$vehicleId = $request->vehicle_id;
$assignType = $request->assign_type;
$isAcceptFlow = $request->is_accept_flow ?? false;
$booking = Booking::find($ride->booking_id);
$vehicle = Vehicle::findOrFail($vehicleId);
if (!empty($booking->vehicle_preferred) && $vehicle->vehicle_type_id != $booking->vehicle_preferred) {
return response()->json([
'message' => 'Selected vehicle does not match the preferred type'
], 422);
}
if ($assignType === "all") {
BookingRide::where('trip_id', $ride->trip_id)
->update([
'driver_id' => $driverId,
'vehicle_id' => $vehicleId,
'transporter_id' => $transporterId,
'status' => BookingRide::ASSIGNED,
]);
} else {
$ride->update([
'driver_id' => $driverId,
'vehicle_id' => $vehicleId,
'transporter_id' => $transporterId,
'status' => BookingRide::ASSIGNED,
]);
}
// if ($isAcceptFlow) {
// // Update transporter for this ride
// $ride->update([
// 'transporter_id' => $transporterId,
// ]);
// Update the ride request to accepted
// $rideRequest = RideRequest::where('ride_id', $ride->id)
// ->where('transporter_id', $transporterId)
// ->first();
// if ($rideRequest) {
// $rideRequest->update([
// 'status' => RideRequest::ACCEPTED,
// ]);
// // Expire other pending ride requests for the same ride
// RideRequest::where('ride_id', $ride->id)
// ->where('id', '!=', $rideRequest->id)
// ->where('status', RideRequest::PENDING)
// ->update(['status' => RideRequest::EXPIRED]);
// }
// }
return response()->json(['message' => 'Assignment successful!']);
} catch (\Illuminate\Contracts\Encryption\DecryptException $e) {
return response()->json([
'message' => 'Invalid ride ID.'
], 400);
} catch (\Illuminate\Database\Eloquent\ModelNotFoundException $e) {
return response()->json([
'message' => 'Ride or vehicle not found.'
], 404);
} catch (\Exception $e) {
return response()->json([
'message' => 'Something went wrong: ' . $e->getMessage()
], 500);
}
}
public function requestChange(Request $request, $rideId)
{
$rideId = decrypt($rideId);
$request->validate([
'reason' => 'required|string|max:500',
]);
$ride = BookingRide::findOrFail($rideId);
$transporterId = auth()->guard('trans')->user()->id;
TransporterRequest::create([
'ride_id' => $ride->id,
'transporter_id' => $transporterId,
'reason' => $request->reason,
'status' => 0, // pending
]);
return back()->with('success', 'Change request submitted successfully.');
}
public function getByType($type)
{
$query = Vehicle::query();
if ($type != 0) {
$query->where('vehicle_type_id', $type);
}
$vehicles = $query->get();
return response()->json([
'success' => true,
'data' => $vehicles
]);
}
}