Add api calls: payment, complete, cancel, reject for job orders. #421

This commit is contained in:
Korina Cordero 2020-06-03 10:34:56 +00:00
parent 0e69eb4943
commit b6c54615ad
4 changed files with 332 additions and 312 deletions

View file

@ -109,3 +109,8 @@ cmb_rapi_jo_set_active:
path: /cmbrapi/joborderactive path: /cmbrapi/joborderactive
controller: App\Controller\CMBRAPIController::setActiveJobOrder controller: App\Controller\CMBRAPIController::setActiveJobOrder
methods: [POST] methods: [POST]
cmb_rapi_jo_reject:
path: /cmbrapi/joborderreject
controller: App\Controller\CMBRAPIController::rejectJobOrder
methods: [POST]

View file

@ -503,5 +503,26 @@ class CMBRAPIController extends Controller
return $res->getReturnResponse(); return $res->getReturnResponse();
} }
public function rejectJobOrder(Request $req, RiderAPIHandlerInterface $rapi_handler)
{
$res = new APIResult();
$data = $rapi_handler->rejectJobOrder($req);
if (isset($data['error']))
{
$message = $data['error'];
$res->setError(true)
->setErrorMessage($message);
}
else
{
$res->setData($data);
}
// response
return $res->getReturnResponse();
}
} }

View file

@ -15,8 +15,8 @@ class CMBJOEventType extends NameValue
const RIDER_IN_TRANSIT = 'rider_in_transit'; const RIDER_IN_TRANSIT = 'rider_in_transit';
const RIDER_ARRIVE = 'arrive'; const RIDER_ARRIVE = 'arrive';
const RIDER_START = 'rider_start'; const RIDER_START = 'rider_start';
const RIDER_COMPLETE = 'rider_complete';
const RIDER_EDIT = 'rider_edit'; const RIDER_EDIT = 'rider_edit';
const PAID = 'paid';
const COLLECTION = [ const COLLECTION = [
'create' => 'Created', 'create' => 'Created',
@ -30,7 +30,7 @@ class CMBJOEventType extends NameValue
'rider_in_transit' => 'Rider in Transit', 'rider_in_transit' => 'Rider in Transit',
'arrive' => 'Rider Arrive', 'arrive' => 'Rider Arrive',
'rider_start' => 'Rider Start', 'rider_start' => 'Rider Start',
'rider_complete' => 'Rider Complete',
'rider_edit' => 'Rider Edit', 'rider_edit' => 'Rider Edit',
'paid' => 'Paid',
]; ];
} }

View file

@ -284,6 +284,7 @@ class CMBRiderAPIHandler implements RiderAPIHandlerInterface
} }
// TODO: this needs to be changed to get the JOs for this month and last month
public function getJobOrderHistory(Request $req) public function getJobOrderHistory(Request $req)
{ {
$required_params = []; $required_params = [];
@ -574,50 +575,10 @@ class CMBRiderAPIHandler implements RiderAPIHandlerInterface
$required_params = [ $required_params = [
'jo_id' 'jo_id'
]; ];
$data = $this->checkParamsAndKey($req, $required_params); $data = $this->checkJO($req, $required_params, $jo);
if (isset($data['error'])) if (isset($data['error']))
return $data; return $data;
// are we logged in?
if (!$this->session->hasRider())
{
$data = [
'error' => 'No logged in rider.'
];
return $data;
}
$rider = $this->session->getRider();
// get jo
$jo_id = $req->query->get('jo_id');
$jo = $this->em->getRepository(JobOrder::class)->find($jo_id);
if ($jo == null)
{
$data = [
'job_order' => null
];
}
else
{
if ($jo->getRider() == null)
{
$data = [
'error' => 'Job order selected has no rider assigned.'
];
return $data;
}
// check if rider is assigned to JO
if ($rider->getID() != $jo->getRider()->getID())
{
$data = [
'error' => 'Job order selected is not assigned to rider'
];
return $data;
}
$coord = $jo->getCoordinates(); $coord = $jo->getCoordinates();
$cust = $jo->getCustomer(); $cust = $jo->getCustomer();
$cv = $jo->getCustomerVehicle(); $cv = $jo->getCustomerVehicle();
@ -706,25 +667,21 @@ class CMBRiderAPIHandler implements RiderAPIHandlerInterface
'has_motolite' => $cv->hasMotoliteBattery(), 'has_motolite' => $cv->hasMotoliteBattery(),
] ]
]; ];
}
return $data; return $data;
} }
public function acceptJobOrder(Request $req) public function acceptJobOrder(Request $req)
{ {
$required_params = ['jo_id']; $required_params = [
'jo_id'
];
$data = $this->checkJO($req, $required_params, $jo); $data = $this->checkJO($req, $required_params, $jo);
if (isset($data['error'])) if (isset($data['error']))
return $data; return $data;
// TODO: refactor this into a jo handler class, so we don't have to repeat for control center // TODO: refactor this into a jo handler class, so we don't have to repeat for control center
// set jo status to in transit
//$jo->setStatus(JOStatus::IN_TRANSIT);
// TODO: send mqtt event (?) // TODO: send mqtt event (?)
// add event log // add event log
$rider = $this->session->getRider(); $rider = $this->session->getRider();
$event = new JOEvent(); $event = new JOEvent();
@ -742,7 +699,7 @@ class CMBRiderAPIHandler implements RiderAPIHandlerInterface
public function setJobOrderInTransit(Request $req) public function setJobOrderInTransit(Request $req)
{ {
$required_params = ['jo_id']; $required_params = ['jo_id'];
$data = $this->checkJO($req, $required_params, $jo); $data = $this->checkActiveJO($req, $required_params, $jo);
if (isset($data['error'])) if (isset($data['error']))
return $data; return $data;
@ -768,13 +725,41 @@ class CMBRiderAPIHandler implements RiderAPIHandlerInterface
public function cancelJobOrder(Request $req) public function cancelJobOrder(Request $req)
{ {
$required_params = ['jo_id']; $required_params = [
'jo_id',
'cancel_reason'
];
$data = $this->checkJO($req, $required_params, $jo);
if (isset($data['error']))
return $data;
$cancel_reason = $req->request->get('cancel_reason');
$jo->cancel($cancel_reason);
// add event log
$rider = $this->session->getRider();
$event = new JOEvent();
$event->setDateHappen(new DateTime())
->setTypeID(CMBJOEventType::REQUEUE)
->setJobOrder($jo)
->setRider($rider);
$this->em->persist($event);
$this->em->flush();
return $data;
}
public function rejectJobOrder(Request $req)
{
$required_params = [
'jo_id'
];
$data = $this->checkJO($req, $required_params, $jo); $data = $this->checkJO($req, $required_params, $jo);
if (isset($data['error'])) if (isset($data['error']))
return $data; return $data;
// $jo->cancel("rider cancelled");
// requeue it, instead of cancelling it
$jo->requeue(); $jo->requeue();
// add event log // add event log
@ -802,7 +787,7 @@ class CMBRiderAPIHandler implements RiderAPIHandlerInterface
public function arrive(Request $req) public function arrive(Request $req)
{ {
$required_params = ['jo_id']; $required_params = ['jo_id'];
$data = $this->checkJO($req, $required_params, $jo); $data = $this->checkActiveJO($req, $required_params, $jo);
if (isset($data['error'])) if (isset($data['error']))
return $data; return $data;
@ -868,90 +853,24 @@ class CMBRiderAPIHandler implements RiderAPIHandlerInterface
public function payment(Request $req) public function payment(Request $req)
{ {
$required_params = ['jo_id']; $required_params = ['jo_id'];
$data = $this->checkJO($req, $required_params, $jo); $data = $this->checkActiveJO($req, $required_params, $jo);
if (isset($data['error'])) if (isset($data['error']))
return $data; return $data;
// set invoice to paid // set invoice to paid
$jo->getInvoice()->setStatus(InvoiceStatus::PAID); $jo->getInvoice()->setStatus(InvoiceStatus::PAID);
/*
// set jo status to fulfilled
$jo->setStatus(JOStatus::FULFILLED);
*/
$jo->fulfill();
// add event log // add event log
$rider = $this->session->getRider(); $rider = $this->session->getRider();
$event = new JOEvent(); $event = new JOEvent();
$event->setDateHappen(new DateTime()) $event->setDateHappen(new DateTime())
->setTypeID(CMBJOEventType::FULFILL) ->setTypeID(CMBJOEventType::PAID)
->setJobOrder($jo) ->setJobOrder($jo)
->setRider($rider); ->setRider($rider);
$this->em->persist($event); $this->em->persist($event);
// tag rider as unavailable
$rider->setAvailable(false);
// save to customer vehicle battery record
$this->jo_handler->updateVehicleBattery($jo);
$this->em->flush(); $this->em->flush();
// create warranty
if($this->jo_handler->checkIfNewBattery($jo))
{
$serial = null;
$warranty_class = $jo->getWarrantyClass();
$first_name = $jo->getCustomer()->getFirstName();
$last_name = $jo->getCustomer()->getLastName();
$mobile_number = $jo->getCustomer()->getPhoneMobile();
// check if date fulfilled is null
//if ($jo->getDateFulfill() == null)
// $date_purchase = $jo->getDateCreate();
//else
// $date_purchase = $jo->getDateFulfill();
// use date_schedule for warranty expiration computation
$date_purchase = $jo->getDateSchedule();
$plate_number = $this->wh->cleanPlateNumber($jo->getCustomerVehicle()->getPlateNumber());
$batt_list = array();
$invoice = $jo->getInvoice();
if (!empty($invoice))
{
// get battery
$invoice_items = $invoice->getItems();
foreach ($invoice_items as $item)
{
$battery = $item->getBattery();
if ($battery != null)
{
$batt_list[] = $item->getBattery();
}
}
}
$this->wh->createWarranty($serial, $plate_number, $first_name, $last_name, $mobile_number, $batt_list, $date_purchase, $warranty_class);
}
// send mqtt event (fulfilled)
$rider = $this->session->getRider();
$image_url = $req->getScheme() . '://' . $req->getHttpHost() . $req->getBasePath() . '/assets/images/user.gif';
if ($rider->getImageFile() != null)
$image_url = $req->getScheme() . '://' . $req->getHttpHost() . $req->getBasePath() . '/uploads/' . $rider->getImageFile();
$payload = [
'event' => 'fulfilled',
'jo_id' => $jo->getID(),
'driver_image' => $image_url,
'driver_name' => $rider->getFullName(),
'driver_id' => $rider->getID(),
];
$this->mclient->sendEvent($jo, $payload);
return $data; return $data;
} }
@ -1053,7 +972,7 @@ class CMBRiderAPIHandler implements RiderAPIHandlerInterface
// allow rider to change service, promo, battery and trade-in options // allow rider to change service, promo, battery and trade-in options
$required_params = ['jo_id', 'stype_id', 'promo_id']; $required_params = ['jo_id', 'stype_id', 'promo_id'];
$data = $this->checkJO($req, $required_params, $jo); $data = $this->checkActiveJO($req, $required_params, $jo);
if (isset($data['error'])) if (isset($data['error']))
return $data; return $data;
@ -1180,22 +1099,10 @@ class CMBRiderAPIHandler implements RiderAPIHandlerInterface
public function generateInvoice(Request $req) public function generateInvoice(Request $req)
{ {
$required_params = ['jo_id']; $required_params = ['jo_id'];
$data = $this->checkParamsAndKey($req, $required_params); $data = $this->checkActiveJO($req, $required_params, $jo);
if (isset($data['error'])) if (isset($data['error']))
return $data; return $data;
// get jo
$jo_id = $req->query->get('jo_id');
$jo = $this->em->getRepository(JobOrder::class)->find($jo_id);
if ($jo == null)
{
$data = [
'invoice' => null
];
}
else
{
$inv = $jo->getInvoice(); $inv = $jo->getInvoice();
$promo = $inv->getPromo(); $promo = $inv->getPromo();
@ -1250,7 +1157,6 @@ class CMBRiderAPIHandler implements RiderAPIHandlerInterface
'promo' => $promo_data, 'promo' => $promo_data,
] ]
]; ];
}
return $data; return $data;
} }
@ -1258,7 +1164,7 @@ class CMBRiderAPIHandler implements RiderAPIHandlerInterface
public function startJobOrder(Request $req) public function startJobOrder(Request $req)
{ {
$required_params = ['jo_id']; $required_params = ['jo_id'];
$data = $this->checkJO($req, $required_params, $jo); $data = $this->checkActiveJO($req, $required_params, $jo);
if (isset($data['error'])) if (isset($data['error']))
return $data; return $data;
@ -1279,21 +1185,87 @@ class CMBRiderAPIHandler implements RiderAPIHandlerInterface
public function completeJobOrder(Request $req) public function completeJobOrder(Request $req)
{ {
$required_params = ['jo_id']; $required_params = ['jo_id'];
$data = $this->checkJO($req, $required_params, $jo); $data = $this->checkActiveJO($req, $required_params, $jo);
if (isset($data['error'])) if (isset($data['error']))
return $data; return $data;
/*
// set jo status to fulfilled
$jo->setStatus(JOStatus::FULFILLED);
*/
$jo->fulfill();
// add event log // add event log
$rider = $this->session->getRider(); $rider = $this->session->getRider();
$event = new JOEvent(); $event = new JOEvent();
$event->setDateHappen(new DateTime()) $event->setDateHappen(new DateTime())
->setTypeID(CMBJOEventType::RIDER_COMPLETE) ->setTypeID(CMBJOEventType::FULFILL)
->setJobOrder($jo) ->setJobOrder($jo)
->setRider($rider); ->setRider($rider);
$this->em->persist($event); $this->em->persist($event);
// tag rider as unavailable
$rider->setAvailable(false);
// save to customer vehicle battery record
$this->jo_handler->updateVehicleBattery($jo);
$this->em->flush(); $this->em->flush();
// create warranty
if($this->jo_handler->checkIfNewBattery($jo))
{
$serial = null;
$warranty_class = $jo->getWarrantyClass();
$first_name = $jo->getCustomer()->getFirstName();
$last_name = $jo->getCustomer()->getLastName();
$mobile_number = $jo->getCustomer()->getPhoneMobile();
// check if date fulfilled is null
//if ($jo->getDateFulfill() == null)
// $date_purchase = $jo->getDateCreate();
//else
// $date_purchase = $jo->getDateFulfill();
// use date_schedule for warranty expiration computation
$date_purchase = $jo->getDateSchedule();
$plate_number = $this->wh->cleanPlateNumber($jo->getCustomerVehicle()->getPlateNumber());
$batt_list = array();
$invoice = $jo->getInvoice();
if (!empty($invoice))
{
// get battery
$invoice_items = $invoice->getItems();
foreach ($invoice_items as $item)
{
$battery = $item->getBattery();
if ($battery != null)
{
$batt_list[] = $item->getBattery();
}
}
}
$this->wh->createWarranty($serial, $plate_number, $first_name, $last_name, $mobile_number, $batt_list, $date_purchase, $warranty_class);
}
// TODO: Need to verify if needed.
// send mqtt event (fulfilled)
$image_url = $req->getScheme() . '://' . $req->getHttpHost() . $req->getBasePath() . '/assets/images/user.gif';
if ($rider->getImageFile() != null)
$image_url = $req->getScheme() . '://' . $req->getHttpHost() . $req->getBasePath() . '/uploads/' . $rider->getImageFile();
$payload = [
'event' => 'fulfilled',
'jo_id' => $jo->getID(),
'driver_image' => $image_url,
'driver_name' => $rider->getFullName(),
'driver_id' => $rider->getID(),
];
$this->mclient->sendEvent($jo, $payload);
return $data; return $data;
} }
@ -1302,55 +1274,15 @@ class CMBRiderAPIHandler implements RiderAPIHandlerInterface
$required_params = [ $required_params = [
'jo_id' 'jo_id'
]; ];
$data = $this->checkParamsAndKey($req, $required_params); $data = $this->checkJO($req, $required_params, $jo);
if (isset($data['error'])) if (isset($data['error']))
return $data; return $data;
// are we logged in?
if (!$this->session->hasRider())
{
$data = [
'error' => 'No logged in rider.'
];
return $data;
}
$rider = $this->session->getRider(); $rider = $this->session->getRider();
// get jo
$jo_id = $req->request->get('jo_id');
$jo = $this->em->getRepository(JobOrder::class)->find($jo_id);
if ($jo == null)
{
$data = [
'job_order' => null
];
}
else
{
if ($jo->getRider() == null)
{
$data = [
'error' => 'Job order selected has no rider assigned.'
];
return $data;
}
// check if rider is assigned to JO
if ($rider->getID() != $jo->getRider()->getID())
{
$data = [
'error' => 'Job order selected is not assigned to rider.'
];
return $data;
}
$rider->setActiveJobOrder($jo); $rider->setActiveJobOrder($jo);
$this->em->persist($rider); $this->em->persist($rider);
$this->em->flush(); $this->em->flush();
}
return $data; return $data;
} }
@ -1432,7 +1364,7 @@ class CMBRiderAPIHandler implements RiderAPIHandlerInterface
return $session; return $session;
} }
protected function checkJO(Request $req, $required_params, &$jo = null) protected function checkActiveJO(Request $req, $required_params, &$jo = null)
{ {
// set jo status to in transit // set jo status to in transit
$data = $this->checkParamsAndKey($req, $required_params); $data = $this->checkParamsAndKey($req, $required_params);
@ -1459,9 +1391,14 @@ class CMBRiderAPIHandler implements RiderAPIHandlerInterface
]; ];
return $data; return $data;
} }
$jo_id = '';
if ($req->getMethod() == 'GET')
$jo_id = $req->query->get('jo_id');
else
$jo_id = $req->request->get('jo_id');
// check if the jo_id sent is the same as our active jo // check if the jo_id sent is the same as our active jo
if ($req->request->get('jo_id') != $jo->getID()) if ($jo_id != $jo->getID())
{ {
$data = [ $data = [
'error' => 'Job order selected is not active job order.' 'error' => 'Job order selected is not active job order.'
@ -1472,6 +1409,63 @@ class CMBRiderAPIHandler implements RiderAPIHandlerInterface
return $data; return $data;
} }
protected function checkJO(Request $req, $required_params, &$jo = null)
{
// set jo status to in transit
$data = $this->checkParamsAndKey($req, $required_params);
if (isset($data['error']))
return $data;
// are we logged in?
if (!$this->session->hasRider())
{
$data = [
'error' => 'No logged in rider.'
];
return $data;
}
$rider = $this->session->getRider();
// get jo
$jo_id = '';
if ($req->getMethod() == 'GET')
$jo_id = $req->query->get('jo_id');
else
$jo_id = $req->request->get('jo_id');
$jo = $this->em->getRepository(JobOrder::class)->find($jo_id);
if ($jo == null)
{
$data = [
'error' => 'No job order found.'
];
return $data;
}
// check if rider assigned to jo is our rider
if ($jo->getRider() == null)
{
$data = [
'error' => 'Job order selected has no rider assigned.'
];
return $data;
}
// check if rider is assigned to JO
if ($rider->getID() != $jo->getRider()->getID())
{
$data = [
'error' => 'Job order selected is not assigned to rider'
];
return $data;
}
return $data;
}
protected function debugRequest(Request $req) protected function debugRequest(Request $req)
{ {
$all = $req->request->all(); $all = $req->request->all();