263 lines
8.1 KiB
PHP
263 lines
8.1 KiB
PHP
<?php
|
|
|
|
namespace App\Controller;
|
|
|
|
use App\Ramcar\BaseController;
|
|
use App\Ramcar\JORejectionReason;
|
|
use App\Ramcar\ServiceType;
|
|
|
|
use App\Entity\JORejection;
|
|
|
|
use Doctrine\ORM\Query;
|
|
use Doctrine\ORM\QueryBuilder;
|
|
use Symfony\Component\HttpFoundation\Request;
|
|
use Symfony\Component\HttpFoundation\Response;
|
|
use Symfony\Component\HttpFoundation\StreamedResponse;
|
|
use Symfony\Component\Security\Core\Encoder\EncoderFactoryInterface;
|
|
use Symfony\Component\Validator\Validator\ValidatorInterface;
|
|
|
|
use CrEOF\Spatial\PHP\Types\Geometry\Point;
|
|
use DateTime;
|
|
|
|
class ReportController extends BaseController
|
|
{
|
|
public function rejectSummaryForm()
|
|
{
|
|
$this->denyAccessUnlessGranted('report.reject', null, 'No access.');
|
|
|
|
$params = $this->initParameters('outlet_list');
|
|
|
|
return $this->render('report/rejection/summary_form.html.twig', $params);
|
|
}
|
|
|
|
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,
|
|
]);
|
|
*/
|
|
}
|
|
|
|
public function rejectDetailForm()
|
|
{
|
|
$this->denyAccessUnlessGranted('report.reject', null, 'No access.');
|
|
|
|
$params = $this->initParameters('outlet_list');
|
|
|
|
return $this->render('report/rejection/detail_form.html.twig', $params);
|
|
}
|
|
|
|
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,
|
|
]);
|
|
*/
|
|
}
|
|
}
|