diff --git a/config/cmb.services.yaml b/config/cmb.services.yaml index 5f24e525..3d9fd7a3 100644 --- a/config/cmb.services.yaml +++ b/config/cmb.services.yaml @@ -5,6 +5,7 @@ parameters: latitude: 14.6091 longitude: 121.0223 image_upload_directory: '%kernel.project_dir%/public/uploads' + jo_extra_upload_directory: '%kernel.project_dir%/public/uploads/jo_extra' job_order_refresh_interval: 300000 api_acl_file: 'api_acl.yaml' api_access_key: 'api_access_keys' @@ -12,6 +13,7 @@ parameters: app_access_key: 'access_keys' cvu_brand_id: "%env(CVU_BRAND_ID)%" country_code: "%env(COUNTRY_CODE)%" + api_version: "%env(API_VERSION)%" services: # default configuration for services in *this* file @@ -73,6 +75,7 @@ services: $pass: "%env(RT_PASS)%" $usage_type: "%env(RT_USAGE_TYPE)%" $shortcode: "%env(RT_SHORTCODE)%" + $dr_url: "https://resqaws.jankstudio.com/sms/delivery_receipt" App\Service\MQTTClient: arguments: @@ -167,7 +170,7 @@ services: # job order generator App\Service\JobOrderHandler\CMBJobOrderHandler: arguments: - $country_code: "%env(COUNTRY_CODE)%" + $country_code: "%env(COUNTRY_CODE)%" #job order generator interface App\Service\JobOrderHandlerInterface: "@App\\Service\\JobOrderHandler\\CMBJobOrderHandler" @@ -187,13 +190,13 @@ services: App\Service\RiderAssignmentHandlerInterface: "@App\\Service\\RiderAssignmentHandler\\CMBRiderAssignmentHandler" # rider API service - App\Service\RiderAPIHandler\CMBRiderAPIHandler: + App\Service\RiderAPIHandler\CMBRiderAPIHandler: arguments: $country_code: "%env(COUNTRY_CODE)%" + $upload_dir: "%jo_extra_upload_directory%" - # rider API interface App\Service\RiderAPIHandlerInterface: "@App\\Service\\RiderAPIHandler\\CMBRiderAPIHandler" - + # map manager #App\Service\GISManager\Bing: ~ App\Service\GISManager\OpenStreet: ~ @@ -229,6 +232,14 @@ services: $loc_key: "%env(LOCATION_RIDER_ACTIVE_KEY)%" $status_key: "%env(STATUS_RIDER_KEY)%" + # inventory manager + App\Service\InventoryManager: + arguments: + $api_url: "%env(INVENTORY_API_URL)%" + $api_ocp_key: "%env(INVENTORY_API_OCP)%" + $api_auth_prefix: "%env(INVENTORY_API_AUTH_TOKEN_PREFIX)%" + $api_auth_token: "%env(INVENTORY_API_AUTH_TOKEN)%" + # API logging App\EventSubscriber\LogSubscriber: arguments: diff --git a/config/packages/security.yaml b/config/packages/security.yaml index 4339eba4..86a9b1d7 100644 --- a/config/packages/security.yaml +++ b/config/packages/security.yaml @@ -46,6 +46,10 @@ security: provider: api_key_user_provider user_checker: Catalyst\AuthBundle\Service\UserChecker + cmb_rider_api: + pattern: ^\/cmbrapi\/ + security: false + main: provider: user_provider form_login: diff --git a/config/resq.services.yaml b/config/resq.services.yaml index 82eb4cc5..05fd3b1a 100644 --- a/config/resq.services.yaml +++ b/config/resq.services.yaml @@ -74,6 +74,7 @@ services: $pass: "%env(RT_PASS)%" $usage_type: "%env(RT_USAGE_TYPE)%" $shortcode: "%env(RT_SHORTCODE)%" + $dr_url: "https://resqaws.jankstudio.com/sms/delivery_receipt" App\Service\MQTTClient: arguments: diff --git a/config/routes/cmb_rider_api.yaml b/config/routes/cmb_rider_api.yaml new file mode 100644 index 00000000..eb4f2186 --- /dev/null +++ b/config/routes/cmb_rider_api.yaml @@ -0,0 +1,131 @@ +# rider app api + +cmb_rapi_register: + path: /cmbrapi/register + controller: App\Controller\CMBRAPIController::register + methods: [POST] + +cmb_rapi_login: + path: /cmbrapi/login + controller: App\Controller\CMBRAPIController::login + methods: [POST] + +cmb_rapi_logout: + path: /cmbrapi/logout + controller: App\Controller\CMBRAPIController::logout + methods: [POST] + +cmb_rapi_jo_get: + path: /cmbrapi/joborder + controller: App\Controller\CMBRAPIController::getJobOrder + methods: [GET] + +cmb_rapi_jo_accept: + path: /cmbrapi/joaccept + controller: App\Controller\CMBRAPIController::acceptJobOrder + methods: [POST] + +cmb_rapi_jo_cancel: + path: /cmbrapi/jocancel + controller: App\Controller\CMBRAPIController::cancelJobOrder + methods: [POST] + +cmb_rapi_arrive: + path: /cmbrapi/arrive + controller: App\Controller\CMBRAPIController::arrive + methods: [POST] + +cmb_rapi_payment: + path: /cmbrapi/jopayment + controller: App\Controller\CMBRAPIController::payment + methods: [POST] + +cmb_rapi_hub_arrive: + path: /cmbrapi/hub_arrive + controller: App\Controller\CMBRAPIController::hubArrive + methods: [POST] + +cmb_rapi_promos: + path: /cmbrapi/promos + controller: App\Controller\CMBRAPIController::getPromos + methods: [GET] + +cmb_rapi_batteries: + path: /cmbrapi/batteries + controller: App\Controller\CMBRAPIController::getBatteries + methods: [GET] + +cmb_rapi_change_service: + path: /cmbrapi/service + controller: App\Controller\CMBRAPIController::changeService + methods: [POST] + +cmb_rapi_available: + path: /cmbrapi/available + controller: App\Controller\CMBRAPIController::available + methods: [POST] + +cmb_rapi_jo_history: + path: /cmbrapi/johistory/{period} + controller: App\Controller\CMBRAPIController::getJobOrderHistory + methods: [GET] + +cmb_rapi_assigned_jo_get: + path: /cmbrapi/assignedjos + controller: App\Controller\CMBRAPIController::getAssignedJobOrders + methods: [GET] + +cmb_rapi_jo_in_transit: + path: /cmbrapi/jotransit + controller: App\Controller\CMBRAPIController::setJobOrderInTransit + methods: [POST] + +cmb_rapi_invoice_generate: + path: /cmbrapi/generateinvoice + controller: App\Controller\CMBRAPIController::generateInvoice + methods: [GET] + +cmb_rapi_online: + path: /cmbrapi/online + controller: App\Controller\CMBRAPIController::goOnline + methods: [POST] + +cmb_rapi_offline: + path: /cmbrapi/offline + controller: App\Controller\CMBRAPIController::goOffline + methods: [POST] + +cmb_rapi_jo_start: + path: /cmbrapi/jostart + controller: App\Controller\CMBRAPIController::startJobOrder + methods: [POST] + +cmb_rapi_jo_complete: + path: /cmbrapi/jocomplete + controller: App\Controller\CMBRAPIController::completeJobOrder + methods: [POST] + +cmb_rapi_jo_set_active: + path: /cmbrapi/joactive + controller: App\Controller\CMBRAPIController::setActiveJobOrder + methods: [POST] + +cmb_rapi_jo_reject: + path: /cmbrapi/joreject + controller: App\Controller\CMBRAPIController::rejectJobOrder + methods: [POST] + +cmb_rapi_jo_odometer: + path: /cmbrapi/odometer + controller: App\Controller\CMBRAPIController::setOdometer + methods: [POST] + +cmb_rapi_jo_arrive_photos_upload: + path: /cmbrapi/uploadarrivephotos + controller: App\Controller\CMBRAPIController::uploadArrivePhotos + methods: [POST] + +cmb_rapi_jo_finish_photos_upload: + path: /cmbrapi/uploadfinishphotos + controller: App\Controller\CMBRAPIController::uploadFinishPhotos + methods: [POST] diff --git a/src/Controller/CMBRAPIController.php b/src/Controller/CMBRAPIController.php new file mode 100644 index 00000000..2d503831 --- /dev/null +++ b/src/Controller/CMBRAPIController.php @@ -0,0 +1,645 @@ +register($req); + + if (isset($data['error'])) + { + $message = $data['error']; + $title = $data['title']; + + $res->setError(true) + ->setErrorTitle($title) + ->setErrorMessage($message); + } + else + { + $res->setData($data); + } + + // response + return $res->getReturnResponse(); + } + + public function login(Request $req, RiderAPIHandlerInterface $rapi_handler) + { + $res = new NewAPIResult(); + + $data = $rapi_handler->login($req); + + if (isset($data['error'])) + { + $message = $data['error']; + $title = $data['title']; + + $res->setError(true) + ->setErrorTitle($title) + ->setErrorMessage($message); + } + else + { + $res->setData($data); + } + + // response + return $res->getReturnResponse(); + } + + public function logout(Request $req, RiderAPIHandlerInterface $rapi_handler) + { + $res = new NewAPIResult(); + + $data = $rapi_handler->logout($req); + + if (isset($data['error'])) + { + $message = $data['error']; + $title = $data['title']; + + $res->setError(true) + ->setErrorTitle($title) + ->setErrorMessage($message); + } + else + { + $res->setData($data); + } + + // response + return $res->getReturnResponse(); + } + + public function getJobOrder(Request $req, RiderAPIHandlerInterface $rapi_handler) + { + $res = new NewAPIResult(); + + $data = $rapi_handler->getJobOrder($req); + + if (isset($data['error'])) + { + $message = $data['error']; + $title = $data['title']; + + $res->setError(true) + ->setErrorTitle($title) + ->setErrorMessage($message); + } + else + { + $res->setData($data); + } + + // response + return $res->getReturnResponse(); + } + + public function acceptJobOrder(Request $req, RiderAPIHandlerInterface $rapi_handler) + { + $res = new NewAPIResult(); + + $data = $rapi_handler->acceptJobOrder($req); + + if (isset($data['error'])) + { + $message = $data['error']; + $title = $data['title']; + + $res->setError(true) + ->setErrorTitle($title) + ->setErrorMessage($message); + } + else + { + $res->setData($data); + } + + // response + return $res->getReturnResponse(); + } + + public function cancelJobOrder(Request $req, RiderAPIHandlerInterface $rapi_handler) + { + $res = new NewAPIResult(); + + $data = $rapi_handler->cancelJobOrder($req); + + if (isset($data['error'])) + { + $message = $data['error']; + $title = $data['title']; + + $res->setError(true) + ->setErrorTitle($title) + ->setErrorMessage($message); + } + else + { + $res->setData($data); + } + + // response + return $res->getReturnResponse(); + + } + + public function arrive(Request $req, RiderAPIHandlerInterface $rapi_handler) + { + $res = new NewAPIResult(); + + $data = $rapi_handler->arrive($req); + + if (isset($data['error'])) + { + $message = $data['error']; + $title = $data['title']; + + $res->setError(true) + ->setErrorTitle($title) + ->setErrorMessage($message); + } + else + { + $res->setData($data); + } + + // response + return $res->getReturnResponse(); + } + + public function hubArrive(Request $req, RiderAPIHandlerInterface $rapi_handler) + { + $res = new NewAPIResult(); + + $data = $rapi_handler->hubArrive($req); + + if (isset($data['error'])) + { + $message = $data['error']; + $title = $data['title']; + + $res->setError(true) + ->setErrorTitle($title) + ->setErrorMessage($message); + } + else + { + $res->setData($data); + } + + // response + return $res->getReturnResponse(); + } + + public function payment(Request $req, RiderAPIHandlerInterface $rapi_handler) + { + $res = new NewAPIResult(); + + $data = $rapi_handler->payment($req); + + if (isset($data['error'])) + { + $message = $data['error']; + $title = $data['title']; + + $res->setError(true) + ->setErrorTitle($title) + ->setErrorMessage($message); + } + else + { + $res->setData($data); + } + + // response + return $res->getReturnResponse(); + } + + public function available(Request $req, RiderAPIHandlerInterface $rapi_handler) + { + $res = new NewAPIResult(); + + $data = $rapi_handler->available($req); + + if (isset($data['error'])) + { + $message = $data['error']; + $title = $data['title']; + + $res->setError(true) + ->setErrorTitle($title) + ->setErrorMessage($message); + } + else + { + $res->setData($data); + } + + // response + return $res->getReturnResponse(); + } + + public function getPromos(Request $req, RiderAPIHandlerInterface $rapi_handler) + { + $res = new NewAPIResult(); + + $data = $rapi_handler->getPromos($req); + + if (isset($data['error'])) + { + $message = $data['error']; + $title = $data['title']; + + $res->setError(true) + ->setErrorTitle($title) + ->setErrorMessage($message); + } + else + { + $res->setData($data); + } + + // response + return $res->getReturnResponse(); + } + + public function getBatteries(Request $req, RiderAPIHandlerInterface $rapi_handler) + { + $res = new NewAPIResult(); + + $data = $rapi_handler->getBatteries($req); + + if (isset($data['error'])) + { + $message = $data['error']; + $title = $data['title']; + + $res->setError(true) + ->setErrorTitle($title) + ->setErrorMessage($message); + } + else + { + $res->setData($data); + } + + // response + return $res->getReturnResponse(); + } + + public function changeService(Request $req, RiderAPIHandlerInterface $rapi_handler) + { + $res = new NewAPIResult(); + + $data = $rapi_handler->changeService($req); + + if (isset($data['error'])) + { + $message = $data['error']; + $title = $data['title']; + + $res->setError(true) + ->setErrorTitle($title) + ->setErrorMessage($message); + } + else + { + $res->setData($data); + } + + // response + return $res->getReturnResponse(); + } + + public function getJobOrderHistory(Request $req, $period, RiderAPIHandlerInterface $rapi_handler) + { + $res = new NewAPIResult(); + + $data = $rapi_handler->getJobOrderHistory($req, $period); + + if (isset($data['error'])) + { + $message = $data['error']; + $title = $data['title']; + + $res->setError(true) + ->setErrorTitle($title) + ->setErrorMessage($message); + } + else + { + $res->setData($data); + } + + // response + return $res->getReturnResponse(); + + } + + public function getAssignedJobOrders(Request $req, RiderAPIHandlerInterface $rapi_handler) + { + $res = new NewAPIResult(); + + $data = $rapi_handler->getAssignedJobOrders($req); + + if (isset($data['error'])) + { + $message = $data['error']; + $title = $data['title']; + + $res->setError(true) + ->setErrorTitle($title) + ->setErrorMessage($message); + } + else + { + $res->setData($data); + } + + // response + return $res->getReturnResponse(); + + } + + public function setJobOrderInTransit(Request $req, RiderAPIHandlerInterface $rapi_handler) + { + $res = new NewAPIResult(); + + $data = $rapi_handler->setJobOrderInTransit($req); + + if (isset($data['error'])) + { + $message = $data['error']; + $title = $data['title']; + + $res->setError(true) + ->setErrorTitle($title) + ->setErrorMessage($message); + } + else + { + $res->setData($data); + } + + // response + return $res->getReturnResponse(); + + } + + public function generateInvoice(Request $req, RiderAPIHandlerInterface $rapi_handler) + { + $res = new NewAPIResult(); + + $data = $rapi_handler->generateInvoice($req); + + if (isset($data['error'])) + { + $message = $data['error']; + $title = $data['title']; + + $res->setError(true) + ->setErrorTitle($title) + ->setErrorMessage($message); + } + else + { + $res->setData($data); + } + + // response + return $res->getReturnResponse(); + + } + + public function goOnline(Request $req, RiderAPIHandlerInterface $rapi_handler) + { + $res = new NewAPIResult(); + + $data = $rapi_handler->goOnline($req); + + if (isset($data['error'])) + { + $message = $data['error']; + $title = $data['title']; + + $res->setError(true) + ->setErrorTitle($title) + ->setErrorMessage($message); + } + else + { + $res->setData($data); + } + + // response + return $res->getReturnResponse(); + } + + public function goOffline(Request $req, RiderAPIHandlerInterface $rapi_handler) + { + $res = new NewAPIResult(); + + $data = $rapi_handler->goOffline($req); + + if (isset($data['error'])) + { + $message = $data['error']; + $title = $data['title']; + + $res->setError(true) + ->setErrorTitle($title) + ->setErrorMessage($message); + } + else + { + $res->setData($data); + } + + // response + return $res->getReturnResponse(); + } + + public function startJobOrder(Request $req, RiderAPIHandlerInterface $rapi_handler) + { + $res = new NewAPIResult(); + + $data = $rapi_handler->startJobOrder($req); + + if (isset($data['error'])) + { + $message = $data['error']; + $title = $data['title']; + + $res->setError(true) + ->setErrorTitle($title) + ->setErrorMessage($message); + } + else + { + $res->setData($data); + } + + // response + return $res->getReturnResponse(); + } + + public function completeJobOrder(Request $req, RiderAPIHandlerInterface $rapi_handler) + { + $res = new NewAPIResult(); + + $data = $rapi_handler->completeJobOrder($req); + + if (isset($data['error'])) + { + $message = $data['error']; + $title = $data['title']; + + $res->setError(true) + ->setErrorTitle($title) + ->setErrorMessage($message); + } + else + { + $res->setData($data); + } + + // response + return $res->getReturnResponse(); + } + + public function setActiveJobOrder(Request $req, RiderAPIHandlerInterface $rapi_handler) + { + $res = new NewAPIResult(); + + $data = $rapi_handler->setActiveJobOrder($req); + + if (isset($data['error'])) + { + $message = $data['error']; + $title = $data['title']; + + $res->setError(true) + ->setErrorTitle($title) + ->setErrorMessage($message); + } + else + { + $res->setData($data); + } + + // response + return $res->getReturnResponse(); + } + + public function rejectJobOrder(Request $req, RiderAPIHandlerInterface $rapi_handler) + { + $res = new NewAPIResult(); + + $data = $rapi_handler->rejectJobOrder($req); + + if (isset($data['error'])) + { + $message = $data['error']; + $title = $data['title']; + + $res->setError(true) + ->setErrorTitle($title) + ->setErrorMessage($message); + } + else + { + $res->setData($data); + } + + // response + return $res->getReturnResponse(); + } + + public function setOdometer(Request $req, RiderAPIHandlerInterface $rapi_handler) + { + $res = new NewAPIResult(); + + $data = $rapi_handler->setOdometer($req); + + if (isset($data['error'])) + { + $message = $data['error']; + $title = $data['title']; + + $res->setError(true) + ->setErrorTitle($title) + ->setErrorMessage($message); + } + else + { + $res->setData($data); + } + + // response + return $res->getReturnResponse(); + } + + public function uploadArrivePhotos(Request $req, RiderAPIHandlerInterface $rapi_handler) + { + $res = new NewAPIResult(); + + $data = $rapi_handler->uploadArrivePhotos($req); + + if (isset($data['error'])) + { + $message = $data['error']; + $title = $data['title']; + + $res->setError(true) + ->setErrorTitle($title) + ->setErrorMessage($message); + } + else + { + $res->setData($data); + } + + // response + return $res->getReturnResponse(); + } + + public function uploadFinishPhotos(Request $req, RiderAPIHandlerInterface $rapi_handler) + { + $res = new NewAPIResult(); + + $data = $rapi_handler->uploadFinishPhotos($req); + + if (isset($data['error'])) + { + $message = $data['error']; + $title = $data['title']; + + $res->setError(true) + ->setErrorTitle($title) + ->setErrorMessage($message); + } + else + { + $res->setData($data); + } + + // response + return $res->getReturnResponse(); + } +} diff --git a/src/Entity/JOExtra.php b/src/Entity/JOExtra.php new file mode 100644 index 00000000..4f5d40b6 --- /dev/null +++ b/src/Entity/JOExtra.php @@ -0,0 +1,122 @@ +id; + } + + public function setBeforeSpeedImageFilename($image_filename) + { + $this->before_speed_image_filename = $image_filename; + return $this; + } + + public function getBeforeSpeedImageFilename($image_filename) + { + return $this->before_speed_image_filename; + } + + public function setBeforePlateNumImageFilename($image_filename) + { + $this->before_plate_num_image_filename = $image_filename; + return $this; + } + + public function getBeforePlateNumImageFilename($image_filename) + { + return $this->before_plate_num_image_filename; + } + + public function setBeforeBattImageFilename($image_filename) + { + $this->before_batt_image_filename = $image_filename; + return $this; + } + + public function getBeforeBattImageFilename($image_filename) + { + return $this->before_batt_image_filename; + } + public function setAfterSpeedImageFilename($image_filename) + { + $this->after_speed_image_filename = $image_filename; + return $this; + } + + public function getAfterSpeedImageFilename($image_filename) + { + return $this->after_speed_image_filename; + } + + public function setAfterPlateNumImageFilename($image_filename) + { + $this->after_plate_num_image_filename = $image_filename; + return $this; + } + + public function getAfterPlateNumImageFilename($image_filename) + { + return $this->after_plate_num_image_filename; + } + + public function setAfterBattImageFilename($image_filename) + { + $this->after_batt_image_filename = $image_filename; + return $this; + } + + public function getAfterBattImageFilename($image_filename) + { + return $this->after_batt_image_filename; + } + + +} diff --git a/src/Entity/JobOrder.php b/src/Entity/JobOrder.php index 8bcdbb77..a174fb96 100644 --- a/src/Entity/JobOrder.php +++ b/src/Entity/JobOrder.php @@ -334,6 +334,12 @@ class JobOrder */ protected $phone_mobile; + // link to JOExtra + /** + * @ORM\OneToOne(targetEntity="JOExtra") + */ + protected $jo_extra; + public function __construct() { $this->date_create = new DateTime(); @@ -962,5 +968,15 @@ class JobOrder return $this->phone_mobile; } + public function setJOExtra(JOExtra $jo_extra) + { + $this->jo_extra = $jo_extra; + return $this; + } + + public function getJOExtra() + { + return $this->jo_extra; + } } diff --git a/src/Ramcar/CMBJOEventType.php b/src/Ramcar/CMBJOEventType.php new file mode 100644 index 00000000..12dd0264 --- /dev/null +++ b/src/Ramcar/CMBJOEventType.php @@ -0,0 +1,36 @@ + 'Created', + 'hub_assign' => 'Assigned to Hub', + 'rider_assign' => 'Assigned Rider', + 'cancel' => 'Cancelled', + 'fulfill' => 'Fulfilled', + 'open_edit' => 'Open Edit', + 'requeue' => 'Requeue', + 'accept' => 'Rider Accept', + 'rider_in_transit' => 'Rider in Transit', + 'arrive' => 'Rider Arrive', + 'rider_start' => 'Rider Start', + 'rider_edit' => 'Rider Edit', + 'paid' => 'Paid', + ]; +} diff --git a/src/Ramcar/NewAPIResult.php b/src/Ramcar/NewAPIResult.php new file mode 100644 index 00000000..5c46bc21 --- /dev/null +++ b/src/Ramcar/NewAPIResult.php @@ -0,0 +1,92 @@ +err_title = ''; + $this->err_flag = false; + $this->err_message = ''; + $this->data = []; + } + + public function setError($flag = true) + { + $this->err_flag = $flag; + return $this; + } + + public function isError() + { + return $this->err_flag; + } + + public function setErrorMessage($message) + { + $this->err_message = $message; + return $this; + } + + public function getErrorMessage() + { + return $this->err_message; + } + + public function setData($data) + { + $this->data = $data; + return $this; + } + + public function getData() + { + return $this->data; + } + + public function setErrorTitle($title) + { + $this->err_title = $title; + return $this; + } + + public function getErrorTitle() + { + return $this->err_title; + } + + + public function getReturnResponse() + { + if ($this->isError()) + $status = 'error'; + else + $status = 'success'; + + if (count($this->data) == 0) + $this->data = new \stdClass(); + + $return_data = [ + 'error' => [ + 'title' => $this->err_title, + 'status' => $status, + 'message' => $this->err_message + ], + 'data' => $this->data + ]; + + // $json_data = json_encode($return_data, JSON_NUMERIC_CHECK); + $json_data = json_encode($return_data); + $json = new Response($json_data); + + return $json; + } +}