Merge branch '132-more-rider-api-calls' into 'master'
Resolve "More rider api calls" Closes #132 See merge request jankstudio/resq!114
This commit is contained in:
commit
9645750cd0
2 changed files with 259 additions and 8 deletions
|
|
@ -39,3 +39,23 @@ rapi_payment:
|
||||||
path: /rapi/payment
|
path: /rapi/payment
|
||||||
controller: App\Controller\RAPIController::payment
|
controller: App\Controller\RAPIController::payment
|
||||||
methods: [POST]
|
methods: [POST]
|
||||||
|
|
||||||
|
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]
|
||||||
|
|
||||||
|
rapi_available:
|
||||||
|
path: /rapi/available
|
||||||
|
controller: App\Controller\RAPIController::available
|
||||||
|
methods: [POST]
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,7 @@ use App\Ramcar\WarrantyClass;
|
||||||
use App\Ramcar\APIRiderStatus;
|
use App\Ramcar\APIRiderStatus;
|
||||||
use App\Ramcar\TransactionOrigin;
|
use App\Ramcar\TransactionOrigin;
|
||||||
use App\Ramcar\TradeInType;
|
use App\Ramcar\TradeInType;
|
||||||
|
use App\Ramcar\InvoiceStatus;
|
||||||
|
|
||||||
use App\Service\InvoiceCreator;
|
use App\Service\InvoiceCreator;
|
||||||
|
|
||||||
|
|
@ -32,6 +33,8 @@ use App\Entity\CustomerVehicle;
|
||||||
use App\Entity\JobOrder;
|
use App\Entity\JobOrder;
|
||||||
use App\Entity\Promo;
|
use App\Entity\Promo;
|
||||||
use App\Entity\Battery;
|
use App\Entity\Battery;
|
||||||
|
use App\Entity\BatteryModel;
|
||||||
|
use App\Entity\BatterySize;
|
||||||
use App\Entity\RiderRating;
|
use App\Entity\RiderRating;
|
||||||
use App\Entity\Rider;
|
use App\Entity\Rider;
|
||||||
use App\Entity\User;
|
use App\Entity\User;
|
||||||
|
|
@ -62,13 +65,13 @@ class RAPIController extends Controller
|
||||||
if ($req->getMethod() == 'GET')
|
if ($req->getMethod() == 'GET')
|
||||||
{
|
{
|
||||||
$check = $req->query->get($param);
|
$check = $req->query->get($param);
|
||||||
if (empty($check))
|
if ($check == null)
|
||||||
$missing[] = $param;
|
$missing[] = $param;
|
||||||
}
|
}
|
||||||
else if ($req->getMethod() == 'POST')
|
else if ($req->getMethod() == 'POST')
|
||||||
{
|
{
|
||||||
$check = $req->request->get($param);
|
$check = $req->request->get($param);
|
||||||
if (empty($check))
|
if ($check == null)
|
||||||
$missing[] = $param;
|
$missing[] = $param;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
@ -293,19 +296,44 @@ class RAPIController extends Controller
|
||||||
$cv = $jo->getCustomerVehicle();
|
$cv = $jo->getCustomerVehicle();
|
||||||
$v = $cv->getVehicle();
|
$v = $cv->getVehicle();
|
||||||
$inv = $jo->getInvoice();
|
$inv = $jo->getInvoice();
|
||||||
|
$promo = $inv->getPromo();
|
||||||
|
|
||||||
// invoice items
|
// invoice items
|
||||||
$inv_items = [];
|
$inv_items = [];
|
||||||
foreach ($inv->getItems() as $item)
|
foreach ($inv->getItems() as $item)
|
||||||
{
|
{
|
||||||
|
$item_batt = $item->getBattery();
|
||||||
|
if ($item_batt == null)
|
||||||
|
$batt_id = null;
|
||||||
|
else
|
||||||
|
$batt_id = $item_batt->getID();
|
||||||
|
|
||||||
$inv_items[] = [
|
$inv_items[] = [
|
||||||
'id' => $item->getID(),
|
'id' => $item->getID(),
|
||||||
'title' => $item->getTitle(),
|
'title' => $item->getTitle(),
|
||||||
'qty' => $item->getQuantity(),
|
'qty' => $item->getQuantity(),
|
||||||
'price' => $item->getPrice(),
|
'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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
$data = [
|
$data = [
|
||||||
'job_order' => [
|
'job_order' => [
|
||||||
'id' => $jo->getID(),
|
'id' => $jo->getID(),
|
||||||
|
|
@ -338,8 +366,7 @@ class RAPIController extends Controller
|
||||||
'items' => $inv_items,
|
'items' => $inv_items,
|
||||||
],
|
],
|
||||||
'mode_of_payment' => $jo->getModeOfPayment(),
|
'mode_of_payment' => $jo->getModeOfPayment(),
|
||||||
|
'promo' => $promo_data,
|
||||||
|
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
@ -349,7 +376,7 @@ class RAPIController extends Controller
|
||||||
return $res->getReturnResponse();
|
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
|
// set jo status to in transit
|
||||||
$em = $this->getDoctrine()->getManager();
|
$em = $this->getDoctrine()->getManager();
|
||||||
|
|
@ -390,7 +417,7 @@ class RAPIController extends Controller
|
||||||
public function acceptJobOrder(Request $req)
|
public function acceptJobOrder(Request $req)
|
||||||
{
|
{
|
||||||
$required_params = ['jo_id'];
|
$required_params = ['jo_id'];
|
||||||
$res = $this->checkJO($req, $required_params);
|
$res = $this->checkJO($req, $required_params, $jo);
|
||||||
if ($res->isError())
|
if ($res->isError())
|
||||||
return $res->getReturnResponse();
|
return $res->getReturnResponse();
|
||||||
|
|
||||||
|
|
@ -398,6 +425,7 @@ class RAPIController extends Controller
|
||||||
|
|
||||||
// set jo status to in transit
|
// set jo status to in transit
|
||||||
$jo->setStatus(JOStatus::IN_TRANSIT);
|
$jo->setStatus(JOStatus::IN_TRANSIT);
|
||||||
|
$em->flush();
|
||||||
|
|
||||||
// TODO: send mqtt event
|
// TODO: send mqtt event
|
||||||
|
|
||||||
|
|
@ -409,7 +437,7 @@ class RAPIController extends Controller
|
||||||
public function cancelJobOrder(Request $req)
|
public function cancelJobOrder(Request $req)
|
||||||
{
|
{
|
||||||
$required_params = ['jo_id'];
|
$required_params = ['jo_id'];
|
||||||
$res = $this->checkJO($req, $required_params);
|
$res = $this->checkJO($req, $required_params, $jo);
|
||||||
if ($res->isError())
|
if ($res->isError())
|
||||||
return $res->getReturnResponse();
|
return $res->getReturnResponse();
|
||||||
|
|
||||||
|
|
@ -417,6 +445,7 @@ class RAPIController extends Controller
|
||||||
|
|
||||||
// set jo status to cancelled
|
// set jo status to cancelled
|
||||||
$jo->setStatus(JOStatus::CANCELLED);
|
$jo->setStatus(JOStatus::CANCELLED);
|
||||||
|
$em->flush();
|
||||||
|
|
||||||
// TODO: send mqtt event
|
// TODO: send mqtt event
|
||||||
|
|
||||||
|
|
@ -428,7 +457,7 @@ class RAPIController extends Controller
|
||||||
public function arrive(Request $req)
|
public function arrive(Request $req)
|
||||||
{
|
{
|
||||||
$required_params = ['jo_id'];
|
$required_params = ['jo_id'];
|
||||||
$res = $this->checkJO($req, $required_params);
|
$res = $this->checkJO($req, $required_params, $jo);
|
||||||
if ($res->isError())
|
if ($res->isError())
|
||||||
return $res->getReturnResponse();
|
return $res->getReturnResponse();
|
||||||
|
|
||||||
|
|
@ -436,6 +465,7 @@ class RAPIController extends Controller
|
||||||
|
|
||||||
// set jo status to in progress
|
// set jo status to in progress
|
||||||
$jo->setStatus(JOStatus::IN_PROGRESS);
|
$jo->setStatus(JOStatus::IN_PROGRESS);
|
||||||
|
$em->flush();
|
||||||
|
|
||||||
// TODO: send mqtt event
|
// TODO: send mqtt event
|
||||||
|
|
||||||
|
|
@ -446,8 +476,209 @@ class RAPIController extends Controller
|
||||||
|
|
||||||
public function payment(Request $req)
|
public function payment(Request $req)
|
||||||
{
|
{
|
||||||
|
$em = $this->getDoctrine()->getManager();
|
||||||
|
$required_params = ['jo_id'];
|
||||||
|
$res = $this->checkJO($req, $required_params, $jo);
|
||||||
|
if ($res->isError())
|
||||||
|
return $res->getReturnResponse();
|
||||||
|
|
||||||
// set invoice to paid
|
// set invoice to paid
|
||||||
|
$jo->getInvoice()->setStatus(InvoiceStatus::PAID);
|
||||||
|
|
||||||
// set jo status to fulfilled
|
// set jo status to fulfilled
|
||||||
|
$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)
|
||||||
|
{
|
||||||
|
$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();
|
||||||
|
}
|
||||||
|
|
||||||
|
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, 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', '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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue