Ejemplo n.º 1
0
 public function assignDriver()
 {
     $input = Input::all();
     $response = array();
     try {
         $redis = new ApiRedis();
         $db = $this->redisDb;
         $driverAssignHelper = new DriverAssignHelper();
         $input['driver_id'] = isset($input['driver_id']) ? $input['driver_id'] : 0;
         $input['order_id'] = isset($input['order_id']) ? $input['order_id'] : 0;
         //$input['zone_id'] = (isset($input['zone_id']))  ? $input['zone_id'] : 0;
         if ($input['driver_id'] > 0 && $input['order_id'] > 0) {
             ## Automate Assign
             $od = $redis->getOrderDetails($input['order_id'], $db);
             if (!$od) {
                 $response['status'] = "0";
                 $response['msg'] = "Order details not found.";
                 return Response::json($response);
             }
             $input['zone_id'] = $od['market_office_city_delivery_zone_id'];
             $drivers = $driverAssignHelper->chk_driverInventory($od, $input['driver_id']);
             if (!sizeof($drivers)) {
                 $response['status'] = "0";
                 $response['msg'] = "Driver does not have sufficient inventory.";
                 return Response::json($response);
             }
             $driver = $driverAssignHelper->chk_driverStatus($drivers, $db);
             if (!$driver) {
                 $response['status'] = "0";
                 $response['msg'] = "Driver onfleet status is not correct.";
                 return Response::json($response);
             }
             ## Create Destination
             $destination = $driverAssignHelper->createDestination($od);
             if (!$destination) {
                 $response['status'] = "0";
                 $response['msg'] = "Destination not created.";
                 return Response::json($response);
             }
             $task_status = $driverAssignHelper->assignTask($od, $destination, $driver);
             if (!$task_status) {
                 $response['status'] = "0";
                 $response['msg'] = "OnFleet task creation failed.";
                 return Response::json($response);
             }
             $redis->doLocked($driver['id'], $od['id'], $db);
             ## Deduct inventory
             ## Update order table
             $inventory_updated = $driverAssignHelper->updateDB($od, $driver, $task_status);
             if ($inventory_updated) {
                 $data = ['assigned_time' => time(), 'task_id' => $task_status->id, 'worker_id' => $task_status->worker, 'driver_id' => $driver['id'], 'driver_name' => $driver['first_name'] . " " . $driver['last_name'], 'trackingURL' => $task_status->trackingURL];
                 $redis->updateOrderHash($input['order_id'], $data, $db);
                 $driverAssignHelper->assignedState($db, $input['order_id'], $input['zone_id']);
                 $response['status'] = "1";
                 $response['msg'] = "Driver successfully assigned.";
             } else {
                 $response['status'] = "0";
                 $response['msg'] = "Database not updated.";
             }
         } else {
             $response['status'] = "0";
             $response['msg'] = "Order Id or Driver Id does not exists.";
         }
         return Response::json($response);
     } catch (Exception $e) {
         Log::error($e);
         $response['status'] = '0';
         $msg = (array) $e->getMessage();
         $response['msg'] = $msg[0];
         return Response::json($response);
     }
 }
Ejemplo n.º 2
0
 public function chk_driverStatus($drivers, $redisDB)
 {
     // from on fleet
     $return = false;
     $drivers = array_keys($drivers);
     $redis = new ApiRedis();
     $drivers = $redis->filterDrivers($drivers, $redisDB);
     if (sizeof($drivers)) {
         $drivers = $this->driverDetails($drivers);
         foreach ($drivers as $d) {
             if ($d['onfleet_id']) {
                 $onfleetClass = new OnFleet();
                 $response = $onfleetClass->getSingleWorker(["id" => $d['onfleet_id']]);
                 if (isset($response['output'])) {
                     $response = $response['output'];
                     if ($response->onDuty && count($response->tasks) == 0 && !$response->activeTask && $redis->isLockedRev($d['id'], $redisDB)) {
                         $redis->doLocked($d['id'], 0, $redisDB);
                         $return = $d;
                         break;
                     }
                 }
                 //$return = $d;
             }
         }
     }
     return $return;
 }