Resolve "Rider API changes" #963
7 changed files with 55 additions and 6 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -5,6 +5,7 @@
|
||||||
/var/
|
/var/
|
||||||
/vendor/
|
/vendor/
|
||||||
/sql/
|
/sql/
|
||||||
|
/pem/
|
||||||
###< symfony/framework-bundle ###
|
###< symfony/framework-bundle ###
|
||||||
|
|
||||||
*.swp
|
*.swp
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,7 @@ use App\Ramcar\TradeInType;
|
||||||
|
|
||||||
use App\Service\InvoiceCreator;
|
use App\Service\InvoiceCreator;
|
||||||
use App\Service\RisingTideGateway;
|
use App\Service\RisingTideGateway;
|
||||||
|
use App\Service\MQTTClient;
|
||||||
|
|
||||||
use App\Entity\MobileSession;
|
use App\Entity\MobileSession;
|
||||||
use App\Entity\Customer;
|
use App\Entity\Customer;
|
||||||
|
|
@ -899,7 +900,6 @@ class APIController extends Controller
|
||||||
'invoice' => $invoice_data
|
'invoice' => $invoice_data
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
||||||
// set data
|
// set data
|
||||||
$res->setData($data);
|
$res->setData($data);
|
||||||
|
|
||||||
|
|
@ -1260,7 +1260,7 @@ class APIController extends Controller
|
||||||
return $res->getReturnResponse();
|
return $res->getReturnResponse();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function cancelJobOrder(Request $req)
|
public function cancelJobOrder(Request $req, MQTTClient $mclient)
|
||||||
{
|
{
|
||||||
$required_params = [
|
$required_params = [
|
||||||
'jo_id',
|
'jo_id',
|
||||||
|
|
@ -1300,13 +1300,23 @@ class APIController extends Controller
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: check job order status, if it's cancellable
|
// TODO: check job order status, if it's cancellable
|
||||||
|
$cancel_reason = $req->request->get('reason');
|
||||||
$jo->setStatus(JOStatus::CANCELLED)
|
$jo->setStatus(JOStatus::CANCELLED)
|
||||||
->setDateCancel(new DateTime())
|
->setDateCancel(new DateTime())
|
||||||
->setCancelReason($req->request->get('reason'));
|
->setCancelReason($cancel_reason);
|
||||||
|
|
||||||
$em->flush();
|
$em->flush();
|
||||||
|
|
||||||
|
// send mobile app event
|
||||||
|
$payload = [
|
||||||
|
'event' => 'cancelled',
|
||||||
|
'reason' => $cancel_reason,
|
||||||
|
'jo_id' => $jo->getID(),
|
||||||
|
];
|
||||||
|
$mclient->sendEvent($jo, $payload);
|
||||||
|
$mclient->sendRiderEvent($jo, $payload);
|
||||||
|
|
||||||
|
|
||||||
$res->setData([]);
|
$res->setData([]);
|
||||||
|
|
||||||
return $res->getReturnResponse();
|
return $res->getReturnResponse();
|
||||||
|
|
|
||||||
|
|
@ -1168,6 +1168,7 @@ class JobOrderController extends BaseController
|
||||||
'event' => 'driver_assigned'
|
'event' => 'driver_assigned'
|
||||||
];
|
];
|
||||||
$mclient->sendEvent($obj, $payload);
|
$mclient->sendEvent($obj, $payload);
|
||||||
|
$mclient->sendRiderEvent($obj, $payload);
|
||||||
|
|
||||||
// return successful response
|
// return successful response
|
||||||
return $this->json([
|
return $this->json([
|
||||||
|
|
@ -1361,6 +1362,7 @@ class JobOrderController extends BaseController
|
||||||
'driver_id' => $rider->getID(),
|
'driver_id' => $rider->getID(),
|
||||||
];
|
];
|
||||||
$mclient->sendEvent($obj, $payload);
|
$mclient->sendEvent($obj, $payload);
|
||||||
|
$mclient->sendRiderEvent($obj, $payload);
|
||||||
|
|
||||||
// return successful response
|
// return successful response
|
||||||
return $this->json([
|
return $this->json([
|
||||||
|
|
@ -2135,6 +2137,7 @@ class JobOrderController extends BaseController
|
||||||
'jo_id' => $obj->getID(),
|
'jo_id' => $obj->getID(),
|
||||||
];
|
];
|
||||||
$mclient->sendEvent($obj, $payload);
|
$mclient->sendEvent($obj, $payload);
|
||||||
|
$mclient->sendRiderEvent($obj, $payload);
|
||||||
|
|
||||||
// return successful response
|
// return successful response
|
||||||
return $this->json([
|
return $this->json([
|
||||||
|
|
|
||||||
|
|
@ -368,7 +368,7 @@ class RAPIController extends Controller
|
||||||
'job_order' => [
|
'job_order' => [
|
||||||
'id' => $jo->getID(),
|
'id' => $jo->getID(),
|
||||||
'service_type' => $jo->getServiceType(),
|
'service_type' => $jo->getServiceType(),
|
||||||
'date_schedule' => $jo->getDateSchedule()->format('Ymd'),
|
'date_schedule' => $jo->getDateSchedule()->format('Ymd H:i:s'),
|
||||||
'longitude' => $coord->getLongitude(),
|
'longitude' => $coord->getLongitude(),
|
||||||
'latitude' => $coord->getLatitude(),
|
'latitude' => $coord->getLatitude(),
|
||||||
'status' => $jo->getStatus(),
|
'status' => $jo->getStatus(),
|
||||||
|
|
|
||||||
|
|
@ -106,10 +106,17 @@ class Rider
|
||||||
*/
|
*/
|
||||||
protected $password;
|
protected $password;
|
||||||
|
|
||||||
|
// rider sessions
|
||||||
|
/**
|
||||||
|
* @ORM\OneToMany(targetEntity="RiderSession", mappedBy="rider")
|
||||||
|
*/
|
||||||
|
protected $sessions;
|
||||||
|
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
$this->job_orders = new ArrayCollection();
|
$this->job_orders = new ArrayCollection();
|
||||||
$this->schedules = new ArrayCollection();
|
$this->schedules = new ArrayCollection();
|
||||||
|
$this->sessions = new ArrayCollection();
|
||||||
$this->curr_rating = 0;
|
$this->curr_rating = 0;
|
||||||
$this->flag_available = true;
|
$this->flag_available = true;
|
||||||
$this->flag_active = true;
|
$this->flag_active = true;
|
||||||
|
|
@ -307,4 +314,9 @@ class Rider
|
||||||
|
|
||||||
return $this->job_orders->matching($criteria)[0];
|
return $this->job_orders->matching($criteria)[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getSessions()
|
||||||
|
{
|
||||||
|
return $this->sessions;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ use App\Entity\JobOrder;
|
||||||
class MQTTClient
|
class MQTTClient
|
||||||
{
|
{
|
||||||
const PREFIX = 'motolite.control.';
|
const PREFIX = 'motolite.control.';
|
||||||
|
const RIDER_PREFIX = 'motorider.';
|
||||||
|
|
||||||
protected $mclient;
|
protected $mclient;
|
||||||
|
|
||||||
|
|
@ -36,6 +37,7 @@ class MQTTClient
|
||||||
if (count($sessions) == 0)
|
if (count($sessions) == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
// send to every customer session
|
||||||
foreach ($sessions as $sess)
|
foreach ($sessions as $sess)
|
||||||
{
|
{
|
||||||
$phone_num = $sess->getPhoneNumber();
|
$phone_num = $sess->getPhoneNumber();
|
||||||
|
|
@ -43,4 +45,25 @@ class MQTTClient
|
||||||
$this->publish($channel, json_encode($payload));
|
$this->publish($channel, json_encode($payload));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function sendRiderEvent(JobOrder $job_order, $payload)
|
||||||
|
{
|
||||||
|
// check if a rider is available
|
||||||
|
$rider = $job_order->getRider();
|
||||||
|
if ($rider == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// check if rider has sessions
|
||||||
|
$sessions = $rider->getSessions();
|
||||||
|
if (count($sessions) == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// send to every rider session
|
||||||
|
foreach ($sessions as $sess)
|
||||||
|
{
|
||||||
|
$sess_id = $sess->getID();
|
||||||
|
$channel = self::RIDER_PREFIX . $sess_id;
|
||||||
|
$this->publish($channel, json_encode($payload));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -384,7 +384,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="m-form__seperator m-form__seperator--dashed"></div>
|
<div class="m-form__seperator m-form__seperator--dashed"></div>
|
||||||
<div class="m-form__section{{ ftags.invoice_edit ? ' m-form__section--last' }}">>
|
<div class="m-form__section{{ ftags.invoice_edit ? ' m-form__section--last' }}">
|
||||||
<div class="m-form__heading">
|
<div class="m-form__heading">
|
||||||
<h3 class="m-form__heading-title">
|
<h3 class="m-form__heading-title">
|
||||||
Invoice
|
Invoice
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue