diff --git a/config/acl.yaml b/config/acl.yaml index fa63ec81..50ebbfb3 100644 --- a/config/acl.yaml +++ b/config/acl.yaml @@ -300,6 +300,8 @@ access_keys: label: Warranty Class Report - id: report.call.volume label: Call Volume Report + - id: report.rider.volume + label: Per Rider Volume Report - id: service label: Other Services diff --git a/config/routes/report.yaml b/config/routes/report.yaml index 7642525c..9f367be0 100644 --- a/config/routes/report.yaml +++ b/config/routes/report.yaml @@ -67,3 +67,13 @@ rep_call_volume_export_csv: path: /report/call_volume_report controller: App\Controller\ReportController::callVolumeExportCSV methods: [POST] + +rep_per_rider_volume_form: + path: /report/per_rider_volume_report + controller: App\Controller\ReportController::perRiderVolumeForm + methods: [GET] + +rep_per_rider_volume_export_csv: + path: /report/per_rider_volume_report + controller: App\Controller\ReportController::perRiderVolumeExportCSV + methods: [POST] diff --git a/src/Controller/ReportController.php b/src/Controller/ReportController.php index a35d2691..7a7687ea 100644 --- a/src/Controller/ReportController.php +++ b/src/Controller/ReportController.php @@ -14,6 +14,7 @@ use App\Entity\Warranty; use App\Entity\CustomerVehicle; use App\Entity\MobileSession; use App\Entity\Customer; +use App\Entity\Rider; use Doctrine\ORM\Query; use Doctrine\ORM\QueryBuilder; @@ -664,6 +665,48 @@ class ReportController extends Controller } + /** + * @Menu(selected="outlet_list") + */ + public function perRiderVolumeForm() + { + $this->denyAccessUnlessGranted('report.rider.volume', null, 'No access.'); + $params['mode'] = 'form'; + + return $this->render('report/per-rider-volume/form.html.twig', $params); + } + + /** + * @Menu(selected="outlet_list") + */ + public function perRiderVolumeExportCSV(Request $req, EntityManagerInterface $em) + { + $data = $this->getPerRiderVolumeData($em); + + $resp = new StreamedResponse(); + $resp->setCallback(function() use ($data) { + // csv output + $csv_handle = fopen('php://output', 'w+'); + fputcsv($csv_handle, [ + ]); + foreach ($data as $row) + { + fputcsv($csv_handle, $row); + } + + fclose($csv_handle); + }); + + $filename = 'per_rider_volume_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 @@ -1053,4 +1096,34 @@ class ReportController extends Controller return $results; } + + protected function getPerRiderVolumeData(EntityManagerInterface $em) + { + $results = []; + + // get riders + $riders = $em->getRepository(Rider::class)->findAll(); + + foreach($riders as $rider) + { + error_log('Processing rider ' . $rider->getID()); + // get rider information + $last_name = $rider->getLastName(); + $first_name = $rider->getFirstName(); + + // get rider's job orders + $rider_jos = $rider->getJobOrders(); + + foreach($rider_jos as $jo) + { + error_log('Processing job order ' . $jo->getID()); + + // TODO: process report data for per rider volume + } + + $em->clear(); + } + + return $results; + } } diff --git a/src/Entity/Rider.php b/src/Entity/Rider.php index 0f5a3116..f2f2e37e 100644 --- a/src/Entity/Rider.php +++ b/src/Entity/Rider.php @@ -319,4 +319,9 @@ class Rider { return $this->sessions; } + + public function getJobOrders() + { + return $this->job_orders; + } } diff --git a/templates/base.html.twig b/templates/base.html.twig index 21cfc991..8ebf269c 100644 --- a/templates/base.html.twig +++ b/templates/base.html.twig @@ -181,6 +181,14 @@ Call Volume Report + + + + + + diff --git a/templates/report/per-rider-volume/form.html.twig b/templates/report/per-rider-volume/form.html.twig new file mode 100644 index 00000000..e3b48f47 --- /dev/null +++ b/templates/report/per-rider-volume/form.html.twig @@ -0,0 +1,50 @@ +{% extends 'base.html.twig' %} + +{% block body %} + +