File: /var/www/html/dashboard.orbiwheels.com/app/Http/Controllers/Transporter/TripController.php
<?php
namespace App\Http\Controllers\Transporter;
use App\DataTables\Transporter\TripDataTable;
use App\Http\Controllers\Controller;
use App\Models\Booking;
use App\Models\BookingRide;
use App\Models\Driver;
use App\Models\RideRequest;
use App\Models\Trip;
use App\Models\Vehicle;
use Illuminate\Http\Request;
class TripController extends Controller
{
// public function index(TripDataTable $dataTable)
// {
// $transporterId = auth()->guard('trans')->user()->id;
// $drivers = Driver::where('transporter_id', $transporterId)->where('status', 'active')->get();
// $vehicles = Vehicle::where('transporter_id', $transporterId)->where('status', 'active')->get();
// return $dataTable->render('transporter.trip.index', compact('drivers', 'vehicles'));
// }
public function assign(Request $request, $requestId)
{
try {
$transporterId = auth()->guard('trans')->id();
// dd(decrypt($requestId));
$rideRequest = RideRequest::findOrFail(decrypt($requestId));
if (!$rideRequest) {
return response()->json(['message' => 'RideRequest not found for ID: '], 404);
}
$vehicleId = $request->vehicle_id ?? null;
$driverId = $request->driver_id ?? null;
$isAcceptFlow = $request->is_accept_flow ?? false;
$tripId = $rideRequest->trip_id ?? null;
if (!$tripId) {
return response()->json(['message' => 'Trip ID not found in request.'], 404);
}
$bookingRides = BookingRide::where('trip_id', $tripId)
->where('status', BookingRide::PENDING)
->get();
if ($bookingRides->isEmpty()) {
return response()->json(['message' => 'No pending rides found for this trip.'], 404);
}
$booking = Booking::findOrFail($rideRequest->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);
}
foreach ($bookingRides as $ride) {
$ride->update([
'driver_id' => $driverId,
'vehicle_id' => $vehicleId,
'transporter_id' => $transporterId,
'status' => BookingRide::ASSIGNED,
]);
}
$trip = Trip::find($tripId);
if ($trip && !$trip->transporter_id) {
$trip->update(['transporter_id' => $transporterId]);
}
if ($isAcceptFlow) {
$rideRequest->update(['status' => RideRequest::ACCEPTED]);
RideRequest::where('trip_id', $tripId)
->where('id', '!=', $rideRequest->id)
->where('status', RideRequest::PENDING)
->update(['status' => RideRequest::EXPIRED]);
}
return response()->json(['message' => 'All rides for this trip have been assigned successfully!']);
} catch (\Illuminate\Contracts\Encryption\DecryptException $e) {
return response()->json(['message' => 'Invalid ride request ID.'], 400);
} catch (\Illuminate\Database\Eloquent\ModelNotFoundException $e) {
return response()->json(['message' => 'BookingRide, RideRequest, or Vehicle not found.' . $e->getMessage()], 404);
} catch (\Exception $e) {
return response()->json(['message' => 'Something went wrong: ' . $e->getMessage()], 500);
}
}
}