diff --git a/src/Command/ImportCarClubCustomerDataCommand.php b/src/Command/ImportCarClubCustomerDataCommand.php index 2d5f5ac2..87ff2b75 100644 --- a/src/Command/ImportCarClubCustomerDataCommand.php +++ b/src/Command/ImportCarClubCustomerDataCommand.php @@ -18,7 +18,7 @@ class ImportCarClubCustomerDataCommand extends Command // field index in csv file const F_TIMESTAMP = 0; const F_DPA = 1; - const F_FIRST_NAM = 2; + const F_FIRST_NAME = 2; const F_MIDDLE_NAME = 3; const F_LAST_NAME = 4; const F_BIRTHDATE = 5; @@ -31,11 +31,13 @@ class ImportCarClubCustomerDataCommand extends Command const F_VEHICLE = 12; const F_VEHICLE_EXCEL = 13; const F_BATT_SIZE = 14; - const F_CONTACT_NUM = 15; - const F_BWI_LOCATION = 16; - const F_SAP_CODE = 17; - const F_SKU = 18; - const F_QTY = 19; + const F_REPLACE_SKED = 15; + const F_DEALER_VISIT = 16; + const F_CONTACT_NUM = 17; + const F_BWI_LOCATION = 18; + const F_SAP_CODE = 19; + const F_SKU = 20; + const F_QTY = 21; protected $em; @@ -51,17 +53,19 @@ class ImportCarClubCustomerDataCommand extends Command $this->setName('customer:createfromcarclub') ->setDescription('Create 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) { - $csv_file = $input->getArgument('file'); + $csv_file = $input->getArgument('input_file'); + $output_file = $input->getArgument('output_file'); // attempt to open file try { - $fh = fopen($csv_file, "w"); + $fh = fopen($csv_file, "r"); } catch (Exception $e) { @@ -69,6 +73,7 @@ class ImportCarClubCustomerDataCommand extends Command } $row_num = 1; + $output_info = []; while (($fields = fgetcsv($fh)) !== false) { // ignore first row @@ -78,6 +83,24 @@ class ImportCarClubCustomerDataCommand extends Command 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]); $lname = trim($fields[self::F_LAST_NAME]); $dpa = trim($fields[self::F_DPA]); @@ -86,9 +109,8 @@ class ImportCarClubCustomerDataCommand extends Command // check in case of multiple numbers // check contact number if mobile or not // 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 = []; + $cust_id = ''; if (preg_match('/[\\\s\/]/', $contact_number)) { $contact_num_array = preg_split('/[\\\s\/]/', $contact_number); @@ -96,7 +118,7 @@ class ImportCarClubCustomerDataCommand extends Command else { // only one mobile number - $contact_number_array[] = $contact_number; + $contact_num_array[] = $contact_number; } foreach ($contact_num_array as $contact_num) @@ -104,19 +126,41 @@ class ImportCarClubCustomerDataCommand extends Command $c_num = trim($contact_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; + } + + // 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? - if (preg_match('/^09[0-9]{9}$/', $c_num)) + if (preg_match('/^09[0-9]{9}$/', $clean_number)) { // remove first '0' - $c_num = substr($c_num, 1); - error_log("CONVERTED TO $c_num"); + $clean_number = substr($clean_number, 1); + 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? - if (!preg_match('/^9[0-9]{9}$/', $c_num)) - continue; + if (!preg_match('/^9[0-9]{9}$/', $clean_number)) + { + 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); @@ -131,17 +175,24 @@ class ImportCarClubCustomerDataCommand extends Command $new_cust = new Customer(); $new_cust->setFirstName($fname) ->setLastName($lname) - ->setPhoneMobile($c_num) + ->setPhoneMobile($clean_number) ->setDpaConsent($is_dpa) ->setCreateSource('car_club_file'); $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++; } fclose($fh); @@ -153,4 +204,44 @@ class ImportCarClubCustomerDataCommand extends Command $customers = $this->em->getRepository(Customer::class)->findBy(['phone_mobile' => $number]); 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); + } }