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
|
||||
{
|
||||
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([
|
||||
|
|
|
|||
|
|
@ -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]))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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]))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue