diff --git a/config/acl.yaml b/config/acl.yaml index 6574648c..25e04dbc 100644 --- a/config/acl.yaml +++ b/config/acl.yaml @@ -330,6 +330,8 @@ access_keys: label: Job Order Details Report - id: report.jo_events label: Job Order Events Report + - id: report.sms_messages + label: SMS Messages Report - id: service label: Other Services diff --git a/config/routes/report.yaml b/config/routes/report.yaml index 57fc52d0..38a78059 100644 --- a/config/routes/report.yaml +++ b/config/routes/report.yaml @@ -97,3 +97,13 @@ rep_jo_events_submit: path: /report/jo_events_report controller: App\Controller\ReportController::jobOrderEventsSubmit methods: [POST] + +rep_sms_messages_form: + path: /report/sms_messages_report + controller: App\Controller\ReportController::smsMessagesForm + methods: [GET] + +rep_sms_messages_submit: + path: /report/sms_messages_report + controller: App\Controller\ReportController::smsMessagesSubmit + methods: [POST] diff --git a/src/Controller/ReportController.php b/src/Controller/ReportController.php index 914f8bdd..ce989e46 100644 --- a/src/Controller/ReportController.php +++ b/src/Controller/ReportController.php @@ -7,6 +7,7 @@ use App\Ramcar\ServiceType; use App\Ramcar\JOStatus; use App\Ramcar\InvalidPlateNumber; use App\Ramcar\JOEventType; +use App\Ramcar\SMSStatus; use App\Entity\JORejection; use App\Entity\Battery; @@ -18,6 +19,7 @@ use App\Entity\MobileSession; use App\Entity\Customer; use App\Entity\BatteryModel; use App\Entity\BatterySize; +use App\Entity\SMSMessage; use Doctrine\ORM\Query; use Doctrine\ORM\QueryBuilder; @@ -855,6 +857,52 @@ class ReportController extends Controller return $resp; } + /** + * @Menu(selected="outlet_list") + */ + public function smsMessagesForm() + { + $this->denyAccessUnlessGranted('report.sms_messages', null, 'No access.'); + + return $this->render('report/sms-messages/form.html.twig'); + } + + public function smsMessagesSubmit(Request $req, EntityManagerInterface $em) + { + $data = $this->getSMSMessagesDetails($req, $em); + + $resp = new StreamedResponse(); + $resp->setCallback(function() use ($data) { + // csv output + $csv_handle = fopen('php://output', 'w+'); + fputcsv($csv_handle, [ + 'Date Create', + 'Source', + 'Source Alias', + 'Destination', + 'Message', + 'Status', + 'Reason Code', + ]); + // write sms messages data + foreach ($data as $row) + { + fputcsv($csv_handle, $row); + } + + fclose($csv_handle); + }); + + $filename = 'sms_messages_report' . '.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 @@ -1619,4 +1667,48 @@ class ReportController extends Controller return $result; } + + protected function getSMSMessagesDetails(Request $req, EntityManagerInterface $em) + { + // get query builder + $qb = $this->getDoctrine() + ->getRepository(SMSMessage::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 + $sms_messages = $query->getResult(); + + $result = []; + foreach($sms_messages as $sms_message) + { + $datetime_create = $sms_message->getDateCreate(); + $date_create = $datetime_create->format('M-d-Y H:i'); + + $result[] = [ + $date_create, + $sms_message->getFrom(), + $sms_message->getFromAlias(), + $sms_message->getTo(), + $sms_message->getMessage(), + $sms_message->getStatus(), + $sms_message->getReasonCode(), + ]; + } + + return $result; + } } diff --git a/src/Ramcar/SMSStatus.php b/src/Ramcar/SMSStatus.php new file mode 100644 index 00000000..b8139da5 --- /dev/null +++ b/src/Ramcar/SMSStatus.php @@ -0,0 +1,24 @@ + 'Created', + 'sent' => 'Sent', + 'delivered' => 'Delivered', + 'not_delivered' => 'Not Delivered', + ]; +} diff --git a/templates/base.html.twig b/templates/base.html.twig index 095df727..f4c36db7 100644 --- a/templates/base.html.twig +++ b/templates/base.html.twig @@ -213,6 +213,14 @@ Warranty Details Report + + + + + + SMS Messages Report + + diff --git a/templates/report/sms-messages/form.html.twig b/templates/report/sms-messages/form.html.twig new file mode 100644 index 00000000..16bcbf35 --- /dev/null +++ b/templates/report/sms-messages/form.html.twig @@ -0,0 +1,82 @@ +{% extends 'base.html.twig' %} + +{% block body %} + +
+
+
+

SMS Messages Report

+
+
+
+ +
+ +
+
+
+
+
+
+ + + +

+ Select a date range +

+
+
+
+
+
+
+
+ +
+ +
+ +
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+{% endblock %} + +{% block scripts %} + +{% endblock %}