From 8da95f2ed080b519caddaff9f083864c52866593 Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Tue, 14 Jan 2020 08:26:39 +0000 Subject: [PATCH] Add saving of updated form for one step job order. #270 --- src/Controller/JobOrderController.php | 26 +- .../JobOrderHandler/ResqJobOrderHandler.php | 53 +- templates/job-order/form.onestep.html.twig | 1133 +++++++---------- 3 files changed, 526 insertions(+), 686 deletions(-) diff --git a/src/Controller/JobOrderController.php b/src/Controller/JobOrderController.php index 1d1d7336..4a5a7bf3 100644 --- a/src/Controller/JobOrderController.php +++ b/src/Controller/JobOrderController.php @@ -870,11 +870,12 @@ class JobOrderController extends Controller /** * @Menu(selected="jo_onestep_edit_form") */ - public function oneStepEditForm($id, JobOrderHandlerInterface $jo_handler, GISManagerInterface $gis) + public function oneStepEditForm($id, JobOrderHandlerInterface $jo_handler, + GISManagerInterface $gis, MapTools $map_tools) { $this->denyAccessUnlessGranted('jo_onestep.edit', null, 'No access.'); - $params = $jo_handler->initializeOneStepEditForm($id); + $params = $jo_handler->initializeOneStepEditForm($id, $map_tools); $params['submit_url'] = $this->generateUrl('jo_onestep_edit_submit', ['id' => $id]); $params['return_url'] = $this->generateUrl('jo_open'); $params['map_js_file'] = $gis->getJSJOFile(); @@ -885,7 +886,26 @@ class JobOrderController extends Controller return $this->render($template, $params); } - public function oneStepEditSubmit(Request $req, JobOrderHandlerInterface $jo_handler) + public function oneStepEditSubmit(Request $req, JobOrderHandlerInterface $jo_handler, $id) { + $this->denyAccessUnlessGranted('jo_onestep.edit', null, 'No access.'); + + $error_array = []; + $error_array = $jo_handler->generateOneStepJobOrder($req, $id); + + // check if any errors were found + if (!empty($error_array)) { + // return validation failure response + return $this->json([ + 'success' => false, + 'errors' => $error_array + ], 422); + } + + + // return successful response + return $this->json([ + 'success' => 'Changes have been saved!' + ]); } } diff --git a/src/Service/JobOrderHandler/ResqJobOrderHandler.php b/src/Service/JobOrderHandler/ResqJobOrderHandler.php index 860058d4..87e1dc9d 100644 --- a/src/Service/JobOrderHandler/ResqJobOrderHandler.php +++ b/src/Service/JobOrderHandler/ResqJobOrderHandler.php @@ -1267,19 +1267,60 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface return $params; } - public function initializeOneStepEditForm($id) + public function initializeOneStepEditForm($id, $map_tools) { $em = $this->em; - $jo = $em->getRepository(JobOrder::class)->find($id); + $obj = $em->getRepository(JobOrder::class)->find($id); - $params['obj'] = $jo; - $params['mode'] = 'onestep_edit'; - $params['cvid'] = $jo->getCustomerVehicle()->getID(); - $params['vid'] = $jo->getCustomerVehicle()->getVehicle()->getID(); + $params['obj'] = $obj; + $params['mode'] = 'onestep-edit'; + $params['cvid'] = $obj->getCustomerVehicle()->getID(); + $params['vid'] = $obj->getCustomerVehicle()->getVehicle()->getID(); $this->fillDropdownParameters($params); $this->fillFormTags($params); + // get the hubs + // TODO: move this snippet to a function + $hubs = $map_tools->getClosestHubs($obj->getCoordinates(), 50, date("H:i:s")); + + $params['hubs'] = []; + + // format duration and distance into friendly time + foreach ($hubs as $hub) { + // duration + $seconds = $hub['duration']; + + if (!empty($seconds) && $seconds > 0) { + $hours = floor($seconds / 3600); + $minutes = ceil(($seconds / 60) % 60); + + $hub['duration'] = ($hours > 0 ? number_format($hours) . " hr" . ($hours > 1 ? "s" : '') . ($minutes > 0 ? ", " : '') : '') . ($minutes > 0 ? number_format($minutes) . " min" . ($minutes > 1 ? "s" : '') : ''); + } else { + $hub['duration'] = false; + } + + // distance + $meters = $hub['distance']; + + if (!empty($meters) && $meters > 0) { + $hub['distance'] = round($meters / 1000) . " km"; + } else { + $hub['distance'] = false; + } + + // counters + $hub['rider_count'] = count($hub['hub']->getAvailableRiders()); + $hub['jo_count'] = count($hub['hub']->getForAssignmentJobOrders()); + + // check for rejection + $hub['flag_rejected'] = false; + $hub_id = $hub['hub']->getID(); + + $params['hubs'][] = $hub; + } + + // get template to display $params['template'] = $this->getTwigTemplate('jo_onestep_edit_form'); diff --git a/templates/job-order/form.onestep.html.twig b/templates/job-order/form.onestep.html.twig index 4a419b60..1da5df4f 100644 --- a/templates/job-order/form.onestep.html.twig +++ b/templates/job-order/form.onestep.html.twig @@ -17,257 +17,270 @@
-
-
-
- - - -

+
+
+
+ + + +

One-step Job Order -

-
-
-
+

+
+
+
-
-
-
-
- - - -
-
- -
- Create New Customer / Vehicle +
+ {%if ftags.vehicle_dropdown %} +
+
+
+ + + +
+ +
+
+
+
+
+ + + +
+
+
+ {% else %} + + {% endif %} + {% if obj.getReferenceJO %} +
+
+
+ + +
-
- {% if obj.getReferenceJO %} -
-
-
- - - -
-
-
{% endif %} -
-
-

- Customer Details -

-
-
-
- - - -
-
- - - -
-
+
+
+

+ Customer Details +

+
-
- +
+ + + +
+
+ + + +
+
+
+
+
+63
-
-
- +
+
+
+63
-
+
-
- +
+
+63
-
-
- +
+
+
+63
-
+
-
-
- - - -
-
-
-
-
-

- Vehicle Details -

-
-
-
- - - -
-
- - - -
-
- - - -
+
+
+ + + +
-
-
- - - -
-
- - - -
-
-
-
-
-

- Battery Details -

-
-
-
- - - -
-
- - - -
-
- - - -
-
-
-
-
-
-

- Transaction Details -

- - - -
-
-
- - - -
-
- - - -
-
- - - -
-
-
-
- - - -
-
- -
- - - - -
- -
-
- -
- - - - -
- -
-
-
-
- - - -
-
- - - -
-
-
-
+
+
+
+

+ Vehicle Details +

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

+ Battery Details +

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

+ Transaction Details +

+ + + +
+
+
+ + + +
+
+ + + +
+
+ + + +
+
+
+
+ + + +
+
+ +
+ + + + +
+ +
+
+ +
+ + + + +
+ +
+
+
+
+ + + +
+
+ + + +
+
+
+
-
+
@@ -303,57 +316,44 @@
- -
-
-
-
-

- Location -

-
-
-
- - - -
-
- - - -
-
-
-
- - - - -
- - - - -
-
-
-
-
+
+
+
+
+

+ Location +

+
+
+
+ + + +
+
+ + + +
+
+
+
+ + + + +
+ + + + +
+
+
+
+
@@ -419,392 +419,150 @@
-
-
-
-

- Invoice -

-
-
-
- - - -
-
- - - -
+
+
+
+

+ Invoice +

-
-
- - {% if ftags.invoice_edit %} - - - {% else %} - - {% endif %} -
-
- - -
-
- - -
-
-
-
- - -
-
- - -
-
- - -
-
-
-
- - - - - - - - - - - - {% if not obj.getInvoice or (obj.getInvoice and obj.getInvoice.getItems|length == 0) %} - - - - {% else %} - {% for item in obj.getInvoice.getItems %} - - - - - - - {% endfor %} - {% endif %} - -
ItemQuantityUnit PriceAmount
- No items to display. -
{{ item.getTitle }}{{ item.getQuantity|number_format }}{{ item.getPrice|number_format(2) }}{{ (item.getPrice * item.getQuantity)|number_format(2) }}
-
-
- {% if ftags.invoice_edit %} -
-
- - -
-
- - -
-
- - -
-
- - -
-
-
- - - -
-
- {% endif %} -
- - {% if mode in ['update-assigning', 'update-fulfillment', 'update-reassign-rider', 'update-all'] %} -
- {% if obj.getHub %} -
-
-

- Hub Details -

-
-
-
- - - -
-
- - - -
-
- - - -
-
-
-
- - - -
-
- - - -
-
-
- {% endif %} - -
- - {% if mode in ['update-assigning', 'update-reassign-rider'] %} -
-
-

- Rider Assignment -

-
-
-
- - -
- - - - - - - - - - - - - {% set avail_riders = obj.getHub.getAvailableRiders|default([]) %} - - - - - {% if obj.getHub %} - {% for rider in avail_riders %} - - - - - - - - - {% endfor %} - {% endif %} - -
First NameLast NameContact No.Plate NumberStatus
- No riders available. -
-
-
{{ rider.getFirstName }}{{ rider.getLastName }}{{ rider.getContactNumber }}{{ rider.getPlateNumber }}
-
-
-
-
- {% endif %} - - {% if mode in ['update-fulfillment', 'update-all'] %} - {% if obj.getRider %} -
-
-

- Rider Details -

-
-
-
- - - -
-
- - - -
-
-
-
- - - -
-
- - - -
-
-
-
- -
-
-
-
- {% endif %} - {% endif %} - {% endif %} - - {% if mode == 'update-all' %} -
- -
-
-

- Timeline -

-
-
-
-
-
- {% for event in obj.getEvents %} -
- - {{ event.getDateHappen|date("M j, Y") }} -
{{ event.getDateHappen|date("h:i:s a") }}
-
-
- -
-
- {{ event.getTypeName }} by {{ event.getUser.getFullName|default('Application') }} {% if event.getRider %} - Rider - {{ event.getRider.getFullName }}{% endif %} -
-
- {% endfor %} -
-
-
-
-
- {% endif %} - -
-
-
-
-
+
+
+ + + +
+
+ + + +
+
+
+
+ + {% if ftags.invoice_edit %} + + + {% else %} + + {% endif %} +
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ + + + + + + + + + + {% if not obj.getInvoice or (obj.getInvoice and obj.getInvoice.getItems|length == 0) %} + + + + {% else %} + {% for item in obj.getInvoice.getItems %} + + + + + + + {% endfor %} + {% endif %} + +
ItemQuantityUnit PriceAmount
+ No items to display. +
{{ item.getTitle }}{{ item.getQuantity|number_format }}{{ item.getPrice|number_format(2) }}{{ (item.getPrice * item.getQuantity)|number_format(2) }}
+
+
+ {% if ftags.invoice_edit %} +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+ + + +
+
+ {% endif %} +
+
+
+
+
Back -
-
-
-
- +
+
+
+
+
-
-
-
- - {% if mode in ['update-processing', 'update-reassign-hub'] %} - - - {% endif %} +
+
+
{% endblock %} {% block scripts %} @@ -933,39 +691,48 @@ $(function() { }); $(function() { - var selected_hub = ''; + var selected_hub = '{{ obj.getHub ? obj.getHub.getID : "" }}'; $('#hubs-table').on('click', 'tr', function() { var id = $(this).data('id'); - // highlight this row - $('#hubs-table').find('.m-table__row--primary').removeClass('m-table__row--primary'); + if (id != selected_hub) { - $(this).addClass('m-table__row--primary'); + // highlight this row + $('#hubs-table').find('.m-table__row--primary').removeClass('m-table__row--primary'); - // set hub - selected_hub = id; - $('#hub-field').val(selected_hub); + $(this).addClass('m-table__row--primary'); - // get riders of hub - // get hub riders ajax - // TODO: add latitude and longitude of delivery location to ajax request - var rider_table = ''; - $.getJSON("{{ url('hub_riders') }}?id=" + selected_hub, function(data) { - var riders = data['riders']; - for (i in riders) { - var rider = riders[i]; + // set hub + selected_hub = id; + $('#hub-field').val(selected_hub); - rider_table += ''; - rider_table += '' + rider['first_name'] + ''; - rider_table += '' + rider['last_name'] + ''; - rider_table += '' + rider['contact_num'] + ''; - rider_table += '' + rider['plate_num'] + ''; - rider_table += ''; - rider_table += ''; - } + // get riders of hub + // get hub riders ajax + // TODO: add latitude and longitude of delivery location to ajax request + var rider_table = ''; + $.getJSON("{{ url('hub_riders') }}?id=" + selected_hub, function(data) { + var riders = data['riders']; + for (i in riders) { + var rider = riders[i]; - $('#riders').html(rider_table); - }); + rider_table += ''; + rider_table += '' + rider['first_name'] + ''; + rider_table += '' + rider['last_name'] + ''; + rider_table += '' + rider['contact_num'] + ''; + rider_table += '' + rider['plate_num'] + ''; + rider_table += ''; + rider_table += ''; + } + + $('#riders').html(rider_table); + }); + } else { + // unhighlight this row + $(this).removeClass('m-table__row--primary'); + + // remove id value + selected_hub = ''; + } }); }); @@ -985,6 +752,15 @@ $(function() { }); }); + {% if mode in ['onestep-edit'] %} + var lat = {{ obj.getCoordinates.getLatitude }}; + var lng = {{ obj.getCoordinates.getLongitude }}; + + selectPoint(lat, lng); + + // TODO: find a way to highlight the set hub + {% endif %} + {% if mode in ['update-processing', 'update-reassign-hub'] %} // display hub map // OSM code @@ -1114,6 +890,8 @@ $(function() { var vdata = false; // vehicle selector + {% if ftags.vehicle_dropdown %} + // vehicle selector $('#customer-vehicle').select2({ ajax: { url: "{{ url('customer_vehicle_search') }}", @@ -1173,6 +951,7 @@ $(function() { } }) }).focus(); + {% endif %} {% if ftags.vehicle_dropdown %} // reference job order selector