Add command to create customer and customer vehicle from warranty. #274
This commit is contained in:
parent
4c5733f891
commit
9c4db034d0
2 changed files with 162 additions and 0 deletions
161
src/Command/CreateCustomerFromWarrantyCommand.php
Normal file
161
src/Command/CreateCustomerFromWarrantyCommand.php
Normal file
|
|
@ -0,0 +1,161 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Command;
|
||||||
|
|
||||||
|
use Symfony\Component\Console\Command\Command;
|
||||||
|
use Symfony\Component\Console\Input\InputOption;
|
||||||
|
use Symfony\Component\Console\Input\InputInterface;
|
||||||
|
use Symfony\Component\Console\Output\OutputInterface;
|
||||||
|
|
||||||
|
use Doctrine\Common\Persistence\ObjectManager;
|
||||||
|
|
||||||
|
use App\Entity\Warranty;
|
||||||
|
use App\Entity\Customer;
|
||||||
|
use App\Entity\CustomerVehicle;
|
||||||
|
|
||||||
|
class CreateCustomerFromWarrantyCommand extends Command
|
||||||
|
{
|
||||||
|
protected $em;
|
||||||
|
protected $cust_index;
|
||||||
|
|
||||||
|
public function __construct(ObjectManager $em)
|
||||||
|
{
|
||||||
|
$this->em = $em;
|
||||||
|
|
||||||
|
$this->loadCustomers();
|
||||||
|
|
||||||
|
parent::__construct();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function configure()
|
||||||
|
{
|
||||||
|
$this->setName('customer:createfromwarranty')
|
||||||
|
->setDescription('Create customers from existing warranties.')
|
||||||
|
->setHelp('Creates customers from existing warranties.');
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function execute(InputInterface $input, OutputInterface $output)
|
||||||
|
{
|
||||||
|
// get all warranties
|
||||||
|
$warranties = $this->em->getRepository(Warranty::class)->findAll();
|
||||||
|
|
||||||
|
foreach($warranties as $warr)
|
||||||
|
{
|
||||||
|
// check if warranty mobile already exists in customer
|
||||||
|
$w_mobile = $warr->getMobileNumber();
|
||||||
|
if (empty($w_mobile))
|
||||||
|
{
|
||||||
|
// TODO: for now, if warranty mobile number is empty, do nothing
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// parse warranty mobile in case of multiple numbers
|
||||||
|
// check for spaces, slash, and forward slash
|
||||||
|
$w_mobile_array = [];
|
||||||
|
if (preg_match('/[\/\\]/', $w_mobile))
|
||||||
|
{
|
||||||
|
$w_mobile_array = preg_split('/[\/\\]/', $w_mobile);
|
||||||
|
}
|
||||||
|
// only one mobile number
|
||||||
|
$w_mobile_array[] = $w_mobile;
|
||||||
|
}
|
||||||
|
|
||||||
|
$cust_found = false;
|
||||||
|
|
||||||
|
// set values for new customer vehicle
|
||||||
|
$w_plate_number = $warr->getPlateNumber();
|
||||||
|
$default_cv_color = 'White';
|
||||||
|
// TODO: add checking that default manufacturer is not null
|
||||||
|
$default_manufacturer = $this->em->getRepository(VehicleManufacturer::class)->findBy('name' =>'Unknown');
|
||||||
|
$default_make = 'Unknown';
|
||||||
|
// search cust_index for numbers in mobile_array
|
||||||
|
foreach ($w_mobile_array as $w_mobile_num)
|
||||||
|
{
|
||||||
|
// if present, check if customer vehicle plate number matches warranty plate number?
|
||||||
|
foreach ($this->cust_index as $key => $customer)
|
||||||
|
{
|
||||||
|
$c_mobile = $customer->getPhoneMobile();
|
||||||
|
if (!(empty($c_mobile)))
|
||||||
|
{
|
||||||
|
if (strpos($c_mobile, $w_mobile_num))
|
||||||
|
{
|
||||||
|
// mobile number belongs to existing customer
|
||||||
|
// get customer vehicles
|
||||||
|
$c_vehicles = $customer->getVehicles();
|
||||||
|
if (!(empty($c_vehicles))
|
||||||
|
{
|
||||||
|
// check if plate number of customer vehicle matches warranty plate number
|
||||||
|
foreach ($c_vehicles as $c_vehicle)
|
||||||
|
{
|
||||||
|
$cv_plate_number = $c_vehicle->getPlateNumber();
|
||||||
|
if ($cv_plate_number == $w_plate_number)
|
||||||
|
{
|
||||||
|
// get out of all loops since current warranty belongs to an
|
||||||
|
// existing customer and customer vehicle
|
||||||
|
break 3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// add customer vehicle to existing customer with unknown manufacturer and make
|
||||||
|
$this->createCustomerVehicle($customer, $default_manufacturer,
|
||||||
|
$default_make, $w_plate_number, $default_cv_color);
|
||||||
|
}
|
||||||
|
$cust_found = true;
|
||||||
|
}
|
||||||
|
// no customer mobile number, ignore for now
|
||||||
|
}
|
||||||
|
// if customer not found, add customer and customer vehicle
|
||||||
|
if ($cust_found != true)
|
||||||
|
{
|
||||||
|
// get warranty first name, last name
|
||||||
|
$w_first_name = $warr->getFirstName();
|
||||||
|
$w_last_name = $warr->getLastName();
|
||||||
|
|
||||||
|
$new_cust = new Customer();
|
||||||
|
$new_cust->setFirstName($w_first_name)
|
||||||
|
->setLastName($w_last_name);
|
||||||
|
|
||||||
|
$this->em->persist($cust);
|
||||||
|
|
||||||
|
$this->createCustomerVehicle($cust, $default_manufacturer,
|
||||||
|
$default_make, $w_plate_number, $default_cv_color)
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function loadCustomers()
|
||||||
|
{
|
||||||
|
// get all customers
|
||||||
|
$customers = $this->em->getRepository(Customer::class)->findAll();
|
||||||
|
|
||||||
|
$this->cust_index = [];
|
||||||
|
foreach ($customers as $customer)
|
||||||
|
{
|
||||||
|
$cust_id = $customer->getID();
|
||||||
|
$this->cust_index[$cust_id] = $customer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function createCustomerVehicle(Customer $cust, $manufacturer, $make,
|
||||||
|
$plate_number, $color)
|
||||||
|
{
|
||||||
|
$new_vehicle = new Vehicle();
|
||||||
|
$new_cv = new CustomerVehicle();
|
||||||
|
|
||||||
|
// get manufacturer and make with name 'unknown'
|
||||||
|
$new_vehicle->setManufacturer($manufacturer)
|
||||||
|
|
||||||
|
// TODO: remove the assert not blank for color and model year
|
||||||
|
$new_cv->setCustomer($cust)
|
||||||
|
->setPlateNumber($plate_number)
|
||||||
|
->setModelYear(0)
|
||||||
|
->setColor($color)
|
||||||
|
->setStatusCondition(VehicleStatusCondition::BRAND_NEW)
|
||||||
|
->setFuelType(FuelType::GAS)
|
||||||
|
->setVehicle($vehicle);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -334,6 +334,7 @@ class APIController extends Controller
|
||||||
|
|
||||||
|
|
||||||
// TODO: check if we have the number registered before and merge
|
// TODO: check if we have the number registered before and merge
|
||||||
|
// TODO: check if mobile matches mobile of customer
|
||||||
$dupe_sess = $this->findNumberSession($this->session->getPhoneNumber());
|
$dupe_sess = $this->findNumberSession($this->session->getPhoneNumber());
|
||||||
if ($dupe_sess != null)
|
if ($dupe_sess != null)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue