From bf0d1f664bfa2435abdd34efa5028d5740ef0e1e Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Fri, 22 Mar 2024 05:35:06 -0400 Subject: [PATCH] Add CAPI calls for hub list and job order details. #794 --- config/packages/catalyst_auth.yaml | 10 ++ config/routes/capi.yaml | 13 ++ src/Controller/CAPI/HubController.php | 53 ++++++++ src/Controller/CAPI/JobOrderController.php | 139 +++++++++++++++++++++ 4 files changed, 215 insertions(+) create mode 100644 src/Controller/CAPI/HubController.php create mode 100644 src/Controller/CAPI/JobOrderController.php diff --git a/config/packages/catalyst_auth.yaml b/config/packages/catalyst_auth.yaml index 9707fc93..b02b1fc9 100644 --- a/config/packages/catalyst_auth.yaml +++ b/config/packages/catalyst_auth.yaml @@ -751,6 +751,16 @@ catalyst_auth: acls: - id: warrantyserial.upload label: Upload + - id: hub + label: Hub Access + acls: + - id: hub.list + label: List + - id: joborder + label: Job Order Access + acls: + - id: joborder.find + label: Find Job Order - id: tapi_vmanufacturer label: Third Party Vehicle Manufacturer Access diff --git a/config/routes/capi.yaml b/config/routes/capi.yaml index 44f57c99..fe104b37 100644 --- a/config/routes/capi.yaml +++ b/config/routes/capi.yaml @@ -194,3 +194,16 @@ capi_warranty_serial_upload: path: /capi/warranty_serial/upload controller: App\Controller\CAPI\WarrantySerialController::uploadWarrantySerialFile methods: [POST] + +# pullout form system +# hub +capi_hub_list: + path: /capi/hubs + controller: App\Controller\CAPI\HubController::getAll + methods: [GET] + +# job order details +capi_job_order: + path: /capi/job_order/{id} + controller: App\Controller\CAPI\JobOrderController::getJobOrder + methods: [GET] diff --git a/src/Controller/CAPI/HubController.php b/src/Controller/CAPI/HubController.php new file mode 100644 index 00000000..8634d05c --- /dev/null +++ b/src/Controller/CAPI/HubController.php @@ -0,0 +1,53 @@ +acl_gen = $acl_gen; + } + + public function getAll(EntityManagerInterface $em) + { + // get all hub data order by name + $this->denyAccessUnlessGranted('hub.list', null, 'No access.'); + + $results = $em->getRepository(Hub::class)->findBy([], ['name' => 'ASC']); + + $hubs = []; + foreach($results as $res) + { + $hub_id = $res->getId(); + $hub_name = $res->getName(); + $hub_address = $res->getAddress(); + $hub_branch_code = $res->getBranchCode(); + + $hubs[$hub_id] = [ + 'id' => $hub_id, + 'name' => $hub_name, + 'address' => $hub_address, + 'branch_code' => $hub_branch_code, + ]; + } + + $data = [ + 'hubs' => $hubs, + ]; + return new APIResponse(true, 'Hubs loaded.', $data); + } +} diff --git a/src/Controller/CAPI/JobOrderController.php b/src/Controller/CAPI/JobOrderController.php new file mode 100644 index 00000000..e340ae95 --- /dev/null +++ b/src/Controller/CAPI/JobOrderController.php @@ -0,0 +1,139 @@ +acl_gen = $acl_gen; + } + + public function getJobOrder($id, EntityManagerInterface $em) + { + $this->denyAccessUnlessGranted('joborder.find', null, 'No access.'); + + $jo = $em->getRepository(JobOrder::class)->find($id); + + if ($jo == null) + return new APIResponse(false, 'No job order found with that number.', null, 404); + + $data = $this->generateJobOrderData($jo, $em); + + return new APIResponse(true, 'Job order found.', $data); + } + + protected function generateJobOrderData($jo, EntityManagerInterface $em) + { + // customer vehicle + $cv = $jo->getCustomerVehicle(); + + // customer information + $customer = $jo->getCustomer(); + + // hub + $hub_name = ''; + $hub = $jo->getHub(); + if ($hub != null) + $hub_name = $hub->getName(); + + // check if JO is fulfilled, if not, we leave date_purchase blank + $date_purchase = ''; + $serial = ''; + $status = $jo->getStatus(); + if ($status == JOStatus::FULFILLED) + { + if ($jo->getDateFulfill() != null) + $date_purchase = $jo->getDateFulfill()->format('M d, Y H:i'); + + // find warranty to get the serial using plate number + $serial = $this->getSerialFromWarranty($cv->getPlateNumber(), $em); + } + + $jo_data = [ + 'id' => $jo->getID(), + 'first_name' => $customer->getFirstName(), + 'last_name' => $customer->getLastName(), + 'mobile_number' => $customer->getPhoneMobile(), + 'email' => $customer->getEmail(), + 'plate_number' => $cv->getPlateNumber(), + 'date_purchase' => $date_purchase, + 'address' => $jo->getDeliveryAddress(), + 'hub' => $hub_name, + 'serial' => $serial, + ]; + + // invoice items + $items = []; + $jo_items = $jo->getInvoice()->getItems(); + $non_battery_item_titles = ['Promo discount', 'Trade-in', 'Service']; + foreach ($jo_items as $item) + { + $item_title = $item->getTitle(); + + // check if title has Promo discount, Trade-in, or Service + $flag_battery = $this->checkIfBatteryInvoiceItem($item_title, $non_battery_item_titles); + if ($flag_battery == true) + { + $items[] = [ + 'title' => $item->getTitle(), + ]; + } + } + + $jo_data['items'] = $items; + + return $jo_data; + } + + protected function checkIfBatteryInvoiceItem($item_title, $non_battery_item_titles) + { + foreach ($non_battery_item_titles as $nb_item_title) + { + $pos_result = stripos($item_title, $nb_item_title); + + // if found, invoice item is not a battery item + if ($pos_result !== false) + return false; + } + + return true; + } + + protected function getSerialFromWarranty($plate_number, EntityManagerInterface $em) + { + // NOTE: Modify the search for the latest warranty. This seems hacky. + // get latest warranty using plate number + $warranty_results = $this->em->getRepository(Warranty::class)->findBy( + ['plate_number' => $plate_number], + ['date_create' => 'desc'] + ); + + $serial = ''; + if (!empty($warranty_results)) + { + // get first entry + $warranty = current($warranty_results); + + $serial = $warranty->getSerial(); + } + + return $serial; + } +}