Merge branch '487-cmb-update-vehicle-current-battery-for-migrated-data' into '472-cmb-release'
Resolve "CMB - update vehicle current battery for migrated data" See merge request jankstudio/resq!573
This commit is contained in:
commit
1c1096da17
3 changed files with 227 additions and 1 deletions
|
|
@ -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);
|
||||
|
|
|
|||
54
src/Command/UpdateCMBMigratedCustomerCommand.php
Normal file
54
src/Command/UpdateCMBMigratedCustomerCommand.php
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
<?php
|
||||
|
||||
namespace App\Command;
|
||||
|
||||
use Symfony\Component\Console\Command\Command;
|
||||
use Symfony\Component\Console\Input\InputArgument;
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
|
||||
use App\Entity\Customer;
|
||||
|
||||
class UpdateCMBMigratedCustomerCommand extends Command
|
||||
{
|
||||
// last name to set
|
||||
const STR_LAST_NAME = 'LEGACY';
|
||||
|
||||
protected $em;
|
||||
|
||||
public function __construct(EntityManagerInterface $em)
|
||||
{
|
||||
$this->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;
|
||||
}
|
||||
|
||||
}
|
||||
169
src/Command/UpdateCMBMigratedCustomerVehicleBatteryCommand.php
Normal file
169
src/Command/UpdateCMBMigratedCustomerVehicleBatteryCommand.php
Normal file
|
|
@ -0,0 +1,169 @@
|
|||
<?php
|
||||
|
||||
namespace App\Command;
|
||||
|
||||
use Symfony\Component\Console\Command\Command;
|
||||
use Symfony\Component\Console\Input\InputArgument;
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
|
||||
use App\Entity\CustomerVehicle;
|
||||
use App\Entity\CMBLegacyJobOrder;
|
||||
use App\Entity\Battery;
|
||||
|
||||
class UpdateCMBMigratedCustomerVehicleBatteryCommand extends Command
|
||||
{
|
||||
// constants for battery manufacturer names
|
||||
const STR_CENTURY = 'century';
|
||||
const STR_MOTOLITE = 'motolite';
|
||||
|
||||
// constants for battery models
|
||||
const STR_MARATHONER = 'marathoner';
|
||||
const STR_CLASSIC = 'classic';
|
||||
const STR_EXCEL = 'excel';
|
||||
const STR_SDFC = 'sdfc';
|
||||
|
||||
protected $em;
|
||||
protected $batt_hash;
|
||||
|
||||
public function __construct(EntityManagerInterface $em)
|
||||
{
|
||||
$this->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;
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Reference in a new issue