diff --git a/src/Controller/CustomerController.php b/src/Controller/CustomerController.php index e12d8b19..38c4e5c4 100644 --- a/src/Controller/CustomerController.php +++ b/src/Controller/CustomerController.php @@ -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([ diff --git a/src/Service/CustomerHandler/CMBCustomerHandler.php b/src/Service/CustomerHandler/CMBCustomerHandler.php index 7abf86b2..8a26feba 100644 --- a/src/Service/CustomerHandler/CMBCustomerHandler.php +++ b/src/Service/CustomerHandler/CMBCustomerHandler.php @@ -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])) { diff --git a/src/Service/CustomerHandler/ResqCustomerHandler.php b/src/Service/CustomerHandler/ResqCustomerHandler.php index 59d4221f..a302c83e 100644 --- a/src/Service/CustomerHandler/ResqCustomerHandler.php +++ b/src/Service/CustomerHandler/ResqCustomerHandler.php @@ -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])) { diff --git a/src/Service/CustomerHandlerInterface.php b/src/Service/CustomerHandlerInterface.php index 5359d2d6..cc857bfd 100644 --- a/src/Service/CustomerHandlerInterface.php +++ b/src/Service/CustomerHandlerInterface.php @@ -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); }