Add get jo info call for mobile API #592

This commit is contained in:
Kendrick Chan 2021-06-28 23:47:46 +08:00
parent 3d8298a674
commit adadadb6ee
2 changed files with 118 additions and 0 deletions

View file

@ -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]

View file

@ -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 = [