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:
Kendrick Chan 2020-09-15 01:24:24 +00:00
commit 1c1096da17
3 changed files with 227 additions and 1 deletions

View file

@ -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);

View 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;
}
}

View 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;
}
}