Merge branch '151-rider-api-changes' into 'master'

Resolve "Rider API changes"

Closes #151

See merge request jankstudio/resq!152
This commit is contained in:
Kendrick Chan 2018-07-01 19:31:57 +00:00
commit 959b2c9513
7 changed files with 55 additions and 6 deletions

1
.gitignore vendored
View file

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

View file

@ -23,6 +23,7 @@ use App\Ramcar\TradeInType;
use App\Service\InvoiceCreator;
use App\Service\RisingTideGateway;
use App\Service\MQTTClient;
use App\Entity\MobileSession;
use App\Entity\Customer;
@ -899,7 +900,6 @@ class APIController extends Controller
'invoice' => $invoice_data
];
// set data
$res->setData($data);
@ -1260,7 +1260,7 @@ class APIController extends Controller
return $res->getReturnResponse();
}
public function cancelJobOrder(Request $req)
public function cancelJobOrder(Request $req, MQTTClient $mclient)
{
$required_params = [
'jo_id',
@ -1300,13 +1300,23 @@ class APIController extends Controller
}
// TODO: check job order status, if it's cancellable
$cancel_reason = $req->request->get('reason');
$jo->setStatus(JOStatus::CANCELLED)
->setDateCancel(new DateTime())
->setCancelReason($req->request->get('reason'));
->setCancelReason($cancel_reason);
$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([]);
return $res->getReturnResponse();

View file

@ -1168,6 +1168,7 @@ class JobOrderController extends BaseController
'event' => 'driver_assigned'
];
$mclient->sendEvent($obj, $payload);
$mclient->sendRiderEvent($obj, $payload);
// return successful response
return $this->json([
@ -1361,6 +1362,7 @@ class JobOrderController extends BaseController
'driver_id' => $rider->getID(),
];
$mclient->sendEvent($obj, $payload);
$mclient->sendRiderEvent($obj, $payload);
// return successful response
return $this->json([
@ -2135,6 +2137,7 @@ class JobOrderController extends BaseController
'jo_id' => $obj->getID(),
];
$mclient->sendEvent($obj, $payload);
$mclient->sendRiderEvent($obj, $payload);
// return successful response
return $this->json([

View file

@ -368,7 +368,7 @@ class RAPIController extends Controller
'job_order' => [
'id' => $jo->getID(),
'service_type' => $jo->getServiceType(),
'date_schedule' => $jo->getDateSchedule()->format('Ymd'),
'date_schedule' => $jo->getDateSchedule()->format('Ymd H:i:s'),
'longitude' => $coord->getLongitude(),
'latitude' => $coord->getLatitude(),
'status' => $jo->getStatus(),

View file

@ -106,10 +106,17 @@ class Rider
*/
protected $password;
// rider sessions
/**
* @ORM\OneToMany(targetEntity="RiderSession", mappedBy="rider")
*/
protected $sessions;
public function __construct()
{
$this->job_orders = new ArrayCollection();
$this->schedules = new ArrayCollection();
$this->sessions = new ArrayCollection();
$this->curr_rating = 0;
$this->flag_available = true;
$this->flag_active = true;
@ -307,4 +314,9 @@ class Rider
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
{
const PREFIX = 'motolite.control.';
const RIDER_PREFIX = 'motorider.';
protected $mclient;
@ -36,6 +37,7 @@ class MQTTClient
if (count($sessions) == 0)
return;
// send to every customer session
foreach ($sessions as $sess)
{
$phone_num = $sess->getPhoneNumber();
@ -43,4 +45,25 @@ class MQTTClient
$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 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">
<h3 class="m-form__heading-title">
Invoice