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/Command/WarrantySMSCommand.php b/src/Command/WarrantySMSCommand.php new file mode 100644 index 00000000..dfacab65 --- /dev/null +++ b/src/Command/WarrantySMSCommand.php @@ -0,0 +1,85 @@ +setName('warranty:sms') + ->setDescription('Sends an SMS message to users whose warranty expired one month ago.') + ->setHelp('Sends warranty SMS.') + ->addArgument('date', InputArgument::OPTIONAL, 'Date to use as basis of expiration. Defaults to current date.'); + } + + public function __construct(EntityManagerInterface $em, RisingTideGateway $gateway) + { + $this->em = $em; + $this->gateway = $gateway; + + parent::__construct(); + } + + protected function execute(InputInterface $input, OutputInterface $output) + { + $date_string = $input->getArgument('date'); + + // if date is specified + if (!empty($date_string)) + $date = DateTime::createFromFormat('Ymd', $date_string); + else + $date = new DateTime(); + + // -1 month + $date->modify('-1 month'); + + $warrs = $this->em->getRepository(Warranty::class)->findBy(['date_expire' => $date]); + + foreach ($warrs as $w) + { + error_log($w->getID() . ' - ' . $w->getMobileNumber()); + // check valid number + $num = trim($w->getMobileNumber()); + + // should start with '9' + if ($num[0] != '9') + continue; + + // should be 10 digits + if (strlen($num) != 10) + continue; + + // should be numeric + if (!is_numeric($num)) + continue; + + error_log('valid!'); + + // add 63 prefix + $num = '63' . $num; + } + + /* + error_log('sending sms to ' . $number); + $msg = 'This is a test.'; + $this->gateway->sendSMS($number, 'MOTOLITE', $msg); + + return 0; + */ + } +} 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 + + + + + + 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 %} + +