From 315a369a3b8cc97a58ce5a130e8d2c65ecf7ab43 Mon Sep 17 00:00:00 2001 From: Kendrick Chan Date: Tue, 10 Apr 2018 20:13:09 +0800 Subject: [PATCH 1/3] Hide error_log debugging in job order controller #89 --- src/Controller/JobOrderController.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Controller/JobOrderController.php b/src/Controller/JobOrderController.php index 3193d885..7b2b3654 100644 --- a/src/Controller/JobOrderController.php +++ b/src/Controller/JobOrderController.php @@ -1647,7 +1647,7 @@ class JobOrderController extends BaseController { foreach ($items as $item) { - error_log('ITEMS'); + // error_log('ITEMS'); // check if this is a valid battery $battery = $em->getRepository(Battery::class)->find($item['battery']); @@ -1682,7 +1682,7 @@ class JobOrderController extends BaseController public function generateInvoice(Request $req, InvoiceCreator $ic) { - error_log('generating invoice...'); + // error_log('generating invoice...'); $error = false; $stype = $req->request->get('stype'); From 836c026402b4f6c04b3a6a2a5b98c6e343287442 Mon Sep 17 00:00:00 2001 From: Kendrick Chan Date: Tue, 10 Apr 2018 23:37:18 +0800 Subject: [PATCH 2/3] Add match against support for dql #89 --- config/packages/doctrine.yaml | 2 ++ src/Doctrine/MatchAgainst.php | 49 ++++++++++++++++++++++++++++++++++ src/Entity/CustomerVehicle.php | 2 +- 3 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 src/Doctrine/MatchAgainst.php diff --git a/config/packages/doctrine.yaml b/config/packages/doctrine.yaml index 2ff608d4..b1b6d947 100644 --- a/config/packages/doctrine.yaml +++ b/config/packages/doctrine.yaml @@ -38,6 +38,8 @@ doctrine: stcollect: CrEOF\Spatial\ORM\Query\AST\Functions\PostgreSql\STCollect stsnaptogrid: CrEOF\Spatial\ORM\Query\AST\Functions\PostgreSql\STSnapToGrid stoverlaps: CrEOF\Spatial\ORM\Query\AST\Functions\PostgreSql\STOverlaps + # for match against + match_against: App\Doctrine\MatchAgainst numeric_functions: # for postgresql starea: CrEOF\Spatial\ORM\Query\AST\Functions\PostgreSql\STArea diff --git a/src/Doctrine/MatchAgainst.php b/src/Doctrine/MatchAgainst.php new file mode 100644 index 00000000..17d2a07a --- /dev/null +++ b/src/Doctrine/MatchAgainst.php @@ -0,0 +1,49 @@ +match(Lexer::T_IDENTIFIER); + $parser->match(Lexer::T_OPEN_PARENTHESIS); + do { + $this->columns[] = $parser->StateFieldPathExpression(); + $parser->match(Lexer::T_COMMA); + } while ($parser->getLexer()->isNextToken(Lexer::T_IDENTIFIER)); + $this->needle = $parser->InParameter(); + while ($parser->getLexer()->isNextToken(Lexer::T_STRING)) { + $this->mode = $parser->Literal(); + } + $parser->match(Lexer::T_CLOSE_PARENTHESIS); + } + + public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker) { + $haystack = null; + $first = true; + foreach ($this->columns as $column) { + $first ? $first = false : $haystack .= ', '; + $haystack .= $column->dispatch($sqlWalker); + } + $query = "MATCH(" . $haystack . + ") AGAINST (" . $this->needle->dispatch($sqlWalker); + if ($this->mode) { + $query .= " " . $this->mode->dispatch($sqlWalker) . " )"; + } else { + $query .= " )"; + } + + return $query; + } + +} diff --git a/src/Entity/CustomerVehicle.php b/src/Entity/CustomerVehicle.php index b4c5829a..aec185b1 100644 --- a/src/Entity/CustomerVehicle.php +++ b/src/Entity/CustomerVehicle.php @@ -9,7 +9,7 @@ use DateTime; /** * @ORM\Entity - * @ORM\Table(name="customer_vehicle") + * @ORM\Table(name="customer_vehicle", indexes={@ORM\Index(columns={"plate_number"}, flags={"fulltext"})}) */ class CustomerVehicle { From 42f3048d12b778dc774dd032290ec0404bb9ac86 Mon Sep 17 00:00:00 2001 From: Kendrick Chan Date: Tue, 10 Apr 2018 23:37:34 +0800 Subject: [PATCH 3/3] Optimize incoming jo customer vehicle search #89 --- src/Controller/CustomerController.php | 32 ++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/src/Controller/CustomerController.php b/src/Controller/CustomerController.php index 25ee66cf..680d5e38 100644 --- a/src/Controller/CustomerController.php +++ b/src/Controller/CustomerController.php @@ -509,6 +509,7 @@ class CustomerController extends BaseController ->getRepository(CustomerVehicle::class) ->createQueryBuilder('q'); + /* // build expression now since we're reusing it $vehicle_label = $qb->expr()->concat( 'q.plate_number', @@ -520,15 +521,23 @@ class CustomerController extends BaseController 'c.phone_mobile', $qb->expr()->literal(')') ); + */ // count total records - $tquery = $qb->select('COUNT(q)') - ->join('q.customer', 'c'); + $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() @@ -542,15 +551,25 @@ class CustomerController extends BaseController $has_more_pages = $page < $pages ? true : false; // build main query - $query = $qb->select('q') + $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 . '%'); + */ } @@ -566,10 +585,11 @@ class CustomerController extends BaseController // build vehicles array $vehicles = []; - foreach ($obj_rows as $vehicle) { + foreach ($obj_rows as $cv) { + $cust = $cv->getCustomer(); $vehicles[] = [ - 'id' => $vehicle[0]->getID(), - 'text' => $vehicle['vehicle_label'] + 'id' => $cv->getID(), + 'text' => $cv->getPlateNumber() . ' ' . $cust->getFirstName() . ' ' . $cust->getLastName() . ' (+63' . $cust->getPhoneMobile() . ')', ]; }