From a22816d18a708cf71a8fa308b18b4cec53b87097 Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Fri, 29 Mar 2019 10:06:49 +0000 Subject: [PATCH 1/5] Add battery conflict report to acl.yaml. Add route to controller for battery conflict report #197 --- config/acl.yaml | 2 ++ config/routes/report.yaml | 10 ++++++++++ src/Controller/ReportController.php | 9 +++++++++ 3 files changed, 21 insertions(+) diff --git a/config/acl.yaml b/config/acl.yaml index a1152234..6655e53f 100644 --- a/config/acl.yaml +++ b/config/acl.yaml @@ -248,3 +248,5 @@ access_keys: label: Menu - id: report.reject label: Rejection Report + - id: report.battery.conflict + label: Battery Conflict Report diff --git a/config/routes/report.yaml b/config/routes/report.yaml index 483d7254..c8560798 100644 --- a/config/routes/report.yaml +++ b/config/routes/report.yaml @@ -17,3 +17,13 @@ rep_reject_detail_submit: path: /report/rejection_detail controller: App\Controller\ReportController::rejectDetailSubmit methods: [POST] + +rep_battery_conflict_form: + path: /report/battery_conflict + controller: App\Controller\ReportController::batteryConflictForm + methods: [GET] + +rep_battery_conflict_submit: + path: /report/battery_conflict + controller: App\Controller\ReportController::batteryConflictSubmit + methods: [POST] diff --git a/src/Controller/ReportController.php b/src/Controller/ReportController.php index 7d302694..3ddd65d4 100644 --- a/src/Controller/ReportController.php +++ b/src/Controller/ReportController.php @@ -260,4 +260,13 @@ class ReportController extends BaseController ]); */ } + + public function batteryConflictForm() + { + $this->denyAccessUnlessGranted('report.battery.conflict', null, 'No access.'); + + $params = $this->initParameters(); + + return $this->render('', $params); + } } From c720be1c2d2959d8d4652e6423d03a49799c0c5d Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Mon, 1 Apr 2019 08:57:49 +0000 Subject: [PATCH 2/5] Add twig files for the battery conflict report. Add link to the battery conflict report in base twig. Add controller functions to query for the report. #197 --- src/Controller/ReportController.php | 74 ++++++++++++++++- templates/base.html.twig | 10 +++ .../battery/batt_conflict_form.html.twig | 82 +++++++++++++++++++ 3 files changed, 164 insertions(+), 2 deletions(-) create mode 100644 templates/report/battery/batt_conflict_form.html.twig diff --git a/src/Controller/ReportController.php b/src/Controller/ReportController.php index 3ddd65d4..352dadf0 100644 --- a/src/Controller/ReportController.php +++ b/src/Controller/ReportController.php @@ -5,8 +5,11 @@ namespace App\Controller; use App\Ramcar\BaseController; use App\Ramcar\JORejectionReason; use App\Ramcar\ServiceType; +use App\Ramcar\JOStatus; use App\Entity\JORejection; +use App\Entity\Battery; +use App\Entity\JobOrder; use Doctrine\ORM\Query; use Doctrine\ORM\QueryBuilder; @@ -265,8 +268,75 @@ class ReportController extends BaseController { $this->denyAccessUnlessGranted('report.battery.conflict', null, 'No access.'); - $params = $this->initParameters(); + $params = $this->initParameters('outlet_list'); + + return $this->render('report/battery/batt_conflict_form.html.twig', $params); + } + + public function batteryConflictSubmit(Request $req) + { + $this->denyAccessUnlessGranted('report.battery.conflict', null, 'No access.'); + + // get battery query builder + $batt_qb = $this->getDoctrine() + ->getRepository(Battery::class) + ->createQueryBuilder('batt'); + + // get job order query builder + $job_qb = $this->getDoctrine() + ->getRepository(JobOrder::class) + ->createQueryBuilder('jo'); + + // 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 for battery + $batt_query = $batt_qb->getQuery(); + + // build query for job order + $jo_query = $job_qb->where('jo.date_create >= :start') + ->andWhere('jo.date_create <= :end') + ->andWhere('jo.status != :status') + ->setParameter('start', $date_start->format('Y-m-d') . ' 00:00:00') + ->setParameter('end', $date_end->format('Y-m-d') . ' 23:59:59') + ->setParameter('status', JOStatus::CANCELLED) + ->getQuery(); + + // run queries + $batts = $batt_query->getResult(); + $jos = $jo_query->getResult(); + + $battcomp = []; + // get battery results and store in array + foreach ($batts as $batt) + { + $batt_id = $batt->getID(); + + $comp_vehicles = $batt->getVehicles(); + // go through compatible vehicle list and add to array + foreach ($comp_vehicles as $vehicle) + { + $battcomp[$batt_id] = [ + 'manufacturer' => $vehicle->getManufacturer(), + 'make' => $vehicle->getMake(), + ]; + } + } + + // get results + foreach ($jos as $jo) + { + $vehicle = $jo->getCustomerVehicle()->getVehicle(); + $vmanufacturer = $vehicle->getManufacturer(); + $vmake = $vehicle->getMake(); + + $invoice_items = $jo->getInvoice()->getItems(); + + } - return $this->render('', $params); } } diff --git a/templates/base.html.twig b/templates/base.html.twig index b6464785..e61acf78 100644 --- a/templates/base.html.twig +++ b/templates/base.html.twig @@ -128,6 +128,16 @@ + +
+
+
+

Battery Conflict Report

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

+ Select a date range +

+
+
+
+
+
+
+
+ +
+ +
+ +
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+{% endblock %} + +{% block scripts %} + +{% endblock %} From b0386c47580d946038d25d0a0a675b5707da7765 Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Tue, 2 Apr 2019 10:22:17 +0000 Subject: [PATCH 3/5] Add checking for battery conflicts in existing job orders. #197 --- src/Controller/ReportController.php | 101 ++++++++++++++++++++-------- 1 file changed, 72 insertions(+), 29 deletions(-) diff --git a/src/Controller/ReportController.php b/src/Controller/ReportController.php index 352dadf0..545bdae6 100644 --- a/src/Controller/ReportController.php +++ b/src/Controller/ReportController.php @@ -277,16 +277,13 @@ class ReportController extends BaseController { $this->denyAccessUnlessGranted('report.battery.conflict', null, 'No access.'); - // get battery query builder - $batt_qb = $this->getDoctrine() - ->getRepository(Battery::class) - ->createQueryBuilder('batt'); - // get job order query builder $job_qb = $this->getDoctrine() ->getRepository(JobOrder::class) ->createQueryBuilder('jo'); + $em = $this->getDoctrine()->getManager(); + // get dates $raw_date_start = $req->request->get('date_start'); $raw_date_end = $req->request->get('date_end'); @@ -294,10 +291,7 @@ class ReportController extends BaseController $date_start = DateTime::createFromFormat('m/d/Y', $raw_date_start); $date_end = DateTime::createFromFormat('m/d/Y', $raw_date_end); - // build query for battery - $batt_query = $batt_qb->getQuery(); - - // build query for job order + // build query for job order $jo_query = $job_qb->where('jo.date_create >= :start') ->andWhere('jo.date_create <= :end') ->andWhere('jo.status != :status') @@ -305,38 +299,87 @@ class ReportController extends BaseController ->setParameter('end', $date_end->format('Y-m-d') . ' 23:59:59') ->setParameter('status', JOStatus::CANCELLED) ->getQuery(); + // run queries - $batts = $batt_query->getResult(); $jos = $jo_query->getResult(); - $battcomp = []; - // get battery results and store in array - foreach ($batts as $batt) - { - $batt_id = $batt->getID(); + $batteries = $em->getRepository(Battery::class)->findAll(); - $comp_vehicles = $batt->getVehicles(); - // go through compatible vehicle list and add to array - foreach ($comp_vehicles as $vehicle) + // create compatibility matrix for battery and vehicle + $comp_matrix = []; + foreach ($batteries as $batt) + { + $vehicles = $batt->getVehicles(); + foreach ($vehicles as $vehicle) { - $battcomp[$batt_id] = [ - 'manufacturer' => $vehicle->getManufacturer(), - 'make' => $vehicle->getMake(), - ]; + $comp_matrix[$batt->getID()][$vehicle->getID()] = true; } } - // get results + // go through the job orders to find the conflicts + $results = []; foreach ($jos as $jo) { - $vehicle = $jo->getCustomerVehicle()->getVehicle(); - $vmanufacturer = $vehicle->getManufacturer(); - $vmake = $vehicle->getMake(); - - $invoice_items = $jo->getInvoice()->getItems(); - + $invoice_items = $jo->getInvoice()->getItems(); + foreach ($invoice_items as $item) + { + if ($item->getBattery() != null) + { + $batt_id = $item->getBattery()->getID(); + $vehicle_id = $jo->getCustomerVehicle()->getVehicle()->getID(); + if (isset($comp_matrix[$batt_id][$vehicle_id])) + // if (!isset($comp_matrix[$batt_id][$vehicle_id]) && !$comp_matrix[$batt_id][$vehicle_id]) + { + $results[] = [ + 'jo_id' => $jo->getID(), + 'jo_date_create' => $jo->getDateCreate(), + 'cus_vehicle_manufacturer' => $jo->getCustomerVehicle()->getVehicle()->getManufacturer()->getName(), + 'cus_vehicle_make' => $jo->getCustomerVehicle()->getVehicle()->getMake(), + 'cus_vehicle_model' => $jo->getCustomerVehicle()->getModelYear(), + 'battery_model_ordered' => $item->getBattery()->getModel()->getName(), + 'battery_size_ordered' => $item->getBattery()->getSize()->getName(), + 'compatible_batt' => $jo->getCustomerVehicle()->getVehicle()->getBatteries(), + ]; + } + } + } } + /* + $resp = new StreamedResponse(); + $resp->setCallback(function() use ($results) { + // csv output + $csv_handle = fopen('php://output', 'w+'); + fputcsv($csv_handle, [ + 'Order #', + 'Order Date and Time' + //'Manufacturer', + //'Make', + //'Year', + //'Battery Model', + //'Battery Size', + //'Compatible Batteries' + ]); + foreach ($results as $row) + { + fputcsv($csv_handle, $row); + } + + fclose($csv_handle); + }); + + $filename = 'battery_conflict_' . $date_start->format('Ymd') . '_' . $date_end->format('Ymd') . '.csv'; + + $resp->setStatusCode(200); + $resp->headers->set('Content-Type', 'text/csv; charset=utf-8'); + $resp->headers->set('Content-Disposition', 'attachment; filename="' . $filename . '"'); + + return $resp; + */ + + return $this->json([ + 'result' => $results, + ]); } } From 3af6d6b7e8f13ccd39bd83d27229daa13ff37e37 Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Wed, 3 Apr 2019 02:14:26 +0000 Subject: [PATCH 4/5] Fix checking for battery conflicts. Add list of compatible batteries for vehicle. #197 --- src/Controller/ReportController.php | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/Controller/ReportController.php b/src/Controller/ReportController.php index 545bdae6..13d63613 100644 --- a/src/Controller/ReportController.php +++ b/src/Controller/ReportController.php @@ -328,18 +328,32 @@ class ReportController extends BaseController { $batt_id = $item->getBattery()->getID(); $vehicle_id = $jo->getCustomerVehicle()->getVehicle()->getID(); - if (isset($comp_matrix[$batt_id][$vehicle_id])) - // if (!isset($comp_matrix[$batt_id][$vehicle_id]) && !$comp_matrix[$batt_id][$vehicle_id]) + if (isset($comp_matrix[$batt_id][$vehicle_id]) && $comp_matrix[$batt_id][$vehicle_id]) { + continue; + } + else + { + // get the compatible batteries for the customer vehicle + $batteries = []; + foreach($jo->getCustomerVehicle()->getVehicle()->getBatteries() as $comp_batt) + { + $batteries[] = [ + 'id' => $comp_batt->getID(), + 'mfg_name' => $comp_batt->getManufacturer()->getName(), + 'model_name' => $comp_batt->getModel()->getName(), + 'size_name' => $comp_batt->getSize()->getName(), + ]; + } $results[] = [ 'jo_id' => $jo->getID(), 'jo_date_create' => $jo->getDateCreate(), 'cus_vehicle_manufacturer' => $jo->getCustomerVehicle()->getVehicle()->getManufacturer()->getName(), 'cus_vehicle_make' => $jo->getCustomerVehicle()->getVehicle()->getMake(), 'cus_vehicle_model' => $jo->getCustomerVehicle()->getModelYear(), - 'battery_model_ordered' => $item->getBattery()->getModel()->getName(), + 'battery_model_ordered' => $item->getBattery()->getModel()->getName(), 'battery_size_ordered' => $item->getBattery()->getSize()->getName(), - 'compatible_batt' => $jo->getCustomerVehicle()->getVehicle()->getBatteries(), + 'compatible_batt' => $batteries, ]; } } From c80013bc023a6a16ebd73c649186b273e4294b61 Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Wed, 3 Apr 2019 07:29:14 +0000 Subject: [PATCH 5/5] Fix formatting issue for csv output. #197 --- src/Controller/ReportController.php | 46 +++++++++++++++-------------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/src/Controller/ReportController.php b/src/Controller/ReportController.php index 13d63613..800474d7 100644 --- a/src/Controller/ReportController.php +++ b/src/Controller/ReportController.php @@ -324,6 +324,7 @@ class ReportController extends BaseController $invoice_items = $jo->getInvoice()->getItems(); foreach ($invoice_items as $item) { + // check if the item is a battery if ($item->getBattery() != null) { $batt_id = $item->getBattery()->getID(); @@ -338,42 +339,44 @@ class ReportController extends BaseController $batteries = []; foreach($jo->getCustomerVehicle()->getVehicle()->getBatteries() as $comp_batt) { - $batteries[] = [ - 'id' => $comp_batt->getID(), - 'mfg_name' => $comp_batt->getManufacturer()->getName(), - 'model_name' => $comp_batt->getModel()->getName(), - 'size_name' => $comp_batt->getSize()->getName(), - ]; + //$batteries[] = [ + // 'mfg_name' => $comp_batt->getManufacturer()->getName(), + // 'model_name' => $comp_batt->getModel()->getName(), + // 'size_name' => $comp_batt->getSize()->getName(), + //]; + $batteries[] = $comp_batt->getManufacturer()->getName() . ' ' . + $comp_batt->getModel()->getName() . ' ' . + $comp_batt->getSize()->getName(); } + $results[] = [ 'jo_id' => $jo->getID(), - 'jo_date_create' => $jo->getDateCreate(), + 'jo_date_create' => $jo->getDateCreate()->format('m/d/Y H:i'), 'cus_vehicle_manufacturer' => $jo->getCustomerVehicle()->getVehicle()->getManufacturer()->getName(), 'cus_vehicle_make' => $jo->getCustomerVehicle()->getVehicle()->getMake(), 'cus_vehicle_model' => $jo->getCustomerVehicle()->getModelYear(), 'battery_model_ordered' => $item->getBattery()->getModel()->getName(), 'battery_size_ordered' => $item->getBattery()->getSize()->getName(), - 'compatible_batt' => $batteries, + 'compatible_batt' => implode(', ', $batteries), ]; } } } } - - /* + $resp = new StreamedResponse(); $resp->setCallback(function() use ($results) { // csv output $csv_handle = fopen('php://output', 'w+'); fputcsv($csv_handle, [ 'Order #', - 'Order Date and Time' - //'Manufacturer', - //'Make', - //'Year', - //'Battery Model', - //'Battery Size', - //'Compatible Batteries' + 'Order Date and Time', + 'Manufacturer', + 'Make', + 'Year', + 'Battery Model', + 'Battery Size', + 'Compatible Batteries' ]); foreach ($results as $row) { @@ -390,10 +393,9 @@ class ReportController extends BaseController $resp->headers->set('Content-Disposition', 'attachment; filename="' . $filename . '"'); return $resp; - */ - - return $this->json([ - 'result' => $results, - ]); + + //return $this->json([ + // 'result' => $results, + //]); } }