From 2e0efa0b35616e449f4c2287eb76e243fbf8b725 Mon Sep 17 00:00:00 2001 From: Ramon Gutierrez Date: Wed, 17 Jan 2018 23:14:18 +0800 Subject: [PATCH 1/2] Rename incoming.html.twig to form.html.twig to keep standard --- src/Controller/JobOrderController.php | 122 +++++++++++++++++- .../{incoming.html.twig => form.html.twig} | 0 2 files changed, 121 insertions(+), 1 deletion(-) rename templates/job-order/{incoming.html.twig => form.html.twig} (100%) diff --git a/src/Controller/JobOrderController.php b/src/Controller/JobOrderController.php index f93ccf49..0fea75ae 100644 --- a/src/Controller/JobOrderController.php +++ b/src/Controller/JobOrderController.php @@ -42,7 +42,7 @@ class JobOrderController extends BaseController $params['statuses'] = JOStatus::getCollection(); // response - return $this->render('job-order/incoming.html.twig', $params); + return $this->render('job-order/form.html.twig', $params); } public function incomingSubmit(Request $req) @@ -127,5 +127,125 @@ class JobOrderController extends BaseController public function processingList() { $this->denyAccessUnlessGranted('jo_proc.list', null, 'No access.'); + + $params = $this->initParameters('jo_proc'); + + // response + return $this->render('job-order/list.html.twig', $params); + } + + public function processingRows() + { + $this->denyAccessUnlessGranted('jo_proc.list', null, 'No access.'); + + // get query builder + $qb = $this->getDoctrine() + ->getRepository(JobOrder::class) + ->createQueryBuilder('q'); + + // get datatable params + $datatable = $req->request->get('datatable'); + + // count total records + $tquery = $qb->select('COUNT(q)') + ->join('q.customer_vehicle', 'cv') + ->join('q.customer', 'c'); + + $this->setQueryFilters($datatable, $tquery); + + $total = $tquery->getQuery() + ->getSingleScalarResult(); + + // get current page number + $page = $datatable['pagination']['page'] ?? 1; + + $perpage = $datatable['pagination']['perpage']; + $offset = ($page - 1) * $perpage; + + // add metadata + $meta = [ + 'page' => $page, + 'perpage' => $perpage, + 'pages' => ceil($total / $perpage), + 'total' => $total, + 'sort' => 'asc', + 'field' => 'id' + ]; + + // build query + $query = $qb->select('q') + ->addSelect('cv.plate_number as plate_number') + ->addSelect('c.first_name as cust_first_name') + ->addSelect('c.last_name as cust_last_name'); + + $this->setQueryFilters($datatable, $query); + + // check if sorting is present, otherwise use default + if (isset($datatable['sort']['field']) && !empty($datatable['sort']['field'])) { + $prefix = ''; + + if (!in_array($datatable['sort']['field'], ['plate_number', 'cust_first_name', 'cust_last_name'])) + $prefix = 'q.'; + + $order = $datatable['sort']['sort'] ?? 'asc'; + $query->orderBy($prefix . $datatable['sort']['field'], $order); + } else { + $query->orderBy('q.date_schedule', 'asc'); + } + + // get rows for this page + $obj_rows = $query->setFirstResult($offset) + ->setMaxResults($perpage) + ->getQuery() + ->getResult(); + + // get service type name + $service_type = false; + $service_types = ServiceType::getCollection(); + foreach ($service_types as $key => $service) { + if ($key == $orow->getServiceType()) { + $service_type = $service; + break; + } + } + + // process rows + $rows = []; + foreach ($obj_rows as $orow) { + // add row data + $row['id'] = $orow[0]->getID(); + $row['date_schedule_date'] = $orow[0]->getDeliveryDate()->format("d M Y"); + $row['date_schedule_time'] = $orow[0]->getDeliveryDate()->format("h:i A"); + $row['service_type'] = $service_type; + $row['plate_number'] = $orow['plate_number']; + $row['customer_name'] = $orow['cust_first_name'] . " " . $orow['cust_last_name']; + $row['mobile_numbers'] = $orow[0]->getCustomer()->getMobileNumberList(); + $row['source'] = ucfirst($orow[0]->getSource()); + + // add crud urls + $row['meta']['update_url'] = $this->generateUrl('jo_proc_form', ['id' => $row['id']]); + + $rows[] = $row; + } + + // response + return $this->json([ + 'meta' => $meta, + 'data' => $rows + ]); + } + + // check if datatable filter is present and append to query + protected function setQueryFilters($datatable, &$query) { + // get only pending rows + $query->where('q.status', 'pending'); + + // apply filters + if (isset($datatable['query']['data-rows-search']) && !empty($datatable['query']['data-rows-search'])) { + $query->where('q.delivery_address LIKE :filter') + ->orWhere($qb->expr()->concat('c.first_name', $qb->expr()->literal(' '), 'c.last_name') . 'LIKE :filter') + ->orWhere('cv.plate_number LIKE :filter') + ->setParameter('filter', '%' . $datatable['query']['data-rows-search'] . '%'); + } } } diff --git a/templates/job-order/incoming.html.twig b/templates/job-order/form.html.twig similarity index 100% rename from templates/job-order/incoming.html.twig rename to templates/job-order/form.html.twig From 139cbdfc3de36f5865beebd0e7bbf56e87b552a0 Mon Sep 17 00:00:00 2001 From: Ramon Gutierrez Date: Wed, 17 Jan 2018 23:53:54 +0800 Subject: [PATCH 2/2] Initial commit for job order list (processing) --- config/routes/job_order.yaml | 5 ++ src/Controller/JobOrderController.php | 56 +++++++----- templates/job-order/list.html.twig | 123 ++++++++++++++++++++++++++ 3 files changed, 161 insertions(+), 23 deletions(-) create mode 100644 templates/job-order/list.html.twig diff --git a/config/routes/job_order.yaml b/config/routes/job_order.yaml index 473c8353..b9e44c16 100644 --- a/config/routes/job_order.yaml +++ b/config/routes/job_order.yaml @@ -18,6 +18,11 @@ jo_in_submit: controller: App\Controller\JobOrderController::incomingSubmit methods: [POST] +jo_proc_form: + path: /job-order/processing/{id} + controller: App\Controller\JobOrderController::processingForm + methods: [GET] + jo_proc_submit: path: /job-order/processing controller: App\Controller\JobOrderController::processingSubmit diff --git a/src/Controller/JobOrderController.php b/src/Controller/JobOrderController.php index 0fea75ae..17d438f7 100644 --- a/src/Controller/JobOrderController.php +++ b/src/Controller/JobOrderController.php @@ -134,7 +134,7 @@ class JobOrderController extends BaseController return $this->render('job-order/list.html.twig', $params); } - public function processingRows() + public function processingRows(Request $req) { $this->denyAccessUnlessGranted('jo_proc.list', null, 'No access.'); @@ -148,10 +148,10 @@ class JobOrderController extends BaseController // count total records $tquery = $qb->select('COUNT(q)') - ->join('q.customer_vehicle', 'cv') + ->join('q.cus_vehicle', 'cv') ->join('q.customer', 'c'); - $this->setQueryFilters($datatable, $tquery); + $this->setQueryFilters($datatable, $tquery, $qb); $total = $tquery->getQuery() ->getSingleScalarResult(); @@ -175,16 +175,16 @@ class JobOrderController extends BaseController // build query $query = $qb->select('q') ->addSelect('cv.plate_number as plate_number') - ->addSelect('c.first_name as cust_first_name') + ->addSelect('c.first_name as customer_name') ->addSelect('c.last_name as cust_last_name'); - $this->setQueryFilters($datatable, $query); + $this->setQueryFilters($datatable, $query, $qb); // check if sorting is present, otherwise use default if (isset($datatable['sort']['field']) && !empty($datatable['sort']['field'])) { $prefix = ''; - if (!in_array($datatable['sort']['field'], ['plate_number', 'cust_first_name', 'cust_last_name'])) + if (!in_array($datatable['sort']['field'], ['plate_number', 'customer_name'])) $prefix = 'q.'; $order = $datatable['sort']['sort'] ?? 'asc'; @@ -199,27 +199,27 @@ class JobOrderController extends BaseController ->getQuery() ->getResult(); - // get service type name - $service_type = false; - $service_types = ServiceType::getCollection(); - foreach ($service_types as $key => $service) { - if ($key == $orow->getServiceType()) { - $service_type = $service; - break; - } - } - // process rows $rows = []; foreach ($obj_rows as $orow) { + // get service type name + $service_type = false; + $service_types = ServiceType::getCollection(); + foreach ($service_types as $key => $service) { + if ($key == $orow[0]->getServiceType()) { + $service_type = $service; + break; + } + } + // add row data $row['id'] = $orow[0]->getID(); - $row['date_schedule_date'] = $orow[0]->getDeliveryDate()->format("d M Y"); - $row['date_schedule_time'] = $orow[0]->getDeliveryDate()->format("h:i A"); + $row['date_schedule'] = $orow[0]->getDateSchedule()->format("d M Y"); + $row['date_schedule_time'] = $orow[0]->getDateSchedule()->format("h:i A"); $row['service_type'] = $service_type; $row['plate_number'] = $orow['plate_number']; - $row['customer_name'] = $orow['cust_first_name'] . " " . $orow['cust_last_name']; - $row['mobile_numbers'] = $orow[0]->getCustomer()->getMobileNumberList(); + $row['customer_name'] = $orow['customer_name'] . " " . $orow['cust_last_name']; + $row['mobile_numbers'] = implode("
", $orow[0]->getCustomer()->getMobileNumberList()); $row['source'] = ucfirst($orow[0]->getSource()); // add crud urls @@ -235,17 +235,27 @@ class JobOrderController extends BaseController ]); } + // TODO: re-enable search, figure out how to group the orWhere filters into one, so can execute that plus the pending filter + // check if datatable filter is present and append to query - protected function setQueryFilters($datatable, &$query) { + protected function setQueryFilters($datatable, &$query, $qb) { + $query->where('q.status = :status') + ->setParameter('status', 'pending'); + // get only pending rows - $query->where('q.status', 'pending'); + /* + $query->where($qb->expr()->orX( + $qb->expr()where('q.status', 'pending'); + )); + // apply filters if (isset($datatable['query']['data-rows-search']) && !empty($datatable['query']['data-rows-search'])) { $query->where('q.delivery_address LIKE :filter') - ->orWhere($qb->expr()->concat('c.first_name', $qb->expr()->literal(' '), 'c.last_name') . 'LIKE :filter') + ->orWhere($qb->expr()->concat('c.first_name', $qb->expr()->literal(' '), 'c.last_name') . ' LIKE :filter') ->orWhere('cv.plate_number LIKE :filter') ->setParameter('filter', '%' . $datatable['query']['data-rows-search'] . '%'); } + */ } } diff --git a/templates/job-order/list.html.twig b/templates/job-order/list.html.twig new file mode 100644 index 00000000..ae9209ab --- /dev/null +++ b/templates/job-order/list.html.twig @@ -0,0 +1,123 @@ +{% extends 'base.html.twig' %} + +{% block body %} + +
+
+
+

+ Job Orders (Processing) +

+
+
+
+ +
+ +
+
+
+
+
+
+
+
+
+
+ + + + +
+
+
+
+
+
+ +
+ +
+
+
+
+
+{% endblock %} + +{% block scripts %} + +{% endblock %} \ No newline at end of file