Merge branch '270-final-cmb-fixes' of gitlab.com:jankstudio/resq into 299-cmb-realtime-map
This commit is contained in:
commit
68a92b2daf
17 changed files with 894 additions and 168 deletions
|
|
@ -50,3 +50,6 @@ GEOFENCE_ENABLE=settotrueorfalse
|
|||
CVU_MFG_ID=insertmfgidforunknownvehicles
|
||||
CVU_BRAND_ID=insertbrandidforunknownvehicles
|
||||
|
||||
# country code prefix
|
||||
COUNTRY_CODE=+insertcountrycodehere
|
||||
|
||||
|
|
|
|||
|
|
@ -53,16 +53,22 @@ class TestAPICommand extends Command
|
|||
'date_expire' => '20191001',
|
||||
'first_name' => 'First',
|
||||
'last_name' => 'Last',
|
||||
'mobile_number' => '12345678910',
|
||||
'mobile_number' => '09231234567',
|
||||
];
|
||||
$api->post('/capi/warranties', $params);
|
||||
//$api->post('/capi/warranties', $params);
|
||||
|
||||
// get all warranties
|
||||
$api->get('/capi/warranties');
|
||||
$params = [
|
||||
'order' => 'DESC',
|
||||
'limit' => '5',
|
||||
'start' => '1',
|
||||
];
|
||||
|
||||
$api->get('/capi/warranties', $params);
|
||||
|
||||
|
||||
// warranty find
|
||||
$api->get('/capi/warranties/' . $serial);
|
||||
//$api->get('/capi/warranties/' . $serial);
|
||||
|
||||
// warranty update
|
||||
$id = 86811;
|
||||
|
|
@ -77,7 +83,7 @@ class TestAPICommand extends Command
|
|||
'last_name' => 'Last',
|
||||
'mobile_number' => '123456789111',
|
||||
];
|
||||
$api->post('/capi/warranties/'. $id, $params);
|
||||
//$api->post('/capi/warranties/'. $id, $params);
|
||||
|
||||
// warranty set privacy policy
|
||||
$id = 86811;
|
||||
|
|
@ -85,7 +91,7 @@ class TestAPICommand extends Command
|
|||
$params = [
|
||||
'privacy_policy_id' => $policy_id,
|
||||
];
|
||||
$api->post('/capi/warranties/' . $id .'/privacypolicy', $params);
|
||||
//$api->post('/capi/warranties/' . $id .'/privacypolicy', $params);
|
||||
|
||||
// warranty claim
|
||||
$id = 86811;
|
||||
|
|
@ -93,27 +99,27 @@ class TestAPICommand extends Command
|
|||
$params = [
|
||||
'serial' => $serial,
|
||||
];
|
||||
$api->post('/capi/warranties/' . $id . '/claim', $params);
|
||||
//$api->post('/capi/warranties/' . $id . '/claim', $params);
|
||||
|
||||
// warranty cancel
|
||||
$id = 86811;
|
||||
$api->get('/capi/warranties/' . $id . '/cancel');
|
||||
//$api->get('/capi/warranties/' . $id . '/cancel');
|
||||
|
||||
// plate warranty
|
||||
$api->get('/capi/plates/' . $plate_num . '/warranties');
|
||||
//$api->get('/capi/plates/' . $plate_num . '/warranties');
|
||||
|
||||
// warranty delete
|
||||
$id = 86811;
|
||||
$api->post('/capi/warranties/' . $id . '/delete');
|
||||
//$api->post('/capi/warranties/' . $id . '/delete');
|
||||
|
||||
// battery
|
||||
$api->get('/capi/battery_brands');
|
||||
$api->get('/capi/battery_sizes');
|
||||
$api->get('/capi/batteries');
|
||||
//$api->get('/capi/battery_brands');
|
||||
//$api->get('/capi/battery_sizes');
|
||||
//$api->get('/capi/batteries');
|
||||
|
||||
// vehicle
|
||||
$api->get('/capi/vehicle_manufacturers');
|
||||
$api->get('/capi/vehicles');
|
||||
//$api->get('/capi/vehicle_manufacturers');
|
||||
//$api->get('/capi/vehicles');
|
||||
|
||||
// privacy policy
|
||||
$privacy_policy_id = 2;
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ parameters:
|
|||
api_access_key: 'api_access_keys'
|
||||
app_acl_file: 'acl.yaml'
|
||||
app_access_key: 'access_keys'
|
||||
cvu_brand_id: "%env(CVU_BRAND_ID)%"
|
||||
|
||||
services:
|
||||
# default configuration for services in *this* file
|
||||
|
|
@ -91,6 +92,10 @@ services:
|
|||
arguments:
|
||||
$geofence_flag: "%env(GEOFENCE_ENABLE)%"
|
||||
|
||||
App\Service\WarrantyHandler:
|
||||
arguments:
|
||||
$em: "@doctrine.orm.entity_manager"
|
||||
|
||||
App\Command\SetCustomerPrivacyPolicyCommand:
|
||||
arguments:
|
||||
$policy_promo: "%env(POLICY_PROMO)%"
|
||||
|
|
@ -159,14 +164,26 @@ services:
|
|||
#App\Service\InvoiceGeneratorInterface: "@App\\Service\\InvoiceGenerator\\ResqInvoiceGenerator"
|
||||
|
||||
# job order generator
|
||||
App\Service\JobOrderHandler\CMBJobOrderHandler: ~
|
||||
#App\Service\JobOrderHandler\ResqJobOrderHandler:
|
||||
# arguments:
|
||||
# $country_code: "%env(COUNTRY_CODE)%"
|
||||
|
||||
App\Service\JobOrderHandler\CMBJobOrderHandler:
|
||||
arguments:
|
||||
$country_code: "%env(COUNTRY_CODE)%"
|
||||
|
||||
#job order generator interface
|
||||
App\Service\JobOrderHandlerInterface: "@App\\Service\\JobOrderHandler\\CMBJobOrderHandler"
|
||||
#App\Service\JobOrderHandlerInterface: "@App\\Service\\JobOrderHandler\\ResqJobOrderHandler"
|
||||
|
||||
# customer generator
|
||||
App\Service\CustomerHandler\CMBCustomerHandler: ~
|
||||
App\Service\CustomerHandler\CMBCustomerHandler:
|
||||
arguments:
|
||||
$country_code: "%env(COUNTRY_CODE)%"
|
||||
|
||||
#App\Service\CustomerHandler\ResqCustomerHandler:
|
||||
# arguments:
|
||||
# $country_code: "%env(COUNTRY_CODE)%"
|
||||
|
||||
# customer generator interface
|
||||
App\Service\CustomerHandlerInterface: "@App\\Service\\CustomerHandler\\CMBCustomerHandler"
|
||||
|
|
|
|||
75
src/Command/ComputeWarrantyExpiryDateCommand.php
Normal file
75
src/Command/ComputeWarrantyExpiryDateCommand.php
Normal file
|
|
@ -0,0 +1,75 @@
|
|||
<?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\Battery;
|
||||
|
||||
use App\Service\WarrantyHandler;
|
||||
|
||||
class ComputeWarrantyExpiryDateCommand extends Command
|
||||
{
|
||||
protected $em;
|
||||
protected $wh;
|
||||
|
||||
public function __construct(ObjectManager $em, WarrantyHandler $wh)
|
||||
{
|
||||
$this->em = $em;
|
||||
$this->wh = $wh;
|
||||
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
protected function configure()
|
||||
{
|
||||
$this->setName('warranty:computeexpirydate')
|
||||
->setDescription('Compute expiry date for existing warranties.')
|
||||
->setHelp('Compute expiry date for existing warranties.');
|
||||
}
|
||||
|
||||
protected function execute(InputInterface $input, OutputInterface $output)
|
||||
{
|
||||
$warr_q = $this->em->createQuery('select w from App\Entity\Warranty w where w.date_expire is null');
|
||||
$warranties = $warr_q->iterate();
|
||||
|
||||
foreach($warranties as $row)
|
||||
{
|
||||
$warr = $row[0];
|
||||
|
||||
error_log('Processing warranty for ' . $warr->getID());
|
||||
|
||||
$date_purchase = $warr->getDatePurchase();
|
||||
|
||||
$batteries = $this->wh->getBatteriesForWarranty($warr);
|
||||
if (!empty($batteries))
|
||||
{
|
||||
$warranty_class = $warr->getWarrantyClass();
|
||||
|
||||
$warr_period = $this->wh->getWarrantyPeriod($batteries, $warranty_class);
|
||||
|
||||
if ($warr_period != null)
|
||||
{
|
||||
$expiry_date = $this->wh->computeDateExpire($date_purchase, $warr_period);
|
||||
}
|
||||
else
|
||||
{
|
||||
$expiry_date = $date_purchase;
|
||||
}
|
||||
|
||||
// save expiry date
|
||||
$warr->setDateExpire($expiry_date);
|
||||
|
||||
$this->em->persist($warr);
|
||||
$this->em->flush();
|
||||
}
|
||||
|
||||
$this->em->clear();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -7,7 +7,6 @@ use Symfony\Component\Console\Input\InputOption;
|
|||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Input\InputArgument;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
use Symfony\Component\Dotenv\Dotenv;
|
||||
|
||||
use Doctrine\Common\Persistence\ObjectManager;
|
||||
|
||||
|
|
|
|||
98
src/Command/UpdateCustomerVehicleWarrantyCommand.php
Normal file
98
src/Command/UpdateCustomerVehicleWarrantyCommand.php
Normal file
|
|
@ -0,0 +1,98 @@
|
|||
<?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\CustomerVehicle;
|
||||
|
||||
use App\Service\WarrantyHandler;
|
||||
|
||||
class UpdateCustomerVehicleWarrantyCommand extends Command
|
||||
{
|
||||
protected $em;
|
||||
protected $wh;
|
||||
|
||||
public function __construct(ObjectManager $em, WarrantyHandler $wh)
|
||||
{
|
||||
$this->em = $em;
|
||||
$this->wh = $wh;
|
||||
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
protected function configure()
|
||||
{
|
||||
$this->setName('customervehicle:updatewarrantyinfo')
|
||||
->setDescription('Update customer vehicle warranty.')
|
||||
->setHelp('Update customer vehicle warranty.');
|
||||
}
|
||||
|
||||
protected function execute(InputInterface $input, OutputInterface $output)
|
||||
{
|
||||
// get all warranties
|
||||
// since it's possible that the same plate number will have multiple warranties, order them from earliest to latest
|
||||
$warr_q = $this->em->createQuery('select w from App\Entity\Warranty w where w.plate_number is not null order by w.date_purchase asc');
|
||||
$warranties = $warr_q->iterate();
|
||||
|
||||
foreach ($warranties as $row)
|
||||
{
|
||||
$warr = $row[0];
|
||||
|
||||
// clean plate number
|
||||
$plate_number = $this->wh->cleanPlateNumber($warr->getPlateNumber());
|
||||
|
||||
// get other warranty information
|
||||
$serial = $warr->getSerial();
|
||||
$expiry_date = $warr->getDateExpire();
|
||||
|
||||
// TODO: check length of serial for now. Should not exceed 20.
|
||||
// there is a warranty with 2 serial codes in live
|
||||
// for now, ignore the warranty
|
||||
if (strlen($serial) > 20)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// find battery
|
||||
$batteries = $this->wh->getBatteriesForWarranty($warr);
|
||||
|
||||
// find customer vehicle using plate number
|
||||
/*
|
||||
error_log('Finding customer vehicle with plate number ' . $plate_number);
|
||||
$cust_vehicles = $this->em->getRepository(CustomerVehicle::class)->findBy(['plate_number' => $plate_number]);
|
||||
|
||||
if (!empty($cust_vehicles))
|
||||
{
|
||||
if (!empty($batteries))
|
||||
{
|
||||
// set current battery to the first battery in list.
|
||||
// there are cases where multiple batteries linked to an SAP code.
|
||||
$battery = $batteries[0];
|
||||
$battery_id = $battery->getID();
|
||||
}
|
||||
$q = $this->em->createQuery('update App\Entity\CustomerVehicle cv
|
||||
set cv.curr_battery = :batt_id,
|
||||
cv.warranty_code = :serial,
|
||||
cv.warranty_expiration = :expiry_date
|
||||
where cv.plate_number = :plate_number')
|
||||
->setParameters([
|
||||
'batt_id' => $battery_id,
|
||||
'serial' => $serial,
|
||||
'expiry_date' => $expiry_date,
|
||||
'plate_number' => $plate_number]);
|
||||
$q->execute();
|
||||
|
||||
} */
|
||||
$this->wh->updateCustomerVehicle($serial, $batteries, $plate_number, $expiry_date);
|
||||
|
||||
$this->em->detach($row[0]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -17,10 +17,16 @@ use App\Entity\SAPBattery;
|
|||
use App\Entity\SAPBatterySize;
|
||||
use App\Entity\SAPBatteryBrand;
|
||||
use App\Entity\PrivacyPolicy;
|
||||
use App\Entity\Customer;
|
||||
use App\Entity\CustomerVehicle;
|
||||
use App\Entity\Vehicle;
|
||||
|
||||
use App\Ramcar\NameValue;
|
||||
use App\Ramcar\WarrantyClass;
|
||||
use App\Ramcar\WarrantyStatus;
|
||||
use App\Ramcar\FuelType;
|
||||
use App\Ramcar\VehicleStatusCondition;
|
||||
|
||||
use DateTime;
|
||||
|
||||
use Catalyst\APIBundle\Access\Generator as ACLGenerator;
|
||||
|
|
@ -226,6 +232,9 @@ class WarrantyController extends APIController
|
|||
try
|
||||
{
|
||||
$em->persist($warr);
|
||||
|
||||
$this->getCustomerFromMobile($em, $warr);
|
||||
|
||||
$em->flush();
|
||||
}
|
||||
catch (UniqueConstraintViolationException $e)
|
||||
|
|
@ -488,9 +497,156 @@ class WarrantyController extends APIController
|
|||
}
|
||||
|
||||
$em->persist($warr);
|
||||
$em->flush();
|
||||
|
||||
return new APIResponse(true, 'Privacy policy for warranty set successfully.');
|
||||
|
||||
}
|
||||
|
||||
protected function getCustomerFromMobile($em, $warranty)
|
||||
{
|
||||
$w_mobile = $warranty->getMobileNumber();
|
||||
if (empty($w_mobile))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
// set values for new customer vehicle
|
||||
$w_plate_number = $this->cleanPlateNumber($warranty->getPlateNumber());
|
||||
|
||||
$cust_found = false;
|
||||
|
||||
$w_mobile_num = trim($w_mobile);
|
||||
|
||||
// does it fit our 09XXXXXXXXX pattern?
|
||||
if (preg_match('/^09[0-9]{9}$/', $w_mobile_num))
|
||||
{
|
||||
// remove first '0'
|
||||
$w_mobile_num = substr($w_mobile_num, 1);
|
||||
error_log("CONVERTED TO $w_mobile_num");
|
||||
}
|
||||
|
||||
// does it fit our 9XXXXXXXXX pattern?
|
||||
if (!preg_match('/^9[0-9]{9}$/', $w_mobile_num))
|
||||
return null;
|
||||
|
||||
/*
|
||||
// min length 2
|
||||
// TODO: we need to check proper phone number format
|
||||
// format should be '9XXXXXXXXX'
|
||||
// TODO: if format doesn't fit and there's a 0 or 63 prefix, we should be able to detect and convert
|
||||
if (strlen($w_mobile_num <= 2))
|
||||
continue;
|
||||
*/
|
||||
|
||||
$customers = $this->findCustomerByNumber($em, $w_mobile_num);
|
||||
|
||||
if (!empty($customers))
|
||||
{
|
||||
error_log('found customer for ' . $w_mobile_num);
|
||||
foreach ($customers as $customer)
|
||||
{
|
||||
// get customer vehicles for customer
|
||||
$c_vehicles = $customer->getVehicles();
|
||||
|
||||
$cv_found = false;
|
||||
if (!empty($c_vehicles))
|
||||
{
|
||||
// check if plate number of customer vehicle matches warranty plate number
|
||||
foreach ($c_vehicles as $c_vehicle)
|
||||
{
|
||||
$clean_cv_plate = $this->cleanPlateNumber($c_vehicle->getPlateNumber());
|
||||
|
||||
// check if it's already there
|
||||
if ($clean_cv_plate == $w_plate_number)
|
||||
{
|
||||
// customer and customer vehicle already exists
|
||||
$cv_found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// if there was a customer vehicle matched
|
||||
if ($cv_found)
|
||||
{
|
||||
// vehicle found, do nothing.
|
||||
error_log('vehicle found - ' . $w_plate_number);
|
||||
}
|
||||
else
|
||||
{
|
||||
// customer exists but not customer vehicle
|
||||
// add customer vehicle to existing customer with unknown manufacturer and make
|
||||
error_log('new vehicle - ' . $w_plate_number);
|
||||
$this->createCustomerVehicle($em, $customer, $this->getDefaultVehicle($em), $w_plate_number);
|
||||
}
|
||||
}
|
||||
}
|
||||
// customer not found
|
||||
else
|
||||
{
|
||||
error_log('NEW customer and vehicle - ' . $w_plate_number);
|
||||
// customer not found, add customer and customer vehicle
|
||||
// get warranty first name, last name
|
||||
$w_first_name = $warranty->getFirstName();
|
||||
$w_last_name = $warranty->getLastName();
|
||||
|
||||
$new_cust = new Customer();
|
||||
$new_cust->setFirstName($w_first_name)
|
||||
->setLastName($w_last_name)
|
||||
->setPhoneMobile($w_mobile_num);
|
||||
|
||||
$em->persist($new_cust);
|
||||
|
||||
$this->createCustomerVehicle($em, $new_cust, $this->getDefaultVehicle($em), $w_plate_number);
|
||||
}
|
||||
|
||||
$em->flush();
|
||||
$em->clear();
|
||||
}
|
||||
|
||||
protected function getDefaultVehicle($em)
|
||||
{
|
||||
// get default vehicle
|
||||
$cvu_brand_id = $this->getParameter('cvu_brand_id');
|
||||
$default_vehicle = $em->getRepository(Vehicle::class)->find($cvu_brand_id);
|
||||
if ($default_vehicle == null)
|
||||
{
|
||||
$output->writeln("Need to add vehicle with default values.");
|
||||
return null;
|
||||
}
|
||||
|
||||
return $default_vehicle;
|
||||
}
|
||||
|
||||
|
||||
protected function cleanPlateNumber($plate)
|
||||
{
|
||||
// remove spaces and make upper case
|
||||
return strtoupper(str_replace(' ', '', $plate));
|
||||
}
|
||||
|
||||
protected function createCustomerVehicle($em, Customer $cust, $vehicle, $plate_number)
|
||||
{
|
||||
$new_cv = new CustomerVehicle();
|
||||
|
||||
$new_cv->setCustomer($cust)
|
||||
->setPlateNumber($plate_number)
|
||||
->setStatusCondition(VehicleStatusCondition::BRAND_NEW)
|
||||
->setModelYear('')
|
||||
->setColor('')
|
||||
->setFuelType(FuelType::GAS)
|
||||
->setHasMotoliteBattery(true)
|
||||
->setVehicle($vehicle);
|
||||
|
||||
$em->persist($new_cv);
|
||||
}
|
||||
|
||||
|
||||
protected function findCustomerByNumber($em, $number)
|
||||
{
|
||||
$customers = $em->getRepository(Customer::class)->findBy(['phone_mobile' => $number]);
|
||||
return $customers;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,10 +7,14 @@ use App\Entity\SAPBattery;
|
|||
use App\Entity\Battery;
|
||||
use App\Entity\BatteryModel;
|
||||
use App\Entity\BatterySize;
|
||||
use App\Entity\Invoice;
|
||||
use App\Entity\CustomerVehicle;
|
||||
|
||||
use App\Ramcar\WarrantyClass;
|
||||
use App\Ramcar\WarrantyStatus;
|
||||
|
||||
use App\Service\WarrantyHandler;
|
||||
|
||||
use Doctrine\ORM\Query;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
|
|
@ -372,13 +376,14 @@ class WarrantyController extends Controller
|
|||
/**
|
||||
* @Menu(selected="warranty_list")
|
||||
*/
|
||||
public function uploadSubmit(Request $req, EntityManagerInterface $em)
|
||||
public function uploadSubmit(Request $req, EntityManagerInterface $em,
|
||||
WarrantyHandler $wh)
|
||||
{
|
||||
// retrieve temporary info for file
|
||||
$file = $req->files->get('csv_file');
|
||||
|
||||
// process the csv file
|
||||
$inv_entries = $this->processWarrantyFile($file, $em);
|
||||
$inv_entries = $this->processWarrantyFile($file, $em, $wh);
|
||||
|
||||
$resp = new StreamedResponse();
|
||||
$resp->setCallback(function() use($inv_entries) {
|
||||
|
|
@ -422,7 +427,8 @@ class WarrantyController extends Controller
|
|||
return $resp;
|
||||
}
|
||||
|
||||
protected function processWarrantyFile(UploadedFile $csv_file, EntityManagerInterface $em)
|
||||
protected function processWarrantyFile(UploadedFile $csv_file, EntityManagerInterface $em,
|
||||
WarrantyHandler $wh)
|
||||
{
|
||||
// attempt to open file
|
||||
try
|
||||
|
|
@ -469,10 +475,13 @@ class WarrantyController extends Controller
|
|||
$first_name = trim($fields[0]);
|
||||
$last_name = trim($fields[1]);
|
||||
$mobile_number = trim($fields[4]);
|
||||
$plate_number = trim($fields[9]);
|
||||
$plate = trim($fields[9]);
|
||||
$serial = trim($fields[10]);
|
||||
$purchase_date = trim($fields[12]);
|
||||
$battery_id = trim($fields[16]);
|
||||
$batt_invoice = trim($fields[11]);
|
||||
|
||||
$plate_number = $wh->cleanPlateNumber($plate);
|
||||
|
||||
// check if purchase_date or plate_number or serial is empty or if
|
||||
// purchase date is valid
|
||||
|
|
@ -509,7 +518,7 @@ class WarrantyController extends Controller
|
|||
'vehicle_year' => trim($fields[8]),
|
||||
'vehicle_plate_number' => $plate_number,
|
||||
'battery_serial_number' => $serial,
|
||||
'battery_sales_invoice' => trim($fields[11]),
|
||||
'battery_sales_invoice' => $batt_invoice,
|
||||
'battery_date_purchase' => $purchase_date,
|
||||
'distributor_name' => trim($fields[13]),
|
||||
'distributor_address' => trim($fields[14]),
|
||||
|
|
@ -521,55 +530,65 @@ class WarrantyController extends Controller
|
|||
}
|
||||
else
|
||||
{
|
||||
// additional validation
|
||||
// check if serial number and plate number already exists
|
||||
$warr_results = $em->getRepository(Warranty::class)->findBy(['serial' => $serial, 'plate_number' => $plate_number]);
|
||||
|
||||
// new warranty
|
||||
$warranty = new Warranty();
|
||||
// get battery via the invoice because battery_id doesn't match what's in the live data
|
||||
// get job order via invoice to get the warranty class
|
||||
$warranty_class = '';
|
||||
$batt_list = array();
|
||||
|
||||
// get the battery purchased
|
||||
// check battery first. If not found, check sap_battery
|
||||
$battery = $em->getRepository(Battery::class)->find($battery_id);
|
||||
if ($battery != null)
|
||||
// find invoice
|
||||
$invoice = $em->getRepository(Invoice::class)->find($batt_invoice);
|
||||
if (!empty($invoice))
|
||||
{
|
||||
// get the battery model and battery size
|
||||
$model_id = $battery->getModel()->getID();
|
||||
$size_id = $battery->getSize()->getID();
|
||||
// get job order
|
||||
$jo = $invoice->getJobOrder();
|
||||
|
||||
$bty_model = $em->getRepository(BatteryModel::class)->find($model_id);
|
||||
$bty_size = $em->getRepository(BatterySize::class)->find($size_id);
|
||||
// get warranty class
|
||||
$warranty_class = $jo->getWarrantyClass();
|
||||
|
||||
if ($bty_model != null)
|
||||
// get battery
|
||||
$invoice_items = $invoice->getItems();
|
||||
foreach ($invoice_items as $item)
|
||||
{
|
||||
$warranty->setBatteryModel($bty_model);
|
||||
$battery = $item->getBattery();
|
||||
if ($battery != null)
|
||||
{
|
||||
$batt_list[] = $item->getBattery();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($bty_size != null)
|
||||
if (!empty($warr_results))
|
||||
{
|
||||
foreach($warr_results as $warr)
|
||||
{
|
||||
$warranty->setBatterySize($bty_size);
|
||||
// call service to check if warranty details is incomplete and then update warranty
|
||||
// using details from csv file
|
||||
error_log('Updating warranty for ' . $warr->getID());
|
||||
$wh->updateWarranty($warr, $first_name, $last_name, $mobile_number, $batt_list, $date_purchase);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// find battery in sap_battery
|
||||
$battery = $em->getRepository(SAPBattery::class)->find($battery_id);
|
||||
if ($battery != null)
|
||||
{
|
||||
// TODO: what if serial exists but plate number is different?
|
||||
// check if just the serial exists
|
||||
// if warranty exists, ignore for now
|
||||
$w_results = $em->getRepository(Warranty::class)->findBy(['serial' => $serial]);
|
||||
if (!empty($w_results))
|
||||
{
|
||||
// battery is SAPBattery
|
||||
$warranty->setSAPBattery($battery);
|
||||
continue;
|
||||
}
|
||||
|
||||
error_log('Creating warranty for serial ' . $serial . ' and plate number ' . $plate_number);
|
||||
|
||||
$wh->createWarranty($serial, $plate_number, $first_name, $last_name, $mobile_number, $batt_list, $date_purchase, $warranty_class);
|
||||
}
|
||||
|
||||
// set and save values
|
||||
$warranty->setSerial($serial)
|
||||
->setPlateNumber($plate_number)
|
||||
->setFirstName($first_name)
|
||||
->setLastName($last_name)
|
||||
->setMobileNumber($mobile_number)
|
||||
->setDatePurchase($date_purchase);
|
||||
|
||||
$em->persist($warranty);
|
||||
$em->flush();
|
||||
}
|
||||
|
||||
|
||||
$em->clear();
|
||||
$row_num++;
|
||||
}
|
||||
|
||||
|
|
@ -595,4 +614,10 @@ class WarrantyController extends Controller
|
|||
->setParameter('filter', '%' . $datatable['query']['data-rows-search'] . '%');
|
||||
}
|
||||
}
|
||||
|
||||
protected function cleanPlateNumber($plate)
|
||||
{
|
||||
// remove spaces and make upper case
|
||||
return strtoupper(str_replace(' ', '', $plate));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -68,6 +68,7 @@ class BatteryModel
|
|||
|
||||
public function getBatteries()
|
||||
{
|
||||
// TODO: fix this to be a proper getter function
|
||||
// has to return set of strings because symfony is trying to move away from role objects
|
||||
$str_batteries = [];
|
||||
foreach ($this->batteries as $battery)
|
||||
|
|
|
|||
|
|
@ -89,6 +89,7 @@ class BatterySize
|
|||
|
||||
public function getBatteries()
|
||||
{
|
||||
// TODO: fix this to be a proper getter function
|
||||
// has to return set of strings because symfony is trying to move away from role objects
|
||||
$str_batteries = [];
|
||||
foreach ($this->batteries as $battery)
|
||||
|
|
|
|||
|
|
@ -14,9 +14,6 @@ use App\Ramcar\CustomerClassification;
|
|||
*/
|
||||
class Customer
|
||||
{
|
||||
// TODO: make this a setting somewhere
|
||||
const COUNTRY_CODE_PREFIX = '+60';
|
||||
|
||||
// unique id
|
||||
/**
|
||||
* @ORM\Id
|
||||
|
|
@ -266,16 +263,16 @@ class Customer
|
|||
$phones = [];
|
||||
|
||||
if (!empty($this->phone_mobile))
|
||||
$phones[] = self::COUNTRY_CODE_PREFIX . $this->phone_mobile;
|
||||
$phones[] = $this->phone_mobile;
|
||||
|
||||
if (!empty($this->phone_landline))
|
||||
$phones[] = self::COUNTRY_CODE_PREFIX . $this->phone_landline;
|
||||
$phones[] = $this->phone_landline;
|
||||
|
||||
if (!empty($this->phone_office))
|
||||
$phones[] = self::COUNTRY_CODE_PREFIX . $this->phone_office;
|
||||
$phones[] = $this->phone_office;
|
||||
|
||||
if (!empty($this->phone_fax))
|
||||
$phones[] = self::COUNTRY_CODE_PREFIX . $this->phone_fax;
|
||||
$phones[] = $this->phone_fax;
|
||||
|
||||
return $phones;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,17 +25,17 @@ use DateTime;
|
|||
|
||||
class CMBCustomerHandler implements CustomerHandlerInterface
|
||||
{
|
||||
const COUNTRY_CODE_PREFIX = '+60';
|
||||
|
||||
protected $em;
|
||||
protected $validator;
|
||||
|
||||
protected $country_code;
|
||||
protected $template_hash;
|
||||
|
||||
public function __construct(EntityManagerInterface $em, ValidatorInterface $validator)
|
||||
public function __construct(EntityManagerInterface $em, ValidatorInterface $validator,
|
||||
string $country_code)
|
||||
{
|
||||
$this->em = $em;
|
||||
$this->validator = $validator;
|
||||
$this->country_code = $country_code;
|
||||
|
||||
$this->loadTemplates();
|
||||
}
|
||||
|
|
@ -121,7 +121,14 @@ class CMBCustomerHandler implements CustomerHandlerInterface
|
|||
$row['flag_csat'] = $orow->isCSAT();
|
||||
|
||||
// TODO: properly add mobile numbers and plate numbers as searchable/sortable fields, use doctrine events
|
||||
$row['mobile_numbers'] = implode("<br>", $orow->getMobileNumberList());
|
||||
// prepend the country code before each mobile number
|
||||
$mobile_number_list = [];
|
||||
$mobile_numbers = $orow->getMobileNumberList();
|
||||
foreach ($mobile_numbers as $mobile_number)
|
||||
{
|
||||
$mobile_number_list[] = $this->country_code . $mobile_number;
|
||||
}
|
||||
$row['mobile_numbers'] = implode("<br>", $mobile_number_list);
|
||||
$row['plate_numbers'] = implode("<br>", $orow->getPlateNumberList());
|
||||
|
||||
$rows[] = $row;
|
||||
|
|
@ -467,7 +474,7 @@ class CMBCustomerHandler implements CustomerHandlerInterface
|
|||
$cust = $cv->getCustomer();
|
||||
$vehicles[] = [
|
||||
'id' => $cv->getID(),
|
||||
'text' => $cv->getPlateNumber() . ' ' . $cust->getFirstName() . ' ' . $cust->getLastName() . ' ('. self::COUNTRY_CODE_PREFIX . $cust->getPhoneMobile() . ')',
|
||||
'text' => $cv->getPlateNumber() . ' ' . $cust->getFirstName() . ' ' . $cust->getLastName() . ' ('. $this->country_code . $cust->getPhoneMobile() . ')',
|
||||
];
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -27,17 +27,17 @@ use DateTime;
|
|||
|
||||
class ResqCustomerHandler implements CustomerHandlerInterface
|
||||
{
|
||||
const COUNTRY_CODE_PREFIX = '+63';
|
||||
|
||||
protected $em;
|
||||
protected $validator;
|
||||
|
||||
protected $country_code;
|
||||
protected $template_hash;
|
||||
|
||||
public function __construct(EntityManagerInterface $em, ValidatorInterface $validator)
|
||||
public function __construct(EntityManagerInterface $em, ValidatorInterface $validator,
|
||||
string $country_code)
|
||||
{
|
||||
$this->em = $em;
|
||||
$this->validator = $validator;
|
||||
$this->country_code = $country_code;
|
||||
|
||||
$this->loadTemplates();
|
||||
}
|
||||
|
|
@ -124,7 +124,14 @@ class ResqCustomerHandler implements CustomerHandlerInterface
|
|||
$row['flag_csat'] = $orow->isCSAT();
|
||||
|
||||
// TODO: properly add mobile numbers and plate numbers as searchable/sortable fields, use doctrine events
|
||||
$row['mobile_numbers'] = implode("<br>", $orow->getMobileNumberList());
|
||||
// prepend the country code before each mobile number
|
||||
$mobile_number_list = [];
|
||||
$mobile_numbers = $orow->getMobileNumberList();
|
||||
foreach ($mobile_numbers as $mobile_number)
|
||||
{
|
||||
$mobile_number_list[] = $this->country_code . $mobile_number;
|
||||
}
|
||||
$row['mobile_numbers'] = implode("<br>", $mobile_number_list);
|
||||
$row['plate_numbers'] = implode("<br>", $orow->getPlateNumberList());
|
||||
|
||||
$rows[] = $row;
|
||||
|
|
@ -465,7 +472,7 @@ class ResqCustomerHandler implements CustomerHandlerInterface
|
|||
$cust = $cv->getCustomer();
|
||||
$vehicles[] = [
|
||||
'id' => $cv->getID(),
|
||||
'text' => $cv->getPlateNumber() . ' ' . $cust->getFirstName() . ' ' . $cust->getLastName() . ' ('. self::COUNTRY_CODE_PREFIX . $cust->getPhoneMobile() . ')',
|
||||
'text' => $cv->getPlateNumber() . ' ' . $cust->getFirstName() . ' ' . $cust->getLastName() . ' ('. $this->country_code . $cust->getPhoneMobile() . ')',
|
||||
];
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -40,6 +40,7 @@ use App\Ramcar\JORejectionReason;
|
|||
use App\Service\InvoiceGeneratorInterface;
|
||||
use App\Service\JobOrderHandlerInterface;
|
||||
use App\Service\RiderAssignmentHandlerInterface;
|
||||
use App\Service\WarrantyHandler;
|
||||
use App\Service\MQTTClient;
|
||||
use App\Service\APNSClient;
|
||||
use App\Service\MapTools;
|
||||
|
|
@ -55,20 +56,21 @@ use FPDF;
|
|||
|
||||
class CMBJobOrderHandler implements JobOrderHandlerInterface
|
||||
{
|
||||
const COUNTRY_CODE_PREFIX = '+60';
|
||||
|
||||
protected $em;
|
||||
protected $ic;
|
||||
protected $security;
|
||||
protected $validator;
|
||||
protected $translator;
|
||||
protected $rah;
|
||||
protected $country_code;
|
||||
protected $wh;
|
||||
|
||||
protected $template_hash;
|
||||
|
||||
public function __construct(Security $security, EntityManagerInterface $em,
|
||||
InvoiceGeneratorInterface $ic, ValidatorInterface $validator,
|
||||
TranslatorInterface $translator, RiderAssignmentHandlerInterface $rah)
|
||||
TranslatorInterface $translator, RiderAssignmentHandlerInterface $rah,
|
||||
string $country_code, WarrantyHandler $wh)
|
||||
{
|
||||
$this->em = $em;
|
||||
$this->ic = $ic;
|
||||
|
|
@ -76,6 +78,8 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
|||
$this->validator = $validator;
|
||||
$this->translator = $translator;
|
||||
$this->rah = $rah;
|
||||
$this->country_code = $country_code;
|
||||
$this->wh = $wh;
|
||||
|
||||
$this->loadTemplates();
|
||||
}
|
||||
|
|
@ -841,7 +845,37 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
|||
// create the warranty if new battery only
|
||||
if ($obj->getServiceType () == CMBServiceType::BATTERY_REPLACEMENT_NEW)
|
||||
{
|
||||
$this->createWarranty($obj);
|
||||
$serial = null;
|
||||
$warranty_class = $obj->getWarrantyClass();
|
||||
$first_name = $obj->getCustomer()->getFirstName();
|
||||
$last_name = $obj->getCustomer()->getLastName();
|
||||
$mobile_number = $obj->getCustomer()->getPhoneMobile();
|
||||
|
||||
// check if date fulfilled is null
|
||||
if ($obj->getDateFulfill() == null)
|
||||
$date_purchase = $obj->getDateCreate();
|
||||
else
|
||||
$date_purchase = $obj->getDateFulfill();
|
||||
|
||||
$plate_number = $this->wh->cleanPlateNumber($obj->getCustomerVehicle()->getPlateNumber());
|
||||
|
||||
$batt_list = array();
|
||||
$invoice = $obj->getInvoice();
|
||||
if (!empty($invoice))
|
||||
{
|
||||
// get battery
|
||||
$invoice_items = $invoice->getItems();
|
||||
foreach ($invoice_items as $item)
|
||||
{
|
||||
$battery = $item->getBattery();
|
||||
if ($battery != null)
|
||||
{
|
||||
$batt_list[] = $item->getBattery();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$this->wh->createWarranty($serial, $plate_number, $first_name, $last_name, $mobile_number, $batt_list, $date_purchase, $warranty_class);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1860,7 +1894,7 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
|||
|
||||
$pdf->SetXY($col2_x, $y);
|
||||
$pdf->Cell($label_width, $line_height, 'Mobile Phone:');
|
||||
$pdf->MultiCell(0, $line_height, $customer && $customer->getPhoneMobile() ? self::COUNTRY_CODE_PREFIX . $customer->getPhoneMobile() : '', 0, 'L');
|
||||
$pdf->MultiCell(0, $line_height, $customer && $customer->getPhoneMobile() ? $this->country_code . $customer->getPhoneMobile() : '', 0, 'L');
|
||||
|
||||
// get Y after right cell
|
||||
$y2 = $pdf->GetY();
|
||||
|
|
@ -1877,7 +1911,7 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
|||
|
||||
$pdf->SetXY($col2_x, $y);
|
||||
$pdf->Cell($label_width, $line_height, 'Landline:');
|
||||
$pdf->MultiCell(0, $line_height, $customer && $customer->getPhoneLandline() ? self::COUNTRY_CODE_PREFIX . $customer->getPhoneLandline() : '', 0, 'L');
|
||||
$pdf->MultiCell(0, $line_height, $customer && $customer->getPhoneLandline() ? $this->country_code . $customer->getPhoneLandline() : '', 0, 'L');
|
||||
|
||||
// get Y after right cell
|
||||
$y2 = $pdf->GetY();
|
||||
|
|
@ -1887,11 +1921,11 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
|||
|
||||
$pdf->SetXY($col2_x, $y);
|
||||
$pdf->Cell($label_width, $line_height, 'Office Phone:');
|
||||
$pdf->MultiCell(0, $line_height, $customer && $customer->getPhoneOffice() ? self::COUNTRY_CODE_PREFIX . $customer->getPhoneOffice() : '', 0, 'L');
|
||||
$pdf->MultiCell(0, $line_height, $customer && $customer->getPhoneOffice() ? $this->country_code . $customer->getPhoneOffice() : '', 0, 'L');
|
||||
|
||||
$pdf->SetX($col2_x);
|
||||
$pdf->Cell($label_width, $line_height, 'Fax:');
|
||||
$pdf->MultiCell($val_width, $line_height, $customer && $customer->getPhoneFax() ? self::COUNTRY_CODE_PREFIX . $customer->getPhoneFax() : '', 0, 'L');
|
||||
$pdf->MultiCell($val_width, $line_height, $customer && $customer->getPhoneFax() ? $this->country_code . $customer->getPhoneFax() : '', 0, 'L');
|
||||
|
||||
// insert vehicle info
|
||||
$cv = $obj->getCustomerVehicle();
|
||||
|
|
@ -2394,79 +2428,6 @@ class CMBJobOrderHandler implements JobOrderHandlerInterface
|
|||
->setWarrantyExpiration($warr_date);
|
||||
}
|
||||
|
||||
protected function createWarranty($jo)
|
||||
{
|
||||
$warranty = new Warranty();
|
||||
|
||||
$warranty_class = $jo->getWarrantyClass();
|
||||
$first_name = $jo->getCustomer()->getFirstName();
|
||||
$last_name = $jo->getCustomer()->getLastName();
|
||||
$mobile_number = $jo->getCustomer()->getPhoneMobile();
|
||||
|
||||
// check if date fulfilled is null
|
||||
if ($jo->getDateFulfill() == null)
|
||||
$date_create = $jo->getDateCreate();
|
||||
else
|
||||
$date_create = $jo->getDateFulfill();
|
||||
|
||||
// normalize the plate number
|
||||
$plate_number = $this->normalizePlateNumber($jo->getCustomerVehicle()->getPlateNumber());
|
||||
|
||||
// get battery and its warranty periods
|
||||
$warranty_period = 0;
|
||||
$invoice_items = $jo->getInvoice()->getItems();
|
||||
foreach ($invoice_items as $item)
|
||||
{
|
||||
if ($item->getBattery() != null)
|
||||
{
|
||||
$battery = $item->getBattery();
|
||||
$warranty->setBatteryModel($battery->getModel());
|
||||
$warranty->setBatterySize($battery->getSize());
|
||||
|
||||
// use getWarrantyPrivate for passenger warranty
|
||||
if ($warranty_class == CMBWarrantyClass::WTY_PASSENGER)
|
||||
$warranty_period = $battery->getWarrantyPrivate();
|
||||
else if ($warranty_class == CMBWarrantyClass::WTY_COMMERCIAL)
|
||||
$warranty_period = $battery->getWarrantyCommercial();
|
||||
}
|
||||
}
|
||||
|
||||
// compute expiry date
|
||||
$expiry_date = $this->computeDateExpire($date_create, $warranty_period);
|
||||
|
||||
$warranty->setWarrantyClass($warranty_class)
|
||||
->setFirstName($first_name)
|
||||
->setLastName($last_name)
|
||||
->setMobileNumber($mobile_number)
|
||||
->setDatePurchase($date_create)
|
||||
->setDateExpire($expiry_date)
|
||||
->setPlateNumber($plate_number);
|
||||
|
||||
$this->em->persist($warranty);
|
||||
$this->em->flush();
|
||||
|
||||
}
|
||||
|
||||
protected function normalizePlateNumber($plate_number)
|
||||
{
|
||||
// make it upper case
|
||||
$plate_number = trim(strtoupper($plate_number));
|
||||
|
||||
// remove special characters and spaces
|
||||
$plate_number = preg_replace('/[^A-Za-z0-9]/', '', $plate_number);
|
||||
|
||||
//error_log('plate number ' . $plate_number);
|
||||
|
||||
return $plate_number;
|
||||
}
|
||||
|
||||
protected function computeDateExpire($date_create, $warranty_period)
|
||||
{
|
||||
$expire_date = clone $date_create;
|
||||
$expire_date->add(new DateInterval('P'.$warranty_period.'M'));
|
||||
return $expire_date;
|
||||
}
|
||||
|
||||
// TODO: re-enable search, figure out how to group the orWhere filters into one, so can execute that plus the pending filter
|
||||
// check if datatable filter is present and append to query
|
||||
protected function setQueryFilters($datatable, &$query, $qb, $hubs, $tier, $status)
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@ use App\Ramcar\JORejectionReason;
|
|||
|
||||
use App\Service\InvoiceGeneratorInterface;
|
||||
use App\Service\JobOrderHandlerInterface;
|
||||
use App\Service\WarrantyHandler;
|
||||
use App\Service\MQTTClient;
|
||||
use App\Service\APNSClient;
|
||||
use App\Service\MapTools;
|
||||
|
|
@ -53,25 +54,28 @@ use FPDF;
|
|||
|
||||
class ResqJobOrderHandler implements JobOrderHandlerInterface
|
||||
{
|
||||
const COUNTRY_CODE_PREFIX = '+60';
|
||||
|
||||
protected $em;
|
||||
protected $ic;
|
||||
protected $security;
|
||||
protected $validator;
|
||||
protected $translator;
|
||||
protected $country_code;
|
||||
protected $wh;
|
||||
|
||||
protected $template_hash;
|
||||
|
||||
public function __construct(Security $security, EntityManagerInterface $em,
|
||||
InvoiceGeneratorInterface $ic, ValidatorInterface $validator,
|
||||
TranslatorInterface $translator)
|
||||
TranslatorInterface $translator, string $country_code,
|
||||
WarrantyHandler $wh)
|
||||
{
|
||||
$this->em = $em;
|
||||
$this->ic = $ic;
|
||||
$this->security = $security;
|
||||
$this->validator = $validator;
|
||||
$this->translator = $translator;
|
||||
$this->country_code = $country_code;
|
||||
$this->wh = $wh;
|
||||
|
||||
$this->loadTemplates();
|
||||
}
|
||||
|
|
@ -703,6 +707,43 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface
|
|||
];
|
||||
$mclient->sendEvent($obj, $payload);
|
||||
$mclient->sendRiderEvent($obj, $payload);
|
||||
|
||||
// create the warranty if new battery only
|
||||
if ($obj->getServiceType () == ServiceType::BATTERY_REPLACEMENT_NEW)
|
||||
{
|
||||
$serial = null;
|
||||
$warranty_class = $obj->getWarrantyClass();
|
||||
$first_name = $obj->getCustomer()->getFirstName();
|
||||
$last_name = $obj->getCustomer()->getLastName();
|
||||
$mobile_number = $obj->getCustomer()->getPhoneMobile();
|
||||
|
||||
// check if date fulfilled is null
|
||||
if ($obj->getDateFulfill() == null)
|
||||
$date_purchase = $obj->getDateCreate();
|
||||
else
|
||||
$date_purchase = $obj->getDateFulfill();
|
||||
|
||||
$plate_number = $this->wh->cleanPlateNumber($obj->getCustomerVehicle()->getPlateNumber());
|
||||
|
||||
$batt_list = array();
|
||||
$invoice = $obj->getInvoice();
|
||||
if (!empty($invoice))
|
||||
{
|
||||
// get battery
|
||||
$invoice_items = $invoice->getItems();
|
||||
foreach ($invoice_items as $item)
|
||||
{
|
||||
$battery = $item->getBattery();
|
||||
if ($battery != null)
|
||||
{
|
||||
$batt_list[] = $item->getBattery();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$this->wh->createWarranty($serial, $plate_number, $first_name, $last_name, $mobile_number, $batt_list, $date_purchase, $warranty_class);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1868,7 +1909,7 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface
|
|||
|
||||
$pdf->SetXY($col2_x, $y);
|
||||
$pdf->Cell($label_width, $line_height, 'Mobile Phone:');
|
||||
$pdf->MultiCell(0, $line_height, $customer && $customer->getPhoneMobile() ? self::COUNTRY_CODE_PREFIX . $customer->getPhoneMobile() : '', 0, 'L');
|
||||
$pdf->MultiCell(0, $line_height, $customer && $customer->getPhoneMobile() ? $this->country_code . $customer->getPhoneMobile() : '', 0, 'L');
|
||||
|
||||
// get Y after right cell
|
||||
$y2 = $pdf->GetY();
|
||||
|
|
@ -1885,7 +1926,7 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface
|
|||
|
||||
$pdf->SetXY($col2_x, $y);
|
||||
$pdf->Cell($label_width, $line_height, 'Landline:');
|
||||
$pdf->MultiCell(0, $line_height, $customer && $customer->getPhoneLandline() ? self::COUNTRY_CODE_PREFIX . $customer->getPhoneLandline() : '', 0, 'L');
|
||||
$pdf->MultiCell(0, $line_height, $customer && $customer->getPhoneLandline() ? $this->country_code . $customer->getPhoneLandline() : '', 0, 'L');
|
||||
|
||||
// get Y after right cell
|
||||
$y2 = $pdf->GetY();
|
||||
|
|
@ -1895,11 +1936,11 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface
|
|||
|
||||
$pdf->SetXY($col2_x, $y);
|
||||
$pdf->Cell($label_width, $line_height, 'Office Phone:');
|
||||
$pdf->MultiCell(0, $line_height, $customer && $customer->getPhoneOffice() ? self::COUNTRY_CODE_PREFIX . $customer->getPhoneOffice() : '', 0, 'L');
|
||||
$pdf->MultiCell(0, $line_height, $customer && $customer->getPhoneOffice() ? $this->country_code . $customer->getPhoneOffice() : '', 0, 'L');
|
||||
|
||||
$pdf->SetX($col2_x);
|
||||
$pdf->Cell($label_width, $line_height, 'Fax:');
|
||||
$pdf->MultiCell($val_width, $line_height, $customer && $customer->getPhoneFax() ? self::COUNTRY_CODE_PREFIX . $customer->getPhoneFax() : '', 0, 'L');
|
||||
$pdf->MultiCell($val_width, $line_height, $customer && $customer->getPhoneFax() ? $this->country_code . $customer->getPhoneFax() : '', 0, 'L');
|
||||
|
||||
// insert vehicle info
|
||||
$cv = $obj->getCustomerVehicle();
|
||||
|
|
|
|||
332
src/Service/WarrantyHandler.php
Normal file
332
src/Service/WarrantyHandler.php
Normal file
|
|
@ -0,0 +1,332 @@
|
|||
<?php
|
||||
|
||||
namespace App\Service;
|
||||
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
|
||||
use App\Entity\Warranty;
|
||||
use App\Entity\Battery;
|
||||
use App\Entity\BatterySize;
|
||||
use App\Entity\SAPBattery;
|
||||
use App\Entity\BatteryModel;
|
||||
use App\Entity\CustomerVehicle;
|
||||
|
||||
use App\Ramcar\WarrantyClass;
|
||||
|
||||
use DateTime;
|
||||
use DateInterval;
|
||||
|
||||
class WarrantyHandler
|
||||
{
|
||||
protected $em;
|
||||
|
||||
public function __construct(EntityManagerInterface $em)
|
||||
{
|
||||
$this->em = $em;
|
||||
}
|
||||
|
||||
public function createWarranty($serial, $plate_number, $first_name, $last_name, $mobile_number,
|
||||
$batt_list, DateTime $date_purchase, $warranty_class)
|
||||
{
|
||||
// new warranty
|
||||
$warranty = new Warranty();
|
||||
|
||||
foreach ($batt_list as $battery)
|
||||
{
|
||||
// get the battery model and battery size
|
||||
$model_id = $battery->getModel()->getID();
|
||||
$size_id = $battery->getSize()->getID();
|
||||
|
||||
$bty_model = $this->em->getRepository(BatteryModel::class)->find($model_id);
|
||||
$bty_size = $this->em->getRepository(BatterySize::class)->find($size_id);
|
||||
|
||||
if ($bty_model != null)
|
||||
{
|
||||
$warranty->setBatteryModel($bty_model);
|
||||
}
|
||||
if ($bty_size != null)
|
||||
{
|
||||
$warranty->setBatterySize($bty_size);
|
||||
}
|
||||
|
||||
$sap_code = $battery->getSAPCode();
|
||||
if (!empty($sap_code))
|
||||
{
|
||||
// find sap battery
|
||||
$sap_battery = $this->em->getRepository(SAPBattery::class)->find($sap_code);
|
||||
if ($sap_battery != null)
|
||||
{
|
||||
$warranty->setSAPBattery($sap_battery);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// compute expiry date
|
||||
$date_expire = null;
|
||||
if ((!empty($warranty_class)) &&
|
||||
(count($batt_list) != 0))
|
||||
{
|
||||
$period = $this->getWarrantyPeriod($batt_list, $warranty_class);
|
||||
$date_expire = $this->computeDateExpire($date_purchase, $period);
|
||||
|
||||
$warranty->setDateExpire($date_expire);
|
||||
}
|
||||
|
||||
// set and save values
|
||||
$warranty->setSerial($serial)
|
||||
->setPlateNumber($plate_number)
|
||||
->setFirstName($first_name)
|
||||
->setLastName($last_name)
|
||||
->setMobileNumber($mobile_number)
|
||||
->setDatePurchase($date_purchase);
|
||||
|
||||
$this->em->persist($warranty);
|
||||
$this->em->flush();
|
||||
|
||||
// update customer vehicle with warranty info
|
||||
$this->updateCustomerVehicle($serial, $batt_list, $plate_number, $date_expire);
|
||||
|
||||
$this->em->clear();
|
||||
}
|
||||
|
||||
public function updateCustomerVehicle($serial, $batteries, $plate_number, $date_expire)
|
||||
{
|
||||
// find customer vehicle using plate number
|
||||
error_log('Finding customer vehicle with plate number ' . $plate_number);
|
||||
$cv_q = $this->em->createQuery('select count(cv) from App\Entity\CustomerVehicle cv where cv.plate_number = :plate_number')
|
||||
->setParameter('plate_number', $plate_number);
|
||||
$cv_result = $cv_q->getSingleScalarResult();
|
||||
|
||||
$battery_id = null;
|
||||
if ($cv_result != 0)
|
||||
{
|
||||
if (!empty($batteries))
|
||||
{
|
||||
// set current battery to the first battery in list.
|
||||
// there are cases where multiple batteries linked to an SAP code.
|
||||
$battery = $batteries[0];
|
||||
$battery_id = $battery->getID();
|
||||
}
|
||||
//error_log('Serial/Warranty Code = ' . $serial);
|
||||
$q = $this->em->createQuery('update App\Entity\CustomerVehicle cv
|
||||
set cv.curr_battery = :batt_id,
|
||||
cv.warranty_code = :serial,
|
||||
cv.warranty_expiration = :expiry_date
|
||||
where cv.plate_number = :plate_number')
|
||||
->setParameters([
|
||||
'batt_id' => $battery_id,
|
||||
'serial' => $serial,
|
||||
'expiry_date' => $date_expire,
|
||||
'plate_number' => $plate_number]);
|
||||
$q->execute();
|
||||
}
|
||||
}
|
||||
|
||||
public function updateWarranty(Warranty $warr, $first_name, $last_name, $mobile_number, $batt_list, DateTime $date_purchase)
|
||||
{
|
||||
// TODO: add serial and plate number to update
|
||||
// TODO: check if data from existing warranty matches the new data
|
||||
// check if details are complete
|
||||
if (empty($warr->getFirstName()))
|
||||
{
|
||||
if (!empty($first_name))
|
||||
{
|
||||
$warr->setFirstName($first_name);
|
||||
}
|
||||
}
|
||||
if (empty($warr->getLastName()))
|
||||
{
|
||||
if (!empty($last_name))
|
||||
{
|
||||
$warr->setLastName($last_name);
|
||||
}
|
||||
}
|
||||
if (empty($warr->getMobileNumber()))
|
||||
{
|
||||
if (!empty($mobile_number))
|
||||
{
|
||||
$warr->setMobileNumber($mobile_number);
|
||||
}
|
||||
}
|
||||
if ((empty($warr->getBatteryModel())) ||
|
||||
(empty($warr->getBatterySize())))
|
||||
{
|
||||
if (count($batt_list) != 0)
|
||||
{
|
||||
foreach ($batt_list as $battery)
|
||||
{
|
||||
// get the battery model and battery size
|
||||
$model_id = $battery->getModel()->getID();
|
||||
$size_id = $battery->getSize()->getID();
|
||||
|
||||
$bty_model = $this->em->getRepository(BatteryModel::class)->find($model_id);
|
||||
$bty_size = $this->em->getRepository(BatterySize::class)->find($size_id);
|
||||
|
||||
if ($bty_model != null)
|
||||
{
|
||||
$warranty->setBatteryModel($bty_model);
|
||||
}
|
||||
if ($bty_size != null)
|
||||
{
|
||||
$warranty->setBatterySize($bty_size);
|
||||
}
|
||||
|
||||
$sap_code = $battery->getSAPCode();
|
||||
if (!empty($sap_code))
|
||||
{
|
||||
// find sap battery
|
||||
$sap_battery = $this->em->getRepository(SAPBattery::class)->find($sap_code);
|
||||
if ($sap_battery != null)
|
||||
{
|
||||
$warranty->setSAPBattery($sap_battery);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$purchase_date = $warr->getDatePurchase();
|
||||
if (empty($purchase_date))
|
||||
{
|
||||
if (!empty($date_purchase))
|
||||
{
|
||||
$warr->setDatePurchase($date_purchase);
|
||||
}
|
||||
$purchase_date = $date_purchase;
|
||||
}
|
||||
|
||||
if (empty($warr->getDateExpire()))
|
||||
{
|
||||
$batteries = [];
|
||||
if (count($batt_list) == 0)
|
||||
{
|
||||
$batteries = $this->getBatteriesForWarranty($warr);
|
||||
}
|
||||
else
|
||||
{
|
||||
$batteries = $batt_list;
|
||||
}
|
||||
|
||||
if (!empty($batteries))
|
||||
{
|
||||
$period = $this->getWarrantyPeriod($batteries, $warr->getWarrantyClass());
|
||||
if (!empty($purchase_date))
|
||||
{
|
||||
$expire_date = $this->computeDateExpire($purchase_date, $period);
|
||||
$warr->setDateExpire($expire_date);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$this->em->persist($warr);
|
||||
$this->em->flush();
|
||||
$this->em->clear();
|
||||
}
|
||||
|
||||
public function computeDateExpire($date_create, $warranty_period)
|
||||
{
|
||||
$expire_date = clone $date_create;
|
||||
$expire_date->add(new DateInterval('P'.$warranty_period.'M'));
|
||||
return $expire_date;
|
||||
}
|
||||
|
||||
public function getWarrantyPeriod($batteries, $warranty_class)
|
||||
{
|
||||
// set to -1 to show that we haven't set a warranty period yet
|
||||
// cannot set initial value to 0 because warranty tnv can be 0
|
||||
$least_warranty = -1;
|
||||
$warr_period = 0;
|
||||
foreach ($batteries as $battery)
|
||||
{
|
||||
// if multiple batteries, get the smallest warranty period
|
||||
// check warranty class to get warranty period
|
||||
if ($warranty_class == WarrantyClass::WTY_PRIVATE)
|
||||
{
|
||||
$warr_period = $battery->getWarrantyPrivate();
|
||||
//error_log('Warranty Period for Private: ' . $warr_period);
|
||||
}
|
||||
if ($warranty_class == WarrantyClass::WTY_COMMERCIAL)
|
||||
{
|
||||
$warr_period = $battery->getWarrantyCommercial();
|
||||
//error_log('Warranty Period for Commercial: ' . $warr_period);
|
||||
}
|
||||
if ($warranty_class == WarrantyClass::WTY_TNV)
|
||||
{
|
||||
$warr_period = $battery->getWarrantyTnv();
|
||||
//error_log('Warranty Period for TNV: ' . $warr_period);
|
||||
}
|
||||
|
||||
if ($least_warranty < 0)
|
||||
{
|
||||
// set least warranty to the first obtained warranty period
|
||||
$least_warranty = $warr_period;
|
||||
}
|
||||
|
||||
if ($least_warranty > $warr_period)
|
||||
{
|
||||
$least_warranty = $warr_period;
|
||||
}
|
||||
}
|
||||
|
||||
$warranty_period = $least_warranty;
|
||||
|
||||
return $warranty_period;
|
||||
}
|
||||
|
||||
public function getBatteriesForWarranty($warr)
|
||||
{
|
||||
// find battery via sku/sap battery first
|
||||
// if sku is null, use battery model and battery size to find battery
|
||||
// if all three are null, do nothing
|
||||
$batteries = null;
|
||||
|
||||
$sap_battery = $warr->getSAPBattery();
|
||||
$batt_model = $warr->getBatteryModel();
|
||||
$batt_size = $warr->getBatterySize();
|
||||
$warranty_class = $warr->getWarrantyClass();
|
||||
|
||||
if (empty($warranty_class))
|
||||
{
|
||||
error_log('Warranty class is empty for warranty id ' . $warr->getID());
|
||||
return null;
|
||||
}
|
||||
|
||||
if ($sap_battery != null)
|
||||
{
|
||||
// get the battery linked to SAP Battery using sap_battery id
|
||||
$batteries = $this->em->getRepository(Battery::class)->findBy(['sap_code' => $sap_battery->getID()]);
|
||||
}
|
||||
else
|
||||
{
|
||||
if ($batt_model == null)
|
||||
{
|
||||
error_log('Battery model is null for warranty id ' . $warr->getID());
|
||||
return null;
|
||||
}
|
||||
if ($batt_size == null)
|
||||
{
|
||||
error_log('Battery size is null for warranty id ' . $warr->getID());
|
||||
return null;
|
||||
}
|
||||
|
||||
// find battery using battery model and battery size
|
||||
$batteries = $this->em->getRepository(Battery::class)->findBy(['model' => $batt_model, 'size' => $batt_size]);
|
||||
}
|
||||
|
||||
if (empty($batteries))
|
||||
{
|
||||
error_log('Battery not found for warranty id ' . $warr->getID());
|
||||
return null;
|
||||
}
|
||||
|
||||
return $batteries;
|
||||
}
|
||||
|
||||
|
||||
public function cleanPlateNumber($plate)
|
||||
{
|
||||
// remove spaces and make upper case
|
||||
return strtoupper(str_replace(' ', '', $plate));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -131,7 +131,7 @@
|
|||
Mobile Phone
|
||||
</label>
|
||||
<div class="input-group m-input-group">
|
||||
<span class="input-group-addon">+63</span>
|
||||
<span class="input-group-addon">{% trans %}country_code_prefix{% endtrans %}</span>
|
||||
<input type="text" name="phone_mobile" class="form-control m-input" value="{{ obj.getPhoneMobile|default('') }}" data-name="phone_mobile">
|
||||
<div class="form-control-feedback hide" data-field="phone_mobile"></div>
|
||||
</div>
|
||||
|
|
@ -141,7 +141,7 @@
|
|||
Landline
|
||||
</label>
|
||||
<div class="input-group m-input-group">
|
||||
<span class="input-group-addon">+63</span>
|
||||
<span class="input-group-addon">{% trans %}country_code_prefix{% endtrans %}</span>
|
||||
<input type="text" name="phone_landline" class="form-control m-input" value="{{ obj.getPhoneLandline|default('') }}" data-name="phone_landline">
|
||||
<div class="form-control-feedback hide" data-field="phone_landline"></div>
|
||||
</div>
|
||||
|
|
@ -153,7 +153,7 @@
|
|||
Office Phone
|
||||
</label>
|
||||
<div class="input-group m-input-group">
|
||||
<span class="input-group-addon">+63</span>
|
||||
<span class="input-group-addon">{% trans %}country_code_prefix{% endtrans %}</span>
|
||||
<input type="text" name="phone_office" class="form-control m-input" value="{{ obj.getPhoneOffice|default('') }}" data-name="phone_office">
|
||||
<div class="form-control-feedback hide" data-field="phone_office"></div>
|
||||
</div>
|
||||
|
|
@ -163,7 +163,7 @@
|
|||
Fax
|
||||
</label>
|
||||
<div class="input-group m-input-group">
|
||||
<span class="input-group-addon">+63</span>
|
||||
<span class="input-group-addon">{% trans %}country_code_prefix{% endtrans %}</span>
|
||||
<input type="text" name="phone_fax" class="form-control m-input" value="{{ obj.getPhoneFax|default('') }}" data-name="phone_fax">
|
||||
<div class="form-control-feedback hide" data-field="phone_fax"></div>
|
||||
</div>
|
||||
|
|
|
|||
Loading…
Reference in a new issue