Move getCustomerVehicles to the customer handler service. #270

This commit is contained in:
Korina Cordero 2019-11-13 01:53:48 +00:00
parent cc3db5b58c
commit 8f875f1e31
4 changed files with 219 additions and 96 deletions

View file

@ -25,7 +25,6 @@ use DateTime;
class CustomerController extends Controller
{
const COUNTRY_CODE_PREFIX = '+60';
/**
* @Menu(selected="customer_list")
@ -188,104 +187,17 @@ class CustomerController extends Controller
$response->send();
}
public function getCustomerVehicles(Request $req)
public function getCustomerVehicles(Request $req, CustomerHandlerInterface $cust_handler)
{
if (!$this->isGranted('jo_in.list')) {
$exception = $this->createAccessDeniedException('No access.');
throw $exception;
}
// get search term
$term = $req->query->get('search');
$results = $cust_handler->getCustomerVehicles($req);
// get querybuilder
$qb = $this->getDoctrine()
->getRepository(CustomerVehicle::class)
->createQueryBuilder('q');
/*
// build expression now since we're reusing it
$vehicle_label = $qb->expr()->concat(
'q.plate_number',
$qb->expr()->literal(' - '),
'c.first_name',
$qb->expr()->literal(' '),
'c.last_name',
$qb->expr()->literal(' (+63'),
'c.phone_mobile',
$qb->expr()->literal(')')
);
*/
// count total records
$tquery = $qb->select('COUNT(q)');
// add filters to count query
if (!empty($term)) {
$tquery->where('q.plate_number like :search')
->setParameter('search', $term . '%');
/*
$tquery->where('match_against (q.plate_number, :search \'in boolean mode\') > 0.1')
->setParameter('search', $term . '*');
*/
/*
$tquery->where('q.plate_number LIKE :filter')
->setParameter('filter', '%' . $term . '%');
*/
}
$total = $tquery->getQuery()
->getSingleScalarResult();
// pagination vars
$page = $req->query->get('page') ?? 1;
$perpage = 20;
$offset = ($page - 1) * $perpage;
$pages = ceil($total / $perpage);
$has_more_pages = $page < $pages ? true : false;
// build main query
$query = $qb->select('q');
/*
->addSelect($vehicle_label . ' as vehicle_label')
->addSelect('c.first_name as cust_first_name')
->addSelect('c.last_name as cust_last_name');
*/
// add filters if needed
if (!empty($term)) {
$query->where('q.plate_number like :search')
->setParameter('search', $term . '%');
/*
$query->where('match_against (q.plate_number, :search \'in boolean mode\') > 0.1')
->setParameter('search', $term . '*');
*/
/*
$query->where('q.plate_number LIKE :filter')
->setParameter('filter', '%' . $term . '%');
*/
}
// get rows
$query_obj = $query->orderBy('q.plate_number', 'asc')
->setFirstResult($offset)
->setMaxResults($perpage)
->getQuery();
// error_log($query_obj->getSql());
$obj_rows = $query_obj->getResult();
// build vehicles array
$vehicles = [];
foreach ($obj_rows as $cv) {
$cust = $cv->getCustomer();
$vehicles[] = [
'id' => $cv->getID(),
'text' => $cv->getPlateNumber() . ' ' . $cust->getFirstName() . ' ' . $cust->getLastName() . ' ('. self::COUNTRY_CODE_PREFIX . $cust->getPhoneMobile() . ')',
];
}
$vehicles = $results['vehicles'];
$has_more_pages = $results['has_more_pages'];
// response
return $this->json([

View file

@ -25,6 +25,8 @@ use DateTime;
class CMBCustomerHandler implements CustomerHandlerInterface
{
const COUNTRY_CODE_PREFIX = '+60';
protected $em;
protected $validator;
@ -335,6 +337,7 @@ class CMBCustomerHandler implements CustomerHandlerInterface
}
// check if any errors were found
$result = [];
if (!empty($error_array) || !empty($nerror_array) || !empty($verror_array))
{
// return all error_arrays
@ -374,7 +377,109 @@ class CMBCustomerHandler implements CustomerHandlerInterface
$em->flush();
}
public function getTwigTemplate($id)
// get customer vehicles
public function getCustomerVehicles(Request $req)
{
// get search term
$term = $req->query->get('search');
// get querybuilder
$qb = $this->em
->getRepository(CustomerVehicle::class)
->createQueryBuilder('q');
/*
// build expression now since we're reusing it
$vehicle_label = $qb->expr()->concat(
'q.plate_number',
$qb->expr()->literal(' - '),
'c.first_name',
$qb->expr()->literal(' '),
'c.last_name',
$qb->expr()->literal(' (+63'),
'c.phone_mobile',
$qb->expr()->literal(')')
);
*/
// count total records
$tquery = $qb->select('COUNT(q)');
// add filters to count query
if (!empty($term)) {
$tquery->where('q.plate_number like :search')
->setParameter('search', $term . '%');
/*
$tquery->where('match_against (q.plate_number, :search \'in boolean mode\') > 0.1')
->setParameter('search', $term . '*');
*/
/*
$tquery->where('q.plate_number LIKE :filter')
->setParameter('filter', '%' . $term . '%');
*/
}
$total = $tquery->getQuery()
->getSingleScalarResult();
// pagination vars
$page = $req->query->get('page') ?? 1;
$perpage = 20;
$offset = ($page - 1) * $perpage;
$pages = ceil($total / $perpage);
$has_more_pages = $page < $pages ? true : false;
// build main query
$query = $qb->select('q');
/*
->addSelect($vehicle_label . ' as vehicle_label')
->addSelect('c.first_name as cust_first_name')
->addSelect('c.last_name as cust_last_name');
*/
// add filters if needed
if (!empty($term)) {
$query->where('q.plate_number like :search')
->setParameter('search', $term . '%');
/*
$query->where('match_against (q.plate_number, :search \'in boolean mode\') > 0.1')
->setParameter('search', $term . '*');
*/
/*
$query->where('q.plate_number LIKE :filter')
->setParameter('filter', '%' . $term . '%');
*/
}
// get rows
$query_obj = $query->orderBy('q.plate_number', 'asc')
->setFirstResult($offset)
->setMaxResults($perpage)
->getQuery();
// error_log($query_obj->getSql());
$obj_rows = $query_obj->getResult();
// build vehicles array
$vehicles = [];
foreach ($obj_rows as $cv) {
$cust = $cv->getCustomer();
$vehicles[] = [
'id' => $cv->getID(),
'text' => $cv->getPlateNumber() . ' ' . $cust->getFirstName() . ' ' . $cust->getLastName() . ' ('. self::COUNTRY_CODE_PREFIX . $cust->getPhoneMobile() . ')',
];
}
$results = [
'vehicles' => $vehicles,
'has_more_pages' => $has_more_pages,
];
return $results;
}
protected function getTwigTemplate($id)
{
if (isset($this->template_hash[$id]))
{

View file

@ -27,6 +27,8 @@ use DateTime;
class ResqCustomerHandler implements CustomerHandlerInterface
{
const COUNTRY_CODE_PREFIX = '+63';
protected $em;
protected $validator;
@ -250,6 +252,7 @@ class ResqCustomerHandler implements CustomerHandlerInterface
}
// check if any errors were found
$result = [];
if (!empty($error_array) || !empty($nerror_array) || !empty($verror_array))
{
// return all error_arrays
@ -332,6 +335,7 @@ class ResqCustomerHandler implements CustomerHandlerInterface
}
// check if any errors were found
$result = [];
if (!empty($error_array) || !empty($nerror_array) || !empty($verror_array))
{
// return all error_arrays
@ -371,7 +375,109 @@ class ResqCustomerHandler implements CustomerHandlerInterface
$em->flush();
}
public function getTwigTemplate($id)
// get customer vehicles
public function getCustomerVehicles(Request $req)
{
// get search term
$term = $req->query->get('search');
// get querybuilder
$qb = $this->em
->getRepository(CustomerVehicle::class)
->createQueryBuilder('q');
/*
// build expression now since we're reusing it
$vehicle_label = $qb->expr()->concat(
'q.plate_number',
$qb->expr()->literal(' - '),
'c.first_name',
$qb->expr()->literal(' '),
'c.last_name',
$qb->expr()->literal(' (+63'),
'c.phone_mobile',
$qb->expr()->literal(')')
);
*/
// count total records
$tquery = $qb->select('COUNT(q)');
// add filters to count query
if (!empty($term)) {
$tquery->where('q.plate_number like :search')
->setParameter('search', $term . '%');
/*
$tquery->where('match_against (q.plate_number, :search \'in boolean mode\') > 0.1')
->setParameter('search', $term . '*');
*/
/*
$tquery->where('q.plate_number LIKE :filter')
->setParameter('filter', '%' . $term . '%');
*/
}
$total = $tquery->getQuery()
->getSingleScalarResult();
// pagination vars
$page = $req->query->get('page') ?? 1;
$perpage = 20;
$offset = ($page - 1) * $perpage;
$pages = ceil($total / $perpage);
$has_more_pages = $page < $pages ? true : false;
// build main query
$query = $qb->select('q');
/*
->addSelect($vehicle_label . ' as vehicle_label')
->addSelect('c.first_name as cust_first_name')
->addSelect('c.last_name as cust_last_name');
*/
// add filters if needed
if (!empty($term)) {
$query->where('q.plate_number like :search')
->setParameter('search', $term . '%');
/*
$query->where('match_against (q.plate_number, :search \'in boolean mode\') > 0.1')
->setParameter('search', $term . '*');
*/
/*
$query->where('q.plate_number LIKE :filter')
->setParameter('filter', '%' . $term . '%');
*/
}
// get rows
$query_obj = $query->orderBy('q.plate_number', 'asc')
->setFirstResult($offset)
->setMaxResults($perpage)
->getQuery();
// error_log($query_obj->getSql());
$obj_rows = $query_obj->getResult();
// build vehicles array
$vehicles = [];
foreach ($obj_rows as $cv) {
$cust = $cv->getCustomer();
$vehicles[] = [
'id' => $cv->getID(),
'text' => $cv->getPlateNumber() . ' ' . $cust->getFirstName() . ' ' . $cust->getLastName() . ' ('. self::COUNTRY_CODE_PREFIX . $cust->getPhoneMobile() . ')',
];
}
$results = [
'vehicles' => $vehicles,
'has_more_pages' => $has_more_pages,
];
return $results;
}
protected function getTwigTemplate($id)
{
if (isset($this->template_hash[$id]))
{

View file

@ -27,6 +27,6 @@ interface CustomerHandlerInterface
// delete customer
public function deleteCustomer(int $id);
// get template to display
public function getTwigTemplate(string $id);
// get customer vehicles
public function getCustomerVehicles(Request $req);
}