diff --git a/src/Controller/ResqJobOrderController.php b/src/Controller/ResqJobOrderController.php index 60b22537..8491ad04 100644 --- a/src/Controller/ResqJobOrderController.php +++ b/src/Controller/ResqJobOrderController.php @@ -14,6 +14,7 @@ use Doctrine\ORM\EntityManagerInterface; use Catalyst\MenuBundle\Annotation\Menu; use App\Entity\JobOrder; +use App\Entity\Rider; use App\Service\JobOrderHandlerInterface; @@ -23,6 +24,8 @@ use App\Ramcar\ServiceType; use App\Ramcar\WillingToWaitContent; use App\Ramcar\CustomerClassification; +use DateTime; + class ResqJobOrderController extends Controller { /** @@ -39,7 +42,7 @@ class ResqJobOrderController extends Controller /** * @IsGranted("jo_resq_proc.list") */ - public function datatableRows(Request $req, $tier, JobOrderHandlerInterface $jo_handler) + public function datatableRows(EntityManagerInterface $em, Request $req, $tier, JobOrderHandlerInterface $jo_handler) { // get query builder $qb = $this->getDoctrine() @@ -54,11 +57,11 @@ class ResqJobOrderController extends Controller // right now, tier is either proc or all if ($tier == 'proc') - $this->setQueryFilters($datatable, $tquery, $qb, JOStatus::PENDING, TransactionOrigin::MOBILE_APP); + $this->setQueryFilters($datatable, $tquery, $qb, $tier); else { // default to all - $this->setQueryFilters($datatable, $tquery, $qb, null, TransactionOrigin::MOBILE_APP); + $this->setQueryFilters($datatable, $tquery, $qb, $tier); } $total = $tquery->getQuery() @@ -81,14 +84,16 @@ class ResqJobOrderController extends Controller ]; // build query + $qb = $em->getRepository(JobOrder::class) + ->createQueryBuilder('q'); $query = $qb->select('q'); if ($tier == 'proc') - $this->setQueryFilters($datatable, $tquery, $qb, JOStatus::PENDING, TransactionOrigin::MOBILE_APP); + $this->setQueryFilters($datatable, $query, $qb, $tier); else { // default to all - $this->setQueryFilters($datatable, $tquery, $qb, null, TransactionOrigin::MOBILE_APP); + $this->setQueryFilters($datatable, $query, $qb, $tier); } // check if sorting is present, otherwise use default @@ -123,7 +128,13 @@ class ResqJobOrderController extends Controller // check if customer is not willing to wait $will_not_wait = $orow->getWillWait(); if ($will_not_wait == WillingToWaitContent::NOT_WILLING_TO_WAIT) - $is_emergency = true; + { + // check if reason is emergency or rush + $reason = $orow->getReasonNotWait(); + if (($reason == CustomerNotWaitReason::EMERGENCY) || + ($reason == CustomerNotWaitReason::RUSH_REQUEST)) + $is_emergency = true; + } // add row data $row['id'] = $orow->getID(); @@ -138,6 +149,9 @@ class ResqJobOrderController extends Controller $row['is_mobile'] = $orow->getSource() == TransactionOrigin::MOBILE_APP; $row['is_vip'] = $is_vip; $row['is_emergency'] = $is_emergency; + $row['flag_cust_new'] = $orow->isCustNew(); + $row['date_assign'] = !empty($orow->getDateAssign()) ? $orow->getDateAssign()->format("c") : null; + $row['date_fulfill'] = !empty($orow->getDateFulfill()) ? $orow->getDateFulfill()->format("c") : null; $processor = $orow->getProcessedBy(); if ($processor == null) @@ -145,6 +159,13 @@ class ResqJobOrderController extends Controller else $row['processor'] = $orow->getProcessedBy()->getFullName(); + // get the assigned hub, if any + $assigned_hub = $orow->getHub(); + if ($assigned_hub == null) + $row['assigned_hub'] = ''; + else + $row['assigned_hub'] = $orow->getHub()->getName(); + // add the items for Actions $jo_id = $orow->getID(); @@ -175,27 +196,75 @@ class ResqJobOrderController extends Controller * @Menu(selected="jo_resq_all") * @IsGranted("jo_resq_all.list") */ - public function listAll() + public function listAll(EntityManagerInterface $em) { $params['table_refresh_rate'] = $this->container->getParameter('job_order_refresh_interval'); + // get riders for dropdown + $params['riders'] = $em->getRepository(Rider::class)->findAll(); + return $this->render('resq-job-order/list.all.html.twig', $params); } - protected function setQueryFilters($datatable, &$query, $qb, $status, $source) + protected function setQueryFilters($datatable, &$query, $qb, $tier) { - if ($status != null) + switch ($tier) { - $query->where('q.status = :status') - ->andWhere('q.source = :source') - ->setParameter('status', $status) - ->setParameter('source', $source); - } - else - { - // get all resq app job orders - $query->where('q.source = :source') - ->setParameter('source', $source); + case 'proc': + $query->where('q.status = :status') + ->andWhere('q.source = :source') + ->setParameter('status', JOStatus::PENDING) + ->setParameter('source', TransactionOrigin::MOBILE_APP); + + if (isset($datatable['query']['data-rows-search'])) + { + $query->andWhere('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'] . '%'); + } + + break; + case 'all': + if (isset($datatable['query']['data-rows-search'])) + { + $query->andWhere('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'])) + { + $query->innerJoin('q.rider', 'r') + ->andWhere('r.id = :rider_id') + ->setParameter('rider_id', $datatable['query']['rider']); + } + if (isset($datatable['query']['schedule_date'])) + { + $start = $datatable['query']['schedule_date'][0] . ' ' . '00:00:00'; + $end = $datatable['query']['schedule_date'][1] . ' ' . '23:59:00'; + + $date_start = DateTime::createFromFormat('m/d/Y H:i:s', $start); + $date_end = DateTime::createFromFormat('m/d/Y H:i:s', $end); + + $query->andWhere('q.date_schedule >= :date_start') + ->andWhere('q.date_schedule <= :date_end') + ->setParameter('date_start', $date_start) + ->setParameter('date_end', $date_end); + } + + $query->andWhere('q.source = :source') + ->setParameter('source', TransactionOrigin::MOBILE_APP); + + break; + default: + $query->where('q.source = :source') + ->setParameter('source', TransactionOrigin::MOBILE_APP); + break; } + + error_log($query->getDQL()); } } diff --git a/templates/resq-job-order/list.all.html.twig b/templates/resq-job-order/list.all.html.twig index 62a1fbe3..d33752f1 100644 --- a/templates/resq-job-order/list.all.html.twig +++ b/templates/resq-job-order/list.all.html.twig @@ -30,6 +30,29 @@ +
+
+
+ +
+
+
+
+
+
+ +
+ +
+ +
+
+
@@ -47,6 +70,10 @@ {% block scripts %}