Modify getJOHIstory in JobOrderController . #591

This commit is contained in:
Korina Cordero 2021-07-12 09:26:28 +00:00
parent 3ebf6b6c96
commit baaa832794
2 changed files with 140 additions and 79 deletions

View file

@ -152,3 +152,5 @@ access_keys:
label: Get Ongoing Job Order
- id: mobile_jo.cancel
label: Cancel Job Order
- id: mobile_jo.get.history
label: Get Job Order History

View file

@ -24,6 +24,7 @@ use App\Ramcar\TradeInType;
use App\Ramcar\JOEventType;
use App\Ramcar\HubCriteria;
use App\Ramcar\ModeOfPayment;
use App\Ramcar\APIRiderStatus;
use App\Service\InvoiceGeneratorInterface;
use App\Service\RisingTideGateway;
@ -38,6 +39,7 @@ use App\Service\HubFilterLogger;
use App\Service\HubFilteringGeoChecker;
use App\Service\MapTools;
use App\Service\MobileAPIHandler;
use App\Service\RiderTracker;
use App\Entity\JobOrder;
use App\Entity\CustomerVehicle;
@ -434,99 +436,44 @@ class JobOrderController extends APIController
return new APIResponse(true, 'Job order cancelled', $data);
}
// TODO: modify for MobileUser
public function getJOHistory(Request $req, EntityManagerInterface $em)
public function getJOHistory(Request $req, EntityManagerInterface $em, MobileAPIHandler $mah,
RiderTracker $rt)
{
$res = $this->checkParamsAndKey($req, $em, []);
if ($res->isError())
return $res->getReturnResponse();
$this->denyAccessUnlessGranted('mobile_jo.get.history', null, 'No access.');
// get customer
$cust = $this->session->getCustomer();
$required_params = [];
$msg = $this->checkRequiredParameters($req, $required_params);
if ($msg)
return new APIResponse(false, $msg);
// get capi user to link to mobile user
$user_id = $this->getUser()->getID();
// get mobile user
$mobile_user = $mah->findMobileUser($user_id);
if ($mobile_user == null)
return new APIResponse(false, 'No mobile user found.');
// customer
$cust = $mobile_user->getCustomer();
if ($cust == null)
{
$res->setError(true)
->setErrorMessage('No customer information found');
return $res->getReturnResponse();
}
return new APIResponse(false, 'No customer information found');
// get job orders
$all_jo_data = [];
$jos = $cust->getJobOrders();
foreach ($jos as $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;
}
$all_jo_data[] = $jo_data;
$all_jo_data[] = $this->generateJobOrderData($req, $jo, $rt, $mah);
}
// return data
$data = [
'job_orders' => $all_jo_data
];
$res->setData($data);
// response
return $res->getReturnResponse();
return new APIResponse(true, 'Job order history found', $data);
}
// TODO: modify for MobileUser
@ -1300,7 +1247,8 @@ class JobOrderController extends APIController
}
}
protected function processMQTTEvents($jo, $payload, $mclient, $rah)
protected function processMQTTEvents(JobOrder $jo, $payload, MQTTClient $mclient,
RiderAssignmentHandlerInterface$rah)
{
// check JO status
if ($jo->getStatus() == JOStatus::ASSIGNED)
@ -1318,7 +1266,7 @@ class JobOrderController extends APIController
}
}
protected function makeInvoiceData($invoice, $mah, $req)
protected function makeInvoiceData(Invoice $invoice, MobileAPIHandler$mah, Request $req)
{
// make invoice json data
$invoice_data = [
@ -1385,4 +1333,115 @@ class JobOrderController extends APIController
}
}
}
protected function generateJobOrderData($req, $jo, $rt, $mah)
{
$status = $jo->getStatus();
$dest = $jo->getCoordinates();
$jo_data = [
'id' => $jo->getID(),
'date_create' => $jo->getDateCreate()->format('M d, Y'),
'service_type' => $jo->getServiceType(),
'destination' => [
'long' => $dest->getLongitude(),
'lat' => $dest->getLatitude(),
],
'delivery_address' => $jo->getDeliveryAddress(),
'delivery_instructions' => $jo->getDeliveryInstructions(),
'jo_status' => $status,
'status' => $this->generateAPIRiderStatus($status),
];
// customer vehicle and warranty
$cv = $jo->getCustomerVehicle();
// get latest warranty using plate number
$warranty = $mah->findWarranty($cv->getPlateNumber());
$jo_data['customer_vehicle'] = [
'id' => $cv->getID(),
'plate_number' => $cv->getPlateNumber(),
'warranty' => $warranty,
];
// rider
$rider = $jo->getRider();
if ($rider != null)
{
// default image url
$url_prefix = $req->getSchemeAndHttpHost();
$image_url = $url_prefix . '/assets/images/user.gif';
if ($rider->getImageFile() != null)
$image_url = $url_prefix . '/uploads/' . $rider->getImageFile();
$coord = $rt->getRiderLocation($rider->getID());
$jo_data['rider'] = [
'id' => $rider->getID(),
'name' => $rider->getFullName(),
'plate_num' => $rider->getPlateNumber(),
'contact_num' => $rider->getContactNumber(),
'image_url' => $image_url,
'location' => [
'long' => $coord->getLongitude(),
'lat' => $coord->getLatitude()
]
];
}
else
{
$jo_data['rider'] = null;
}
// 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;
}
protected function generateAPIRiderStatus($status)
{
switch ($status)
{
case JOStatus::PENDING:
return APIRiderStatus::OUTLET_ASSIGN;
case JOStatus::RIDER_ASSIGN:
return APIRiderStatus::RIDER_ASSIGN;
case JOStatus::ASSIGNED:
case JOStatus::IN_TRANSIT:
case JOStatus::IN_PROGRESS:
return APIRiderStatus::RIDER_PICK_UP;
}
return 'unknown';
}
}