diff --git a/src/Command/MigrateCMBLegacyJobOrderCommand.php b/src/Command/MigrateCMBLegacyJobOrderCommand.php index 2b42ddd0..11da2652 100644 --- a/src/Command/MigrateCMBLegacyJobOrderCommand.php +++ b/src/Command/MigrateCMBLegacyJobOrderCommand.php @@ -55,6 +55,9 @@ class MigrateCMBLegacyJobOrderCommand extends Command remarks = 'remark' satisfaction => 'satisfaction' */ + + const STR_LAST_NAME = 'LEGACY'; + protected $em; protected $bmanu_hash; @@ -405,7 +408,7 @@ class MigrateCMBLegacyJobOrderCommand extends Command $new_cust = new Customer(); $new_cust->setFirstName($name) - ->setLastName('') + ->setLastName(self::STR_LAST_NAME) ->setPhoneMobile($mobile); $this->em->persist($new_cust); diff --git a/src/Command/UpdateCMBMigratedCustomerCommand.php b/src/Command/UpdateCMBMigratedCustomerCommand.php new file mode 100644 index 00000000..6189962f --- /dev/null +++ b/src/Command/UpdateCMBMigratedCustomerCommand.php @@ -0,0 +1,54 @@ +em = $em; + + parent::__construct(); + } + + protected function configure() + { + $this->setName('cmbcustomer:updatecustomer') + ->setDescription('Set customer last name.') + ->setHelp('Set the customer last name. '); + } + + protected function execute(InputInterface $input, OutputInterface $output) + { + error_log('Updating customer last name...'); + + // get all customers + $cust_results = $this->em->getRepository(Customer::class)->findBy(['last_name' => '']); + + foreach ($cust_results as $cust) + { + $cust->setLastName(self::STR_LAST_NAME); + } + + $this->em->flush(); + $this->em->clear(); + + + return 0; + } + +} diff --git a/src/Command/UpdateCMBMigratedCustomerVehicleBatteryCommand.php b/src/Command/UpdateCMBMigratedCustomerVehicleBatteryCommand.php new file mode 100644 index 00000000..eb6facfe --- /dev/null +++ b/src/Command/UpdateCMBMigratedCustomerVehicleBatteryCommand.php @@ -0,0 +1,169 @@ +em = $em; + + // load existing batteries + $this->loadBatteries(); + + parent::__construct(); + } + + protected function configure() + { + $this->setName('cmbcustomervehicle:updatebattery') + ->setDescription('Update customer vehicle battery information.') + ->setHelp('Updates the customer vehicle battery based on migrated data. ') + ->addArgument('output_file', InputArgument::REQUIRED, 'Path to the output CSV file of the entries not updated.'); + } + + protected function execute(InputInterface $input, OutputInterface $output) + { + $csv_file = $input->getArgument('output_file'); + + // attempt to open file + try + { + $fh = fopen($csv_file, "w"); + } + catch (Exception $e) + { + throw new Exception('The file "' . $csv_file . '" could be opened.'); + } + + error_log('Updating customer vehicles...'); + + // get all customer vehicles + $cv_results = $this->em->getRepository(CustomerVehicle::class)->findAll(); + + $not_updated = []; + foreach ($cv_results as $cv) + { + $plate_number = $cv->getPlateNumber(); + + // find cmb legacy job order using plate number + $cmb_legacy_results = $this->em->getRepository(CMBLegacyJobOrder::class)->findBy(['plate_number' => $plate_number], ['trans_date' => 'DESC']); + if ($cmb_legacy_results != null) + { + // get the latest entry + $cmb_legacy = current($cmb_legacy_results); + + // get battery model and size + $battery_model = $this->normalizeName($cmb_legacy->getBatteryModel()); + $battery_size = $this->normalizeName($cmb_legacy->getBatterySize()); + + // figure out manufacturer using model + // century = marathoner, excel, sdfc + // motolite = classic + $battery_manu = self::STR_CENTURY; + if ($battery_model == self::STR_CLASSIC) + $battery_manu = self::STR_MOTOLITE; + + // get battery + $cv_battery = null; + if (isset($this->batt_hash[$battery_manu][$battery_model][$battery_size])) + $cv_battery = $this->batt_hash[$battery_manu][$battery_model][$battery_size]; + + if ($cv_battery != null) + { + //error_log('found battery for ' . $plate_number . ' battery ' . $cv_battery->getModel()->getName() . ' ' . $cv_battery->getSize()->getName()); + $cv->setCurrentBattery($cv_battery); + } + else + { + //error_log('no battery for ' . $battery_model . ' ' . $battery_size); + $not_updated[] = $this->addNotUpdatedEntry($cv, $battery_manu, $battery_model, $battery_size); + } + } + } + + $this->em->flush(); + $this->em->clear(); + + // output the entries that were not added + if (count($not_updated) > 0) + { + fputcsv($fh, [ + 'Customer Vehicle ID', + 'Plate Number', + 'Battery Manufacturer', + 'Battery Model', + 'Battery Size', + 'Reason', + ]); + + foreach($not_updated as $row) + { + fputcsv($fh, $row); + } + } + + return 0; + } + + protected function loadBatteries() + { + $this->batt_hash = []; + + $batts = $this->em->getRepository(Battery::class)->findAll(); + foreach ($batts as $batt) + { + $brand = $this->normalizeName($batt->getManufacturer()->getName()); + $model = $this->normalizeName($batt->getModel()->getName()); + $size = $this->normalizeName($batt->getSize()->getName()); + + $this->batt_hash[$brand][$model][$size] = $batt; + } + } + + protected function addNotUpdatedEntry($cv, $manu, $model, $size) + { + $entry = [ + $cv->getID(), + $cv->getPlateNumber(), + strtoupper($manu), + strtoupper($model), + strtoupper($size), + 'Battery not in system.', + ]; + + return $entry; + } + + protected function normalizeName($name) + { + $normalized_key = trim(strtolower($name)); + + return $normalized_key; + } + +}