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, + ]); } }