From 0d89cab165b8fd54a9b82e650236110fdc524403 Mon Sep 17 00:00:00 2001 From: Kendrick Chan Date: Sat, 20 Jun 2020 21:19:56 +0800 Subject: [PATCH] Add date_status_change for job order entity and refactor rider api job order data generation #424 --- src/Controller/CMBRAPIController.php | 59 ++++----- src/Entity/JobOrder.php | 12 ++ src/Ramcar/JOStatus.php | 4 +- .../RiderAPIHandler/CMBRiderAPIHandler.php | 113 ++++++++++-------- 4 files changed, 97 insertions(+), 91 deletions(-) diff --git a/src/Controller/CMBRAPIController.php b/src/Controller/CMBRAPIController.php index 19f4d8e9..99eabe6d 100644 --- a/src/Controller/CMBRAPIController.php +++ b/src/Controller/CMBRAPIController.php @@ -88,25 +88,10 @@ class CMBRAPIController extends Controller 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 = $this->generateResultFromHandler($data); - $res->setError(true) - ->setErrorTitle($title) - ->setErrorMessage($message); - } - else - { - $res->setData($data); - } - - // response return $res->getReturnResponse(); } @@ -134,27 +119,6 @@ class CMBRAPIController extends Controller return $res->getReturnResponse(); } - protected function generateResultFromHandler($data) - { - $res = new NewAPIResult(); - - if (isset($data['error'])) - { - $message = $data['error']; - $title = $data['title']; - - $res->setError(true) - ->setErrorTitle($title) - ->setErrorMessage($message); - } - else - { - $res->setData($data); - } - - return $res; - } - public function cancelJobOrder(Request $req, RiderAPIHandlerInterface $rapi_handler) { $res = new NewAPIResult(); @@ -768,4 +732,25 @@ class CMBRAPIController extends Controller return $res->getReturnResponse(); } + protected function generateResultFromHandler($data) + { + $res = new NewAPIResult(); + + if (isset($data['error'])) + { + $message = $data['error']; + $title = $data['title']; + + $res->setError(true) + ->setErrorTitle($title) + ->setErrorMessage($message); + } + else + { + $res->setData($data); + } + + return $res; + } + } diff --git a/src/Entity/JobOrder.php b/src/Entity/JobOrder.php index e45d86e0..9e79a92b 100644 --- a/src/Entity/JobOrder.php +++ b/src/Entity/JobOrder.php @@ -340,6 +340,12 @@ class JobOrder */ protected $jo_extra; + // date that the status last changed + /** + * @ORM\Column(type="datetime", nullable=true) + */ + protected $date_status_change; + public function __construct() { $this->date_create = new DateTime(); @@ -589,6 +595,7 @@ class JobOrder { // TODO: validate status $this->status = $status; + $this->date_status_change = new DateTime(); return $this; } @@ -602,6 +609,11 @@ class JobOrder return JOStatus::getName($this->status); } + public function getDateStatusChange() + { + return $this->date_status_change; + } + public function setDeliveryInstructions($delivery_instructions) { $this->delivery_instructions = $delivery_instructions; diff --git a/src/Ramcar/JOStatus.php b/src/Ramcar/JOStatus.php index 14574845..08177198 100644 --- a/src/Ramcar/JOStatus.php +++ b/src/Ramcar/JOStatus.php @@ -7,8 +7,8 @@ class JOStatus extends NameValue const PENDING = 'pending'; // JO has no hub assigned const RIDER_ASSIGN = 'rider_assign'; // JO has hub assigned but no rider assigned const ASSIGNED = 'assigned'; // JO has hub and rider assigned - const IN_TRANSIT = 'in_transit'; // JO's rider is on his way - const IN_PROGRESS = 'in_progress'; // JO fulfillment in progress + const IN_TRANSIT = 'in_transit'; // Rider is on his way + const IN_PROGRESS = 'in_progress'; // Rider has arrived at customer's location and fulfillment is in progress const PERFORMED = 'performed'; // Rider has finished performing JO task / service const PAID = 'paid'; // Rider has finished collecting payment for JO const CANCELLED = 'cancelled'; // JO is cancelled diff --git a/src/Service/RiderAPIHandler/CMBRiderAPIHandler.php b/src/Service/RiderAPIHandler/CMBRiderAPIHandler.php index 671b6fc7..4190aa52 100644 --- a/src/Service/RiderAPIHandler/CMBRiderAPIHandler.php +++ b/src/Service/RiderAPIHandler/CMBRiderAPIHandler.php @@ -605,18 +605,8 @@ class CMBRiderAPIHandler implements RiderAPIHandlerInterface return $data; } - public function getJobOrder(Request $req) + protected function formatJobOrderData($jo) { - $required_params = [ - 'jo_id' - ]; - $data = $this->checkJO($req, $required_params, $jo); - if (isset($data['error'])) - { - $data['title'] = 'Failed Get Job Order'; - return $data; - } - $coord = $jo->getCoordinates(); $cust = $jo->getCustomer(); $cv = $jo->getCustomerVehicle(); @@ -664,47 +654,66 @@ class CMBRiderAPIHandler implements RiderAPIHandlerInterface $trade_in_type = 'none'; $data = [ - 'job_order' => [ - 'id' => $jo->getID(), - 'service_type' => $jo->getServiceType(), - 'date_schedule' => $jo->getDateSchedule()->format('Ymd H:i:s'), - 'longitude' => $coord->getLongitude(), - 'latitude' => $coord->getLatitude(), - 'status' => $jo->getStatus(), - 'customer' => [ - 'title' => $cust->getTitle(), - 'first_name' => $cust->getFirstName(), - 'last_name' => $cust->getLastName(), - 'phone_mobile' => $this->country_code . $cust->getPhoneMobile(), - 'phone_landline' => $this->country_code . $cust->getPhoneLandline(), - ], - 'vehicle' => [ - 'manufacturer' => $v->getManufacturer()->getName(), - 'make' => $v->getMake(), - 'model' => $cv->getModelYear(), - 'plate_number' => $cv->getPlateNumber(), - 'color' => $cv->getColor(), - ], - 'or_num' => $jo->getORNum(), - 'or_name' => $jo->getORName(), - 'delivery_instructions' => $jo->getDeliveryInstructions(), - 'delivery_address' => $jo->getDeliveryAddress(), - 'landmark' => $jo->getLandmark(), - 'invoice' => [ - 'discount' => $inv->getDiscount(), - 'trade_in' => $inv->getTradeIn(), - 'total_price' => $inv->getTotalPrice(), - 'vat' => $inv->getVat(), - 'items' => $inv_items, - ], - 'mode_of_payment' => $jo->getModeOfPayment(), - 'trade_in_type' => $trade_in_type, - 'promo' => $promo_data, - // TODO: load the actual - 'has_warranty_doc' => false, - 'flag_coolant' => $jo->hasCoolant(), - 'has_motolite' => $cv->hasMotoliteBattery(), - ] + 'id' => $jo->getID(), + 'service_type' => $jo->getServiceType(), + 'date_schedule' => $jo->getDateSchedule()->format('Ymd H:i:s'), + 'longitude' => $coord->getLongitude(), + 'latitude' => $coord->getLatitude(), + 'status' => $jo->getStatus(), + 'customer' => [ + 'title' => $cust->getTitle(), + 'first_name' => $cust->getFirstName(), + 'last_name' => $cust->getLastName(), + 'phone_mobile' => $this->country_code . $cust->getPhoneMobile(), + 'phone_landline' => $this->country_code . $cust->getPhoneLandline(), + ], + 'vehicle' => [ + 'manufacturer' => $v->getManufacturer()->getName(), + 'make' => $v->getMake(), + 'model' => $cv->getModelYear(), + 'plate_number' => $cv->getPlateNumber(), + 'color' => $cv->getColor(), + ], + 'or_num' => $jo->getORNum(), + 'or_name' => $jo->getORName(), + 'delivery_instructions' => $jo->getDeliveryInstructions(), + 'delivery_address' => $jo->getDeliveryAddress(), + 'landmark' => $jo->getLandmark(), + 'invoice' => [ + 'discount' => $inv->getDiscount(), + 'trade_in' => $inv->getTradeIn(), + 'total_price' => $inv->getTotalPrice(), + 'vat' => $inv->getVat(), + 'items' => $inv_items, + ], + 'mode_of_payment' => $jo->getModeOfPayment(), + 'trade_in_type' => $trade_in_type, + 'promo' => $promo_data, + // TODO: load the actual + 'has_warranty_doc' => false, + 'flag_coolant' => $jo->hasCoolant(), + 'has_motolite' => $cv->hasMotoliteBattery(), + ]; + + return $data; + } + + public function getJobOrder(Request $req) + { + $required_params = [ + 'jo_id' + ]; + $data = $this->checkJO($req, $required_params, $jo); + if (isset($data['error'])) + { + $data['title'] = 'Failed Get Job Order'; + return $data; + } + + $jo_data = $this->formatJobOrderData($jo); + + $data = [ + 'job_order' => $jo_data ]; return $data;