Move getCustomerVehicles to the customer handler service. #270
This commit is contained in:
parent
cc3db5b58c
commit
8f875f1e31
4 changed files with 219 additions and 96 deletions
|
|
@ -25,7 +25,6 @@ use DateTime;
|
||||||
|
|
||||||
class CustomerController extends Controller
|
class CustomerController extends Controller
|
||||||
{
|
{
|
||||||
const COUNTRY_CODE_PREFIX = '+60';
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Menu(selected="customer_list")
|
* @Menu(selected="customer_list")
|
||||||
|
|
@ -188,104 +187,17 @@ class CustomerController extends Controller
|
||||||
$response->send();
|
$response->send();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getCustomerVehicles(Request $req)
|
public function getCustomerVehicles(Request $req, CustomerHandlerInterface $cust_handler)
|
||||||
{
|
{
|
||||||
if (!$this->isGranted('jo_in.list')) {
|
if (!$this->isGranted('jo_in.list')) {
|
||||||
$exception = $this->createAccessDeniedException('No access.');
|
$exception = $this->createAccessDeniedException('No access.');
|
||||||
throw $exception;
|
throw $exception;
|
||||||
}
|
}
|
||||||
|
|
||||||
// get search term
|
$results = $cust_handler->getCustomerVehicles($req);
|
||||||
$term = $req->query->get('search');
|
|
||||||
|
|
||||||
// get querybuilder
|
$vehicles = $results['vehicles'];
|
||||||
$qb = $this->getDoctrine()
|
$has_more_pages = $results['has_more_pages'];
|
||||||
->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() . ')',
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
// response
|
// response
|
||||||
return $this->json([
|
return $this->json([
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,8 @@ use DateTime;
|
||||||
|
|
||||||
class CMBCustomerHandler implements CustomerHandlerInterface
|
class CMBCustomerHandler implements CustomerHandlerInterface
|
||||||
{
|
{
|
||||||
|
const COUNTRY_CODE_PREFIX = '+60';
|
||||||
|
|
||||||
protected $em;
|
protected $em;
|
||||||
protected $validator;
|
protected $validator;
|
||||||
|
|
||||||
|
|
@ -335,6 +337,7 @@ class CMBCustomerHandler implements CustomerHandlerInterface
|
||||||
}
|
}
|
||||||
|
|
||||||
// check if any errors were found
|
// check if any errors were found
|
||||||
|
$result = [];
|
||||||
if (!empty($error_array) || !empty($nerror_array) || !empty($verror_array))
|
if (!empty($error_array) || !empty($nerror_array) || !empty($verror_array))
|
||||||
{
|
{
|
||||||
// return all error_arrays
|
// return all error_arrays
|
||||||
|
|
@ -374,7 +377,109 @@ class CMBCustomerHandler implements CustomerHandlerInterface
|
||||||
$em->flush();
|
$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]))
|
if (isset($this->template_hash[$id]))
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,8 @@ use DateTime;
|
||||||
|
|
||||||
class ResqCustomerHandler implements CustomerHandlerInterface
|
class ResqCustomerHandler implements CustomerHandlerInterface
|
||||||
{
|
{
|
||||||
|
const COUNTRY_CODE_PREFIX = '+63';
|
||||||
|
|
||||||
protected $em;
|
protected $em;
|
||||||
protected $validator;
|
protected $validator;
|
||||||
|
|
||||||
|
|
@ -250,6 +252,7 @@ class ResqCustomerHandler implements CustomerHandlerInterface
|
||||||
}
|
}
|
||||||
|
|
||||||
// check if any errors were found
|
// check if any errors were found
|
||||||
|
$result = [];
|
||||||
if (!empty($error_array) || !empty($nerror_array) || !empty($verror_array))
|
if (!empty($error_array) || !empty($nerror_array) || !empty($verror_array))
|
||||||
{
|
{
|
||||||
// return all error_arrays
|
// return all error_arrays
|
||||||
|
|
@ -332,6 +335,7 @@ class ResqCustomerHandler implements CustomerHandlerInterface
|
||||||
}
|
}
|
||||||
|
|
||||||
// check if any errors were found
|
// check if any errors were found
|
||||||
|
$result = [];
|
||||||
if (!empty($error_array) || !empty($nerror_array) || !empty($verror_array))
|
if (!empty($error_array) || !empty($nerror_array) || !empty($verror_array))
|
||||||
{
|
{
|
||||||
// return all error_arrays
|
// return all error_arrays
|
||||||
|
|
@ -371,7 +375,109 @@ class ResqCustomerHandler implements CustomerHandlerInterface
|
||||||
$em->flush();
|
$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]))
|
if (isset($this->template_hash[$id]))
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,6 @@ interface CustomerHandlerInterface
|
||||||
// delete customer
|
// delete customer
|
||||||
public function deleteCustomer(int $id);
|
public function deleteCustomer(int $id);
|
||||||
|
|
||||||
// get template to display
|
// get customer vehicles
|
||||||
public function getTwigTemplate(string $id);
|
public function getCustomerVehicles(Request $req);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue