Add checking for battery conflicts in existing job orders. #197

This commit is contained in:
Korina Cordero 2019-04-02 10:22:17 +00:00
parent c720be1c2d
commit b0386c4758

View file

@ -277,16 +277,13 @@ class ReportController extends BaseController
{ {
$this->denyAccessUnlessGranted('report.battery.conflict', null, 'No access.'); $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 // get job order query builder
$job_qb = $this->getDoctrine() $job_qb = $this->getDoctrine()
->getRepository(JobOrder::class) ->getRepository(JobOrder::class)
->createQueryBuilder('jo'); ->createQueryBuilder('jo');
$em = $this->getDoctrine()->getManager();
// get dates // get dates
$raw_date_start = $req->request->get('date_start'); $raw_date_start = $req->request->get('date_start');
$raw_date_end = $req->request->get('date_end'); $raw_date_end = $req->request->get('date_end');
@ -294,9 +291,6 @@ class ReportController extends BaseController
$date_start = DateTime::createFromFormat('m/d/Y', $raw_date_start); $date_start = DateTime::createFromFormat('m/d/Y', $raw_date_start);
$date_end = DateTime::createFromFormat('m/d/Y', $raw_date_end); $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') $jo_query = $job_qb->where('jo.date_create >= :start')
->andWhere('jo.date_create <= :end') ->andWhere('jo.date_create <= :end')
@ -306,37 +300,86 @@ class ReportController extends BaseController
->setParameter('status', JOStatus::CANCELLED) ->setParameter('status', JOStatus::CANCELLED)
->getQuery(); ->getQuery();
// run queries // run queries
$batts = $batt_query->getResult();
$jos = $jo_query->getResult(); $jos = $jo_query->getResult();
$battcomp = []; $batteries = $em->getRepository(Battery::class)->findAll();
// get battery results and store in array
foreach ($batts as $batt)
{
$batt_id = $batt->getID();
$comp_vehicles = $batt->getVehicles(); // create compatibility matrix for battery and vehicle
// go through compatible vehicle list and add to array $comp_matrix = [];
foreach ($comp_vehicles as $vehicle) foreach ($batteries as $batt)
{
$vehicles = $batt->getVehicles();
foreach ($vehicles as $vehicle)
{ {
$battcomp[$batt_id] = [ $comp_matrix[$batt->getID()][$vehicle->getID()] = true;
'manufacturer' => $vehicle->getManufacturer(),
'make' => $vehicle->getMake(),
];
} }
} }
// get results // go through the job orders to find the conflicts
$results = [];
foreach ($jos as $jo) 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,
]);
} }
} }