diff --git a/config/routes/cmb_rider_api.yaml b/config/routes/cmb_rider_api.yaml index c57504db..9fc445d8 100644 --- a/config/routes/cmb_rider_api.yaml +++ b/config/routes/cmb_rider_api.yaml @@ -74,3 +74,13 @@ cmb_rapi_active_jo_get: path: /cmbrapi/activejoborders controller: App\Controller\CMBRAPIController::viewActiveJobOrders methods: [GET] + +cmb_rapi_jo_in_transit: + path: /cmbrapi/joborderintransit + controller: App\Controller\CMBRAPIController::setJobOrderInTransit + methods: [POST] + +cmb_rapi_invoice_generate: + path: /cmbrapi/generateinvoice + controller: App\Controller\CMBRAPIController::generateInvoice + methods: [GET] diff --git a/src/Controller/CMBRAPIController.php b/src/Controller/CMBRAPIController.php index 1aea2f9b..25ee257b 100644 --- a/src/Controller/CMBRAPIController.php +++ b/src/Controller/CMBRAPIController.php @@ -346,5 +346,52 @@ class CMBRAPIController extends Controller return $res->getReturnResponse(); } + + public function setJobOrderInTransit(Request $req, RiderAPIHandlerInterface $rapi_handler) + { + $res = new APIResult(); + + $data = $rapi_handler->setJobOrderInTransit($req); + + if (isset($data['error'])) + { + $message = $data['error']; + + $res->setError(true) + ->setErrorMessage($message); + } + else + { + $res->setData($data); + } + + // response + return $res->getReturnResponse(); + + } + + public function generateInvoice(Request $req, RiderAPIHandlerInterface $rapi_handler) + { + $res = new APIResult(); + + $data = $rapi_handler->generateInvoice($req); + + if (isset($data['error'])) + { + $message = $data['error']; + + $res->setError(true) + ->setErrorMessage($message); + } + else + { + $res->setData($data); + } + + // response + return $res->getReturnResponse(); + + } + } diff --git a/src/Service/RiderAPIHandler/CMBRiderAPIHandler.php b/src/Service/RiderAPIHandler/CMBRiderAPIHandler.php index c59308ca..d05f8b78 100644 --- a/src/Service/RiderAPIHandler/CMBRiderAPIHandler.php +++ b/src/Service/RiderAPIHandler/CMBRiderAPIHandler.php @@ -268,6 +268,7 @@ class CMBRiderAPIHandler implements RiderAPIHandlerInterface // setup start date and end dates // get current year $month = $req->query->get('month'); + $year = $req->query->get('year'); $current_date = new DateTime(); $current_year = $current_date->format('Y'); @@ -678,6 +679,35 @@ class CMBRiderAPIHandler implements RiderAPIHandlerInterface return $data; } + public function setJobOrderInTransit(Request $req) + { + $required_params = ['jo_id']; + $data = $this->checkJO($req, $required_params, $jo); + if (isset($data['error'])) + return $data; + + // TODO: it's the same status as acceptJobOrder + // do we add a new JOStatus? + // set jo status to in transit + $jo->setStatus(JOStatus::IN_TRANSIT); + + // TODO: send mqtt event (?) + + // add event log + $rider = $this->session->getRider(); + $event = new JOEvent(); + $event->setDateHappen(new DateTime()) + ->setTypeID(JOEventType::RIDER_ACCEPT) + ->setJobOrder($jo) + ->setRider($rider); + $this->em->persist($event); + + $this->em->flush(); + + return $data; + + } + public function cancelJobOrder(Request $req) { $required_params = ['jo_id']; @@ -1089,6 +1119,71 @@ class CMBRiderAPIHandler implements RiderAPIHandlerInterface return $data; } + public function generateInvoice(Request $req) + { + $required_params = ['jo_id']; + $data = $this->checkJO($req, $required_params, $jo); + if (isset($data['error'])) + return $data; + + $inv = $jo->getInvoice(); + $promo = $inv->getPromo(); + + // invoice items + $inv_items = []; + foreach ($inv->getItems() as $item) + { + $item_batt = $item->getBattery(); + if ($item_batt == null) + $batt_id = null; + else + $batt_id = $item_batt->getID(); + + $inv_items[] = [ + 'id' => $item->getID(), + 'title' => $item->getTitle(), + 'qty' => $item->getQuantity(), + 'price' => $item->getPrice(), + 'batt_id' => $batt_id, + ]; + } + + // promo + if ($promo != null) + { + $promo_data = [ + 'id' => $promo->getID(), + 'name' => $promo->getName(), + 'code' => $promo->getCode(), + 'discount_rate' => $promo->getDiscountRate(), + 'discount_apply' => $promo->getDiscountApply(), + ]; + } + else + { + $promo_data = null; + } + + $trade_in_type = $jo->getTradeInType(); + if (empty($trade_in_type)) + $trade_in_type = 'none'; + + $data = [ + 'invoice' => [ + 'id' => $inv->getID(), + 'discount' => $inv->getDiscount(), + 'trade_in' => $inv->getTradeIn(), + 'total_price' => $inv->getTotalPrice(), + 'vat' => $inv->getVat(), + 'items' => $inv_items, + 'trade_in_type' => $trade_in_type, + 'promo' => $promo_data, + ] + ]; + + return $data; + } + protected function checkMissingParameters(Request $req, $params = []) { $missing = [];