From 74039a8011838a1d14680dc14150d56c7a277693 Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Wed, 5 Aug 2020 06:48:17 +0000 Subject: [PATCH 1/3] Set service types to battery sales, warranty replacement, jumpstart, and warranty claim. #458 --- src/Ramcar/CMBServiceType.php | 4 +++- src/Service/InvoiceGenerator/CMBInvoiceGenerator.php | 4 ++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/Ramcar/CMBServiceType.php b/src/Ramcar/CMBServiceType.php index 63d18f96..607b9c43 100644 --- a/src/Ramcar/CMBServiceType.php +++ b/src/Ramcar/CMBServiceType.php @@ -6,11 +6,13 @@ class CMBServiceType extends NameValue { const BATTERY_REPLACEMENT_NEW = 'battery_new'; const BATTERY_REPLACEMENT_WARRANTY = 'battery_warranty'; + const WARRANTY_CLAIM = 'warranty_claim'; const JUMPSTART = 'jumpstart'; const COLLECTION = [ 'battery_new' => 'Battery Sales', - 'battery_warranty' => 'Under Warranty', + 'battery_warranty' => 'Warranty Replacement', + 'warranty_claim' => 'Warranty Claim', 'jumpstart' => 'Jumpstart', ]; } diff --git a/src/Service/InvoiceGenerator/CMBInvoiceGenerator.php b/src/Service/InvoiceGenerator/CMBInvoiceGenerator.php index 69b4e55a..f2e75a78 100644 --- a/src/Service/InvoiceGenerator/CMBInvoiceGenerator.php +++ b/src/Service/InvoiceGenerator/CMBInvoiceGenerator.php @@ -86,6 +86,10 @@ class CMBInvoiceGenerator implements InvoiceGeneratorInterface case CMBServiceType::BATTERY_REPLACEMENT_WARRANTY: $this->processWarranty($total, $criteria, $invoice); break; + case CMBServiceType::WARRANTY_CLAIM: + // TODO: this will change once we confirm what needs to be computed + $this->processOtherServices($total, $invoice, $stype); + break; //case ServiceType::POST_RECHARGED: // $this->processRecharge($total, $invoice); // break; From b20c61a83011814c3ac9b5a7d563c2a0f885166e Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Thu, 6 Aug 2020 08:38:02 +0000 Subject: [PATCH 2/3] Remove rider name from labels in Dashboard. #457 --- config/routes/rider.yaml | 5 - public/assets/js/dashboard_map.js | 2 +- public/assets/js/map_mqtt.js | 161 ++++++++++++++---------------- src/Controller/HomeController.php | 4 - 4 files changed, 77 insertions(+), 95 deletions(-) diff --git a/config/routes/rider.yaml b/config/routes/rider.yaml index 5e31dfb4..da41058d 100644 --- a/config/routes/rider.yaml +++ b/config/routes/rider.yaml @@ -61,8 +61,3 @@ rider_ajax_avialable: path: /riders/{id}/available controller: App\Controller\RiderController::ajaxAvailable methods: [GET] - -rider_ajax_rider_name: - path: /riders/rider_name - controller: App\Controller\RiderController::ajaxRiderName - methods: [GET] diff --git a/public/assets/js/dashboard_map.js b/public/assets/js/dashboard_map.js index a00612a6..c429ad79 100644 --- a/public/assets/js/dashboard_map.js +++ b/public/assets/js/dashboard_map.js @@ -302,7 +302,7 @@ class DashboardMap { $.each(riders, function(id, data) { var lat = data.latitude; var lng = data.longitude; - var name = data.name; + var name = ''; if (data.has_jo) my.putRiderActiveJOMarker(id, lat, lng, name); diff --git a/public/assets/js/map_mqtt.js b/public/assets/js/map_mqtt.js index 825bf065..c3f4db0e 100644 --- a/public/assets/js/map_mqtt.js +++ b/public/assets/js/map_mqtt.js @@ -79,98 +79,89 @@ class MapEventHandler { handleRider(chan_split, payload) { // console.log("rider message"); - // get rider name using chan_split[1] which is rider id var rider_id = chan_split[1]; - $.ajax({ - method: "GET", - url: "{{ url('rider_ajax_rider_name') }}", - data: {id: rider_id} - }).done(function(response) { - var name = response.rider_name; - console.log('rider_name ' + name); - switch (chan_split[2]) { - case "availability": - console.log("got availability for rider " + chan_split[1] + " - " + payload); - var obj = JSON.parse(payload); + switch (chan_split[2]) { + case "availability": + console.log("got availability for rider " + chan_split[1] + " - " + payload); + var obj = JSON.parse(payload); - var status = obj.status; - console.log("status " + status); - switch (status) { - case 'rider_offline': - this.dashmap.rider_availability[chan_split[1]] = false; - this.dashmap.removeRiderMarker(chan_split[1]); - break; - case 'rider_online': - this.dashmap.rider_availability[chan_split[1]] = true; - var lat = parseFloat(obj.latitude); - var lng = parseFloat(obj.longitude); - - // cheeck if rider is available / unavailable - // TODO: make url not hardcoded - var dashmap = this.dashmap; - $.get('https://cmbdev.wildcard.cc/riders/' + chan_split[1] + '/available').done(function(data) { - console.log('rider availability - ' + data); - switch (data) { - case 'available': - console.log('putting available marker ' + chan_split[1] + ' ' + lat + ':' + lng); - dashmap.switchRiderStatus(chan_split[1], 'available'); - dashmap.putRiderAvailableMarker(chan_split[1], lat, lng, name); - break; - case 'unavailable': - console.log('putting active jo marker ' + chan_split[1] + ' ' + lat + ':' + lng); - dashmap.switchRiderStatus(chan_split[1], 'jo'); - dashmap.putRiderActiveJOMarker(chan_split[1], lat, lng, name); - break; - } - }); - break; - } - break; - case "location": - // console.log("got location for rider " + chan_split[1] + " - " + payload); - var pl_split = payload.split(':'); - // console.log(pl_split); - - // check for correct format - if (pl_split.length != 2) + var status = obj.status; + console.log("status " + status); + switch (status) { + case 'rider_offline': + this.dashmap.rider_availability[chan_split[1]] = false; + this.dashmap.removeRiderMarker(chan_split[1]); break; + case 'rider_online': + this.dashmap.rider_availability[chan_split[1]] = true; + var lat = parseFloat(obj.latitude); + var lng = parseFloat(obj.longitude); - var lat = parseFloat(pl_split[0]); - var lng = parseFloat(pl_split[1]); + // cheeck if rider is available / unavailable + // TODO: make url not hardcoded + var dashmap = this.dashmap; + $.get('https://cmbdev.wildcard.cc/riders/' + chan_split[1] + '/available').done(function(data) { + console.log('rider availability - ' + data); + switch (data) { + case 'available': + console.log('putting available marker ' + chan_split[1] + ' ' + lat + ':' + lng); + dashmap.switchRiderStatus(chan_split[1], 'available'); + dashmap.putRiderAvailableMarker(chan_split[1], lat, lng); + break; + case 'unavailable': + console.log('putting active jo marker ' + chan_split[1] + ' ' + lat + ':' + lng); + dashmap.switchRiderStatus(chan_split[1], 'jo'); + dashmap.putRiderActiveJOMarker(chan_split[1], lat, lng); + break; + } + }); + break; + } + break; + case "location": + // console.log("got location for rider " + chan_split[1] + " - " + payload + var pl_split = payload.split(':'); + // console.log(pl_split); - var display_marker = true; - if (this.dashmap.rider_availability.hasOwnProperty(chan_split[1])) { - if (!this.dashmap.rider_availability[chan_split[1]]) { - console.log('NOT displaying marker for inactive rider'); - display_marker = false; - } - } else { - console.log('rider not in availability check'); - } - - // TODO: cache rider availability (available vs active jo) status and check before displaying icon - // NOTE: we really should fix our terms since available can mean many things - if (display_marker) { - this.dashmap.putRiderAvailableMarker(chan_split[1], lat, lng, name); - } + // check for correct format + if (pl_split.length != 2) break; - case "status": - console.log("got status for rider " + chan_split[1] + " - " + payload); - switch (payload) { - case 'available': - this.dashmap.switchRiderStatus(chan_split[1], 'available'); - break; - case 'jo': - console.log('jo status'); - this.dashmap.switchRiderStatus(chan_split[1], 'jo'); - break; - case 'logout': - this.dashmap.removeRiderMarker(chan_split[1]); - break; + + var lat = parseFloat(pl_split[0]); + var lng = parseFloat(pl_split[1]); + + var display_marker = true; + if (this.dashmap.rider_availability.hasOwnProperty(chan_split[1])) { + if (!this.dashmap.rider_availability[chan_split[1]]) { + console.log('NOT displaying marker for inactive rider'); + display_marker = false; } - break; - } - }); + } else { + console.log('rider not in availability check'); + } + + // TODO: cache rider availability (available vs active jo) status and check before displaying icon + // NOTE: we really should fix our terms since available can mean many things + if (display_marker) { + this.dashmap.putRiderAvailableMarker(chan_split[1], lat, lng); + } + break; + case "status": + console.log("got status for rider " + chan_split[1] + " - " + payload); + switch (payload) { + case 'available': + this.dashmap.switchRiderStatus(chan_split[1], 'available'); + break; + case 'jo': + console.log('jo status'); + this.dashmap.switchRiderStatus(chan_split[1], 'jo'); + break; + case 'logout': + this.dashmap.removeRiderMarker(chan_split[1]); + break; + } + break; + } } handleJobOrder(chan_split, payload) { diff --git a/src/Controller/HomeController.php b/src/Controller/HomeController.php index 46f50c19..1a157b78 100644 --- a/src/Controller/HomeController.php +++ b/src/Controller/HomeController.php @@ -58,10 +58,6 @@ class HomeController extends Controller continue; } - // get full name of rider - $name = $rider->getFullName(); - $riders[$rider_id]['name'] = $name; - $jo = $rider->getActiveJobOrder(); if ($jo == null) $riders[$rider_id]['has_jo'] = false; From 166c4942f1aaa571d7e949147815a4d7a7869fd0 Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Fri, 14 Aug 2020 09:35:57 +0000 Subject: [PATCH 3/3] Add rider name to rider labels. #457 --- config/routes/rider.yaml | 6 +++++ public/assets/js/dashboard_map.js | 37 ++++++++++++++++++++++++++---- src/Controller/RiderController.php | 9 ++++---- templates/home.html.twig | 17 +++++--------- 4 files changed, 50 insertions(+), 19 deletions(-) diff --git a/config/routes/rider.yaml b/config/routes/rider.yaml index da41058d..6c4911d0 100644 --- a/config/routes/rider.yaml +++ b/config/routes/rider.yaml @@ -61,3 +61,9 @@ rider_ajax_avialable: path: /riders/{id}/available controller: App\Controller\RiderController::ajaxAvailable methods: [GET] + +rider_ajax_rider_name: + path: /riders/{id}/name + controller: App\Controller\RiderController::ajaxRiderName + methods: [GET] + diff --git a/public/assets/js/dashboard_map.js b/public/assets/js/dashboard_map.js index c429ad79..5d753cab 100644 --- a/public/assets/js/dashboard_map.js +++ b/public/assets/js/dashboard_map.js @@ -4,6 +4,7 @@ class DashboardMap { this.rider_markers = rider_markers; this.cust_markers = cust_markers; this.rider_availability = {}; + this.rider_names = {}; // layer groups this.layer_groups = { @@ -304,13 +305,41 @@ class DashboardMap { var lng = data.longitude; var name = ''; - if (data.has_jo) - my.putRiderActiveJOMarker(id, lat, lng, name); - else - my.putRiderAvailableMarker(id, lat, lng, name); + if (my.rider_names.hasOwnProperty(id)) { + name = my.rider_names[id]; + + if (data.has_jo) + my.putRiderActiveJOMarker(id, lat, lng, name); + else + my.putRiderAvailableMarker(id, lat, lng, name) + + } else { + getRiderName(id, my.options.rider_name_url, function(name) { + my.rider_names[id] = name; + + if (data.has_jo) + my.putRiderActiveJOMarker(id, lat, lng, name); + else + my.putRiderAvailableMarker(id, lat, lng, name) + }); + } }); // console.log(rider_markers); }); } } + +function getRiderName(id, url, callback) { + var name = ''; + var rider_url = url.replace('[id]', id); + + $.ajax({ + method: "GET", + url: rider_url + }).done(function(response) { + name = response.rider_name; + callback(name); + }); +} + diff --git a/src/Controller/RiderController.php b/src/Controller/RiderController.php index bdfd3b85..763d4900 100644 --- a/src/Controller/RiderController.php +++ b/src/Controller/RiderController.php @@ -616,11 +616,11 @@ class RiderController extends Controller return $response; } - public function ajaxRiderName(EntityManagerInterface $em, Request $req) + /** + * @ParamConverter("rider", class="App\Entity\Rider") + */ + public function ajaxRiderName(EntityManagerInterface $em, Rider $rider) { - $rider_id = $req->query->get('id'); - - $rider = $em->getRepository(Rider::class)->find($rider_id); $rider_name = ''; if ($rider != null) $rider_name = $rider->getFullName(); @@ -629,4 +629,5 @@ class RiderController extends Controller 'rider_name' => $rider_name, ]); } + } diff --git a/templates/home.html.twig b/templates/home.html.twig index 8e5b1760..9e784ab6 100644 --- a/templates/home.html.twig +++ b/templates/home.html.twig @@ -35,7 +35,8 @@ function initMap(r_markers, c_markers, icons) { 'zoom': 13, 'rider_popup_url': '/riders/[id]/popup', 'cust_popup_url': '/job-order/[id]/popup', - 'icons': icons + 'icons': icons, + 'rider_name_url': '/riders/[id]/name' }; var dashmap = new DashboardMap(options, r_markers, c_markers); @@ -45,7 +46,7 @@ function initMap(r_markers, c_markers, icons) { return dashmap; } -function initEventHandler(dashmap, icons, ssl) { +function initEventHandler(dashmap) { var options = { 'track_jo': true, 'track_rider': true, @@ -54,12 +55,11 @@ function initEventHandler(dashmap, icons, ssl) { 'rider_status': 'rider/+/status', 'jo_location': 'jo/+/location', 'jo_status': 'jo/+/status', - 'jo_origin': 'jo/+/origin', - 'rider_availability': 'rider/+/availability' + 'jo_origin': 'jo/+/origin' }, }; - var event_handler = new MapEventHandler(options, dashmap, ssl); + var event_handler = new MapEventHandler(options, dashmap); event_handler.connect('{{ app.user.getID }}', '{{ mqtt_host }}', {{ mqtt_port }}); } @@ -95,13 +95,8 @@ var icons = { var r_markers = {}; var c_markers = {}; - var ssl = false; - {% if ssl_enable == 'true' %} - ssl = true; - {% endif %} - var dashmap = initMap(r_markers, c_markers, icons); - initEventHandler(dashmap, icons, ssl); + initEventHandler(dashmap, icons); {% endif %}