diff --git a/config/acl.yaml b/config/acl.yaml index d6e1c186..f876e866 100644 --- a/config/acl.yaml +++ b/config/acl.yaml @@ -336,6 +336,8 @@ access_keys: label: SMS Messages Report - id: report.jo.auto_assign label: Auto Assigned Job Order Report + - id: report.jo.advance_order + label: Advance Order Job Order Report - id: service label: Other Services diff --git a/config/routes/report.yaml b/config/routes/report.yaml index 4ddc4452..acb6cb18 100644 --- a/config/routes/report.yaml +++ b/config/routes/report.yaml @@ -117,3 +117,13 @@ rep_jo_auto_assign_submit: path: /report/jo_auto_assign_report controller: App\Controller\ReportController::jobOrderAutoAssignSubmit methods: [POST] + +rep_jo_advance_order_form: + path: /report/jo_advance_order_report + controller: App\Controller\ReportController::jobOrderAdvanceOrderForm + methods: [GET] + +rep_jo_advance_order_submit: + path: /report/jo_advance_order_report + controller: App\Controller\ReportController::jobOrderAdvanceOrderSubmit + methods: [POST] diff --git a/src/Controller/ReportController.php b/src/Controller/ReportController.php index 3f392948..73432964 100644 --- a/src/Controller/ReportController.php +++ b/src/Controller/ReportController.php @@ -960,6 +960,63 @@ class ReportController extends Controller } + /** + * @Menu(selected="outlet_list") + */ + public function jobOrderAdvanceOrderForm() + { + $this->denyAccessUnlessGranted('report.jo.advance_order', null, 'No access.'); + + return $this->render('report/jo-advance-order/form.html.twig'); + } + + public function jobOrderAdvanceOrderSubmit(Request $req, EntityManagerInterface $em) + { + // 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); + + $data = $this->getAdvanceOrderJODetails($req, $em); + + $resp = new StreamedResponse(); + $resp->setCallback(function() use ($data) { + // csv output + $csv_handle = fopen('php://output', 'w+'); + fputcsv($csv_handle, [ + 'Job Order ID', + 'Customer Name', + 'Customer Mobile Number', + 'Plate Number', + 'Service Type', + 'Date Created', + 'Date Scheduled', + 'Distributor', //hub + 'Auto Assign Status', + 'Status', + ]); + + foreach ($data as $row) + { + fputcsv($csv_handle, $row); + } + + fclose($csv_handle); + }); + + $filename = 'advance_order_job_orders_' . $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; + + } + + protected function processPopappFile(UploadedFile $csv_file, EntityManagerInterface $em) { // attempt to open file @@ -1864,4 +1921,101 @@ class ReportController extends Controller return $result; } + + protected function getAdvanceOrderJODetails(Request $req, EntityManagerInterface $em) + { + // get query builder + $qb = $this->getDoctrine() + ->getRepository(JobOrder::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') + ->andWhere('r.flag_advance = :flag_advance') + ->setParameter('start', $date_start->format('Y-m-d') . ' 00:00:00') + ->setParameter('end', $date_end->format('Y-m-d') . ' 23:59:59') + ->setParameter('flag_advance', true) + ->getQuery(); + + // run query + $jos = $query->getResult(); + + $result = []; + foreach($jos as $jo) + { + // get customer information + $cust_name = ''; + $cust_mobile_number = ''; + $plate_number = ''; + + $customer = $jo->getCustomer(); + if ($customer != null) + { + $cust_name = $customer->getNameDisplay(); + + // get mobile number from mobile session + // find latest generated mobile session for customer + $mobile_sessions = $em->getRepository(MobileSession::class)->findBy(['customer' => $customer], ['date_generated' => 'DESC']); + if ($mobile_sessions != null) + { + foreach($mobile_sessions as $mobile_session) + { + $cust_mobile_number = $mobile_session->getPhoneNumber(); + } + } + } + + // get customer vehicle + $cust_vehicle = $jo->getCustomerVehicle(); + if ($cust_vehicle != null) + $plate_number = $cust_vehicle->getPlateNumber(); + + // get hub name + $hub_name = ''; + if ($jo->getHub() != null) + $hub_name = $jo->getHub()->getName(); + + // get jo date create + $datetime_create_jo = ''; + $jo_create = $jo->getDateCreate(); + + $datetime_create_jo = $jo_create->format('d-M-Y H:i'); + + // get jo date schedule if any + $datetime_sked_jo = ''; + $jo_date_scheduled = $jo->getDateSchedule(); + if (empty($jo_date_scheduled)) + { + // set to same date and time as date create of JO + $datetime_sked_jo = $datetime_create_jo; + } + else + $datetime_sked_jo = $jo_date_scheduled->format('d-M-Y H:i'); + + $result[] = [ + $jo->getID(), + $cust_name, + $cust_mobile_number, + $plate_number, + $jo->getServiceType(), + $datetime_create_jo, + $datetime_sked_jo, + $hub_name, + $jo->getStatusAutoAssign(), + $jo->getStatus(), + ]; + + } + + return $result; + } + } diff --git a/templates/base.html.twig b/templates/base.html.twig index 6959e072..5e5abfc2 100644 --- a/templates/base.html.twig +++ b/templates/base.html.twig @@ -172,6 +172,16 @@ +