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/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() . ')', ]; } 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'); 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 {