From 2803c264ac98c09f1cc2046000ae63c08f78a2d3 Mon Sep 17 00:00:00 2001 From: Kendrick Chan Date: Thu, 25 Jun 2020 23:39:46 +0800 Subject: [PATCH 01/20] Allow analytics to be filtered by date range #409 --- src/Controller/AnalyticsController.php | 146 +++++++++--------- templates/analytics/forecast_form.html.twig | 30 ++-- templates/analytics/forecast_submit.html.twig | 14 +- 3 files changed, 104 insertions(+), 86 deletions(-) diff --git a/src/Controller/AnalyticsController.php b/src/Controller/AnalyticsController.php index 017333e5..a14c0581 100644 --- a/src/Controller/AnalyticsController.php +++ b/src/Controller/AnalyticsController.php @@ -102,10 +102,14 @@ class AnalyticsController extends Controller */ public function forecastSubmit(EntityManagerInterface $em, Request $req) { + $today = new DateTime(); + $hub_list = $req->request->get('hub_ids', []); $distances = $req->request->get('distances', []); - $today = DateTime::createFromFormat('d M Y', $req->request->get('date')); - $month = $today->format('m'); + + $date_from = DateTime::createFromFormat('d M Y', $req->request->get('date_from')); + $date_to = DateTime::createFromFormat('d M Y', $req->request->get('date_to')); + // error_log(print_r($hub_list, true)); // $hub_list = [ 6, 4, 36, 7, 8, 126, 127, 18, 12, 9, 60, 10, 21, 135 ]; @@ -119,7 +123,7 @@ class AnalyticsController extends Controller $hub = $em->getRepository(Hub::class)->find($hub_id); $coords = $hub->getCoordinates(); - $hub_data[$hub_id] = $this->generateHubData($em, $hub, $dist, $today, $overlaps); + $hub_data[$hub_id] = $this->generateHubData($em, $hub, $dist, $date_from, $date_to, $overlaps); $hub_coverage[] = [ 'longitude' => $coords->getLongitude(), @@ -143,8 +147,9 @@ class AnalyticsController extends Controller foreach ($hub_data as $hub_id => $one_hub) { $c_weekday = $one_hub['c_weekday']; + $chart_weekday = $this->generateWeekdayData($c_weekday, $today, $overlaps); - $chart_all_weekdays = $this->generateAllWeekData($c_weekday, $today, $overlaps); + $chart_all_weekdays = $this->generateAllWeekData($c_weekday, $overlaps); // figure out the rider schedules based on the max hour values $scheduler_data = $chart_all_weekdays['scheduler_data']; @@ -153,18 +158,16 @@ class AnalyticsController extends Controller $total_jos = 0; - // run scheduler - // check if 2018 data is available - if (isset($scheduler_data['2018'][$month])) - { - // send 2018 + month data - $sched_res = $this->runScheduler($scheduler_data['2018'][$month]); + // error_log(print_r($scheduler_data, true)); - // tally total JOs for the month - foreach ($scheduler_data['2018'][$month] as $sday_data) - foreach ($sday_data as $shour_data) - $total_jos += $shour_data; - } + // run scheduler + $sched_res = $this->runScheduler($scheduler_data); + + // tally total JOs for the month + foreach ($scheduler_data as $sday_data) + foreach ($sday_data as $shour_data) + $total_jos += $shour_data; + /* else { $sched_res = [ @@ -172,6 +175,10 @@ class AnalyticsController extends Controller 'total_riders' => 0, ]; } + */ + + + // error_log(print_r($chart_all_weekdays, true)); // agggregate weekday data $i = 0; @@ -244,7 +251,7 @@ class AnalyticsController extends Controller // error_log(print_r($args, true)); - // error_log('running...' . $sched_script); + error_log('running...' . $sched_script); $proc = new Process($args); $proc->run(); @@ -253,7 +260,7 @@ class AnalyticsController extends Controller error_log('SCHEDULER DID NOT RUN PROPERLY'); $res = $proc->getOutput(); - // error_log($res); + error_log($res); // segregate into weekdays @@ -321,17 +328,14 @@ class AnalyticsController extends Controller return $data; } - protected function generateHubData($em, $hub, $distance_limit, DateTime $today, &$overlaps) + protected function generateHubData($em, $hub, $distance_limit, DateTime $date_start, DateTime $date_end, &$overlaps) { - $date_start = DateTime::createFromFormat('Y-m-d H:i:s', '2018-01-01 00:00:00'); - $date_end = new DateTime(); - // get hub to analyze // $hub = $em->getRepository(Hub::class)->find($hub_id); $conn = $em->getConnection(); // get job order data (job orders within coverage area) - $jos = $this->generateJobOrderData($conn, $hub, $distance_limit); + $jos = $this->generateJobOrderData($conn, $hub, $distance_limit, $date_start, $date_end); // initialize counters $c_weekday = []; @@ -360,21 +364,22 @@ class AnalyticsController extends Controller $c_day[$year][$month][$day]++; // weekday - if (!isset($c_weekday[$year][$month][$weekday][$hour])) + if (!isset($c_weekday[$weekday][$hour])) { - $c_weekday[$year][$month][$weekday][$hour]['total'] = 0; - $c_weekday[$year][$month][$weekday][$hour]['count'] = 0; - $c_weekday[$year][$month][$weekday][$hour]['jos'] = []; + $c_weekday[$weekday][$hour]['total'] = 0; + $c_weekday[$weekday][$hour]['count'] = 0; + $c_weekday[$weekday][$hour]['jos'] = []; } - $c_weekday[$year][$month][$weekday][$hour]['total']++; - $c_weekday[$year][$month][$weekday][$hour]['jos'][$jo_id] = $jo_id; + $c_weekday[$weekday][$hour]['total']++; + $c_weekday[$weekday][$hour]['jos'][$jo_id] = $jo_id; - if (!isset($c_week_count[$year][$month][$week][$weekday][$hour])) + // make a count of number of weeks, so we can take average + if (!isset($c_week_count[$week][$weekday][$hour])) { // error_log('week detected - ' . $week); - $c_week_count[$year][$month][$week][$weekday][$hour] = 1; - $c_weekday[$year][$month][$weekday][$hour]['count']++; + $c_week_count[$week][$weekday][$hour] = 1; + $c_weekday[$weekday][$hour]['count']++; } // track overlaps (jo that can be handled by more than one hub) @@ -404,19 +409,19 @@ class AnalyticsController extends Controller return $params; } - protected function generateJobOrderData($conn, $hub, $distance_limit) + protected function generateJobOrderData($conn, $hub, $distance_limit, DateTime $date_start, DateTime $date_end) { $hub_coord = $hub->getCoordinates(); // create query // formula to convert to km is 111195 * st_distance - $sql = "select id, round(st_distance(coordinates, Point(:lng, :lat)) * 111195) as dist, date_schedule from job_order where st_distance(coordinates, Point(:lng, :lat)) * 111195 <= :distance_limit and status <> 'cancelled' order by date_schedule asc"; + $sql = "select id, round(st_distance(coordinates, Point(:lng, :lat)) * 111195) as dist, date_schedule from job_order where st_distance(coordinates, Point(:lng, :lat)) * 111195 <= :distance_limit and status <> 'cancelled' and date_schedule >= :date_start and date_schedule <= :date_end order by date_schedule asc"; $stmt = $conn->prepare($sql); $stmt->bindValue('lng', $hub_coord->getLongitude()); $stmt->bindValue('lat', $hub_coord->getLatitude()); $stmt->bindValue('distance_limit', $distance_limit); - // $stmt->bindValue('date_start', $date_start->format('Y-m-d H:i:s')); - // $stmt->bindValue('date_end', $date_end->format('Y-m-d H:i:s')); + $stmt->bindValue('date_start', $date_start->format('Y-m-d H:i:s')); + $stmt->bindValue('date_end', $date_end->format('Y-m-d H:i:s')); $stmt->execute(); $jos = $stmt->fetchAll(); @@ -461,7 +466,7 @@ class AnalyticsController extends Controller return $chart_year; } - protected function generateAllWeekData($all_weekday_data, $today, $overlaps) + protected function generateAllWeekData($all_weekday_data, $overlaps) { $data = []; @@ -470,53 +475,56 @@ class AnalyticsController extends Controller for ($i = 0; $i < 24; $i++) $hours[] = sprintf('%02d', $i); - $month = $today->format('m'); - $year_data = []; + // TODO: substitute this + $year_data = $all_weekday_data; $scheduler_data = []; + /* + error_log('----------------------------------------------------------------------'); + error_log(print_r($all_weekday_data, true)); + error_log('----------------------------------------------------------------------'); + */ + // gather maximum for each hour foreach ($this->weekdays as $weekday) { - foreach ($all_weekday_data as $year => $year_data) + // go through the hours + foreach ($hours as $hour) { - // go through the hours - foreach ($hours as $hour) + $id = $hour + 0; + if (!isset($data[$id])) + $data[$id] = [ + 'hour' => $hour, + ]; + + // get hour data + $prefix = $weekday; + if (isset($year_data[$weekday][$hour])) { - $id = $hour + 0; - if (!isset($data[$id])) - $data[$id] = [ - 'hour' => $hour, - ]; + // calculate the rider value for each JO and use that score as basis + $total_rv = $this->calculateTotalRiderValue($year_data[$weekday][$hour]['jos'], $overlaps); + $rv_average = ceil($total_rv / $year_data[$weekday][$hour]['count']); - // get hour data - $year_id = 'y' . $year; - $prefix = $year_id . '_' . $weekday; - if (isset($year_data[$month][$weekday][$hour])) + $data[$id][$prefix] = $year_data[$weekday][$hour]['total']; + $data[$id][$prefix . '_count'] = $year_data[$weekday][$hour]['count']; + $data[$id][$prefix . '_average'] = ceil($year_data[$weekday][$hour]['total'] / $year_data[$weekday][$hour]['count']); + $data[$id][$prefix . '_rv_average'] = $rv_average; + + // assign scheduler data + $scheduler_data[$weekday][$hour] = $rv_average; + } + else + { + if (!isset($scheduler_data[$weekday][$hour])) { - // calculate the rider value for each JO and use that score as basis - $total_rv = $this->calculateTotalRiderValue($year_data[$month][$weekday][$hour]['jos'], $overlaps); - $rv_average = ceil($total_rv / $year_data[$month][$weekday][$hour]['count']); - - $data[$id][$prefix] = $year_data[$month][$weekday][$hour]['total']; - $data[$id][$prefix . '_count'] = $year_data[$month][$weekday][$hour]['count']; - $data[$id][$prefix . '_average'] = ceil($year_data[$month][$weekday][$hour]['total'] / $year_data[$month][$weekday][$hour]['count']); - $data[$id][$prefix . '_rv_average'] = $rv_average; - - // assign scheduler data - $scheduler_data[$year][$month][$weekday][$hour] = $rv_average; - } - else - { - if (!isset($scheduler_data[$year][$month][$weekday][$hour])) - { - $data[$id][$prefix . '_rv_average'] = 0; - $scheduler_data[$year][$month][$weekday][$hour] = 0; - } + $data[$id][$prefix . '_rv_average'] = 0; + $scheduler_data[$weekday][$hour] = 0; } } } } + $data['scheduler_data'] = $scheduler_data; // error_log(print_r($data, true)); diff --git a/templates/analytics/forecast_form.html.twig b/templates/analytics/forecast_form.html.twig index 5dd51e7f..4940d311 100644 --- a/templates/analytics/forecast_form.html.twig +++ b/templates/analytics/forecast_form.html.twig @@ -31,16 +31,26 @@
-
- -
- - - - -
- -
+
+ +
+ + + + +
+ +
+
+ +
+ + + + +
+ +
{% for hub_id in default_hubs %} diff --git a/templates/analytics/forecast_submit.html.twig b/templates/analytics/forecast_submit.html.twig index d884bc15..2263694b 100644 --- a/templates/analytics/forecast_submit.html.twig +++ b/templates/analytics/forecast_submit.html.twig @@ -330,49 +330,49 @@ var lmon = chart2.series.push(new am4charts.LineSeries()); lmon.name = "Monday"; lmon.stroke = am4core.color("#003f5c"); lmon.strokeWidth = 2; -lmon.dataFields.valueY = "y2018_Monday_rv_average"; +lmon.dataFields.valueY = "Monday_rv_average"; lmon.dataFields.categoryX = "hour"; var l = chart2.series.push(new am4charts.LineSeries()); l.name = "Tuesday"; l.stroke = am4core.color("#374c80"); l.strokeWidth = 2; -l.dataFields.valueY = "y2018_Tuesday_rv_average"; +l.dataFields.valueY = "Tuesday_rv_average"; l.dataFields.categoryX = "hour"; var l = chart2.series.push(new am4charts.LineSeries()); l.name = "Wednesday"; l.stroke = am4core.color("#7a5195"); l.strokeWidth = 2; -l.dataFields.valueY = "y2018_Wednesday_rv_average"; +l.dataFields.valueY = "Wednesday_rv_average"; l.dataFields.categoryX = "hour"; var l = chart2.series.push(new am4charts.LineSeries()); l.name = "Thursday"; l.stroke = am4core.color("#bc5090"); l.strokeWidth = 2; -l.dataFields.valueY = "y2018_Thursday_rv_average"; +l.dataFields.valueY = "Thursday_rv_average"; l.dataFields.categoryX = "hour"; var l = chart2.series.push(new am4charts.LineSeries()); l.name = "Friday"; l.stroke = am4core.color("#ef5675"); l.strokeWidth = 2; -l.dataFields.valueY = "y2018_Friday_rv_average"; +l.dataFields.valueY = "Friday_rv_average"; l.dataFields.categoryX = "hour"; var l = chart2.series.push(new am4charts.LineSeries()); l.name = "Saturday"; l.stroke = am4core.color("#ff764a"); l.strokeWidth = 2; -l.dataFields.valueY = "y2018_Saturday_rv_average"; +l.dataFields.valueY = "Saturday_rv_average"; l.dataFields.categoryX = "hour"; var l = chart2.series.push(new am4charts.LineSeries()); l.name = "Sunday"; l.stroke = am4core.color("#ffa600"); l.strokeWidth = 2; -l.dataFields.valueY = "y2018_Sunday_rv_average"; +l.dataFields.valueY = "Sunday_rv_average"; l.dataFields.categoryX = "hour"; {% endfor %} From 94116a2958f9c4b82d8fad1e68ea8f44ba51839c Mon Sep 17 00:00:00 2001 From: Kendrick Chan Date: Sat, 27 Jun 2020 07:42:04 +0800 Subject: [PATCH 02/20] Add time restriction in analytics #409 --- src/Controller/AnalyticsController.php | 29 +++++++++++++++++---- templates/analytics/forecast_form.html.twig | 20 ++++++++++++-- 2 files changed, 42 insertions(+), 7 deletions(-) diff --git a/src/Controller/AnalyticsController.php b/src/Controller/AnalyticsController.php index a14c0581..0ead06cf 100644 --- a/src/Controller/AnalyticsController.php +++ b/src/Controller/AnalyticsController.php @@ -107,6 +107,9 @@ class AnalyticsController extends Controller $hub_list = $req->request->get('hub_ids', []); $distances = $req->request->get('distances', []); + $time_start = $req->request->get('time_from'); + $time_end = $req->request->get('time_to'); + $date_from = DateTime::createFromFormat('d M Y', $req->request->get('date_from')); $date_to = DateTime::createFromFormat('d M Y', $req->request->get('date_to')); @@ -123,7 +126,7 @@ class AnalyticsController extends Controller $hub = $em->getRepository(Hub::class)->find($hub_id); $coords = $hub->getCoordinates(); - $hub_data[$hub_id] = $this->generateHubData($em, $hub, $dist, $date_from, $date_to, $overlaps); + $hub_data[$hub_id] = $this->generateHubData($em, $hub, $dist, $date_from, $date_to, $time_start, $time_end, $overlaps); $hub_coverage[] = [ 'longitude' => $coords->getLongitude(), @@ -328,14 +331,14 @@ class AnalyticsController extends Controller return $data; } - protected function generateHubData($em, $hub, $distance_limit, DateTime $date_start, DateTime $date_end, &$overlaps) + protected function generateHubData($em, $hub, $distance_limit, DateTime $date_start, DateTime $date_end, $time_start, $time_end, &$overlaps) { // get hub to analyze // $hub = $em->getRepository(Hub::class)->find($hub_id); $conn = $em->getConnection(); // get job order data (job orders within coverage area) - $jos = $this->generateJobOrderData($conn, $hub, $distance_limit, $date_start, $date_end); + $jos = $this->generateJobOrderData($conn, $hub, $distance_limit, $date_start, $date_end, $time_start, $time_end); // initialize counters $c_weekday = []; @@ -409,19 +412,35 @@ class AnalyticsController extends Controller return $params; } - protected function generateJobOrderData($conn, $hub, $distance_limit, DateTime $date_start, DateTime $date_end) + protected function generateJobOrderData($conn, $hub, $distance_limit, DateTime $date_start, DateTime $date_end, $time_start, $time_end) { $hub_coord = $hub->getCoordinates(); // create query // formula to convert to km is 111195 * st_distance - $sql = "select id, round(st_distance(coordinates, Point(:lng, :lat)) * 111195) as dist, date_schedule from job_order where st_distance(coordinates, Point(:lng, :lat)) * 111195 <= :distance_limit and status <> 'cancelled' and date_schedule >= :date_start and date_schedule <= :date_end order by date_schedule asc"; + $sql = "select id, round(st_distance(coordinates, Point(:lng, :lat)) * 111195) as dist, date_schedule from job_order where st_distance(coordinates, Point(:lng, :lat)) * 111195 <= :distance_limit and status <> 'cancelled' and date_schedule >= :date_start and date_schedule <= :date_end"; + // check if time is specified + if (!empty($time_start)) + $sql .= ' and time(date_schedule) >= :time_start'; + if (!empty($time_end)) + $sql .= ' and time(date_schedule) <= :time_end'; + $sql .= " order by date_schedule asc"; + + + + $stmt = $conn->prepare($sql); $stmt->bindValue('lng', $hub_coord->getLongitude()); $stmt->bindValue('lat', $hub_coord->getLatitude()); $stmt->bindValue('distance_limit', $distance_limit); $stmt->bindValue('date_start', $date_start->format('Y-m-d H:i:s')); $stmt->bindValue('date_end', $date_end->format('Y-m-d H:i:s')); + + if (!empty($time_start)) + $stmt->bindValue('time_start', $time_start); + if (!empty($time_end)) + $stmt->bindValue('time_end', $time_end); + $stmt->execute(); $jos = $stmt->fetchAll(); diff --git a/templates/analytics/forecast_form.html.twig b/templates/analytics/forecast_form.html.twig index 4940d311..d2c6108a 100644 --- a/templates/analytics/forecast_form.html.twig +++ b/templates/analytics/forecast_form.html.twig @@ -30,11 +30,27 @@
+
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
- + @@ -44,7 +60,7 @@
- + From 32c83aa40c8ac26316787083192322394c8620ed Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Mon, 29 Jun 2020 07:00:17 +0000 Subject: [PATCH 03/20] Add odometer and pictures when viewing JO. #432 --- .../JobOrderHandler/CMBJobOrderHandler.php | 45 +++++++++++++++++++ .../job-order/cmb.form.onestep.html.twig | 25 +++++++++++ 2 files changed, 70 insertions(+) diff --git a/src/Service/JobOrderHandler/CMBJobOrderHandler.php b/src/Service/JobOrderHandler/CMBJobOrderHandler.php index e9e6ef15..0b7c629f 100644 --- a/src/Service/JobOrderHandler/CMBJobOrderHandler.php +++ b/src/Service/JobOrderHandler/CMBJobOrderHandler.php @@ -1487,6 +1487,51 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface $params['jo_service_charges'] = $sc_array; + // get odometer + $odometer = $obj->getMeta('odometer'); + + $params['odometer'] = $odometer; + + // get images if any + $jo_extra = $obj->getJOExtra(); + $pic_array = []; + if ($jo_extra != null) + { + $b_speed_img = $jo_extra->getBeforeSpeedImageFilename(); + $a_speed_img = $jo_extra->getAfterSpeedImageFilename(); + $b_plate_img = $jo_extra->getBeforePlateNumImageFilename(); + $a_plate_img = $jo_extra->getAfterPlateNumImageFilename(); + $b_batt_img = $jo_extra->getBeforeBattImageFilename(); + $a_batt_img = $jo_extra->getAfterBattImageFilename(); + + $b_other_images = $jo_extra->getBeforeOtherImages(); + $a_other_images = $jo_extra->getAfterOtherImages(); + + if ($b_speed_img != null) + $pic_array[] = $b_speed_img; + if ($a_speed_img != null) + $pic_array[] = $a_speed_img; + if ($b_plate_img != null) + $pic_array[] = $b_plate_img; + if ($a_plate_img != null) + $pic_array[] = $a_plate_img; + if ($b_batt_img != null) + $pic_array[] = $b_batt_img; + if ($a_batt_img != null) + $pic_array[] = $a_batt_img; + + foreach($b_other_images as $b_img) + { + $pic_array[] = $b_img; + } + foreach ($a_other_images as $a_img) + { + $pic_array[] = $a_img; + } + } + + $params['jo_pictures'] = $pic_array; + $this->fillDropdownParameters($params); $this->fillFormTags($params); diff --git a/templates/job-order/cmb.form.onestep.html.twig b/templates/job-order/cmb.form.onestep.html.twig index 6f35127e..7c0646c8 100644 --- a/templates/job-order/cmb.form.onestep.html.twig +++ b/templates/job-order/cmb.form.onestep.html.twig @@ -492,6 +492,31 @@
+ {% if mode in ['onestep-edit'] %} +
+
+
+

+ Other Information +

+
+
+
+ + +
+
+
+
+ + {% for picture in jo_pictures %} +
+ {% endfor %} +
+
+
+ {% endif %} +
From 7aed20019c822b61465131f05605639655401f25 Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Mon, 29 Jun 2020 08:18:39 +0000 Subject: [PATCH 04/20] Fix displaying of images. #432 --- .../JobOrderHandler/CMBJobOrderHandler.php | 16 ++--- .../job-order/cmb.form.onestep.html.twig | 71 +++++++++++++++++-- 2 files changed, 75 insertions(+), 12 deletions(-) diff --git a/src/Service/JobOrderHandler/CMBJobOrderHandler.php b/src/Service/JobOrderHandler/CMBJobOrderHandler.php index 0b7c629f..b10b1cfa 100644 --- a/src/Service/JobOrderHandler/CMBJobOrderHandler.php +++ b/src/Service/JobOrderHandler/CMBJobOrderHandler.php @@ -1508,25 +1508,25 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface $a_other_images = $jo_extra->getAfterOtherImages(); if ($b_speed_img != null) - $pic_array[] = $b_speed_img; + $pic_array['before_speed_img'] = $b_speed_img; if ($a_speed_img != null) - $pic_array[] = $a_speed_img; + $pic_array['after_speed_img'] = $a_speed_img; if ($b_plate_img != null) - $pic_array[] = $b_plate_img; + $pic_array['before_plate_img'] = $b_plate_img; if ($a_plate_img != null) - $pic_array[] = $a_plate_img; + $pic_array['after_plate_img'] = $a_plate_img; if ($b_batt_img != null) - $pic_array[] = $b_batt_img; + $pic_array['before_batt_img'] = $b_batt_img; if ($a_batt_img != null) - $pic_array[] = $a_batt_img; + $pic_array['after_batt_img'] = $a_batt_img; foreach($b_other_images as $b_img) { - $pic_array[] = $b_img; + $pic_array['b_other_images'][] = $b_img; } foreach ($a_other_images as $a_img) { - $pic_array[] = $a_img; + $pic_array['a_other_images'][] = $a_img; } } diff --git a/templates/job-order/cmb.form.onestep.html.twig b/templates/job-order/cmb.form.onestep.html.twig index 7c0646c8..b3dd9c1f 100644 --- a/templates/job-order/cmb.form.onestep.html.twig +++ b/templates/job-order/cmb.form.onestep.html.twig @@ -508,11 +508,74 @@
- - {% for picture in jo_pictures %} -
- {% endfor %} + +
+ {% for key, picture in jo_pictures %} + {% if key == 'before_speed_img' %} +
+ +
+
+ {% endif %} + {% if key == 'after_speed_img' %} +
+ +
+
+ {% endif %} + {% if key == 'before_plate_img' %} +
+ +
+
+ {% endif %} + {% if key == 'after_plate_img' %} +
+ +
+
+ {% endif %} + {% if key == 'before_batt_img' %} +
+ +
+
+ {% endif %} + {% if key == 'after_batt_img' %} +
+ +
+
+ {% endif %} + {% endfor %} +
+
+
+
+ {% for key, picture in jo_pictures %} + {% if key == 'b_other_images' %} + {% for pic in jo_pictures['b_other_images'] %} +
+
+
+ {% endfor %} + {% endif %} + {% endfor %} +
+
+
+ +
+ {% for key, picture in jo_pictures %} + {% if key == 'a_other_images' %} + {% for pic in jo_pictures['a_other_images'] %} +
+
+
+ {% endfor %} + {% endif %} + {% endfor %}
{% endif %} From 9717effb0a98f9e6ac7e3ed2b07aaed413364f16 Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Mon, 29 Jun 2020 09:00:42 +0000 Subject: [PATCH 05/20] Add signature and email address to display. Separate the before and after images. #432 --- .../JobOrderHandler/CMBJobOrderHandler.php | 9 +++ .../job-order/cmb.form.onestep.html.twig | 55 ++++++++++++------- 2 files changed, 44 insertions(+), 20 deletions(-) diff --git a/src/Service/JobOrderHandler/CMBJobOrderHandler.php b/src/Service/JobOrderHandler/CMBJobOrderHandler.php index b10b1cfa..83188826 100644 --- a/src/Service/JobOrderHandler/CMBJobOrderHandler.php +++ b/src/Service/JobOrderHandler/CMBJobOrderHandler.php @@ -1492,6 +1492,11 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface $params['odometer'] = $odometer; + // get customer email used in JO + $email = $obj->getMeta('customer_email'); + + $params['email'] = $email; + // get images if any $jo_extra = $obj->getJOExtra(); $pic_array = []; @@ -1507,6 +1512,8 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface $b_other_images = $jo_extra->getBeforeOtherImages(); $a_other_images = $jo_extra->getAfterOtherImages(); + $cust_signature = $jo_extra->getCustomerSignature(); + if ($b_speed_img != null) $pic_array['before_speed_img'] = $b_speed_img; if ($a_speed_img != null) @@ -1528,6 +1535,8 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface { $pic_array['a_other_images'][] = $a_img; } + + $params['signature'] = $cust_signature; } $params['jo_pictures'] = $pic_array; diff --git a/templates/job-order/cmb.form.onestep.html.twig b/templates/job-order/cmb.form.onestep.html.twig index b3dd9c1f..3fb94720 100644 --- a/templates/job-order/cmb.form.onestep.html.twig +++ b/templates/job-order/cmb.form.onestep.html.twig @@ -503,12 +503,20 @@
- + +
+
+ + +
+
+ +
- +
{% for key, picture in jo_pictures %} {% if key == 'before_speed_img' %} @@ -517,36 +525,18 @@
{% endif %} - {% if key == 'after_speed_img' %} -
- -
-
- {% endif %} {% if key == 'before_plate_img' %}
{% endif %} - {% if key == 'after_plate_img' %} -
- -
-
- {% endif %} {% if key == 'before_batt_img' %}
{% endif %} - {% if key == 'after_batt_img' %} -
- -
-
- {% endif %} {% endfor %}
@@ -563,6 +553,31 @@ {% endif %} {% endfor %}
+
+
+ +
+ {% for key, picture in jo_pictures %} + {% if key == 'after_speed_img' %} +
+ +
+
+ {% endif %} + {% if key == 'after_plate_img' %} +
+ +
+
+ {% endif %} + {% if key == 'after_batt_img' %} +
+ +
+
+ {% endif %} + {% endfor %} +
From 858849a764a2ef709faa31ce989a788a1a0cea37 Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Wed, 1 Jul 2020 02:12:08 +0000 Subject: [PATCH 06/20] Made customer notes non-mandatory. #434 --- src/Service/JobOrderHandler/CMBJobOrderHandler.php | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/Service/JobOrderHandler/CMBJobOrderHandler.php b/src/Service/JobOrderHandler/CMBJobOrderHandler.php index 83188826..46c8455a 100644 --- a/src/Service/JobOrderHandler/CMBJobOrderHandler.php +++ b/src/Service/JobOrderHandler/CMBJobOrderHandler.php @@ -443,11 +443,6 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface // check if new customer if ($req->request->get('new_customer', false)) { - if (empty($req->request->get('customer_notes'))) - { - $error_array['customer_notes'] = 'Customer notes cannot be null.'; - } - // validate mobile phone $valid_mobile = $this->cust_handler->validateMobileNumber($req->request->get('phone_mobile')); if (!($valid_mobile)) @@ -2533,11 +2528,6 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface // check if new customer if ($req->request->get('new_customer', false)) { - if (empty($req->request->get('customer_notes'))) - { - $error_array['customer_notes'] = 'Customer notes cannot be null.'; - } - // validate mobile phone $valid_mobile = $this->cust_handler->validateMobileNumber($req->request->get('phone_mobile')); if (!($valid_mobile)) From b4d1cd344d08319268c5e95ad1a1ed9f5d665b37 Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Wed, 1 Jul 2020 02:20:57 +0000 Subject: [PATCH 07/20] Add E-Wallet as mode of payment. #434 --- src/Ramcar/CMBModeOfPayment.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Ramcar/CMBModeOfPayment.php b/src/Ramcar/CMBModeOfPayment.php index 7d0a4ec2..63bb9a2d 100644 --- a/src/Ramcar/CMBModeOfPayment.php +++ b/src/Ramcar/CMBModeOfPayment.php @@ -9,6 +9,7 @@ class CMBModeOfPayment extends NameValue const LAZADA = 'lazada'; const CREDIT_CARD = 'credit_card'; const ONLINE_TRANSFER = 'online_transfer'; + const E_WALLET = 'e_wallet'; const COLLECTION = [ 'cash' => 'Cash', @@ -16,5 +17,6 @@ class CMBModeOfPayment extends NameValue 'lazada' => 'Lazada', 'credit_card' => 'Credit Card', 'online_transfer' => 'Online Transfer', + 'e_wallet' => 'E-Wallet', ]; } From 1c076228c6bb92e0735206a72d7f3e1fac09c878 Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Wed, 1 Jul 2020 02:35:12 +0000 Subject: [PATCH 08/20] Add Whatsapp to the list for transaction origin. #434 --- src/Ramcar/CMBTransactionOrigin.php | 25 +++++++++++++++++++ .../JobOrderHandler/CMBJobOrderHandler.php | 10 ++++---- 2 files changed, 30 insertions(+), 5 deletions(-) create mode 100644 src/Ramcar/CMBTransactionOrigin.php diff --git a/src/Ramcar/CMBTransactionOrigin.php b/src/Ramcar/CMBTransactionOrigin.php new file mode 100644 index 00000000..7ea6a02a --- /dev/null +++ b/src/Ramcar/CMBTransactionOrigin.php @@ -0,0 +1,25 @@ + 'Hotline', + 'online' => 'Online', + 'facebook' => 'Facebook', + 'vip' => 'VIP', + 'mobile_app' => 'Mobile App', + 'walk_in' => 'Walk-in', + 'whatsapp' => 'Whatsapp', + ]; +} diff --git a/src/Service/JobOrderHandler/CMBJobOrderHandler.php b/src/Service/JobOrderHandler/CMBJobOrderHandler.php index 46c8455a..7c02bac1 100644 --- a/src/Service/JobOrderHandler/CMBJobOrderHandler.php +++ b/src/Service/JobOrderHandler/CMBJobOrderHandler.php @@ -36,7 +36,7 @@ use App\Ramcar\JOStatus; use App\Ramcar\CMBWarrantyClass; use App\Ramcar\DiscountApply; use App\Ramcar\CMBModeOfPayment; -use App\Ramcar\TransactionOrigin; +use App\Ramcar\CMBTransactionOrigin; use App\Ramcar\FacilitatedType; use App\Ramcar\JORejectionReason; @@ -194,7 +194,7 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface $row['status'] = $statuses[$orow->getStatus()]; $row['flag_advance'] = $orow->isAdvanceOrder(); $row['plate_number'] = $orow->getCustomerVehicle()->getPlateNumber(); - $row['is_mobile'] = $orow->getSource() == TransactionOrigin::MOBILE_APP; + $row['is_mobile'] = $orow->getSource() == CMBTransactionOrigin::MOBILE_APP; $row['car_model'] = $car_model; $row['rider_name'] = $rider_name; $row['rider_plate_number'] = $rider_plate_number; @@ -1658,7 +1658,7 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface // get template to display // check transaction origin if walkin - if ($obj->getSource() == TransactionOrigin::WALK_IN) + if ($obj->getSource() == CMBTransactionOrigin::WALK_IN) $params['template'] = $this->getTwigTemplate('jo_walkin_form'); else $params['template'] = $this->getTwigTemplate('jo_onestep_form'); @@ -2822,7 +2822,7 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface $params['trade_in_types'] = CMBTradeInType::getCollection(); $params['facilitated_types'] = FacilitatedType::getCollection(); $params['facilitated_hubs'] = $fac_hubs; - $params['sources'] = TransactionOrigin::getCollection(); + $params['sources'] = CMBTransactionOrigin::getCollection(); } protected function initFormTags(&$params) @@ -3108,7 +3108,7 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface throw new NotFoundHttpException('The item does not exist'); // check transaction origin - if ($jo->getSource() == TransactionOrigin::WALK_IN) + if ($jo->getSource() == CMBTransactionOrigin::WALK_IN) return 'jo_walkin_edit_form'; else return 'jo_onestep_edit_form'; From e8923c8faf1c3adce3b3a97f00506e596776ea7e Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Wed, 1 Jul 2020 02:55:48 +0000 Subject: [PATCH 09/20] Add checking for odometer maximum value. #434 --- src/Service/RiderAPIHandler/CMBRiderAPIHandler.php | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/Service/RiderAPIHandler/CMBRiderAPIHandler.php b/src/Service/RiderAPIHandler/CMBRiderAPIHandler.php index d0bbcdb5..25b13034 100644 --- a/src/Service/RiderAPIHandler/CMBRiderAPIHandler.php +++ b/src/Service/RiderAPIHandler/CMBRiderAPIHandler.php @@ -1534,6 +1534,15 @@ class CMBRiderAPIHandler implements RiderAPIHandlerInterface $odometer_reading = $req->request->get('odometer'); + if ($odometer_reading > 999999) + { + $data = [ + 'title' => 'Failed Set Odometer', + 'error' => 'Odometer cannot be more than 6 figures.', + ]; + return $data; + } + $jo->addMeta('odometer', $odometer_reading); $this->em->flush(); From 1b9441a9ee203fea2f0a2c932af7a163148961cc Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Wed, 1 Jul 2020 09:08:04 +0000 Subject: [PATCH 10/20] Hide the promo/employee id field from both onestep and walkin forms. #434 --- templates/job-order/cmb.form.onestep.html.twig | 2 ++ templates/job-order/cmb.form.walkin.html.twig | 2 ++ 2 files changed, 4 insertions(+) diff --git a/templates/job-order/cmb.form.onestep.html.twig b/templates/job-order/cmb.form.onestep.html.twig index 3fb94720..13d28e5b 100644 --- a/templates/job-order/cmb.form.onestep.html.twig +++ b/templates/job-order/cmb.form.onestep.html.twig @@ -644,11 +644,13 @@
+
diff --git a/templates/job-order/cmb.form.walkin.html.twig b/templates/job-order/cmb.form.walkin.html.twig index 4fe7f5b2..80409b06 100644 --- a/templates/job-order/cmb.form.walkin.html.twig +++ b/templates/job-order/cmb.form.walkin.html.twig @@ -392,11 +392,13 @@
+
From ada02f46a7fe04f014af2d84d222fd9e02c39255 Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Wed, 1 Jul 2020 09:17:34 +0000 Subject: [PATCH 11/20] Comment saving of promo information. #434 --- src/Service/JobOrderHandler/CMBJobOrderHandler.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Service/JobOrderHandler/CMBJobOrderHandler.php b/src/Service/JobOrderHandler/CMBJobOrderHandler.php index 7c02bac1..556fdfbd 100644 --- a/src/Service/JobOrderHandler/CMBJobOrderHandler.php +++ b/src/Service/JobOrderHandler/CMBJobOrderHandler.php @@ -350,7 +350,7 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface ->setTier2Notes($req->request->get('tier2_notes')) ->setDeliveryAddress($req->request->get('delivery_address')) ->setORName($req->request->get('or_name')) - ->setPromoDetail($req->request->get('promo_detail')) + //->setPromoDetail($req->request->get('promo_detail')) ->setModeOfPayment($req->request->get('mode_of_payment')) ->setLandmark($req->request->get('landmark')); @@ -599,7 +599,7 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface ->setTier2Notes($req->request->get('tier2_notes')) ->setDeliveryAddress($req->request->get('delivery_address')) ->setORName($req->request->get('or_name')) - ->setPromoDetail($req->request->get('promo_detail')) + //->setPromoDetail($req->request->get('promo_detail')) ->setModeOfPayment($req->request->get('mode_of_payment')) ->setLandmark($req->request->get('landmark')) ->setHub($hub) @@ -2629,8 +2629,8 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface // get discount and set to meta $discount = $req->request->get('invoice_discount'); - // check if discount is greater than 50 or negative number - if (($discount > 50) || ($discount < 0)) + // check if discount is greater than 60 or negative number + if (($discount > 60) || ($discount < 0)) $error_array['invoice_discount'] = 'Invalid discount specified'; if (empty($error_array)) @@ -2650,7 +2650,7 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface ->setTier1Notes($req->request->get('tier1_notes')) ->setTier2Notes($req->request->get('tier2_notes')) ->setORName($req->request->get('or_name')) - ->setPromoDetail($req->request->get('promo_detail')) + //->setPromoDetail($req->request->get('promo_detail')) ->setModeOfPayment($req->request->get('mode_of_payment')) ->setLandmark($req->request->get('landmark')) ->setDeliveryAddress('Walk-in') From 2cf55420377b9bd93a1a3cd1d886fa750fed74f7 Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Wed, 1 Jul 2020 09:21:41 +0000 Subject: [PATCH 12/20] Adjust max value for discount to 60. #434 --- templates/job-order/cmb.form.onestep.html.twig | 4 ++-- templates/job-order/cmb.form.walkin.html.twig | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/templates/job-order/cmb.form.onestep.html.twig b/templates/job-order/cmb.form.onestep.html.twig index 13d28e5b..3a52b019 100644 --- a/templates/job-order/cmb.form.onestep.html.twig +++ b/templates/job-order/cmb.form.onestep.html.twig @@ -656,10 +656,10 @@
{% if ftags.invoice_edit %} - + {% else %} - + {% endif %}
diff --git a/templates/job-order/cmb.form.walkin.html.twig b/templates/job-order/cmb.form.walkin.html.twig index 80409b06..35ef6053 100644 --- a/templates/job-order/cmb.form.walkin.html.twig +++ b/templates/job-order/cmb.form.walkin.html.twig @@ -404,10 +404,10 @@
{% if ftags.invoice_edit %} - + {% else %} - + {% endif %}
From 473e7a8e51a31b6409c90dcacf46dcb271884a37 Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Wed, 1 Jul 2020 09:40:01 +0000 Subject: [PATCH 13/20] Return list of years for model year until current year. #434 --- src/Service/CustomerHandler/CMBCustomerHandler.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Service/CustomerHandler/CMBCustomerHandler.php b/src/Service/CustomerHandler/CMBCustomerHandler.php index 49f07044..242ee284 100644 --- a/src/Service/CustomerHandler/CMBCustomerHandler.php +++ b/src/Service/CustomerHandler/CMBCustomerHandler.php @@ -594,7 +594,7 @@ class CMBCustomerHandler implements CustomerHandlerInterface protected function generateYearOptions() { $start_year = 1950; - return range($start_year, date("Y") + 1); + return range($start_year, date("Y")); } From 9bb8380ca4a7342f203dd58c966bd91221072d26 Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Thu, 2 Jul 2020 02:59:23 +0000 Subject: [PATCH 14/20] Add 45 minutes to date_schedule. #434 --- .../JobOrderHandler/CMBJobOrderHandler.php | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/Service/JobOrderHandler/CMBJobOrderHandler.php b/src/Service/JobOrderHandler/CMBJobOrderHandler.php index 556fdfbd..dbcef5b9 100644 --- a/src/Service/JobOrderHandler/CMBJobOrderHandler.php +++ b/src/Service/JobOrderHandler/CMBJobOrderHandler.php @@ -1442,7 +1442,16 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface public function initializeOneStepForm() { - $params['obj'] = new JobOrder(); + $new_jo = new JobOrder(); + + // set time schedule + $date_schedule = new DateTime(); + + // add 45 minutes to time + $date_schedule->add(new DateInterval('PT45M')); + $new_jo->setDateSchedule($date_schedule); + + $params['obj'] = $new_jo; $params['mode'] = 'onestep'; $params['jo_service_charges'] = []; @@ -2498,7 +2507,16 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface public function initializeWalkinForm() { - $params['obj'] = new JobOrder(); + $new_jo = new JobOrder(); + + // set time schedule + $date_schedule = new DateTime(); + + // add 45 minutes to time + $date_schedule->add(new DateInterval('PT45M')); + $new_jo->setDateSchedule($date_schedule); + + $params['obj'] = $new_jo; $params['mode'] = 'walk-in'; $this->fillDropdownParameters($params); From 6e07e24e93e22bfa71655afd671c77765751710d Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Thu, 2 Jul 2020 11:53:14 +0000 Subject: [PATCH 15/20] Made discount a dropdown. #434 --- .../JobOrderHandler/CMBJobOrderHandler.php | 12 +++++ .../job-order/cmb.form.onestep.html.twig | 50 +++++++++++++++++-- templates/job-order/cmb.form.walkin.html.twig | 22 +++++++- 3 files changed, 77 insertions(+), 7 deletions(-) diff --git a/src/Service/JobOrderHandler/CMBJobOrderHandler.php b/src/Service/JobOrderHandler/CMBJobOrderHandler.php index dbcef5b9..2bbb614d 100644 --- a/src/Service/JobOrderHandler/CMBJobOrderHandler.php +++ b/src/Service/JobOrderHandler/CMBJobOrderHandler.php @@ -1454,6 +1454,7 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface $params['obj'] = $new_jo; $params['mode'] = 'onestep'; $params['jo_service_charges'] = []; + $params['discounts'] = $this->generateDiscountOptions(); $this->fillDropdownParameters($params); $this->fillFormTags($params); @@ -1474,6 +1475,7 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface $params['mode'] = 'onestep-edit'; $params['cvid'] = $obj->getCustomerVehicle()->getID(); $params['vid'] = $obj->getCustomerVehicle()->getVehicle()->getID(); + $params['discounts'] = $this->generateDiscountOptions(); // get service charges $sc_array = []; @@ -1504,6 +1506,7 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface // get images if any $jo_extra = $obj->getJOExtra(); $pic_array = []; + $params['signature'] = null; if ($jo_extra != null) { $b_speed_img = $jo_extra->getBeforeSpeedImageFilename(); @@ -1605,6 +1608,7 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface $params['mode'] = 'open_edit'; $params['cvid'] = $jo->getCustomerVehicle()->getID(); $params['vid'] = $jo->getCustomerVehicle()->getVehicle()->getID(); + $params['discounts'] = $this->generateDiscountOptions(); $this->fillDropdownParameters($params); $this->fillFormTags($params); @@ -2518,6 +2522,7 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface $params['obj'] = $new_jo; $params['mode'] = 'walk-in'; + $params['discounts'] = $this->generateDiscountOptions(); $this->fillDropdownParameters($params); $this->fillFormTags($params); @@ -2803,6 +2808,7 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface $params['mode'] = 'walk-in-edit'; $params['cvid'] = $obj->getCustomerVehicle()->getID(); $params['vid'] = $obj->getCustomerVehicle()->getVehicle()->getID(); + $params['discounts'] = $this->generateDiscountOptions(); $this->fillDropdownParameters($params); $this->fillFormTags($params); @@ -3131,4 +3137,10 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface else return 'jo_onestep_edit_form'; } + + protected function generateDiscountOptions() + { + $discount_start = 0; + return range($discount_start, 60); + } } diff --git a/templates/job-order/cmb.form.onestep.html.twig b/templates/job-order/cmb.form.onestep.html.twig index 3a52b019..92a13711 100644 --- a/templates/job-order/cmb.form.onestep.html.twig +++ b/templates/job-order/cmb.form.onestep.html.twig @@ -278,7 +278,7 @@
- + @@ -288,7 +288,7 @@
- + @@ -656,10 +656,28 @@
{% if ftags.invoice_edit %} - + {% else %} - + {% endif %}
@@ -1162,6 +1180,28 @@ $(function() { return false; } + // check date schedule if it's earlier + // if so, show an alert to let user know + var date_time = $('#date-schedule-date').val() + ' ' + $('#date-schedule-time').val() + var date_schedule = new Date(date_time); + var current_date = new Date(); + + if (date_schedule < current_date) + { + //swal({ + // title: 'Warning!', + // text: 'Schedule date and time is after today\'s date and time. Continue submission?', + // type: 'warning', + // showCancelButton: true, + //}).then(function(isConfirm) { + // if (isConfirm) { + // return true; + // } else { + // return false; + // } + //}); + } + form_in_process = true; var form = $(this); @@ -1542,7 +1582,7 @@ $(function() { // update invoice when promo is changed $("#invoice-discount").change(function() { - generateInvoice(); + generateInvoice(); }); // trigger update when service type is changed diff --git a/templates/job-order/cmb.form.walkin.html.twig b/templates/job-order/cmb.form.walkin.html.twig index 35ef6053..81de36c1 100644 --- a/templates/job-order/cmb.form.walkin.html.twig +++ b/templates/job-order/cmb.form.walkin.html.twig @@ -404,10 +404,28 @@
{% if ftags.invoice_edit %} - + {% else %} - + {% endif %}
From c3487358f1bc4a88ade6895d44e417f1476fdfb5 Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Fri, 3 Jul 2020 07:29:47 +0000 Subject: [PATCH 16/20] Autopopulate the OR Name field with the customer name. #434 --- .../JobOrderHandler/CMBJobOrderHandler.php | 15 ++++++++------- templates/job-order/cmb.form.onestep.html.twig | 17 ++++++++++++----- templates/job-order/cmb.form.walkin.html.twig | 12 +++++++++--- 3 files changed, 29 insertions(+), 15 deletions(-) diff --git a/src/Service/JobOrderHandler/CMBJobOrderHandler.php b/src/Service/JobOrderHandler/CMBJobOrderHandler.php index 2bbb614d..c45bd787 100644 --- a/src/Service/JobOrderHandler/CMBJobOrderHandler.php +++ b/src/Service/JobOrderHandler/CMBJobOrderHandler.php @@ -350,7 +350,7 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface ->setTier2Notes($req->request->get('tier2_notes')) ->setDeliveryAddress($req->request->get('delivery_address')) ->setORName($req->request->get('or_name')) - //->setPromoDetail($req->request->get('promo_detail')) + ->setPromoDetail($req->request->get('promo_detail', '')) ->setModeOfPayment($req->request->get('mode_of_payment')) ->setLandmark($req->request->get('landmark')); @@ -554,11 +554,12 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface } // get discount and set to meta - $discount = $req->request->get('invoice_discount', []); - - // check if discount is greater than 50 or negative number - if (($discount > 50) || ($discount < 0)) + $discount = $req->request->get('invoice_discount'); + + if (($discount > 60) || ($discount < 0)) + { $error_array['invoice_discount'] = 'Invalid discount specified'; + } // get list of service charges $service_charges = $req->request->get('service_charges', []); @@ -599,7 +600,7 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface ->setTier2Notes($req->request->get('tier2_notes')) ->setDeliveryAddress($req->request->get('delivery_address')) ->setORName($req->request->get('or_name')) - //->setPromoDetail($req->request->get('promo_detail')) + ->setPromoDetail($req->request->get('promo_detail', '')) ->setModeOfPayment($req->request->get('mode_of_payment')) ->setLandmark($req->request->get('landmark')) ->setHub($hub) @@ -2673,7 +2674,7 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface ->setTier1Notes($req->request->get('tier1_notes')) ->setTier2Notes($req->request->get('tier2_notes')) ->setORName($req->request->get('or_name')) - //->setPromoDetail($req->request->get('promo_detail')) + ->setPromoDetail($req->request->get('promo_detail', '')) ->setModeOfPayment($req->request->get('mode_of_payment')) ->setLandmark($req->request->get('landmark')) ->setDeliveryAddress('Walk-in') diff --git a/templates/job-order/cmb.form.onestep.html.twig b/templates/job-order/cmb.form.onestep.html.twig index 92a13711..83e866c5 100644 --- a/templates/job-order/cmb.form.onestep.html.twig +++ b/templates/job-order/cmb.form.onestep.html.twig @@ -644,13 +644,11 @@
-
@@ -660,7 +658,7 @@ {% for discount in discounts %} {% if obj.getInvoice %} - + {% else %} {% endif %} @@ -672,12 +670,13 @@ {% for discount in discounts %} {% if obj.getInvoice %} - + {% else %} {% endif %} {% endfor %} + {% endif %}
@@ -1359,6 +1358,7 @@ $(function() { } else { $("#current-battery, #warranty-expiration").val("No current battery").css('color', '#f4516c'); } + $("#or_name").val(vdata.customer.first_name + ' ' + vdata.customer.last_name); }) }).focus(); {% endif %} @@ -1582,6 +1582,7 @@ $(function() { // update invoice when promo is changed $("#invoice-discount").change(function() { + console.log('discount ' + $("#invoice-discount").val()); generateInvoice(); }); @@ -1926,6 +1927,12 @@ $(function() { generateInvoice(); }); + $("#customer-first-name, #customer-last-name").change(function() { + // autopopulate OR name with customer name + var cust_name = $("#customer-first-name").val() + ' ' + $("#customer-last-name").val(); + $("#or_name").val(cust_name); + }); + }); {% endblock %} diff --git a/templates/job-order/cmb.form.walkin.html.twig b/templates/job-order/cmb.form.walkin.html.twig index 81de36c1..63fe6b82 100644 --- a/templates/job-order/cmb.form.walkin.html.twig +++ b/templates/job-order/cmb.form.walkin.html.twig @@ -392,13 +392,11 @@
-
@@ -741,6 +739,8 @@ var vdata = false; } else { $("#current-battery, #warranty-expiration").val("No current battery").css('color', '#f4516c'); } + + $("#or_name").val(vdata.customer.first_name + ' ' + vdata.customer.last_name); }) }).focus(); {% endif %} @@ -1107,6 +1107,12 @@ var vdata = false; }); }); }); + + $("#customer-first-name, #customer-last-name").change(function() { + // autopopulate OR name with customer name + var cust_name = $("#customer-first-name").val() + ' ' + $("#customer-last-name").val(); + $("#or_name").val(cust_name); + }); }); {% endblock %} From 27f37de489afbcd98157a3eef068ee084524e921 Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Fri, 3 Jul 2020 08:14:12 +0000 Subject: [PATCH 17/20] Fix discount issues. #434 --- src/Controller/JobOrderController.php | 5 ++++- src/Service/InvoiceGenerator/CMBInvoiceGenerator.php | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/Controller/JobOrderController.php b/src/Controller/JobOrderController.php index cb84e113..58650d47 100644 --- a/src/Controller/JobOrderController.php +++ b/src/Controller/JobOrderController.php @@ -764,7 +764,10 @@ class JobOrderController extends Controller // use invoice object values in a json friendly array $invoice = [ - 'discount' => number_format($iobj->getDiscount(), 2), + // TODO: CMB needs to have no decimal places for discount. + // Resq requires the two decimal places since discount is computed. + //'discount' => number_format($iobj->getDiscount(), 2), + 'discount' => number_format($iobj->getDiscount(), 0), 'trade_in' => number_format($iobj->getTradeIn(), 2), // TODO: computations not done yet for this on invoice creator 'price' => number_format($iobj->getVATExclusivePrice(), 2), 'vat' => number_format($iobj->getVAT(), 2), diff --git a/src/Service/InvoiceGenerator/CMBInvoiceGenerator.php b/src/Service/InvoiceGenerator/CMBInvoiceGenerator.php index 534600fb..c0425f31 100644 --- a/src/Service/InvoiceGenerator/CMBInvoiceGenerator.php +++ b/src/Service/InvoiceGenerator/CMBInvoiceGenerator.php @@ -270,7 +270,7 @@ class CMBInvoiceGenerator implements InvoiceGeneratorInterface } // check if discount is greater than 50 or negative number - if (($discount > 50) || ($discount < 0)) + if (($discount > 60) || ($discount < 0)) return 'Invalid discount specified'; $criteria->setDiscount($discount); From 3de8b8762f458f01f20281d6223e2f8e5883964a Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Mon, 6 Jul 2020 07:51:26 +0000 Subject: [PATCH 18/20] Add checking if scheduled date and time are before the current date and time. #434 --- .../JobOrderHandler/CMBJobOrderHandler.php | 2 + .../job-order/cmb.form.onestep.html.twig | 64 ++++++++++++------- templates/job-order/cmb.form.walkin.html.twig | 46 ++++++++++++- 3 files changed, 88 insertions(+), 24 deletions(-) diff --git a/src/Service/JobOrderHandler/CMBJobOrderHandler.php b/src/Service/JobOrderHandler/CMBJobOrderHandler.php index c45bd787..43e21a0e 100644 --- a/src/Service/JobOrderHandler/CMBJobOrderHandler.php +++ b/src/Service/JobOrderHandler/CMBJobOrderHandler.php @@ -1456,6 +1456,7 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface $params['mode'] = 'onestep'; $params['jo_service_charges'] = []; $params['discounts'] = $this->generateDiscountOptions(); + $params['current_date'] = new DateTime(); $this->fillDropdownParameters($params); $this->fillFormTags($params); @@ -2524,6 +2525,7 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface $params['obj'] = $new_jo; $params['mode'] = 'walk-in'; $params['discounts'] = $this->generateDiscountOptions(); + $params['current_date'] = new DateTime(); $this->fillDropdownParameters($params); $this->fillFormTags($params); diff --git a/templates/job-order/cmb.form.onestep.html.twig b/templates/job-order/cmb.form.onestep.html.twig index 83e866c5..35846621 100644 --- a/templates/job-order/cmb.form.onestep.html.twig +++ b/templates/job-order/cmb.form.onestep.html.twig @@ -1174,33 +1174,12 @@ $(function() { {% endif %} $("#row-form").submit(function(e) { + e.preventDefault(); if (form_in_process) { alert("Cannot submit form twice. First submission still in progress."); return false; } - // check date schedule if it's earlier - // if so, show an alert to let user know - var date_time = $('#date-schedule-date').val() + ' ' + $('#date-schedule-time').val() - var date_schedule = new Date(date_time); - var current_date = new Date(); - - if (date_schedule < current_date) - { - //swal({ - // title: 'Warning!', - // text: 'Schedule date and time is after today\'s date and time. Continue submission?', - // type: 'warning', - // showCancelButton: true, - //}).then(function(isConfirm) { - // if (isConfirm) { - // return true; - // } else { - // return false; - // } - //}); - } - form_in_process = true; var form = $(this); @@ -1933,6 +1912,47 @@ $(function() { $("#or_name").val(cust_name); }); + $('.dp').on('changeDate', function() { + // check date schedule if it's earlier + // if so, show an alert to let user know + var date_time = $('#date-schedule-date').val() + ' ' + $('#date-schedule-time').val() + var date_schedule = new Date(date_time); + var current_date = new Date('{{ current_date|date('Y-m-d g:i A') }}'); + + // check if date is earlier than current + if (date_schedule < current_date) + { + swal({ + title: 'Warning!', + text: 'Schedule date and time is before today\'s date and time.', + type: 'warning', + }); + } + }); + + $('.tp').on('changeTime.timepicker', function(e) { + // set the schedule time what the user selects + $('#date-schedule-time').val(e.time.value); + }); + + $('.tp').on('hide.timepicker', function(e) { + // check time schedule along with date if it's earlier than current date + var date_time = $('#date-schedule-date').val() + ' ' + $('#date-schedule-time').val() + var date_schedule = new Date(date_time); + var current_date = new Date('{{ current_date|date('Y-m-d g:i A') }}'); + + // check if date is earlier than current + if (date_schedule < current_date) + { + swal({ + title: 'Warning!', + text: 'Schedule date and time is before today\'s date and time.', + type: 'warning', + }); + } + + }); + }); {% endblock %} diff --git a/templates/job-order/cmb.form.walkin.html.twig b/templates/job-order/cmb.form.walkin.html.twig index 63fe6b82..9c34a357 100644 --- a/templates/job-order/cmb.form.walkin.html.twig +++ b/templates/job-order/cmb.form.walkin.html.twig @@ -278,7 +278,7 @@
- + @@ -288,7 +288,7 @@
- + @@ -1113,6 +1113,48 @@ var vdata = false; var cust_name = $("#customer-first-name").val() + ' ' + $("#customer-last-name").val(); $("#or_name").val(cust_name); }); + + $('.dp').on('changeDate', function() { + // check date schedule if it's earlier + // if so, show an alert to let user know + var date_time = $('#date-schedule-date').val() + ' ' + $('#date-schedule-time').val() + var date_schedule = new Date(date_time); + var current_date = new Date('{{ current_date|date('Y-m-d g:i A') }}'); + + // check if date is earlier than current + if (date_schedule < current_date) + { + swal({ + title: 'Warning!', + text: 'Schedule date and time is before today\'s date and time.', + type: 'warning', + }); + } + }); + + $('.tp').on('changeTime.timepicker', function(e) { + // set the schedule time what the user selects + $('#date-schedule-time').val(e.time.value); + }); + + $('.tp').on('hide.timepicker', function(e) { + // check time schedule along with date if it's earlier than current date + var date_time = $('#date-schedule-date').val() + ' ' + $('#date-schedule-time').val() + var date_schedule = new Date(date_time); + var current_date = new Date('{{ current_date|date('Y-m-d g:i A') }}'); + + // check if date is earlier than current + if (date_schedule < current_date) + { + swal({ + title: 'Warning!', + text: 'Schedule date and time is before today\'s date and time.', + type: 'warning', + }); + } + + }); + }); {% endblock %} From 9c2c1e5895f54190db0585533297d538ce061885 Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Mon, 6 Jul 2020 09:10:33 +0000 Subject: [PATCH 19/20] Remove before pictures from job order. Also remove uploadArrive endpoint. #434 --- config/routes/cmb_rider_api.yaml | 5 - src/Controller/CMBRAPIController.php | 9 - src/Entity/JOExtra.php | 76 -------- .../JobOrderHandler/CMBJobOrderHandler.php | 16 +- .../RiderAPIHandler/CMBRiderAPIHandler.php | 184 ------------------ .../job-order/cmb.form.onestep.html.twig | 41 +--- 6 files changed, 3 insertions(+), 328 deletions(-) diff --git a/config/routes/cmb_rider_api.yaml b/config/routes/cmb_rider_api.yaml index 93f65d1a..805d898d 100644 --- a/config/routes/cmb_rider_api.yaml +++ b/config/routes/cmb_rider_api.yaml @@ -125,11 +125,6 @@ cmb_rapi_jo_odometer: controller: App\Controller\CMBRAPIController::setOdometer methods: [POST] -cmb_rapi_jo_arrive_photos_upload: - path: /cmbrapi/uploadarrivephotos - controller: App\Controller\CMBRAPIController::uploadArrivePhotos - methods: [POST] - cmb_rapi_jo_finish_photos_upload: path: /cmbrapi/uploadfinishphotos controller: App\Controller\CMBRAPIController::uploadFinishPhotos diff --git a/src/Controller/CMBRAPIController.php b/src/Controller/CMBRAPIController.php index efdd0177..6ddf842e 100644 --- a/src/Controller/CMBRAPIController.php +++ b/src/Controller/CMBRAPIController.php @@ -239,15 +239,6 @@ class CMBRAPIController extends Controller return $res->getReturnResponse(); } - public function uploadArrivePhotos(Request $req, RiderAPIHandlerInterface $rapi_handler) - { - $data = $rapi_handler->uploadArrivePhotos($req); - - $res = $this->generateResultFromHandler($data); - - return $res->getReturnResponse(); - } - public function uploadFinishPhotos(Request $req, RiderAPIHandlerInterface $rapi_handler) { $data = $rapi_handler->uploadFinishPhotos($req); diff --git a/src/Entity/JOExtra.php b/src/Entity/JOExtra.php index b93b1e25..12974b33 100644 --- a/src/Entity/JOExtra.php +++ b/src/Entity/JOExtra.php @@ -19,21 +19,6 @@ class JOExtra */ protected $id; - /** - * @ORM\Column(type="string", nullable=true) - */ - protected $before_speed_image_filename; - - /** - * @ORM\Column(type="string", nullable=true) - */ - protected $before_plate_num_image_filename; - - /** - * @ORM\Column(type="string", nullable=true) - */ - protected $before_batt_image_filename; - /** * @ORM\Column(type="string", nullable=true) */ @@ -49,11 +34,6 @@ class JOExtra */ protected $after_batt_image_filename; - /** - * @ORM\Column(type="array", nullable=true) - */ - protected $before_other_images; - /** * @ORM\Column(type="array", nullable=true) */ @@ -67,7 +47,6 @@ class JOExtra public function __construct() { - $this->before_other_images = new ArrayCollection(); $this->after_other_images = new ArrayCollection(); } @@ -76,38 +55,6 @@ class JOExtra return $this->id; } - public function setBeforeSpeedImageFilename($image_filename) - { - $this->before_speed_image_filename = $image_filename; - return $this; - } - - public function getBeforeSpeedImageFilename() - { - return $this->before_speed_image_filename; - } - - public function setBeforePlateNumImageFilename($image_filename) - { - $this->before_plate_num_image_filename = $image_filename; - return $this; - } - - public function getBeforePlateNumImageFilename() - { - return $this->before_plate_num_image_filename; - } - - public function setBeforeBattImageFilename($image_filename) - { - $this->before_batt_image_filename = $image_filename; - return $this; - } - - public function getBeforeBattImageFilename() - { - return $this->before_batt_image_filename; - } public function setAfterSpeedImageFilename($image_filename) { $this->after_speed_image_filename = $image_filename; @@ -141,29 +88,6 @@ class JOExtra return $this->after_batt_image_filename; } - public function getBeforeOtherImages() - { - return $this->before_other_images; - } - - public function setBeforeOtherImages(array $images) - { - $this->before_other_images = new ArrayCollection(); - - foreach ($images as $image_filename) - { - $this->before_other_images->add($image_filename); - } - - return $this; - } - - public function clearBeforeOtherImages() - { - $this->before_other_images = new ArrayCollection(); - return $this; - } - public function getAfterOtherImages() { return $this->after_other_images; diff --git a/src/Service/JobOrderHandler/CMBJobOrderHandler.php b/src/Service/JobOrderHandler/CMBJobOrderHandler.php index 43e21a0e..0ae32a73 100644 --- a/src/Service/JobOrderHandler/CMBJobOrderHandler.php +++ b/src/Service/JobOrderHandler/CMBJobOrderHandler.php @@ -1478,6 +1478,7 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface $params['cvid'] = $obj->getCustomerVehicle()->getID(); $params['vid'] = $obj->getCustomerVehicle()->getVehicle()->getID(); $params['discounts'] = $this->generateDiscountOptions(); + $params['current_date'] = new DateTime(); // get service charges $sc_array = []; @@ -1511,35 +1512,21 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface $params['signature'] = null; if ($jo_extra != null) { - $b_speed_img = $jo_extra->getBeforeSpeedImageFilename(); $a_speed_img = $jo_extra->getAfterSpeedImageFilename(); - $b_plate_img = $jo_extra->getBeforePlateNumImageFilename(); $a_plate_img = $jo_extra->getAfterPlateNumImageFilename(); - $b_batt_img = $jo_extra->getBeforeBattImageFilename(); $a_batt_img = $jo_extra->getAfterBattImageFilename(); - $b_other_images = $jo_extra->getBeforeOtherImages(); $a_other_images = $jo_extra->getAfterOtherImages(); $cust_signature = $jo_extra->getCustomerSignature(); - if ($b_speed_img != null) - $pic_array['before_speed_img'] = $b_speed_img; if ($a_speed_img != null) $pic_array['after_speed_img'] = $a_speed_img; - if ($b_plate_img != null) - $pic_array['before_plate_img'] = $b_plate_img; if ($a_plate_img != null) $pic_array['after_plate_img'] = $a_plate_img; - if ($b_batt_img != null) - $pic_array['before_batt_img'] = $b_batt_img; if ($a_batt_img != null) $pic_array['after_batt_img'] = $a_batt_img; - foreach($b_other_images as $b_img) - { - $pic_array['b_other_images'][] = $b_img; - } foreach ($a_other_images as $a_img) { $pic_array['a_other_images'][] = $a_img; @@ -2812,6 +2799,7 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface $params['cvid'] = $obj->getCustomerVehicle()->getID(); $params['vid'] = $obj->getCustomerVehicle()->getVehicle()->getID(); $params['discounts'] = $this->generateDiscountOptions(); + $params['current_date'] = new DateTime(); $this->fillDropdownParameters($params); $this->fillFormTags($params); diff --git a/src/Service/RiderAPIHandler/CMBRiderAPIHandler.php b/src/Service/RiderAPIHandler/CMBRiderAPIHandler.php index 25b13034..bd723ab4 100644 --- a/src/Service/RiderAPIHandler/CMBRiderAPIHandler.php +++ b/src/Service/RiderAPIHandler/CMBRiderAPIHandler.php @@ -666,13 +666,6 @@ class CMBRiderAPIHandler implements RiderAPIHandlerInterface if ($odo <= 0) $odo = 0; - // get before images - $before_images = [ - 'speedometer' => null, - 'plate_number' => null, - 'battery' => null, - 'others' => [], - ]; $after_images = [ 'speedometer' => null, 'plate_number' => null, @@ -682,19 +675,6 @@ class CMBRiderAPIHandler implements RiderAPIHandlerInterface $jo_extra = $jo->getJOExtra(); if ($jo_extra != null) { - // before images - $before_images['speedometer'] = $this->getURLExtraImage($req, $jo_extra->getBeforeSpeedImageFilename()); - $before_images['plate_number'] = $this->getURLExtraImage($req, $jo_extra->getBeforePlateNumImageFilename()); - $before_images['battery'] = $this->getURLExtraImage($req, $jo_extra->getBeforeBattImageFilename()); - - // other images - $other_images = []; - foreach ($jo_extra->getBeforeOtherImages() as $others) - { - $other_images[] = $this->getURLExtraImage($req, $others); - } - $before_images['others'] = $other_images; - // after images $after_images['speedometer'] = $this->getURLExtraImage($req, $jo_extra->getAfterSpeedImageFilename()); $after_images['plate_number'] = $this->getURLExtraImage($req, $jo_extra->getAfterPlateNumImageFilename()); @@ -764,7 +744,6 @@ class CMBRiderAPIHandler implements RiderAPIHandlerInterface 'odometer' => $odo, // images - 'arrive_photos' => $before_images, 'finish_photos' => $after_images, // customer email @@ -1576,169 +1555,6 @@ class CMBRiderAPIHandler implements RiderAPIHandlerInterface return $new_filename; } - public function uploadArrivePhotos(Request $req) - { - $required_params = [ - 'jo_id', - ]; - $data = $this->checkActiveJO($req, $required_params, $jo); - if (isset($data['error'])) - { - $data['title'] = 'Failed Upload Arrive Photos'; - return $data; - } - - $dest = $this->upload_dir; - - $speed_img_file = $req->files->get('speedometer_img'); - $batt_img_file = $req->files->get('battery_img'); - $plate_num_img_file = $req->files->get('plate_number_img'); - $other_img_files[]= $req->files->get('other_images'); - - if ((empty($speed_img_file)) && - (empty($batt_img_file)) && - (empty($plate_num_img_file))) - { - $data = [ - 'title' => 'Failed Upload Arrive Photos', - 'error' => 'No image files received.' - ]; - return $data; - } - else - { - $new_speed_filename = ''; - $new_batt_filename = ''; - $new_plate_num_filename = ''; - $other_filenames = []; - - if (!empty($speed_img_file)) - { - // save speedometer file - $orig_speed_filename = pathinfo($speed_img_file->getClientOriginalName(), PATHINFO_FILENAME); - $new_speed_filename = uniqid() . '-'. $orig_speed_filename . '.' . $speed_img_file->guessClientExtension(); - - try - { - $speed_img_file->move($dest, $new_speed_filename); - } - catch (FileException $e) - { - $data = [ - 'error' => 'Error saving image files.' - ]; - return $data; - } - } - if (!empty($batt_img_file)) - { - // save battery file - $orig_batt_filename = pathinfo($batt_img_file->getClientOriginalName(), PATHINFO_FILENAME); - $new_batt_filename = uniqid() . '-' . $orig_batt_filename . '.' . $batt_img_file->guessClientExtension(); - - try - { - $batt_img_file->move($dest, $new_batt_filename); - } - catch (FileException $e) - { - $data = [ - 'error' => 'Error saving image files.' - ]; - return $data; - } - } - if (!empty($plate_num_img_file)) - { - // save plate number file - $orig_plate_num_filename = pathinfo($plate_num_img_file->getClientOriginalName(), PATHINFO_FILENAME); - $new_plate_num_filename = uniqid() . '-' . $orig_plate_num_filename . '.' . $plate_num_img_file->guessClientExtension(); - - try - { - $plate_num_img_file->move($dest, $new_plate_num_filename); - } - catch (FileException $e) - { - $data = [ - 'error' => 'Error saving image files.' - ]; - return $data; - } - } - - foreach ($other_img_files as $other_img_file) - { - if (!(empty($other_img_file))) - { - foreach($other_img_file as $other_img) - { - $orig_other_filename = pathinfo($other_img->getClientOriginalName(), PATHINFO_FILENAME); - $new_other_filename = uniqid() . '-'. $orig_other_filename . '.' . $other_img->guessClientExtension(); - - $other_filenames[] = $new_other_filename; - - try - { - $other_img->move($dest, $new_other_filename); - } - catch (FileException $e) - { - $data = [ - 'error' => 'Error saving image files.' - ]; - return $data; - } - } - } - } - - $jo_extra = $jo->getJOExtra(); - if ($jo_extra == null) - { - // create JOExtra entity - $jo_extra = new JOExtra(); - - $jo_extra->setBeforeSpeedImageFilename($new_speed_filename); - $jo_extra->setBeforeBattImageFilename($new_batt_filename); - $jo_extra->setBeforePlateNumImageFilename($new_plate_num_filename); - - if (empty($other_filenames)) - { - $jo_extra->clearBeforeOtherImages(); - } - else - { - $jo_extra->setBeforeOtherImages($other_filenames); - } - - $jo->setJOExtra($jo_extra); - - $this->em->persist($jo_extra); - } - else - { - $jo_extra->setBeforeSpeedImageFilename($new_speed_filename); - $jo_extra->setBeforeBattImageFilename($new_batt_filename); - $jo_extra->setBeforePlateNumImageFilename($new_plate_num_filename); - - if (empty($other_filenames)) - { - $jo_extra->clearBeforeOtherImages(); - - } - else - { - $jo_extra->setBeforeOtherImages($other_filenames); - } - } - - $this->em->flush(); - } - - return $data; - } - public function uploadFinishPhotos(Request $req) { $required_params = [ diff --git a/templates/job-order/cmb.form.onestep.html.twig b/templates/job-order/cmb.form.onestep.html.twig index 35846621..60fb87c4 100644 --- a/templates/job-order/cmb.form.onestep.html.twig +++ b/templates/job-order/cmb.form.onestep.html.twig @@ -511,48 +511,9 @@
-
+
-
-
- -
- {% for key, picture in jo_pictures %} - {% if key == 'before_speed_img' %} -
- -
-
- {% endif %} - {% if key == 'before_plate_img' %} -
- -
-
- {% endif %} - {% if key == 'before_batt_img' %} -
- -
-
- {% endif %} - {% endfor %} -
-
-
- -
- {% for key, picture in jo_pictures %} - {% if key == 'b_other_images' %} - {% for pic in jo_pictures['b_other_images'] %} -
-
-
- {% endfor %} - {% endif %} - {% endfor %} -
From 3fcb3d31b5d2063fdce5a696932f40aead7be34e Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Tue, 7 Jul 2020 07:34:43 +0000 Subject: [PATCH 20/20] Limit customer vehicles to 2 per customer. #434 --- templates/customer/cmb.form.html.twig | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/templates/customer/cmb.form.html.twig b/templates/customer/cmb.form.html.twig index e417f3bb..c979b7d7 100644 --- a/templates/customer/cmb.form.html.twig +++ b/templates/customer/cmb.form.html.twig @@ -663,9 +663,18 @@ // display create vehicle form $("#add-vehicle").click(function() { - $("#vehicle-form").data('mode', 'create'); - $("#vehicle-form-title").html("Add Vehicle"); - $("#vehicle-form-modal").modal('show'); + // check if there are already 2 vehicles in list + if (vehicleRows.length == 2) + { + swal({ + text: 'Customer is limited to only 2 vehicles..', + type: 'info', + }); + } else { + $("#vehicle-form").data('mode', 'create'); + $("#vehicle-form-title").html("Add Vehicle"); + $("#vehicle-form-modal").modal('show'); + } }); // find vehicle row by index