From 2c8f626aa6d51b8f7a74d44cd94a06a147aebcc2 Mon Sep 17 00:00:00 2001 From: Kendrick Chan Date: Sun, 24 Feb 2019 02:09:38 +0800 Subject: [PATCH] Load data for rejection report in json format #184 --- src/Controller/ReportController.php | 331 +++------------------------- 1 file changed, 29 insertions(+), 302 deletions(-) diff --git a/src/Controller/ReportController.php b/src/Controller/ReportController.php index 5ce7d0ee..f5aebc6a 100644 --- a/src/Controller/ReportController.php +++ b/src/Controller/ReportController.php @@ -3,6 +3,7 @@ namespace App\Controller; use App\Ramcar\BaseController; +use App\Ramcar\JORejectionReason; use App\Entity\JORejection; @@ -33,318 +34,44 @@ class ReportController extends BaseController // get query builder $qb = $this->getDoctrine() - ->getRepository(Outlet::class) - ->createQueryBuilder('q'); + ->getRepository(JORejection::class) + ->createQueryBuilder('r'); - // get datatable params - $datatable = $req->request->get('datatable'); + // get dates + $raw_date_start = $req->request->get('date_start'); + $raw_date_end = $req->request->get('date_end'); - // count total records - $tquery = $qb->select('COUNT(q)') - ->leftJoin('q.hub', 'hub'); - - // add filters to count query - $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' - ]; + $date_start = DateTime::createFromFormat('m/d/Y', $raw_date_start); + $date_end = DateTime::createFromFormat('m/d/Y', $raw_date_end); // build query - $query = $qb->select('q') - ->addSelect('hub.name as hub_name') - ->addSelect('hub.branch as hub_branch'); + $query = $qb->where('r.date_create >= :start') + ->andWhere('r.date_create <= :end') + ->setParameter('start', $date_start) + ->setParameter('end', $date_end) + ->getQuery(); - $this->setQueryFilters($datatable, $query); + $jors = $query->getResult(); - // check if sorting is present, otherwise use default - if (isset($datatable['sort']['field']) && !empty($datatable['sort']['field'])) { - $prefix = ''; + // get results + $res = []; + foreach ($jors as $jor) + { + $jo = $jor->getJobOrder(); + $hub = $jor->getHub(); - if (!in_array($datatable['sort']['field'], ['hub_name'])) - $prefix = 'q.'; - - $order = $datatable['sort']['sort'] ?? 'asc'; - $query->orderBy($prefix . $datatable['sort']['field'], $order); - } else { - $query->orderBy('q.id', 'asc'); - } - - // get rows for this page - $obj_rows = $query->setFirstResult($offset) - ->setMaxResults($perpage) - ->getQuery() - ->getResult(); - - // process rows - $rows = []; - foreach ($obj_rows as $orow) { - // add row data - $row['id'] = $orow[0]->getID(); - $row['name'] = $orow[0]->getName(); - $row['branch'] = $orow[0]->getBranch(); - $row['address'] = $orow[0]->getAddress(); - $row['contact_nums'] = $orow[0]->getContactNumbers(); - $row['time_open'] = $orow[0]->getTimeOpen()->format('g:i A'); - $row['time_close'] = $orow[0]->getTimeClose()->format('g:i A'); - $row['hub_name'] = $orow['hub_name'] . ' ' . $orow['hub_branch']; - - // add row metadata - $row['meta'] = [ - 'update_url' => '', - 'delete_url' => '' + $res[] = [ + 'jo_id' => $jo->getID(), + 'jo_date_time' => $jo->getDateSchedule(), + 'jor_date_create' => $jo->getDateCreate(), + 'hub' => $hub->getName() . ' - ' . $hub->getBranch(), + 'reason' => JORejectionReason::getName($jor->getReason()), + 'contact' => $jor->getContactPerson(), + 'remarks' => $jor->getRemarks(), ]; - - // add crud urls - if ($this->isGranted('outlet.update')) - $row['meta']['update_url'] = $this->generateUrl('outlet_update', ['id' => $row['id']]); - if ($this->isGranted('outlet.delete')) - $row['meta']['delete_url'] = $this->generateUrl('outlet_delete', ['id' => $row['id']]); - - $rows[] = $row; } // response - return $this->json([ - 'meta' => $meta, - 'data' => $rows - ]); - } - - public function addForm() - { - $this->denyAccessUnlessGranted('outlet.add', null, 'No access.'); - - $params = $this->initParameters('outlet_list'); - $params['obj'] = new Outlet(); - $params['mode'] = 'create'; - - $em = $this->getDoctrine()->getManager(); - - // get parent associations - $params['hubs'] = $em->getRepository(Hub::class)->findAll(); - - // response - return $this->render('outlet/form.html.twig', $params); - } - - protected function setObject(Outlet $obj, Request $req) - { - // coordinates - $point = new Point($req->request->get('coord_lng'), $req->request->get('coord_lat')); - - // times - $format = 'g:i A'; - $time_open = DateTime::createFromFormat($format, $req->request->get('time_open')); - $time_close = DateTime::createFromFormat($format, $req->request->get('time_close')); - - // set and save values - $obj->setName($req->request->get('name')) - ->setBranch($req->request->get('branch')) - ->setAddress($req->request->get('address')) - ->setContactNumbers($req->request->get('contact_nums')) - ->setTimeOpen($time_open) - ->setTimeClose($time_close) - ->setCoordinates($point); - } - - protected function setQueryFilters($datatable, QueryBuilder $query) - { - if (isset($datatable['query']['data-rows-search']) && !empty($datatable['query']['data-rows-search'])) { - $query->where('hub.name LIKE :filter') - ->orWhere('q.name LIKE :filter') - ->orWhere('q.branch LIKE :filter') - ->orWhere('q.address LIKE :filter') - ->setParameter('filter', '%' . $datatable['query']['data-rows-search'] . '%'); - } - } - - public function addSubmit(Request $req, EncoderFactoryInterface $ef, ValidatorInterface $validator) - { - $this->denyAccessUnlessGranted('outlet.add', null, 'No access.'); - - // create new object - $em = $this->getDoctrine()->getManager(); - $obj = new Outlet(); - - // initialize error list - $error_array = []; - - // custom validation for associations - $hub_id = $req->request->get('hub'); - - if ($hub_id) { - $hub = $em->getRepository(Hub::class) - ->find($hub_id); - - if (empty($hub)) - $error_array['hub'] = 'Invalid hub selected.'; - else - $obj->setHub($hub); - } else { - $error_array['hub'] = 'This value should not be blank.'; - } - - // check if lat and lng are provided - if (empty($req->request->get('coord_lng')) || empty($req->request->get('coord_lat'))) - { - $error_array['coordinates'] = 'No map coordinates provided. Please click on a location on the map.'; - } - - if (empty($error_array)) - { - // set object - $this->setObject($obj, $req); - - // validate - $errors = $validator->validate($obj); - - // add errors to list - foreach ($errors as $error) - { - $error_array[$error->getPropertyPath()] = $error->getMessage(); - } - } - - // check if any errors were found - if (!empty($error_array)) - { - // return validation failure response - return $this->json([ - 'success' => false, - 'errors' => $error_array - ], 422); - } - - // validated! save the entity - $em->persist($obj); - $em->flush(); - - // return successful response - return $this->json([ - 'success' => 'Changes have been saved!' - ]); - } - - public function updateForm($id) - { - $this->denyAccessUnlessGranted('outlet.update', null, 'No access.'); - - $params = $this->initParameters('outlet_list'); - - // get row data - $em = $this->getDoctrine()->getManager(); - $obj = $em->getRepository(Outlet::class)->find($id); - - // make sure this row exists - if (empty($obj)) - throw $this->createNotFoundException('The item does not exist'); - - $em = $this->getDoctrine()->getManager(); - - // get parent associations - $params['hubs'] = $em->getRepository(Hub::class)->findAll(); - - $params['obj'] = $obj; - $params['mode'] = 'update'; - - // response - return $this->render('outlet/form.html.twig', $params); - } - - public function updateSubmit(Request $req, EncoderFactoryInterface $ef, ValidatorInterface $validator, $id) - { - $this->denyAccessUnlessGranted('outlet.update', null, 'No access.'); - - // get object data - $em = $this->getDoctrine()->getManager(); - $obj = $em->getRepository(Outlet::class)->find($id); - - // make sure this object exists - if (empty($obj)) - throw $this->createNotFoundException('The item does not exist'); - - $this->setObject($obj, $req); - - // validate - $errors = $validator->validate($obj); - - // initialize error list - $error_array = []; - - // custom validation for associations - $hub_id = $req->request->get('hub'); - - if ($hub_id) { - $hub = $em->getRepository(Hub::class) - ->find($hub_id); - - if (empty($hub)) - $error_array['hub'] = 'Invalid hub selected.'; - else - $obj->setHub($hub); - } else { - $error_array['hub'] = 'This value should not be blank.'; - } - - // add errors to list - foreach ($errors as $error) { - $error_array[$error->getPropertyPath()] = $error->getMessage(); - } - - // check if any errors were found - if (!empty($error_array)) { - // return validation failure response - return $this->json([ - 'success' => false, - 'errors' => $error_array - ], 422); - } - - // validated! save the entity - $em->flush(); - - // return successful response - return $this->json([ - 'success' => 'Changes have been saved!' - ]); - } - - public function destroy($id) - { - $this->denyAccessUnlessGranted('outlet.delete', null, 'No access.'); - - $params = $this->initParameters('outlet_list'); - - // get objext data - $em = $this->getDoctrine()->getManager(); - $obj = $em->getRepository(Outlet::class)->find($id); - - if (empty($obj)) - throw $this->createNotFoundException('The item does not exist'); - - // delete this object - $em->remove($obj); - $em->flush(); - - // response - $response = new Response(); - $response->setStatusCode(Response::HTTP_OK); - $response->send(); + return $this->json($res); } }