Merge branch '488-cmb-live' of gitlab.com:jankstudio/resq into 515-cmb-create-new-pdf-file
This commit is contained in:
commit
c86de77c21
5 changed files with 335 additions and 5 deletions
|
|
@ -197,6 +197,12 @@ services:
|
||||||
|
|
||||||
App\Service\RiderAPIHandlerInterface: "@App\\Service\\RiderAPIHandler\\CMBRiderAPIHandler"
|
App\Service\RiderAPIHandlerInterface: "@App\\Service\\RiderAPIHandler\\CMBRiderAPIHandler"
|
||||||
|
|
||||||
|
# warranty handler service
|
||||||
|
App\Service\WarrantyHandler\CMBWarrantyHandler: ~
|
||||||
|
|
||||||
|
# warranty handler interface
|
||||||
|
App\Service\WarrantyHandlerInterface: "@App\\Service\\WarrantyHandler\\CMBWarrantyHandler"
|
||||||
|
|
||||||
# map manager
|
# map manager
|
||||||
#App\Service\GISManager\Bing: ~
|
#App\Service\GISManager\Bing: ~
|
||||||
App\Service\GISManager\OpenStreet: ~
|
App\Service\GISManager\OpenStreet: ~
|
||||||
|
|
@ -221,6 +227,12 @@ services:
|
||||||
event: 'postPersist'
|
event: 'postPersist'
|
||||||
entity: 'App\Entity\JobOrder'
|
entity: 'App\Entity\JobOrder'
|
||||||
|
|
||||||
|
App\Service\NotificationManager:
|
||||||
|
arguments:
|
||||||
|
$redis_prov: "@App\\Service\\RedisClientProvider"
|
||||||
|
$redis_mqtt_key: "mqtt_events"
|
||||||
|
$em: "@doctrine.orm.entity_manager"
|
||||||
|
|
||||||
App\Service\JobOrderCache:
|
App\Service\JobOrderCache:
|
||||||
arguments:
|
arguments:
|
||||||
$redis_prov: "@App\\Service\\RedisClientProvider"
|
$redis_prov: "@App\\Service\\RedisClientProvider"
|
||||||
|
|
|
||||||
|
|
@ -313,10 +313,13 @@ class DashboardMap {
|
||||||
var lng = data.longitude;
|
var lng = data.longitude;
|
||||||
var name = '';
|
var name = '';
|
||||||
|
|
||||||
if (data.has_jo)
|
if (data.has_jo) {
|
||||||
|
my.rider_availability[id] = false;
|
||||||
my.putRiderActiveJOMarker(id, lat, lng);
|
my.putRiderActiveJOMarker(id, lat, lng);
|
||||||
else
|
} else {
|
||||||
|
my.rider_availability[id] = true;
|
||||||
my.putRiderAvailableMarker(id, lat, lng);
|
my.putRiderAvailableMarker(id, lat, lng);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// console.log(rider_markers);
|
// console.log(rider_markers);
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ class MapEventHandler {
|
||||||
this.options = options;
|
this.options = options;
|
||||||
this.dashmap = dashmap;
|
this.dashmap = dashmap;
|
||||||
this.ssl = ssl;
|
this.ssl = ssl;
|
||||||
|
this.subscribed = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
connect(user_id, host, port) {
|
connect(user_id, host, port) {
|
||||||
|
|
@ -21,7 +22,8 @@ class MapEventHandler {
|
||||||
keepAliveInterval: 10,
|
keepAliveInterval: 10,
|
||||||
invocationContext: this,
|
invocationContext: this,
|
||||||
onSuccess: this.onConnect.bind(this),
|
onSuccess: this.onConnect.bind(this),
|
||||||
reconnect: true
|
reconnect: true,
|
||||||
|
cleanSession: false
|
||||||
};
|
};
|
||||||
|
|
||||||
this.mqtt.onMessageArrived = this.onMessage.bind(this);
|
this.mqtt.onMessageArrived = this.onMessage.bind(this);
|
||||||
|
|
@ -40,6 +42,11 @@ class MapEventHandler {
|
||||||
console.log('mqtt connected!');
|
console.log('mqtt connected!');
|
||||||
var my = icontext.invocationContext;
|
var my = icontext.invocationContext;
|
||||||
|
|
||||||
|
if (my.subscribed) {
|
||||||
|
console.log('already subscribed, not initializing subscriptions');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (my.options.track_rider) {
|
if (my.options.track_rider) {
|
||||||
// subscribe to rider locations
|
// subscribe to rider locations
|
||||||
console.log('subscribing to ' + my.options.channels.rider_location);
|
console.log('subscribing to ' + my.options.channels.rider_location);
|
||||||
|
|
@ -68,6 +75,7 @@ class MapEventHandler {
|
||||||
my.mqtt.subscribe(my.options.channels.jo_origin);
|
my.mqtt.subscribe(my.options.channels.jo_origin);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
my.subscribed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
onMessage(msg) {
|
onMessage(msg) {
|
||||||
|
|
@ -153,7 +161,7 @@ class MapEventHandler {
|
||||||
display_marker = false;
|
display_marker = false;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
console.log('rider not in availability check');
|
console.log('rider not in availability check - ' + chan_split[1]);
|
||||||
display_marker = false;
|
display_marker = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
307
src/Service/WarrantyHandler/CMBWarrantyHandler.php
Normal file
307
src/Service/WarrantyHandler/CMBWarrantyHandler.php
Normal file
|
|
@ -0,0 +1,307 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Service\WarrantyHandler;
|
||||||
|
|
||||||
|
use Doctrine\ORM\EntityManagerInterface;
|
||||||
|
|
||||||
|
use App\Service\WarrantyHandlerInterface;
|
||||||
|
|
||||||
|
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\CMBWarrantyClass;
|
||||||
|
|
||||||
|
use DateTime;
|
||||||
|
use DateInterval;
|
||||||
|
|
||||||
|
class CMBWarrantyHandler implements WarrantyHandlerInterface
|
||||||
|
{
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 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
|
||||||
|
if (trim($serial) == '')
|
||||||
|
$warranty->setSerial(null);
|
||||||
|
else
|
||||||
|
$warranty->setSerial($serial);
|
||||||
|
$warranty->setPlateNumber($plate_number)
|
||||||
|
->setFirstName($first_name)
|
||||||
|
->setLastName($last_name)
|
||||||
|
->setMobileNumber($mobile_number)
|
||||||
|
->setDatePurchase($date_purchase)
|
||||||
|
->setWarrantyClass($warranty_class);
|
||||||
|
|
||||||
|
$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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$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 == CMBWarrantyClass::WTY_PASSENGER)
|
||||||
|
{
|
||||||
|
$warr_period = $battery->getWarrantyPrivate();
|
||||||
|
//error_log('Warranty Period for Private: ' . $warr_period);
|
||||||
|
}
|
||||||
|
if ($warranty_class == CMBWarrantyClass::WTY_COMMERCIAL)
|
||||||
|
{
|
||||||
|
$warr_period = $battery->getWarrantyCommercial();
|
||||||
|
//error_log('Warranty Period for Commercial: ' . $warr_period);
|
||||||
|
}
|
||||||
|
if ($warranty_class == CMBWarrantyClass::WTY_GRAB)
|
||||||
|
{
|
||||||
|
$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;
|
||||||
|
|
||||||
|
$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 ($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));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
Reference in a new issue