From 14d62d044f7203b96480b7ab42859b2b7585e6d4 Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Mon, 13 Nov 2023 15:20:46 +0800 Subject: [PATCH 1/4] Make new page to view all Resq app job orders. #770 --- config/packages/catalyst_auth.yaml | 2 + config/packages/catalyst_menu.yaml | 4 + config/routes/resq_job_order.yaml | 14 ++ src/Controller/ResqJobOrderController.php | 61 ++++++-- templates/resq-job-order/list.all.html.twig | 151 ++++++++++++++++++++ translations/messages.en.yaml | 1 + 6 files changed, 224 insertions(+), 9 deletions(-) create mode 100644 templates/resq-job-order/list.all.html.twig diff --git a/config/packages/catalyst_auth.yaml b/config/packages/catalyst_auth.yaml index f4e5461a..dfaf31e0 100644 --- a/config/packages/catalyst_auth.yaml +++ b/config/packages/catalyst_auth.yaml @@ -277,6 +277,8 @@ catalyst_auth: label: Fulfill Cancelled JO - id: jo_resq_proc.list label: RESQ Dispatch + - id: jo_resq_all.list + label: RESQ All - id: support label: Customer Support Access diff --git a/config/packages/catalyst_menu.yaml b/config/packages/catalyst_menu.yaml index 98bce994..deb8c43f 100644 --- a/config/packages/catalyst_menu.yaml +++ b/config/packages/catalyst_menu.yaml @@ -168,6 +168,10 @@ catalyst_menu: acl: jo_hub.list label: '[menu.joborder.hubview]' parent: joborder + - id: jo_resq_all + acl: jo_resq_all.list + label: '[menu.joborder.resqall]' + parent: joborder - id: support acl: support.menu diff --git a/config/routes/resq_job_order.yaml b/config/routes/resq_job_order.yaml index 5c506621..0d1ea9ba 100644 --- a/config/routes/resq_job_order.yaml +++ b/config/routes/resq_job_order.yaml @@ -7,3 +7,17 @@ jo_resq_proc_rows: path: /resq-job-order/processing-rows controller: App\Controller\ResqJobOrderController::datatableRows methods: [POST] + defaults: + tier: "proc" + +jo_resq_all: + path: /resq-job-order/all + controller: App\Controller\ResqJobOrderController::listAll + methods: [GET] + +jo_resq_all_rows: + path: /resq-job-orer/all + controller: App\Controller\ResqJobOrderController::datatableRows + methods: [POST] + defaults: + tier: "all" diff --git a/src/Controller/ResqJobOrderController.php b/src/Controller/ResqJobOrderController.php index 8295077d..60b22537 100644 --- a/src/Controller/ResqJobOrderController.php +++ b/src/Controller/ResqJobOrderController.php @@ -39,7 +39,7 @@ class ResqJobOrderController extends Controller /** * @IsGranted("jo_resq_proc.list") */ - public function datatableRows(Request $req, JobOrderHandlerInterface $jo_handler) + public function datatableRows(Request $req, $tier, JobOrderHandlerInterface $jo_handler) { // get query builder $qb = $this->getDoctrine() @@ -52,7 +52,14 @@ class ResqJobOrderController extends Controller // count total records $tquery = $qb->select('COUNT(q)'); - $this->setQueryFilters($datatable, $tquery, $qb, JOStatus::PENDING, TransactionOrigin::MOBILE_APP); + // right now, tier is either proc or all + if ($tier == 'proc') + $this->setQueryFilters($datatable, $tquery, $qb, JOStatus::PENDING, TransactionOrigin::MOBILE_APP); + else + { + // default to all + $this->setQueryFilters($datatable, $tquery, $qb, null, TransactionOrigin::MOBILE_APP); + } $total = $tquery->getQuery() ->getSingleScalarResult(); @@ -76,7 +83,13 @@ class ResqJobOrderController extends Controller // build query $query = $qb->select('q'); - $this->setQueryFilters($datatable, $query, $qb, JOStatus::PENDING, TransactionOrigin::MOBILE_APP); + if ($tier == 'proc') + $this->setQueryFilters($datatable, $tquery, $qb, JOStatus::PENDING, TransactionOrigin::MOBILE_APP); + else + { + // default to all + $this->setQueryFilters($datatable, $tquery, $qb, null, TransactionOrigin::MOBILE_APP); + } // check if sorting is present, otherwise use default if (isset($datatable['sort']['field']) && !empty($datatable['sort']['field'])) { @@ -135,8 +148,18 @@ class ResqJobOrderController extends Controller // add the items for Actions $jo_id = $orow->getID(); - $row['meta']['update_url'] = $this->generateUrl('jo_proc_form', ['id' => $jo_id, 'origin' => 'resq']); - $row['meta']['unlock_url'] = $this->generateUrl('jo_proc_unlock', ['id' => $jo_id, 'origin' => 'resq']); + if ($tier == 'proc') + { + $row['meta']['update_url'] = $this->generateUrl('jo_proc_form', ['id' => $jo_id, 'origin' => 'resq']); + $row['meta']['unlock_url'] = $this->generateUrl('jo_proc_unlock', ['id' => $jo_id, 'origin' => 'resq']); + } + else + { + // default to all + $row['meta']['update_url'] = $this->generateUrl('jo_all_form', ['id' => $jo_id, 'origin' => 'resq']); + $row['meta']['pdf_url'] = $this->generateUrl('jo_pdf_form', ['id' => $jo_id, 'origin' => 'resq']); + $row['meta']['view_url'] = $this->generateUrl('jo_all_view_form',['id' => $jo_id, 'origin' => 'resq']); + } $rows[] = $row; } @@ -148,11 +171,31 @@ class ResqJobOrderController extends Controller ]); } + /** + * @Menu(selected="jo_resq_all") + * @IsGranted("jo_resq_all.list") + */ + public function listAll() + { + $params['table_refresh_rate'] = $this->container->getParameter('job_order_refresh_interval'); + + return $this->render('resq-job-order/list.all.html.twig', $params); + } + protected function setQueryFilters($datatable, &$query, $qb, $status, $source) { - $query->where('q.status = :status') - ->andWhere('q.source = :source') - ->setParameter('status', $status) - ->setParameter('source', $source); + if ($status != null) + { + $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); + } } } diff --git a/templates/resq-job-order/list.all.html.twig b/templates/resq-job-order/list.all.html.twig new file mode 100644 index 00000000..62a1fbe3 --- /dev/null +++ b/templates/resq-job-order/list.all.html.twig @@ -0,0 +1,151 @@ +{% extends 'base.html.twig' %} + +{% block body %} + +
+
+
+

+ RESQ Job Orders (All) +

+
+
+
+ +
+ +
+
+
+
+
+
+
+
+
+
+ + + + +
+
+
+
+
+
+ +
+ +
+
+
+
+
+{% endblock %} + +{% block scripts %} + +{% endblock %} diff --git a/translations/messages.en.yaml b/translations/messages.en.yaml index 78080119..1cc4984f 100644 --- a/translations/messages.en.yaml +++ b/translations/messages.en.yaml @@ -126,6 +126,7 @@ menu.joborder.fulfillment: 'Fulfillment' menu.joborder.open: 'Open' menu.joborder.viewall: 'View All' menu.joborder.hubview: 'Hub View' +menu.joborder.resqall: 'RESQ All' menu.support: 'Support' menu.support.customers: 'Customers' -- 2.43.5 From 6cf94bb193c995f15d1bd5b70990a460868e1d1a Mon Sep 17 00:00:00 2001 From: Korina Cordero Date: Mon, 13 Nov 2023 18:27:01 +0800 Subject: [PATCH 2/4] Add the new columns to the Resq View All page. #770 --- src/Controller/ResqJobOrderController.php | 107 ++++++++++++--- templates/resq-job-order/list.all.html.twig | 142 +++++++++++++++++++- 2 files changed, 227 insertions(+), 22 deletions(-) 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 %}