Add startJobOrder and payment. #617

This commit is contained in:
Korina Cordero 2021-08-18 10:30:55 +00:00
parent 7671b79d2e
commit bbe0a804ad

View file

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