diff --git a/config/acl.yaml b/config/acl.yaml index 1546a0d9..a9c20c0d 100644 --- a/config/acl.yaml +++ b/config/acl.yaml @@ -298,6 +298,8 @@ access_keys: label: RESQ MEH Customer Report - id: report.warranty.class label: Warranty Class Report + - id: report.vehicle.battery.compatibility + label: Vehicle Battery Compatibility Report - id: service label: Other Services diff --git a/config/routes/report.yaml b/config/routes/report.yaml index f847cfe5..05c6781d 100644 --- a/config/routes/report.yaml +++ b/config/routes/report.yaml @@ -57,3 +57,13 @@ rep_warranty_class_export_csv: path: /report/warranty_class_report controller: App\Controller\ReportController::warrantyClassExportCSV methods: [POST] + +rep_vehicle_battery_compatibility_form: + path: /report/vehicle_battery_compatibility_report + controller: App\Controller\ReportController::vehicleBatteryCompatibilityForm + methods: [GET] + +rep_vehicle_battery_compatibility_export_csv: + path: /report/vehicle_battery_compatibility_report + controller: App\Controller\ReportController::vehicleBatteryCompatibilityExportCSV + methods: [POST] diff --git a/src/Controller/ReportController.php b/src/Controller/ReportController.php index d1bd1bcd..f64b1cb0 100644 --- a/src/Controller/ReportController.php +++ b/src/Controller/ReportController.php @@ -27,7 +27,6 @@ use Symfony\Component\HttpFoundation\File\UploadedFile; use Symfony\Component\Security\Core\Encoder\EncoderFactoryInterface; use Symfony\Component\Validator\Validator\ValidatorInterface; use Symfony\Bundle\FrameworkBundle\Controller\Controller; -use Symfony\Component\Dotenv\Dotenv; use Catalyst\MenuBundle\Annotation\Menu; @@ -614,6 +613,55 @@ class ReportController extends Controller } + /** + * @Menu(selected="outlet_list") + */ + public function vehicleBatteryCompatibilityForm() + { + $this->denyAccessUnlessGranted('report.vehicle.battery.compatibility', null, 'No access.'); + $params['mode'] = 'form'; + + return $this->render('report/vehicle-battery-compatibility/form.html.twig', $params); + } + + /** + * @Menu(selected="outlet_list") + */ + public function vehicleBatteryCompatibilityExportCSV(Request $req, EntityManagerInterface $em) + { + $data = $this->getVehicleBatteryCompatibilityData($em); + + $resp = new StreamedResponse(); + $resp->setCallback(function() use ($data) { + // csv output + $csv_handle = fopen('php://output', 'w+'); + fputcsv($csv_handle, [ + 'Vehicle Manufacturer', + 'Vehicle Make', + 'Vehicle Model Year From', + 'Vehicle Model Year To', + 'Battery Manufacturer', + 'Battery Model', + 'Battery Size', + ]); + foreach ($data as $row) + { + fputcsv($csv_handle, $row); + } + + fclose($csv_handle); + }); + + $filename = 'vehicle_battery_compatibility_report' . '.csv'; + + $resp->setStatusCode(200); + $resp->headers->set('Content-Type', 'text/csv; charset=utf-8'); + $resp->headers->set('Content-Disposition', 'attachment; filename="' . $filename . '"'); + + return $resp; + + } + protected function processPopappFile(UploadedFile $csv_file, EntityManagerInterface $em) { // attempt to open file @@ -915,4 +963,46 @@ class ReportController extends Controller return $data; } + + protected function getVehicleBatteryCompatibilityData(EntityManagerInterface $em) + { + $results = []; + + $conn = $em->getConnection(); + $sql = 'SELECT vm.name AS vm_name, v.make, + v.model_year_from, v.model_year_to, + bm.name AS bm_name, bmodel.name AS bmodel_name, + bsize.name AS bsize_name + FROM vehicle_manufacturer vm, vehicle v, battery_vehicle bv, + battery b, battery_manufacturer bm, battery_model bmodel, + battery_size bsize + WHERE vm.id = v.manufacturer_id + AND v.id = bv.vehicle_id + AND bv.battery_id = b.id + AND b.manufacturer_id = bm.id + AND b.model_id = bmodel.id + AND b.size_id = bsize.id + ORDER BY vm.name, v.make'; + + $stmt = $conn->prepare($sql); + $stmt->execute(); + + $query_results = $stmt->fetchAll(); + + foreach($query_results as $row) + { + $results[] = [ + 'vehicle_manufacturer' => $row['vm_name'], + 'vehicle_make' => $row['make'], + 'vehicle_model_year_from' => $row['model_year_from'], + 'vehicle_model_year_to' => $row['model_year_to'], + 'battery_manufacturer' => $row['bm_name'], + 'battery_model' => $row['bmodel_name'], + 'battery_size' => $row['bsize_name'], + ]; + } + + + return $results; + } } diff --git a/templates/base.html.twig b/templates/base.html.twig index c6f1b9d5..cf350525 100644 --- a/templates/base.html.twig +++ b/templates/base.html.twig @@ -149,7 +149,7 @@
diff --git a/templates/report/vehicle-battery-compatibility/form.html.twig b/templates/report/vehicle-battery-compatibility/form.html.twig new file mode 100644 index 00000000..83dea44a --- /dev/null +++ b/templates/report/vehicle-battery-compatibility/form.html.twig @@ -0,0 +1,50 @@ +{% extends 'base.html.twig' %} + +{% block body %} + +