From 393fc525c03cf473c20097e45fefd7f624cd41c1 Mon Sep 17 00:00:00 2001 From: Kendrick Chan Date: Sun, 27 May 2018 01:52:12 +0800 Subject: [PATCH 1/5] Add get promos call for rider api #132 --- config/routes/rider_api.yaml | 5 ++++ src/Controller/RAPIController.php | 48 +++++++++++++++++++++++++++++-- 2 files changed, 51 insertions(+), 2 deletions(-) diff --git a/config/routes/rider_api.yaml b/config/routes/rider_api.yaml index 4cf98d93..5650f044 100644 --- a/config/routes/rider_api.yaml +++ b/config/routes/rider_api.yaml @@ -39,3 +39,8 @@ rapi_payment: path: /rapi/payment controller: App\Controller\RAPIController::payment methods: [POST] + +rapi_promos: + path: /rapi/promos + controller: App\Controller\RAPIController::getPromos + methods: [GET] diff --git a/src/Controller/RAPIController.php b/src/Controller/RAPIController.php index 4dab01ff..8516f42c 100644 --- a/src/Controller/RAPIController.php +++ b/src/Controller/RAPIController.php @@ -293,6 +293,7 @@ class RAPIController extends Controller $cv = $jo->getCustomerVehicle(); $v = $cv->getVehicle(); $inv = $jo->getInvoice(); + $promo = $inv->getPromo(); // invoice items $inv_items = []; @@ -306,6 +307,23 @@ class RAPIController extends Controller ]; } + // 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; + } + + $data = [ 'job_order' => [ 'id' => $jo->getID(), @@ -338,8 +356,7 @@ class RAPIController extends Controller 'items' => $inv_items, ], 'mode_of_payment' => $jo->getModeOfPayment(), - - + 'promo' => $promo_data, ] ]; } @@ -450,4 +467,31 @@ class RAPIController extends Controller // set jo status to fulfilled } + + public function getPromos(Request $req) + { + $em = $this->getDoctrine()->getManager(); + $required_params = []; + $res = $this->checkParamsAndKey($req, $em, $required_params); + if ($res->isError()) + return $res->getReturnResponse(); + + $promos = $em->getRepository(Promo::class)->findAll(); + + $promo_data = []; + foreach ($promos as $promo) + { + $promo_data[] = [ + 'id' => $promo->getID(), + 'name' => $promo->getName(), + 'code' => $promo->getCode(), + ]; + } + + $data = [ + 'promos' => $promo_data, + ]; + $res->setData($data); + return $res->getReturnResponse(); + } } From 0e42e68b081ca5595af8302a4f59a471cb12a8a6 Mon Sep 17 00:00:00 2001 From: Kendrick Chan Date: Sun, 27 May 2018 03:29:31 +0800 Subject: [PATCH 2/5] Add get batteries call to rider api #132 --- config/routes/rider_api.yaml | 10 ++++ src/Controller/RAPIController.php | 77 +++++++++++++++++++++++++++++-- 2 files changed, 83 insertions(+), 4 deletions(-) diff --git a/config/routes/rider_api.yaml b/config/routes/rider_api.yaml index 5650f044..f5d2ae0a 100644 --- a/config/routes/rider_api.yaml +++ b/config/routes/rider_api.yaml @@ -44,3 +44,13 @@ rapi_promos: path: /rapi/promos controller: App\Controller\RAPIController::getPromos methods: [GET] + +rapi_batteries: + path: /rapi/batteries + controller: App\Controller\RAPIController::getBatteries + methods: [GET] + +rapi_change_service: + path: /rapi/service + controller: App\Controller\RAPIController::changeService + methods: [POST] diff --git a/src/Controller/RAPIController.php b/src/Controller/RAPIController.php index 8516f42c..78f1fa11 100644 --- a/src/Controller/RAPIController.php +++ b/src/Controller/RAPIController.php @@ -32,6 +32,8 @@ use App\Entity\CustomerVehicle; use App\Entity\JobOrder; use App\Entity\Promo; use App\Entity\Battery; +use App\Entity\BatteryModel; +use App\Entity\BatterySize; use App\Entity\RiderRating; use App\Entity\Rider; use App\Entity\User; @@ -366,7 +368,7 @@ class RAPIController extends Controller return $res->getReturnResponse(); } - protected function checkJO(Request $req, $required_params) + protected function checkJO(Request $req, $required_params, &$jo = null) { // set jo status to in transit $em = $this->getDoctrine()->getManager(); @@ -407,7 +409,7 @@ class RAPIController extends Controller public function acceptJobOrder(Request $req) { $required_params = ['jo_id']; - $res = $this->checkJO($req, $required_params); + $res = $this->checkJO($req, $required_params, $jo); if ($res->isError()) return $res->getReturnResponse(); @@ -426,7 +428,7 @@ class RAPIController extends Controller public function cancelJobOrder(Request $req) { $required_params = ['jo_id']; - $res = $this->checkJO($req, $required_params); + $res = $this->checkJO($req, $required_params, $jo); if ($res->isError()) return $res->getReturnResponse(); @@ -445,7 +447,7 @@ class RAPIController extends Controller public function arrive(Request $req) { $required_params = ['jo_id']; - $res = $this->checkJO($req, $required_params); + $res = $this->checkJO($req, $required_params, $jo); if ($res->isError()) return $res->getReturnResponse(); @@ -494,4 +496,71 @@ class RAPIController extends Controller $res->setData($data); return $res->getReturnResponse(); } + + public function getBatteries(Request $req) + { + // get batteries, models, and sizes + $em = $this->getDoctrine()->getManager(); + $required_params = []; + $res = $this->checkParamsAndKey($req, $em, $required_params); + if ($res->isError()) + return $res->getReturnResponse(); + + $batts = $em->getRepository(Battery::class)->findAll(); + $models = $em->getRepository(BatteryModel::class)->findAll(); + $sizes = $em->getRepository(BatterySize::class)->findAll(); + + $batt_data = []; + foreach ($batts as $batt) + { + $batt_data[] = [ + 'id' => $batt->getID(), + 'model_id' => $batt->getModel()->getID(), + 'size_id' => $batt->getSize()->getID(), + 'sell_price' => $batt->getSellingPrice(), + ]; + } + + $model_data = []; + foreach ($models as $model) + { + $model_data[] = [ + 'id' => $model->getID(), + 'name' => $model->getName(), + ]; + } + + $size_data = []; + foreach ($sizes as $size) + { + $size_data[] = [ + 'id' => $size->getID(), + 'name' => $size->getName(), + ]; + } + + $data = [ + 'batteries' => $batt_data, + 'models' => $model_data, + 'sizes' => $size_data, + ]; + + $res->setData($data); + return $res->getReturnResponse(); + } + + public function changeService(Request $req) + { + // allow rider to change service, promo, battery and trade-in options + $em = $this->getDoctrine()->getManager(); + $required_params = ['jo_id', 'stype_id', 'promo_id', 'battery_id', 'trade_in']; + $res = $this->checkJO($req, $required_params, $jo); + if ($res->isError()) + return $res->getReturnResponse(); + + + // TODO: add event + + // TODO: send mqtt event (?) + } } From bcc606f52af448bbaa6fb619caa4b9fa2909bec1 Mon Sep 17 00:00:00 2001 From: Kendrick Chan Date: Sun, 27 May 2018 05:55:54 +0800 Subject: [PATCH 3/5] Add change service rider api call #132 --- src/Controller/RAPIController.php | 92 +++++++++++++++++++++++++++++-- 1 file changed, 88 insertions(+), 4 deletions(-) diff --git a/src/Controller/RAPIController.php b/src/Controller/RAPIController.php index 78f1fa11..740764b5 100644 --- a/src/Controller/RAPIController.php +++ b/src/Controller/RAPIController.php @@ -21,6 +21,7 @@ use App\Ramcar\WarrantyClass; use App\Ramcar\APIRiderStatus; use App\Ramcar\TransactionOrigin; use App\Ramcar\TradeInType; +use App\Ramcar\InvoiceStatus; use App\Service\InvoiceCreator; @@ -64,13 +65,13 @@ class RAPIController extends Controller if ($req->getMethod() == 'GET') { $check = $req->query->get($param); - if (empty($check)) + if ($check == null) $missing[] = $param; } else if ($req->getMethod() == 'POST') { $check = $req->request->get($param); - if (empty($check)) + if ($check == null) $missing[] = $param; } else @@ -301,11 +302,18 @@ class RAPIController extends Controller $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, ]; } @@ -549,18 +557,94 @@ class RAPIController extends Controller return $res->getReturnResponse(); } - public function changeService(Request $req) + public function changeService(Request $req, InvoiceCreator $ic) { // allow rider to change service, promo, battery and trade-in options $em = $this->getDoctrine()->getManager(); - $required_params = ['jo_id', 'stype_id', 'promo_id', 'battery_id', 'trade_in']; + $required_params = ['jo_id', 'stype_id', 'promo_id', 'batt_id', 'trade_in']; $res = $this->checkJO($req, $required_params, $jo); if ($res->isError()) return $res->getReturnResponse(); + // check service type + $stype_id = $req->request->get('stype_id'); + if (!ServiceType::validate($stype_id)) + { + $res->setError(true) + ->setErrorMessage('Invalid service type - ' . $stype_id); + return $res->getReturnResponse(); + } + + // check promo id + $promo_id = $req->request->get('promo_id'); + // no promo + if ($promo_id == 0) + $promo = null; + else + { + $promo = $em->getRepository(Promo::class)->find($promo_id); + if ($promo == null) + { + $res->setError(true) + ->setErrorMessage('Invalid promo id - ' . $promo_id); + return $res->getReturnResponse(); + } + } + + // check battery id + $batt_id = $req->request->get('batt_id'); + // no battery + if ($batt_id == 0) + $battery = null; + else + { + $battery = $em->getRepository(Battery::class)->find($batt_id); + if ($battery == null) + { + $res->setError(true) + ->setErrorMessage('Invalid battery id - ' . $batt_id); + return $res->getReturnResponse(); + } + } + + // check trade in + $trade_in = $req->request->get('trade_in'); + if (!TradeInType::validate($trade_in)) + $trade_in = null; + + // generate new invoice + $crit = new InvoiceCriteria(); + $crit->setServiceType($stype_id); + + if ($promo != null) + $crit->addPromo($promo); + + if ($battery != null) + { + $crit->addEntry($battery, $trade_in, 1); + error_log('adding entry for battery - ' . $battery->getID()); + } + + $invoice = $ic->processCriteria($crit); + $invoice->setStatus(InvoiceStatus::DRAFT); + + // remove previous invoice + $old_invoice = $jo->getInvoice(); + $em->remove($old_invoice); + $em->flush(); + + // save job order + $jo->setServiceType($stype_id); + + // save invoice + $jo->setInvoice($invoice); + $em->persist($invoice); + $em->flush(); // TODO: add event // TODO: send mqtt event (?) + + return $res->getReturnResponse(); } } From ed8ed031362b4866da2d315f98fec23513367e58 Mon Sep 17 00:00:00 2001 From: Kendrick Chan Date: Sun, 27 May 2018 06:03:20 +0800 Subject: [PATCH 4/5] Make sure change status calls for rider api are being saved #132 --- src/Controller/RAPIController.php | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/Controller/RAPIController.php b/src/Controller/RAPIController.php index 740764b5..eb3f63d9 100644 --- a/src/Controller/RAPIController.php +++ b/src/Controller/RAPIController.php @@ -425,6 +425,7 @@ class RAPIController extends Controller // set jo status to in transit $jo->setStatus(JOStatus::IN_TRANSIT); + $em->flush(); // TODO: send mqtt event @@ -444,6 +445,7 @@ class RAPIController extends Controller // set jo status to cancelled $jo->setStatus(JOStatus::CANCELLED); + $em->flush(); // TODO: send mqtt event @@ -463,6 +465,7 @@ class RAPIController extends Controller // set jo status to in progress $jo->setStatus(JOStatus::IN_PROGRESS); + $em->flush(); // TODO: send mqtt event @@ -473,9 +476,19 @@ class RAPIController extends Controller public function payment(Request $req) { + $em = $this->getDoctrine()->getManager(); + $required_params = ['jo_id', 'stype_id', 'promo_id', 'batt_id', 'trade_in']; + $res = $this->checkJO($req, $required_params, $jo); + if ($res->isError()) + return $res->getReturnResponse(); + // set invoice to paid + $jo->getInvoice()->setStatus(InvoiceStatus::PAID); // set jo status to fulfilled + $jo->setStatus(JOStatus::FULFILLED); + + $em->flush(); } public function getPromos(Request $req) From 3d186481caf2ba6a341040f06be899afcfb7484e Mon Sep 17 00:00:00 2001 From: Kendrick Chan Date: Sun, 27 May 2018 06:29:56 +0800 Subject: [PATCH 5/5] Add payment and available api calls for rider app #132 --- config/routes/rider_api.yaml | 5 +++++ src/Controller/RAPIController.php | 23 ++++++++++++++++++++++- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/config/routes/rider_api.yaml b/config/routes/rider_api.yaml index f5d2ae0a..2f61be21 100644 --- a/config/routes/rider_api.yaml +++ b/config/routes/rider_api.yaml @@ -54,3 +54,8 @@ rapi_change_service: path: /rapi/service controller: App\Controller\RAPIController::changeService methods: [POST] + +rapi_available: + path: /rapi/available + controller: App\Controller\RAPIController::available + methods: [POST] diff --git a/src/Controller/RAPIController.php b/src/Controller/RAPIController.php index eb3f63d9..2cd95f60 100644 --- a/src/Controller/RAPIController.php +++ b/src/Controller/RAPIController.php @@ -477,7 +477,7 @@ class RAPIController extends Controller public function payment(Request $req) { $em = $this->getDoctrine()->getManager(); - $required_params = ['jo_id', 'stype_id', 'promo_id', 'batt_id', 'trade_in']; + $required_params = ['jo_id']; $res = $this->checkJO($req, $required_params, $jo); if ($res->isError()) return $res->getReturnResponse(); @@ -489,6 +489,27 @@ class RAPIController extends Controller $jo->setStatus(JOStatus::FULFILLED); $em->flush(); + + // TODO: add event + + return $res->getReturnResponse(); + } + + public function available(Request $req) + { + $em = $this->getDoctrine()->getManager(); + $required_params = []; + $res = $this->checkParamsAndKey($req, $em, $required_params); + if ($res->isError()) + return $res->getReturnResponse(); + + // make rider available + $this->session->getRider()->setAvailable(true); + + // TODO: log rider available + $em->flush(); + + return $res->getReturnResponse(); } public function getPromos(Request $req)