Add api calls: payment, complete, cancel, reject for job orders. #421
This commit is contained in:
parent
0e69eb4943
commit
b6c54615ad
4 changed files with 332 additions and 312 deletions
|
|
@ -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]
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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',
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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,157 +575,113 @@ 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?
|
$coord = $jo->getCoordinates();
|
||||||
if (!$this->session->hasRider())
|
$cust = $jo->getCustomer();
|
||||||
|
$cv = $jo->getCustomerVehicle();
|
||||||
|
$v = $cv->getVehicle();
|
||||||
|
$inv = $jo->getInvoice();
|
||||||
|
$promo = $inv->getPromo();
|
||||||
|
|
||||||
|
// invoice items
|
||||||
|
$inv_items = [];
|
||||||
|
foreach ($inv->getItems() as $item)
|
||||||
{
|
{
|
||||||
$data = [
|
$item_batt = $item->getBattery();
|
||||||
'error' => 'No logged in rider.'
|
if ($item_batt == null)
|
||||||
|
$batt_id = null;
|
||||||
|
else
|
||||||
|
$batt_id = $item_batt->getID();
|
||||||
|
|
||||||
|
$inv_items[] = [
|
||||||
|
'id' => $item->getID(),
|
||||||
|
'title' => $item->getTitle(),
|
||||||
|
'qty' => $item->getQuantity(),
|
||||||
|
'price' => $item->getPrice(),
|
||||||
|
'batt_id' => $batt_id,
|
||||||
];
|
];
|
||||||
return $data;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$rider = $this->session->getRider();
|
// promo
|
||||||
|
if ($promo != null)
|
||||||
// get jo
|
|
||||||
$jo_id = $req->query->get('jo_id');
|
|
||||||
|
|
||||||
$jo = $this->em->getRepository(JobOrder::class)->find($jo_id);
|
|
||||||
if ($jo == null)
|
|
||||||
{
|
{
|
||||||
$data = [
|
$promo_data = [
|
||||||
'job_order' => null
|
'id' => $promo->getID(),
|
||||||
|
'name' => $promo->getName(),
|
||||||
|
'code' => $promo->getCode(),
|
||||||
|
'discount_rate' => $promo->getDiscountRate(),
|
||||||
|
'discount_apply' => $promo->getDiscountApply(),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ($jo->getRider() == null)
|
$promo_data = 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();
|
|
||||||
$cust = $jo->getCustomer();
|
|
||||||
$cv = $jo->getCustomerVehicle();
|
|
||||||
$v = $cv->getVehicle();
|
|
||||||
$inv = $jo->getInvoice();
|
|
||||||
$promo = $inv->getPromo();
|
|
||||||
|
|
||||||
// invoice items
|
|
||||||
$inv_items = [];
|
|
||||||
foreach ($inv->getItems() as $item)
|
|
||||||
{
|
|
||||||
$item_batt = $item->getBattery();
|
|
||||||
if ($item_batt == null)
|
|
||||||
$batt_id = null;
|
|
||||||
else
|
|
||||||
$batt_id = $item_batt->getID();
|
|
||||||
|
|
||||||
$inv_items[] = [
|
|
||||||
'id' => $item->getID(),
|
|
||||||
'title' => $item->getTitle(),
|
|
||||||
'qty' => $item->getQuantity(),
|
|
||||||
'price' => $item->getPrice(),
|
|
||||||
'batt_id' => $batt_id,
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
// promo
|
|
||||||
if ($promo != null)
|
|
||||||
{
|
|
||||||
$promo_data = [
|
|
||||||
'id' => $promo->getID(),
|
|
||||||
'name' => $promo->getName(),
|
|
||||||
'code' => $promo->getCode(),
|
|
||||||
'discount_rate' => $promo->getDiscountRate(),
|
|
||||||
'discount_apply' => $promo->getDiscountApply(),
|
|
||||||
];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$promo_data = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
$trade_in_type = $jo->getTradeInType();
|
|
||||||
if (empty($trade_in_type))
|
|
||||||
$trade_in_type = 'none';
|
|
||||||
|
|
||||||
$data = [
|
|
||||||
'job_order' => [
|
|
||||||
'id' => $jo->getID(),
|
|
||||||
'service_type' => $jo->getServiceType(),
|
|
||||||
'date_schedule' => $jo->getDateSchedule()->format('Ymd H:i:s'),
|
|
||||||
'longitude' => $coord->getLongitude(),
|
|
||||||
'latitude' => $coord->getLatitude(),
|
|
||||||
'status' => $jo->getStatus(),
|
|
||||||
'customer' => [
|
|
||||||
'title' => $cust->getTitle(),
|
|
||||||
'first_name' => $cust->getFirstName(),
|
|
||||||
'last_name' => $cust->getLastName(),
|
|
||||||
'phone_mobile' => $this->country_code . $cust->getPhoneMobile(),
|
|
||||||
],
|
|
||||||
'vehicle' => [
|
|
||||||
'manufacturer' => $v->getManufacturer()->getName(),
|
|
||||||
'make' => $v->getMake(),
|
|
||||||
'model' => $cv->getModelYear(),
|
|
||||||
'plate_number' => $cv->getPlateNumber(),
|
|
||||||
'color' => $cv->getColor(),
|
|
||||||
],
|
|
||||||
'or_num' => $jo->getORNum(),
|
|
||||||
'or_name' => $jo->getORName(),
|
|
||||||
'delivery_instructions' => $jo->getDeliveryInstructions(),
|
|
||||||
'delivery_address' => $jo->getDeliveryAddress(),
|
|
||||||
'landmark' => $jo->getLandmark(),
|
|
||||||
'invoice' => [
|
|
||||||
'discount' => $inv->getDiscount(),
|
|
||||||
'trade_in' => $inv->getTradeIn(),
|
|
||||||
'total_price' => $inv->getTotalPrice(),
|
|
||||||
'vat' => $inv->getVat(),
|
|
||||||
'items' => $inv_items,
|
|
||||||
],
|
|
||||||
'mode_of_payment' => $jo->getModeOfPayment(),
|
|
||||||
'trade_in_type' => $trade_in_type,
|
|
||||||
'promo' => $promo_data,
|
|
||||||
// TODO: load the actual
|
|
||||||
'has_warranty_doc' => false,
|
|
||||||
'flag_coolant' => $jo->hasCoolant(),
|
|
||||||
'has_motolite' => $cv->hasMotoliteBattery(),
|
|
||||||
]
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$trade_in_type = $jo->getTradeInType();
|
||||||
|
if (empty($trade_in_type))
|
||||||
|
$trade_in_type = 'none';
|
||||||
|
|
||||||
|
$data = [
|
||||||
|
'job_order' => [
|
||||||
|
'id' => $jo->getID(),
|
||||||
|
'service_type' => $jo->getServiceType(),
|
||||||
|
'date_schedule' => $jo->getDateSchedule()->format('Ymd H:i:s'),
|
||||||
|
'longitude' => $coord->getLongitude(),
|
||||||
|
'latitude' => $coord->getLatitude(),
|
||||||
|
'status' => $jo->getStatus(),
|
||||||
|
'customer' => [
|
||||||
|
'title' => $cust->getTitle(),
|
||||||
|
'first_name' => $cust->getFirstName(),
|
||||||
|
'last_name' => $cust->getLastName(),
|
||||||
|
'phone_mobile' => $this->country_code . $cust->getPhoneMobile(),
|
||||||
|
],
|
||||||
|
'vehicle' => [
|
||||||
|
'manufacturer' => $v->getManufacturer()->getName(),
|
||||||
|
'make' => $v->getMake(),
|
||||||
|
'model' => $cv->getModelYear(),
|
||||||
|
'plate_number' => $cv->getPlateNumber(),
|
||||||
|
'color' => $cv->getColor(),
|
||||||
|
],
|
||||||
|
'or_num' => $jo->getORNum(),
|
||||||
|
'or_name' => $jo->getORName(),
|
||||||
|
'delivery_instructions' => $jo->getDeliveryInstructions(),
|
||||||
|
'delivery_address' => $jo->getDeliveryAddress(),
|
||||||
|
'landmark' => $jo->getLandmark(),
|
||||||
|
'invoice' => [
|
||||||
|
'discount' => $inv->getDiscount(),
|
||||||
|
'trade_in' => $inv->getTradeIn(),
|
||||||
|
'total_price' => $inv->getTotalPrice(),
|
||||||
|
'vat' => $inv->getVat(),
|
||||||
|
'items' => $inv_items,
|
||||||
|
],
|
||||||
|
'mode_of_payment' => $jo->getModeOfPayment(),
|
||||||
|
'trade_in_type' => $trade_in_type,
|
||||||
|
'promo' => $promo_data,
|
||||||
|
// TODO: load the actual
|
||||||
|
'has_warranty_doc' => false,
|
||||||
|
'flag_coolant' => $jo->hasCoolant(),
|
||||||
|
'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,85 +1099,72 @@ 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
|
$inv = $jo->getInvoice();
|
||||||
$jo_id = $req->query->get('jo_id');
|
$promo = $inv->getPromo();
|
||||||
|
|
||||||
$jo = $this->em->getRepository(JobOrder::class)->find($jo_id);
|
// invoice items
|
||||||
if ($jo == null)
|
$inv_items = [];
|
||||||
|
foreach ($inv->getItems() as $item)
|
||||||
{
|
{
|
||||||
$data = [
|
$item_batt = $item->getBattery();
|
||||||
'invoice' => null
|
if ($item_batt == null)
|
||||||
|
$batt_id = null;
|
||||||
|
else
|
||||||
|
$batt_id = $item_batt->getID();
|
||||||
|
|
||||||
|
$inv_items[] = [
|
||||||
|
'id' => $item->getID(),
|
||||||
|
'title' => $item->getTitle(),
|
||||||
|
'qty' => $item->getQuantity(),
|
||||||
|
'price' => $item->getPrice(),
|
||||||
|
'batt_id' => $batt_id,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
// promo
|
||||||
|
if ($promo != null)
|
||||||
|
{
|
||||||
|
$promo_data = [
|
||||||
|
'id' => $promo->getID(),
|
||||||
|
'name' => $promo->getName(),
|
||||||
|
'code' => $promo->getCode(),
|
||||||
|
'discount_rate' => $promo->getDiscountRate(),
|
||||||
|
'discount_apply' => $promo->getDiscountApply(),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$inv = $jo->getInvoice();
|
$promo_data = null;
|
||||||
$promo = $inv->getPromo();
|
|
||||||
|
|
||||||
// invoice items
|
|
||||||
$inv_items = [];
|
|
||||||
foreach ($inv->getItems() as $item)
|
|
||||||
{
|
|
||||||
$item_batt = $item->getBattery();
|
|
||||||
if ($item_batt == null)
|
|
||||||
$batt_id = null;
|
|
||||||
else
|
|
||||||
$batt_id = $item_batt->getID();
|
|
||||||
|
|
||||||
$inv_items[] = [
|
|
||||||
'id' => $item->getID(),
|
|
||||||
'title' => $item->getTitle(),
|
|
||||||
'qty' => $item->getQuantity(),
|
|
||||||
'price' => $item->getPrice(),
|
|
||||||
'batt_id' => $batt_id,
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
// promo
|
|
||||||
if ($promo != null)
|
|
||||||
{
|
|
||||||
$promo_data = [
|
|
||||||
'id' => $promo->getID(),
|
|
||||||
'name' => $promo->getName(),
|
|
||||||
'code' => $promo->getCode(),
|
|
||||||
'discount_rate' => $promo->getDiscountRate(),
|
|
||||||
'discount_apply' => $promo->getDiscountApply(),
|
|
||||||
];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$promo_data = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
$trade_in_type = $jo->getTradeInType();
|
|
||||||
if (empty($trade_in_type))
|
|
||||||
$trade_in_type = 'none';
|
|
||||||
|
|
||||||
$data = [
|
|
||||||
'invoice' => [
|
|
||||||
'id' => $inv->getID(),
|
|
||||||
'discount' => $inv->getDiscount(),
|
|
||||||
'trade_in' => $inv->getTradeIn(),
|
|
||||||
'total_price' => $inv->getTotalPrice(),
|
|
||||||
'vat' => $inv->getVat(),
|
|
||||||
'items' => $inv_items,
|
|
||||||
'trade_in_type' => $trade_in_type,
|
|
||||||
'promo' => $promo_data,
|
|
||||||
]
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$trade_in_type = $jo->getTradeInType();
|
||||||
|
if (empty($trade_in_type))
|
||||||
|
$trade_in_type = 'none';
|
||||||
|
|
||||||
|
$data = [
|
||||||
|
'invoice' => [
|
||||||
|
'id' => $inv->getID(),
|
||||||
|
'discount' => $inv->getDiscount(),
|
||||||
|
'trade_in' => $inv->getTradeIn(),
|
||||||
|
'total_price' => $inv->getTotalPrice(),
|
||||||
|
'vat' => $inv->getVat(),
|
||||||
|
'items' => $inv_items,
|
||||||
|
'trade_in_type' => $trade_in_type,
|
||||||
|
'promo' => $promo_data,
|
||||||
|
]
|
||||||
|
];
|
||||||
|
|
||||||
return $data;
|
return $data;
|
||||||
}
|
}
|
||||||
|
|
||||||
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();
|
||||||
|
$rider->setActiveJobOrder($jo);
|
||||||
|
|
||||||
// get jo
|
$this->em->persist($rider);
|
||||||
$jo_id = $req->request->get('jo_id');
|
$this->em->flush();
|
||||||
|
|
||||||
$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);
|
|
||||||
|
|
||||||
$this->em->persist($rider);
|
|
||||||
$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();
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue