From baaa8327941883ca42dd15c4a51e13985acb7cdc Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Mon, 12 Jul 2021 09:26:28 +0000 Subject: [PATCH] Modify getJOHIstory in JobOrderController . #591 --- config/api_acl.yaml | 2 + src/Controller/ResqAPI/JobOrderController.php | 217 +++++++++++------- 2 files changed, 140 insertions(+), 79 deletions(-) diff --git a/config/api_acl.yaml b/config/api_acl.yaml index 199e34c8..fb2c8e5d 100644 --- a/config/api_acl.yaml +++ b/config/api_acl.yaml @@ -152,3 +152,5 @@ access_keys: label: Get Ongoing Job Order - id: mobile_jo.cancel label: Cancel Job Order + - id: mobile_jo.get.history + label: Get Job Order History diff --git a/src/Controller/ResqAPI/JobOrderController.php b/src/Controller/ResqAPI/JobOrderController.php index 4352901f..0daa1fc8 100644 --- a/src/Controller/ResqAPI/JobOrderController.php +++ b/src/Controller/ResqAPI/JobOrderController.php @@ -24,6 +24,7 @@ use App\Ramcar\TradeInType; use App\Ramcar\JOEventType; use App\Ramcar\HubCriteria; use App\Ramcar\ModeOfPayment; +use App\Ramcar\APIRiderStatus; use App\Service\InvoiceGeneratorInterface; use App\Service\RisingTideGateway; @@ -38,6 +39,7 @@ use App\Service\HubFilterLogger; use App\Service\HubFilteringGeoChecker; use App\Service\MapTools; use App\Service\MobileAPIHandler; +use App\Service\RiderTracker; use App\Entity\JobOrder; use App\Entity\CustomerVehicle; @@ -434,99 +436,44 @@ class JobOrderController extends APIController return new APIResponse(true, 'Job order cancelled', $data); } - // TODO: modify for MobileUser - public function getJOHistory(Request $req, EntityManagerInterface $em) + public function getJOHistory(Request $req, EntityManagerInterface $em, MobileAPIHandler $mah, + RiderTracker $rt) { - $res = $this->checkParamsAndKey($req, $em, []); - if ($res->isError()) - return $res->getReturnResponse(); + $this->denyAccessUnlessGranted('mobile_jo.get.history', null, 'No access.'); - // get customer - $cust = $this->session->getCustomer(); + $required_params = []; + $msg = $this->checkRequiredParameters($req, $required_params); + if ($msg) + return new APIResponse(false, $msg); + + // get capi user to link to mobile user + $user_id = $this->getUser()->getID(); + + // get mobile user + $mobile_user = $mah->findMobileUser($user_id); + + if ($mobile_user == null) + return new APIResponse(false, 'No mobile user found.'); + + // customer + $cust = $mobile_user->getCustomer(); if ($cust == null) - { - $res->setError(true) - ->setErrorMessage('No customer information found'); - return $res->getReturnResponse(); - } + return new APIResponse(false, 'No customer information found'); // get job orders $all_jo_data = []; $jos = $cust->getJobOrders(); foreach ($jos as $jo) { - $status = $jo->getStatus(); - - $jo_data = [ - 'id' => $jo->getID(), - 'date_create' => $jo->getDateCreate()->format('M d, Y'), - 'service_type' => $jo->getServiceType(), - 'status' => $status, - ]; - - // customer vehicle and warranty - $cv = $jo->getCustomerVehicle(); - - // get latest warranty using plate number - $warranty = $this->findWarranty($cv->getPlateNumber()); - - $jo_data['customer_vehicle'] = [ - 'id' => $cv->getID(), - 'plate_number' => $cv->getPlateNumber(), - 'warranty' => $warranty, - ]; - - // rider - $rider = $jo->getRider(); - if ($rider != null) - { - $jo_data['rider'] = $rider->getFullName(); - } - - // invoice items - $items = []; - $jo_items = $jo->getInvoice()->getItems(); - foreach ($jo_items as $item) - { - $items[] = [ - 'id' => $item->getID(), - 'title' => $item->getTitle(), - 'qty' => $item->getQuantity(), - 'price' => $item->getPrice(), - ]; - } - - $jo_data['items'] = $items; - - - // dates depending on status - switch ($status) - { - case JOStatus::FULFILLED: - if ($jo->getDateFulfill() == null) - $jo_data['date_fulfilled'] = ''; - else - $jo_data['date_fulfilled'] = $jo->getDateFulfill()->format('M d, Y'); - break; - case JOStatus::CANCELLED: - $date_cancel = $jo->getDateCancel(); - if ($date_cancel == null) - $date_cancel = new DateTime(); - $jo_data['date_cancelled'] = $date_cancel->format('M d, Y'); - break; - } - - $all_jo_data[] = $jo_data; + $all_jo_data[] = $this->generateJobOrderData($req, $jo, $rt, $mah); } // return data $data = [ 'job_orders' => $all_jo_data ]; - $res->setData($data); - // response - return $res->getReturnResponse(); + return new APIResponse(true, 'Job order history found', $data); } // TODO: modify for MobileUser @@ -1300,7 +1247,8 @@ class JobOrderController extends APIController } } - protected function processMQTTEvents($jo, $payload, $mclient, $rah) + protected function processMQTTEvents(JobOrder $jo, $payload, MQTTClient $mclient, + RiderAssignmentHandlerInterface$rah) { // check JO status if ($jo->getStatus() == JOStatus::ASSIGNED) @@ -1318,7 +1266,7 @@ class JobOrderController extends APIController } } - protected function makeInvoiceData($invoice, $mah, $req) + protected function makeInvoiceData(Invoice $invoice, MobileAPIHandler$mah, Request $req) { // make invoice json data $invoice_data = [ @@ -1385,4 +1333,115 @@ class JobOrderController extends APIController } } } + + protected function generateJobOrderData($req, $jo, $rt, $mah) + { + $status = $jo->getStatus(); + $dest = $jo->getCoordinates(); + + $jo_data = [ + 'id' => $jo->getID(), + 'date_create' => $jo->getDateCreate()->format('M d, Y'), + 'service_type' => $jo->getServiceType(), + 'destination' => [ + 'long' => $dest->getLongitude(), + 'lat' => $dest->getLatitude(), + ], + 'delivery_address' => $jo->getDeliveryAddress(), + 'delivery_instructions' => $jo->getDeliveryInstructions(), + 'jo_status' => $status, + 'status' => $this->generateAPIRiderStatus($status), + ]; + + // customer vehicle and warranty + $cv = $jo->getCustomerVehicle(); + + // get latest warranty using plate number + $warranty = $mah->findWarranty($cv->getPlateNumber()); + + $jo_data['customer_vehicle'] = [ + 'id' => $cv->getID(), + 'plate_number' => $cv->getPlateNumber(), + 'warranty' => $warranty, + ]; + + // rider + $rider = $jo->getRider(); + if ($rider != null) + { + // default image url + $url_prefix = $req->getSchemeAndHttpHost(); + $image_url = $url_prefix . '/assets/images/user.gif'; + if ($rider->getImageFile() != null) + $image_url = $url_prefix . '/uploads/' . $rider->getImageFile(); + + $coord = $rt->getRiderLocation($rider->getID()); + + $jo_data['rider'] = [ + 'id' => $rider->getID(), + 'name' => $rider->getFullName(), + 'plate_num' => $rider->getPlateNumber(), + 'contact_num' => $rider->getContactNumber(), + 'image_url' => $image_url, + 'location' => [ + 'long' => $coord->getLongitude(), + 'lat' => $coord->getLatitude() + ] + ]; + } + else + { + $jo_data['rider'] = null; + } + + // invoice items + $items = []; + $jo_items = $jo->getInvoice()->getItems(); + foreach ($jo_items as $item) + { + $items[] = [ + 'id' => $item->getID(), + 'title' => $item->getTitle(), + 'qty' => $item->getQuantity(), + 'price' => $item->getPrice(), + ]; + } + + $jo_data['items'] = $items; + + // dates depending on status + switch ($status) + { + case JOStatus::FULFILLED: + if ($jo->getDateFulfill() == null) + $jo_data['date_fulfilled'] = ''; + else + $jo_data['date_fulfilled'] = $jo->getDateFulfill()->format('M d, Y'); + break; + case JOStatus::CANCELLED: + $date_cancel = $jo->getDateCancel(); + if ($date_cancel == null) + $date_cancel = new DateTime(); + $jo_data['date_cancelled'] = $date_cancel->format('M d, Y'); + break; + } + + return $jo_data; + } + + protected function generateAPIRiderStatus($status) + { + switch ($status) + { + case JOStatus::PENDING: + return APIRiderStatus::OUTLET_ASSIGN; + case JOStatus::RIDER_ASSIGN: + return APIRiderStatus::RIDER_ASSIGN; + case JOStatus::ASSIGNED: + case JOStatus::IN_TRANSIT: + case JOStatus::IN_PROGRESS: + return APIRiderStatus::RIDER_PICK_UP; + } + return 'unknown'; + } }