HEX
Server: Apache/2.4.58 (Ubuntu)
System: Linux ip-172-26-0-120 6.17.0-1009-aws #9~24.04.2-Ubuntu SMP Fri Mar 6 23:50:29 UTC 2026 x86_64
User: ubuntu (1000)
PHP: 8.3.6
Disabled: NONE
Upload Files
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);
        }
    }
}