From d791374b2955adb9751e1f215cf0a45f9007c34d Mon Sep 17 00:00:00 2001 From: Kendrick Chan Date: Fri, 1 Mar 2019 22:43:59 +0800 Subject: [PATCH] Separate and create detailed rejection report #190 --- config/routes/report.yaml | 22 +++- src/Controller/ReportController.php | 110 +++++++++++++++++- templates/base.html.twig | 14 ++- .../report/rejection/detail_form.html.twig | 82 +++++++++++++ .../report/rejection/summary_form.html.twig | 82 +++++++++++++ 5 files changed, 299 insertions(+), 11 deletions(-) create mode 100644 templates/report/rejection/detail_form.html.twig create mode 100644 templates/report/rejection/summary_form.html.twig diff --git a/config/routes/report.yaml b/config/routes/report.yaml index c933d680..483d7254 100644 --- a/config/routes/report.yaml +++ b/config/routes/report.yaml @@ -1,9 +1,19 @@ -rep_reject_form: - path: /report/rejection - controller: App\Controller\ReportController::rejectForm +rep_reject_summary_form: + path: /report/rejection_summary + controller: App\Controller\ReportController::rejectSummaryForm methods: [GET] -rep_reject_submit: - path: /report/rejection - controller: App\Controller\ReportController::rejectSubmit +rep_reject_summary_submit: + path: /report/rejection_summary + controller: App\Controller\ReportController::rejectSummarySubmit + methods: [POST] + +rep_reject_detail_form: + path: /report/rejection_detail + controller: App\Controller\ReportController::rejectDetailForm + methods: [GET] + +rep_reject_detail_submit: + path: /report/rejection_detail + controller: App\Controller\ReportController::rejectDetailSubmit methods: [POST] diff --git a/src/Controller/ReportController.php b/src/Controller/ReportController.php index 4363e747..4c4ce772 100644 --- a/src/Controller/ReportController.php +++ b/src/Controller/ReportController.php @@ -4,6 +4,7 @@ namespace App\Controller; use App\Ramcar\BaseController; use App\Ramcar\JORejectionReason; +use App\Ramcar\ServiceType; use App\Entity\JORejection; @@ -20,16 +21,16 @@ use DateTime; class ReportController extends BaseController { - public function rejectForm() + public function rejectSummaryForm() { $this->denyAccessUnlessGranted('report.reject', null, 'No access.'); $params = $this->initParameters('outlet_list'); - return $this->render('report/rejection/form.html.twig', $params); + return $this->render('report/rejection/summary_form.html.twig', $params); } - public function rejectSubmit(Request $req) + public function rejectSummarySubmit(Request $req) { $this->denyAccessUnlessGranted('report.reject', null, 'No access.'); @@ -147,4 +148,107 @@ class ReportController extends BaseController ]); */ } + + public function rejectDetailForm() + { + $this->denyAccessUnlessGranted('report.reject', null, 'No access.'); + + $params = $this->initParameters('outlet_list'); + + return $this->render('report/rejection/detail_form.html.twig', $params); + } + + public function rejectDetailSubmit(Request $req) + { + $this->denyAccessUnlessGranted('report.reject', null, 'No access.'); + + // get query builder + $qb = $this->getDoctrine() + ->getRepository(JORejection::class) + ->createQueryBuilder('r'); + + // get dates + $raw_date_start = $req->request->get('date_start'); + $raw_date_end = $req->request->get('date_end'); + + $date_start = DateTime::createFromFormat('m/d/Y', $raw_date_start); + $date_end = DateTime::createFromFormat('m/d/Y', $raw_date_end); + + // build query + $query = $qb->where('r.date_create >= :start') + ->andWhere('r.date_create <= :end') + ->setParameter('start', $date_start->format('Y-m-d') . ' 00:00:00') + ->setParameter('end', $date_end->format('Y-m-d') . ' 23:59:59') + ->getQuery(); + + + // run query + $jors = $query->getResult(); + + // initialize counter + $counter = []; + + // get results + $res = []; + foreach ($jors as $jor) + { + $jo = $jor->getJobOrder(); + $hub = $jor->getHub(); + $hub_id = $hub->getID(); + $hub_name = $hub->getName() . ' - ' . $hub->getBranch(); + + $reason = $jor->getReason(); + + $res[] = [ + $jo->getID(), + $jo->getDateSchedule()->format('m/d/Y H:i'), + $jor->getDateCreate()->format('m/d/Y H:i'), + $hub->getName() . ' - ' . $hub->getBranch(), + JORejectionReason::getName($jor->getReason()), + $jor->getContactPerson(), + $jor->getRemarks(), + $jo->getCreatedBy()->getFullName(), + ServiceType::getName($jo->getServiceType()), + ]; + } + + + // response + $resp = new StreamedResponse(); + $resp->setCallback(function() use ($res) { + // csv output + $csv_handle = fopen('php://output', 'w+'); + fputcsv($csv_handle, [ + 'Order #', + 'Order Date and Time', + 'Date and Time Rejected', + 'Enrollee', + 'Reason', + 'Contact Person', + 'Remarks', + 'Dispatched By', + 'Type of Service', + ]); + foreach ($res as $row) + { + fputcsv($csv_handle, $row); + } + + fclose($csv_handle); + }); + + $filename = 'reject_' . $date_start->format('Ymd') . '_' . $date_end->format('Ymd') . '.csv'; + + $resp->setStatusCode(200); + $resp->headers->set('Content-Type', 'text/csv; charset=utf-8'); + $resp->headers->set('Content-Disposition', 'attachment; filename="' . $filename . '"'); + + return $resp; + /* + return $this->json([ + 'result' => $res, + 'counter' => $counter, + ]); + */ + } } diff --git a/templates/base.html.twig b/templates/base.html.twig index 656d5418..b6464785 100644 --- a/templates/base.html.twig +++ b/templates/base.html.twig @@ -109,12 +109,22 @@