diff --git a/src/Command/GenerateCustomerSourceReportCommand.php b/src/Command/GenerateCustomerSourceReportCommand.php new file mode 100644 index 00000000..7b326963 --- /dev/null +++ b/src/Command/GenerateCustomerSourceReportCommand.php @@ -0,0 +1,140 @@ +em = $em; + + parent::__construct(); + } + + protected function configure() + { + $this->setName('report:customer_source') + ->setDescription('Create customer source reports') + ->setHelp('Creates customer source reports.') + ->addArgument('year', InputArgument::REQUIRED, 'Year to process customer data') + ->addArgument('month', InputArgument::REQUIRED, 'Month to process customer data') + ->addArgument('csv_file', InputArgument::REQUIRED, 'Output CSV file'); + } + + protected function execute(InputInterface $input, OutputInterface $output) + { + $em = $this->em; + + // get year and month + $year = $input->getArgument('year'); + $month = $input->getArgument('month'); + $csv_file = $input->getArgument('csv_file'); + + // get all mobile user customer id hash + $resq_cust_ids = $this->getRESQCustomerIDs(); + + // TODO: error checking for file + $fp = fopen($csv_file, 'w'); + + // pdo connection + $db = $em->getConnection(); + + // get all customers + $sql = 'select c.id, c.first_name, c.last_name, c.phone_mobile, c.phone_landline, c.phone_office, c.phone_fax, c.email, c.flag_mobile_app, vm.name, v.make, cv.model_year, cv.plate_number from customer c, customer_vehicle cv, vehicle v, vehicle_manufacturer vm where year(c.date_create) = :year and month(c.date_create) = :month and c.id = cv.customer_id and cv.vehicle_id = v.id and v.manufacturer_id = vm.id'; + $stmt = $db->prepare($sql); + $stmt->execute([ + 'month' => $month, + 'year' => $year, + ]); + + // add header rows + fputcsv($fp, [ + 'Customer ID', + 'First Name', + 'Last Name', + 'Mobile Phone', + 'Landline', + 'Office Phone', + 'Fax', + 'Email Address', + 'Vehicle Manufacturer', + 'Vehicle Make', + 'Model Year', + 'Plate Number', + 'Source', + ]); + + // go through rows + while ($row = $stmt->fetch(PDO::FETCH_NUM)) + { + // TODO: find customer source + // NOTE: flag_mobile_app is 0 for some reason + // customer source + if (isset($resq_cust_ids[$row[0]])) + $source = 'resq'; + else + $source = 'crm / owr'; + + $data = [ + $row[0], // id + $row[1], // first name + $row[2], // last name + $row[3], // phone - mobile + $row[4], // phone - landline + $row[5], // phone - office + $row[6], // phone - fax + $row[7], // email + $row[9], // vehicle manufacturer + $row[10], // vehicle make + $row[11], // vehicle model + $row[12], // plate number + $source // customer source + ]; + + fputcsv($fp, $data); + } + + fclose($fp); + + return 0; + } + + protected function getRESQCustomerIDs() + { + // pdo connection + $db = $this->em->getConnection(); + + // get all customer ids of all mobile sessions + $sql = 'select distinct customer_id from mobile_session'; + $stmt = $db->prepare($sql); + $stmt->execute(); + $res = $stmt->fetchAll(); + + $cust_ids = []; + + foreach ($res as $cust) + { + $cust_ids[$cust['customer_id']] = $cust['customer_id']; + } + + return $cust_ids; + } +} diff --git a/utils/customer_source_report/generateCustomerSourceReport.sh b/utils/customer_source_report/generateCustomerSourceReport.sh new file mode 100755 index 00000000..5d0c3700 --- /dev/null +++ b/utils/customer_source_report/generateCustomerSourceReport.sh @@ -0,0 +1,9 @@ +#!/bin/sh + +/var/www/resq/bin/console report:customer_source 2020 09 /tmp/customer_source_report_202009.csv +/var/www/resq/bin/console report:customer_source 2020 10 /tmp/customer_source_report_202010.csv +/var/www/resq/bin/console report:customer_source 2020 11 /tmp/customer_source_report_202011.csv +/var/www/resq/bin/console report:customer_source 2020 12 /tmp/customer_source_report_202012.csv +/var/www/resq/bin/console report:customer_source 2021 01 /tmp/customer_source_report_202101.csv +/var/www/resq/bin/console report:customer_source 2021 02 /tmp/customer_source_report_202102.csv +/var/www/resq/bin/console report:customer_source 2021 03 /tmp/customer_source_report_202103.csv