Merge branch '419-resq-search-optimization' into 'master'

Resolve "Resq - search optimization"

Closes #419

See merge request jankstudio/resq!479
This commit is contained in:
Kendrick Chan 2020-05-27 07:56:40 +00:00
commit f56e995910
3 changed files with 124 additions and 2 deletions

View file

@ -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;

View file

@ -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;
}
}

View file

@ -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']))
{