diff --git a/initial_sql/sql_update_job_order_search_fields.sql b/initial_sql/sql_update_job_order_search_fields.sql new file mode 100644 index 00000000..25eaffb6 --- /dev/null +++ b/initial_sql/sql_update_job_order_search_fields.sql @@ -0,0 +1 @@ +UPDATE job_order jo, customer c, customer_vehicle cv SET jo.first_name = c.first_name, jo.last_name = c.last_name, jo.phone_mobile = c.phone_mobile, jo.plate_number = cv.plate_number WHERE jo.customer_id = c.id AND jo.cvehicle_id = cv.id; diff --git a/src/Entity/JobOrder.php b/src/Entity/JobOrder.php index d530bbd3..203d9e3d 100644 --- a/src/Entity/JobOrder.php +++ b/src/Entity/JobOrder.php @@ -16,7 +16,11 @@ use App\Ramcar\ServiceType; /** * @ORM\Entity * @ORM\Table(name="job_order", indexes={ - * @ORM\Index(name="date_schedule_idx", columns={"date_schedule"}) + * @ORM\Index(name="date_schedule_idx", columns={"date_schedule"}), + * @ORM\Index(name="plate_number_idx", columns={"plate_number"}), + * @ORM\Index(name="first_name_idx", columns={"first_name"}), + * @ORM\Index(name="last_name_idx", columns={"last_name"}), + * @ORM\Index(name="phone_mobile_idx", columns={"phone_mobile"}) * }) */ class JobOrder @@ -302,6 +306,34 @@ class JobOrder */ protected $meta; + // for search purposes + // first name + /** + * @ORM\Column(type="string", length=80) + * @Assert\NotBlank() + */ + protected $first_name; + + // last name + /** + * @ORM\Column(type="string", length=80) + * @Assert\NotBlank() + */ + protected $last_name; + + // plate number + /** + * @ORM\Column(type="string", length=100) + * @Assert\NotBlank() + */ + protected $plate_number; + + // mobile phone + /** + * @ORM\Column(type="string", length=30) + */ + protected $phone_mobile; + public function __construct() { $this->date_create = new DateTime(); @@ -322,6 +354,8 @@ class JobOrder $this->priority = 0; $this->meta = []; + + $this->phone_mobile = ''; } public function getID() @@ -865,4 +899,58 @@ class JobOrder return $this->status_autoassign; } + public function setFirstName($first_name) + { + $this->first_name = $first_name; + return $this; + } + + public function getFirstName() + { + return $this->first_name; + } + + public function setLastName($last_name) + { + $this->last_name = $last_name; + return $this; + } + + public function getLastName() + { + return $this->last_name; + } + + public function setPlateNumber($plate_number) + { + // make it upper case + $plate_number = trim(strtoupper($plate_number)); + + // remove spaces + $plate_number = str_replace(' ', '', $plate_number); + + // upper case + $plate_number = strtoupper($plate_number); + + $this->plate_number = $plate_number; + return $this; + } + + public function getPlateNumber() + { + return strtoupper($this->plate_number); + } + + public function setPhoneMobile($phone) + { + $this->phone_mobile = $phone; + return $this; + } + + public function getPhoneMobile() + { + return $this->phone_mobile; + } + + } diff --git a/src/Service/JobOrderHandler/ResqJobOrderHandler.php b/src/Service/JobOrderHandler/ResqJobOrderHandler.php index 6a44b954..9b1ce8e1 100644 --- a/src/Service/JobOrderHandler/ResqJobOrderHandler.php +++ b/src/Service/JobOrderHandler/ResqJobOrderHandler.php @@ -343,7 +343,11 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface ->setORName($req->request->get('or_name')) ->setPromoDetail($req->request->get('promo_detail')) ->setModeOfPayment($req->request->get('mode_of_payment')) - ->setLandmark($req->request->get('landmark')); + ->setLandmark($req->request->get('landmark')) + ->setFirstName($cust_vehicle->getCustomer()->getFirstName()) + ->setLastName($cust_vehicle->getCustomer()->getLastName()) + ->setPhoneMobile($cust_vehicle->getCustomer()->getPhoneMobile()) + ->setPlateNumber($cust_vehicle->getPlateNumber()); // check if user is null, meaning call to create came from API if ($user != null) @@ -2611,11 +2615,17 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface case 'fulfill': if (isset($datatable['query']['data-rows-search'])) { + /* $query->innerJoin('q.cus_vehicle', 'cv') ->innerJoin('q.customer', 'c') ->where('cv.plate_number like :filter') ->orWhere('c.phone_mobile like :filter') ->orWhere('c.first_name like :filter or c.last_name like :filter') + ->setParameter('filter', $datatable['query']['data-rows-search'] . '%'); */ + $query->where('q.plate_number like :filter') + ->orWhere('q.phone_mobile like :filter') + ->orWhere('q.first_name like :filter') + ->orWhere('q.last_name like :filter') ->setParameter('filter', $datatable['query']['data-rows-search'] . '%'); } if (isset($datatable['query']['rider'])) @@ -2652,12 +2662,21 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface case 'open': if (isset($datatable['query']['data-rows-search'])) { + /* $query->innerJoin('q.cus_vehicle', 'cv') ->innerJoin('q.customer', 'c') ->where('q.status IN (:statuses)') ->andWhere('cv.plate_number like :filter or c.first_name like :filter or c.last_name like :filter or c.phone_mobile like :filter') ->setParameter('statuses', $status, Connection::PARAM_STR_ARRAY) ->setParameter('filter', $datatable['query']['data-rows-search'] . '%'); + */ + $query->where('q.plate_number like :filter') + ->orWhere('q.phone_mobile like :filter') + ->orWhere('q.first_name like :filter') + ->orWhere('q.last_name like :filter') + ->orWhere('q.status IN (:statuses)') + ->setParameter('statuses', $status, Connection::PARAM_STR_ARRAY) + ->setParameter('filter', $datatable['query']['data-rows-search'] . '%'); } else { @@ -2687,12 +2706,19 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface case 'all': if (isset($datatable['query']['data-rows-search'])) { + /* $query->innerJoin('q.cus_vehicle', 'cv') ->innerJoin('q.customer', 'c') ->where('cv.plate_number like :filter') ->orWhere('c.phone_mobile like :filter') ->orWhere('c.first_name like :filter or c.last_name like :filter') ->setParameter('filter', $datatable['query']['data-rows-search'] . '%'); + */ + $query->where('q.plate_number like :filter') + ->orWhere('q.phone_mobile like :filter') + ->orWhere('q.first_name like :filter') + ->orWhere('q.last_name like :filter') + ->setParameter('filter', $datatable['query']['data-rows-search'] . '%'); } if (isset($datatable['query']['rider'])) { @@ -2717,12 +2743,19 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface case 'hub_view_all': if (isset($datatable['query']['data-rows-search'])) { + /* $query->innerJoin('q.cus_vehicle', 'cv') ->innerJoin('q.customer', 'c') ->where('cv.plate_number like :filter') ->orWhere('c.phone_mobile like :filter') ->orWhere('c.first_name like :filter or c.last_name like :filter') ->setParameter('filter', $datatable['query']['data-rows-search'] . '%'); + */ + $query->where('q.plate_number like :filter') + ->orWhere('q.phone_mobile like :filter') + ->orWhere('q.first_name like :filter') + ->orWhere('q.last_name like :filter') + ->setParameter('filter', $datatable['query']['data-rows-search'] . '%'); } if (isset($datatable['query']['hub'])) {