Add startJobOrder and payment. #617
This commit is contained in:
parent
7671b79d2e
commit
bbe0a804ad
1 changed files with 166 additions and 1 deletions
|
|
@ -613,6 +613,45 @@ class RiderController extends APIController
|
|||
|
||||
public function startJobOrder(Request $req, EntityManagerInterface $em)
|
||||
{
|
||||
$required_params = [];
|
||||
$missing = $this->checkMissingParameters($req, $required_params);
|
||||
if (count($missing) > 0)
|
||||
{
|
||||
$params = implode(', ', $missing);
|
||||
return new APIResponse(false, 'Missing parameter(s): ' . $params);
|
||||
}
|
||||
|
||||
// get capi user to link to rider api user
|
||||
$capi_user_id = $this->getUser()->getID();
|
||||
|
||||
// check if capi user already has a rider api user
|
||||
$rapi_session = $em->getRepository(RiderAPISession::class)->findOneBy(['capi_user_id' => $capi_user_id]);
|
||||
|
||||
// are we logged in?
|
||||
if (!$rapi_session->hasRider())
|
||||
return new APIResponse(false, 'No logged in rider.');
|
||||
|
||||
$rider = $rapi_session->getRider();
|
||||
|
||||
// get rider's current job order
|
||||
$jo = $rider->getCurrentJobOrder();
|
||||
|
||||
// set delivery status
|
||||
$jo->setDeliveryStatus(DeliveryStatus::RIDER_START);
|
||||
|
||||
// create time stamp event for JO event
|
||||
$event = new JOEvent();
|
||||
$event->setDateHappen(new DateTime())
|
||||
->setTypeID(JOEventType::RIDER_START)
|
||||
->setJobOrder($jo)
|
||||
->setRider($rider);
|
||||
|
||||
$em->persist($event);
|
||||
$em->flush();
|
||||
|
||||
$data = [];
|
||||
return new APIResponse(true, 'Rider start job order.', $data);
|
||||
|
||||
}
|
||||
|
||||
public function arrive(Request $req, EntityManagerInterface $em, MQTTClient $mclient)
|
||||
|
|
@ -675,8 +714,134 @@ class RiderController extends APIController
|
|||
{
|
||||
}
|
||||
|
||||
public function payment(Request $req, EntityManagerInterface $em)
|
||||
public function payment(Request $req, EntityManagerInterface $em, JobOrderHandlerInterface $jo_handler,
|
||||
RisingTideGateway $rt, WarrantyHandler $wh, MQTTClient $mclient)
|
||||
{
|
||||
$required_params = ['jo_id'];
|
||||
|
||||
// get capi user to link to rider api user
|
||||
$capi_user_id = $this->getUser()->getID();
|
||||
|
||||
// check if capi user already has a rider api user
|
||||
$rapi_session = $em->getRepository(RiderAPISession::class)->findOneBy(['capi_user_id' => $capi_user_id]);
|
||||
|
||||
// are we logged in?
|
||||
if (!$rapi_session->hasRider())
|
||||
return new APIResponse(false, 'No logged in rider.');
|
||||
|
||||
$rider = $rapi_session->getRider();
|
||||
|
||||
$msg = $this->checkJO($req, $required_params, $jo, $rider);
|
||||
if (!empty($msg))
|
||||
return new APIResponse(false, $msg);
|
||||
|
||||
// set invoice to paid
|
||||
$jo->getInvoice()->setStatus(InvoiceStatus::PAID);
|
||||
|
||||
/*
|
||||
// set jo status to fulfilled
|
||||
$jo->setStatus(JOStatus::FULFILLED);
|
||||
*/
|
||||
$jo->fulfill();
|
||||
|
||||
// set delivery status
|
||||
$jo->setDeliveryStatus(DeliveryStatus::RIDER_END);
|
||||
|
||||
// add event log
|
||||
$event = new JOEvent();
|
||||
$event->setDateHappen(new DateTime())
|
||||
->setTypeID(JOEventType::FULFILL)
|
||||
->setJobOrder($jo)
|
||||
->setRider($rider);
|
||||
|
||||
$timestamp_event = new JOEvent();
|
||||
$timestamp_event->setDateHappen(new DateTime())
|
||||
->setTypeID(JOEventType::RIDER_END)
|
||||
->setJobOrder($jo)
|
||||
->setRider($rider);
|
||||
|
||||
$em->persist($event);
|
||||
$em->persist($timestamp_event);
|
||||
|
||||
// NOTE: fix for the rider being assigned to other JO
|
||||
// while on another JO.
|
||||
// TODO: comment this out. Rider needs to be set to unavailable
|
||||
// when rider accepts the JO
|
||||
// tag rider as unavailable
|
||||
$rider->setAvailable(false);
|
||||
|
||||
// save to customer vehicle battery record
|
||||
$jo_handler->updateVehicleBattery($jo);
|
||||
|
||||
// send SMS to customer
|
||||
$phone_number = $jo->getCustomer()->getPhoneMobile();
|
||||
if (!empty($phone_number))
|
||||
{
|
||||
// TODO: put this in config file or somewhere
|
||||
$message = "Your Resq job order has been completed.";
|
||||
$rt->sendSMS($phone_number, 'MOTOLITE', $message);
|
||||
}
|
||||
|
||||
$em->flush();
|
||||
|
||||
// create warranty
|
||||
if($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 = $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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// for riders, use rider session id
|
||||
$user_id = $rapi_session->getID();
|
||||
$source = WarrantySource::RAPI;
|
||||
$wh->createWarranty($serial, $plate_number, $first_name, $last_name, $mobile_number, $batt_list, $date_purchase, $warranty_class, $user_id, $source, $jo->getCustomer(), $jo->getCustomerVehicle()->getVehicle());
|
||||
}
|
||||
|
||||
// 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(),
|
||||
];
|
||||
$mclient->sendEvent($jo, $payload);
|
||||
|
||||
$data = [];
|
||||
return new APIResponse(true, 'Job order paid and fulfilled.', $data);
|
||||
}
|
||||
|
||||
public function available(Request $req, EntityManagerInterface $em)
|
||||
|
|
|
|||
Loading…
Reference in a new issue