Added cleaning of contact numbers. #572

This commit is contained in:
Korina Cordero 2021-05-31 05:39:20 +00:00
parent 079c8a033a
commit be48ecdb82

View file

@ -18,7 +18,7 @@ class ImportCarClubCustomerDataCommand extends Command
// field index in csv file // field index in csv file
const F_TIMESTAMP = 0; const F_TIMESTAMP = 0;
const F_DPA = 1; const F_DPA = 1;
const F_FIRST_NAM = 2; const F_FIRST_NAME = 2;
const F_MIDDLE_NAME = 3; const F_MIDDLE_NAME = 3;
const F_LAST_NAME = 4; const F_LAST_NAME = 4;
const F_BIRTHDATE = 5; const F_BIRTHDATE = 5;
@ -31,11 +31,13 @@ class ImportCarClubCustomerDataCommand extends Command
const F_VEHICLE = 12; const F_VEHICLE = 12;
const F_VEHICLE_EXCEL = 13; const F_VEHICLE_EXCEL = 13;
const F_BATT_SIZE = 14; const F_BATT_SIZE = 14;
const F_CONTACT_NUM = 15; const F_REPLACE_SKED = 15;
const F_BWI_LOCATION = 16; const F_DEALER_VISIT = 16;
const F_SAP_CODE = 17; const F_CONTACT_NUM = 17;
const F_SKU = 18; const F_BWI_LOCATION = 18;
const F_QTY = 19; const F_SAP_CODE = 19;
const F_SKU = 20;
const F_QTY = 21;
protected $em; protected $em;
@ -51,17 +53,19 @@ class ImportCarClubCustomerDataCommand extends Command
$this->setName('customer:createfromcarclub') $this->setName('customer:createfromcarclub')
->setDescription('Create customers from car club file.') ->setDescription('Create customers from car club file.')
->setHelp('Creates customers from car club file.') ->setHelp('Creates customers from car club file.')
->addArgument('file', InputArgument::REQUIRED, 'Path to the output CSV file with the car club info.'); ->addArgument('input_file', InputArgument::REQUIRED, 'Path to the output CSV file with the car club info.')
->addArgument('output_file', InputArgument::REQUIRED, 'Output filename');
} }
protected function execute(InputInterface $input, OutputInterface $output) protected function execute(InputInterface $input, OutputInterface $output)
{ {
$csv_file = $input->getArgument('file'); $csv_file = $input->getArgument('input_file');
$output_file = $input->getArgument('output_file');
// attempt to open file // attempt to open file
try try
{ {
$fh = fopen($csv_file, "w"); $fh = fopen($csv_file, "r");
} }
catch (Exception $e) catch (Exception $e)
{ {
@ -69,6 +73,7 @@ class ImportCarClubCustomerDataCommand extends Command
} }
$row_num = 1; $row_num = 1;
$output_info = [];
while (($fields = fgetcsv($fh)) !== false) while (($fields = fgetcsv($fh)) !== false)
{ {
// ignore first row // ignore first row
@ -78,6 +83,24 @@ class ImportCarClubCustomerDataCommand extends Command
continue; continue;
} }
$timestamp = trim($fields[self::F_TIMESTAMP]);
$mname = trim($fields[self::F_MIDDLE_NAME]);
$birthdate = trim($fields[self::F_BIRTHDATE]);
$address = trim($fields[self::F_ADDRESS]);
$city = trim($fields[self::F_CITY]);
$region = trim($fields[self::F_REGION]);
$car_club = trim($fields[self::F_CAR_CLUB]);
$position = trim($fields[self::F_POSITION]);
$member_number = trim($fields[self::F_MEMBER_NUM]);
$vehicle = trim($fields[self::F_VEHICLE]);
$vehicle_excel = trim($fields[self::F_VEHICLE_EXCEL]);
$batt_size = trim($fields[self::F_BATT_SIZE]);
$replace_sked = trim($fields[self::F_REPLACE_SKED]);
$dealer_visit = trim($fields[self::F_DEALER_VISIT]);
$bwi_location = trim($fields[self::F_BWI_LOCATION]);
$sap_code = trim($fields[self::F_SAP_CODE]);
$sku = trim($fields[self::F_SKU]);
$qty = trim($fields[self::F_QTY]);
$fname = trim($fields[self::F_FIRST_NAME]); $fname = trim($fields[self::F_FIRST_NAME]);
$lname = trim($fields[self::F_LAST_NAME]); $lname = trim($fields[self::F_LAST_NAME]);
$dpa = trim($fields[self::F_DPA]); $dpa = trim($fields[self::F_DPA]);
@ -86,9 +109,8 @@ class ImportCarClubCustomerDataCommand extends Command
// check in case of multiple numbers // check in case of multiple numbers
// check contact number if mobile or not // check contact number if mobile or not
// check for spaces, slash, and forward slash // check for spaces, slash, and forward slash
// mobile has length 10 if no 63, 12 if has 63
// landline has 8 if no area code, 10 if with area code
$contact_num_array = []; $contact_num_array = [];
$cust_id = '';
if (preg_match('/[\\\s\/]/', $contact_number)) if (preg_match('/[\\\s\/]/', $contact_number))
{ {
$contact_num_array = preg_split('/[\\\s\/]/', $contact_number); $contact_num_array = preg_split('/[\\\s\/]/', $contact_number);
@ -96,7 +118,7 @@ class ImportCarClubCustomerDataCommand extends Command
else else
{ {
// only one mobile number // only one mobile number
$contact_number_array[] = $contact_number; $contact_num_array[] = $contact_number;
} }
foreach ($contact_num_array as $contact_num) foreach ($contact_num_array as $contact_num)
@ -104,19 +126,41 @@ class ImportCarClubCustomerDataCommand extends Command
$c_num = trim($contact_num); $c_num = trim($contact_num);
if (empty($c_num)) if (empty($c_num))
{
// add info to output array
$output_info[] = $this->addCustomerInfoEntry($timestamp, $dpa, $fname, $mname, $lname, $birthdate, $address, $city,
$region, $car_club, $position, $member_number, $vehicle, $vehicle_excel, $batt_size, $replace_sked,
$dealer_visit, $contact_number, $bwi_location, $sap_code, $sku, $qty, 'NOT CREATED', 'Missing contact number', $cust_id);
continue; continue;
}
// remove any non digit character from string
$clean_number = preg_replace('~\D~', '', $c_num);
error_log('cleaned ' . $clean_number);
// does it fit our 09XXXXXXXXX pattern? // does it fit our 09XXXXXXXXX pattern?
if (preg_match('/^09[0-9]{9}$/', $c_num)) if (preg_match('/^09[0-9]{9}$/', $clean_number))
{ {
// remove first '0' // remove first '0'
$c_num = substr($c_num, 1); $clean_number = substr($clean_number, 1);
error_log("CONVERTED TO $c_num"); error_log("CONVERTED TO $clean_number");
}
// does it fit our 63XXXXXXXXXX pattern?
if (preg_match('/^63[0-9]{10}$/', $clean_number))
{
// remove the 63
$clean_number = substr($clean_number, 2);
error_log("CONVERTED TO $clean_number");
} }
// does it fit our 9XXXXXXXXX pattern? // does it fit our 9XXXXXXXXX pattern?
if (!preg_match('/^9[0-9]{9}$/', $c_num)) if (!preg_match('/^9[0-9]{9}$/', $clean_number))
continue; {
error_log('not a mobile number');
// set clean_number to blank since we don't save a non-mobile number
$clean_number = '';
}
$customers = $this->findCustomerByNumber($c_num); $customers = $this->findCustomerByNumber($c_num);
@ -131,17 +175,24 @@ class ImportCarClubCustomerDataCommand extends Command
$new_cust = new Customer(); $new_cust = new Customer();
$new_cust->setFirstName($fname) $new_cust->setFirstName($fname)
->setLastName($lname) ->setLastName($lname)
->setPhoneMobile($c_num) ->setPhoneMobile($clean_number)
->setDpaConsent($is_dpa) ->setDpaConsent($is_dpa)
->setCreateSource('car_club_file'); ->setCreateSource('car_club_file');
$this->em->persist($new_cust); $this->em->persist($new_cust);
$this->em->flush();
// get customer id of new customer here
$cust_id = $new_cust->getId();
$this->em->clear();
// output to file
}
else
{
// update customer
} }
} }
$this->em->flush();
$this->em->clear();
$row_num++; $row_num++;
} }
fclose($fh); fclose($fh);
@ -153,4 +204,44 @@ class ImportCarClubCustomerDataCommand extends Command
$customers = $this->em->getRepository(Customer::class)->findBy(['phone_mobile' => $number]); $customers = $this->em->getRepository(Customer::class)->findBy(['phone_mobile' => $number]);
return $customers; return $customers;
} }
protected function outputCustomerInfo($output_file)
{
try
{
$fh = fopen($output_file, "w");
}
catch (Exception $e)
{
throw new Exception('The file "' . $report_file . '" could be opened.');
}
// write the headers
fputcsv($fh, [
'Timestamp',
'I have read and understood and agreed to the confidentiality of this form request',
'First Name',
'Middle Name',
'Last Name',
'Birth date',
'Address',
'City',
'Region',
'Car Club/Organization',
'Position in the organization',
'Official Member Number (type NA if not applicable)',
'Vehicles you own? Year - Make -Model - Plate/Conduction number (ex 2017 NISSAN NAVARA ABC 1234) you can indicate all your vehicles',
'If your were given a chance to EXperience the New Motolite Excel, Choose 1 vehicle and it\'s plate/conduction number',
'What is the Battery size of the vehicle you with to EXperience the New Motolite Excel',
'Given a specific date, when can you schedule your replacement?',
'Will you be able to visit our dealer that we will assign nearest to you?',
'Contact Number',
'BWI LOCATION',
'SAP CODE',
'SKU',
'QTY',
]);
fclose($fh);
}
} }