Resolve "Fix migration script for seocndary battery and price" #862

Merged
jankstudio merged 2 commits from 58-fix-migration-script-for-seocndary-battery-and-price into master 2018-03-25 18:06:02 +00:00
3 changed files with 1107 additions and 64 deletions

File diff suppressed because one or more lines are too long

View file

@ -22,10 +22,18 @@ use App\Entity\BatterySize;
class ImportVehicleBatteryCommand extends Command class ImportVehicleBatteryCommand extends Command
{ {
protected $em; protected $em;
protected $vmfg_index;
protected $v_index;
protected $bmodel_index;
protected $bsize_index;
protected $b_index;
public function __construct(ObjectManager $om) public function __construct(ObjectManager $om)
{ {
$this->em = $om; $this->em = $om;
$this->vmfg_index = [];
$this->v_index = [];
$this->b_index = [];
parent::__construct(); parent::__construct();
} }
@ -38,9 +46,81 @@ class ImportVehicleBatteryCommand extends Command
->addArgument('file', InputArgument::REQUIRED, 'Path to the CSV file.'); ->addArgument('file', InputArgument::REQUIRED, 'Path to the CSV file.');
} }
protected function populateVehicleIndex()
{
$vs = $this->em->getRepository(Vehicle::class)->findAll();
$this->v_index = [];
$this->vmfg_index = [];
foreach ($vs as $v)
{
$mfg_name = $v->getManufacturer()->getName();
$this->vmfg_index[$mfg_name] = $v->getManufacturer();
if (!isset($this->v_index[$mfg_name]))
$this->v_index[$mfg_name] = [];
$this->v_index[$mfg_name][$v->getMake() . '|' . $v->getModelYearFrom() . '|' . $v->getModelYearTo()] = $v;
}
}
protected function populateBatteryIndex()
{
$bs = $this->em->getRepository(Battery::class)->findAll();
$this->b_index = [];
$this->bmodel_index = [];
$this->bsize_index = [];
foreach ($bs as $b)
{
$this->bsize_index[$b->getSize()->getName()] = $b->getSize();
$this->bmodel_index[$b->getModel()->getName()] = $b->getModel();
$this->b_index[$b->getSize()->getName() . '|' . $b->getModel()->getName()] = $b;
}
}
protected function handleBatteryData(&$batteries, &$b_models, $batt_field, $row_num)
{
// split battery into parts
$batt = trim($batt_field);
if ($batt == 'AGM')
{
$b_model = 'AGM';
$b_size = 'AGM';
}
else
{
$res = preg_match_all("/(.*)(GOLD|EXCEL|ENDURO|TRUCKMASTER|EFB)(.*)/", $batt, $matches);
if ($res)
{
$b_size = trim($matches[1][0]);
$b_model = trim(trim($matches[2][0]) . ' ' . trim($matches[3][0]));
}
else
{
$b_size = $batt;
$b_model = '';
}
// print_r($b_size);
// print_r($b_model);
}
// link battery to row num for vehicle matching later
if (!isset($batteries[$b_size]))
$batteries[$b_size] = [];
if (!isset($batteries[$b_size][$b_model]))
$batteries[$b_size][$b_model] = [];
$batteries[$b_size][$b_model][] = $row_num;
$b_models[$b_model] = null;
}
protected function execute(InputInterface $input, OutputInterface $output) protected function execute(InputInterface $input, OutputInterface $output)
{ {
$csv_file = $input->getArgument('file'); $csv_file = $input->getArgument('file');
$this->populateVehicleIndex();
$this->populateBatteryIndex();
/* /*
CSV column order: CSV column order:
@ -103,44 +183,14 @@ class ImportVehicleBatteryCommand extends Command
'model' => $model, 'model' => $model,
]; ];
// split battery into parts // battery
$batt = trim($fields[3]); $this->handleBatteryData($batteries, $b_models, $fields[3], $row_num);
if ($batt == 'AGM') $this->handleBatteryData($batteries, $b_models, $fields[4], $row_num);
{
$b_model = 'AGM';
$b_size = 'AGM';
}
else
{
$res = preg_match_all("/(.*)(GOLD|EXCEL|TRUCKMASTER)(.*)/", $batt, $matches);
if ($res)
{
$b_size = trim($matches[1][0]);
$b_model = trim(trim($matches[2][0]) . ' ' . trim($matches[3][0]));
}
else
{
$b_size = $batt;
$b_model = '';
}
// print_r($b_size);
// print_r($b_model);
}
// link battery to row num for vehicle matching later
if (!isset($batteries[$b_size]))
$batteries[$b_size] = [];
if (!isset($batteries[$b_size][$b_model]))
$batteries[$b_size][$b_model] = [];
$batteries[$b_size][$b_model][] = $row_num;
$b_models[$b_model] = null;
$row_num++; $row_num++;
} }
// print_r($b_models);
// print_r($batteries); // print_r($batteries);
// save to db // save to db
@ -149,10 +199,18 @@ class ImportVehicleBatteryCommand extends Command
$vehicle_index = []; $vehicle_index = [];
foreach ($vbrands as $brand_name => $vbrand) foreach ($vbrands as $brand_name => $vbrand)
{ {
// manufacturer // get manufacturer or make one
$mfg = new VehicleManufacturer(); if (!isset($this->vmfg_index[$brand_name]))
$mfg->setName($brand_name); {
$em->persist($mfg); // manufacturer
$mfg = new VehicleManufacturer();
$mfg->setName($brand_name);
$em->persist($mfg);
}
else
{
$mfg = $this->vmfg_index[$brand_name];
}
// vehicles // vehicles
foreach ($vbrand['vehicles'] as $row_num => $vdata) foreach ($vbrand['vehicles'] as $row_num => $vdata)
@ -174,14 +232,23 @@ class ImportVehicleBatteryCommand extends Command
$m_year_to = 0; $m_year_to = 0;
} }
// vehicle if (!isset($this->v_index[$brand_name][$vdata['make'] . '|' . intval($m_year_from) . '|' . intval($m_year_to)]))
$vehicle = new Vehicle(); {
$vehicle->setManufacturer($mfg) echo "NO MATCH ";
->setMake($vdata['make']) echo $vdata['make'] . '|' . intval($m_year_from) . '|' . intval($m_year_to) + 0;
->setModelYearFrom($m_year_from) echo "\n";
->setModelYearTo($m_year_to); // vehicle
$vehicle = new Vehicle();
$em->persist($vehicle); $vehicle->setManufacturer($mfg)
->setMake($vdata['make'])
->setModelYearFrom($m_year_from)
->setModelYearTo($m_year_to);
$em->persist($vehicle);
}
else
{
$vehicle = $this->v_index[$brand_name][$vdata['make'] . '|' . intval($m_year_from) . '|' . intval($m_year_to)];
}
// update our data for battery linking // update our data for battery linking
$vehicle_index[$row_num] = $vehicle; $vehicle_index[$row_num] = $vehicle;
@ -193,9 +260,14 @@ class ImportVehicleBatteryCommand extends Command
// battery models // battery models
foreach ($b_models as $b_model => $throw_away) foreach ($b_models as $b_model => $throw_away)
{ {
$bmodel = new BatteryModel(); if (!isset($this->bmodel_index[$b_model]))
$bmodel->setName($b_model); {
$em->persist($bmodel); $bmodel = new BatteryModel();
$bmodel->setName($b_model);
$em->persist($bmodel);
}
else
$bmodel = $this->bmodel_index[$b_model];
$b_models[$b_model] = $bmodel; $b_models[$b_model] = $bmodel;
} }
@ -204,25 +276,35 @@ class ImportVehicleBatteryCommand extends Command
$bmfg = $em->getRepository(BatteryManufacturer::class)->find(1); $bmfg = $em->getRepository(BatteryManufacturer::class)->find(1);
foreach ($batteries as $b_size => $batt_models) foreach ($batteries as $b_size => $batt_models)
{ {
$bsize = new BatterySize(); if (!isset($this->bsize_index[$b_size]))
$bsize->setName($b_size); {
$em->persist($bsize); $bsize = new BatterySize();
$bsize->setName($b_size);
$em->persist($bsize);
}
else
$bsize = $this->bsize_index[$b_size];
foreach ($batt_models as $b_model => $vehicle_rows) foreach ($batt_models as $b_model => $vehicle_rows)
{ {
$bmodel = $b_models[$b_model]; $bmodel = $b_models[$b_model];
$battery = new Battery(); if (!isset($this->b_index[$bsize->getName() . '|' . $bmodel->getName()]))
$battery->setManufacturer($bmfg) {
->setModel($bmodel) $battery = new Battery();
->setSize($bsize) $battery->setManufacturer($bmfg)
->setProductCode('') ->setModel($bmodel)
->setSAPCode('') ->setSize($bsize)
->setWarrantyPrivate(21) ->setProductCode('')
->setWarrantyCommercial(6) ->setSAPCode('')
->setSellingPrice(5000); ->setWarrantyPrivate(21)
->setWarrantyCommercial(6)
->setSellingPrice(5000);
$em->persist($battery); $em->persist($battery);
}
else
$battery = $this->b_index[$bsize->getName() . '|' . $bmodel->getName()];
// link to vehicles // link to vehicles
foreach ($vehicle_rows as $row_num) foreach ($vehicle_rows as $row_num)

View file

@ -47,7 +47,7 @@ class Battery
// vehicle // vehicle
/** /**
* @ORM\ManyToMany(targetEntity="Vehicle", inversedBy="batteries") * @ORM\ManyToMany(targetEntity="Vehicle", inversedBy="batteries", indexBy="id")
* @ORM\JoinTable(name="battery_vehicle") * @ORM\JoinTable(name="battery_vehicle")
*/ */
protected $vehicles; protected $vehicles;
@ -181,7 +181,7 @@ class Battery
public function addVehicle(Vehicle $vehicle) public function addVehicle(Vehicle $vehicle)
{ {
$this->vehicles->add($vehicle); $this->vehicles[$vehicle->getID()] = $vehicle;
return $this; return $this;
} }