Resolve "Rider API changes" #963

Merged
jankstudio merged 5 commits from 151-rider-api-changes into master 2018-07-01 19:31:58 +00:00
7 changed files with 55 additions and 6 deletions

1
.gitignore vendored
View file

@ -5,6 +5,7 @@
/var/ /var/
/vendor/ /vendor/
/sql/ /sql/
/pem/
###< symfony/framework-bundle ### ###< symfony/framework-bundle ###
*.swp *.swp

View file

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

View file

@ -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([

View file

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

View file

@ -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;
}
} }

View file

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

View file

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