2742 lines
102 KiB
PHP
2742 lines
102 KiB
PHP
<?php
|
|
|
|
namespace App\Controller;
|
|
|
|
use App\Ramcar\JORejectionReason;
|
|
use App\Ramcar\ServiceType;
|
|
use App\Ramcar\JOStatus;
|
|
use App\Ramcar\InvalidPlateNumber;
|
|
use App\Ramcar\JOEventType;
|
|
use App\Ramcar\SMSStatus;
|
|
|
|
use App\Entity\JORejection;
|
|
use App\Entity\Battery;
|
|
use App\Entity\JobOrder;
|
|
use App\Entity\JOEvent;
|
|
use App\Entity\Warranty;
|
|
use App\Entity\CustomerVehicle;
|
|
use App\Entity\MobileSession;
|
|
use App\Entity\Customer;
|
|
use App\Entity\BatteryModel;
|
|
use App\Entity\BatterySize;
|
|
use App\Entity\SMSMessage;
|
|
use App\Entity\HubFilterLog;
|
|
|
|
use Doctrine\ORM\Query;
|
|
use Doctrine\ORM\QueryBuilder;
|
|
use Doctrine\ORM\EntityManagerInterface;
|
|
use Doctrine\DBAL\Connection;
|
|
use Doctrine\Common\Collections\ArrayCollection;
|
|
use Symfony\Component\HttpFoundation\Request;
|
|
use Symfony\Component\HttpFoundation\Response;
|
|
use Symfony\Component\HttpFoundation\StreamedResponse;
|
|
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 Catalyst\MenuBundle\Annotation\Menu;
|
|
|
|
use CrEOF\Spatial\PHP\Types\Geometry\Point;
|
|
use DateTime;
|
|
use PDO;
|
|
|
|
class ReportController extends Controller
|
|
{
|
|
const PREREGISTER_PREFIX = '9';
|
|
|
|
/**
|
|
* @Menu(selected="outlet_list")
|
|
*/
|
|
public function rejectSummaryForm()
|
|
{
|
|
$this->denyAccessUnlessGranted('report.reject', null, 'No access.');
|
|
|
|
return $this->render('report/rejection/summary_form.html.twig');
|
|
}
|
|
|
|
public function rejectSummarySubmit(Request $req)
|
|
{
|
|
$this->denyAccessUnlessGranted('report.reject', null, 'No access.');
|
|
|
|
// get query builder
|
|
$qb = $this->getDoctrine()
|
|
->getRepository(JORejection::class)
|
|
->createQueryBuilder('r');
|
|
|
|
// 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
|
|
$query = $qb->where('r.date_create >= :start')
|
|
->andWhere('r.date_create <= :end')
|
|
->setParameter('start', $date_start->format('Y-m-d') . ' 00:00:00')
|
|
->setParameter('end', $date_end->format('Y-m-d') . ' 23:59:59')
|
|
->getQuery();
|
|
|
|
|
|
// run query
|
|
$jors = $query->getResult();
|
|
|
|
// initialize counter
|
|
$counter = [];
|
|
|
|
// get results
|
|
$res = [];
|
|
foreach ($jors as $jor)
|
|
{
|
|
$jo = $jor->getJobOrder();
|
|
$hub = $jor->getHub();
|
|
$hub_id = $hub->getID();
|
|
$hub_name = $hub->getName() . ' - ' . $hub->getBranch();
|
|
|
|
$reason = $jor->getReason();
|
|
|
|
if (!isset($counter[$hub_id]))
|
|
$counter[$hub_id] = [
|
|
'reasons' => [],
|
|
'name' => $hub_name,
|
|
];
|
|
|
|
if (!isset($counter[$hub_id][$reason]))
|
|
{
|
|
$counter[$hub_id]['reasons'][$reason]['name'] = JORejectionReason::getName($reason);
|
|
$counter[$hub_id]['reasons'][$reason]['counter'] = 1;
|
|
}
|
|
else
|
|
{
|
|
$counter[$hub_id]['reasons'][$reason]['counter'] += 1;
|
|
}
|
|
|
|
$res[] = [
|
|
'jo_id' => $jo->getID(),
|
|
'jo_date_time' => $jo->getDateSchedule(),
|
|
'jor_date_create' => $jo->getDateCreate(),
|
|
'hub' => $hub->getName() . ' - ' . $hub->getBranch(),
|
|
'reason' => JORejectionReason::getName($jor->getReason()),
|
|
'contact' => $jor->getContactPerson(),
|
|
'remarks' => $jor->getRemarks(),
|
|
];
|
|
}
|
|
|
|
|
|
// response
|
|
$resp = new StreamedResponse();
|
|
$resp->setCallback(function() use ($counter) {
|
|
// csv output
|
|
$csv_handle = fopen('php://output', 'w+');
|
|
fputcsv($csv_handle, ['Enrollee', 'Reason', 'Count']);
|
|
foreach ($counter as $centry)
|
|
{
|
|
$first = true;
|
|
foreach ($centry['reasons'] as $creason)
|
|
{
|
|
// first line has hub name
|
|
if ($first)
|
|
{
|
|
fputcsv($csv_handle, [
|
|
$centry['name'],
|
|
$creason['name'],
|
|
$creason['counter'],
|
|
]);
|
|
$first = false;
|
|
}
|
|
else
|
|
{
|
|
fputcsv($csv_handle, [
|
|
'',
|
|
$creason['name'],
|
|
$creason['counter'],
|
|
]);
|
|
}
|
|
}
|
|
}
|
|
|
|
fclose($csv_handle);
|
|
});
|
|
|
|
$filename = 'reject_' . $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' => $res,
|
|
'counter' => $counter,
|
|
]);
|
|
*/
|
|
}
|
|
|
|
/**
|
|
* @Menu(selected="outlet_list")
|
|
*/
|
|
public function rejectDetailForm()
|
|
{
|
|
$this->denyAccessUnlessGranted('report.reject', null, 'No access.');
|
|
|
|
return $this->render('report/rejection/detail_form.html.twig');
|
|
}
|
|
|
|
public function rejectDetailSubmit(Request $req)
|
|
{
|
|
$this->denyAccessUnlessGranted('report.reject', null, 'No access.');
|
|
|
|
// get query builder
|
|
$qb = $this->getDoctrine()
|
|
->getRepository(JORejection::class)
|
|
->createQueryBuilder('r');
|
|
|
|
// 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
|
|
$query = $qb->where('r.date_create >= :start')
|
|
->andWhere('r.date_create <= :end')
|
|
->setParameter('start', $date_start->format('Y-m-d') . ' 00:00:00')
|
|
->setParameter('end', $date_end->format('Y-m-d') . ' 23:59:59')
|
|
->getQuery();
|
|
|
|
|
|
// run query
|
|
$jors = $query->getResult();
|
|
|
|
// initialize counter
|
|
$counter = [];
|
|
|
|
// get results
|
|
$res = [];
|
|
foreach ($jors as $jor)
|
|
{
|
|
$jo = $jor->getJobOrder();
|
|
$hub = $jor->getHub();
|
|
$hub_id = $hub->getID();
|
|
$hub_name = $hub->getName() . ' - ' . $hub->getBranch();
|
|
|
|
/*
|
|
// check if created by app
|
|
$create_user = $jo->getCreatedBy();
|
|
if ($create_user == null)
|
|
$create_user_text = 'Application';
|
|
else
|
|
$create_user_text = $create_user->getFullName();
|
|
*/
|
|
|
|
$reason = $jor->getReason();
|
|
|
|
$res[] = [
|
|
$jo->getID(),
|
|
$jo->getDateSchedule()->format('m/d/Y H:i'),
|
|
$jor->getDateCreate()->format('m/d/Y H:i'),
|
|
$hub->getName() . ' - ' . $hub->getBranch(),
|
|
JORejectionReason::getName($jor->getReason()),
|
|
$jor->getContactPerson(),
|
|
$jor->getRemarks(),
|
|
$jor->getUser()->getFullName(),
|
|
ServiceType::getName($jo->getServiceType()),
|
|
];
|
|
}
|
|
|
|
|
|
// response
|
|
$resp = new StreamedResponse();
|
|
$resp->setCallback(function() use ($res) {
|
|
// csv output
|
|
$csv_handle = fopen('php://output', 'w+');
|
|
fputcsv($csv_handle, [
|
|
'Order #',
|
|
'Order Date and Time',
|
|
'Date and Time Rejected',
|
|
'Enrollee',
|
|
'Reason',
|
|
'Contact Person',
|
|
'Remarks',
|
|
'Dispatched By',
|
|
'Type of Service',
|
|
]);
|
|
foreach ($res as $row)
|
|
{
|
|
fputcsv($csv_handle, $row);
|
|
}
|
|
|
|
fclose($csv_handle);
|
|
});
|
|
|
|
$filename = 'reject_' . $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' => $res,
|
|
'counter' => $counter,
|
|
]);
|
|
*/
|
|
}
|
|
|
|
/**
|
|
* @Menu(selected="outlet_list")
|
|
*/
|
|
public function batteryConflictForm()
|
|
{
|
|
$this->denyAccessUnlessGranted('report.battery.conflict', null, 'No access.');
|
|
|
|
return $this->render('report/battery/batt_conflict_form.html.twig');
|
|
}
|
|
|
|
public function batteryConflictSubmit(Request $req)
|
|
{
|
|
$this->denyAccessUnlessGranted('report.battery.conflict', null, 'No access.');
|
|
|
|
// 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');
|
|
|
|
$date_start = DateTime::createFromFormat('m/d/Y', $raw_date_start);
|
|
$date_end = DateTime::createFromFormat('m/d/Y', $raw_date_end);
|
|
|
|
// 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
|
|
$jos = $jo_query->getResult();
|
|
|
|
$batteries = $em->getRepository(Battery::class)->findAll();
|
|
|
|
// create compatibility matrix for battery and vehicle
|
|
$comp_matrix = [];
|
|
foreach ($batteries as $batt)
|
|
{
|
|
$vehicles = $batt->getVehicles();
|
|
foreach ($vehicles as $vehicle)
|
|
{
|
|
$comp_matrix[$batt->getID()][$vehicle->getID()] = true;
|
|
}
|
|
}
|
|
|
|
// go through the job orders to find the conflicts
|
|
$results = [];
|
|
foreach ($jos as $jo)
|
|
{
|
|
$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();
|
|
$vehicle_id = $jo->getCustomerVehicle()->getVehicle()->getID();
|
|
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[] = [
|
|
// '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()->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' => 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'
|
|
]);
|
|
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;
|
|
}
|
|
|
|
/**
|
|
* @Menu(selected="outlet_list")
|
|
*/
|
|
public function popappComparisonForm()
|
|
{
|
|
$this->denyAccessUnlessGranted('report.popapp.comparison', null, 'No access.');
|
|
$params['mode'] = 'form';
|
|
|
|
return $this->render('report/popapp/form.html.twig', $params);
|
|
}
|
|
|
|
/**
|
|
* @Menu(selected="outlet_list")
|
|
*/
|
|
/* public function popappComparisonSubmit(Request $req)
|
|
{
|
|
// retrieve temporary info for file
|
|
$file = $req->files->get('csv_file');
|
|
|
|
// process the csv file
|
|
$data = $this->processPopappFile($file);
|
|
|
|
// return response
|
|
//return $this->json([
|
|
// 'success' => true,
|
|
// 'data' => $data,
|
|
//]);
|
|
$params['mode'] = 'results';
|
|
$params['data'] = $data;
|
|
|
|
return $this->render('report/popapp/form.html.twig', $params);
|
|
} */
|
|
|
|
/**
|
|
* @Menu(selected="outlet_list")
|
|
*/
|
|
public function popappExportCSV(Request $req, EntityManagerInterface $em)
|
|
{
|
|
// retrieve temporary info for file
|
|
$file = $req->files->get('csv_file');
|
|
|
|
// process the csv file
|
|
$data = $this->processPopappFile($file, $em);
|
|
|
|
$resp = new StreamedResponse();
|
|
$resp->setCallback(function() use ($data) {
|
|
// csv output
|
|
$csv_handle = fopen('php://output', 'w+');
|
|
fputcsv($csv_handle, [
|
|
'Size/Model',
|
|
'SKU',
|
|
'Serial Number',
|
|
'Created Date',
|
|
'Branch Name',
|
|
'Branch Code',
|
|
'Customer ID',
|
|
'Customer Last Name',
|
|
'Customer First Name',
|
|
'Customer Mobile Number',
|
|
'Warranty Last Name',
|
|
'Warranty First Name',
|
|
'Plate Number',
|
|
'Warranty Create Date',
|
|
'Activation Status',
|
|
'Warranty Class',
|
|
'Has Mobile App?',
|
|
'Date Mobile App Downloaded',
|
|
'Mobile Number Using Mobile App',
|
|
]);
|
|
foreach ($data as $row)
|
|
{
|
|
fputcsv($csv_handle, $row);
|
|
}
|
|
|
|
fclose($csv_handle);
|
|
});
|
|
|
|
$filename = 'popapp_comparison_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;
|
|
|
|
}
|
|
|
|
/**
|
|
* @Menu(selected="outlet_list")
|
|
*/
|
|
public function mehCustomerForm()
|
|
{
|
|
$this->denyAccessUnlessGranted('report.meh.customer', null, 'No access.');
|
|
$params['mode'] = 'form';
|
|
|
|
return $this->render('report/meh/form.html.twig', $params);
|
|
}
|
|
|
|
/**
|
|
* @Menu(selected="outlet_list")
|
|
*/
|
|
public function mehCustomerExportCSV(Request $req, EntityManagerInterface $em)
|
|
{
|
|
$data = $this->getMEHCustomerData($em);
|
|
|
|
$resp = new StreamedResponse();
|
|
$resp->setCallback(function() use ($data) {
|
|
// csv output
|
|
$csv_handle = fopen('php://output', 'w+');
|
|
fputcsv($csv_handle, [
|
|
'Last Name',
|
|
'First Name',
|
|
'Mobile Number',
|
|
'Landline Number',
|
|
'Office Number',
|
|
'Fax Number',
|
|
'Plate Number',
|
|
'Date Mobile App Downloaded',
|
|
'Mobile Number Using Mobile App',
|
|
]);
|
|
foreach ($data as $row)
|
|
{
|
|
fputcsv($csv_handle, $row);
|
|
}
|
|
|
|
fclose($csv_handle);
|
|
});
|
|
|
|
$filename = 'resq_meh_customer_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;
|
|
}
|
|
|
|
/**
|
|
* @Menu(selected="outlet_list")
|
|
*/
|
|
public function warrantyClassForm()
|
|
{
|
|
$this->denyAccessUnlessGranted('report.warranty.class', null, 'No access.');
|
|
$params['mode'] = 'form';
|
|
|
|
return $this->render('report/warranty-class/form.html.twig', $params);
|
|
}
|
|
|
|
/**
|
|
* @Menu(selected="outlet_list")
|
|
*/
|
|
public function warrantyClassExportCSV(Request $req, EntityManagerInterface $em)
|
|
{
|
|
$data = $this->getWarrantyClassData($em);
|
|
|
|
$resp = new StreamedResponse();
|
|
$resp->setCallback(function() use ($data) {
|
|
// csv output
|
|
$csv_handle = fopen('php://output', 'w+');
|
|
fputcsv($csv_handle, [
|
|
'Customer Last Name',
|
|
'Customer First Name',
|
|
'Vehicle Manufacturer',
|
|
'Vehicle Make',
|
|
'Model Year',
|
|
'Vehicle Color',
|
|
'Warranty Serial',
|
|
'Warranty Class',
|
|
'Plate Number',
|
|
'Warranty Last Name',
|
|
'Warranty First Name',
|
|
'Warranty Mobile Number',
|
|
'Warranty Battery Model',
|
|
'Warranty Battery Size',
|
|
'Warranty SAP Battery',
|
|
'Warranty Status',
|
|
'Warranty Created',
|
|
'Warranty Purchased',
|
|
'Warranty Expiry Date',
|
|
'Warranty Claim Date',
|
|
'Warranty Claimed From',
|
|
'Warranty Privacy Policy',
|
|
'Is Warranty Activated?',
|
|
]);
|
|
foreach ($data as $row)
|
|
{
|
|
fputcsv($csv_handle, $row);
|
|
}
|
|
|
|
fclose($csv_handle);
|
|
});
|
|
|
|
$filename = 'warranty_class_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;
|
|
|
|
}
|
|
|
|
/**
|
|
* @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',
|
|
'Battery SAP Code',
|
|
]);
|
|
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;
|
|
}
|
|
|
|
/**
|
|
* @Menu(selected="outlet_list")
|
|
*/
|
|
public function warrantyDetailsForm()
|
|
{
|
|
$this->denyAccessUnlessGranted('report.warranty.details', null, 'No access.');
|
|
$params['mode'] = 'form';
|
|
|
|
return $this->render('report/warranty-details/form.html.twig', $params);
|
|
}
|
|
|
|
/**
|
|
* @Menu(selected="outlet_list")
|
|
*/
|
|
public function warrantyDetailsSubmit(Request $req, EntityManagerInterface $em)
|
|
{
|
|
$data = $this->getWarrantyDetailsData($req, $em);
|
|
|
|
$resp = new StreamedResponse();
|
|
$resp->setCallback(function() use ($data) {
|
|
// csv output
|
|
$csv_handle = fopen('php://output', 'w+');
|
|
fputcsv($csv_handle, [
|
|
'Customer ID',
|
|
'Customer First Name',
|
|
'Customer Last Name',
|
|
'Customer Is Confirmed?',
|
|
'Customer Classification',
|
|
'Customer Has Mobile App?',
|
|
'Customer Title',
|
|
'Customer Is Active?',
|
|
'Customer Mobile Phone',
|
|
'Customer Landline Phone',
|
|
'Customer Office Phone',
|
|
'Customer Fax Phone',
|
|
'Customer Email Address',
|
|
'Customer Notes',
|
|
'Customer Has Third Party Privacy Policy?',
|
|
'Customer Has Promo Privacy Policy?',
|
|
'Customer Is CSAT',
|
|
'Customer Mobile App Privacy Policy ID',
|
|
'Customer Third Party Policy ID',
|
|
'Customer Promo Privacy ID',
|
|
'Customer DPA Consent',
|
|
'Customer Date Created',
|
|
'Customer SMS Research Flag',
|
|
'Customer Email Research Flag',
|
|
'Customer Create Source',
|
|
'Vehicle ID',
|
|
'Vehicle Manufacturer ID',
|
|
'Vehicle Make',
|
|
'Vehicle Model Year From',
|
|
'Vehicle Model Year To',
|
|
'Vehicle Mobile App Flag',
|
|
'Warranty ID',
|
|
'Warranty Battery Model ID',
|
|
'Warranty Battery Size ID',
|
|
'Warranty Serial',
|
|
'Warranty Class',
|
|
'Warranty Plate Number',
|
|
'Warranty Status',
|
|
'Warranty Date Created',
|
|
'Warranty Date Purchased',
|
|
'Warranty Expiry Date',
|
|
'Warranty Date Claimed',
|
|
'Warranty SAP Battery ID',
|
|
'Warranty Claim ID',
|
|
'Warranty First Name',
|
|
'Warranty Last Name',
|
|
'Warranty Mobile Number',
|
|
'Warranty Is Activated?',
|
|
'Warranty Privacy Policy Number',
|
|
'Warranty Email Address',
|
|
'Warranty Vehicle ID',
|
|
'Warranty Customer ID',
|
|
'Warranty File Invoice',
|
|
'Warranty File Card',
|
|
'Warranty Vehicle Model Year',
|
|
'Warranty Odometer',
|
|
'Warranty Dealer Branch Code',
|
|
'Warranty Dealer Name',
|
|
'Warranty Dealer Address',
|
|
'Warranty Contact Number',
|
|
'Warranty Customer Address',
|
|
'Warranty Customer Date Purchase',
|
|
'Warranty Is Validated?',
|
|
'Warranty Province ID',
|
|
'Warranty Municipality ID',
|
|
'Warranty Create Source',
|
|
|
|
]);
|
|
foreach ($data as $row)
|
|
{
|
|
fputcsv($csv_handle, $row);
|
|
}
|
|
|
|
fclose($csv_handle);
|
|
});
|
|
|
|
$filename = 'warranty_details_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;
|
|
|
|
}
|
|
|
|
/**
|
|
* @Menu(selected="outlet_list")
|
|
*/
|
|
public function jobOrderDetailsForm()
|
|
{
|
|
$this->denyAccessUnlessGranted('report.jo.details', null, 'No access.');
|
|
|
|
return $this->render('report/jo-details/form.html.twig');
|
|
}
|
|
|
|
public function jobOrderDetailsSubmit(Request $req, EntityManagerInterface $em)
|
|
{
|
|
$data = $this->getJobOrderDetails($req, $em);
|
|
|
|
$resp = new StreamedResponse();
|
|
$resp->setCallback(function() use ($data) {
|
|
// csv output
|
|
$csv_handle = fopen('php://output', 'w+');
|
|
fputcsv($csv_handle, [
|
|
'Month',
|
|
'Scheduled Date and Time',
|
|
'Scheduled Date',
|
|
'Scheduled Time',
|
|
'Distributor', // hub
|
|
'Battery Facilitated By', // facilitated_hub
|
|
'Job Order Number',
|
|
'Service Type',
|
|
'Customer Name',
|
|
'Customer Mobile Number',
|
|
'Plate Number',
|
|
'SKU',
|
|
'Serial Number',
|
|
'Invoice/DR No.',
|
|
'Existing Battery',
|
|
'Rider Name',
|
|
'DPA',
|
|
'Created Date and Time',
|
|
'Date Created',
|
|
'Time Created',
|
|
'Date and Time Dispatched',
|
|
'Date Dispatched',
|
|
'Time Dispatched',
|
|
'Date and Time Assigned',
|
|
'Date Assigned',
|
|
'Time Assigned',
|
|
'Date and Time Accepted',
|
|
'Date Accepted',
|
|
'Time Accepted',
|
|
'Date and Time Rider Left Hub',
|
|
'Date Rider Left Hub',
|
|
'Time Rider Left Hub',
|
|
'Date and Time Rider Arrived Hub Pre-JO',
|
|
'Date Rider Arrived Hub Pre-JO',
|
|
'Time Rider Arrived Hub Pre-JO',
|
|
'Date and Time Rider Left Hub Pre-JO',
|
|
'Date Rider Left Hub Pre-JO',
|
|
'Time Rider Left Hub Pre-JO',
|
|
'Date and Time Arrived',
|
|
'Date Arrived',
|
|
'Time Arrived',
|
|
'Date and Time Rider Started Sales/Service',
|
|
'Date Rider Started Sales/Service',
|
|
'Time Rider Started Sales/Service',
|
|
'Date and Time Rider Ended Sales/Service',
|
|
'Date Rider Ended Sales/Service',
|
|
'Time Rider Ended Sales/Service',
|
|
'Date and Time Rider Arrived Hub Post-JO',
|
|
'Date Rider Arrived Hub Post-JO',
|
|
'Time Rider Arrived Hub Post-JO',
|
|
'Date and Time Rider Left Hub Post-JO',
|
|
'Date Rider Left Hub Post-JO',
|
|
'Time Rider Left Hub Post-JO',
|
|
'Date and Time Rider Arrived Hub',
|
|
'Date Rider Arrived Hub',
|
|
'Time Rider Arrived Hub',
|
|
'Created vs Arrival',
|
|
'Customer Latitude',
|
|
'Customer Longitude',
|
|
'Hub Latitude',
|
|
'Hub Longitude',
|
|
'Facilitated Hub Latitude',
|
|
'Facilitated Hub Longitude',
|
|
'Dispatcher',
|
|
'Agent (Created)',
|
|
'Date Create (Invoice)',
|
|
'Source',
|
|
'Status',
|
|
'Flag Advance',
|
|
]);
|
|
foreach ($data as $row)
|
|
{
|
|
fputcsv($csv_handle, $row);
|
|
}
|
|
|
|
fclose($csv_handle);
|
|
});
|
|
|
|
$filename = 'job_order_details_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;
|
|
}
|
|
|
|
/**
|
|
* @Menu(selected="outlet_list")
|
|
*/
|
|
public function jobOrderEventsForm()
|
|
{
|
|
$this->denyAccessUnlessGranted('report.jo_events', null, 'No access.');
|
|
|
|
return $this->render('report/jo-events/form.html.twig');
|
|
}
|
|
|
|
public function jobOrderEventsSubmit(Request $req, EntityManagerInterface $em)
|
|
{
|
|
$hub_events = $this->getJobOrderEvents($req, JOEventType::HUB_ASSIGN);
|
|
$arrive_events = $this->getJobOrderEvents($req, JOEventType::RIDER_ARRIVE);
|
|
$accept_events = $this->getJobOrderEvents($req, JOEventType::RIDER_ACCEPT);
|
|
$assign_events = $this->getJobOrderEvents($req, JOEventType::RIDER_ASSIGN);
|
|
$depart_hub_events = $this->getJobOrderEvents($req, JOEventType::RIDER_DEPART_HUB);
|
|
$arrive_hub_prejo_events = $this->getJobOrderEvents($req, JOEventType::RIDER_ARRIVE_HUB_PRE_JO);
|
|
$depart_hub_prejo_events = $this->getJobOrderEvents($req, JOEventType::RIDER_DEPART_HUB_PRE_JO);
|
|
$start_events = $this->getJobOrderEvents($req, JOEventType::RIDER_START);
|
|
$end_events = $this->getJobOrderEvents($req, JOEventType::RIDER_END);
|
|
$arrive_hub_postjo_events = $this->getJobOrderEvents($req, JOEventType::RIDER_ARRIVE_HUB_POST_JO);
|
|
$depart_hub_postjo_events = $this->getJobOrderEvents($req, JOEventType::RIDER_DEPART_HUB_POST_JO);
|
|
$arrive_hub_events = $this->getJobOrderEvents($req, JOEventType::RIDER_ARRIVE_HUB);
|
|
|
|
$blanks = [];
|
|
array_push($blanks, array("\t","\t","\t","\t"));
|
|
|
|
$data = array_merge($hub_events, $blanks, $assign_events, $blanks, $accept_events, $blanks, $depart_hub_events, $blanks,
|
|
$arrive_hub_prejo_events, $blanks, $depart_hub_prejo_events, $blanks, $arrive_events, $blanks, $start_events, $blanks,
|
|
$end_events, $blanks, $arrive_hub_postjo_events, $blanks, $depart_hub_postjo_events, $blanks, $arrive_hub_events);
|
|
|
|
$resp = new StreamedResponse();
|
|
$resp->setCallback(function() use ($data) {
|
|
// csv output
|
|
$csv_handle = fopen('php://output', 'w+');
|
|
fputcsv($csv_handle, [
|
|
'Job Order ID',
|
|
'Date and Time Created for JO',
|
|
'Date Created for JO',
|
|
'Time Created for JO',
|
|
'Service Type',
|
|
'Type ID',
|
|
|
|
]);
|
|
// write hub events
|
|
foreach ($data as $row)
|
|
{
|
|
fputcsv($csv_handle, $row);
|
|
}
|
|
|
|
fclose($csv_handle);
|
|
});
|
|
|
|
$filename = 'job_order_events_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;
|
|
}
|
|
|
|
/**
|
|
* @Menu(selected="outlet_list")
|
|
*/
|
|
public function smsMessagesForm()
|
|
{
|
|
$this->denyAccessUnlessGranted('report.sms_messages', null, 'No access.');
|
|
|
|
return $this->render('report/sms-messages/form.html.twig');
|
|
}
|
|
|
|
public function smsMessagesSubmit(Request $req, EntityManagerInterface $em)
|
|
{
|
|
$data = $this->getSMSMessagesDetails($req, $em);
|
|
|
|
$resp = new StreamedResponse();
|
|
$resp->setCallback(function() use ($data) {
|
|
// csv output
|
|
$csv_handle = fopen('php://output', 'w+');
|
|
fputcsv($csv_handle, [
|
|
'Date Create',
|
|
'Source',
|
|
'Source Alias',
|
|
'Destination',
|
|
'Message',
|
|
'Status',
|
|
'Reason Code',
|
|
]);
|
|
// write sms messages data
|
|
foreach ($data as $row)
|
|
{
|
|
fputcsv($csv_handle, $row);
|
|
}
|
|
|
|
fclose($csv_handle);
|
|
});
|
|
|
|
$filename = 'sms_messages_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;
|
|
|
|
}
|
|
|
|
/**
|
|
* @Menu(selected="outlet_list")
|
|
*/
|
|
public function jobOrderAutoAssignForm()
|
|
{
|
|
$this->denyAccessUnlessGranted('report.jo.auto_assign', null, 'No access.');
|
|
|
|
return $this->render('report/jo-auto-assign/form.html.twig');
|
|
}
|
|
|
|
public function jobOrderAutoAssignSubmit(Request $req, EntityManagerInterface $em)
|
|
{
|
|
// 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);
|
|
|
|
$data = $this->getAutoAssignedJODetails($req, $em);
|
|
|
|
$resp = new StreamedResponse();
|
|
$resp->setCallback(function() use ($data) {
|
|
// csv output
|
|
$csv_handle = fopen('php://output', 'w+');
|
|
fputcsv($csv_handle, [
|
|
'Job Order ID',
|
|
'Customer Name',
|
|
'Customer Mobile Number',
|
|
'Plate Number',
|
|
'Service Type',
|
|
'Date Created',
|
|
'Date Scheduled',
|
|
'Distributor', //hub
|
|
'Is Advanced Order?',
|
|
'Auto Assign Status',
|
|
'Status',
|
|
]);
|
|
|
|
foreach ($data as $row)
|
|
{
|
|
fputcsv($csv_handle, $row);
|
|
}
|
|
|
|
fclose($csv_handle);
|
|
});
|
|
|
|
$filename = 'auto_assigned_job_orders_' . $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;
|
|
|
|
}
|
|
|
|
/**
|
|
* @Menu(selected="outlet_list")
|
|
*/
|
|
public function jobOrderAdvanceOrderForm()
|
|
{
|
|
$this->denyAccessUnlessGranted('report.jo.advance_order', null, 'No access.');
|
|
|
|
return $this->render('report/jo-advance-order/form.html.twig');
|
|
}
|
|
|
|
public function jobOrderAdvanceOrderSubmit(Request $req, EntityManagerInterface $em)
|
|
{
|
|
// 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);
|
|
|
|
$data = $this->getAdvanceOrderJODetails($req, $em);
|
|
|
|
$resp = new StreamedResponse();
|
|
$resp->setCallback(function() use ($data) {
|
|
// csv output
|
|
$csv_handle = fopen('php://output', 'w+');
|
|
fputcsv($csv_handle, [
|
|
'Job Order ID',
|
|
'Customer Name',
|
|
'Customer Mobile Number',
|
|
'Plate Number',
|
|
'Service Type',
|
|
'Date Created',
|
|
'Date Scheduled',
|
|
'Distributor', //hub
|
|
'Auto Assign Status',
|
|
'Status',
|
|
]);
|
|
|
|
foreach ($data as $row)
|
|
{
|
|
fputcsv($csv_handle, $row);
|
|
}
|
|
|
|
fclose($csv_handle);
|
|
});
|
|
|
|
$filename = 'advance_order_job_orders_' . $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;
|
|
|
|
}
|
|
|
|
/**
|
|
* @Menu(selected="outlet_list")
|
|
*/
|
|
public function customerSourceForm()
|
|
{
|
|
$this->denyAccessUnlessGranted('report.customer.source', null, 'No access.');
|
|
|
|
return $this->render('report/customer-source/form.html.twig');
|
|
}
|
|
|
|
public function customerSourceSubmit(Request $req, EntityManagerInterface $em)
|
|
{
|
|
// 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);
|
|
|
|
$data = $this->getCustomerSourceDetails($req, $em);
|
|
|
|
$resp = new StreamedResponse();
|
|
$resp->setCallback(function() use ($data) {
|
|
// csv output
|
|
$csv_handle = fopen('php://output', 'w+');
|
|
fputcsv($csv_handle, [
|
|
'Customer ID',
|
|
'First Name',
|
|
'Last Name',
|
|
'Mobile Phone',
|
|
'Landline',
|
|
'Office Phone',
|
|
'Fax',
|
|
'Email Address',
|
|
'Vehicle Manufacturer',
|
|
'Vehicle Make',
|
|
'Model Year',
|
|
'Plate Number',
|
|
'Source',
|
|
'Date Created',
|
|
]);
|
|
|
|
foreach ($data as $row)
|
|
{
|
|
fputcsv($csv_handle, $row);
|
|
}
|
|
|
|
fclose($csv_handle);
|
|
});
|
|
|
|
$filename = 'customer_source_' . $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;
|
|
}
|
|
|
|
/**
|
|
* @Menu(selected="outlet_list")
|
|
*/
|
|
public function hubFilterForm()
|
|
{
|
|
$this->denyAccessUnlessGranted('report.hub.filter', null, 'No access.');
|
|
|
|
return $this->render('report/hub-filter/form.html.twig');
|
|
}
|
|
|
|
public function hubFilterSubmit(Request $req, EntityManagerInterface $em)
|
|
{
|
|
// 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);
|
|
|
|
$data = $this->getHubFilterData($req, $em, $raw_date_start, $raw_date_end);
|
|
|
|
$resp = new StreamedResponse();
|
|
$resp->setCallback(function() use ($data) {
|
|
// csv output
|
|
$csv_handle = fopen('php://output', 'w+');
|
|
fputcsv($csv_handle, [
|
|
'Filtered Hub ID',
|
|
'Hub Name',
|
|
'Job Order ID',
|
|
'Customer ID',
|
|
'Customer Last Name',
|
|
'Customer First Name',
|
|
'Customer Mobile Number',
|
|
'Date Created',
|
|
'Reason',
|
|
'Date of Rejection',
|
|
]);
|
|
|
|
foreach ($data as $row)
|
|
{
|
|
fputcsv($csv_handle, $row);
|
|
}
|
|
|
|
fclose($csv_handle);
|
|
});
|
|
|
|
$filename = 'hub_filter_' . $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;
|
|
|
|
}
|
|
|
|
/**
|
|
* @Menu(selected="outlet_list")
|
|
*/
|
|
public function joRaffleForm()
|
|
{
|
|
$this->denyAccessUnlessGranted('report.jo.raffle', null, 'No access.');
|
|
|
|
return $this->render('report/jo-raffle/form.html.twig');
|
|
}
|
|
|
|
public function joRaffleSubmit(Request $req, EntityManagerInterface $em)
|
|
{
|
|
// 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);
|
|
|
|
$data = $this->getJORaffleData($req, $em, $raw_date_start, $raw_date_end);
|
|
|
|
$resp = new StreamedResponse();
|
|
$resp->setCallback(function() use ($data) {
|
|
// csv output
|
|
$csv_handle = fopen('php://output', 'w+');
|
|
fputcsv($csv_handle, [
|
|
'Raffle Number',
|
|
'Serial Number',
|
|
'Product Name',
|
|
'Transaction Number', // JO ID
|
|
'Date',
|
|
'Outlet', // Hub
|
|
'Plate Number',
|
|
'Warranty Class',
|
|
'First Name',
|
|
'Last Name',
|
|
'Contact Number',
|
|
'Email',
|
|
]);
|
|
|
|
foreach ($data as $row)
|
|
{
|
|
fputcsv($csv_handle, $row);
|
|
}
|
|
|
|
fclose($csv_handle);
|
|
});
|
|
|
|
$filename = 'jo_raffle_' . $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;
|
|
}
|
|
|
|
protected function processPopappFile(UploadedFile $csv_file, EntityManagerInterface $em)
|
|
{
|
|
// attempt to open file
|
|
try
|
|
{
|
|
$fh = fopen($csv_file, "r");
|
|
}
|
|
catch (Exception $e)
|
|
{
|
|
throw new Exception('The file "' . $csv_file . '" could be read.');
|
|
}
|
|
|
|
// loop through the rows
|
|
$row_num = 0;
|
|
$results = [];
|
|
|
|
while(($fields = fgetcsv($fh)) !== false)
|
|
{
|
|
//error_log($row_num . ' ' . trim($fields[2]));
|
|
if ($row_num < 1)
|
|
{
|
|
$row_num++;
|
|
continue;
|
|
}
|
|
|
|
// pre-populate the result array
|
|
$results[] = [
|
|
'model_size' => trim($fields[0]),
|
|
'sku' => trim($fields[1]),
|
|
'serial' => trim($fields[2]),
|
|
'created_date' => trim($fields[3]),
|
|
'branch_name' => trim($fields[4]),
|
|
'branch_code' => trim($fields[5]),
|
|
'cust_id' => '',
|
|
'cust_lastname' => '',
|
|
'cust_firstname' => '',
|
|
'cust_mobile_number' => '',
|
|
'warr_lastname' => '',
|
|
'warr_firstname' => '',
|
|
'plate_num' => '',
|
|
'warr_date_create' => '',
|
|
'warr_activation_status' => '',
|
|
'warr_class' => '',
|
|
'has_mobile' => '',
|
|
'date_mobile' => '',
|
|
'mobile_number' => '',
|
|
];
|
|
}
|
|
|
|
foreach($results as $key => $data)
|
|
{
|
|
//error_log($results[$key]['model_size']);
|
|
|
|
// get the serial
|
|
$serial = $results[$key]['serial'];
|
|
|
|
// if serial is empty, move to next element
|
|
if (!empty($serial))
|
|
{
|
|
// get the warranty for serial
|
|
$warranties = $em->getRepository(Warranty::class)->findBy(['serial' => $serial]);
|
|
|
|
if (!empty($warranties))
|
|
{
|
|
foreach ($warranties as $warranty)
|
|
{
|
|
//error_log('found warranty for serial ' . $serial);
|
|
$plate_number = $warranty->getPlateNumber();
|
|
$isValid = InvalidPlateNumber::isInvalid($plate_number);
|
|
if ($isValid)
|
|
{
|
|
// get customer vehicles using plate number
|
|
$customer_vehicles = $em->getRepository(CustomerVehicle::class)->findBy(['plate_number' => $plate_number]);
|
|
|
|
// check if customer vehicle is empty
|
|
if (count($customer_vehicles) != 0)
|
|
{
|
|
//error_log('found customer vehicle for plate number ' . $plate_number);
|
|
$has_mobile = false;
|
|
$mobile_date = '';
|
|
$mobile_number = '';
|
|
|
|
// get the first customer vehicle, store as best_cv until we find one with a mobile session
|
|
$best_cv = current($customer_vehicles);
|
|
|
|
foreach($customer_vehicles as $cv)
|
|
{
|
|
// get mobile session of customer
|
|
//error_log($cv->getCustomer()->getLastName() . ' ' . $cv->getCustomer()->getFirstName());
|
|
$cust_id = $cv->getCustomer()->getID();
|
|
$mobile_session = $em->getRepository(MobileSession::class)
|
|
->findOneBy(['customer' => $cust_id], ['date_generated' => 'ASC']);
|
|
if ($mobile_session != null)
|
|
{
|
|
// get mobile data
|
|
//error_log('found mobile session for customer id ' . $cv->getCustomer()->getID());
|
|
$has_mobile = true;
|
|
$mobile_date = $mobile_session->getDateGenerated()->format("d M Y");
|
|
$mobile_number = $mobile_session->getPhoneNumber();
|
|
|
|
// set best_cv to this customer vehicle with mobile session
|
|
$best_cv = $cv;
|
|
}
|
|
}
|
|
// set the customer data in results
|
|
$results[$key]['cust_id'] = $best_cv->getCustomer()->getID();
|
|
$results[$key]['cust_lastname'] = $best_cv->getCustomer()->getLastName();
|
|
$results[$key]['cust_firstname'] = $best_cv->getCustomer()->getFirstName();
|
|
$results[$key]['cust_mobile_number'] = $best_cv->getCustomer()->getPhoneMobile();
|
|
$results[$key]['plate_num'] = $best_cv->getPlateNumber();
|
|
$results[$key]['has_mobile'] = ($has_mobile ? 'Yes' : 'No');
|
|
$results[$key]['date_mobile'] = $mobile_date;
|
|
$results[$key]['mobile_number'] = $mobile_number;
|
|
}
|
|
}
|
|
// set the warranty data in results
|
|
$results[$key]['warr_lastname'] = $warranty->getLastName();
|
|
$results[$key]['warr_firstname'] = $warranty->getFirstName();
|
|
$results[$key]['warr_date_create'] = $warranty->getDateCreate()->format("d M Y");
|
|
$results[$key]['warr_activation_status'] = ($warranty->isActivated() ? 'Active' : 'Inactive');
|
|
$results[$key]['warr_class'] = $warranty->getWarrantyClass();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return $results;
|
|
}
|
|
|
|
protected function getMEHCustomerData(EntityManagerInterface $em)
|
|
{
|
|
$results = [];
|
|
|
|
$conn = $em->getConnection();
|
|
$sql = 'SELECT c.id, c.last_name, c.first_name, c.phone_mobile, c.phone_landline,
|
|
c.phone_office, c.phone_fax,
|
|
cv.plate_number, jo.source
|
|
FROM job_order jo, customer_vehicle cv, customer c
|
|
WHERE c.id = cv.customer_id
|
|
AND jo.cvehicle_id = cv.id
|
|
AND c.policy_mobile_app_id IS NOT NULL
|
|
AND jo.source != :source';
|
|
|
|
$stmt = $conn->prepare($sql);
|
|
$stmt->execute(array('source' => 'mobile_app'));
|
|
|
|
$query_results = $stmt->fetchAll();
|
|
|
|
foreach($query_results as $row)
|
|
{
|
|
$mobile_date = '';
|
|
$mobile_number = '';
|
|
|
|
$mobile_session = $em->getRepository(MobileSession::class)
|
|
->findOneBy(['customer' => $row['id']], ['date_generated' => 'ASC']);
|
|
if ($mobile_session != null)
|
|
{
|
|
$mobile_date = $mobile_session->getDateGenerated()->format("d M Y");
|
|
$mobile_number = $mobile_session->getPhoneNumber();
|
|
}
|
|
|
|
$results[] = [
|
|
'last_name' => $row['last_name'],
|
|
'first_name' => $row['first_name'],
|
|
'cust_mobile_number' => $row['phone_mobile'],
|
|
'landline_number' => $row['phone_landline'],
|
|
'office_number' => $row['phone_office'],
|
|
'fax_number' => $row['phone_fax'],
|
|
'plate_number' => $row['plate_number'],
|
|
'date_mobile' => $mobile_date,
|
|
'mobile_number' => $mobile_number,
|
|
];
|
|
|
|
}
|
|
|
|
return $results;
|
|
}
|
|
|
|
protected function getWarrantyClassData(EntityManagerInterface $em)
|
|
{
|
|
$results = [];
|
|
|
|
// query preregistered ustomers using search term '%9'
|
|
$cust_query = $em->createQuery('select c from App\Entity\Customer c where c.phone_mobile like :search_mobile')
|
|
->setParameter('search_mobile', "%" . self::PREREGISTER_PREFIX);
|
|
$customers = $cust_query->iterate();
|
|
|
|
foreach($customers as $crow)
|
|
{
|
|
$cust = $crow[0];
|
|
//error_log('Processing customer ' . $cust->getID());
|
|
|
|
// get list of customer vehicles
|
|
$c_vehicles = $cust->getVehicles();
|
|
|
|
foreach($c_vehicles as $cv)
|
|
{
|
|
if (!empty($c_vehicles))
|
|
{
|
|
// find warranty for plate number
|
|
$clean_cv_plate = $this->cleanPlateNumber($cv->getPlateNumber());
|
|
|
|
$warranties = $em->getRepository(Warranty::class)->findBy(['plate_number' => $clean_cv_plate]);
|
|
|
|
foreach ($warranties as $warr)
|
|
{
|
|
//error_log('Found warranty for plate number ' . $warr->getPlateNumber());
|
|
|
|
// form the result row
|
|
$results[] = $this->formWarrantyClassResult($cust, $cv, $warr);
|
|
}
|
|
}
|
|
}
|
|
$em->clear();
|
|
|
|
}
|
|
|
|
return $results;
|
|
}
|
|
|
|
protected function cleanPlateNumber($plate)
|
|
{
|
|
// remove spaces and make upper case
|
|
return strtoupper(str_replace(' ', '', $plate));
|
|
}
|
|
|
|
protected function formWarrantyClassResult($cust, $cv, $warr)
|
|
{
|
|
$batt_model = '';
|
|
$batt_size = '';
|
|
$sap_batt = '';
|
|
$policy = '';
|
|
$date_purchased = '';
|
|
$date_expire = '';
|
|
$date_claim = '';
|
|
|
|
$create_date = $warr->getDateCreate();
|
|
$date_create = $create_date->format('d/M/y');
|
|
|
|
if ($warr->getDatePurchase() != null)
|
|
{
|
|
$p_date = $warr->getDatePurchase();
|
|
$date_purchased = $p_date->format('d/M/y');
|
|
}
|
|
if ($warr->getDateClaim() != null)
|
|
{
|
|
$c_date = $warr->getDateClaim();
|
|
$date_claim = $c_date->format('d/M/y');
|
|
}
|
|
if ($warr->getDateExpire() != null)
|
|
{
|
|
$e_date = $warr->getDateExpire();
|
|
$date_expire = $e_date->format('d/M/y');
|
|
}
|
|
|
|
if ($warr->getBatteryModel() != null)
|
|
{
|
|
$batt_model = $warr->getBatteryModel()->getName();
|
|
}
|
|
if ($warr->getBatterySize() != null)
|
|
{
|
|
$batt_size = $warr->getBatterySize()->getName();
|
|
}
|
|
if ($warr->getSAPBattery() != null)
|
|
{
|
|
$sap_batt = $warr->getSAPBattery()->getBrand()->getName();
|
|
}
|
|
if ($warr->getPrivacyPolicy() != null)
|
|
{
|
|
$policy = $warr->getPrivacyPolicy()->getName();
|
|
}
|
|
|
|
$data = [
|
|
'c_last_name' => $cust->getLastName(),
|
|
'c_first_name' => $cust->getFirstName(),
|
|
'manufacturer' => $cv->getVehicle()->getManufacturer()->getName(),
|
|
'make' => $cv->getVehicle()->getMake(),
|
|
'model_year' => $cv->getModelYear(),
|
|
'color' => $cv->getColor(),
|
|
'serial' => $warr->getSerial(),
|
|
'class' => $warr->getWarrantyClass(),
|
|
'plate_number' => $warr->getPlateNumber(),
|
|
'w_last_name' => $warr->getLastName(),
|
|
'w_first_name' => $warr->getFirstName(),
|
|
'w_mobile_num' => $warr->getMobileNumber(),
|
|
'w_batt_model' => $batt_model,
|
|
'w_batt_size' => $batt_size,
|
|
'w_sap_batt' => $sap_batt,
|
|
'w_status' => $warr->getStatus(),
|
|
'w_date_create' => $date_create,
|
|
'w_date_purchase' => $date_purchased,
|
|
'w_date_expire' => $date_expire,
|
|
'w_date_claim' => $date_claim,
|
|
'w_claimed_from' => $warr->getClaimedFrom(),
|
|
'w_privacy_policy' => $policy,
|
|
'w_activated' => ($warr->isActivated() ? 'Active' : 'Inactive'),
|
|
];
|
|
|
|
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,
|
|
b.sap_code
|
|
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'],
|
|
'battery_sap_code' => $row['sap_code'],
|
|
];
|
|
}
|
|
|
|
return $results;
|
|
}
|
|
|
|
protected function getWarrantyDetailsData(Request $req, EntityManagerInterface $em)
|
|
{
|
|
$bm_hash = $this->loadBatteryModels($em);
|
|
$bs_hash = $this->loadBatterySizes($em);
|
|
|
|
// 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);
|
|
$date_start->setTime(0,0);
|
|
$date_end->setTime(23,59);
|
|
|
|
// convert to string in the correct format so we can plug it in the query
|
|
$str_date_start = $date_start->format('Y-m-d H:i:s');
|
|
$str_date_end = $date_end->format('Y-m-d H:i:s');
|
|
|
|
$results = [];
|
|
|
|
$conn = $em->getConnection();
|
|
$sql = 'SELECT w.id AS w_id, w.serial, w.warranty_class, w.plate_number,
|
|
w.status, w.date_create as w_date_create, w.date_purchase, w.date_expire,
|
|
w.date_claim, w.sap_bty_id, w.claim_id, w.first_name,
|
|
w.last_name, w.mobile_number, w.flag_activated,
|
|
w.warranty_privacy_policy, w.bty_model_id, w.bty_size_id,
|
|
w.email as w_email, w.vehicle_id, w.customer_id, w.file_invoice,
|
|
w.file_warr_card, w.v_model_year, w.odometer, w.dealer_name,
|
|
w.dealer_address, w.dealer_branch_code, w.contact_num, w.cust_address,
|
|
w.date_purchase_cust, w.flag_validated, w.province_id,
|
|
w.municipality_id, w.create_source AS w_create_source, c.id AS c_id,
|
|
c.first_name AS c_fname, c.last_name AS c_lname, c.flag_confirmed,
|
|
c.customer_classification, c.flag_mobile_app, c.title, c.flag_active,
|
|
c.phone_mobile, c.phone_landline, c.phone_office, c.phone_fax,
|
|
c.email AS c_email, c.customer_notes, c.priv_third_party, c.priv_promo,
|
|
c.flag_csat, c.policy_mobile_app_id, c.policy_third_party_id,
|
|
c.policy_promo_id, c.flag_dpa_consent, c.date_create AS c_date_create,
|
|
c.flag_research_sms, c.flag_research_email, c.create_source AS c_create_source,
|
|
v.id AS v_id, v.manufacturer_id, v.make, v.model_year_from,
|
|
v.model_year_to, v.flag_mobile
|
|
FROM warranty w LEFT JOIN customer c ON w.customer_id = c.id
|
|
LEFT JOIN vehicle v ON w.vehicle_id = v.id
|
|
WHERE w.date_create >= :start_date
|
|
AND w.date_create <= :end_date';
|
|
|
|
$stmt = $conn->prepare($sql);
|
|
$stmt->execute(['start_date' => $str_date_start, 'end_date' => $str_date_end]);
|
|
|
|
$query_results = $stmt->fetchAll();
|
|
|
|
foreach ($query_results as $row)
|
|
{
|
|
// get battery model and size names
|
|
$bmodel_name = '';
|
|
$bm_id = $row['bty_model_id'];
|
|
if (!empty($bm_id))
|
|
{
|
|
if (isset($bm_hash[$bm_id]))
|
|
$bmodel_name = $bm_hash[$bm_id];
|
|
}
|
|
|
|
$bsize_name = '';
|
|
$bs_id = $row['bty_size_id'];
|
|
if (!empty($bs_id))
|
|
{
|
|
if (isset($bs_hash[$bs_id]))
|
|
$bsize_name = $bs_hash[$bs_id];
|
|
}
|
|
|
|
$results[] = [
|
|
'cust_id' => $row['c_id'],
|
|
'cust_first_name' => $row['c_fname'],
|
|
'cust_last_name' => $row['c_lname'],
|
|
'cust_flag_confirm' => $row['flag_confirmed'],
|
|
'cust_classification' => $row['customer_classification'],
|
|
'cust_flag_mobile_app' => $row['flag_mobile_app'],
|
|
'cust_title' => $row['title'],
|
|
'cust_flag_active' => $row['flag_active'],
|
|
'cust_phone_mobile' => $row['phone_mobile'],
|
|
'cust_phone_landline' => $row['phone_landline'],
|
|
'cust_phone_office' => $row['phone_office'],
|
|
'cust_phone_fax' => $row['phone_fax'],
|
|
'cust_email' => $row['c_email'],
|
|
'cust_notes' => $row['customer_notes'],
|
|
'cust_priv_third_party' => $row['priv_third_party'],
|
|
'cust_priv_promo' => $row['priv_promo'],
|
|
'cust_flag_csat' => $row['flag_csat'],
|
|
'cust_policy_mobile_app_id' => $row['policy_mobile_app_id'],
|
|
'cust_policy_third_party_id' => $row['policy_third_party_id'],
|
|
'cust_policy_promo_id' => $row['policy_promo_id'],
|
|
'cust_flag_dpa_consent' => $row['flag_dpa_consent'],
|
|
'cust_date_create' => $row['c_date_create'],
|
|
'cust_flag_research_sms' => $row['flag_research_sms'],
|
|
'cust_flag_research_email' => $row['flag_research_email'],
|
|
'cust_create_source' => $row['c_create_source'],
|
|
'v_id' => $row['v_id'],
|
|
'v_manufacturer_id' => $row['manufacturer_id'],
|
|
'v_make' => $row['make'],
|
|
'v_model_year_from' => $row['model_year_from'],
|
|
'v_model_year_to' => $row['model_year_to'],
|
|
'v.flag_mobile' => $row['flag_mobile'],
|
|
'warr_id' => $row['w_id'],
|
|
'warr_battery_model' => $bmodel_name,
|
|
'warr_battery_size' => $bsize_name,
|
|
'warr_serial' => $row['serial'],
|
|
'warr_class' => $row['warranty_class'],
|
|
'warr_plate_number' => $row['plate_number'],
|
|
'warr_status' => $row['status'],
|
|
'warr_date_create' => $row['w_date_create'],
|
|
'warr_date_purchase' => $row['date_purchase'],
|
|
'warr_date_expire' => $row['date_expire'],
|
|
'warr_date_claim' => $row['date_claim'],
|
|
'warr_sap_bty_id' => $row['sap_bty_id'],
|
|
'warr_claim_id' => $row['claim_id'],
|
|
'warr_first_name' => $row['first_name'],
|
|
'warr_last_name' => $row['last_name'],
|
|
'warr_mobile_number' => $row['mobile_number'],
|
|
'warr_flag_activated' => (boolean) $row['flag_activated'],
|
|
'warr_privacy_policy' => $row['warranty_privacy_policy'],
|
|
'warr_email' => $row['w_email'],
|
|
'warr_vehicle_id' =>$row['vehicle_id'],
|
|
'warr_customer_id' => $row['customer_id'],
|
|
'warr_file_invoice' => $row['file_invoice'],
|
|
'warr_file_warr_card' => $row['file_warr_card'],
|
|
'warr_v_model_year' => $row['v_model_year'],
|
|
'warr_odometer' => $row['odometer'],
|
|
'warr_dealer_branch_code' => $row['dealer_branch_code'],
|
|
'warr_dealer_name' => $row['dealer_name'],
|
|
'warr_dealer_address' => $row['dealer_address'],
|
|
'warr_contact_number' => $row['contact_num'],
|
|
'warr_customer_address' => $row['cust_address'],
|
|
'warr_customer_date_purchase' => $row['date_purchase_cust'],
|
|
'warr_flag_validated' => $row['flag_validated'],
|
|
'warr_province_id' => $row['province_id'],
|
|
'warr_municipality_id' => $row['municipality_id'],
|
|
'warr_create_source' => $row['w_create_source'],
|
|
];
|
|
}
|
|
|
|
return $results;
|
|
}
|
|
|
|
protected function loadBatteryModels(EntityManagerInterface $em)
|
|
{
|
|
$bmodel_hash = [];
|
|
|
|
$models = $em->getRepository(BatteryModel::class)->findAll();
|
|
foreach ($models as $model)
|
|
{
|
|
$bmodel_id = $model->getID();
|
|
$bmodel_hash[$bmodel_id] = $model->getName();
|
|
}
|
|
|
|
return $bmodel_hash;
|
|
}
|
|
|
|
protected function loadBatterySizes(EntityManagerInterface $em)
|
|
{
|
|
$bsize_hash = [];
|
|
|
|
$sizes = $em->getRepository(BatterySize::class)->findAll();
|
|
foreach ($sizes as $size)
|
|
{
|
|
$bsize_id = $size->getID();
|
|
$bsize_hash[$bsize_id] = $size->getName();
|
|
}
|
|
|
|
return $bsize_hash;
|
|
}
|
|
|
|
protected function getJobOrderDetails(Request $req, EntityManagerInterface $em)
|
|
{
|
|
// get query builder
|
|
$qb = $this->getDoctrine()
|
|
->getRepository(JobOrder::class)
|
|
->createQueryBuilder('r');
|
|
|
|
// 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
|
|
$query = $qb->where('r.date_create >= :start')
|
|
->andWhere('r.date_create <= :end')
|
|
->setParameter('start', $date_start->format('Y-m-d') . ' 00:00:00')
|
|
->setParameter('end', $date_end->format('Y-m-d') . ' 23:59:59')
|
|
->getQuery();
|
|
|
|
// run query
|
|
$jos = $query->getResult();
|
|
|
|
$result = [];
|
|
foreach($jos as $jo)
|
|
{
|
|
// get dispatcher if any
|
|
$dispatcher_name = '';
|
|
$dispatcher = $jo->getProcessedBy();
|
|
if ($dispatcher != null)
|
|
$dispatcher_name = $dispatcher->getFullName();
|
|
|
|
// get agent if any
|
|
$agent_name = '';
|
|
$agent = $jo->getCreatedBy();
|
|
if ($agent != null)
|
|
$agent_name = $agent->getFullName();
|
|
|
|
// get customer coordinates
|
|
$coord_long = $jo->getCoordinates()->getLongitude();
|
|
$coord_lat = $jo->getCoordinates()->getLatitude();
|
|
|
|
// get hub and hub coordinates, if any
|
|
$hub_name = '';
|
|
$hub_coord_long = '';
|
|
$hub_coord_lat = '';
|
|
$hub = $jo->getHub();
|
|
if ($hub != null)
|
|
{
|
|
$hub_name = $hub->getName();
|
|
$hub_coord_long = $hub->getCoordinates()->getLongitude();
|
|
$hub_coord_lat = $hub->getCoordinates()->getLatitude();
|
|
}
|
|
|
|
// get facilitated hub coordinates if any
|
|
$fac_hub_name = '';
|
|
$fac_hub_coord_long = '';
|
|
$fac_hub_coord_lat = '';
|
|
$fac_hub = $jo->getFacilitatedBy();
|
|
if ($fac_hub != null)
|
|
{
|
|
$fac_hub_name = $fac_hub->getName();
|
|
$fac_hub_coord_long = $fac_hub->getCoordinates()->getLongitude();
|
|
$fac_hub_coord_lat = $fac_hub->getCoordinates()->getLatitude();
|
|
}
|
|
|
|
// find date and time when JO was assigned a hub
|
|
$datetime_hub_assign_jo = '';
|
|
$date_hub_assign_jo = '';
|
|
$time_hub_assign_jo = '';
|
|
$hub_assign_event_type = JOEventType::HUB_ASSIGN;
|
|
$hub_assign_events = $em->getRepository(JOEvent::class)->findBy(['job_order' => $jo, 'type_id'=> $hub_assign_event_type], ['date_happen' => 'DESC']);
|
|
if ($hub_assign_events != null)
|
|
{
|
|
// TODO: what happens if JO was reassigned a hub multiple times?
|
|
// right now, this gets the last time hub was assigned.
|
|
foreach ($hub_assign_events as $hub_assign_event)
|
|
{
|
|
$datetime_hub_assign_jo = $hub_assign_event->getDateHappen()->format('d-M-Y H:i');
|
|
$date_hub_assign_jo = $hub_assign_event->getDateHappen()->format('d-M-Y');
|
|
$time_hub_assign_jo = $hub_assign_event->getDateHappen()->format('H:i');
|
|
}
|
|
}
|
|
|
|
// find date and time when JO was assigned a rider
|
|
$datetime_rider_assign_jo = '';
|
|
$date_rider_assign_jo = '';
|
|
$time_rider_assign_jo = '';
|
|
$rider_assign_event_type = JOEventType::RIDER_ASSIGN;
|
|
$rider_assign_events = $em->getRepository(JOEvent::class)->findBy(['job_order' => $jo, 'type_id'=> $rider_assign_event_type], ['date_happen' => 'DESC']);
|
|
if ($rider_assign_events != null)
|
|
{
|
|
foreach ($rider_assign_events as $rider_assign_event)
|
|
{
|
|
// TODO: what happens if JO was reassigned a rider multiple times?
|
|
// right now, this gets the last time rider was assigned.
|
|
$datetime_rider_assign_jo = $rider_assign_event->getDateHappen()->format('d-M-Y H:i');
|
|
$date_rider_assign_jo = $rider_assign_event->getDateHappen()->format('d-M-Y');
|
|
$time_rider_assign_jo = $rider_assign_event->getDateHappen()->format('H:i');
|
|
}
|
|
}
|
|
|
|
// find date and time when rider accepted the JO
|
|
$datetime_rider_accept_jo = '';
|
|
$date_rider_accept_jo = '';
|
|
$time_rider_accept_jo = '';
|
|
$rider_accept_event_type = JOEventType::RIDER_ACCEPT;
|
|
$rider_accept_events = $em->getRepository(JOEvent::class)->findBy(['job_order' => $jo, 'type_id'=> $rider_accept_event_type], ['date_happen' => 'DESC']);
|
|
if ($rider_accept_events != null)
|
|
{
|
|
foreach ($rider_accept_events as $rider_accept_event)
|
|
{
|
|
// TODO: what happens if JO was accepted by riders multiple times?
|
|
// right now, this gets the last time rider was accepted.
|
|
$datetime_rider_accept_jo = $rider_accept_event->getDateHappen()->format('d-M-Y H:i');
|
|
$date_rider_accept_jo = $rider_accept_event->getDateHappen()->format('d-M-Y');
|
|
$time_rider_accept_jo = $rider_accept_event->getDateHappen()->format('H:i');
|
|
}
|
|
}
|
|
|
|
// find date and time when rider leaves hub
|
|
$datetime_rider_depart_hub = '';
|
|
$date_rider_depart_hub = '';
|
|
$time_rider_depart_hub = '';
|
|
$rider_depart_hub_event_type = JOEventType::RIDER_DEPART_HUB;
|
|
$rider_depart_hub_events = $em->getRepository(JOEvent::class)->findBy(['job_order' => $jo, 'type_id'=> $rider_depart_hub_event_type], ['date_happen' => 'DESC']);
|
|
if ($rider_depart_hub_events != null)
|
|
{
|
|
foreach ($rider_depart_hub_events as $rider_depart_hub_event)
|
|
{
|
|
$datetime_rider_depart_hub = $rider_depart_hub_event->getDateHappen()->format('d-M-Y H:i');
|
|
$date_rider_depart_hub = $rider_depart_hub_event->getDateHappen()->format('d-M-Y');
|
|
$time_rider_depart_hub = $rider_depart_hub_event->getDateHappen()->format('H:i');
|
|
}
|
|
}
|
|
|
|
// find date and time when rider arrives at hub pre-jo
|
|
$datetime_rider_arrive_hub_pre_jo = '';
|
|
$date_rider_arrive_hub_pre_jo = '';
|
|
$time_rider_arrive_hub_pre_jo = '';
|
|
$rider_arrive_hub_pre_jo_event_type = JOEventType::RIDER_ARRIVE_HUB_PRE_JO;
|
|
$rider_arrive_hub_pre_jo_events = $em->getRepository(JOEvent::class)->findBy(['job_order' => $jo, 'type_id'=> $rider_arrive_hub_pre_jo_event_type], ['date_happen' => 'DESC']);
|
|
if ($rider_arrive_hub_pre_jo_events != null)
|
|
{
|
|
foreach ($rider_arrive_hub_pre_jo_events as $rider_arrive_hub_pre_jo_event)
|
|
{
|
|
$datetime_rider_arrive_hub_pre_jo = $rider_arrive_hub_pre_jo_event->getDateHappen()->format('d-M-Y H:i');
|
|
$date_rider_arrive_hub_pre_jo = $rider_arrive_hub_pre_jo_event->getDateHappen()->format('d-M-Y');
|
|
$time_rider_arrive_hub_pre_jo = $rider_arrive_hub_pre_jo_event->getDateHappen()->format('H:i');
|
|
}
|
|
}
|
|
|
|
// find date and time when rider leaves hub pre-jo
|
|
$datetime_rider_leave_hub_pre_jo = '';
|
|
$date_rider_leave_hub_pre_jo = '';
|
|
$time_rider_leave_hub_pre_jo = '';
|
|
$rider_leave_hub_pre_jo_event_type = JOEventType::RIDER_DEPART_HUB_PRE_JO;
|
|
$rider_leave_hub_pre_jo_events = $em->getRepository(JOEvent::class)->findBy(['job_order' => $jo, 'type_id'=> $rider_leave_hub_pre_jo_event_type], ['date_happen' => 'DESC']);
|
|
if ($rider_leave_hub_pre_jo_events != null)
|
|
{
|
|
foreach ($rider_leave_hub_pre_jo_events as $rider_leave_hub_pre_jo_event)
|
|
{
|
|
$datetime_rider_leave_hub_pre_jo = $rider_leave_hub_pre_jo_event->getDateHappen()->format('d-M-Y H:i');
|
|
$date_rider_leave_hub_pre_jo = $rider_leave_hub_pre_jo_event->getDateHappen()->format('d-M-Y');
|
|
$time_rider_leave_hub_pre_jo = $rider_leave_hub_pre_jo_event->getDateHappen()->format('H:i');
|
|
}
|
|
}
|
|
|
|
// find date and time when rider arrived at customer
|
|
$datetime_rider_arrive_jo = '';
|
|
$date_rider_arrive_jo = '';
|
|
$time_rider_arrive_jo = '';
|
|
$rider_arrive_event_type = JOEventType::RIDER_ARRIVE;
|
|
$dt_rider_arrive = null;
|
|
$rider_arrive_events = $em->getRepository(JOEvent::class)->findBy(['job_order' => $jo, 'type_id'=> $rider_arrive_event_type], ['date_happen' => 'DESC']);
|
|
if ($rider_arrive_events != null)
|
|
{
|
|
foreach ($rider_arrive_events as $rider_arrive_event)
|
|
{
|
|
$dt_rider_arrive = $rider_arrive_event->getDateHappen();
|
|
$datetime_rider_arrive_jo = $rider_arrive_event->getDateHappen()->format('d-M-Y H:i');
|
|
$date_rider_arrive_jo = $rider_arrive_event->getDateHappen()->format('d-M-Y');
|
|
$time_rider_arrive_jo = $rider_arrive_event->getDateHappen()->format('H:i');
|
|
}
|
|
}
|
|
|
|
// find date and time when rider started the job
|
|
$datetime_rider_start_jo = '';
|
|
$date_rider_start_jo = '';
|
|
$time_rider_start_jo = '';
|
|
$rider_start_event_type = JOEventType::RIDER_START;
|
|
$rider_start_events = $em->getRepository(JOEvent::class)->findBy(['job_order' => $jo, 'type_id'=> $rider_start_event_type], ['date_happen' => 'DESC']);
|
|
if ($rider_start_events != null)
|
|
{
|
|
foreach ($rider_start_events as $rider_start_event)
|
|
{
|
|
$datetime_rider_start_jo = $rider_start_event->getDateHappen()->format('d-M-Y H:i');
|
|
$date_rider_start_jo = $rider_start_event->getDateHappen()->format('d-M-Y');
|
|
$time_rider_start_jo = $rider_start_event->getDateHappen()->format('H:i');
|
|
}
|
|
}
|
|
|
|
// find date and time when rider finished the job
|
|
$datetime_rider_end_jo = '';
|
|
$date_rider_end_jo = '';
|
|
$time_rider_end_jo = '';
|
|
$rider_end_event_type = JOEventType::RIDER_END;
|
|
$rider_end_events = $em->getRepository(JOEvent::class)->findBy(['job_order' => $jo, 'type_id'=> $rider_end_event_type], ['date_happen' => 'DESC']);
|
|
if ($rider_end_events != null)
|
|
{
|
|
foreach ($rider_end_events as $rider_end_event)
|
|
{
|
|
$datetime_rider_end_jo = $rider_end_event->getDateHappen()->format('d-M-Y H:i');
|
|
$date_rider_end_jo = $rider_end_event->getDateHappen()->format('d-M-Y');
|
|
$time_rider_end_jo = $rider_end_event->getDateHappen()->format('H:i');
|
|
}
|
|
}
|
|
|
|
// find date and time when rider arrives at hub post-jo
|
|
$datetime_rider_arrive_hub_post_jo = '';
|
|
$date_rider_arrive_hub_post_jo = '';
|
|
$time_rider_arrive_hub_post_jo = '';
|
|
$rider_arrive_hub_post_jo_event_type = JOEventType::RIDER_ARRIVE_HUB_POST_JO;
|
|
$rider_arrive_hub_post_jo_events = $em->getRepository(JOEvent::class)->findBy(['job_order' => $jo, 'type_id'=> $rider_arrive_hub_post_jo_event_type], ['date_happen' => 'DESC']);
|
|
if ($rider_arrive_hub_post_jo_events != null)
|
|
{
|
|
foreach ($rider_arrive_hub_post_jo_events as $rider_arrive_hub_post_jo_event)
|
|
{
|
|
$datetime_rider_arrive_hub_post_jo = $rider_arrive_hub_post_jo_event->getDateHappen()->format('d-M-Y H:i');
|
|
$date_rider_arrive_hub_post_jo = $rider_arrive_hub_post_jo_event->getDateHappen()->format('d-M-Y');
|
|
$time_rider_arrive_hub_post_jo = $rider_arrive_hub_post_jo_event->getDateHappen()->format('H:i');
|
|
}
|
|
}
|
|
|
|
// find date and time when rider leaves hub post-jo
|
|
$datetime_rider_leave_hub_post_jo = '';
|
|
$date_rider_leave_hub_post_jo = '';
|
|
$time_rider_leave_hub_post_jo = '';
|
|
$rider_leave_hub_post_jo_event_type = JOEventType::RIDER_DEPART_HUB_POST_JO;
|
|
$rider_leave_hub_post_jo_events = $em->getRepository(JOEvent::class)->findBy(['job_order' => $jo, 'type_id'=> $rider_leave_hub_post_jo_event_type], ['date_happen' => 'DESC']);
|
|
if ($rider_leave_hub_post_jo_events != null)
|
|
{
|
|
foreach ($rider_leave_hub_post_jo_events as $rider_leave_hub_post_jo_event)
|
|
{
|
|
$datetime_rider_leave_hub_post_jo = $rider_leave_hub_post_jo_event->getDateHappen()->format('d-M-Y H:i');
|
|
$date_rider_leave_hub_post_jo = $rider_leave_hub_post_jo_event->getDateHappen()->format('d-M-Y');
|
|
$time_rider_leave_hub_post_jo = $rider_leave_hub_post_jo_event->getDateHappen()->format('H:i');
|
|
}
|
|
}
|
|
|
|
// find date and time when rider arrives at hub
|
|
$datetime_rider_arrive_hub = '';
|
|
$date_rider_arrive_hub = '';
|
|
$time_rider_arrive_hub = '';
|
|
$rider_arrive_hub_event_type = JOEventType::RIDER_ARRIVE_HUB;
|
|
$rider_arrive_hub_events = $em->getRepository(JOEvent::class)->findBy(['job_order' => $jo, 'type_id'=> $rider_arrive_hub_event_type], ['date_happen' => 'DESC']);
|
|
if ($rider_arrive_hub_events != null)
|
|
{
|
|
foreach ($rider_arrive_hub_events as $rider_arrive_hub_event)
|
|
{
|
|
$datetime_rider_arrive_hub = $rider_arrive_hub_event->getDateHappen()->format('d-M-Y H:i');
|
|
$date_rider_arrive_hub = $rider_arrive_hub_event->getDateHappen()->format('d-M-Y');
|
|
$time_rider_arrive_hub = $rider_arrive_hub_event->getDateHappen()->format('H:i');
|
|
}
|
|
}
|
|
|
|
// compute time difference between jo creation and rider arrival
|
|
$time_diff_create_arrive = '';
|
|
if ($dt_rider_arrive != null)
|
|
{
|
|
$jo_create_time = $jo->getDateCreate();
|
|
|
|
// get time difference
|
|
$interval = $dt_rider_arrive->diff($jo_create_time);
|
|
$time_diff_create_arrive = $interval->format('%h:%i');
|
|
}
|
|
|
|
// get invoice date create and item sku if any
|
|
$datetime_create_invoice = '';
|
|
$sku = '';
|
|
$invoice = $jo->getInvoice();
|
|
if ($invoice != null)
|
|
{
|
|
$invoice_create = $invoice->getDateCreate();
|
|
$datetime_create_invoice = $invoice_create->format('d-M-Y H:i');
|
|
|
|
// get item sku
|
|
$invoice_items = $invoice->getItems();
|
|
foreach ($invoice_items as $item)
|
|
{
|
|
$battery = $item->getBattery();
|
|
if ($battery != null)
|
|
$sku = $battery->getModel()->getName() . ' ' . $battery->getSize()->getName();
|
|
}
|
|
}
|
|
|
|
// get jo date create
|
|
$datetime_create_jo = '';
|
|
$date_create_jo = '';
|
|
$time_create_jo = '';
|
|
$jo_create = $jo->getDateCreate();
|
|
|
|
$datetime_create_jo = $jo_create->format('d-M-Y H:i');
|
|
$date_create_jo = $jo_create->format('d-M-Y');
|
|
$time_create_jo = $jo_create->format('H:i');
|
|
|
|
// get jo date schedule if any
|
|
$datetime_sked_jo = '';
|
|
$date_sked_jo = '';
|
|
$time_sked_jo = '';
|
|
$jo_date_scheduled = $jo->getDateSchedule();
|
|
if (empty($jo_date_scheduled))
|
|
{
|
|
// set to same date and time as date create of JO
|
|
$datetime_sked_jo = $datetime_create_jo;
|
|
$date_sked_jo = $date_create_jo;
|
|
$time_sked_jo = $time_create_jo;
|
|
}
|
|
else
|
|
{
|
|
$datetime_sked_jo = $jo_date_scheduled->format('d-M-Y H:i');
|
|
$date_sked_jo = $jo_date_scheduled->format('d-M-Y');
|
|
$time_sked_jo = $jo_date_scheduled->format('H:i');
|
|
}
|
|
|
|
// get month from date_create
|
|
$month = $jo_create->format('M');
|
|
|
|
// get rider if any
|
|
$rider_name = '';
|
|
$rider = $jo->getRider();
|
|
if ($rider != null)
|
|
$rider_name = $rider->getFullName();
|
|
|
|
// get customer information
|
|
$cust_name = '';
|
|
$cust_mobile_number = '';
|
|
$plate_number = '';
|
|
$dpa = 'No';
|
|
$existing_batt = '';
|
|
$serial = '';
|
|
|
|
$customer = $jo->getCustomer();
|
|
if ($customer != null)
|
|
{
|
|
$cust_name = $customer->getNameDisplay();
|
|
if ($customer->isDpaConsent())
|
|
$dpa = 'Yes';
|
|
|
|
// get mobile number from mobile session
|
|
// find latest generated mobile session for customer
|
|
$mobile_sessions = $em->getRepository(MobileSession::class)->findBy(['customer' => $customer], ['date_generated' => 'DESC']);
|
|
if ($mobile_sessions != null)
|
|
{
|
|
foreach($mobile_sessions as $mobile_session)
|
|
{
|
|
$cust_mobile_number = $mobile_session->getPhoneNumber();
|
|
}
|
|
}
|
|
}
|
|
|
|
// get customer vehicle
|
|
$cust_vehicle = $jo->getCustomerVehicle();
|
|
if ($cust_vehicle != null)
|
|
{
|
|
$plate_number = $cust_vehicle->getPlateNumber();
|
|
$curr_batt = $cust_vehicle->getCurrentBattery();
|
|
if ($curr_batt != null)
|
|
{
|
|
$existing_batt = $curr_batt->getModel()->getName() . ' ' . $curr_batt->getSize()->getName();
|
|
$serial = $cust_vehicle->getWarrantyCode();
|
|
}
|
|
}
|
|
|
|
$result[] = [
|
|
$month,
|
|
$datetime_sked_jo,
|
|
$date_sked_jo,
|
|
$time_sked_jo,
|
|
$hub_name,
|
|
$fac_hub_name,
|
|
$jo->getID(),
|
|
$jo->getServiceType(),
|
|
$cust_name,
|
|
$cust_mobile_number,
|
|
$plate_number,
|
|
$sku,
|
|
$serial,
|
|
$jo->getORName(),
|
|
$existing_batt,
|
|
$rider_name,
|
|
$dpa,
|
|
$datetime_create_jo,
|
|
$date_create_jo,
|
|
$time_create_jo,
|
|
$datetime_hub_assign_jo,
|
|
$date_hub_assign_jo,
|
|
$time_hub_assign_jo,
|
|
$datetime_rider_assign_jo,
|
|
$date_rider_assign_jo,
|
|
$time_rider_assign_jo,
|
|
$datetime_rider_accept_jo,
|
|
$date_rider_accept_jo,
|
|
$time_rider_accept_jo,
|
|
$datetime_rider_depart_hub,
|
|
$date_rider_depart_hub,
|
|
$time_rider_depart_hub,
|
|
$datetime_rider_arrive_hub_pre_jo,
|
|
$date_rider_arrive_hub_pre_jo,
|
|
$time_rider_arrive_hub_pre_jo,
|
|
$datetime_rider_leave_hub_pre_jo,
|
|
$date_rider_leave_hub_pre_jo,
|
|
$time_rider_leave_hub_pre_jo,
|
|
$datetime_rider_arrive_jo,
|
|
$date_rider_arrive_jo,
|
|
$time_rider_arrive_jo,
|
|
$datetime_rider_start_jo,
|
|
$date_rider_start_jo,
|
|
$time_rider_start_jo,
|
|
$datetime_rider_end_jo,
|
|
$date_rider_end_jo,
|
|
$time_rider_end_jo,
|
|
$datetime_rider_arrive_hub_post_jo,
|
|
$date_rider_arrive_hub_post_jo,
|
|
$time_rider_arrive_hub_post_jo,
|
|
$datetime_rider_leave_hub_post_jo,
|
|
$date_rider_leave_hub_post_jo,
|
|
$time_rider_leave_hub_post_jo,
|
|
$datetime_rider_arrive_hub,
|
|
$date_rider_arrive_hub,
|
|
$time_rider_arrive_hub,
|
|
$time_diff_create_arrive,
|
|
$coord_lat,
|
|
$coord_long,
|
|
$hub_coord_lat,
|
|
$hub_coord_long,
|
|
$fac_hub_coord_lat,
|
|
$fac_hub_coord_long,
|
|
$dispatcher_name,
|
|
$agent_name,
|
|
$datetime_create_invoice,
|
|
$jo->getSource(),
|
|
$jo->getStatus(),
|
|
$jo->isAdvanceOrder() ? 'Yes' : 'No'
|
|
];
|
|
}
|
|
|
|
return $result;
|
|
}
|
|
|
|
protected function getJobOrderEvents(Request $req, $event_type)
|
|
{
|
|
// get query builder
|
|
$qb = $this->getDoctrine()
|
|
->getRepository(JOEvent::class)
|
|
->createQueryBuilder('r');
|
|
|
|
// 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
|
|
$query = $qb->where('r.date_create >= :start')
|
|
->andWhere('r.date_create <= :end')
|
|
->andWhere('r.type_id = :event_type')
|
|
->setParameter('start', $date_start->format('Y-m-d') . ' 00:00:00')
|
|
->setParameter('end', $date_end->format('Y-m-d') . ' 23:59:59')
|
|
->setParameter('event_type', $event_type)
|
|
->getQuery();
|
|
|
|
// run query
|
|
$jo_events = $query->getResult();
|
|
|
|
$result = [];
|
|
foreach ($jo_events as $jo_event)
|
|
{
|
|
$datetime_jo_create = '';
|
|
$date_jo_create = '';
|
|
$time_jo_create = '';
|
|
|
|
$jo = $jo_event->getJobOrder();
|
|
$jo_date_create = $jo->getDateCreate();
|
|
$datetime_jo_create = $jo_date_create->format('m-d-Y H:i');
|
|
$date_jo_create = $jo_date_create->format('m-d-Y');
|
|
$time_jo_create = $jo_date_create->format('H:i');
|
|
|
|
$result[] = [
|
|
$jo->getID(),
|
|
$datetime_jo_create,
|
|
$date_jo_create,
|
|
$time_jo_create,
|
|
$jo->getServiceType(),
|
|
$jo_event->getTypeID(),
|
|
];
|
|
}
|
|
|
|
return $result;
|
|
}
|
|
|
|
protected function getSMSMessagesDetails(Request $req, EntityManagerInterface $em)
|
|
{
|
|
// get query builder
|
|
$qb = $this->getDoctrine()
|
|
->getRepository(SMSMessage::class)
|
|
->createQueryBuilder('r');
|
|
|
|
// 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
|
|
$query = $qb->where('r.date_create >= :start')
|
|
->andWhere('r.date_create <= :end')
|
|
->setParameter('start', $date_start->format('Y-m-d') . ' 00:00:00')
|
|
->setParameter('end', $date_end->format('Y-m-d') . ' 23:59:59')
|
|
->getQuery();
|
|
|
|
// run query
|
|
$sms_messages = $query->getResult();
|
|
|
|
$result = [];
|
|
foreach($sms_messages as $sms_message)
|
|
{
|
|
$datetime_create = $sms_message->getDateCreate();
|
|
$date_create = $datetime_create->format('M-d-Y H:i');
|
|
|
|
$result[] = [
|
|
$date_create,
|
|
$sms_message->getFrom(),
|
|
$sms_message->getFromAlias(),
|
|
$sms_message->getTo(),
|
|
$sms_message->getMessage(),
|
|
$sms_message->getStatus(),
|
|
$sms_message->getReasonCode(),
|
|
];
|
|
}
|
|
|
|
return $result;
|
|
}
|
|
|
|
protected function getAutoAssignedJODetails(Request $req, EntityManagerInterface $em)
|
|
{
|
|
// get query builder
|
|
$qb = $this->getDoctrine()
|
|
->getRepository(JobOrder::class)
|
|
->createQueryBuilder('r');
|
|
|
|
// 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
|
|
$query = $qb->where('r.date_create >= :start')
|
|
->andWhere('r.date_create <= :end')
|
|
->andWhere('r.status_autoassign IS NOT NULL')
|
|
->setParameter('start', $date_start->format('Y-m-d') . ' 00:00:00')
|
|
->setParameter('end', $date_end->format('Y-m-d') . ' 23:59:59')
|
|
->getQuery();
|
|
|
|
// run query
|
|
$jos = $query->getResult();
|
|
|
|
$result = [];
|
|
foreach($jos as $jo)
|
|
{
|
|
// get customer information
|
|
$cust_name = '';
|
|
$cust_mobile_number = '';
|
|
$plate_number = '';
|
|
|
|
$customer = $jo->getCustomer();
|
|
if ($customer != null)
|
|
{
|
|
$cust_name = $customer->getNameDisplay();
|
|
|
|
// get mobile number from mobile session
|
|
// find latest generated mobile session for customer
|
|
$mobile_sessions = $em->getRepository(MobileSession::class)->findBy(['customer' => $customer], ['date_generated' => 'DESC']);
|
|
if ($mobile_sessions != null)
|
|
{
|
|
foreach($mobile_sessions as $mobile_session)
|
|
{
|
|
$cust_mobile_number = $mobile_session->getPhoneNumber();
|
|
}
|
|
}
|
|
}
|
|
|
|
// get customer vehicle
|
|
$cust_vehicle = $jo->getCustomerVehicle();
|
|
if ($cust_vehicle != null)
|
|
$plate_number = $cust_vehicle->getPlateNumber();
|
|
|
|
// get hub name
|
|
$hub_name = '';
|
|
if ($jo->getHub() != null)
|
|
$hub_name = $jo->getHub()->getName();
|
|
|
|
// get jo date create
|
|
$datetime_create_jo = '';
|
|
$jo_create = $jo->getDateCreate();
|
|
|
|
$datetime_create_jo = $jo_create->format('d-M-Y H:i');
|
|
|
|
// get jo date schedule if any
|
|
$datetime_sked_jo = '';
|
|
$jo_date_scheduled = $jo->getDateSchedule();
|
|
if (empty($jo_date_scheduled))
|
|
{
|
|
// set to same date and time as date create of JO
|
|
$datetime_sked_jo = $datetime_create_jo;
|
|
}
|
|
else
|
|
$datetime_sked_jo = $jo_date_scheduled->format('d-M-Y H:i');
|
|
|
|
$result[] = [
|
|
$jo->getID(),
|
|
$cust_name,
|
|
$cust_mobile_number,
|
|
$plate_number,
|
|
$jo->getServiceType(),
|
|
$datetime_create_jo,
|
|
$datetime_sked_jo,
|
|
$hub_name,
|
|
$jo->isAdvanceOrder() ? 'Yes' : 'No',
|
|
$jo->getStatusAutoAssign(),
|
|
$jo->getStatus(),
|
|
];
|
|
|
|
}
|
|
|
|
return $result;
|
|
}
|
|
|
|
protected function getAdvanceOrderJODetails(Request $req, EntityManagerInterface $em)
|
|
{
|
|
// get query builder
|
|
$qb = $this->getDoctrine()
|
|
->getRepository(JobOrder::class)
|
|
->createQueryBuilder('r');
|
|
|
|
// 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
|
|
$query = $qb->where('r.date_create >= :start')
|
|
->andWhere('r.date_create <= :end')
|
|
->andWhere('r.flag_advance = :flag_advance')
|
|
->setParameter('start', $date_start->format('Y-m-d') . ' 00:00:00')
|
|
->setParameter('end', $date_end->format('Y-m-d') . ' 23:59:59')
|
|
->setParameter('flag_advance', true)
|
|
->getQuery();
|
|
|
|
// run query
|
|
$jos = $query->getResult();
|
|
|
|
$result = [];
|
|
foreach($jos as $jo)
|
|
{
|
|
// get customer information
|
|
$cust_name = '';
|
|
$cust_mobile_number = '';
|
|
$plate_number = '';
|
|
|
|
$customer = $jo->getCustomer();
|
|
if ($customer != null)
|
|
{
|
|
$cust_name = $customer->getNameDisplay();
|
|
|
|
// get mobile number from mobile session
|
|
// find latest generated mobile session for customer
|
|
$mobile_sessions = $em->getRepository(MobileSession::class)->findBy(['customer' => $customer], ['date_generated' => 'DESC']);
|
|
if ($mobile_sessions != null)
|
|
{
|
|
foreach($mobile_sessions as $mobile_session)
|
|
{
|
|
$cust_mobile_number = $mobile_session->getPhoneNumber();
|
|
}
|
|
}
|
|
}
|
|
|
|
// get customer vehicle
|
|
$cust_vehicle = $jo->getCustomerVehicle();
|
|
if ($cust_vehicle != null)
|
|
$plate_number = $cust_vehicle->getPlateNumber();
|
|
|
|
// get hub name
|
|
$hub_name = '';
|
|
if ($jo->getHub() != null)
|
|
$hub_name = $jo->getHub()->getName();
|
|
|
|
// get jo date create
|
|
$datetime_create_jo = '';
|
|
$jo_create = $jo->getDateCreate();
|
|
|
|
$datetime_create_jo = $jo_create->format('d-M-Y H:i');
|
|
|
|
// get jo date schedule if any
|
|
$datetime_sked_jo = '';
|
|
$jo_date_scheduled = $jo->getDateSchedule();
|
|
if (empty($jo_date_scheduled))
|
|
{
|
|
// set to same date and time as date create of JO
|
|
$datetime_sked_jo = $datetime_create_jo;
|
|
}
|
|
else
|
|
$datetime_sked_jo = $jo_date_scheduled->format('d-M-Y H:i');
|
|
|
|
$result[] = [
|
|
$jo->getID(),
|
|
$cust_name,
|
|
$cust_mobile_number,
|
|
$plate_number,
|
|
$jo->getServiceType(),
|
|
$datetime_create_jo,
|
|
$datetime_sked_jo,
|
|
$hub_name,
|
|
$jo->getStatusAutoAssign(),
|
|
$jo->getStatus(),
|
|
];
|
|
|
|
}
|
|
|
|
return $result;
|
|
}
|
|
|
|
protected function getCustomerSourceDetails(Request $req, EntityManagerInterface $em)
|
|
{
|
|
// 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);
|
|
|
|
// change to this format: Y-m-d H:i:s
|
|
$new_date_start = $date_start->format('Y-m-d H:i:s');
|
|
$new_date_end = $date_end->format('Y-m-d H:i:s');
|
|
|
|
// get all mobile user customer id hash
|
|
$resq_cust_ids = $this->getRESQCustomerIDs($em);
|
|
|
|
// pdo connection
|
|
$db = $em->getConnection();
|
|
|
|
// get all customers
|
|
$sql = 'select c.id, c.first_name, c.last_name, c.phone_mobile, c.phone_landline, c.phone_office, c.phone_fax, c.email, c.flag_mobile_app, vm.name, v.make, cv.model_year, cv.plate_number, c.date_create from customer c, customer_vehicle cv, vehicle v, vehicle_manufacturer vm where c.date_create >= :date_start and c.date_create <= :date_end and c.id = cv.customer_id and cv.vehicle_id = v.id and v.manufacturer_id = vm.id';
|
|
$stmt = $db->prepare($sql);
|
|
$stmt->execute([
|
|
'date_start' => $new_date_start,
|
|
'date_end' => $new_date_end,
|
|
]);
|
|
|
|
$result = [];
|
|
// go through rows
|
|
while ($row = $stmt->fetch(PDO::FETCH_NUM))
|
|
{
|
|
// TODO: find customer source
|
|
// NOTE: flag_mobile_app is 0 for some reason
|
|
// customer source
|
|
if (isset($resq_cust_ids[$row[0]]))
|
|
$source = 'resq';
|
|
else
|
|
$source = 'crm / owr';
|
|
|
|
$result[] = [
|
|
$row[0], // id
|
|
$row[1], // first name
|
|
$row[2], // last name
|
|
$row[3], // phone - mobile
|
|
$row[4], // phone - landline
|
|
$row[5], // phone - office
|
|
$row[6], // phone - fax
|
|
$row[7], // email
|
|
$row[9], // vehicle manufacturer
|
|
$row[10], // vehicle make
|
|
$row[11], // vehicle model
|
|
$row[12], // plate number
|
|
$source, // customer source
|
|
$row[13],
|
|
];
|
|
}
|
|
|
|
return $result;
|
|
}
|
|
|
|
protected function getHubFilterData($req, $em, $raw_date_start, $raw_date_end)
|
|
{
|
|
$date_start = DateTime::createFromFormat('m/d/Y', $raw_date_start);
|
|
$date_end = DateTime::createFromFormat('m/d/Y', $raw_date_end);
|
|
|
|
// change to this format: Y-m-d H:i:s
|
|
$new_date_start = $date_start->format('Y-m-d H:i:s');
|
|
$new_date_end = $date_end->format('Y-m-d H:i:s');
|
|
|
|
// pdo connection. Table gets big very fast.
|
|
$db = $em->getConnection();
|
|
|
|
// get hub filter logs
|
|
$sql = 'SELECT hf.hub_filtered_id, h.name, hf.jo_id, hf.customer_id, c.last_name, c.first_name, c.phone_mobile, hf.date_create, hf.filter_type_id FROM hub_filter_log hf, hub h, customer c WHERE hf.hub_filtered_id=h.id AND c.id=hf.customer_id AND hf.date_create >= :date_start AND hf.date_create <= :date_end ORDER BY hf.date_create';
|
|
$stmt = $db->prepare($sql);
|
|
$stmt->execute([
|
|
'date_start' => $new_date_start,
|
|
'date_end' => $new_date_end,
|
|
]);
|
|
|
|
$result = [];
|
|
// go through rows
|
|
while ($row = $stmt->fetch(PDO::FETCH_NUM))
|
|
{
|
|
$result[] = [
|
|
$row[0], // filtered hub id
|
|
$row[1], // hub name
|
|
$row[2], // job order id
|
|
$row[3], // customer id
|
|
$row[4], // customer last name
|
|
$row[5], // customer first name
|
|
$row[6], // customer mobile
|
|
$row[7], // date create
|
|
$row[8], // filter type id
|
|
$row[7], // date of rejection
|
|
];
|
|
}
|
|
|
|
return $result;
|
|
}
|
|
|
|
protected function getRESQCustomerIDs(EntityManagerInterface $em)
|
|
{
|
|
// pdo connection
|
|
$db = $em->getConnection();
|
|
|
|
// get all customer ids of all mobile sessions
|
|
$sql = 'select distinct customer_id from mobile_session';
|
|
$stmt = $db->prepare($sql);
|
|
$stmt->execute();
|
|
$res = $stmt->fetchAll();
|
|
|
|
$cust_ids = [];
|
|
|
|
foreach ($res as $cust)
|
|
{
|
|
$cust_ids[$cust['customer_id']] = $cust['customer_id'];
|
|
}
|
|
|
|
return $cust_ids;
|
|
}
|
|
|
|
protected function getJORaffleData($req, $em, $raw_date_start, $raw_date_end)
|
|
{
|
|
$date_start = DateTime::createFromFormat('m/d/Y', $raw_date_start);
|
|
$date_end = DateTime::createFromFormat('m/d/Y', $raw_date_end);
|
|
|
|
// change to this format: Y-m-d H:i:s
|
|
$new_date_start = $date_start->format('Y-m-d H:i:s') . ' 00:00:00';
|
|
$new_date_end = $date_end->format('Y-m-d H:i:s') . ' 23:59:59';
|
|
|
|
$db = $em->getConnection();
|
|
|
|
// get JOs that have been scheduled within the date range and are fulfilled
|
|
// and service type is battery sales
|
|
$jo_sql = 'SELECT jo.id AS jo_id, cv.warranty_code AS serial, jo.date_schedule AS date_schedule,
|
|
h.name AS hub_name, cv.plate_number AS plate_number, jo.warranty_class AS warranty_class,
|
|
c.first_name AS first_name, c.last_name AS last_name, c.phone_mobile AS mobile_number,
|
|
c.email AS email
|
|
FROM job_order jo, customer_vehicle cv, hub h, customer c
|
|
WHERE jo.cvehicle_id = cv.id
|
|
AND jo.customer_id = c.id
|
|
AND jo.hub_id = h.id
|
|
AND jo.status = :fulfilled
|
|
AND jo.service_type = :battery_sales
|
|
AND jo.date_schedule >= :date_start AND jo.date_schedule <= :date_end';
|
|
$jo_stmt = $db->prepare($jo_sql);
|
|
$jo_stmt->bindValue('fulfilled', JOStatus::FULFILLED);
|
|
$jo_stmt->bindValue('battery_sales', ServiceType::BATTERY_REPLACEMENT_NEW);
|
|
$jo_stmt->bindValue('date_start', $new_date_start);
|
|
$jo_stmt->bindValue('date_end', $new_date_end);
|
|
|
|
$jo_result = $jo_stmt->executeQuery();
|
|
|
|
$jo_data = [];
|
|
// go through rows
|
|
while($row = $jo_result->fetchAssociative())
|
|
{
|
|
// need to get the battery ordered
|
|
$jo_id = $row['jo_id'];
|
|
|
|
$b_sql = 'SELECT bmodel.name AS model_name, bsize.name AS size_name
|
|
FROM battery_model bmodel, battery_size bsize, battery b,
|
|
invoice i, invoice_item ii
|
|
WHERE b.model_id = bmodel.id
|
|
AND b.size_id = bsize.id
|
|
AND ii.invoice_id = i.id
|
|
AND ii.battery_id = b.id
|
|
AND i.job_order_id = :jo_id';
|
|
|
|
$b_stmt = $db->prepare($b_sql);
|
|
$b_stmt->bindValue('jo_id', $jo_id);
|
|
|
|
$b_result = $b_stmt->executeQuery();
|
|
|
|
$b_data = [];
|
|
|
|
$battery_name = '';
|
|
while ($b_row = $b_result->fetchAssociative())
|
|
{
|
|
$battery_name = $b_row['model_name'] . ' / ' . $b_row['size_name'];
|
|
}
|
|
|
|
// get the date from the date schedule
|
|
$date_array = explode(' ' , $row['date_schedule']);
|
|
$date_schedule = $date_array[0];
|
|
|
|
$jo_data[] = [
|
|
'serial' => $row['serial'],
|
|
'product_name' => $battery_name,
|
|
'jo_id' => $jo_id,
|
|
'date' => $date_schedule,
|
|
'hub' => $row['hub_name'],
|
|
'plate_number' => $row['plate_number'],
|
|
'warranty_class' => $row['warranty_class'],
|
|
'first_name' => $row['first_name'],
|
|
'last_name' => $row['last_name'],
|
|
'contact_number' => $row['mobile_number'],
|
|
'email' => $row['email']
|
|
];
|
|
}
|
|
|
|
return $jo_data;
|
|
}
|
|
|
|
|
|
}
|