From 932bd7c77047088c9381fbc0a08b752d48ee4545 Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Wed, 15 Apr 2020 07:32:05 +0000 Subject: [PATCH 1/3] Add mobile customer layer to the dashboard map. --- public/assets/js/dashboard_map.js | 46 +++++++++++++++++++++++++++++-- src/Controller/HomeController.php | 21 ++++++++++++++ templates/home.html.twig | 13 +++++++-- 3 files changed, 74 insertions(+), 6 deletions(-) diff --git a/public/assets/js/dashboard_map.js b/public/assets/js/dashboard_map.js index 6cba7d68..16f8a78d 100644 --- a/public/assets/js/dashboard_map.js +++ b/public/assets/js/dashboard_map.js @@ -1,14 +1,16 @@ class DashboardMap { - constructor(options, rider_markers, cust_markers) { + constructor(options, rider_markers, cust_markers, mc_markers) { this.options = options; this.rider_markers = rider_markers; this.cust_markers = cust_markers; + this.mobile_cust_markers = mc_markers; // layer groups this.layer_groups = { 'rider_available': L.layerGroup(), 'rider_active_jo': L.layerGroup(), - 'customer': L.layerGroup() + 'customer': L.layerGroup(), + 'mobile_customer': L.layerGroup(), }; } @@ -31,6 +33,7 @@ class DashboardMap { this.layer_groups.rider_available.addTo(this.map); this.layer_groups.rider_active_jo.addTo(this.map); this.layer_groups.customer.addTo(this.map); + this.layer_groups.mobile_customer.addTo(this.map); // base layer var baseMaps = { @@ -42,7 +45,8 @@ class DashboardMap { var overlayMaps = { 'Available Riders' : this.layer_groups.rider_available, 'JO Riders' : this.layer_groups.rider_active_jo, - 'Customers' : this.layer_groups.customer + 'Customers' : this.layer_groups.customer, + 'Mobile Customers': this.layer_groups.mobile_customer } L.control.layers(baseMaps, overlayMaps).addTo(this.map); @@ -133,6 +137,32 @@ class DashboardMap { layer_group.removeLayer(markers[id]); } + putMobileCustomerMarker(id, lat, lng) { + this.putMarker( + id, + lat, + lng, + this.mobile_cust_markers, + this.options.icons.mobile_customer, + this.layer_groups.mobile_customer, + this.options.cust_popup_url + ); + } + + removeMobileCustomerMarker(id) { + console.log('removing mobile customer marker for ' + id); + var layer_group = this.layer_groups.mobile_customer; + var markers = this.mobile_cust_markers; + + // no customer marker with that id + if (!markers.hasOwnProperty(id)) { + console.log('no such marker to remove'); + return; + } + + layer_group.removeLayer(markers[id]); + } + putRiderAvailableMarker(id, lat, lng) { this.putMarker( id, @@ -180,10 +210,12 @@ class DashboardMap { my.layer_groups.rider_available.clearLayers(); my.layer_groups.rider_active_jo.clearLayers(); my.layer_groups.customer.clearLayers(); + my.layer_groups.mobile_customer.clearLayers(); // get riders and job orders var riders = response.riders; var jos = response.jos; + var mobile_jos = response.mobile_jos; // job orders $.each(jos, function(id, data) { @@ -193,6 +225,14 @@ class DashboardMap { my.putCustomerMarker(id, lat, lng); }); + // mobile app job orders + $.each(mobile_jos, function(id, data) { + var lat = data.latitude; + var lng = data.longitude; + + my.putMobileCustomerMarker(id, lat, lng); + }); + // riders $.each(riders, function(id, data) { var lat = data.latitude; diff --git a/src/Controller/HomeController.php b/src/Controller/HomeController.php index 5ba473af..cbc4afa7 100644 --- a/src/Controller/HomeController.php +++ b/src/Controller/HomeController.php @@ -13,7 +13,9 @@ use App\Service\JobOrderCache; use App\Service\RiderCache; use App\Entity\Rider; +use App\Entity\JobOrder; +use App\Ramcar\TransactionOrigin; class HomeController extends Controller { @@ -63,6 +65,24 @@ class HomeController extends Controller $riders[$rider_id]['has_jo'] = true; } + // get JOs with transaction origin TransactionOrigin::MOBILE_APP from list of active_jos + $mobile_jos = []; + foreach ($active_jos as $jo_id => $jo_data) + { + $jo = $em->getRepository(JobOrder::class)->find($jo_id); + if ($jo == null) + { + unset($active_jos[$jo_id]); + continue; + } + + if ($jo->getSource() == TransactionOrigin::MOBILE_APP) + { + $mobile_jos[$jo_id] = $jo_data; + unset($active_jos[$jo_id]); + } + } + // get active riders from cache // get all riders /* @@ -120,6 +140,7 @@ class HomeController extends Controller return $this->json([ 'jos' => $active_jos, 'riders' => $riders, + 'mobile_jos' => $mobile_jos, ]); } diff --git a/templates/home.html.twig b/templates/home.html.twig index 05fedfd9..c9e4953e 100644 --- a/templates/home.html.twig +++ b/templates/home.html.twig @@ -20,7 +20,7 @@ {% endif %} +{% endblock %} diff --git a/templates/report/jo-events/form.html.twig b/templates/report/jo-events/form.html.twig new file mode 100644 index 00000000..ea5c2ed9 --- /dev/null +++ b/templates/report/jo-events/form.html.twig @@ -0,0 +1,82 @@ +{% extends 'base.html.twig' %} + +{% block body %} + +
+
+
+

Job Order Events Report

+
+
+
+ +
+ +
+
+
+
+
+
+ + + +

+ Select a date range +

+
+
+
+
+
+
+
+ +
+ +
+ +
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+{% endblock %} + +{% block scripts %} + +{% endblock %} From 88a45034f927551ae1165b5eff9fd27c2ac5a5e3 Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Thu, 16 Apr 2020 09:08:35 +0000 Subject: [PATCH 3/3] Add jo events report. #379 --- src/Controller/ReportController.php | 94 ++++++++++++++++++++++++++++- 1 file changed, 92 insertions(+), 2 deletions(-) diff --git a/src/Controller/ReportController.php b/src/Controller/ReportController.php index a7e0c62c..94cede5f 100644 --- a/src/Controller/ReportController.php +++ b/src/Controller/ReportController.php @@ -795,6 +795,47 @@ class ReportController extends Controller return $this->render('report/jo-events/form.html.twig'); } + public function jobOrderEventsSubmit(Request $req, EntityManagerInterface $em) + { + $hub_events = $this->getJobOrderEvents($req, JOEventType::HUB_ASSIGN); + $arrive_events = $this->getJobOrderEvents($req, JOEventType::RIDER_ARRIVE); + $accept_events = $this->getJobOrderEvents($req, JOEventType::RIDER_ACCEPT); + + $blanks = []; + array_push($blanks, array("\t","\t","\t","\t")); + + $data = array_merge($hub_events, $blanks, $arrive_events, $blanks, $accept_events); + + $resp = new StreamedResponse(); + $resp->setCallback(function() use ($data) { + // csv output + $csv_handle = fopen('php://output', 'w+'); + fputcsv($csv_handle, [ + 'Job Order ID', + 'Date and Time Created for JO', + 'Date Created for JO', + 'Time Created for JO', + 'Service Type', + 'Type ID', + + ]); + // write hub events + foreach ($data as $row) + { + fputcsv($csv_handle, $row); + } + + fclose($csv_handle); + }); + + $filename = 'job_order_events_report' . '.csv'; + + $resp->setStatusCode(200); + $resp->headers->set('Content-Type', 'text/csv; charset=utf-8'); + $resp->headers->set('Content-Disposition', 'attachment; filename="' . $filename . '"'); + + return $resp; + } protected function processPopappFile(UploadedFile $csv_file, EntityManagerInterface $em) { @@ -1254,7 +1295,6 @@ class ReportController extends Controller ->setParameter('end', $date_end->format('Y-m-d') . ' 23:59:59') ->getQuery(); - // run query $jos = $query->getResult(); @@ -1306,7 +1346,6 @@ class ReportController extends Controller } } - // get invoice date create and item sku if any $datetime_create_invoice = ''; $sku = ''; @@ -1375,4 +1414,55 @@ class ReportController extends Controller return $result; } + protected function getJobOrderEvents(Request $req, $event_type) + { + // get query builder + $qb = $this->getDoctrine() + ->getRepository(JOEvent::class) + ->createQueryBuilder('r'); + + // get dates + $raw_date_start = $req->request->get('date_start'); + $raw_date_end = $req->request->get('date_end'); + + $date_start = DateTime::createFromFormat('m/d/Y', $raw_date_start); + $date_end = DateTime::createFromFormat('m/d/Y', $raw_date_end); + + // build query + $query = $qb->where('r.date_create >= :start') + ->andWhere('r.date_create <= :end') + ->andWhere('r.type_id = :event_type') + ->setParameter('start', $date_start->format('Y-m-d') . ' 00:00:00') + ->setParameter('end', $date_end->format('Y-m-d') . ' 23:59:59') + ->setParameter('event_type', $event_type) + ->getQuery(); + + // run query + $jo_events = $query->getResult(); + + $result = []; + foreach ($jo_events as $jo_event) + { + $datetime_jo_create = ''; + $date_jo_create = ''; + $time_jo_create = ''; + + $jo = $jo_event->getJobOrder(); + $jo_date_create = $jo->getDateCreate(); + $datetime_jo_create = $jo_date_create->format('m-d-Y H:i'); + $date_jo_create = $jo_date_create->format('m-d-Y'); + $time_jo_create = $jo_date_create->format('H:i'); + + $result[] = [ + $jo->getID(), + $datetime_jo_create, + $date_jo_create, + $time_jo_create, + $jo->getServiceType(), + $jo_event->getTypeID(), + ]; + } + + return $result; + } }