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
|
||||
controller: App\Controller\CMBRAPIController::setActiveJobOrder
|
||||
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();
|
||||
}
|
||||
|
||||
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_ARRIVE = 'arrive';
|
||||
const RIDER_START = 'rider_start';
|
||||
const RIDER_COMPLETE = 'rider_complete';
|
||||
const RIDER_EDIT = 'rider_edit';
|
||||
const PAID = 'paid';
|
||||
|
||||
const COLLECTION = [
|
||||
'create' => 'Created',
|
||||
|
|
@ -30,7 +30,7 @@ class CMBJOEventType extends NameValue
|
|||
'rider_in_transit' => 'Rider in Transit',
|
||||
'arrive' => 'Rider Arrive',
|
||||
'rider_start' => 'Rider Start',
|
||||
'rider_complete' => 'Rider Complete',
|
||||
'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)
|
||||
{
|
||||
$required_params = [];
|
||||
|
|
@ -574,157 +575,113 @@ class CMBRiderAPIHandler implements RiderAPIHandlerInterface
|
|||
$required_params = [
|
||||
'jo_id'
|
||||
];
|
||||
$data = $this->checkParamsAndKey($req, $required_params);
|
||||
$data = $this->checkJO($req, $required_params, $jo);
|
||||
if (isset($data['error']))
|
||||
return $data;
|
||||
|
||||
// are we logged in?
|
||||
if (!$this->session->hasRider())
|
||||
$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)
|
||||
{
|
||||
$data = [
|
||||
'error' => 'No logged in rider.'
|
||||
$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,
|
||||
];
|
||||
return $data;
|
||||
}
|
||||
|
||||
$rider = $this->session->getRider();
|
||||
|
||||
// get jo
|
||||
$jo_id = $req->query->get('jo_id');
|
||||
|
||||
$jo = $this->em->getRepository(JobOrder::class)->find($jo_id);
|
||||
if ($jo == null)
|
||||
// promo
|
||||
if ($promo != null)
|
||||
{
|
||||
$data = [
|
||||
'job_order' => null
|
||||
$promo_data = [
|
||||
'id' => $promo->getID(),
|
||||
'name' => $promo->getName(),
|
||||
'code' => $promo->getCode(),
|
||||
'discount_rate' => $promo->getDiscountRate(),
|
||||
'discount_apply' => $promo->getDiscountApply(),
|
||||
];
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
||||
$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(),
|
||||
]
|
||||
];
|
||||
$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(),
|
||||
]
|
||||
];
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
public function acceptJobOrder(Request $req)
|
||||
{
|
||||
$required_params = ['jo_id'];
|
||||
$required_params = [
|
||||
'jo_id'
|
||||
];
|
||||
$data = $this->checkJO($req, $required_params, $jo);
|
||||
if (isset($data['error']))
|
||||
return $data;
|
||||
|
||||
// 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 (?)
|
||||
|
||||
// add event log
|
||||
$rider = $this->session->getRider();
|
||||
$event = new JOEvent();
|
||||
|
|
@ -742,7 +699,7 @@ class CMBRiderAPIHandler implements RiderAPIHandlerInterface
|
|||
public function setJobOrderInTransit(Request $req)
|
||||
{
|
||||
$required_params = ['jo_id'];
|
||||
$data = $this->checkJO($req, $required_params, $jo);
|
||||
$data = $this->checkActiveJO($req, $required_params, $jo);
|
||||
if (isset($data['error']))
|
||||
return $data;
|
||||
|
||||
|
|
@ -768,13 +725,41 @@ class CMBRiderAPIHandler implements RiderAPIHandlerInterface
|
|||
|
||||
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);
|
||||
if (isset($data['error']))
|
||||
return $data;
|
||||
|
||||
// $jo->cancel("rider cancelled");
|
||||
// requeue it, instead of cancelling it
|
||||
$jo->requeue();
|
||||
|
||||
// add event log
|
||||
|
|
@ -802,7 +787,7 @@ class CMBRiderAPIHandler implements RiderAPIHandlerInterface
|
|||
public function arrive(Request $req)
|
||||
{
|
||||
$required_params = ['jo_id'];
|
||||
$data = $this->checkJO($req, $required_params, $jo);
|
||||
$data = $this->checkActiveJO($req, $required_params, $jo);
|
||||
if (isset($data['error']))
|
||||
return $data;
|
||||
|
||||
|
|
@ -868,90 +853,24 @@ class CMBRiderAPIHandler implements RiderAPIHandlerInterface
|
|||
public function payment(Request $req)
|
||||
{
|
||||
$required_params = ['jo_id'];
|
||||
$data = $this->checkJO($req, $required_params, $jo);
|
||||
$data = $this->checkActiveJO($req, $required_params, $jo);
|
||||
if (isset($data['error']))
|
||||
return $data;
|
||||
|
||||
// set invoice to paid
|
||||
$jo->getInvoice()->setStatus(InvoiceStatus::PAID);
|
||||
|
||||
/*
|
||||
// set jo status to fulfilled
|
||||
$jo->setStatus(JOStatus::FULFILLED);
|
||||
*/
|
||||
$jo->fulfill();
|
||||
|
||||
// add event log
|
||||
$rider = $this->session->getRider();
|
||||
$event = new JOEvent();
|
||||
$event->setDateHappen(new DateTime())
|
||||
->setTypeID(CMBJOEventType::FULFILL)
|
||||
->setTypeID(CMBJOEventType::PAID)
|
||||
->setJobOrder($jo)
|
||||
->setRider($rider);
|
||||
$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();
|
||||
|
||||
// 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;
|
||||
}
|
||||
|
||||
|
|
@ -1053,7 +972,7 @@ class CMBRiderAPIHandler implements RiderAPIHandlerInterface
|
|||
|
||||
// allow rider to change service, promo, battery and trade-in options
|
||||
$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']))
|
||||
return $data;
|
||||
|
||||
|
|
@ -1180,85 +1099,72 @@ class CMBRiderAPIHandler implements RiderAPIHandlerInterface
|
|||
public function generateInvoice(Request $req)
|
||||
{
|
||||
$required_params = ['jo_id'];
|
||||
$data = $this->checkParamsAndKey($req, $required_params);
|
||||
$data = $this->checkActiveJO($req, $required_params, $jo);
|
||||
if (isset($data['error']))
|
||||
return $data;
|
||||
|
||||
// get jo
|
||||
$jo_id = $req->query->get('jo_id');
|
||||
$inv = $jo->getInvoice();
|
||||
$promo = $inv->getPromo();
|
||||
|
||||
$jo = $this->em->getRepository(JobOrder::class)->find($jo_id);
|
||||
if ($jo == null)
|
||||
// invoice items
|
||||
$inv_items = [];
|
||||
foreach ($inv->getItems() as $item)
|
||||
{
|
||||
$data = [
|
||||
'invoice' => null
|
||||
$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
|
||||
{
|
||||
$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 = [
|
||||
'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,
|
||||
]
|
||||
];
|
||||
$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,
|
||||
]
|
||||
];
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
public function startJobOrder(Request $req)
|
||||
{
|
||||
$required_params = ['jo_id'];
|
||||
$data = $this->checkJO($req, $required_params, $jo);
|
||||
$data = $this->checkActiveJO($req, $required_params, $jo);
|
||||
if (isset($data['error']))
|
||||
return $data;
|
||||
|
||||
|
|
@ -1279,21 +1185,87 @@ class CMBRiderAPIHandler implements RiderAPIHandlerInterface
|
|||
public function completeJobOrder(Request $req)
|
||||
{
|
||||
$required_params = ['jo_id'];
|
||||
$data = $this->checkJO($req, $required_params, $jo);
|
||||
$data = $this->checkActiveJO($req, $required_params, $jo);
|
||||
if (isset($data['error']))
|
||||
return $data;
|
||||
|
||||
/*
|
||||
// set jo status to fulfilled
|
||||
$jo->setStatus(JOStatus::FULFILLED);
|
||||
*/
|
||||
$jo->fulfill();
|
||||
|
||||
// add event log
|
||||
$rider = $this->session->getRider();
|
||||
$event = new JOEvent();
|
||||
$event->setDateHappen(new DateTime())
|
||||
->setTypeID(CMBJOEventType::RIDER_COMPLETE)
|
||||
->setTypeID(CMBJOEventType::FULFILL)
|
||||
->setJobOrder($jo)
|
||||
->setRider($rider);
|
||||
$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();
|
||||
|
||||
// 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;
|
||||
}
|
||||
|
||||
|
|
@ -1302,55 +1274,15 @@ class CMBRiderAPIHandler implements RiderAPIHandlerInterface
|
|||
$required_params = [
|
||||
'jo_id'
|
||||
];
|
||||
$data = $this->checkParamsAndKey($req, $required_params);
|
||||
$data = $this->checkJO($req, $required_params, $jo);
|
||||
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();
|
||||
$rider->setActiveJobOrder($jo);
|
||||
|
||||
// get jo
|
||||
$jo_id = $req->request->get('jo_id');
|
||||
|
||||
$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();
|
||||
}
|
||||
$this->em->persist($rider);
|
||||
$this->em->flush();
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
|
@ -1432,7 +1364,7 @@ class CMBRiderAPIHandler implements RiderAPIHandlerInterface
|
|||
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
|
||||
$data = $this->checkParamsAndKey($req, $required_params);
|
||||
|
|
@ -1459,9 +1391,14 @@ class CMBRiderAPIHandler implements RiderAPIHandlerInterface
|
|||
];
|
||||
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
|
||||
if ($req->request->get('jo_id') != $jo->getID())
|
||||
if ($jo_id != $jo->getID())
|
||||
{
|
||||
$data = [
|
||||
'error' => 'Job order selected is not active job order.'
|
||||
|
|
@ -1472,6 +1409,63 @@ class CMBRiderAPIHandler implements RiderAPIHandlerInterface
|
|||
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)
|
||||
{
|
||||
$all = $req->request->all();
|
||||
|
|
|
|||
Loading…
Reference in a new issue