From adadadb6ee30e795b67a463d4a54f538ff283c13 Mon Sep 17 00:00:00 2001 From: Kendrick Chan Date: Mon, 28 Jun 2021 23:47:46 +0800 Subject: [PATCH] Add get jo info call for mobile API #592 --- config/routes/api.yaml | 5 ++ src/Controller/APIController.php | 113 +++++++++++++++++++++++++++++++ 2 files changed, 118 insertions(+) diff --git a/config/routes/api.yaml b/config/routes/api.yaml index a223ce10..b880d436 100644 --- a/config/routes/api.yaml +++ b/config/routes/api.yaml @@ -180,3 +180,8 @@ api_warr_serial_register: path: /api/warranty/{serial} controller: App\Controller\APIController::warrantyRegister methods: [POST] + +api_jo_info: + path: /api/job_order/{id}/info + controller: App\Controller\APIController::getJobOrderInfo + methods: [GET] diff --git a/src/Controller/APIController.php b/src/Controller/APIController.php index dc5f431a..46342756 100644 --- a/src/Controller/APIController.php +++ b/src/Controller/APIController.php @@ -1827,6 +1827,118 @@ class APIController extends Controller implements LoggedController return $res->getReturnResponse(); } + // we can't use param converter for now because we want to output the proper 404 + public function getJobOrderInfo($id, Request $req, EntityManagerInterface $em) + { + // check required parameters and api key + $res = $this->checkParamsAndKey($req, $em, []); + if ($res->isError()) + return $res->getReturnResponse(); + + // get customer + $cust = $this->session->getCustomer(); + if ($cust == null) + { + $res->setError(true) + ->setErrorMessage('No customer information found'); + return $res->getReturnResponse(); + } + + // get job order data + $jo = $em->getRepository(JobOrder::class)->find($id); + if ($jo == null) + { + $res->setError(true) + ->setErrorMessage('No job order information found'); + return $res->getReturnResponse(); + } + + // check if job order belongs to customer / user + if ($cust->getID() != $jo->getCustomer()->getID()) + { + $res->setError(true) + ->setErrorMessage('No job order information found'); + return $res->getReturnResponse(); + } + + // put into job order data array + $jo_data = $this->generateJobOrderData($jo); + + + $data = [ + 'job_order' => $jo_data + ]; + $res->setData($data); + + return $res->getReturnResponse(); + } + + protected function generateJobOrderData($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; + } + + return $jo_data; + } + public function getJOHistory(Request $req) { $em = $this->getDoctrine()->getManager(); @@ -1848,6 +1960,7 @@ class APIController extends Controller implements LoggedController $jos = $cust->getJobOrders(); foreach ($jos as $jo) { + // TODO: use generateJobOrderData method $status = $jo->getStatus(); $jo_data = [