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)
|
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)
|
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)
|
public function available(Request $req, EntityManagerInterface $em)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue