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); } }
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; }