diff --git a/.gitignore b/.gitignore index 2fdbd37a..806b0a96 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,7 @@ /var/ /vendor/ /sql/ +/pem/ ###< symfony/framework-bundle ### *.swp diff --git a/src/Controller/APIController.php b/src/Controller/APIController.php index db83794b..54dcf627 100644 --- a/src/Controller/APIController.php +++ b/src/Controller/APIController.php @@ -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(); diff --git a/src/Controller/JobOrderController.php b/src/Controller/JobOrderController.php index a4d34fd9..0f0b6721 100644 --- a/src/Controller/JobOrderController.php +++ b/src/Controller/JobOrderController.php @@ -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([ diff --git a/src/Controller/RAPIController.php b/src/Controller/RAPIController.php index 0ad92ebc..8f4533e9 100644 --- a/src/Controller/RAPIController.php +++ b/src/Controller/RAPIController.php @@ -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(), diff --git a/src/Entity/Rider.php b/src/Entity/Rider.php index 02bca560..0f5a3116 100644 --- a/src/Entity/Rider.php +++ b/src/Entity/Rider.php @@ -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; + } } diff --git a/src/Service/MQTTClient.php b/src/Service/MQTTClient.php index a8aed8bc..b4bacc75 100644 --- a/src/Service/MQTTClient.php +++ b/src/Service/MQTTClient.php @@ -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)); + } + } } diff --git a/templates/job-order/form.html.twig b/templates/job-order/form.html.twig index 9a3d88d0..349c2d68 100644 --- a/templates/job-order/form.html.twig +++ b/templates/job-order/form.html.twig @@ -384,7 +384,7 @@
-