Compare commits
No commits in common. "master" and "428-cmb-new-api-calls" have entirely different histories.
master
...
428-cmb-ne
20
.env.dist
|
|
@ -55,9 +55,6 @@ CVU_BRAND_ID=insert_brandid_for_unknown_vehicles
|
|||
# country code prefix
|
||||
COUNTRY_CODE=+insert_country_code_here
|
||||
|
||||
# redis hash
|
||||
LATEST_ACTIVE_JO=latest_active_jo
|
||||
|
||||
# dashboard
|
||||
DASHBOARD_ENABLE=set_to_true_or_false
|
||||
|
||||
|
|
@ -70,23 +67,10 @@ INVENTORY_API_AUTH_TOKEN=insert_auth_token_here
|
|||
# API logging
|
||||
API_LOGGING=set_to_true_or_false
|
||||
|
||||
# customer distance limit in km for mobile
|
||||
CUST_DISTANCE_LIMIT=5
|
||||
|
||||
# customer distance limit in km for admin panel
|
||||
CUST_DISTANCE_LIMIT_ADMIN_PANEL=5
|
||||
# customer distance limit in km
|
||||
CUST_DISTANCE_LIMIT=set_to_number
|
||||
|
||||
MAPTILER_API_KEY=map_tiler_api_key
|
||||
|
||||
# API version
|
||||
API_VERSION=insert_api_version_here
|
||||
|
||||
#SSL_ENABLE for websockets
|
||||
SSL_ENABLE=set_to_true_or_false
|
||||
|
||||
# for hub filtering round robin
|
||||
HUB_JO_KEY=hub_jo_count
|
||||
|
||||
# hub geofence
|
||||
HUB_GEOFENCE_ENABLE=set_to_true_or_false
|
||||
HUB_FILTER_ENABLE=set_to_true_or_false
|
||||
|
|
|
|||
4
.gitignore
vendored
|
|
@ -11,7 +11,3 @@
|
|||
###< symfony/framework-bundle ###
|
||||
|
||||
*.swp
|
||||
/public/warranty_uploads/*
|
||||
.vscode
|
||||
*__pycache__
|
||||
/public/assets/images/insurance-premiums.png
|
||||
9
catalyst/api-bundle/Access/Generator.php
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
<?php
|
||||
|
||||
namespace Catalyst\APIBundle\Access;
|
||||
|
||||
use Catalyst\AuthBundle\Service\ACLGenerator as BaseGenerator;
|
||||
|
||||
class Generator extends BaseGenerator
|
||||
{
|
||||
}
|
||||
10
catalyst/api-bundle/Access/Voter.php
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
<?php
|
||||
|
||||
namespace Catalyst\APIBundle\Access;
|
||||
|
||||
use Catalyst\AuthBundle\Service\ACLVoter as BaseVoter;
|
||||
|
||||
class Voter extends BaseVoter
|
||||
{
|
||||
}
|
||||
|
||||
9
catalyst/api-bundle/CatalystAPIBundle.php
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
<?php
|
||||
|
||||
namespace Catalyst\APIBundle;
|
||||
|
||||
use Symfony\Component\HttpKernel\Bundle\Bundle;
|
||||
|
||||
class CatalystAPIBundle extends Bundle
|
||||
{
|
||||
}
|
||||
155
catalyst/api-bundle/Command/TestAPICommand.php
Normal file
|
|
@ -0,0 +1,155 @@
|
|||
<?php
|
||||
|
||||
namespace Catalyst\APIBundle\Command;
|
||||
|
||||
use Symfony\Component\Console\Command\Command;
|
||||
use Symfony\Component\Console\Input\InputArgument;
|
||||
use Symfony\Component\Console\Input\InputOption;
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
use Symfony\Component\Security\Core\Encoder\EncoderFactoryInterface;
|
||||
|
||||
use Catalyst\APIBundle\Connector\Client as APIClient;
|
||||
|
||||
|
||||
class TestAPICommand extends Command
|
||||
{
|
||||
protected function configure()
|
||||
{
|
||||
$this->setName('api:test-connector-all')
|
||||
->setDescription('Test API connector with all commands.')
|
||||
->setHelp('Test API Connector with all commands.')
|
||||
->addArgument('protocol', InputArgument::REQUIRED, 'protocol')
|
||||
->addArgument('server', InputArgument::REQUIRED, 'server')
|
||||
->addArgument('api_key', InputArgument::REQUIRED, 'api_key')
|
||||
->addArgument('secret_key', InputArgument::REQUIRED, 'secret_key');
|
||||
}
|
||||
|
||||
protected function execute(InputInterface $input, OutputInterface $output)
|
||||
{
|
||||
$protocol = $input->getArgument('protocol');
|
||||
$server = $input->getArgument('server');
|
||||
$api_key = $input->getArgument('api_key');
|
||||
$secret_key = $input->getArgument('secret_key');
|
||||
|
||||
// api client
|
||||
$api = new APIClient($server, $api_key, $secret_key);
|
||||
$api->setProtocol($protocol);
|
||||
|
||||
// test
|
||||
$api->get('/capi/test');
|
||||
|
||||
// TODO: shift this out of the bundle, since it's project specific
|
||||
|
||||
// warranty register
|
||||
$serial = 'AJ34LJADR12134LKJL5';
|
||||
$plate_num = 'XEN918';
|
||||
$params = [
|
||||
'serial' => $serial,
|
||||
'plate_number' => $plate_num,
|
||||
'warranty_class' => 'private',
|
||||
'sku' => 'WMEB24CB-CPN00-LX',
|
||||
'date_purchase' => '20181001',
|
||||
'date_expire' => '20191001',
|
||||
'first_name' => 'First',
|
||||
'last_name' => 'Last',
|
||||
'mobile_number' => '09231234567',
|
||||
];
|
||||
//$api->post('/capi/warranties', $params);
|
||||
|
||||
// get all warranties
|
||||
$params = [
|
||||
'order' => 'DESC',
|
||||
'limit' => '5',
|
||||
'start' => '1',
|
||||
];
|
||||
|
||||
//$api->get('/capi/warranties', $params);
|
||||
|
||||
|
||||
// warranty find
|
||||
//$api->get('/capi/warranties/' . $serial);
|
||||
|
||||
// warranty update
|
||||
$id = 86811;
|
||||
$params = [
|
||||
'serial' => $serial,
|
||||
'plate_number' => $plate_num,
|
||||
'warranty_class' => 'private',
|
||||
'sku' => 'WMEB24CB-CPN00-LX',
|
||||
'date_purchase' => '20181001',
|
||||
'date_expire' => '20191001',
|
||||
'first_name' => 'First',
|
||||
'last_name' => 'Last',
|
||||
'mobile_number' => '123456789111',
|
||||
];
|
||||
//$api->post('/capi/warranties/'. $id, $params);
|
||||
|
||||
// warranty set privacy policy
|
||||
$id = 86811;
|
||||
$policy_id = 2;
|
||||
$params = [
|
||||
'privacy_policy_id' => $policy_id,
|
||||
];
|
||||
//$api->post('/capi/warranties/' . $id .'/privacypolicy', $params);
|
||||
|
||||
// warranty claim
|
||||
$id = 86811;
|
||||
$serial = 'AJ34LJADR12134LKJL5';
|
||||
$params = [
|
||||
'serial' => $serial,
|
||||
];
|
||||
//$api->post('/capi/warranties/' . $id . '/claim', $params);
|
||||
|
||||
// warranty cancel
|
||||
$id = 86811;
|
||||
//$api->get('/capi/warranties/' . $id . '/cancel');
|
||||
|
||||
// plate warranty
|
||||
//$api->get('/capi/plates/' . $plate_num . '/warranties');
|
||||
|
||||
// warranty delete
|
||||
$id = 86811;
|
||||
//$api->post('/capi/warranties/' . $id . '/delete');
|
||||
|
||||
// battery
|
||||
//$api->get('/capi/battery_brands');
|
||||
//$api->get('/capi/battery_sizes');
|
||||
//$api->get('/capi/batteries');
|
||||
|
||||
// vehicle
|
||||
//$api->get('/capi/vehicle_manufacturers');
|
||||
//$api->get('/capi/vehicles');
|
||||
|
||||
// privacy policy
|
||||
$privacy_policy_id = 2;
|
||||
//$api->get('/capi/privacy_policy/' . $privacy_policy_id );
|
||||
|
||||
// register new customer
|
||||
$params = [
|
||||
'first_name' => 'Krispups',
|
||||
'last_name' =>'Porzindog',
|
||||
'mobile_number' => '9221111111',
|
||||
'v_make_id' => '22241',
|
||||
'v_model_year' => '2018',
|
||||
'v_plate_number' => 'KPP1234',
|
||||
'v_color' => 'White',
|
||||
'v_condition' => 'new',
|
||||
'v_fuel_type' => 'gas',
|
||||
];
|
||||
//$api->post('/capi/quick_registration', $params);
|
||||
|
||||
// get warranties given list of serial numbers
|
||||
$serial_list = [
|
||||
'AJ34LJADR12134LKJM4',
|
||||
'AJ34LJADR12134LKJL5',
|
||||
'test',
|
||||
];
|
||||
|
||||
$params = [
|
||||
'serial_list' => $serial_list,
|
||||
];
|
||||
|
||||
$api->post('/capi/warranties_list', $params);
|
||||
}
|
||||
}
|
||||
104
catalyst/api-bundle/Command/TestCommand.php
Normal file
|
|
@ -0,0 +1,104 @@
|
|||
<?php
|
||||
|
||||
namespace Catalyst\APIBundle\Command;
|
||||
|
||||
use Symfony\Component\Console\Command\Command;
|
||||
use Symfony\Component\Console\Input\InputArgument;
|
||||
use Symfony\Component\Console\Input\InputOption;
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
use Symfony\Component\Security\Core\Encoder\EncoderFactoryInterface;
|
||||
|
||||
use Catalyst\APIBundle\Connector\Client as APIClient;
|
||||
|
||||
|
||||
class TestCommand extends Command
|
||||
{
|
||||
protected function configure()
|
||||
{
|
||||
$this->setName('api:test-connector')
|
||||
->setDescription('Test API connector.')
|
||||
->setHelp('Test API Connector.')
|
||||
->addArgument('protocol', InputArgument::REQUIRED, 'protocol')
|
||||
->addArgument('server', InputArgument::REQUIRED, 'server')
|
||||
->addArgument('api_key', InputArgument::REQUIRED, 'api_key')
|
||||
->addArgument('secret_key', InputArgument::REQUIRED, 'secret_key');
|
||||
}
|
||||
|
||||
protected function execute(InputInterface $input, OutputInterface $output)
|
||||
{
|
||||
$protocol = $input->getArgument('protocol');
|
||||
$server = $input->getArgument('server');
|
||||
$api_key = $input->getArgument('api_key');
|
||||
$secret_key = $input->getArgument('secret_key');
|
||||
|
||||
// api client
|
||||
$api = new APIClient($server, $api_key, $secret_key);
|
||||
$api->setProtocol($protocol);
|
||||
|
||||
// test
|
||||
$api->get('/capi/test');
|
||||
|
||||
// TODO: shift this out of the bundle, since it's project specific
|
||||
|
||||
|
||||
// warranty register
|
||||
$serial = 'AJ34LJADR12134LKJL5';
|
||||
$plate_num = 'XEN918';
|
||||
$params = [
|
||||
'serial' => $serial,
|
||||
'plate_number' => $plate_num,
|
||||
'warranty_class' => 'private',
|
||||
'sku' => 'WMEB24CB-CPN00-LX',
|
||||
'date_purchase' => '20181001',
|
||||
'date_expire' => '20191001',
|
||||
'first_name' => 'First',
|
||||
'last_name' => 'Last',
|
||||
'mobile_number' => '12345678910',
|
||||
];
|
||||
$api->post('/capi/warranties', $params);
|
||||
|
||||
// get all warranties
|
||||
$api->get('/capi/warranties');
|
||||
|
||||
|
||||
/*
|
||||
// warranty find
|
||||
$api->get('/capi/warranties/' . $serial);
|
||||
*/
|
||||
|
||||
// warranty claim
|
||||
$id = 86811;
|
||||
$serial = 'AJ34LJADR12134LKJL';
|
||||
$params = [
|
||||
'serial' => $serial,
|
||||
];
|
||||
$api->post('/capi/warranties/' . $id . '/claim', $params);
|
||||
|
||||
// add battery
|
||||
$sku = 'WZMB31QT-CPP00-S';
|
||||
$brand_id = '4';
|
||||
$size_id = '1';
|
||||
$params = [
|
||||
'sku' => $sku,
|
||||
'brand_id' => $brand_id,
|
||||
'size_id' => $size_id,
|
||||
];
|
||||
$api->post('/capi/batteries', $params);
|
||||
|
||||
/*
|
||||
|
||||
// plate warranty
|
||||
$api->get('/capi/plates/' . $plate_num . '/warranties');
|
||||
|
||||
// battery
|
||||
$api->get('/capi/battery_brands');
|
||||
$api->get('/capi/battery_sizes');
|
||||
$api->get('/capi/batteries');
|
||||
|
||||
// vehicle
|
||||
// $api->get('/capi/vehicle_manufacturers');
|
||||
// $api->get('/capi/vehicles');
|
||||
*/
|
||||
}
|
||||
}
|
||||
49
catalyst/api-bundle/Command/UserCreateCommand.php
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
<?php
|
||||
|
||||
namespace Catalyst\APIBundle\Command;
|
||||
|
||||
use Symfony\Component\Console\Command\Command;
|
||||
use Symfony\Component\Console\Input\InputArgument;
|
||||
use Symfony\Component\Console\Input\InputOption;
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
use Symfony\Component\Security\Core\Encoder\EncoderFactoryInterface;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
|
||||
use Catalyst\APIBundle\Entity\User;
|
||||
|
||||
class UserCreateCommand extends Command
|
||||
{
|
||||
protected $em;
|
||||
|
||||
public function __construct(EntityManagerInterface $em)
|
||||
{
|
||||
$this->em = $em;
|
||||
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
protected function configure()
|
||||
{
|
||||
$this->setName('api:user-create')
|
||||
->setDescription('Create new API user.')
|
||||
->setHelp('Creates new API user and saves to database.')
|
||||
->addArgument('name', InputArgument::REQUIRED, 'name');
|
||||
}
|
||||
|
||||
protected function execute(InputInterface $input, OutputInterface $output)
|
||||
{
|
||||
$name = $input->getArgument('name');
|
||||
|
||||
$user = new User();
|
||||
$user->setName($name);
|
||||
|
||||
$this->em->persist($user);
|
||||
$this->em->flush();
|
||||
|
||||
$output->write('API Key - ' . $user->getAPIKey() . "\n");
|
||||
$output->write('Secret Key - ' . $user->getSecretKey() . "\n");
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
151
catalyst/api-bundle/Connector/Client.php
Normal file
|
|
@ -0,0 +1,151 @@
|
|||
<?php
|
||||
|
||||
namespace Catalyst\APIBundle\Connector;
|
||||
|
||||
use DateTime;
|
||||
|
||||
class Client
|
||||
{
|
||||
const HEADER_API_KEY = 'X-Cata-API-Key';
|
||||
const HEADER_SIGNATURE = 'X-Cata-Signature';
|
||||
const HEADER_DATE = 'X-Cata-Date';
|
||||
|
||||
const DATE_FORMAT = 'D, d M Y H:i:s T';
|
||||
|
||||
const USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36';
|
||||
|
||||
protected $protocol;
|
||||
protected $server;
|
||||
protected $port;
|
||||
protected $api_key;
|
||||
protected $secret_key;
|
||||
|
||||
protected $curl;
|
||||
|
||||
public function __construct($server, $api_key, $secret_key)
|
||||
{
|
||||
$this->protocol = 'https';
|
||||
$this->port = null;
|
||||
|
||||
$this->server = $server;
|
||||
$this->api_key = $api_key;
|
||||
$this->secret_key = $secret_key;
|
||||
$this->curl = curl_init();
|
||||
}
|
||||
|
||||
public function __destruct()
|
||||
{
|
||||
curl_close($this->curl);
|
||||
}
|
||||
|
||||
public function setProtocol($protocol)
|
||||
{
|
||||
if ($protocol != 'http' && $protocol != 'https')
|
||||
return $this;
|
||||
|
||||
$this->protocol = $protocol;
|
||||
return $this;
|
||||
}
|
||||
|
||||
protected function getDateString()
|
||||
{
|
||||
$date = new DateTime();
|
||||
return $date->format(self::DATE_FORMAT);
|
||||
}
|
||||
|
||||
public function get($url, $params = [])
|
||||
{
|
||||
curl_reset($this->curl);
|
||||
|
||||
$date_string = $this->getDateString();
|
||||
$headers = $this->generateHeaders('GET', $url, $date_string);
|
||||
|
||||
// build query string
|
||||
if (count($params) > 0)
|
||||
$query_string = '?' . http_build_query($params);
|
||||
else
|
||||
$query_string = '';
|
||||
|
||||
// build url
|
||||
if ($this->port == null)
|
||||
$full_url = $this->protocol . '://' . $this->server . $url . $query_string;
|
||||
else
|
||||
$full_url = $this->protocol . '://' . $this->server . ':' . $this->port . $url . $query_string;
|
||||
|
||||
error_log($full_url);
|
||||
|
||||
// curl
|
||||
// curl_setopt($this->curl, CURLOPT_VERBOSE, true);
|
||||
curl_setopt($this->curl, CURLOPT_URL, $full_url);
|
||||
curl_setopt($this->curl, CURLOPT_HTTPHEADER, $headers);
|
||||
curl_setopt($this->curl, CURLOPT_USERAGENT, self::USER_AGENT);
|
||||
curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, true);
|
||||
curl_setopt($this->curl, CURLOPT_TIMEOUT, 0);
|
||||
|
||||
$res = curl_exec($this->curl);
|
||||
error_log($res);
|
||||
}
|
||||
|
||||
public function post($url, $params = [])
|
||||
{
|
||||
curl_reset($this->curl);
|
||||
|
||||
$date_string = $this->getDateString();
|
||||
$headers = $this->generateHeaders('POST', $url, $date_string);
|
||||
|
||||
// build query string
|
||||
$query_string = http_build_query($params);
|
||||
|
||||
// build url
|
||||
if ($this->port == null)
|
||||
$full_url = $this->protocol . '://' . $this->server . $url;
|
||||
else
|
||||
$full_url = $this->protocol . '://' . $this->server . ':' . $this->port . $url;
|
||||
|
||||
error_log($full_url);
|
||||
|
||||
// curl
|
||||
// curl_setopt($this->curl, CURLOPT_VERBOSE, true);
|
||||
curl_setopt($this->curl, CURLOPT_URL, $full_url);
|
||||
curl_setopt($this->curl, CURLOPT_POST, true);
|
||||
curl_setopt($this->curl, CURLOPT_POSTFIELDS, $query_string);
|
||||
curl_setopt($this->curl, CURLOPT_HTTPHEADER, $headers);
|
||||
curl_setopt($this->curl, CURLOPT_USERAGENT, self::USER_AGENT);
|
||||
curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, true);
|
||||
curl_setopt($this->curl, CURLOPT_TIMEOUT, 0);
|
||||
|
||||
$res = curl_exec($this->curl);
|
||||
error_log($res);
|
||||
}
|
||||
|
||||
protected function generateSignature($method, $url, $date_string)
|
||||
{
|
||||
$creds = [
|
||||
$method,
|
||||
$url,
|
||||
$date_string,
|
||||
$this->secret_key,
|
||||
];
|
||||
$sig_source = implode('|', $creds);
|
||||
|
||||
error_log('SIG SOURCE - ' . $sig_source);
|
||||
|
||||
$raw_sig = hash_hmac('sha1', $sig_source, $this->secret_key, true);
|
||||
$enc_sig = base64_encode($raw_sig);
|
||||
|
||||
return $enc_sig;
|
||||
}
|
||||
|
||||
protected function generateHeaders($method, $url, $date_string)
|
||||
{
|
||||
$sig = $this->generateSignature($method, $url, $date_string);
|
||||
|
||||
$headers = [
|
||||
self::HEADER_API_KEY . ': ' . $this->api_key,
|
||||
self::HEADER_SIGNATURE . ': ' . $sig,
|
||||
self::HEADER_DATE . ': ' . $date_string,
|
||||
];
|
||||
|
||||
return $headers;
|
||||
}
|
||||
}
|
||||
42
catalyst/api-bundle/Controller/APIController.php
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
<?php
|
||||
|
||||
namespace Catalyst\APIBundle\Controller;
|
||||
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
|
||||
abstract class APIController extends Controller
|
||||
{
|
||||
protected function checkRequiredParameters(Request $req, $params = [])
|
||||
{
|
||||
$missing = [];
|
||||
|
||||
// check if parameters are there
|
||||
foreach ($params as $param)
|
||||
{
|
||||
if ($req->getMethod() == 'GET')
|
||||
{
|
||||
$check = $req->query->get($param);
|
||||
if (empty($check))
|
||||
$missing[] = $param;
|
||||
}
|
||||
// else if ($req->getMethod() == 'POST')
|
||||
else
|
||||
{
|
||||
$check = $req->request->get($param);
|
||||
//if (empty($check))
|
||||
if (!isset($check))
|
||||
$missing[] = $param;
|
||||
}
|
||||
}
|
||||
|
||||
// check missing parameters
|
||||
if (count($missing) > 0)
|
||||
{
|
||||
$miss_string = implode(', ', $missing);
|
||||
return 'Missing required parameter(s): ' . $miss_string;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
20
catalyst/api-bundle/DataFixtures/APIRoleFixtures.php
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
<?php
|
||||
|
||||
namespace Catalyst\APIBundle\DataFixtures;
|
||||
|
||||
use Catalyst\APIBundle\Entity\Role;
|
||||
use Doctrine\Bundle\FixturesBundle\Fixture;
|
||||
use Doctrine\Common\Persistence\ObjectManager;
|
||||
|
||||
class APIRoleFixtures extends Fixture
|
||||
{
|
||||
public function load(ObjectManager $em)
|
||||
{
|
||||
// setup super user account
|
||||
$role = new Role();
|
||||
$role->setID(Role::SUPER_ADMIN)
|
||||
->setName('Super Administrator');
|
||||
$em->persist($role);
|
||||
$em->flush();
|
||||
}
|
||||
}
|
||||
28
catalyst/api-bundle/Entity/Role.php
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
<?php
|
||||
|
||||
namespace Catalyst\APIBundle\Entity;
|
||||
|
||||
use Catalyst\AuthBundle\Entity\Role as BaseRole;
|
||||
|
||||
use Doctrine\ORM\Mapping as ORM;
|
||||
use Doctrine\Common\Collections\ArrayCollection;
|
||||
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
|
||||
|
||||
/**
|
||||
* @ORM\Entity
|
||||
* @ORM\Table(name="api_role")
|
||||
* @UniqueEntity("id")
|
||||
* @UniqueEntity("name")
|
||||
*/
|
||||
class Role extends BaseRole
|
||||
{
|
||||
/**
|
||||
* @ORM\ManyToMany(targetEntity="User", mappedBy="roles", fetch="EXTRA_LAZY")
|
||||
*/
|
||||
protected $users;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
}
|
||||
}
|
||||
148
catalyst/api-bundle/Entity/User.php
Normal file
|
|
@ -0,0 +1,148 @@
|
|||
<?php
|
||||
|
||||
namespace Catalyst\APIBundle\Entity;
|
||||
|
||||
use Catalyst\AuthBundle\Entity\User as BaseUser;
|
||||
|
||||
use Symfony\Component\Security\Core\User\UserInterface;
|
||||
use Doctrine\ORM\Mapping as ORM;
|
||||
use Doctrine\ORM\Mapping\JoinColumn;
|
||||
use Doctrine\Common\Collections\ArrayCollection;
|
||||
use DateTime;
|
||||
|
||||
/**
|
||||
* @ORM\Entity
|
||||
* @ORM\Table(name="api_user")
|
||||
*/
|
||||
class User extends BaseUser
|
||||
{
|
||||
/**
|
||||
* @ORM\Id
|
||||
* @ORM\Column(type="integer")
|
||||
* @ORM\GeneratedValue(strategy="AUTO")
|
||||
*/
|
||||
protected $id;
|
||||
|
||||
// api key
|
||||
/**
|
||||
* @ORM\Column(type="string", length=32)
|
||||
*/
|
||||
protected $api_key;
|
||||
|
||||
// secret key
|
||||
/**
|
||||
* @ORM\Column(type="string", length=32)
|
||||
*/
|
||||
protected $secret_key;
|
||||
|
||||
/**
|
||||
* @ORM\Column(type="string", length=80)
|
||||
*/
|
||||
protected $name;
|
||||
|
||||
// date created
|
||||
/**
|
||||
* @ORM\Column(type="datetime")
|
||||
*/
|
||||
protected $date_create;
|
||||
|
||||
// roles
|
||||
/**
|
||||
* @ORM\ManyToMany(targetEntity="Role", inversedBy="users")
|
||||
* @ORM\JoinTable(name="api_user_role")
|
||||
*/
|
||||
protected $roles;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
|
||||
// generate keys
|
||||
$this->setAPIKey($this->generateAPIKey())
|
||||
->setSecretKey($this->generateSecretKey());
|
||||
|
||||
// set date created
|
||||
$this->date_create = new DateTime();
|
||||
}
|
||||
|
||||
public function getID()
|
||||
{
|
||||
return $this->id;
|
||||
}
|
||||
|
||||
public function setAPIKey($api_key)
|
||||
{
|
||||
$this->api_key = $api_key;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getAPIKey()
|
||||
{
|
||||
return $this->api_key;
|
||||
}
|
||||
|
||||
public function setSecretKey($key)
|
||||
{
|
||||
$this->secret_key = $key;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getSecretKey()
|
||||
{
|
||||
return $this->secret_key;
|
||||
}
|
||||
|
||||
public function setName($name)
|
||||
{
|
||||
$this->name = $name;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getName()
|
||||
{
|
||||
return $this->name;
|
||||
}
|
||||
|
||||
public function getDateCreate()
|
||||
{
|
||||
return $this->date_create;
|
||||
}
|
||||
|
||||
public function getPassword()
|
||||
{
|
||||
// we don't need this for API
|
||||
return 'notneeded';
|
||||
}
|
||||
|
||||
public function getSalt()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
public function getUsername()
|
||||
{
|
||||
// since it's an api, the api key IS the username
|
||||
return $this->api_key;
|
||||
}
|
||||
|
||||
public function eraseCredentials()
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
public function generateAPIKey()
|
||||
{
|
||||
return $this->generateKey('api');
|
||||
}
|
||||
|
||||
public function generateSecretKey()
|
||||
{
|
||||
return $this->generateKey('secret');
|
||||
}
|
||||
|
||||
protected function generateKey($prefix = '')
|
||||
{
|
||||
return md5(uniqid($prefix, true));
|
||||
}
|
||||
}
|
||||
|
||||
20
catalyst/api-bundle/Response/APIResponse.php
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
<?php
|
||||
|
||||
namespace Catalyst\APIBundle\Response;
|
||||
|
||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||
|
||||
class APIResponse extends JsonResponse
|
||||
{
|
||||
public function __construct($success = true, $message = '', $data = null, $status = 200, $headers = [])
|
||||
{
|
||||
$data = [
|
||||
'success' => (bool) $success,
|
||||
'message' => (string) $message,
|
||||
'data' => $data,
|
||||
];
|
||||
parent::__construct($data, $status, $headers);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
160
catalyst/api-bundle/Security/APIKeyAuthenticator.php
Normal file
|
|
@ -0,0 +1,160 @@
|
|||
<?php
|
||||
|
||||
namespace Catalyst\APIBundle\Security;
|
||||
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||
use Symfony\Component\Security\Core\Authentication\Token\PreAuthenticatedToken;
|
||||
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
|
||||
use Symfony\Component\Security\Core\Exception\AuthenticationException;
|
||||
use Symfony\Component\Security\Core\Exception\CustomUserMessageAuthenticationException;
|
||||
use Symfony\Component\Security\Core\Exception\BadCredentialsException;
|
||||
use Symfony\Component\Security\Core\User\UserProviderInterface;
|
||||
use Symfony\Component\Security\Http\Authentication\SimplePreAuthenticatorInterface;
|
||||
use Symfony\Component\Security\Http\Authentication\AuthenticationFailureHandlerInterface;
|
||||
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
|
||||
use DateTime;
|
||||
|
||||
class APIKeyAuthenticator implements SimplePreAuthenticatorInterface, AuthenticationFailureHandlerInterface
|
||||
{
|
||||
const HEADER_API_KEY = 'X-Cata-API-Key';
|
||||
const HEADER_SIGNATURE = 'X-Cata-Signature';
|
||||
const HEADER_DATE = 'X-Cata-Date';
|
||||
|
||||
const DATE_FORMAT = 'D, d M Y H:i:s T';
|
||||
|
||||
// 30 minute time limit
|
||||
const TIME_LIMIT = 1800;
|
||||
|
||||
protected $em;
|
||||
|
||||
public function __construct(EntityManagerInterface $em)
|
||||
{
|
||||
$this->em = $em;
|
||||
}
|
||||
|
||||
protected function validateSignature($creds, $secret_key)
|
||||
{
|
||||
$elements = [
|
||||
$creds['method'],
|
||||
$creds['uri'],
|
||||
$creds['date'],
|
||||
$secret_key,
|
||||
];
|
||||
$sig_source = implode('|', $elements);
|
||||
|
||||
error_log($sig_source);
|
||||
|
||||
// generate signature
|
||||
$raw_sig = hash_hmac('sha1', $sig_source, $secret_key, true);
|
||||
$enc_sig = base64_encode($raw_sig);
|
||||
|
||||
error_log($enc_sig);
|
||||
|
||||
if ($enc_sig != trim($creds['signature']))
|
||||
throw new CustomUserMessageAuthenticationException('Invalid signature.');
|
||||
|
||||
}
|
||||
|
||||
public function createToken(Request $req, $provider_key)
|
||||
{
|
||||
// api key header
|
||||
$api_key = $req->headers->get(self::HEADER_API_KEY);
|
||||
if ($api_key == null)
|
||||
throw new BadCredentialsException('No API key sent.');
|
||||
|
||||
// check date from headers
|
||||
$hdate_string = $req->headers->get(self::HEADER_DATE);
|
||||
if ($hdate_string == null)
|
||||
throw new BadCredentialsException('No date specified.');
|
||||
|
||||
$hdate = DateTime::createFromFormat(self::DATE_FORMAT, $hdate_string);
|
||||
if ($hdate == null)
|
||||
throw new BadCredentialsException('Invalid date specified.');
|
||||
|
||||
// get number of seconds difference
|
||||
$date_now = new DateTime();
|
||||
$date_diff = abs($date_now->getTimestamp() - $hdate->getTimestamp());
|
||||
|
||||
// time difference is too much
|
||||
if ($date_diff > self::TIME_LIMIT)
|
||||
throw new BadCredentialsException('Clock synchronization error.');
|
||||
|
||||
// signature header
|
||||
$sig = $req->headers->get(self::HEADER_SIGNATURE);
|
||||
if ($sig == null)
|
||||
throw new BadCredentialsException('No signature sent.');
|
||||
|
||||
// credentials
|
||||
$creds = [
|
||||
'api_key' => $api_key,
|
||||
'date' => $hdate_string,
|
||||
'signature' => $sig,
|
||||
'method' => $req->getRealMethod(),
|
||||
'uri' => $req->getPathInfo(),
|
||||
];
|
||||
|
||||
return new PreAuthenticatedToken(
|
||||
'anonymous',
|
||||
$creds,
|
||||
$provider_key
|
||||
);
|
||||
}
|
||||
|
||||
public function supportsToken(TokenInterface $token, $provider_key)
|
||||
{
|
||||
return $token instanceof PreAuthenticatedToken && $token->getProviderKey() === $provider_key;
|
||||
}
|
||||
|
||||
public function authenticateToken(TokenInterface $token, UserProviderInterface $user_provider, $provider_key)
|
||||
{
|
||||
if (!$user_provider instanceof APIKeyUserProvider)
|
||||
{
|
||||
throw new \InvalidArgumentException(
|
||||
sprintf(
|
||||
'The user provider must be an instance of APIKeyUserProvider (%s was given).',
|
||||
get_class($user_provider)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
$creds = $token->getCredentials();
|
||||
$api_key = $creds['api_key'];
|
||||
$user = $user_provider->getUserByAPIKey($api_key);
|
||||
|
||||
// check if api key is valid
|
||||
if (!$user)
|
||||
throw new CustomUserMessageAuthenticationException('Invalid API Key');
|
||||
|
||||
// check if signature is valid
|
||||
$this->validateSignature($creds, $user->getSecretKey());
|
||||
|
||||
// check if user is enabled
|
||||
if (!$user->isEnabled())
|
||||
{
|
||||
throw new CustomUserMessageAuthenticationException('User account is disabled');
|
||||
}
|
||||
|
||||
// $user = $user_provider->loadUserByUsername($username);
|
||||
|
||||
return new PreAuthenticatedToken(
|
||||
$user,
|
||||
$api_key,
|
||||
$provider_key,
|
||||
$user->getRoles()
|
||||
);
|
||||
}
|
||||
|
||||
public function onAuthenticationFailure(Request $req, AuthenticationException $exception)
|
||||
{
|
||||
$data = [
|
||||
'success' => false,
|
||||
'error' => [
|
||||
'message' => $exception->getMessage(),
|
||||
],
|
||||
];
|
||||
return new JsonResponse($data, 401);
|
||||
}
|
||||
}
|
||||
62
catalyst/api-bundle/Security/APIKeyUserProvider.php
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
<?php
|
||||
|
||||
namespace Catalyst\APIBundle\Security;
|
||||
|
||||
use Symfony\Component\Security\Core\User\UserProviderInterface;
|
||||
use Symfony\Component\Security\Core\User\UserInterface;
|
||||
use Symfony\Component\Security\Core\Exception\UnsupportedUserException;
|
||||
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
|
||||
use Catalyst\APIBundle\Entity\User;
|
||||
|
||||
class APIKeyUserProvider implements UserProviderInterface
|
||||
{
|
||||
protected $em;
|
||||
|
||||
public function __construct(EntityManagerInterface $em)
|
||||
{
|
||||
$this->em = $em;
|
||||
}
|
||||
|
||||
public function getUserByAPIKey($api_key)
|
||||
{
|
||||
$user = $this->em->getRepository(User::class)->findOneBy(array('api_key' => $api_key));
|
||||
|
||||
return $user;
|
||||
}
|
||||
|
||||
public function getUsernameForAPIKey($apiKey)
|
||||
{
|
||||
// Look up the username based on the token in the database, via
|
||||
// an API call, or do something entirely different
|
||||
$username = 'test';
|
||||
|
||||
return $username;
|
||||
}
|
||||
|
||||
public function loadUserByUsername($username)
|
||||
{
|
||||
return new User(
|
||||
$username,
|
||||
null,
|
||||
// the roles for the user - you may choose to determine
|
||||
// these dynamically somehow based on the user
|
||||
array('ROLE_API')
|
||||
);
|
||||
}
|
||||
|
||||
public function refreshUser(UserInterface $user)
|
||||
{
|
||||
// this is used for storing authentication in the session
|
||||
// but in this example, the token is sent in each request,
|
||||
// so authentication can be stateless. Throwing this exception
|
||||
// is proper to make things stateless
|
||||
throw new UnsupportedUserException();
|
||||
}
|
||||
|
||||
public function supportsClass($class)
|
||||
{
|
||||
return User::class === $class;
|
||||
}
|
||||
}
|
||||
18
catalyst/api-bundle/Service/AccessDeniedHandler.php
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
<?php
|
||||
|
||||
namespace Catalyst\APIBundle\Service;
|
||||
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
|
||||
use Symfony\Component\Security\Http\Authorization\AccessDeniedHandlerInterface;
|
||||
|
||||
class AccessDeniedHandler implements AccessDeniedHandlerInterface
|
||||
{
|
||||
public function handle(Request $req, AccessDeniedException $exception)
|
||||
{
|
||||
$content = $exception->getMessage();
|
||||
|
||||
return new Response($content, 403);
|
||||
}
|
||||
}
|
||||
|
|
@ -2,44 +2,18 @@
|
|||
"type": "project",
|
||||
"license": "proprietary",
|
||||
"repositories": [
|
||||
{
|
||||
"type": "vcs",
|
||||
"url": "https://github.com/jankstudio/doctrine2-spatial.git"
|
||||
},
|
||||
{
|
||||
"type": "vcs",
|
||||
"url": "git@gitlab.com:jankstudio1/catalyst-2/api-bundle.git"
|
||||
},
|
||||
{
|
||||
"type": "vcs",
|
||||
"url": "git@gitlab.com:jankstudio1/catalyst-2/auth-bundle.git"
|
||||
},
|
||||
{
|
||||
"type": "vcs",
|
||||
"url": "git@gitlab.com:jankstudio1/catalyst-2/menu-bundle.git"
|
||||
},
|
||||
{
|
||||
"type": "vcs",
|
||||
"url": "https://github.com/arcticzero/php-fcm.git"
|
||||
}
|
||||
{ "type": "vcs", "url": "git@gitlab.com:jankstudio-catalyst/auth-bundle.git" },
|
||||
{ "type": "vcs", "url": "git@gitlab.com:jankstudio-catalyst/menu-bundle.git" }
|
||||
],
|
||||
"require": {
|
||||
"php": "^7.1.3",
|
||||
"ext-iconv": "*",
|
||||
"composer/package-versions-deprecated": "1.11.99.4",
|
||||
"catalyst/auth-bundle": "dev-master",
|
||||
"catalyst/menu-bundle": "dev-master",
|
||||
"creof/doctrine2-spatial": "^1.2",
|
||||
"data-dog/audit-bundle": "^0.1.10",
|
||||
"doctrine/common": "^2",
|
||||
"doctrine/doctrine-bundle": "^2",
|
||||
"doctrine/doctrine-migrations-bundle": "^2",
|
||||
"doctrine/orm": "^2",
|
||||
"edwinhoksberg/php-fcm": "dev-notif-priority-hotfix",
|
||||
"edwinhoksberg/php-fcm": "^1.0",
|
||||
"guzzlehttp/guzzle": "^6.3",
|
||||
"hashids/hashids": "^4.1",
|
||||
"jankstudio/catalyst-api-bundle": "dev-master",
|
||||
"jankstudio/catalyst-auth-bundle": "dev-master",
|
||||
"jankstudio/catalyst-menu-bundle": "dev-master",
|
||||
"jankstudio/doctrine-spatial": "dev-master",
|
||||
"microsoft/azure-storage-blob": "^1.5",
|
||||
"predis/predis": "^1.1",
|
||||
"sensio/framework-extra-bundle": "^5.1",
|
||||
"setasign/fpdf": "^1.8",
|
||||
|
|
@ -50,8 +24,9 @@
|
|||
"symfony/flex": "^1.0",
|
||||
"symfony/framework-bundle": "^4.0",
|
||||
"symfony/maker-bundle": "^1.0",
|
||||
"symfony/monolog-bundle": "^3.7",
|
||||
"symfony/orm-pack": "^1.0",
|
||||
"symfony/process": "^4.0",
|
||||
"symfony/profiler-pack": "^1.0",
|
||||
"symfony/security-bundle": "^4.0",
|
||||
"symfony/translation": "^4.0",
|
||||
"symfony/twig-bundle": "^4.0",
|
||||
|
|
@ -61,24 +36,18 @@
|
|||
"require-dev": {
|
||||
"doctrine/doctrine-fixtures-bundle": "^3.0",
|
||||
"symfony/dotenv": "^4.0",
|
||||
"symfony/stopwatch": "^4.0",
|
||||
"symfony/thanks": "^1.0",
|
||||
"symfony/web-profiler-bundle": "^4.0"
|
||||
"symfony/thanks": "^1.0"
|
||||
},
|
||||
"config": {
|
||||
"preferred-install": {
|
||||
"*": "dist"
|
||||
},
|
||||
"sort-packages": true,
|
||||
"allow-plugins": {
|
||||
"composer/package-versions-deprecated": true,
|
||||
"symfony/flex": true,
|
||||
"symfony/thanks": true
|
||||
}
|
||||
"sort-packages": true
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"App\\": "src/"
|
||||
"App\\": "src/",
|
||||
"Catalyst\\APIBundle\\": "catalyst/api-bundle/"
|
||||
}
|
||||
},
|
||||
"autoload-dev": {
|
||||
|
|
|
|||
5187
composer.lock
generated
171
config/acl.yaml
|
|
@ -270,10 +270,6 @@ access_keys:
|
|||
label: Autoassign Test
|
||||
- id: jo_hub.list
|
||||
label: Hub View
|
||||
- id: jo_cancel.fulfill
|
||||
label: Fulfill Cancelled JO
|
||||
- id: jo_resq_proc.list
|
||||
label: RESQ Dispatch
|
||||
|
||||
- id: support
|
||||
label: Customer Support Access
|
||||
|
|
@ -344,14 +340,6 @@ access_keys:
|
|||
label: Auto Assigned Job Order Report
|
||||
- id: report.jo.advance_order
|
||||
label: Advance Order Job Order Report
|
||||
- id: report.customer.source
|
||||
label: Customer Source Report
|
||||
- id: report.hub.filter
|
||||
label: Hub Filter Report
|
||||
- id: report.warranty.raffle
|
||||
label: Warranty Raffle Report
|
||||
- id: report.jo.raffle
|
||||
label: JO Raffle Report
|
||||
|
||||
- id: service
|
||||
label: Other Services
|
||||
|
|
@ -441,162 +429,3 @@ access_keys:
|
|||
- id: analytics.forecast
|
||||
label: Forecasting
|
||||
|
||||
- id: sap_battery
|
||||
label: SAP Battery Access
|
||||
acls:
|
||||
- id: sap_battery.menu
|
||||
label: Menu
|
||||
- id: sap_battery.list
|
||||
label: List
|
||||
- id: sap_battery.add
|
||||
label: Add
|
||||
- id: sap_battery.update
|
||||
label: Update
|
||||
- id: sap_battery.delete
|
||||
label: Delete
|
||||
|
||||
- id: sap_brand
|
||||
label: SAP Battery Brand Access
|
||||
acls:
|
||||
- id: sap_brand.menu
|
||||
label: Menu
|
||||
- id: sap_brand.list
|
||||
label: List
|
||||
- id: sap_brand.add
|
||||
label: Add
|
||||
- id: sap_brand.update
|
||||
label: Update
|
||||
- id: sap_brand.delete
|
||||
label: Delete
|
||||
|
||||
- id: sap_bsize
|
||||
label: SAP Battery Size Access
|
||||
acls:
|
||||
- id: sap_bsize.menu
|
||||
label: Menu
|
||||
- id: sap_bsize.list
|
||||
label: List
|
||||
- id: sap_bsize.add
|
||||
label: Add
|
||||
- id: sap_bsize.update
|
||||
label: Update
|
||||
- id: sap_bsize.delete
|
||||
label: Delete
|
||||
|
||||
- id: sap_csize
|
||||
label: SAP Battery Container Size Access
|
||||
acls:
|
||||
- id: sap_csize.menu
|
||||
label: Menu
|
||||
- id: sap_csize.list
|
||||
label: List
|
||||
- id: sap_csize.add
|
||||
label: Add
|
||||
- id: sap_csize.update
|
||||
label: Update
|
||||
- id: sap_csize.delete
|
||||
label: Delete
|
||||
|
||||
- id: customer_tag
|
||||
label: Customer Tags Access
|
||||
acls:
|
||||
- id: customer_tag.menu
|
||||
label: Menu
|
||||
- id: customer_tag.list
|
||||
label: List
|
||||
- id: customer_tag.add
|
||||
label: Add
|
||||
- id: customer_tag.update
|
||||
label: Update
|
||||
- id: customer_tag.delete
|
||||
label: Delete
|
||||
|
||||
- id: dealer
|
||||
label: Dealer Access
|
||||
acls:
|
||||
- id: dealer.menu
|
||||
label: Menu
|
||||
- id: dealer.list
|
||||
label: List
|
||||
- id: dealer.add
|
||||
label: Add
|
||||
- id: dealer.update
|
||||
label: Update
|
||||
- id: dealer.delete
|
||||
label: Delete
|
||||
|
||||
- id: database
|
||||
label: Database Access
|
||||
acls:
|
||||
- id: database.menu
|
||||
label: Menu
|
||||
|
||||
- id: ticket_type
|
||||
label: Ticket Type Access
|
||||
acls:
|
||||
- id: ticket_type.menu
|
||||
label: Menu
|
||||
- id: ticket_type.list
|
||||
label: List
|
||||
- id: ticket_type.add
|
||||
label: Add
|
||||
- id: ticket_type.update
|
||||
label: Update
|
||||
- id: ticket_type.delete
|
||||
label: Delete
|
||||
|
||||
- id: subticket_type
|
||||
label: Sub Ticket Type Access
|
||||
acls:
|
||||
- id: subticket_type.menu
|
||||
label: Menu
|
||||
- id: subticket_type.list
|
||||
label: List
|
||||
- id: subticket_type.add
|
||||
label: Add
|
||||
- id: subticket_type.update
|
||||
label: Update
|
||||
- id: subticket_type.delete
|
||||
label: Delete
|
||||
|
||||
- id: emergency_type
|
||||
label: Emergency Type Access
|
||||
acls:
|
||||
- id: emergency_type.menu
|
||||
label: Menu
|
||||
- id: emergency_type.list
|
||||
label: List
|
||||
- id: emergency_type.add
|
||||
label: Add
|
||||
- id: emergency_type.update
|
||||
label: Update
|
||||
- id: emergency_type.delete
|
||||
label: Delete
|
||||
|
||||
- id: ownership_type
|
||||
label: Ownership Type Access
|
||||
acls:
|
||||
- id: ownership_type.menu
|
||||
label: Menu
|
||||
- id: ownership_type.list
|
||||
label: List
|
||||
- id: ownership_type.add
|
||||
label: Add
|
||||
- id: ownership_type.update
|
||||
label: Update
|
||||
- id: ownership_type.delete
|
||||
label: Delete
|
||||
|
||||
- id: customer_location
|
||||
label: Customer Location Access
|
||||
acls:
|
||||
- id: cust_location.menu
|
||||
label: Menu
|
||||
- id: cust_location.list
|
||||
label: List
|
||||
- id: cust_location.add
|
||||
label: Add
|
||||
- id: cust_location.update
|
||||
label: Update
|
||||
- id: cust_location.delete
|
||||
label: Delete
|
||||
|
|
|
|||
|
|
@ -57,68 +57,3 @@ access_keys:
|
|||
acls:
|
||||
- id: customer.register
|
||||
label: Register Customer
|
||||
- id: customer.verify
|
||||
label: Verify Customer
|
||||
- id: municipality
|
||||
label: Municipality
|
||||
acls:
|
||||
- id: municipality.list
|
||||
label: List
|
||||
- id: dealer
|
||||
label: Dealer
|
||||
acls:
|
||||
- id: dealer.list
|
||||
label: List
|
||||
- id: warrantyserial
|
||||
label: Warranty Serial
|
||||
acls:
|
||||
- id: warrantyserial.upload
|
||||
label: Upload
|
||||
|
||||
- id: tapi_vmanufacturer
|
||||
label: Third Party Vehicle Manufacturer Access
|
||||
acls:
|
||||
- id: tapi_vmanufacturer.list
|
||||
label: List Third Party Vehicle Manufacturers
|
||||
- id: tapi_vehicle
|
||||
label: Third Party Vehicle Make Access
|
||||
acls:
|
||||
- id: tapi_vehicle.list
|
||||
label: List Third Party Vehicles
|
||||
- id: tapi_promo
|
||||
label: Third Party Promo Access
|
||||
acls:
|
||||
- id: tapi_promo.list
|
||||
label: List Third Party Promos
|
||||
- id: tapi_battery
|
||||
label: Third Party Battery Access
|
||||
acls:
|
||||
- id: tapi_battery_compatible.list
|
||||
label: List Third Party Compatible Batteries
|
||||
- id: tapi_jo
|
||||
label: Third Party Job Order Access
|
||||
acls:
|
||||
- id: tapi_jo.request
|
||||
label: Third Party Request Job Order
|
||||
- id: tapi_jo.get.estimate
|
||||
label: Third Party Get Estimate
|
||||
- id: tapi_jo.get.ongoing
|
||||
label: Third Party Get Ongoing Job Order
|
||||
- id: tapi_jo.cancel
|
||||
label: Third Party Cancel Job Order
|
||||
- id: tapi_jo.get.invoice
|
||||
label: Third Party Get Job Order Invoice
|
||||
- id: tapi_jo.location.support
|
||||
label: Third Party Check Location Support
|
||||
- id: tapi_jo.nearest_hub.get
|
||||
label: Third Party Get Nearest Hub and Slots
|
||||
- id: tapi_jo.schedule_option.status
|
||||
label: Third Party Schedule Option Status
|
||||
- id: tapi_jo.get.info
|
||||
label: Third Party Get Job Order Info
|
||||
- id: tapi_service
|
||||
label: Third Party Service Access
|
||||
acls:
|
||||
- id: tapi_service.list
|
||||
label: List Third Party Services
|
||||
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
return [
|
||||
Symfony\Bundle\FrameworkBundle\FrameworkBundle::class => ['all' => true],
|
||||
Doctrine\Bundle\DoctrineCacheBundle\DoctrineCacheBundle::class => ['all' => true],
|
||||
Doctrine\Bundle\DoctrineBundle\DoctrineBundle::class => ['all' => true],
|
||||
Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle::class => ['all' => true],
|
||||
Symfony\Bundle\SecurityBundle\SecurityBundle::class => ['all' => true],
|
||||
|
|
@ -10,8 +11,7 @@ return [
|
|||
Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true],
|
||||
Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle::class => ['dev' => true, 'test' => true],
|
||||
Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['dev' => true, 'test' => true],
|
||||
Symfony\Bundle\MonologBundle\MonologBundle::class => ['all' => true],
|
||||
Catalyst\ApiBundle\CatalystApiBundle::class => ['all' => true],
|
||||
Catalyst\APIBundle\CatalystAPIBundle::class => ['all' => true],
|
||||
Catalyst\AuthBundle\CatalystAuthBundle::class => ['all' => true],
|
||||
Catalyst\MenuBundle\CatalystMenuBundle::class => ['all' => true],
|
||||
];
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ parameters:
|
|||
latitude: 14.6091
|
||||
longitude: 121.0223
|
||||
image_upload_directory: '%kernel.project_dir%/public/uploads'
|
||||
jo_extra_upload_directory: '%kernel.project_dir%/public/uploads/jo_extra'
|
||||
job_order_refresh_interval: 300000
|
||||
api_acl_file: 'api_acl.yaml'
|
||||
api_access_key: 'api_access_keys'
|
||||
|
|
@ -12,6 +13,7 @@ parameters:
|
|||
app_access_key: 'access_keys'
|
||||
cvu_brand_id: "%env(CVU_BRAND_ID)%"
|
||||
country_code: "%env(COUNTRY_CODE)%"
|
||||
api_version: "%env(API_VERSION)%"
|
||||
|
||||
services:
|
||||
# default configuration for services in *this* file
|
||||
|
|
@ -42,6 +44,20 @@ services:
|
|||
$cache_dir: "%kernel.cache_dir%"
|
||||
$config_dir: "%kernel.root_dir%/../config"
|
||||
|
||||
Catalyst\AuthBundle\Service\ACLGenerator:
|
||||
arguments:
|
||||
$router: "@router.default"
|
||||
$cache_dir: "%kernel.cache_dir%"
|
||||
$config_dir: "%kernel.root_dir%/../config"
|
||||
$acl_file: "%app_acl_file%"
|
||||
|
||||
Catalyst\AuthBundle\Service\ACLVoter:
|
||||
arguments:
|
||||
$user_class: "App\\Entity\\User"
|
||||
tags: ['security.voter']
|
||||
|
||||
Catalyst\AuthBundle\Service\UserChecker:
|
||||
|
||||
App\Service\FileUploader:
|
||||
arguments:
|
||||
$target_dir: '%image_upload_directory%'
|
||||
|
|
@ -59,6 +75,7 @@ services:
|
|||
$pass: "%env(RT_PASS)%"
|
||||
$usage_type: "%env(RT_USAGE_TYPE)%"
|
||||
$shortcode: "%env(RT_SHORTCODE)%"
|
||||
$dr_url: "https://resqaws.jankstudio.com/sms/delivery_receipt"
|
||||
|
||||
App\Service\MQTTClient:
|
||||
arguments:
|
||||
|
|
@ -100,6 +117,50 @@ services:
|
|||
arguments:
|
||||
$redis_client: "@App\\Service\\RedisClientProvider"
|
||||
|
||||
Catalyst\APIBundle\Security\APIKeyUserProvider:
|
||||
arguments:
|
||||
$em: "@doctrine.orm.entity_manager"
|
||||
|
||||
Catalyst\APIBundle\Security\APIKeyAuthenticator:
|
||||
arguments:
|
||||
$em: "@doctrine.orm.entity_manager"
|
||||
|
||||
Catalyst\APIBundle\Command\UserCreateCommand:
|
||||
arguments:
|
||||
$em: "@doctrine.orm.entity_manager"
|
||||
tags: ['console.command']
|
||||
|
||||
Catalyst\APIBundle\Command\TestCommand:
|
||||
tags: ['console.command']
|
||||
|
||||
Catalyst\APIBundle\Command\TestAPICommand:
|
||||
tags: ['console.command']
|
||||
|
||||
Catalyst\APIBundle\Access\Voter:
|
||||
arguments:
|
||||
$acl_gen: "@Catalyst\\APIBundle\\Access\\Generator"
|
||||
$user_class: "Catalyst\\APIBundle\\Entity\\User"
|
||||
tags: ['security.voter']
|
||||
|
||||
Catalyst\APIBundle\Access\Generator:
|
||||
arguments:
|
||||
$router: "@router.default"
|
||||
$cache_dir: "%kernel.cache_dir%"
|
||||
$config_dir: "%kernel.root_dir%/../config"
|
||||
$acl_file: "%api_acl_file%"
|
||||
|
||||
Catalyst\MenuBundle\Menu\Generator:
|
||||
arguments:
|
||||
$router: "@router.default"
|
||||
$cache_dir: "%kernel.cache_dir%"
|
||||
$config_dir: "%kernel.root_dir%/../config"
|
||||
|
||||
Catalyst\MenuBundle\Listener\MenuAnnotationListener:
|
||||
arguments:
|
||||
$menu_name: "main_menu"
|
||||
tags:
|
||||
- { name: kernel.event_listener, event: kernel.controller, method: onKernelController }
|
||||
|
||||
# invoice generator
|
||||
App\Service\InvoiceGenerator\CMBInvoiceGenerator: ~
|
||||
|
||||
|
|
@ -109,7 +170,7 @@ services:
|
|||
# job order generator
|
||||
App\Service\JobOrderHandler\CMBJobOrderHandler:
|
||||
arguments:
|
||||
$country_code: "%env(COUNTRY_CODE)%"
|
||||
$country_code: "%env(COUNTRY_CODE)%"
|
||||
|
||||
#job order generator interface
|
||||
App\Service\JobOrderHandlerInterface: "@App\\Service\\JobOrderHandler\\CMBJobOrderHandler"
|
||||
|
|
@ -129,13 +190,13 @@ services:
|
|||
App\Service\RiderAssignmentHandlerInterface: "@App\\Service\\RiderAssignmentHandler\\CMBRiderAssignmentHandler"
|
||||
|
||||
# rider API service
|
||||
App\Service\RiderAPIHandler\CMBRiderAPIHandler:
|
||||
App\Service\RiderAPIHandler\CMBRiderAPIHandler:
|
||||
arguments:
|
||||
$country_code: "%env(COUNTRY_CODE)%"
|
||||
$upload_dir: "%jo_extra_upload_directory%"
|
||||
|
||||
# rider API interface
|
||||
App\Service\RiderAPIHandlerInterface: "@App\\Service\\RiderAPIHandler\\CMBRiderAPIHandler"
|
||||
|
||||
|
||||
# map manager
|
||||
#App\Service\GISManager\Bing: ~
|
||||
App\Service\GISManager\OpenStreet: ~
|
||||
|
|
@ -171,6 +232,14 @@ services:
|
|||
$loc_key: "%env(LOCATION_RIDER_ACTIVE_KEY)%"
|
||||
$status_key: "%env(STATUS_RIDER_KEY)%"
|
||||
|
||||
# inventory manager
|
||||
App\Service\InventoryManager:
|
||||
arguments:
|
||||
$api_url: "%env(INVENTORY_API_URL)%"
|
||||
$api_ocp_key: "%env(INVENTORY_API_OCP)%"
|
||||
$api_auth_prefix: "%env(INVENTORY_API_AUTH_TOKEN_PREFIX)%"
|
||||
$api_auth_token: "%env(INVENTORY_API_AUTH_TOKEN)%"
|
||||
|
||||
# API logging
|
||||
App\EventSubscriber\LogSubscriber:
|
||||
arguments:
|
||||
|
|
|
|||
|
|
@ -63,28 +63,6 @@ main_menu:
|
|||
label: Promos
|
||||
parent: battery
|
||||
|
||||
- id: sapbattery
|
||||
acl: sap_battery.menu
|
||||
label: SAP Battery
|
||||
icon: fa fa-battery
|
||||
- id: sapbattery_list
|
||||
acl: sap_battery.list
|
||||
label: SAP Batteries
|
||||
parent: sapbattery
|
||||
- id: sapbrand_list
|
||||
acl: sap_brand.list
|
||||
label: SAP Battery Brands
|
||||
parent: sapbattery
|
||||
- id: sapbsize_list
|
||||
acl: sap_bsize.list
|
||||
label: SAP Battery Sizes
|
||||
parent: sapbattery
|
||||
- id: sapcsize_list
|
||||
acl: sap_csize.list
|
||||
label: SAP Container Sizes
|
||||
parent: sapbattery
|
||||
|
||||
|
||||
- id: vehicle
|
||||
acl: vehicle.menu
|
||||
label: Vehicle
|
||||
|
|
@ -110,10 +88,6 @@ main_menu:
|
|||
acl: hub.menu
|
||||
label: Hub
|
||||
parent: location
|
||||
- id: dealer_list
|
||||
acl: dealer.list
|
||||
label: Dealer
|
||||
parent: location
|
||||
- id: geofence_list
|
||||
acl: geofence.menu
|
||||
label: Geofence
|
||||
|
|
@ -132,10 +106,6 @@ main_menu:
|
|||
acl: jo_proc.list
|
||||
label: Dispatch
|
||||
parent: joborder
|
||||
- id: jo_resq_proc
|
||||
acl: jo_resq_proc.list
|
||||
label: RESQ Dispatch
|
||||
parent: joborder
|
||||
- id: jo_assign
|
||||
acl: jo_assign.list
|
||||
label: Rider Assignment
|
||||
|
|
@ -193,10 +163,6 @@ main_menu:
|
|||
acl: static_content.list
|
||||
label: Static Content
|
||||
parent: support
|
||||
- id: customertag_list
|
||||
acl: customer_tag.list
|
||||
label: Customer Tags
|
||||
parent: support
|
||||
|
||||
- id: service
|
||||
acl: service.menu
|
||||
|
|
@ -228,28 +194,3 @@ main_menu:
|
|||
acl: analytics.forecast
|
||||
label: Forecasting
|
||||
parent: analytics
|
||||
|
||||
- id: database
|
||||
acl: database.menu
|
||||
label: Database
|
||||
icon: fa fa-database
|
||||
- id: ticket_type_list
|
||||
acl: ticket_type.menu
|
||||
label: Ticket Types
|
||||
parent: database
|
||||
- id: subticket_type_list
|
||||
acl: subticket_type.menu
|
||||
label: Sub Ticket Types
|
||||
parent: database
|
||||
- id: emergency_type_list
|
||||
acl: emergency_type.menu
|
||||
label: Emergency Types
|
||||
parent: database
|
||||
- id: ownership_type_list
|
||||
acl: ownership_type.menu
|
||||
label: Ownership Types
|
||||
parent: database
|
||||
- id: customer_location_list
|
||||
acl: cust_location.menu
|
||||
label: Customer Locations
|
||||
parent: database
|
||||
|
|
|
|||
|
|
@ -1,944 +0,0 @@
|
|||
catalyst_auth:
|
||||
main:
|
||||
user_entity: "App\\Entity\\User"
|
||||
acl_data:
|
||||
- id: dashboard
|
||||
label: Dashboard Access
|
||||
acls:
|
||||
- id: dashboard.menu
|
||||
label: Menu
|
||||
- id: user
|
||||
label: User Access
|
||||
acls:
|
||||
- id: user.menu
|
||||
label: Menu
|
||||
- id: user.list
|
||||
label: List
|
||||
- id: user.add
|
||||
label: Add
|
||||
- id: user.update
|
||||
label: Update
|
||||
- id: user.delete
|
||||
label: Delete
|
||||
- id: user.role.sadmin
|
||||
label: Super Admin Role
|
||||
- id: user.profile
|
||||
label: User Profile
|
||||
- id: role
|
||||
label: Role Access
|
||||
acls:
|
||||
- id: role.menu
|
||||
label: Menu
|
||||
- id: role.list
|
||||
label: List
|
||||
- id: role.add
|
||||
label: Add
|
||||
- id: role.update
|
||||
label: Update
|
||||
- id: role.delete
|
||||
label: Delete
|
||||
- id: apiuser
|
||||
label: API User Access
|
||||
acls:
|
||||
- id: apiuser.menu
|
||||
label: Menu
|
||||
- id: apiuser.list
|
||||
label: List
|
||||
- id: apiuser.add
|
||||
label: Add
|
||||
- id: apiuser.update
|
||||
label: Update
|
||||
- id: apiuser.delete
|
||||
label: Delete
|
||||
- id: apirole
|
||||
label: API Role Access
|
||||
acls:
|
||||
- id: apirole.menu
|
||||
label: Menu
|
||||
- id: apirole.list
|
||||
label: List
|
||||
- id: apirole.add
|
||||
label: Add
|
||||
- id: apirole.update
|
||||
label: Update
|
||||
- id: apirole.delete
|
||||
label: Delete
|
||||
- id: logistics
|
||||
label: Logistics Access
|
||||
acls:
|
||||
- id: logistics.menu
|
||||
label: Menu
|
||||
- id: battery
|
||||
label: Battery Access
|
||||
acls:
|
||||
- id: battery.menu
|
||||
label: Menu
|
||||
- id: battery.list
|
||||
label: List
|
||||
- id: battery.add
|
||||
label: Add
|
||||
- id: battery.update
|
||||
label: Update
|
||||
- id: battery.delete
|
||||
label: Delete
|
||||
- id: bmfg
|
||||
label: Battery Manufacturer Access
|
||||
acls:
|
||||
- id: bmfg.menu
|
||||
label: Menu
|
||||
- id: bmfg.list
|
||||
label: List
|
||||
- id: bmfg.add
|
||||
label: Add
|
||||
- id: bmfg.update
|
||||
label: Update
|
||||
- id: bmfg.delete
|
||||
label: Delete
|
||||
- id: bmodel
|
||||
label: Battery Model Access
|
||||
acls:
|
||||
- id: bmodel.menu
|
||||
label: Menu
|
||||
- id: bmodel.list
|
||||
label: List
|
||||
- id: bmodel.add
|
||||
label: Add
|
||||
- id: bmodel.update
|
||||
label: Update
|
||||
- id: bmodel.delete
|
||||
label: Delete
|
||||
- id: bsize
|
||||
label: Battery Size Access
|
||||
acls:
|
||||
- id: bsize.menu
|
||||
label: Menu
|
||||
- id: bsize.list
|
||||
label: List
|
||||
- id: bsize.add
|
||||
label: Add
|
||||
- id: bsize.update
|
||||
label: Update
|
||||
- id: bsize.delete
|
||||
label: Delete
|
||||
- id: vehicle
|
||||
label: Vehicle Access
|
||||
acls:
|
||||
- id: vehicle.menu
|
||||
label: Menu
|
||||
- id: vehicle.list
|
||||
label: List
|
||||
- id: vehicle.add
|
||||
label: Add
|
||||
- id: vehicle.update
|
||||
label: Update
|
||||
- id: vehicle.delete
|
||||
label: Delete
|
||||
- id: vmfg
|
||||
label: Vehicle Manufacturer Access
|
||||
acls:
|
||||
- id: vmfg.menu
|
||||
label: Menu
|
||||
- id: vmfg.list
|
||||
label: List
|
||||
- id: vmfg.add
|
||||
label: Add
|
||||
- id: vmfg.update
|
||||
label: Update
|
||||
- id: vmfg.delete
|
||||
label: Delete
|
||||
- id: customer
|
||||
label: Customer Access
|
||||
acls:
|
||||
- id: customer.menu
|
||||
label: Menu
|
||||
- id: customer.list
|
||||
label: List
|
||||
- id: customer.add
|
||||
label: Add
|
||||
- id: customer.update
|
||||
label: Update
|
||||
- id: customer.delete
|
||||
label: Delete
|
||||
- id: customer.dpa
|
||||
label: Display DPA
|
||||
|
||||
|
||||
- id: location
|
||||
label: Location Access
|
||||
acls:
|
||||
- id: location.menu
|
||||
label: Menu
|
||||
- id: outlet
|
||||
label: Outlet Access
|
||||
acls:
|
||||
- id: outlet.menu
|
||||
label: Menu
|
||||
- id: outlet.list
|
||||
label: List
|
||||
- id: outlet.add
|
||||
label: Add
|
||||
- id: outlet.update
|
||||
label: Update
|
||||
- id: outlet.delete
|
||||
label: Delete
|
||||
- id: hub
|
||||
label: Hub Access
|
||||
acls:
|
||||
- id: hub.menu
|
||||
label: Menu
|
||||
- id: hub.list
|
||||
label: List
|
||||
- id: hub.add
|
||||
label: Add
|
||||
- id: hub.update
|
||||
label: Update
|
||||
- id: hub.delete
|
||||
label: Delete
|
||||
- id: geofence
|
||||
label: Geofence
|
||||
acls:
|
||||
- id: geofence.menu
|
||||
label: Menu
|
||||
- id: geofence.list
|
||||
label: List
|
||||
- id: geofence.add
|
||||
label: Add
|
||||
- id: geofence.delete
|
||||
label: Delete
|
||||
|
||||
- id: rider
|
||||
label: Rider Access
|
||||
acls:
|
||||
- id: rider.menu
|
||||
label: Menu
|
||||
- id: rider.list
|
||||
label: List
|
||||
- id: rider.add
|
||||
label: Add
|
||||
- id: rider.update
|
||||
label: Update
|
||||
- id: rider.delete
|
||||
label: Delete
|
||||
|
||||
- id: servicecharge
|
||||
label: Service Charge
|
||||
acls:
|
||||
- id: service_charge.menu
|
||||
label: Menu
|
||||
- id: service_charge.list
|
||||
label: List
|
||||
- id: service_charge.add
|
||||
label: Add
|
||||
- id: service_charge.update
|
||||
label: Update
|
||||
- id: service_charge.delete
|
||||
label: Delete
|
||||
|
||||
- id: joborder
|
||||
label: Job Order
|
||||
acls:
|
||||
- id: joborder.menu
|
||||
label: Menu
|
||||
- id: jo_in.list
|
||||
label: Incoming
|
||||
- id: jo_proc.list
|
||||
label: Dispatch
|
||||
- id: jo_proc.unlock
|
||||
label: Dispatch Unlock
|
||||
- id: jo_assign.list
|
||||
label: Rider Assignment
|
||||
- id: jo_assign.unlock
|
||||
label: Rider Assignment Unlock
|
||||
- id: jo_fulfill.list
|
||||
label: Fulfillment
|
||||
- id: jo_open.list
|
||||
label: Open
|
||||
- id: jo_all.list
|
||||
label: View All
|
||||
- id: jo_pdf.list
|
||||
label: PDF
|
||||
- id: jo_open.edit
|
||||
label: Edit
|
||||
- id: joborder.cancel
|
||||
label: Cancel
|
||||
- id: jo_onestep.form
|
||||
label: One-step Process
|
||||
- id: jo_onestep.edit
|
||||
label: One-step Process Edit
|
||||
- id: jo_walkin.form
|
||||
label: Walk-in
|
||||
- id: jo_walkin.edit
|
||||
label: Walk-in Edit
|
||||
- id: jo_autoassign.test
|
||||
label: Autoassign Test
|
||||
- id: jo_hub.list
|
||||
label: Hub View
|
||||
- id: jo_cancel.fulfill
|
||||
label: Fulfill Cancelled JO
|
||||
- id: jo_resq_proc.list
|
||||
label: RESQ Dispatch
|
||||
- id: jo_resq_all.list
|
||||
label: RESQ All
|
||||
|
||||
- id: support
|
||||
label: Customer Support Access
|
||||
acls:
|
||||
- id: support.menu
|
||||
label: Menu
|
||||
- id: general.search
|
||||
label: Search
|
||||
- id: warranty.search
|
||||
label: Customer Battery Search
|
||||
- id: warranty.upload
|
||||
label: Warranty Upload
|
||||
|
||||
- id: ticket
|
||||
label: Ticket Access
|
||||
acls:
|
||||
- id: ticket.menu
|
||||
label: Menu
|
||||
- id: ticket.list
|
||||
label: List
|
||||
- id: ticket.add
|
||||
label: Add
|
||||
- id: ticket.update
|
||||
label: Update
|
||||
- id: ticket.delete
|
||||
label: Delete
|
||||
|
||||
- id: promo
|
||||
label: Promo Access
|
||||
acls:
|
||||
- id: promo.menu
|
||||
label: Menu
|
||||
- id: promo.list
|
||||
label: List
|
||||
- id: promo.add
|
||||
label: Add
|
||||
- id: promo.update
|
||||
label: Update
|
||||
- id: promo.delete
|
||||
label: Delete
|
||||
|
||||
- id: report
|
||||
label: Reports
|
||||
acls:
|
||||
- id: report.menu
|
||||
label: Menu
|
||||
- id: report.reject
|
||||
label: Rejection Report
|
||||
- id: report.battery.conflict
|
||||
label: Battery Conflict Report
|
||||
- id: report.popapp.comparison
|
||||
label: Popapp Comparison Report
|
||||
- id: report.meh.customer
|
||||
label: RESQ MEH Customer Report
|
||||
- id: report.warranty.class
|
||||
label: Warranty Class Report
|
||||
- id: report.vehicle.battery.compatibility
|
||||
label: Vehicle Battery Compatibility Report
|
||||
- id: report.warranty.details
|
||||
label: Warranty Details Report
|
||||
- id: report.jo.details
|
||||
label: Job Order Details Report
|
||||
- id: report.jo_events
|
||||
label: Job Order Events Report
|
||||
- id: report.sms_messages
|
||||
label: SMS Messages Report
|
||||
- id: report.jo.auto_assign
|
||||
label: Auto Assigned Job Order Report
|
||||
- id: report.jo.advance_order
|
||||
label: Advance Order Job Order Report
|
||||
- id: report.customer.source
|
||||
label: Customer Source Report
|
||||
- id: report.hub.filter
|
||||
label: Hub Filter Report
|
||||
- id: report.warranty.raffle
|
||||
label: Warranty Raffle Report
|
||||
- id: report.jo.raffle
|
||||
label: JO Raffle Report
|
||||
|
||||
- id: service
|
||||
label: Other Services
|
||||
acls:
|
||||
- id: service.menu
|
||||
label: Menu
|
||||
- id: service.list
|
||||
label: List
|
||||
- id: service.add
|
||||
label: Add
|
||||
- id: service.update
|
||||
label: Update
|
||||
- id: service.delete
|
||||
label: Delete
|
||||
|
||||
- id: partner
|
||||
label: Partners
|
||||
acls:
|
||||
- id: partner.menu
|
||||
label: Menu
|
||||
- id: partner.list
|
||||
label: List
|
||||
- id: partner.add
|
||||
label: Add
|
||||
- id: partner.update
|
||||
label: Update
|
||||
- id: partner.delete
|
||||
label: Delete
|
||||
|
||||
- id: motolite_event
|
||||
label: Motolite Events
|
||||
acls:
|
||||
- id: motolite_event.menu
|
||||
label: Menu
|
||||
- id: motolite_event.list
|
||||
label: List
|
||||
- id: motolite_event.add
|
||||
label: Add
|
||||
- id: motolite_event.update
|
||||
label: Update
|
||||
- id: motolite_event.delete
|
||||
label: Delete
|
||||
|
||||
- id: review
|
||||
label: Reviews
|
||||
acls:
|
||||
- id: review.menu
|
||||
label: Menu
|
||||
- id: review.list
|
||||
label: List
|
||||
- id: review.view
|
||||
label: View
|
||||
- id: review.delete
|
||||
label: Delete
|
||||
|
||||
- id: privacypolicy
|
||||
label: Privacy Policy
|
||||
acls:
|
||||
- id: privacy_policy.menu
|
||||
label: Menu
|
||||
- id: privacy_policy.list
|
||||
label: List
|
||||
- id: privacy_policy.add
|
||||
label: Add
|
||||
- id: privacy_policy.update
|
||||
label: Update
|
||||
- id: privacy_policy.delete
|
||||
label: Delete
|
||||
|
||||
- id: warranty
|
||||
label: Warranty
|
||||
acls:
|
||||
- id: warranty.menu
|
||||
label: Menu
|
||||
- id: warranty.list
|
||||
label: List
|
||||
- id: warranty.add
|
||||
label: Add
|
||||
- id: warranty.update
|
||||
label: Update
|
||||
|
||||
- id: staticcontent
|
||||
label: Static Content
|
||||
acls:
|
||||
- id: static_content.menu
|
||||
label: Menu
|
||||
- id: static_content.list
|
||||
label: List
|
||||
- id: static_content.add
|
||||
label: Add
|
||||
- id: static_content.update
|
||||
label: Update
|
||||
- id: static_content.delete
|
||||
label: Delete
|
||||
|
||||
- id: analytics
|
||||
label: Analytics
|
||||
acls:
|
||||
- id: analytics.menu
|
||||
label: Menu
|
||||
- id: analytics.forecast
|
||||
label: Forecasting
|
||||
|
||||
- id: sap_battery
|
||||
label: SAP Battery Access
|
||||
acls:
|
||||
- id: sap_battery.menu
|
||||
label: Menu
|
||||
- id: sap_battery.list
|
||||
label: List
|
||||
- id: sap_battery.add
|
||||
label: Add
|
||||
- id: sap_battery.update
|
||||
label: Update
|
||||
- id: sap_battery.delete
|
||||
label: Delete
|
||||
|
||||
- id: sap_brand
|
||||
label: SAP Battery Brand Access
|
||||
acls:
|
||||
- id: sap_brand.menu
|
||||
label: Menu
|
||||
- id: sap_brand.list
|
||||
label: List
|
||||
- id: sap_brand.add
|
||||
label: Add
|
||||
- id: sap_brand.update
|
||||
label: Update
|
||||
- id: sap_brand.delete
|
||||
label: Delete
|
||||
|
||||
- id: sap_bsize
|
||||
label: SAP Battery Size Access
|
||||
acls:
|
||||
- id: sap_bsize.menu
|
||||
label: Menu
|
||||
- id: sap_bsize.list
|
||||
label: List
|
||||
- id: sap_bsize.add
|
||||
label: Add
|
||||
- id: sap_bsize.update
|
||||
label: Update
|
||||
- id: sap_bsize.delete
|
||||
label: Delete
|
||||
|
||||
- id: sap_csize
|
||||
label: SAP Battery Container Size Access
|
||||
acls:
|
||||
- id: sap_csize.menu
|
||||
label: Menu
|
||||
- id: sap_csize.list
|
||||
label: List
|
||||
- id: sap_csize.add
|
||||
label: Add
|
||||
- id: sap_csize.update
|
||||
label: Update
|
||||
- id: sap_csize.delete
|
||||
label: Delete
|
||||
|
||||
- id: customer_tag
|
||||
label: Customer Tags Access
|
||||
acls:
|
||||
- id: customer_tag.menu
|
||||
label: Menu
|
||||
- id: customer_tag.list
|
||||
label: List
|
||||
- id: customer_tag.add
|
||||
label: Add
|
||||
- id: customer_tag.update
|
||||
label: Update
|
||||
- id: customer_tag.delete
|
||||
label: Delete
|
||||
|
||||
- id: review_tag
|
||||
label: Review Tags Access
|
||||
acls:
|
||||
- id: review_tag.menu
|
||||
label: Menu
|
||||
- id: review_tag.list
|
||||
label: List
|
||||
- id: review_tag.add
|
||||
label: Add
|
||||
- id: review_tag.update
|
||||
label: Update
|
||||
- id: review_tag.delete
|
||||
label: Delete
|
||||
|
||||
- id: dealer
|
||||
label: Dealer Access
|
||||
acls:
|
||||
- id: dealer.menu
|
||||
label: Menu
|
||||
- id: dealer.list
|
||||
label: List
|
||||
- id: dealer.add
|
||||
label: Add
|
||||
- id: dealer.update
|
||||
label: Update
|
||||
- id: dealer.delete
|
||||
label: Delete
|
||||
|
||||
- id: database
|
||||
label: Database Access
|
||||
acls:
|
||||
- id: database.menu
|
||||
label: Menu
|
||||
|
||||
- id: ticket_type
|
||||
label: Ticket Type Access
|
||||
acls:
|
||||
- id: ticket_type.menu
|
||||
label: Menu
|
||||
- id: ticket_type.list
|
||||
label: List
|
||||
- id: ticket_type.add
|
||||
label: Add
|
||||
- id: ticket_type.update
|
||||
label: Update
|
||||
- id: ticket_type.delete
|
||||
label: Delete
|
||||
|
||||
- id: subticket_type
|
||||
label: Sub Ticket Type Access
|
||||
acls:
|
||||
- id: subticket_type.menu
|
||||
label: Menu
|
||||
- id: subticket_type.list
|
||||
label: List
|
||||
- id: subticket_type.add
|
||||
label: Add
|
||||
- id: subticket_type.update
|
||||
label: Update
|
||||
- id: subticket_type.delete
|
||||
label: Delete
|
||||
|
||||
- id: emergency_type
|
||||
label: Emergency Type Access
|
||||
acls:
|
||||
- id: emergency_type.menu
|
||||
label: Menu
|
||||
- id: emergency_type.list
|
||||
label: List
|
||||
- id: emergency_type.add
|
||||
label: Add
|
||||
- id: emergency_type.update
|
||||
label: Update
|
||||
- id: emergency_type.delete
|
||||
label: Delete
|
||||
|
||||
- id: ownership_type
|
||||
label: Ownership Type Access
|
||||
acls:
|
||||
- id: ownership_type.menu
|
||||
label: Menu
|
||||
- id: ownership_type.list
|
||||
label: List
|
||||
- id: ownership_type.add
|
||||
label: Add
|
||||
- id: ownership_type.update
|
||||
label: Update
|
||||
- id: ownership_type.delete
|
||||
label: Delete
|
||||
|
||||
- id: service_offering
|
||||
label: Service Offering Access
|
||||
acls:
|
||||
- id: service_offering.menu
|
||||
label: Menu
|
||||
- id: service_offering.list
|
||||
label: List
|
||||
- id: service_offering.add
|
||||
label: Add
|
||||
- id: service_offering.update
|
||||
label: Update
|
||||
- id: service_offering.delete
|
||||
label: Delete
|
||||
|
||||
- id: price_tier
|
||||
label: Price Tier
|
||||
acls:
|
||||
- id: price_tier.menu
|
||||
label: Menu
|
||||
- id: price_tier.list
|
||||
label: List
|
||||
- id: price_tier.add
|
||||
label: Add
|
||||
- id: price_tier.update
|
||||
label: Update
|
||||
- id: price_tier.delete
|
||||
label: Delete
|
||||
|
||||
- id: item_type
|
||||
label: Item Type
|
||||
acls:
|
||||
- id: item_type.menu
|
||||
label: Menu
|
||||
- id: item_type.list
|
||||
label: List
|
||||
- id: item_type.add
|
||||
label: Add
|
||||
- id: item_type.update
|
||||
label: Update
|
||||
- id: item_type.delete
|
||||
label: Delete
|
||||
|
||||
- id: item
|
||||
label: Item
|
||||
acls:
|
||||
- id: item.menu
|
||||
label: Menu
|
||||
- id: item_pricing
|
||||
label: Item Pricing
|
||||
acls:
|
||||
- id: item_pricing.update
|
||||
label: Update
|
||||
|
||||
api:
|
||||
user_entity: "App\\Entity\\ApiUser"
|
||||
acl_data:
|
||||
- id: warranty
|
||||
label: Warranty Access
|
||||
acls:
|
||||
- id: warranty.list
|
||||
label: List
|
||||
- id: warranty.find.serial
|
||||
label: Find by Serial
|
||||
- id: warranty.find.platenumber
|
||||
label: Find by Plate Number
|
||||
- id: warranty.register.battery
|
||||
label: Register Battery
|
||||
- id: warranty.claim
|
||||
label: Claim
|
||||
- id: warranty.update
|
||||
label: Update
|
||||
- id: warranty.cancel
|
||||
label: Cancel
|
||||
- id: warranty.delete
|
||||
label: Delete
|
||||
- id: warranty.set.privacypolicy
|
||||
label: Set Privacy Policy
|
||||
- id: warranty.list.serial
|
||||
label: List by Serial
|
||||
- id: batterybrand
|
||||
label: Battery Brand Access
|
||||
acls:
|
||||
- id: batterybrand.list
|
||||
label: List
|
||||
- id: batterysize
|
||||
label: Battery Size Access
|
||||
acls:
|
||||
- id: batterysize.list
|
||||
label: List
|
||||
- id: battery
|
||||
label: Battery Access
|
||||
acls:
|
||||
- id: battery.list
|
||||
label: List
|
||||
- id: vmanufacturer
|
||||
label: Vehicle Manufacturer Access
|
||||
acls:
|
||||
- id: vmanufacturer.list
|
||||
label: List
|
||||
- id: vehicle
|
||||
label: Vehicle Access
|
||||
acls:
|
||||
- id: vehicle.list
|
||||
label: List
|
||||
- id: privacypolicy
|
||||
label: Privacy Policy
|
||||
acls:
|
||||
- id: privacypolicy.find
|
||||
label: Find Privacy Policy
|
||||
- id: customer
|
||||
label: Customer
|
||||
acls:
|
||||
- id: customer.register
|
||||
label: Register Customer
|
||||
- id: customer.verify
|
||||
label: Verify Customer
|
||||
- id: municipality
|
||||
label: Municipality
|
||||
acls:
|
||||
- id: municipality.list
|
||||
label: List
|
||||
- id: dealer
|
||||
label: Dealer
|
||||
acls:
|
||||
- id: dealer.list
|
||||
label: List
|
||||
- id: warrantyserial
|
||||
label: Warranty Serial
|
||||
acls:
|
||||
- id: warrantyserial.upload
|
||||
label: Upload
|
||||
- id: hub
|
||||
label: Hub Access
|
||||
acls:
|
||||
- id: hub.list
|
||||
label: List
|
||||
- id: joborder
|
||||
label: Job Order Access
|
||||
acls:
|
||||
- id: joborder.find
|
||||
label: Find Job Order
|
||||
|
||||
- id: tapi_vmanufacturer
|
||||
label: Third Party Vehicle Manufacturer Access
|
||||
acls:
|
||||
- id: tapi_vmanufacturer.list
|
||||
label: List Third Party Vehicle Manufacturers
|
||||
- id: tapi_vehicle
|
||||
label: Third Party Vehicle Make Access
|
||||
acls:
|
||||
- id: tapi_vehicle.list
|
||||
label: List Third Party Vehicles
|
||||
- id: tapi_promo
|
||||
label: Third Party Promo Access
|
||||
acls:
|
||||
- id: tapi_promo.list
|
||||
label: List Third Party Promos
|
||||
- id: tapi_battery
|
||||
label: Third Party Battery Access
|
||||
acls:
|
||||
- id: tapi_battery_compatible.list
|
||||
label: List Third Party Compatible Batteries
|
||||
- id: tapi_jo
|
||||
label: Third Party Job Order Access
|
||||
acls:
|
||||
- id: tapi_jo.request
|
||||
label: Third Party Request Job Order
|
||||
- id: tapi_jo.get.estimate
|
||||
label: Third Party Get Estimate
|
||||
- id: tapi_jo.get.ongoing
|
||||
label: Third Party Get Ongoing Job Order
|
||||
- id: tapi_jo.cancel
|
||||
label: Third Party Cancel Job Order
|
||||
- id: tapi_jo.get.invoice
|
||||
label: Third Party Get Job Order Invoice
|
||||
- id: tapi_jo.location.support
|
||||
label: Third Party Check Location Support
|
||||
- id: tapi_jo.nearest_hub.get
|
||||
label: Third Party Get Nearest Hub and Slots
|
||||
- id: tapi_jo.schedule_option.status
|
||||
label: Third Party Schedule Option Status
|
||||
- id: tapi_jo.get.info
|
||||
label: Third Party Get Job Order Info
|
||||
- id: tapi_service
|
||||
label: Third Party Service Access
|
||||
acls:
|
||||
- id: tapi_service.list
|
||||
label: List Third Party Services
|
||||
|
||||
cust_api_v2:
|
||||
user_entity: "App\\Entity\\CustomerUser"
|
||||
acl_data:
|
||||
- id: cust_api_v2.auth
|
||||
label: Authentication
|
||||
acls:
|
||||
- id: cust_api_v2.auth.register
|
||||
label: Register
|
||||
- id: cust_api_v2.auth.confirm
|
||||
label: Confirm Number
|
||||
- id: cust_api_v2.auth.validate
|
||||
label: Validate Code
|
||||
- id: cust_api_v2.auth.resend_code
|
||||
label: Resend Code
|
||||
- id: cust_api_v2.customer
|
||||
label: Customer
|
||||
acls:
|
||||
- id: cust_api_v2.customer.info
|
||||
label: Info
|
||||
- id: cust_api_v2.customer.update
|
||||
label: Update
|
||||
- id: cust_api_v2.customer.status
|
||||
label: Status
|
||||
- id: cust_api_v2.customer.hash
|
||||
label: Hash
|
||||
- id: cust_api_v2.device
|
||||
label: Device
|
||||
acls:
|
||||
- id: cust_api_v2.device.id
|
||||
label: Update
|
||||
- id: cust_api_v2.invoice
|
||||
label: Invoice
|
||||
acls:
|
||||
- id: cust_api_v2.invoice.estimate
|
||||
label: Estimate
|
||||
- id: cust_api_v2.jo
|
||||
label: Job Order
|
||||
acls:
|
||||
- id: cust_api_v2.jo.ongoing
|
||||
label: List Ongoing
|
||||
- id: cust_api_v2.jo.invoice
|
||||
label: Get Invoice
|
||||
- id: cust_api_v2.jo.cancel
|
||||
label: Cancel
|
||||
- id: cust_api_v2.jo.info
|
||||
label: Info
|
||||
- id: cust_api_v2.jo.history
|
||||
label: History
|
||||
- id: cust_api_v2.jo.latest
|
||||
label: Latest
|
||||
- id: cust_api_v2.jo.all_ongoing
|
||||
label: List All Ongoing
|
||||
- id: cust_api_v2.jo.ongoing_count
|
||||
label: List Ongoing Count
|
||||
- id: cust_api_v2.jo.create
|
||||
label: Create
|
||||
- id: cust_api_v2.jo.request
|
||||
label: Request
|
||||
- id: cust_api_v2.jo.completed
|
||||
label: List Completed
|
||||
- id: cust_api_v2.location
|
||||
label: Location
|
||||
acls:
|
||||
- id: cust_api_v2.location.support
|
||||
label: Get Support Status
|
||||
- id: cust_api_v2.location.nearest_hub_and_slots
|
||||
label: List Nearest Hub and Slots
|
||||
- id: cust_api_v2.location.create
|
||||
label: Create
|
||||
- id: cust_api_v2.location.list
|
||||
label: List
|
||||
- id: cust_api_v2.partner
|
||||
label: Partner
|
||||
acls:
|
||||
- id: cust_api_v2.partner.info
|
||||
label: Info
|
||||
- id: cust_api_v2.partner.closest
|
||||
label: List Closest Partners
|
||||
- id: cust_api_v2.partner.review
|
||||
label: Review
|
||||
- id: cust_api_v2.privacy
|
||||
label: Privacy
|
||||
acls:
|
||||
- id: cust_api_v2.privacy.settings
|
||||
label: Get Privacy Settings
|
||||
- id: cust_api_v2.promo
|
||||
label: Promo
|
||||
acls:
|
||||
- id: cust_api_v2.promo.list
|
||||
label: Get Promos
|
||||
- id: cust_api_v2.rider
|
||||
label: Rider
|
||||
acls:
|
||||
- id: cust_api_v2.rider.status
|
||||
label: Status
|
||||
- id: cust_api_v2.rider.rating
|
||||
label: Rate
|
||||
- id: cust_api_v2.schedule
|
||||
label: Schedule
|
||||
acls:
|
||||
- id: cust_api_v2.schedule.status
|
||||
label: Get Schedule Option Status
|
||||
- id: cust_api_v2.service
|
||||
label: Service
|
||||
acls:
|
||||
- id: cust_api_v2.service.list
|
||||
label: List
|
||||
- id: cust_api_v2.vehicle
|
||||
label: Vehicle
|
||||
acls:
|
||||
- id: cust_api_v2.vehicle.mfgs
|
||||
label: List Manufacturers
|
||||
- id: cust_api_v2.vehicle.makes
|
||||
label: List Makes
|
||||
- id: cust_api_v2.vehicle.create
|
||||
label: Add
|
||||
- id: cust_api_v2.vehicle.update
|
||||
label: Update
|
||||
- id: cust_api_v2.vehicle.list
|
||||
label: List
|
||||
- id: cust_api_v2.vehicle.batteries
|
||||
label: Compatible Batteries
|
||||
- id: cust_api_v2.vehicle.delete
|
||||
label: Delete
|
||||
- id: cust_api_v2.warranty
|
||||
label: Warranty
|
||||
acls:
|
||||
- id: cust_api_v2.warranty.activate
|
||||
label: Activate
|
||||
- id: cust_api_v2.warranty.check
|
||||
label: Check Status
|
||||
- id: cust_api_v2.warranty.register
|
||||
label: Register
|
||||
|
|
@ -1,308 +0,0 @@
|
|||
catalyst_menu:
|
||||
main:
|
||||
- id: home
|
||||
acl: dashboard.menu
|
||||
label: '[menu.dashboard]'
|
||||
icon: flaticon-line-graph
|
||||
order: 1
|
||||
|
||||
|
||||
- id: user
|
||||
acl: user.menu
|
||||
label: '[menu.user]'
|
||||
icon: flaticon-users
|
||||
order: 2
|
||||
- id: user_list
|
||||
acl: user.list
|
||||
label: '[menu.user.users]'
|
||||
parent: user
|
||||
- id: role_list
|
||||
acl: role.list
|
||||
label: '[menu.user.roles]'
|
||||
parent: user
|
||||
|
||||
- id: apiuser
|
||||
acl: apiuser.menu
|
||||
label: '[menu.apiuser]'
|
||||
icon: flaticon-users
|
||||
order: 3
|
||||
- id: api_user_list
|
||||
acl: apiuser.list
|
||||
label: '[menu.apiuser.users]'
|
||||
parent: apiuser
|
||||
- id: api_role_list
|
||||
acl: apirole.list
|
||||
label: '[menu.apiuser.roles]'
|
||||
parent: apiuser
|
||||
|
||||
- id: logistics
|
||||
acl: logistics.menu
|
||||
label: '[menu.logistics]'
|
||||
icon: fa fa-truck
|
||||
order: 4
|
||||
- id: rider_list
|
||||
acl: rider.list
|
||||
label: '[menu.logistics.riders]'
|
||||
parent: logistics
|
||||
|
||||
- id: battery
|
||||
acl: battery.menu
|
||||
label: '[menu.battery]'
|
||||
icon: fa fa-battery-3
|
||||
order: 5
|
||||
- id: battery_list
|
||||
acl: battery.list
|
||||
label: '[menu.battery.batteries]'
|
||||
parent: battery
|
||||
- id: bmfg_list
|
||||
acl: bmfg.list
|
||||
label: '[menu.battery.manufacturers]'
|
||||
parent: battery
|
||||
- id: bmodel_list
|
||||
acl: bmodel.list
|
||||
label: '[menu.battery.models]'
|
||||
parent: battery
|
||||
- id: bsize_list
|
||||
acl: bsize.list
|
||||
label: '[menu.battery.sizes]'
|
||||
parent: battery
|
||||
- id: promo_list
|
||||
acl: promo.list
|
||||
label: '[menu.battery.promos]'
|
||||
parent: battery
|
||||
|
||||
- id: sapbattery
|
||||
acl: sap_battery.menu
|
||||
label: '[menu.sapbattery]'
|
||||
icon: fa fa-battery
|
||||
order: 6
|
||||
- id: sapbattery_list
|
||||
acl: sap_battery.list
|
||||
label: '[menu.sapbattery.batteries]'
|
||||
parent: sapbattery
|
||||
- id: sapbrand_list
|
||||
acl: sap_brand.list
|
||||
label: '[menu.sapbattery.brands]'
|
||||
parent: sapbattery
|
||||
- id: sapbsize_list
|
||||
acl: sap_bsize.list
|
||||
label: '[menu.sapbattery.sizes]'
|
||||
parent: sapbattery
|
||||
- id: sapcsize_list
|
||||
acl: sap_csize.list
|
||||
label: '[menu.sapbattery.csizes]'
|
||||
parent: sapbattery
|
||||
|
||||
|
||||
- id: vehicle
|
||||
acl: vehicle.menu
|
||||
label: '[menu.vehicle]'
|
||||
icon: fa fa-car
|
||||
order: 7
|
||||
- id: vehicle_list
|
||||
acl: vehicle.list
|
||||
label: '[menu.vehicle.vehicles]'
|
||||
parent: vehicle
|
||||
- id: vmfg_list
|
||||
acl: vmfg.list
|
||||
label: '[menu.vehicle.manufacturers]'
|
||||
parent: vehicle
|
||||
|
||||
- id: location
|
||||
acl: location.menu
|
||||
label: '[menu.location]'
|
||||
icon: fa fa-home
|
||||
order: 8
|
||||
- id: outlet_list
|
||||
acl: outlet.menu
|
||||
label: '[menu.location.outlets]'
|
||||
parent: location
|
||||
- id: hub_list
|
||||
acl: hub.menu
|
||||
label: '[menu.location.hubs]'
|
||||
parent: location
|
||||
- id: dealer_list
|
||||
acl: dealer.list
|
||||
label: '[menu.location.dealers]'
|
||||
parent: location
|
||||
- id: geofence_list
|
||||
acl: geofence.menu
|
||||
label: '[menu.location.geofence]'
|
||||
parent: location
|
||||
|
||||
|
||||
- id: joborder
|
||||
acl: joborder.menu
|
||||
label: '[menu.joborder]'
|
||||
icon: flaticon-calendar-3
|
||||
order: 9
|
||||
- id: jo_in
|
||||
acl: jo_in.list
|
||||
label: '[menu.joborder.incoming]'
|
||||
parent: joborder
|
||||
- id: jo_proc
|
||||
acl: jo_proc.list
|
||||
label: '[menu.joborder.dispatch]'
|
||||
parent: joborder
|
||||
- id: jo_resq_proc
|
||||
acl: jo_resq_proc.list
|
||||
label: '[menu.joborder.resqdispatch]'
|
||||
parent: joborder
|
||||
- id: jo_assign
|
||||
acl: jo_assign.list
|
||||
label: '[menu.joborder.assignment]'
|
||||
parent: joborder
|
||||
- id: jo_fulfill
|
||||
acl: jo_fulfill.list
|
||||
label: '[menu.joborder.fulfillment]'
|
||||
parent: joborder
|
||||
- id: jo_open
|
||||
acl: jo_open.list
|
||||
label: '[menu.joborder.open]'
|
||||
parent: joborder
|
||||
- id: jo_all
|
||||
acl: jo_all.list
|
||||
label: '[menu.joborder.viewall]'
|
||||
parent: joborder
|
||||
- id: jo_hub_view
|
||||
acl: jo_hub.list
|
||||
label: '[menu.joborder.hubview]'
|
||||
parent: joborder
|
||||
- id: jo_resq_all
|
||||
acl: jo_resq_all.list
|
||||
label: '[menu.joborder.resqall]'
|
||||
parent: joborder
|
||||
|
||||
- id: support
|
||||
acl: support.menu
|
||||
label: '[menu.support]'
|
||||
icon: flaticon-support
|
||||
order: 11
|
||||
- id: customer_list
|
||||
acl: customer.list
|
||||
label: '[menu.support.customers]'
|
||||
parent: support
|
||||
- id: ticket_list
|
||||
acl: ticket.list
|
||||
label: '[menu.support.tickets]'
|
||||
parent: support
|
||||
- id: general_search
|
||||
acl: general.search
|
||||
label: '[menu.support.search]'
|
||||
parent: support
|
||||
- id: warranty_search
|
||||
acl: warranty.search
|
||||
label: '[menu.support.warrantysearch]'
|
||||
parent: support
|
||||
- id: privacy_policy_list
|
||||
acl: privacy_policy.list
|
||||
label: '[menu.support.privacypolicy]'
|
||||
parent: support
|
||||
- id: warranty_list
|
||||
acl: warranty.list
|
||||
label: '[menu.support.warranty]'
|
||||
parent: support
|
||||
- id: warranty_upload
|
||||
acl: warranty.upload
|
||||
label: '[menu.support.warrantyupload]'
|
||||
parent: support
|
||||
- id: static_content_list
|
||||
acl: static_content.list
|
||||
label: '[menu.support.staticcontent]'
|
||||
parent: support
|
||||
- id: customertag_list
|
||||
acl: customer_tag.list
|
||||
label: '[menu.support.customertags]'
|
||||
parent: support
|
||||
- id: reviewtag_list
|
||||
acl: review_tag.list
|
||||
label: '[menu.support.reviewtags]'
|
||||
parent: support
|
||||
|
||||
- id: service
|
||||
acl: service.menu
|
||||
label: '[menu.service]'
|
||||
icon: flaticon-squares
|
||||
order: 12
|
||||
- id: service_list
|
||||
acl: service.list
|
||||
label: '[menu.service.services]'
|
||||
parent: service
|
||||
|
||||
- id: partner
|
||||
acl: partner.menu
|
||||
label: '[menu.partner]'
|
||||
icon: flaticon-network
|
||||
order: 13
|
||||
- id: partner_list
|
||||
acl: partner.list
|
||||
label: '[menu.partner.partners]'
|
||||
parent: partner
|
||||
- id: review_list
|
||||
acl: review.list
|
||||
label: '[menu.partner.reviews]'
|
||||
parent: partner
|
||||
|
||||
- id: motolite_event
|
||||
acl: motolite_event.menu
|
||||
label: '[menu.motolite_event]'
|
||||
icon: flaticon-event-calendar-symbol
|
||||
order: 14
|
||||
- id: motolite_event_list
|
||||
acl: motolite_event.list
|
||||
label: '[menu.motolite_event.events]'
|
||||
parent: motolite_event
|
||||
|
||||
- id: analytics
|
||||
acl: analytics.menu
|
||||
label: '[menu.analytics]'
|
||||
icon: flaticon-graphic
|
||||
order: 15
|
||||
- id: analytics_forecast_form
|
||||
acl: analytics.forecast
|
||||
label: '[menu.analytics.forecasting]'
|
||||
parent: analytics
|
||||
|
||||
- id: database
|
||||
acl: database.menu
|
||||
label: '[menu.database]'
|
||||
icon: fa fa-database
|
||||
order: 16
|
||||
- id: ticket_type_list
|
||||
acl: ticket_type.menu
|
||||
label: '[menu.database.tickettypes]'
|
||||
parent: database
|
||||
- id: subticket_type_list
|
||||
acl: subticket_type.menu
|
||||
label: '[menu.database.subtickettypes]'
|
||||
parent: database
|
||||
- id: emergency_type_list
|
||||
acl: emergency_type.menu
|
||||
label: '[menu.database.emergencytypes]'
|
||||
parent: database
|
||||
- id: ownership_type_list
|
||||
acl: ownership_type.menu
|
||||
label: '[menu.database.ownershiptypes]'
|
||||
parent: database
|
||||
- id: service_offering_list
|
||||
acl: service_offering.menu
|
||||
label: '[menu.database.serviceofferings]'
|
||||
parent: database
|
||||
- id: item_type_list
|
||||
acl: item_type.menu
|
||||
label: '[menu.database.itemtypes]'
|
||||
parent: database
|
||||
|
||||
- id: item
|
||||
acl: item.menu
|
||||
label: Item Management
|
||||
icon: fa fa-boxes
|
||||
order: 10
|
||||
- id: price_tier_list
|
||||
acl: price_tier.list
|
||||
label: Price Tiers
|
||||
parent: item
|
||||
- id: item_pricing
|
||||
acl: item_pricing.update
|
||||
label: Item Pricing
|
||||
parent: item
|
||||
|
|
@ -1,19 +0,0 @@
|
|||
monolog:
|
||||
handlers:
|
||||
main:
|
||||
type: stream
|
||||
path: "%kernel.logs_dir%/%kernel.environment%.log"
|
||||
level: debug
|
||||
channels: ["!event"]
|
||||
# uncomment to get logging in your browser
|
||||
# you may have to allow bigger header sizes in your Web server configuration
|
||||
#firephp:
|
||||
# type: firephp
|
||||
# level: info
|
||||
#chromephp:
|
||||
# type: chromephp
|
||||
# level: info
|
||||
console:
|
||||
type: console
|
||||
process_psr_3_messages: false
|
||||
channels: ["!event", "!doctrine", "!console"]
|
||||
|
|
@ -11,8 +11,6 @@ doctrine:
|
|||
driver: 'pdo_mysql'
|
||||
server_version: '5.7'
|
||||
charset: utf8mb4
|
||||
options:
|
||||
!php/const PDO::MYSQL_ATTR_LOCAL_INFILE: true
|
||||
|
||||
# With Symfony 3.3, remove the `resolve:` prefix
|
||||
url: '%env(resolve:DATABASE_URL)%'
|
||||
|
|
|
|||
|
|
@ -1,8 +0,0 @@
|
|||
# As of Symfony 5.1, deprecations are logged in the dedicated "deprecation" channel when it exists
|
||||
#monolog:
|
||||
# channels: [deprecation]
|
||||
# handlers:
|
||||
# deprecation:
|
||||
# type: stream
|
||||
# channels: [deprecation]
|
||||
# path: php://stderr
|
||||
|
|
@ -1,18 +0,0 @@
|
|||
monolog:
|
||||
handlers:
|
||||
main:
|
||||
type: fingers_crossed
|
||||
action_level: error
|
||||
handler: nested
|
||||
excluded_http_codes: [404, 405]
|
||||
buffer_size: 50 # How many messages should be saved? Prevent memory leaks
|
||||
nested:
|
||||
type: stream
|
||||
path: php://stderr
|
||||
level: debug
|
||||
formatter: monolog.formatter.json
|
||||
console:
|
||||
type: console
|
||||
process_psr_3_messages: false
|
||||
channels: ["!event", "!doctrine"]
|
||||
|
||||
|
|
@ -9,24 +9,13 @@ security:
|
|||
entity:
|
||||
class: App\Entity\User
|
||||
property: username
|
||||
api_provider:
|
||||
entity:
|
||||
class: App\Entity\ApiUser
|
||||
property: api_key
|
||||
api_v2_provider:
|
||||
entity:
|
||||
class: App\Entity\CustomerUser
|
||||
property: api_key
|
||||
api_key_user_provider:
|
||||
id: Catalyst\APIBundle\Security\APIKeyUserProvider
|
||||
firewalls:
|
||||
dev:
|
||||
pattern: ^/(_(profiler|wdt)|css|images|js)/
|
||||
security: false
|
||||
|
||||
new_rider_api_login:
|
||||
pattern: ^\/rider_api\/login$
|
||||
methods: [POST]
|
||||
security: false
|
||||
|
||||
login:
|
||||
pattern: ^\/login$
|
||||
methods: [GET]
|
||||
|
|
@ -49,57 +38,17 @@ security:
|
|||
pattern: ^\/rapi\/
|
||||
security: false
|
||||
|
||||
test_capi:
|
||||
pattern: ^\/test_capi\/
|
||||
security: false
|
||||
|
||||
insurance:
|
||||
pattern: ^\/insurance\/
|
||||
security: false
|
||||
|
||||
paymongo:
|
||||
pattern: ^\/paymongo\/
|
||||
security: false
|
||||
|
||||
cust_api_v2:
|
||||
pattern: ^\/apiv2\/(?!register|register\/|number_confirm|number_confirm\/|code_validate|code_validate\/|resend_code|resend_code\/|version_check|version_check\/|account|account\/|account_code_validate|account_code_validate\/|account_resend_code|account_resend_code\/)
|
||||
provider: api_v2_provider
|
||||
access_denied_handler: Catalyst\ApiBundle\Service\AccessDeniedHandler
|
||||
stateless: true
|
||||
guard:
|
||||
authenticators:
|
||||
- Catalyst\ApiBundle\Security\Authenticator
|
||||
|
||||
cust_api_v2_guest:
|
||||
pattern: ^\/apiv2\/(register|register\/|number_confirm|number_confirm\/|code_validate|code_validate\/|resend_code|resend_code\/|version_check|version_check\/|account|account\/|account_code_validate|account_code_validate\/|account_resend_code|account_resend_code\/)
|
||||
security: false
|
||||
|
||||
warranty_api:
|
||||
pattern: ^\/capi\/
|
||||
provider: api_provider
|
||||
access_denied_handler: Catalyst\ApiBundle\Service\AccessDeniedHandler
|
||||
stateless: true
|
||||
guard:
|
||||
authenticators:
|
||||
- Catalyst\ApiBundle\Security\Authenticator
|
||||
simple_preauth:
|
||||
authenticator: Catalyst\APIBundle\Security\APIKeyAuthenticator
|
||||
provider: api_key_user_provider
|
||||
user_checker: Catalyst\AuthBundle\Service\UserChecker
|
||||
|
||||
new_rider_api:
|
||||
pattern: ^\/rider_api\/
|
||||
provider: api_provider
|
||||
access_denied_handler: Catalyst\ApiBundle\Service\AccessDeniedHandler
|
||||
stateless: true
|
||||
guard:
|
||||
authenticators:
|
||||
- Catalyst\ApiBundle\Security\Authenticator
|
||||
|
||||
third_party_api:
|
||||
pattern: ^\/tapi\/
|
||||
provider: api_provider
|
||||
access_denied_handler: Catalyst\ApiBundle\Service\AccessDeniedHandler
|
||||
stateless: true
|
||||
guard:
|
||||
authenticators:
|
||||
- Catalyst\ApiBundle\Security\Authenticator
|
||||
cmb_rider_api:
|
||||
pattern: ^\/cmbrapi\/
|
||||
security: false
|
||||
|
||||
main:
|
||||
provider: user_provider
|
||||
|
|
@ -114,7 +63,6 @@ security:
|
|||
lifetime: 604800
|
||||
path: /
|
||||
user_checker: Catalyst\AuthBundle\Service\UserChecker
|
||||
switch_user: { role: ROLE_SUPER_ADMIN }
|
||||
|
||||
# activate different ways to authenticate
|
||||
|
||||
|
|
|
|||
|
|
@ -1,13 +0,0 @@
|
|||
monolog:
|
||||
handlers:
|
||||
main:
|
||||
type: fingers_crossed
|
||||
action_level: error
|
||||
handler: nested
|
||||
excluded_http_codes: [404, 405]
|
||||
channels: ["!event"]
|
||||
nested:
|
||||
type: stream
|
||||
path: "%kernel.logs_dir%/%kernel.environment%.log"
|
||||
level: debug
|
||||
|
||||
|
|
@ -8,4 +8,3 @@ twig:
|
|||
mqtt_host: "%env(MQTT_WS_HOST)%"
|
||||
mqtt_port: "%env(MQTT_WS_PORT)%"
|
||||
dashboard_enable: "%env(DASHBOARD_ENABLE)%"
|
||||
ssl_enable: "%env(SSL_ENABLE)%"
|
||||
|
|
|
|||
|
|
@ -43,6 +43,20 @@ services:
|
|||
$cache_dir: "%kernel.cache_dir%"
|
||||
$config_dir: "%kernel.root_dir%/../config"
|
||||
|
||||
Catalyst\AuthBundle\Service\ACLGenerator:
|
||||
arguments:
|
||||
$router: "@router.default"
|
||||
$cache_dir: "%kernel.cache_dir%"
|
||||
$config_dir: "%kernel.root_dir%/../config"
|
||||
$acl_file: "%app_acl_file%"
|
||||
|
||||
Catalyst\AuthBundle\Service\ACLVoter:
|
||||
arguments:
|
||||
$user_class: "App\\Entity\\User"
|
||||
tags: ['security.voter']
|
||||
|
||||
Catalyst\AuthBundle\Service\UserChecker:
|
||||
|
||||
App\Service\FileUploader:
|
||||
arguments:
|
||||
$target_dir: '%image_upload_directory%'
|
||||
|
|
@ -60,6 +74,7 @@ services:
|
|||
$pass: "%env(RT_PASS)%"
|
||||
$usage_type: "%env(RT_USAGE_TYPE)%"
|
||||
$shortcode: "%env(RT_SHORTCODE)%"
|
||||
$dr_url: "https://resqaws.jankstudio.com/sms/delivery_receipt"
|
||||
|
||||
App\Service\MQTTClient:
|
||||
arguments:
|
||||
|
|
@ -101,6 +116,50 @@ services:
|
|||
arguments:
|
||||
$redis_client: "@App\\Service\\RedisClientProvider"
|
||||
|
||||
Catalyst\APIBundle\Security\APIKeyUserProvider:
|
||||
arguments:
|
||||
$em: "@doctrine.orm.entity_manager"
|
||||
|
||||
Catalyst\APIBundle\Security\APIKeyAuthenticator:
|
||||
arguments:
|
||||
$em: "@doctrine.orm.entity_manager"
|
||||
|
||||
Catalyst\APIBundle\Command\UserCreateCommand:
|
||||
arguments:
|
||||
$em: "@doctrine.orm.entity_manager"
|
||||
tags: ['console.command']
|
||||
|
||||
Catalyst\APIBundle\Command\TestCommand:
|
||||
tags: ['console.command']
|
||||
|
||||
Catalyst\APIBundle\Command\TestAPICommand:
|
||||
tags: ['console.command']
|
||||
|
||||
Catalyst\APIBundle\Access\Voter:
|
||||
arguments:
|
||||
$acl_gen: "@Catalyst\\APIBundle\\Access\\Generator"
|
||||
$user_class: "Catalyst\\APIBundle\\Entity\\User"
|
||||
tags: ['security.voter']
|
||||
|
||||
Catalyst\APIBundle\Access\Generator:
|
||||
arguments:
|
||||
$router: "@router.default"
|
||||
$cache_dir: "%kernel.cache_dir%"
|
||||
$config_dir: "%kernel.root_dir%/../config"
|
||||
$acl_file: "%api_acl_file%"
|
||||
|
||||
Catalyst\MenuBundle\Menu\Generator:
|
||||
arguments:
|
||||
$router: "@router.default"
|
||||
$cache_dir: "%kernel.cache_dir%"
|
||||
$config_dir: "%kernel.root_dir%/../config"
|
||||
|
||||
Catalyst\MenuBundle\Listener\MenuAnnotationListener:
|
||||
arguments:
|
||||
$menu_name: "main_menu"
|
||||
tags:
|
||||
- { name: kernel.event_listener, event: kernel.controller, method: onKernelController }
|
||||
|
||||
# invoice generator
|
||||
App\Service\InvoiceGenerator\ResqInvoiceGenerator: ~
|
||||
|
||||
|
|
|
|||
|
|
@ -169,59 +169,3 @@ api_schedule_option_status:
|
|||
path: /api/schedule_option_status
|
||||
controller: App\Controller\APIController::scheduleOptionStatus
|
||||
methods: [GET]
|
||||
|
||||
# paperless warranty / qr code
|
||||
api_warr_serial_check:
|
||||
path: /api/warranty/{serial}
|
||||
controller: App\Controller\APIController::warrantyCheck
|
||||
methods: [GET]
|
||||
|
||||
api_warr_serial_register:
|
||||
path: /api/warranty/{serial}
|
||||
controller: App\Controller\APIController::warrantyRegister
|
||||
methods: [POST]
|
||||
|
||||
api_jo_info:
|
||||
path: /api/job_order/{id}/info
|
||||
controller: App\Controller\APIController::getJobOrderInfo
|
||||
methods: [GET]
|
||||
|
||||
api_ongoing_job_orders:
|
||||
path: /api/job_orders/ongoing
|
||||
controller: App\Controller\APIController::getAllOngoingJobOrders
|
||||
methods: [GET]
|
||||
|
||||
api_ongoing_jo_count:
|
||||
path: /api/job_orders/ongoing/count
|
||||
controller: App\Controller\APIController::getOngoingJobOrderCount
|
||||
methods: [GET]
|
||||
|
||||
api_new_location:
|
||||
path: /api/new_location
|
||||
controller: App\Controller\APIController::addLocation
|
||||
methods: [POST]
|
||||
|
||||
api_locations:
|
||||
path: /api/locations
|
||||
controller: App\Controller\APIController::getLocations
|
||||
methods: [GET]
|
||||
|
||||
api_cust_vehicle_remove:
|
||||
path: /api/vehicles/{id}/remove
|
||||
controller: App\Controller\APIController::removeVehicle
|
||||
methods: [POST]
|
||||
|
||||
api_latest_job_order:
|
||||
path: /api/job_order/latest
|
||||
controller: App\Controller\APIController::getLatestJobOrder
|
||||
methods: [GET]
|
||||
|
||||
api_customer_hash_get:
|
||||
path: /api/customer_hash
|
||||
controller: App\Controller\APIController::getCustomerHash
|
||||
methods: [GET]
|
||||
|
||||
#api_completed_job_orders:
|
||||
# path: /api/job_orders/completed
|
||||
# controller: App\Controller\APIController::getCompletedJobOrders
|
||||
# methods: [GET]
|
||||
|
|
|
|||
|
|
@ -1,315 +0,0 @@
|
|||
# api
|
||||
|
||||
apiv2_register:
|
||||
path: /apiv2/register
|
||||
controller: App\Controller\CustomerAppAPI\AuthController::register
|
||||
methods: [POST]
|
||||
|
||||
apiv2_confirm:
|
||||
path: /apiv2/number_confirm
|
||||
controller: App\Controller\CustomerAppAPI\AuthController::confirmNumber
|
||||
methods: [POST]
|
||||
|
||||
apiv2_validate:
|
||||
path: /apiv2/code_validate
|
||||
controller: App\Controller\CustomerAppAPI\AuthController::validateCode
|
||||
methods: [POST]
|
||||
|
||||
apiv2_info_get:
|
||||
path: /apiv2/info
|
||||
controller: App\Controller\CustomerAppAPI\CustomerController::getInfo
|
||||
methods: [GET]
|
||||
|
||||
apiv2_info_update:
|
||||
path: /apiv2/info
|
||||
controller: App\Controller\CustomerAppAPI\CustomerController::updateInfo
|
||||
methods: [POST]
|
||||
|
||||
apiv2_status:
|
||||
path: /apiv2/status
|
||||
controller: App\Controller\CustomerAppAPI\CustomerController::getStatus
|
||||
methods: [GET]
|
||||
|
||||
apiv2_vehicle_mfg_list:
|
||||
path: /apiv2/vehicle/mfgs
|
||||
controller: App\Controller\CustomerAppAPI\VehicleController::listVehicleManufacturers
|
||||
methods: [GET]
|
||||
|
||||
apiv2_vehicle_make_list:
|
||||
path: /apiv2/vehicle/mfgs/{mfg_id}/makes
|
||||
controller: App\Controller\CustomerAppAPI\VehicleController::listVehicleMakes
|
||||
methods: [GET]
|
||||
|
||||
apiv2_cust_vehicle_add:
|
||||
path: /apiv2/vehicles
|
||||
controller: App\Controller\CustomerAppAPI\VehicleController::addVehicle
|
||||
methods: [POST]
|
||||
|
||||
apiv2_cust_vehicle_info:
|
||||
path: /apiv2/vehicles/{id}
|
||||
controller: App\Controller\CustomerAppAPI\VehicleController::getVehicle
|
||||
methods: [GET]
|
||||
|
||||
apiv2_cust_vehicle_update:
|
||||
path: /apiv2/vehicles/{id}
|
||||
controller: App\Controller\CustomerAppAPI\VehicleController::updateVehicle
|
||||
methods: [POST]
|
||||
|
||||
apiv2_cust_vehicle_list:
|
||||
path: /apiv2/vehicles
|
||||
controller: App\Controller\CustomerAppAPI\VehicleController::listVehicles
|
||||
methods: [GET]
|
||||
|
||||
apiv2_promo_list:
|
||||
path: /apiv2/promos
|
||||
controller: App\Controller\CustomerAppAPI\PromoController::listPromos
|
||||
methods: [GET]
|
||||
|
||||
apiv2_battery_list:
|
||||
path: /apiv2/vehicles/{vid}/compatible_batteries
|
||||
controller: App\Controller\CustomerAppAPI\VehicleController::getCompatibleBatteries
|
||||
methods: [GET]
|
||||
|
||||
apiv2_jo_request:
|
||||
path: /apiv2/job_order
|
||||
controller: App\Controller\CustomerAppAPI\JobOrderController::requestJobOrder
|
||||
methods: [POST]
|
||||
|
||||
apiv2_estimate:
|
||||
path: /apiv2/estimate
|
||||
controller: App\Controller\CustomerAppAPI\InvoiceController::getEstimate
|
||||
methods: [POST]
|
||||
|
||||
apiv2_ongoing:
|
||||
path: /apiv2/job_order/ongoing
|
||||
controller: App\Controller\CustomerAppAPI\JobOrderController::getOngoing
|
||||
methods: [GET]
|
||||
|
||||
apiv2_rider_status:
|
||||
path: /apiv2/rider
|
||||
controller: App\Controller\CustomerAppAPI\RiderController::getRiderStatus
|
||||
methods: [GET]
|
||||
|
||||
apiv2_rider_rating_add:
|
||||
path: /apiv2/rider_rating
|
||||
controller: App\Controller\CustomerAppAPI\RiderController::addRiderRating
|
||||
methods: [POST]
|
||||
|
||||
apiv2_jo_cancel:
|
||||
path: /apiv2/job_order/cancel
|
||||
controller: App\Controller\CustomerAppAPI\JobOrderController:cancelJobOrder
|
||||
methods: [POST]
|
||||
|
||||
apiv2_jo_history:
|
||||
path: /apiv2/job_order/history
|
||||
controller: App\Controller\CustomerAppAPI\JobOrderController:getJOHistory
|
||||
methods: [GET]
|
||||
|
||||
apiv2_jo_invoice:
|
||||
path: /apiv2/job_order/invoice
|
||||
controller: App\Controller\CustomerAppAPI\JobOrderController:getJOInvoice
|
||||
methods: [GET]
|
||||
|
||||
apiv2_device_id:
|
||||
path: /apiv2/device_id
|
||||
controller: App\Controller\CustomerAppAPI\DeviceController:updateDeviceID
|
||||
methods: [POST]
|
||||
|
||||
apiv2_privacy:
|
||||
path: /apiv2/privacy
|
||||
controller: App\Controller\CustomerAppAPI\PrivacyController:privacySettings
|
||||
methods: [POST]
|
||||
|
||||
apiv2_resend_code:
|
||||
path: /apiv2/resend_code
|
||||
controller: App\Controller\CustomerAppAPI\AuthController:resendCode
|
||||
methods: [POST]
|
||||
|
||||
apiv2_location_support:
|
||||
path: /apiv2/location_support
|
||||
controller: App\Controller\CustomerAppAPI\LocationController:locationSupport
|
||||
methods: [GET]
|
||||
|
||||
apiv2_activate_warranty:
|
||||
path: /apiv2/activate_warranty
|
||||
controller: App\Controller\CustomerAppAPI\WarrantyController:activateWarranty
|
||||
methods: [POST]
|
||||
|
||||
apiv2_service_list:
|
||||
path: /apiv2/services
|
||||
controller: App\Controller\CustomerAppAPI\ServiceController:listServices
|
||||
methods: [GET]
|
||||
|
||||
apiv2_partner_info:
|
||||
path: /apiv2/partners/{pid}
|
||||
controller: App\Controller\CustomerAppAPI\PartnerController:getPartnerInformation
|
||||
methods: [GET]
|
||||
|
||||
apiv2_partner:
|
||||
path: /apiv2/partners
|
||||
controller: App\Controller\CustomerAppAPI\PartnerController:getClosestPartners
|
||||
methods: [GET]
|
||||
|
||||
apiv2_partner_review:
|
||||
path: /apiv2/partners/{pid}/review
|
||||
controller: App\Controller\CustomerAppAPI\PartnerController:reviewPartner
|
||||
methods: [POST]
|
||||
|
||||
apiv2_nearest_hub_slots:
|
||||
path: /apiv2/hub_slots
|
||||
controller: App\Controller\CustomerAppAPI\LocationController::getNearestHubAndSlots
|
||||
methods: [GET]
|
||||
|
||||
apiv2_new_jo_request:
|
||||
path: /apiv2/new_job_order
|
||||
controller: App\Controller\CustomerAppAPI\JobOrderController::newRequestJobOrder
|
||||
methods: [POST]
|
||||
|
||||
apiv2_version_check:
|
||||
path: /apiv2/version_check
|
||||
controller: App\Controller\CustomerAppAPI\AppController::versionCheck
|
||||
methods: [GET]
|
||||
|
||||
apiv2_schedule_option_status:
|
||||
path: /apiv2/schedule_option_status
|
||||
controller: App\Controller\CustomerAppAPI\ScheduleController::scheduleOptionStatus
|
||||
methods: [GET]
|
||||
|
||||
# paperless warranty / qr code
|
||||
apiv2_warr_serial_check:
|
||||
path: /apiv2/warranty/{serial}
|
||||
controller: App\Controller\CustomerAppAPI\WarrantyController::warrantyCheck
|
||||
methods: [GET]
|
||||
|
||||
apiv2_warr_serial_register:
|
||||
path: /apiv2/warranty/{serial}
|
||||
controller: App\Controller\CustomerAppAPI\WarrantyController::warrantyRegister
|
||||
methods: [POST]
|
||||
|
||||
apiv2_jo_info:
|
||||
path: /apiv2/job_order/{id}/info
|
||||
controller: App\Controller\CustomerAppAPI\JobOrderController::getJobOrderInfo
|
||||
methods: [GET]
|
||||
|
||||
apiv2_ongoing_job_orders:
|
||||
path: /apiv2/job_orders/ongoing
|
||||
controller: App\Controller\CustomerAppAPI\JobOrderController::getAllOngoingJobOrders
|
||||
methods: [GET]
|
||||
|
||||
apiv2_ongoing_jo_count:
|
||||
path: /apiv2/job_orders/ongoing/count
|
||||
controller: App\Controller\CustomerAppAPI\JobOrderController::getOngoingJobOrderCount
|
||||
methods: [GET]
|
||||
|
||||
apiv2_new_location:
|
||||
path: /apiv2/new_location
|
||||
controller: App\Controller\CustomerAppAPI\LocationController::addLocation
|
||||
methods: [POST]
|
||||
|
||||
apiv2_locations:
|
||||
path: /apiv2/locations
|
||||
controller: App\Controller\CustomerAppAPI\LocationController::getLocations
|
||||
methods: [GET]
|
||||
|
||||
apiv2_location_remove:
|
||||
path: /apiv2/locations/{id}/remove
|
||||
controller: App\Controller\CustomerAppAPI\LocationController::removeLocation
|
||||
methods: [POST]
|
||||
|
||||
apiv2_cust_vehicle_remove:
|
||||
path: /apiv2/vehicles/{id}/remove
|
||||
controller: App\Controller\CustomerAppAPI\VehicleController::removeVehicle
|
||||
methods: [POST]
|
||||
|
||||
apiv2_latest_job_order:
|
||||
path: /apiv2/job_order/latest
|
||||
controller: App\Controller\CustomerAppAPI\JobOrderController::getLatestJobOrder
|
||||
methods: [GET]
|
||||
|
||||
apiv2_customer_hash_get:
|
||||
path: /apiv2/customer_hash
|
||||
controller: App\Controller\CustomerAppAPI\CustomerController::getCustomerHash
|
||||
methods: [GET]
|
||||
|
||||
#apiv2_completed_job_orders:
|
||||
# path: /apiv2/job_orders/completed
|
||||
# controller: App\Controller\CustomerAppAPI\JobOrderController::getCompletedJobOrders
|
||||
# methods: [GET]
|
||||
|
||||
# motolite events
|
||||
apiv2_motolite_events:
|
||||
path: /apiv2/motolite_events
|
||||
controller: App\Controller\CustomerAppAPI\MotoliteEventController::getEvents
|
||||
methods: [GET]
|
||||
|
||||
# review tags
|
||||
apiv2_partner_review_tags:
|
||||
path: /apiv2/review_tags/partner
|
||||
controller: App\Controller\CustomerAppAPI\ReviewTagController::getPartnerReviewTags
|
||||
|
||||
apiv2_rider_review_tags:
|
||||
path: /apiv2/review_tags/rider
|
||||
controller: App\Controller\CustomerAppAPI\ReviewTagController::getRiderReviewTags
|
||||
|
||||
# account deletion
|
||||
apiv2_account_delete:
|
||||
path: /apiv2/account_delete
|
||||
controller: App\Controller\CustomerAppAPI\AccountController::deleteAccount
|
||||
methods: [POST]
|
||||
|
||||
apiv2_account_delete_resend_code:
|
||||
path: /apiv2/account_delete_resend_code
|
||||
controller: App\Controller\CustomerAppAPI\AccountController:resendCode
|
||||
methods: [POST]
|
||||
|
||||
apiv2_account_delete_code_validate:
|
||||
path: /apiv2/account_delete_code_validate
|
||||
controller: App\Controller\CustomerAppAPI\AccountController::validateDeleteCode
|
||||
methods: [POST]
|
||||
|
||||
# trade-in support
|
||||
apiv2_cust_vehicle_trade_in_estimate:
|
||||
path: /apiv2/vehicles/{id}/trade_in_estimate
|
||||
controller: App\Controller\CustomerAppAPI\VehicleController::getTradeInEstimate
|
||||
methods: [GET]
|
||||
|
||||
# insurance
|
||||
apiv2_insurance_vehicle_maker_list:
|
||||
path: /apiv2/insurance/vehicles/makers
|
||||
controller: App\Controller\CustomerAppAPI\InsuranceController::getVehicleMakers
|
||||
methods: [GET]
|
||||
|
||||
apiv2_insurance_vehicle_model_list:
|
||||
path: /apiv2/insurance/vehicles/models/{maker_id}
|
||||
controller: App\Controller\CustomerAppAPI\InsuranceController::getVehicleModels
|
||||
methods: [GET]
|
||||
|
||||
apiv2_insurance_vehicle_trim_list:
|
||||
path: /apiv2/insurance/vehicles/trims/{model_id}
|
||||
controller: App\Controller\CustomerAppAPI\InsuranceController::getVehicleTrims
|
||||
methods: [GET]
|
||||
|
||||
apiv2_insurance_vehicle_mv_type_list:
|
||||
path: /apiv2/insurance/mvtypes
|
||||
controller: App\Controller\CustomerAppAPI\InsuranceController::getMVTypes
|
||||
methods: [GET]
|
||||
|
||||
apiv2_insurance_vehicle_client_type_list:
|
||||
path: /apiv2/insurance/clienttypes
|
||||
controller: App\Controller\CustomerAppAPI\InsuranceController::getClientTypes
|
||||
methods: [GET]
|
||||
|
||||
apiv2_insurance_application_create:
|
||||
path: /apiv2/insurance/application
|
||||
controller: App\Controller\CustomerAppAPI\InsuranceController::createApplication
|
||||
methods: [POST]
|
||||
|
||||
apiv2_insurance_premiums_banner:
|
||||
path: /apiv2/insurance/premiums_banner
|
||||
controller: App\Controller\CustomerAppAPI\InsuranceController::getPremiumsBanner
|
||||
methods: [GET]
|
||||
|
||||
apiv2_insurance_body_types:
|
||||
path: /apiv2/insurance/body_types
|
||||
controller: App\Controller\CustomerAppAPI\InsuranceController::getBodyTypes
|
||||
methods: [GET]
|
||||
|
|
@ -3,10 +3,6 @@ capi_test:
|
|||
path: /capi/test
|
||||
controller: App\Controller\CAPI\TestController::test
|
||||
|
||||
capi_test_warranty_serial:
|
||||
path: /test_capi/test/warranty_serial
|
||||
controller: App\Controller\CAPI\TestController::warrantySerial
|
||||
|
||||
|
||||
# battery api
|
||||
|
||||
|
|
@ -53,11 +49,6 @@ capi_vehicle_list:
|
|||
controller: App\Controller\CAPI\VehicleController::list
|
||||
methods: [GET]
|
||||
|
||||
capi_vehicle_by_mfg:
|
||||
path: /capi/vehicle_manufacturer/{mfg_id}
|
||||
controller: App\Controller\CAPI\VehicleController::getByManufacturer
|
||||
methods: [GET]
|
||||
|
||||
|
||||
# plate api
|
||||
|
||||
|
|
@ -158,52 +149,3 @@ capi_customer_register:
|
|||
path: /capi/quick_registration
|
||||
controller: App\Controller\CAPI\CustomerController::register
|
||||
methods: [POST]
|
||||
|
||||
# verify if resq customer
|
||||
capi_customer_verify:
|
||||
path: /capi/customer/{customer_hash}
|
||||
controller: App\Controller\CAPI\CustomerController::verifyCustomer
|
||||
methods: [GET]
|
||||
|
||||
# customer warranty api
|
||||
capi_cwarr_check:
|
||||
path: /capi/customer_warranty/{serial}
|
||||
controller: App\Controller\CAPI\CustomerWarrantyController::check
|
||||
methods: [GET]
|
||||
|
||||
capi_cwarr_register:
|
||||
path: /capi/customer_warranty/{serial}
|
||||
controller: App\Controller\CAPI\CustomerWarrantyController::register
|
||||
methods: [POST]
|
||||
|
||||
|
||||
# municipality
|
||||
capi_municipality_list:
|
||||
path: /capi/municipality
|
||||
controller: App\Controller\CAPI\MunicipalityController::getAll
|
||||
methods: [GET]
|
||||
|
||||
# dealer
|
||||
capi_dealer_list:
|
||||
path: /capi/dealers
|
||||
controller: App\Controller\CAPI\DealerController::getAll
|
||||
methods: [GET]
|
||||
|
||||
# warranty serial api
|
||||
capi_warranty_serial_upload:
|
||||
path: /capi/warranty_serial/upload
|
||||
controller: App\Controller\CAPI\WarrantySerialController::uploadWarrantySerialFile
|
||||
methods: [POST]
|
||||
|
||||
# pullout form system
|
||||
# hub
|
||||
capi_hub_list:
|
||||
path: /capi/hubs
|
||||
controller: App\Controller\CAPI\HubController::getAll
|
||||
methods: [GET]
|
||||
|
||||
# job order details
|
||||
capi_job_order:
|
||||
path: /capi/job_order/{id}
|
||||
controller: App\Controller\CAPI\JobOrderController::getJobOrder
|
||||
methods: [GET]
|
||||
|
|
|
|||
|
|
@ -1,117 +0,0 @@
|
|||
# rider app api
|
||||
|
||||
capi_rider_register:
|
||||
path: /rider_api/register
|
||||
controller: App\Controller\CAPI\RiderAppController::register
|
||||
methods: [POST]
|
||||
|
||||
capi_rider_login:
|
||||
path: /rider_api/login
|
||||
controller: App\Controller\CAPI\RiderAppController::login
|
||||
methods: [POST]
|
||||
|
||||
capi_rider_logout:
|
||||
path: /rider_api/logout
|
||||
controller: App\Controller\CAPI\RiderAppController::logout
|
||||
methods: [POST]
|
||||
|
||||
capi_rider_jo_get:
|
||||
path: /rider_api/joborder
|
||||
controller: App\Controller\CAPI\RiderAppController::getJobOrder
|
||||
methods: [GET]
|
||||
|
||||
capi_rider_jo_accept:
|
||||
path: /rider_api/accept
|
||||
controller: App\Controller\CAPI\RiderAppController::acceptJobOrder
|
||||
methods: [POST]
|
||||
|
||||
capi_rider_jo_cancel:
|
||||
path: /rider_api/cancel
|
||||
controller: App\Controller\CAPI\RiderAppController::cancelJobOrder
|
||||
methods: [POST]
|
||||
|
||||
capi_rider_arrive:
|
||||
path: /rider_api/arrive
|
||||
controller: App\Controller\CAPI\RiderAppController::arrive
|
||||
methods: [POST]
|
||||
|
||||
capi_rider_payment:
|
||||
path: /rider_api/payment
|
||||
controller: App\Controller\CAPI\RiderAppController::payment
|
||||
methods: [POST]
|
||||
|
||||
capi_rider_hub_arrive:
|
||||
path: /rider_api/hub_arrive
|
||||
controller: App\Controller\CAPI\RiderAppController::hubArrive
|
||||
methods: [POST]
|
||||
|
||||
capi_rider_promos:
|
||||
path: /rider_api/promos
|
||||
controller: App\Controller\CAPI\RiderAppController::getPromos
|
||||
methods: [GET]
|
||||
|
||||
capi_rider_batteries:
|
||||
path: /rider_api/batteries
|
||||
controller: App\Controller\CAPI\RiderAppController::getBatteries
|
||||
methods: [GET]
|
||||
|
||||
capi_rider_change_service:
|
||||
path: /rider_api/service
|
||||
controller: App\Controller\CAPI\RiderAppController::changeService
|
||||
methods: [POST]
|
||||
|
||||
capi_rider_available:
|
||||
path: /rider_api/available
|
||||
controller: App\Controller\CAPI\RiderAppController::available
|
||||
methods: [POST]
|
||||
|
||||
capi_rider_hub_depart:
|
||||
path: /rider_api/hub_depart
|
||||
controller: App\Controller\CAPI\RiderAppController::hubDepart
|
||||
methods: [POST]
|
||||
|
||||
capi_rider_pre_hub_depart:
|
||||
path: /rider_api/pre_hub_depart
|
||||
controller: App\Controller\CAPI\RiderAppController::preHubDepart
|
||||
methods: [POST]
|
||||
|
||||
capi_rider_pre_hub_arrive:
|
||||
path: /rider_api/pre_hub_arrive
|
||||
controller: App\Controller\CAPI\RiderAppController::preHubArrive
|
||||
methods: [POST]
|
||||
|
||||
capi_rider_post_hub_depart:
|
||||
path: /rider_api/post_hub_depart
|
||||
controller: App\Controller\CAPI\RiderAppController::postHubDepart
|
||||
methods: [POST]
|
||||
|
||||
capi_rider_post_hub_arrive:
|
||||
path: /rider_api/post_hub_arrive
|
||||
controller: App\Controller\CAPI\RiderAppController::postHubArrive
|
||||
methods: [POST]
|
||||
|
||||
capi_rider_jo_start:
|
||||
path: /rider_api/start
|
||||
controller: App\Controller\CAPI\RiderAppController::startJobOrder
|
||||
methods: [POST]
|
||||
|
||||
# trade-ins
|
||||
capi_rider_battery_sizes:
|
||||
path: /rider_api/battery_sizes
|
||||
controller: App\Controller\CAPI\RiderAppController::getBatterySizes
|
||||
methods: [GET]
|
||||
|
||||
capi_rider_trade_in_types:
|
||||
path: /rider_api/trade_in_types
|
||||
controller: App\Controller\CAPI\RiderAppController::getTradeInTypes
|
||||
methods: [GET]
|
||||
|
||||
capi_rider_battery_info:
|
||||
path: /rider_api/battery/{serial}
|
||||
controller: App\Controller\CAPI\RiderAppController::getBatteryInfo
|
||||
methods: [GET]
|
||||
|
||||
capi_rider_update_jo:
|
||||
path: /rider_api/job_order/update
|
||||
controller: App\Controller\CAPI\RiderAppController::updateJobOrder
|
||||
methods: [POST]
|
||||
151
config/routes/cmb_rider_api.yaml
Normal file
|
|
@ -0,0 +1,151 @@
|
|||
# rider app api
|
||||
|
||||
cmb_rapi_register:
|
||||
path: /cmbrapi/register
|
||||
controller: App\Controller\CMBRAPIController::register
|
||||
methods: [POST]
|
||||
|
||||
cmb_rapi_login:
|
||||
path: /cmbrapi/login
|
||||
controller: App\Controller\CMBRAPIController::login
|
||||
methods: [POST]
|
||||
|
||||
cmb_rapi_logout:
|
||||
path: /cmbrapi/logout
|
||||
controller: App\Controller\CMBRAPIController::logout
|
||||
methods: [POST]
|
||||
|
||||
cmb_rapi_jo_get:
|
||||
path: /cmbrapi/joborder
|
||||
controller: App\Controller\CMBRAPIController::getJobOrder
|
||||
methods: [GET]
|
||||
|
||||
cmb_rapi_jo_accept:
|
||||
path: /cmbrapi/joaccept
|
||||
controller: App\Controller\CMBRAPIController::acceptJobOrder
|
||||
methods: [POST]
|
||||
|
||||
cmb_rapi_jo_cancel:
|
||||
path: /cmbrapi/jocancel
|
||||
controller: App\Controller\CMBRAPIController::cancelJobOrder
|
||||
methods: [POST]
|
||||
|
||||
cmb_rapi_arrive:
|
||||
path: /cmbrapi/arrive
|
||||
controller: App\Controller\CMBRAPIController::arrive
|
||||
methods: [POST]
|
||||
|
||||
cmb_rapi_payment:
|
||||
path: /cmbrapi/jopayment
|
||||
controller: App\Controller\CMBRAPIController::payment
|
||||
methods: [POST]
|
||||
|
||||
cmb_rapi_hub_arrive:
|
||||
path: /cmbrapi/hub_arrive
|
||||
controller: App\Controller\CMBRAPIController::hubArrive
|
||||
methods: [POST]
|
||||
|
||||
cmb_rapi_promos:
|
||||
path: /cmbrapi/promos
|
||||
controller: App\Controller\CMBRAPIController::getPromos
|
||||
methods: [GET]
|
||||
|
||||
cmb_rapi_batteries:
|
||||
path: /cmbrapi/batteries
|
||||
controller: App\Controller\CMBRAPIController::getBatteries
|
||||
methods: [GET]
|
||||
|
||||
cmb_rapi_change_service:
|
||||
path: /cmbrapi/service
|
||||
controller: App\Controller\CMBRAPIController::changeService
|
||||
methods: [POST]
|
||||
|
||||
cmb_rapi_available:
|
||||
path: /cmbrapi/available
|
||||
controller: App\Controller\CMBRAPIController::available
|
||||
methods: [POST]
|
||||
|
||||
cmb_rapi_jo_history:
|
||||
path: /cmbrapi/johistory/{period}
|
||||
controller: App\Controller\CMBRAPIController::getJobOrderHistory
|
||||
methods: [GET]
|
||||
|
||||
cmb_rapi_assigned_jo_get:
|
||||
path: /cmbrapi/assignedjos
|
||||
controller: App\Controller\CMBRAPIController::getAssignedJobOrders
|
||||
methods: [GET]
|
||||
|
||||
cmb_rapi_jo_in_transit:
|
||||
path: /cmbrapi/jotransit
|
||||
controller: App\Controller\CMBRAPIController::setJobOrderInTransit
|
||||
methods: [POST]
|
||||
|
||||
cmb_rapi_invoice_generate:
|
||||
path: /cmbrapi/generateinvoice
|
||||
controller: App\Controller\CMBRAPIController::generateInvoice
|
||||
methods: [GET]
|
||||
|
||||
cmb_rapi_online:
|
||||
path: /cmbrapi/online
|
||||
controller: App\Controller\CMBRAPIController::goOnline
|
||||
methods: [POST]
|
||||
|
||||
cmb_rapi_offline:
|
||||
path: /cmbrapi/offline
|
||||
controller: App\Controller\CMBRAPIController::goOffline
|
||||
methods: [POST]
|
||||
|
||||
cmb_rapi_jo_start:
|
||||
path: /cmbrapi/jostart
|
||||
controller: App\Controller\CMBRAPIController::startJobOrder
|
||||
methods: [POST]
|
||||
|
||||
cmb_rapi_jo_complete:
|
||||
path: /cmbrapi/jocomplete
|
||||
controller: App\Controller\CMBRAPIController::completeJobOrder
|
||||
methods: [POST]
|
||||
|
||||
cmb_rapi_jo_set_active:
|
||||
path: /cmbrapi/joactive
|
||||
controller: App\Controller\CMBRAPIController::setActiveJobOrder
|
||||
methods: [POST]
|
||||
|
||||
cmb_rapi_jo_reject:
|
||||
path: /cmbrapi/joreject
|
||||
controller: App\Controller\CMBRAPIController::rejectJobOrder
|
||||
methods: [POST]
|
||||
|
||||
cmb_rapi_jo_odometer:
|
||||
path: /cmbrapi/odometer
|
||||
controller: App\Controller\CMBRAPIController::setOdometer
|
||||
methods: [POST]
|
||||
|
||||
cmb_rapi_jo_arrive_photos_upload:
|
||||
path: /cmbrapi/uploadarrivephotos
|
||||
controller: App\Controller\CMBRAPIController::uploadArrivePhotos
|
||||
methods: [POST]
|
||||
|
||||
cmb_rapi_jo_finish_photos_upload:
|
||||
path: /cmbrapi/uploadfinishphotos
|
||||
controller: App\Controller\CMBRAPIController::uploadFinishPhotos
|
||||
methods: [POST]
|
||||
|
||||
cmb_rapi_status:
|
||||
path: /cmbrapi/status
|
||||
controller: App\Controller\CMBRAPIController::getStatus
|
||||
methods: [GET]
|
||||
|
||||
cmb_rapi_jo_ongoing:
|
||||
path: /cmbrapi/joongoing
|
||||
controller: App\Controller\CMBRAPIController::getOngoingJobOrder
|
||||
methods: [GET]
|
||||
|
||||
cmb_rapi_payment_methods:
|
||||
path: /cmbrapi/paymentmethods
|
||||
controller: App\Controller\CMBRAPIController::getPaymentMethods
|
||||
methods: [GET]
|
||||
|
||||
cmb_rapi_cancel_reasons:
|
||||
path: /cmbrapi/cancelreasons
|
||||
controller: App\Controller\CMBRAPIController::getCancelReasons
|
||||
methods: [GET]
|
||||
|
|
@ -5,7 +5,7 @@ customer_list:
|
|||
customer_rows:
|
||||
path: /customers/rows
|
||||
controller: App\Controller\CustomerController::rows
|
||||
methods: [GET,POST]
|
||||
methods: [POST]
|
||||
|
||||
customer_vehicle_search:
|
||||
path: /customers/vehicles
|
||||
|
|
@ -44,8 +44,3 @@ customer_delete:
|
|||
path: /customers/{id}
|
||||
controller: App\Controller\CustomerController::destroy
|
||||
methods: [DELETE]
|
||||
|
||||
customer_vehicle_warranty_edit_ajax:
|
||||
path: /ajax/customer_vehicle/{id}
|
||||
controller: App\Controller\CustomerController::editCustomerVehicleWarranty
|
||||
methods: [POST]
|
||||
|
|
|
|||
|
|
@ -1,227 +0,0 @@
|
|||
# api
|
||||
|
||||
cust_api_register:
|
||||
path: /apiv2/register
|
||||
controller: App\Controller\CustomerAppAPI\AuthController::register
|
||||
methods: [POST]
|
||||
|
||||
cust_api_confirm:
|
||||
path: /apiv2/number_confirm
|
||||
controller: App\Controller\CustomerAppAPI\AuthController::confirmNumber
|
||||
methods: [POST]
|
||||
|
||||
cust_api_validate:
|
||||
path: /apiv2/code_validate
|
||||
controller: App\Controller\CustomerAppAPI\AuthController::validateCode
|
||||
methods: [POST]
|
||||
|
||||
cust_api_info_get:
|
||||
path: /apiv2/info
|
||||
controller: App\Controller\CustomerAppAPI\CustomerController::getInfo
|
||||
methods: [GET]
|
||||
|
||||
cust_api_info_update:
|
||||
path: /apiv2/info
|
||||
controller: App\Controller\CustomerAppAPI\CustomerController::updateInfo
|
||||
methods: [POST]
|
||||
|
||||
cust_api_status:
|
||||
path: /apiv2/status
|
||||
controller: App\Controller\CustomerAppAPI\CustomerController::getStatus
|
||||
methods: [GET]
|
||||
|
||||
cust_api_vehicle_mfg_list:
|
||||
path: /apiv2/vehicle/mfgs
|
||||
controller: App\Controller\CustomerAppAPI\VehicleController::listVehicleManufacturers
|
||||
methods: [GET]
|
||||
|
||||
cust_api_vehicle_make_list:
|
||||
path: /apiv2/vehicle/mfgs/{mfg_id}/makes
|
||||
controller: App\Controller\CustomerAppAPI\VehicleController::listVehicleMakes
|
||||
methods: [GET]
|
||||
|
||||
cust_api_cust_vehicle_add:
|
||||
path: /apiv2/vehicles
|
||||
controller: App\Controller\CustomerAppAPI\VehicleController::addVehicle
|
||||
methods: [POST]
|
||||
|
||||
cust_api_cust_vehicle_update:
|
||||
path: /apiv2/vehicles/{id}
|
||||
controller: App\Controller\CustomerAppAPI\VehicleController::updateVehicle
|
||||
methods: [POST]
|
||||
|
||||
cust_api_cust_vehicle_list:
|
||||
path: /apiv2/vehicles
|
||||
controller: App\Controller\CustomerAppAPI\VehicleController::listVehicles
|
||||
methods: [GET]
|
||||
|
||||
cust_api_promo_list:
|
||||
path: /apiv2/promos
|
||||
controller: App\Controller\CustomerAppAPI\PromoController::listPromos
|
||||
methods: [GET]
|
||||
|
||||
cust_api_battery_list:
|
||||
path: /apiv2/vehicles/{vid}/compatible_batteries
|
||||
controller: App\Controller\CustomerAppAPI\VehicleController::getCompatibleBatteries
|
||||
methods: [GET]
|
||||
|
||||
cust_api_jo_request:
|
||||
path: /apiv2/job_order
|
||||
controller: App\Controller\CustomerAppAPI\JobOrderController::requestJobOrder
|
||||
methods: [POST]
|
||||
|
||||
cust_api_estimate:
|
||||
path: /apiv2/estimate
|
||||
controller: App\Controller\CustomerAppAPI\EstimateController::getEstimate
|
||||
methods: [POST]
|
||||
|
||||
cust_api_ongoing:
|
||||
path: /apiv2/job_order/ongoing
|
||||
controller: App\Controller\CustomerAppAPI\JobOrderController::getOngoing
|
||||
methods: [GET]
|
||||
|
||||
cust_api_rider_status:
|
||||
path: /apiv2/rider
|
||||
controller: App\Controller\CustomerAppAPI\RiderController::getRiderStatus
|
||||
methods: [GET]
|
||||
|
||||
cust_api_rider_rating_add:
|
||||
path: /apiv2/rider_rating
|
||||
controller: App\Controller\CustomerAppAPI\RiderController::addRiderRating
|
||||
methods: [POST]
|
||||
|
||||
cust_api_jo_cancel:
|
||||
path: /apiv2/job_order/cancel
|
||||
controller: App\Controller\CustomerAppAPI\JobOrderController:cancelJobOrder
|
||||
methods: [POST]
|
||||
|
||||
cust_api_jo_history:
|
||||
path: /apiv2/job_order/history
|
||||
controller: App\Controller\CustomerAppAPI\JobOrderController:getJOHistory
|
||||
methods: [GET]
|
||||
|
||||
cust_api_jo_invoice:
|
||||
path: /apiv2/job_order/invoice
|
||||
controller: App\Controller\CustomerAppAPI\JobOrderController:getJOInvoice
|
||||
methods: [GET]
|
||||
|
||||
cust_api_device_id:
|
||||
path: /apiv2/device_id
|
||||
controller: App\Controller\CustomerAppAPI\DeviceController:updateDeviceID
|
||||
methods: [POST]
|
||||
|
||||
cust_api_privacy:
|
||||
path: /apiv2/privacy
|
||||
controller: App\Controller\CustomerAppAPI\PrivacyController:privacySettings
|
||||
methods: [POST]
|
||||
|
||||
cust_api_resend_code:
|
||||
path: /apiv2/resend_code
|
||||
controller: App\Controller\CustomerAppAPI\AuthController:resendCode
|
||||
methods: [POST]
|
||||
|
||||
cust_api_location_support:
|
||||
path: /apiv2/location_support
|
||||
controller: App\Controller\CustomerAppAPI\LocationController:locationSupport
|
||||
methods: [GET]
|
||||
|
||||
cust_api_activate_warranty:
|
||||
path: /apiv2/activate_warranty
|
||||
controller: App\Controller\CustomerAppAPI\WarrantyController:activateWarranty
|
||||
methods: [POST]
|
||||
|
||||
cust_api_service_list:
|
||||
path: /apiv2/services
|
||||
controller: App\Controller\CustomerAppAPI\ServiceController:listServices
|
||||
methods: [GET]
|
||||
|
||||
cust_api_partner_info:
|
||||
path: /apiv2/partners/{pid}
|
||||
controller: App\Controller\CustomerAppAPI\PartnerController:getPartnerInformation
|
||||
methods: [GET]
|
||||
|
||||
cust_api_partner:
|
||||
path: /apiv2/partners
|
||||
controller: App\Controller\CustomerAppAPI\PartnerController:getClosestPartners
|
||||
methods: [GET]
|
||||
|
||||
cust_api_partner_review:
|
||||
path: /apiv2/partners/{pid}/review
|
||||
controller: App\Controller\CustomerAppAPI\PartnerController:reviewPartner
|
||||
methods: [POST]
|
||||
|
||||
cust_api_nearest_hub_slots:
|
||||
path: /apiv2/hub_slots
|
||||
controller: App\Controller\CustomerAppAPI\LocationController::getNearestHubAndSlots
|
||||
methods: [GET]
|
||||
|
||||
cust_api_new_jo_request:
|
||||
path: /apiv2/new_job_order
|
||||
controller: App\Controller\CustomerAppAPI\JobOrderController::newRequestJobOrder
|
||||
methods: [POST]
|
||||
|
||||
cust_api_version_check:
|
||||
path: /apiv2/version_check
|
||||
controller: App\Controller\CustomerAppAPI\AppController::versionCheck
|
||||
methods: [GET]
|
||||
|
||||
cust_api_schedule_option_status:
|
||||
path: /apiv2/schedule_option_status
|
||||
controller: App\Controller\CustomerAppAPI\ScheduleController::scheduleOptionStatus
|
||||
methods: [GET]
|
||||
|
||||
# paperless warranty / qr code
|
||||
cust_api_warr_serial_check:
|
||||
path: /apiv2/warranty/{serial}
|
||||
controller: App\Controller\CustomerAppAPI\WarrantyController::warrantyCheck
|
||||
methods: [GET]
|
||||
|
||||
cust_api_warr_serial_register:
|
||||
path: /apiv2/warranty/{serial}
|
||||
controller: App\Controller\CustomerAppAPI\WarrantyController::warrantyRegister
|
||||
methods: [POST]
|
||||
|
||||
cust_api_jo_info:
|
||||
path: /apiv2/job_order/{id}/info
|
||||
controller: App\Controller\CustomerAppAPI\JobOrderController::getJobOrderInfo
|
||||
methods: [GET]
|
||||
|
||||
cust_api_ongoing_job_orders:
|
||||
path: /apiv2/job_orders/ongoing
|
||||
controller: App\Controller\CustomerAppAPI\JobOrderController::getAllOngoingJobOrders
|
||||
methods: [GET]
|
||||
|
||||
cust_api_ongoing_jo_count:
|
||||
path: /apiv2/job_orders/ongoing/count
|
||||
controller: App\Controller\CustomerAppAPI\JobOrderController::getOngoingJobOrderCount
|
||||
methods: [GET]
|
||||
|
||||
cust_api_new_location:
|
||||
path: /apiv2/new_location
|
||||
controller: App\Controller\CustomerAppAPI\LocationController::addLocation
|
||||
methods: [POST]
|
||||
|
||||
cust_api_locations:
|
||||
path: /apiv2/locations
|
||||
controller: App\Controller\CustomerAppAPI\LocationController::getLocations
|
||||
methods: [GET]
|
||||
|
||||
cust_api_cust_vehicle_remove:
|
||||
path: /apiv2/vehicles/{id}/remove
|
||||
controller: App\Controller\CustomerAppAPI\VehicleController::removeVehicle
|
||||
methods: [POST]
|
||||
|
||||
cust_api_latest_job_order:
|
||||
path: /apiv2/job_order/latest
|
||||
controller: App\Controller\CustomerAppAPI\JobOrderController::getLatestJobOrder
|
||||
methods: [GET]
|
||||
|
||||
cust_api_customer_hash_get:
|
||||
path: /apiv2/customer_hash
|
||||
controller: App\Controller\CustomerAppAPI\CustomerController::getCustomerHash
|
||||
methods: [GET]
|
||||
|
||||
#cust_api_completed_job_orders:
|
||||
# path: /apiv2/job_orders/completed
|
||||
# controller: App\Controller\CustomerAppAPI\JobOrderController::getCompletedJobOrders
|
||||
# methods: [GET]
|
||||
|
|
@ -1,35 +0,0 @@
|
|||
customer_location_list:
|
||||
path: /customer-locations
|
||||
controller: App\Controller\CustomerLocationController::index
|
||||
methods: [GET]
|
||||
|
||||
customer_location_rows:
|
||||
path: /customer-locations/rowdata
|
||||
controller: App\Controller\CustomerLocationController::datatableRows
|
||||
methods: [POST]
|
||||
|
||||
customer_location_add_form:
|
||||
path: /customer-locations/newform
|
||||
controller: App\Controller\CustomerLocationController::addForm
|
||||
methods: [GET]
|
||||
|
||||
customer_location_add_submit:
|
||||
path: /customer-locations
|
||||
controller: App\Controller\CustomerLocationController::addSubmit
|
||||
methods: [POST]
|
||||
|
||||
customer_location_update_form:
|
||||
path: /customer-locations/{id}
|
||||
controller: App\Controller\CustomerLocationController::updateForm
|
||||
methods: [GET]
|
||||
|
||||
customer_location_update_submit:
|
||||
path: /customer-locations/{id}
|
||||
controller: App\Controller\CustomerLocationController::updateSubmit
|
||||
methods: [POST]
|
||||
|
||||
customer_location_delete:
|
||||
path: /customer-locations/{id}
|
||||
controller: App\Controller\CustomerLocationController::deleteSubmit
|
||||
methods: [DELETE]
|
||||
|
||||
|
|
@ -1,33 +0,0 @@
|
|||
customertag_list:
|
||||
path: /customer_tags
|
||||
controller: App\Controller\CustomerTagController::index
|
||||
|
||||
customertag_rows:
|
||||
path: /customer_tags/rows
|
||||
controller: App\Controller\CustomerTagController::rows
|
||||
methods: [POST]
|
||||
|
||||
customertag_create:
|
||||
path: /customer_tags/create
|
||||
controller: App\Controller\CustomerTagController::addForm
|
||||
methods: [GET]
|
||||
|
||||
customertag_create_submit:
|
||||
path: /customer_tags/create
|
||||
controller: App\Controller\CustomerTagController::addSubmit
|
||||
methods: [POST]
|
||||
|
||||
customertag_update:
|
||||
path: /customer_tags/{id}
|
||||
controller: App\Controller\CustomerTagController::updateForm
|
||||
methods: [GET]
|
||||
|
||||
customertag_update_submit:
|
||||
path: /customer_tags/{id}
|
||||
controller: App\Controller\CustomerTagController::updateSubmit
|
||||
methods: [POST]
|
||||
|
||||
customertag_delete:
|
||||
path: /customer_tags/{id}
|
||||
controller: App\Controller\CustomerTagController::destroy
|
||||
methods: [DELETE]
|
||||
|
|
@ -1,33 +0,0 @@
|
|||
dealer_list:
|
||||
path: /dealers
|
||||
controller: App\Controller\DealerController::index
|
||||
|
||||
dealer_rows:
|
||||
path: /dealers/rows
|
||||
controller: App\Controller\DealerController::rows
|
||||
methods: [POST]
|
||||
|
||||
dealer_create:
|
||||
path: /dealers/create
|
||||
controller: App\Controller\DealerController::addForm
|
||||
methods: [GET]
|
||||
|
||||
dealer_create_submit:
|
||||
path: /dealers/create
|
||||
controller: App\Controller\DealerController::addSubmit
|
||||
methods: [POST]
|
||||
|
||||
dealer_update:
|
||||
path: /dealers/{id}
|
||||
controller: App\Controller\DealerController::updateForm
|
||||
methods: [GET]
|
||||
|
||||
dealer_update_submit:
|
||||
path: /dealers/{id}
|
||||
controller: App\Controller\DealerController::updateSubmit
|
||||
methods: [POST]
|
||||
|
||||
dealer_delete:
|
||||
path: /dealers/{id}
|
||||
controller: App\Controller\DealerController::destroy
|
||||
methods: [DELETE]
|
||||
|
|
@ -11,7 +11,3 @@ test_gmap:
|
|||
test_distance:
|
||||
path: /test/distance
|
||||
controller: App\Controller\TestController::distance
|
||||
|
||||
test_motiv_connector:
|
||||
path: /test/motiv_connector
|
||||
controller: App\Controller\TestController::motivConnector
|
||||
|
|
|
|||
|
|
@ -1,34 +0,0 @@
|
|||
emergency_type_list:
|
||||
path: /emergency-types
|
||||
controller: App\Controller\EmergencyTypeController::index
|
||||
methods: [GET]
|
||||
|
||||
emergency_type_rows:
|
||||
path: /emergency-types/rowdata
|
||||
controller: App\Controller\EmergencyTypeController::datatableRows
|
||||
methods: [POST]
|
||||
|
||||
emergency_type_add_form:
|
||||
path: /emergency-types/newform
|
||||
controller: App\Controller\EmergencyTypeController::addForm
|
||||
methods: [GET]
|
||||
|
||||
emergency_type_add_submit:
|
||||
path: /emergency-types
|
||||
controller: App\Controller\EmergencyTypeController::addSubmit
|
||||
methods: [POST]
|
||||
|
||||
emergency_type_update_form:
|
||||
path: /emergency-types/{id}
|
||||
controller: App\Controller\EmergencyTypeController::updateForm
|
||||
methods: [GET]
|
||||
|
||||
emergency_type_update_submit:
|
||||
path: /emergency-types/{id}
|
||||
controller: App\Controller\EmergencyTypeController::updateSubmit
|
||||
methods: [POST]
|
||||
|
||||
emergency_type_delete:
|
||||
path: /emergency-types/{id}
|
||||
controller: App\Controller\EmergencyTypeController::deleteSubmit
|
||||
methods: [DELETE]
|
||||
|
|
@ -1,6 +0,0 @@
|
|||
# insurance
|
||||
|
||||
insurance_listener:
|
||||
path: /insurance/listen
|
||||
controller: App\Controller\InsuranceController::listen
|
||||
methods: [POST]
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
item_pricing:
|
||||
path: /item-pricing
|
||||
controller: App\Controller\ItemPricingController::index
|
||||
methods: [GET]
|
||||
|
||||
item_pricing_update:
|
||||
path: /item-pricing
|
||||
controller: App\Controller\ItemPricingController::formSubmit
|
||||
methods: [POST]
|
||||
|
||||
item_pricing_prices:
|
||||
path: /item-pricing/{pt_id}/{it_id}/prices
|
||||
controller: App\Controller\ItemPricingController::itemPrices
|
||||
methods: [GET]
|
||||
|
|
@ -1,34 +0,0 @@
|
|||
item_type_list:
|
||||
path: /item-types
|
||||
controller: App\Controller\ItemTypeController::index
|
||||
methods: [GET]
|
||||
|
||||
item_type_rows:
|
||||
path: /item-types/rowdata
|
||||
controller: App\Controller\ItemTypeController::datatableRows
|
||||
methods: [POST]
|
||||
|
||||
item_type_add_form:
|
||||
path: /item-types/newform
|
||||
controller: App\Controller\ItemTypeController::addForm
|
||||
methods: [GET]
|
||||
|
||||
item_type_add_submit:
|
||||
path: /item-types
|
||||
controller: App\Controller\ItemTypeController::addSubmit
|
||||
methods: [POST]
|
||||
|
||||
item_type_update_form:
|
||||
path: /item-types/{id}
|
||||
controller: App\Controller\ItemTypeController::updateForm
|
||||
methods: [GET]
|
||||
|
||||
item_type_update_submit:
|
||||
path: /item-types/{id}
|
||||
controller: App\Controller\ItemTypeController::updateSubmit
|
||||
methods: [POST]
|
||||
|
||||
item_type_delete:
|
||||
path: /item-types/{id}
|
||||
controller: App\Controller\ItemTypeController::deleteSubmit
|
||||
methods: [DELETE]
|
||||
|
|
@ -253,22 +253,3 @@ jo_hub_view_form:
|
|||
controller: App\Controller\JobOrderController::hubViewForm
|
||||
methods: [GET]
|
||||
|
||||
jo_fulfill_cancel_submit:
|
||||
path: /job-order/fulfillcancel/{id}
|
||||
controller: App\Controller\JobOrderController::fulfillCancelSubmit
|
||||
methods: [POST]
|
||||
|
||||
jo_cancel_reasons:
|
||||
path: /ajax/jo_cancel_reasons
|
||||
controller: App\Controller\JobOrderController::cancelReasons
|
||||
methods: [GET]
|
||||
|
||||
jo_geofence:
|
||||
path: /ajax/job-order/geofence
|
||||
controller: App\Controller\JobOrderController::checkGeofence
|
||||
methods: [GET]
|
||||
|
||||
jo_all_view_form:
|
||||
path: /job-order/all/view/{id}
|
||||
controller: App\Controller\JobOrderController::allViewForm
|
||||
methods: [GET]
|
||||
|
|
|
|||
|
|
@ -1,38 +0,0 @@
|
|||
motolite_event_list:
|
||||
path: /motolite_events
|
||||
controller: App\Controller\MotoliteEventController::index
|
||||
|
||||
motolite_event_rows:
|
||||
path: /motolite_events/rows
|
||||
controller: App\Controller\MotoliteEventController::rows
|
||||
methods: [POST]
|
||||
|
||||
motolite_event_create:
|
||||
path: /motolite_events/create
|
||||
controller: App\Controller\MotoliteEventController::addForm
|
||||
methods: [GET]
|
||||
|
||||
motolite_event_create_submit:
|
||||
path: /motolite_events/create
|
||||
controller: App\Controller\MotoliteEventController::addSubmit
|
||||
methods: [POST]
|
||||
|
||||
motolite_event_upload_image:
|
||||
path: /motolite_events/upload
|
||||
controller: App\Controller\MotoliteEventController::uploadImage
|
||||
methods: [POST]
|
||||
|
||||
motolite_event_update:
|
||||
path: /motolite_events/{id}
|
||||
controller: App\Controller\MotoliteEventController::updateForm
|
||||
methods: [GET]
|
||||
|
||||
motolite_event_update_submit:
|
||||
path: /motolite_events/{id}
|
||||
controller: App\Controller\MotoliteEventController::updateSubmit
|
||||
methods: [POST]
|
||||
|
||||
motolite_event_delete:
|
||||
path: /motolite_events/{id}
|
||||
controller: App\Controller\MotoliteEventController::destroy
|
||||
methods: [DELETE]
|
||||
|
|
@ -1,35 +0,0 @@
|
|||
ownership_type_list:
|
||||
path: /ownership-types
|
||||
controller: App\Controller\OwnershipTypeController::index
|
||||
methods: [GET]
|
||||
|
||||
ownership_type_rows:
|
||||
path: /ownership-types/rowdata
|
||||
controller: App\Controller\OwnershipTypeController::datatableRows
|
||||
methods: [POST]
|
||||
|
||||
ownership_type_add_form:
|
||||
path: /ownership-types/newform
|
||||
controller: App\Controller\OwnershipTypeController::addForm
|
||||
methods: [GET]
|
||||
|
||||
ownership_type_add_submit:
|
||||
path: /ownership-types
|
||||
controller: App\Controller\OwnershipTypeController::addSubmit
|
||||
methods: [POST]
|
||||
|
||||
ownership_type_update_form:
|
||||
path: /ownership-types/{id}
|
||||
controller: App\Controller\OwnershipTypeController::updateForm
|
||||
methods: [GET]
|
||||
|
||||
ownership_type_update_submit:
|
||||
path: /ownership-types/{id}
|
||||
controller: App\Controller\OwnershipTypeController::updateSubmit
|
||||
methods: [POST]
|
||||
|
||||
ownership_type_delete:
|
||||
path: /ownership-types/{id}
|
||||
controller: App\Controller\OwnershipTypeController::deleteSubmit
|
||||
methods: [DELETE]
|
||||
|
||||
|
|
@ -1,16 +0,0 @@
|
|||
# paymongo
|
||||
|
||||
paymongo_listener:
|
||||
path: /paymongo/listen
|
||||
controller: App\Controller\PayMongoController::listen
|
||||
methods: [POST]
|
||||
|
||||
paymongo_payment_success:
|
||||
path: /paymongo/success
|
||||
controller: App\Controller\PayMongoController::paymentSuccess
|
||||
methods: [GET]
|
||||
|
||||
paymongo_payment_cancelled:
|
||||
path: /paymongo/cancelled
|
||||
controller: App\Controller\PayMongoController::paymentCancelled
|
||||
methods: [GET]
|
||||
|
|
@ -1,34 +0,0 @@
|
|||
price_tier_list:
|
||||
path: /price-tiers
|
||||
controller: App\Controller\PriceTierController::index
|
||||
methods: [GET]
|
||||
|
||||
price_tier_rows:
|
||||
path: /price-tiers/rows
|
||||
controller: App\Controller\PriceTierController::datatableRows
|
||||
methods: [POST]
|
||||
|
||||
price_tier_add_form:
|
||||
path: /price-tiers/newform
|
||||
controller: App\Controller\PriceTierController::addForm
|
||||
methods: [GET]
|
||||
|
||||
price_tier_add_submit:
|
||||
path: /price-tiers
|
||||
controller: App\Controller\PriceTierController::addSubmit
|
||||
methods: [POST]
|
||||
|
||||
price_tier_update_form:
|
||||
path: /price-tiers/{id}
|
||||
controller: App\Controller\PriceTierController::updateForm
|
||||
methods: [GET]
|
||||
|
||||
price_tier_update_submit:
|
||||
path: /price-tiers/{id}
|
||||
controller: App\Controller\PriceTierController::updateSubmit
|
||||
methods: [POST]
|
||||
|
||||
price_tier_delete:
|
||||
path: /price-tiers/{id}
|
||||
controller: App\Controller\PriceTierController::deleteSubmit
|
||||
methods: [DELETE]
|
||||
|
|
@ -73,9 +73,9 @@ rep_warranty_details_form:
|
|||
controller: App\Controller\ReportController::warrantyDetailsForm
|
||||
methods: [GET]
|
||||
|
||||
rep_warranty_details_submit:
|
||||
rep_warranty_details_export_csv:
|
||||
path: /report/warranty_details_report
|
||||
controller: App\Controller\ReportController::warrantyDetailsSubmit
|
||||
controller: App\Controller\ReportController::warrantyDetailsExportCSV
|
||||
methods: [POST]
|
||||
|
||||
rep_jo_details_form:
|
||||
|
|
@ -127,43 +127,3 @@ rep_jo_advance_order_submit:
|
|||
path: /report/jo_advance_order_report
|
||||
controller: App\Controller\ReportController::jobOrderAdvanceOrderSubmit
|
||||
methods: [POST]
|
||||
|
||||
rep_customer_source_form:
|
||||
path: /report/customer_source_report
|
||||
controller: App\Controller\ReportController::customerSourceForm
|
||||
methods: [GET]
|
||||
|
||||
rep_customer_source_submit:
|
||||
path: /report/customer_source_report
|
||||
controller: App\Controller\ReportController::customerSourceSubmit
|
||||
methods: [POST]
|
||||
|
||||
rep_hub_filter_form:
|
||||
path: /report/hub_filter_report
|
||||
controller: App\Controller\ReportController::hubFilterForm
|
||||
methods: [GET]
|
||||
|
||||
rep_hub_filter_submit:
|
||||
path: /report/hub_filter_report
|
||||
controller: App\Controller\ReportController::hubFilterSubmit
|
||||
methods: [POST]
|
||||
|
||||
rep_warranty_raffle_form:
|
||||
path: /report/warranty_raffle_report
|
||||
controller: App\Controller\ReportController::warrantyRaffleForm
|
||||
methods: [GET]
|
||||
|
||||
rep_warranty_raffle_submit:
|
||||
path: /report/warranty_raffle_report
|
||||
controller: App\Controller\ReportController::warrantyRaffleSubmit
|
||||
methods: [POST]
|
||||
|
||||
rep_jo_raffle_form:
|
||||
path: /report/jo_raffle_report
|
||||
controller: App\Controller\ReportController::joRaffleForm
|
||||
methods: [GET]
|
||||
|
||||
rep_jo_raffle_submit:
|
||||
path: /report/jo_raffle_report
|
||||
controller: App\Controller\ReportController::joRaffleSubmit
|
||||
methods: [POST]
|
||||
|
|
|
|||
|
|
@ -1,23 +0,0 @@
|
|||
jo_resq_proc:
|
||||
path: /resq-job-order/processing
|
||||
controller: App\Controller\ResqJobOrderController::listProcessing
|
||||
methods: [GET]
|
||||
|
||||
jo_resq_proc_rows:
|
||||
path: /resq-job-order/processing-rows
|
||||
controller: App\Controller\ResqJobOrderController::datatableRows
|
||||
methods: [POST]
|
||||
defaults:
|
||||
tier: "proc"
|
||||
|
||||
jo_resq_all:
|
||||
path: /resq-job-order/all
|
||||
controller: App\Controller\ResqJobOrderController::listAll
|
||||
methods: [GET]
|
||||
|
||||
jo_resq_all_rows:
|
||||
path: /resq-job-orer/all
|
||||
controller: App\Controller\ResqJobOrderController::datatableRows
|
||||
methods: [POST]
|
||||
defaults:
|
||||
tier: "all"
|
||||
|
|
@ -1,33 +0,0 @@
|
|||
reviewtag_list:
|
||||
path: /review_tags
|
||||
controller: App\Controller\ReviewTagController::index
|
||||
|
||||
reviewtag_rows:
|
||||
path: /review_tags/rows
|
||||
controller: App\Controller\ReviewTagController::rows
|
||||
methods: [POST]
|
||||
|
||||
reviewtag_create:
|
||||
path: /review_tags/create
|
||||
controller: App\Controller\ReviewTagController::addForm
|
||||
methods: [GET]
|
||||
|
||||
reviewtag_create_submit:
|
||||
path: /review_tags/create
|
||||
controller: App\Controller\ReviewTagController::addSubmit
|
||||
methods: [POST]
|
||||
|
||||
reviewtag_update:
|
||||
path: /review_tags/{id}
|
||||
controller: App\Controller\ReviewTagController::updateForm
|
||||
methods: [GET]
|
||||
|
||||
reviewtag_update_submit:
|
||||
path: /review_tags/{id}
|
||||
controller: App\Controller\ReviewTagController::updateSubmit
|
||||
methods: [POST]
|
||||
|
||||
reviewtag_delete:
|
||||
path: /review_tags/{id}
|
||||
controller: App\Controller\ReviewTagController::destroy
|
||||
methods: [DELETE]
|
||||
|
|
@ -56,8 +56,3 @@ rider_priority_down_jo:
|
|||
path: /riders/{id}/priority_down/{jo_id}
|
||||
controller: App\Controller\RiderController::priorityDownJO
|
||||
methods: [GET]
|
||||
|
||||
rider_ajax_available:
|
||||
path: /riders/{id}/available
|
||||
controller: App\Controller\RiderController::ajaxAvailable
|
||||
methods: [GET]
|
||||
|
|
|
|||
|
|
@ -64,34 +64,3 @@ rapi_available:
|
|||
path: /rapi/available
|
||||
controller: App\Controller\RAPIController::available
|
||||
methods: [POST]
|
||||
|
||||
rapi_hub_depart:
|
||||
path: /rapi/hub_depart
|
||||
controller: App\Controller\RAPIController::hubDepart
|
||||
methods: [POST]
|
||||
|
||||
rapi_pre_hub_depart:
|
||||
path: /rapi/pre_hub_depart
|
||||
controller: App\Controller\RAPIController::preHubDepart
|
||||
methods: [POST]
|
||||
|
||||
rapi_pre_hub_arrive:
|
||||
path: /rapi/pre_hub_arrive
|
||||
controller: App\Controller\RAPIController::preHubArrive
|
||||
methods: [POST]
|
||||
|
||||
rapi_post_hub_depart:
|
||||
path: /rapi/post_hub_depart
|
||||
controller: App\Controller\RAPIController::postHubDepart
|
||||
methods: [POST]
|
||||
|
||||
rapi_post_hub_arrive:
|
||||
path: /rapi/post_hub_arrive
|
||||
controller: App\Controller\RAPIController::postHubArrive
|
||||
methods: [POST]
|
||||
|
||||
rapi_jo_start:
|
||||
path: /rapi/start
|
||||
controller: App\Controller\RAPIController::startJobOrder
|
||||
methods: [POST]
|
||||
|
||||
|
|
|
|||
|
|
@ -1,148 +0,0 @@
|
|||
# sap battery
|
||||
|
||||
sapbattery_list:
|
||||
path: /sap-batteries
|
||||
controller: App\Controller\SAPBatteryController::index
|
||||
|
||||
sapbattery_rows:
|
||||
path: /sap-batteries/rows
|
||||
controller: App\Controller\SAPBatteryController::rows
|
||||
methods: [POST]
|
||||
|
||||
sapbattery_upload_image:
|
||||
path: /sap-batteries/upload
|
||||
controller: App\Controller\SAPBatteryController::uploadImage
|
||||
methods: [POST]
|
||||
|
||||
sapbattery_create:
|
||||
path: /sap-batteries/create
|
||||
controller: App\Controller\SAPBatteryController::addForm
|
||||
methods: [GET]
|
||||
|
||||
sapbattery_create_submit:
|
||||
path: /sap-batteries/create
|
||||
controller: App\Controller\SAPBatteryController::addSubmit
|
||||
methods: [POST]
|
||||
|
||||
sapbattery_update:
|
||||
path: /sap-batteries/{id}
|
||||
controller: App\Controller\SAPBatteryController::updateForm
|
||||
methods: [GET]
|
||||
|
||||
sapbattery_update_submit:
|
||||
path: /sap-batteries/{id}
|
||||
controller: App\Controller\SAPBatteryController::updateSubmit
|
||||
methods: [POST]
|
||||
|
||||
sapbattery_delete:
|
||||
path: /sap-batteries/{id}
|
||||
controller: App\Controller\SAPBatteryController::destroy
|
||||
methods: [DELETE]
|
||||
|
||||
# sap battery brands
|
||||
|
||||
sapbrand_list:
|
||||
path: /sap-battery-brands
|
||||
controller: App\Controller\SAPBatteryBrandController::index
|
||||
|
||||
sapbrand_rows:
|
||||
path: /sap-battery-brands/rows
|
||||
controller: App\Controller\SAPBatteryBrandController::rows
|
||||
methods: [POST]
|
||||
|
||||
sapbrand_create:
|
||||
path: /sap-battery-brands/create
|
||||
controller: App\Controller\SAPBatteryBrandController::addForm
|
||||
methods: [GET]
|
||||
|
||||
sapbrand_create_submit:
|
||||
path: /sap-battery-brands/create
|
||||
controller: App\Controller\SAPBatteryBrandController::addSubmit
|
||||
methods: [POST]
|
||||
|
||||
sapbrand_update:
|
||||
path: /sap-battery-brands/{id}
|
||||
controller: App\Controller\SAPBatteryBrandController::updateForm
|
||||
methods: [GET]
|
||||
|
||||
sapbrand_update_submit:
|
||||
path: /sap-battery-brands/{id}
|
||||
controller: App\Controller\SAPBatteryBrandController::updateSubmit
|
||||
methods: [POST]
|
||||
|
||||
sapbrand_delete:
|
||||
path: /sap-battery-brands/{id}
|
||||
controller: App\Controller\SAPBatteryBrandController::destroy
|
||||
methods: [DELETE]
|
||||
|
||||
# sap battery sizes
|
||||
|
||||
sapbsize_list:
|
||||
path: /sap-battery-sizes
|
||||
controller: App\Controller\SAPBatterySizeController::index
|
||||
|
||||
sapbsize_rows:
|
||||
path: /sap-battery-sizes/rows
|
||||
controller: App\Controller\SAPBatterySizeController::rows
|
||||
methods: [POST]
|
||||
|
||||
sapbsize_create:
|
||||
path: /sap-battery-sizes/create
|
||||
controller: App\Controller\SAPBatterySizeController::addForm
|
||||
methods: [GET]
|
||||
|
||||
sapbsize_create_submit:
|
||||
path: /sap-battery-sizes/create
|
||||
controller: App\Controller\SAPBatterySizeController::addSubmit
|
||||
methods: [POST]
|
||||
|
||||
sapbsize_update:
|
||||
path: /sap-battery-sizes/{id}
|
||||
controller: App\Controller\SAPBatterySizeController::updateForm
|
||||
methods: [GET]
|
||||
|
||||
sapbsize_update_submit:
|
||||
path: /sap-battery-sizes/{id}
|
||||
controller: App\Controller\SAPBatterySizeController::updateSubmit
|
||||
methods: [POST]
|
||||
|
||||
sapbsize_delete:
|
||||
path: /sap-battery-sizes/{id}
|
||||
controller: App\Controller\SAPBatterySizeController::destroy
|
||||
methods: [DELETE]
|
||||
|
||||
# sap battery container sizes
|
||||
sapcsize_list:
|
||||
path: /sap-battery-container-sizes
|
||||
controller: App\Controller\SAPBatteryContainerSizeController::index
|
||||
|
||||
sapcsize_rows:
|
||||
path: /sap-battery-container-sizes/rows
|
||||
controller: App\Controller\SAPBatteryContainerSizeController::rows
|
||||
methods: [POST]
|
||||
|
||||
sapcsize_create:
|
||||
path: /sap-battery-container-sizes/create
|
||||
controller: App\Controller\SAPBatteryContainerSizeController::addForm
|
||||
methods: [GET]
|
||||
|
||||
sapcsize_create_submit:
|
||||
path: /sap-battery-container-sizes/create
|
||||
controller: App\Controller\SAPBatteryContainerSizeController::addSubmit
|
||||
methods: [POST]
|
||||
|
||||
sapcsize_update:
|
||||
path: /sap-battery-container-sizes/{id}
|
||||
controller: App\Controller\SAPBatteryContainerSizeController::updateForm
|
||||
methods: [GET]
|
||||
|
||||
sapcsize_update_submit:
|
||||
path: /sap-battery-container-sizes/{id}
|
||||
controller: App\Controller\SAPBatteryContainerSizeController::updateSubmit
|
||||
methods: [POST]
|
||||
|
||||
sapcsize_delete:
|
||||
path: /sap-battery-container-sizes/{id}
|
||||
controller: App\Controller\SAPBatteryContainerSizeController::destroy
|
||||
methods: [DELETE]
|
||||
|
||||
|
|
@ -1,34 +0,0 @@
|
|||
service_offering_list:
|
||||
path: /service-offerings
|
||||
controller: App\Controller\ServiceOfferingController::index
|
||||
methods: [GET]
|
||||
|
||||
service_offering_rows:
|
||||
path: /service-offerings/rowdata
|
||||
controller: App\Controller\ServiceOfferingController::datatableRows
|
||||
methods: [POST]
|
||||
|
||||
service_offering_add_form:
|
||||
path: /service-offerings/newform
|
||||
controller: App\Controller\ServiceOfferingController::addForm
|
||||
methods: [GET]
|
||||
|
||||
service_offering_add_submit:
|
||||
path: /service-offerings
|
||||
controller: App\Controller\ServiceOfferingController::addSubmit
|
||||
methods: [POST]
|
||||
|
||||
service_offering_update_form:
|
||||
path: /service-offerings/{id}
|
||||
controller: App\Controller\ServiceOfferingController::updateForm
|
||||
methods: [GET]
|
||||
|
||||
service_offering_update_submit:
|
||||
path: /service-offerings/{id}
|
||||
controller: App\Controller\ServiceOfferingController::updateSubmit
|
||||
methods: [POST]
|
||||
|
||||
service_offering_delete:
|
||||
path: /service-offerings/{id}
|
||||
controller: App\Controller\ServiceOfferingController::deleteSubmit
|
||||
methods: [DELETE]
|
||||
|
|
@ -1,35 +0,0 @@
|
|||
subticket_type_list:
|
||||
path: /subticket-types
|
||||
controller: App\Controller\SubTicketTypeController::index
|
||||
methods: [GET]
|
||||
|
||||
subticket_type_rows:
|
||||
path: /subticket-types/rowdata
|
||||
controller: App\Controller\SubTicketTypeController::datatableRows
|
||||
methods: [POST]
|
||||
|
||||
subticket_type_add_form:
|
||||
path: /subticket-types/newform
|
||||
controller: App\Controller\SubTicketTypeController::addForm
|
||||
methods: [GET]
|
||||
|
||||
subticket_type_add_submit:
|
||||
path: /subticket-types
|
||||
controller: App\Controller\SubTicketTypeController::addSubmit
|
||||
methods: [POST]
|
||||
|
||||
subticket_type_update_form:
|
||||
path: /subticket-types/{id}
|
||||
controller: App\Controller\SubTicketTypeController::updateForm
|
||||
methods: [GET]
|
||||
|
||||
subticket_type_update_submit:
|
||||
path: /subticket-types/{id}
|
||||
controller: App\Controller\SubTicketTypeController::updateSubmit
|
||||
methods: [POST]
|
||||
|
||||
subticket_type_delete:
|
||||
path: /subticket-types/{id}
|
||||
controller: App\Controller\SubTicketTypeController::deleteSubmit
|
||||
methods: [DELETE]
|
||||
|
||||
|
|
@ -1,60 +0,0 @@
|
|||
# third party api
|
||||
|
||||
# job order
|
||||
tapi_jo_request:
|
||||
path: /tapi/job_order
|
||||
controller: App\Controller\TAPI\JobOrderController::requestJobOrder
|
||||
methods: [POST]
|
||||
|
||||
tapi_estimate:
|
||||
path: /tapi/estimate
|
||||
controller: App\Controller\TAPI\JobOrderController::getEstimate
|
||||
methods: [POST]
|
||||
|
||||
tapi_jo_invoice:
|
||||
path: /tapi/job_order/invoice/{jo_id}
|
||||
controller: App\Controller\TAPI\JobOrderController:getJOInvoice
|
||||
methods: [GET]
|
||||
|
||||
tapi_jo_cancel:
|
||||
path: /tapi/job_order/cancel
|
||||
controller: App\Controller\TAPI\JobOrderController:cancelJobOrder
|
||||
methods: [POST]
|
||||
|
||||
tapi_jo_info:
|
||||
path: /tapi/job_order/{jo_id}/info
|
||||
controller: App\Controller\TAPI\JobOrderController::getJobOrderInfo
|
||||
methods: [GET]
|
||||
|
||||
tapi_location_support:
|
||||
path: /tapi/location_support
|
||||
controller: App\Controller\TAPI\JobOrderController:locationSupport
|
||||
methods: [POST]
|
||||
|
||||
tapi_nearest_hub_slots:
|
||||
path: /tapi/hub_slots
|
||||
controller: App\Controller\TAPI\JobOrderController::getNearestHubAndSlots
|
||||
methods: [POST]
|
||||
|
||||
# vehicle manufacturer and vehicle
|
||||
tapi_vehicle_mfg_list:
|
||||
path: /tapi/vehicle/mfgs
|
||||
controller: App\Controller\TAPI\VehicleController::listVehicleManufacturers
|
||||
methods: [GET]
|
||||
|
||||
tapi_vehicle_make_list:
|
||||
path: /tapi/vehicle/mfgs/{mfg_id}/makes
|
||||
controller: App\Controller\TAPI\VehicleController::listVehicleMakes
|
||||
methods: [GET]
|
||||
|
||||
# battery
|
||||
tapi_battery_list:
|
||||
path: /tapi/vehicles/{vid}/compatible_batteries
|
||||
controller: App\Controller\TAPI\BatteryController::getCompatibleBatteries
|
||||
methods: [POST]
|
||||
|
||||
# promos
|
||||
tapi_promo_list:
|
||||
path: /tapi/promos
|
||||
controller: App\Controller\TAPI\PromoController::listPromos
|
||||
methods: [GET]
|
||||
|
|
@ -1,35 +0,0 @@
|
|||
ticket_type_list:
|
||||
path: /ticket-types
|
||||
controller: App\Controller\TicketTypeController::index
|
||||
methods: [GET]
|
||||
|
||||
ticket_type_rows:
|
||||
path: /ticket-types/rowdata
|
||||
controller: App\Controller\TicketTypeController::datatableRows
|
||||
methods: [POST]
|
||||
|
||||
ticket_type_add_form:
|
||||
path: /ticket-types/newform
|
||||
controller: App\Controller\TicketTypeController::addForm
|
||||
methods: [GET]
|
||||
|
||||
ticket_type_add_submit:
|
||||
path: /ticket-types
|
||||
controller: App\Controller\TicketTypeController::addSubmit
|
||||
methods: [POST]
|
||||
|
||||
ticket_type_update_form:
|
||||
path: /ticket-types/{id}
|
||||
controller: App\Controller\TicketTypeController::updateForm
|
||||
methods: [GET]
|
||||
|
||||
ticket_type_update_submit:
|
||||
path: /ticket-types/{id}
|
||||
controller: App\Controller\TicketTypeController::updateSubmit
|
||||
methods: [POST]
|
||||
|
||||
ticket_type_delete:
|
||||
path: /ticket-types/{id}
|
||||
controller: App\Controller\TicketTypeController::deleteSubmit
|
||||
methods: [DELETE]
|
||||
|
||||
|
|
@ -13,10 +13,6 @@ parameters:
|
|||
cvu_brand_id: "%env(CVU_BRAND_ID)%"
|
||||
country_code: "%env(COUNTRY_CODE)%"
|
||||
api_version: "%env(API_VERSION)%"
|
||||
android_app_version: "%env(ANDROID_APP_VERSION)%"
|
||||
ios_app_version: "%env(IOS_APP_VERSION)%"
|
||||
insurance_premiums_banner_url: "%env(INSURANCE_PREMIUMS_BANNER_URL)%"
|
||||
enabled_hub_filters: "%env(ENABLED_HUB_FILTERS)%"
|
||||
|
||||
services:
|
||||
# default configuration for services in *this* file
|
||||
|
|
@ -47,6 +43,20 @@ services:
|
|||
$cache_dir: "%kernel.cache_dir%"
|
||||
$config_dir: "%kernel.root_dir%/../config"
|
||||
|
||||
Catalyst\AuthBundle\Service\ACLGenerator:
|
||||
arguments:
|
||||
$router: "@router.default"
|
||||
$cache_dir: "%kernel.cache_dir%"
|
||||
$config_dir: "%kernel.root_dir%/../config"
|
||||
$acl_file: "%app_acl_file%"
|
||||
|
||||
Catalyst\AuthBundle\Service\ACLVoter:
|
||||
arguments:
|
||||
$user_class: "App\\Entity\\User"
|
||||
tags: ['security.voter']
|
||||
|
||||
Catalyst\AuthBundle\Service\UserChecker:
|
||||
|
||||
App\Service\FileUploader:
|
||||
arguments:
|
||||
$target_dir: '%image_upload_directory%'
|
||||
|
|
@ -71,11 +81,6 @@ services:
|
|||
$redis_client: "@App\\Service\\RedisClientProvider"
|
||||
$key: "mqtt_events"
|
||||
|
||||
App\Service\MQTTClientApiv2:
|
||||
arguments:
|
||||
$redis_client: "@App\\Service\\RedisClientProvider"
|
||||
$key: "mqtt_events"
|
||||
|
||||
App\Service\APNSClient:
|
||||
arguments:
|
||||
$redis_client: "@App\\Service\\RedisClientProvider"
|
||||
|
|
@ -106,36 +111,65 @@ services:
|
|||
$cvu_mfg_id: "%env(CVU_MFG_ID)%"
|
||||
$cvu_brand_id: "%env(CVU_BRAND_ID)%"
|
||||
|
||||
App\Command\LoadWarrantySerialCommand:
|
||||
arguments:
|
||||
$callback_url: "%env(WARRANTY_SERIAL_CALLBACK_URL)%"
|
||||
|
||||
App\Command\ProcessLatePaymongoTransactionsCommand:
|
||||
arguments:
|
||||
$em: "@doctrine.orm.entity_manager"
|
||||
$paymongo: "@App\\Service\\PayMongoConnector"
|
||||
$webhook_id: "%env(PAYMONGO_WEBHOOK_ID)%"
|
||||
|
||||
# rider tracker service
|
||||
App\Service\RiderTracker:
|
||||
arguments:
|
||||
$redis_client: "@App\\Service\\RedisClientProvider"
|
||||
|
||||
Catalyst\APIBundle\Security\APIKeyUserProvider:
|
||||
arguments:
|
||||
$em: "@doctrine.orm.entity_manager"
|
||||
|
||||
Catalyst\APIBundle\Security\APIKeyAuthenticator:
|
||||
arguments:
|
||||
$em: "@doctrine.orm.entity_manager"
|
||||
|
||||
Catalyst\APIBundle\Command\UserCreateCommand:
|
||||
arguments:
|
||||
$em: "@doctrine.orm.entity_manager"
|
||||
tags: ['console.command']
|
||||
|
||||
Catalyst\APIBundle\Command\TestCommand:
|
||||
tags: ['console.command']
|
||||
|
||||
Catalyst\APIBundle\Command\TestAPICommand:
|
||||
tags: ['console.command']
|
||||
|
||||
Catalyst\APIBundle\Access\Voter:
|
||||
arguments:
|
||||
$acl_gen: "@Catalyst\\APIBundle\\Access\\Generator"
|
||||
$user_class: "Catalyst\\APIBundle\\Entity\\User"
|
||||
tags: ['security.voter']
|
||||
|
||||
Catalyst\APIBundle\Access\Generator:
|
||||
arguments:
|
||||
$router: "@router.default"
|
||||
$cache_dir: "%kernel.cache_dir%"
|
||||
$config_dir: "%kernel.root_dir%/../config"
|
||||
$acl_file: "%api_acl_file%"
|
||||
|
||||
Catalyst\MenuBundle\Menu\Generator:
|
||||
arguments:
|
||||
$router: "@router.default"
|
||||
$cache_dir: "%kernel.cache_dir%"
|
||||
$config_dir: "%kernel.root_dir%/../config"
|
||||
|
||||
Catalyst\MenuBundle\Listener\MenuAnnotationListener:
|
||||
arguments:
|
||||
$menu_name: "main_menu"
|
||||
tags:
|
||||
- { name: kernel.event_listener, event: kernel.controller, method: onKernelController }
|
||||
|
||||
# invoice generator
|
||||
App\Service\InvoiceGenerator\ResqInvoiceGenerator: ~
|
||||
|
||||
# invoice generator interface
|
||||
App\Service\InvoiceGeneratorInterface: "@App\\Service\\InvoiceManager"
|
||||
|
||||
# invoice manager
|
||||
App\Service\InvoiceManager: ~
|
||||
App\Service\InvoiceGeneratorInterface: "@App\\Service\\InvoiceGenerator\\ResqInvoiceGenerator"
|
||||
|
||||
# job order generator
|
||||
App\Service\JobOrderHandler\ResqJobOrderHandler:
|
||||
arguments:
|
||||
$country_code: "%env(COUNTRY_CODE)%"
|
||||
$cust_distance_limit: "%env(CUST_DISTANCE_LIMIT_ADMIN_PANEL)%"
|
||||
$hub_filter_enabled: "%env(HUB_FILTER_ENABLE)%"
|
||||
|
||||
#job order generator interface
|
||||
App\Service\JobOrderHandlerInterface: "@App\\Service\\JobOrderHandler\\ResqJobOrderHandler"
|
||||
|
|
@ -189,7 +223,6 @@ services:
|
|||
arguments:
|
||||
$redis_prov: "@App\\Service\\RedisClientProvider"
|
||||
$active_jo_key: "%env(LOCATION_JO_ACTIVE_KEY)%"
|
||||
$latest_jo_key: "%env(LATEST_ACTIVE_JO)%"
|
||||
|
||||
App\Service\RiderCache:
|
||||
arguments:
|
||||
|
|
@ -209,150 +242,3 @@ services:
|
|||
App\EventSubscriber\LogSubscriber:
|
||||
arguments:
|
||||
$api_log_flag: "%env(API_LOGGING)%"
|
||||
|
||||
# motiv connector
|
||||
App\Service\MotivConnector:
|
||||
arguments:
|
||||
$base_url: "%env(MOTIV_BASE_URL)%"
|
||||
$sub_key: "%env(MOTIV_KEY)%"
|
||||
$token: "%env(MOTIV_TOKEN)%"
|
||||
|
||||
# insurance connector
|
||||
App\Service\InsuranceConnector:
|
||||
arguments:
|
||||
$base_url: "%env(INSURANCE_BASE_URL)%"
|
||||
$username: "%env(INSURANCE_USERNAME)%"
|
||||
$password: "%env(INSURANCE_PASSWORD)%"
|
||||
|
||||
# entity listener for gateway transactions
|
||||
App\EntityListener\GatewayTransactionListener:
|
||||
arguments:
|
||||
$em: "@doctrine.orm.entity_manager"
|
||||
$ic: "@App\\Service\\InsuranceConnector"
|
||||
tags:
|
||||
- name: doctrine.orm.entity_listener
|
||||
event: 'postUpdate'
|
||||
entity: 'App\Entity\GatewayTransaction'
|
||||
|
||||
# paymongo connector
|
||||
App\Service\PayMongoConnector:
|
||||
arguments:
|
||||
$base_url: "%env(PAYMONGO_BASE_URL)%"
|
||||
$public_key: "%env(PAYMONGO_PUBLIC_KEY)%"
|
||||
$secret_key: "%env(PAYMONGO_SECRET_KEY)%"
|
||||
|
||||
# entity listener for customer vehicle warranty code history
|
||||
App\EntityListener\CustomerVehicleSerialListener:
|
||||
arguments:
|
||||
$ts: "@security.token_storage"
|
||||
tags:
|
||||
- name: doctrine.orm.entity_listener
|
||||
event: 'preUpdate'
|
||||
entity: 'App\Entity\CustomerVehicle'
|
||||
- name: doctrine.orm.entity_listener
|
||||
event: 'postUpdate'
|
||||
entity: 'App\Entity\CustomerVehicle'
|
||||
- name: doctrine.orm.entity_listener
|
||||
event: 'postPersist'
|
||||
entity: 'App\Entity\CustomerVehicle'
|
||||
|
||||
# warranty api logger
|
||||
App\Service\WarrantyAPILogger:
|
||||
arguments:
|
||||
$em: "@doctrine.orm.entity_manager"
|
||||
|
||||
# warranty logger for raffle
|
||||
App\Service\WarrantyRaffleLogger:
|
||||
arguments:
|
||||
$em: "@doctrine.orm.entity_manager"
|
||||
|
||||
# warranty raffle filter
|
||||
App\Service\WarrantyRaffleFilter: ~
|
||||
|
||||
# promo logger
|
||||
App\Service\PromoLogger:
|
||||
arguments:
|
||||
$em: "@doctrine.orm.entity_manager"
|
||||
|
||||
# hub service
|
||||
App\Service\HubSelector:
|
||||
arguments:
|
||||
$em: "@doctrine.orm.entity_manager"
|
||||
$im: "@App\\Service\\InventoryManager"
|
||||
$hub_distributor: "@App\\Service\\HubDistributor"
|
||||
$hub_filter_logger: "@App\\Service\\HubFilterLogger"
|
||||
|
||||
# hub distributor
|
||||
App\Service\HubDistributor:
|
||||
arguments:
|
||||
$redis: "@App\\Service\\RedisClientProvider"
|
||||
$hub_jo_key: "%env(HUB_JO_KEY)%"
|
||||
|
||||
# hub filter logger
|
||||
App\Service\HubFilterLogger:
|
||||
arguments:
|
||||
$em: "@doctrine.orm.entity_manager"
|
||||
|
||||
# hub filter geofence checking
|
||||
App\Service\HubFilteringGeoChecker:
|
||||
arguments:
|
||||
$geofence_flag: "%env(HUB_GEOFENCE_ENABLE)%"
|
||||
|
||||
# bulk warranty uploader
|
||||
App\Service\WarrantyBulkUploader:
|
||||
arguments:
|
||||
$em: "@doctrine.orm.entity_manager"
|
||||
|
||||
# warranty serial file logger
|
||||
App\Service\WarrantySerialUploadLogger:
|
||||
arguments:
|
||||
$em: "@doctrine.orm.entity_manager"
|
||||
|
||||
# warranty serial load logger
|
||||
App\Service\WarrantySerialLoadLogger:
|
||||
arguments:
|
||||
$em: "@doctrine.orm.entity_manager"
|
||||
|
||||
# FCM sender
|
||||
App\Service\FCMSender:
|
||||
arguments:
|
||||
$server_key: "%env(FCM_SERVER_KEY)%"
|
||||
$sender_id: "%env(FCM_SENDER_ID)%"
|
||||
|
||||
# price tier manager
|
||||
App\Service\PriceTierManager:
|
||||
arguments:
|
||||
$em: "@doctrine.orm.entity_manager"
|
||||
|
||||
# hub filters
|
||||
App\Service\HubFilter\BaseHubFilter:
|
||||
arguments:
|
||||
$hub_filter_logger: "@App\\Service\\HubFilterLogger"
|
||||
$em: "@doctrine.orm.entity_manager"
|
||||
$rt: "@App\\Service\\RisingTideGateway"
|
||||
$trans: "@Symfony\\Contracts\\Translation\\TranslatorInterface"
|
||||
|
||||
App\Service\HubFilter\Filters\DateAndTimeHubFilter:
|
||||
public: true
|
||||
|
||||
App\Service\HubFilter\Filters\JoTypeHubFilter:
|
||||
public: true
|
||||
|
||||
App\Service\HubFilter\Filters\MaxResultsHubFilter:
|
||||
public: true
|
||||
|
||||
App\Service\HubFilter\Filters\PaymentMethodHubFilter:
|
||||
public: true
|
||||
|
||||
App\Service\HubFilter\Filters\RiderAvailabilityHubFilter:
|
||||
public: true
|
||||
|
||||
App\Service\HubFilter\Filters\InventoryHubFilter:
|
||||
public: true
|
||||
arguments:
|
||||
$im: "@App\\Service\\InventoryManager"
|
||||
|
||||
App\Service\HubFilter\Filters\RoundRobinHubFilter:
|
||||
public: true
|
||||
arguments:
|
||||
$hub_distributor: "@App\\Service\\HubDistributor"
|
||||
|
|
|
|||
|
|
@ -1,2 +0,0 @@
|
|||
UPDATE customer SET date_create=NOW() WHERE date_create="0000-00-00 00:00:00";
|
||||
|
||||
|
|
@ -155,30 +155,6 @@ span.has-danger,
|
|||
color: #fff !important;
|
||||
}
|
||||
|
||||
.m-table__row--is_vip td {
|
||||
background-color: #ffff00 !important;
|
||||
color: #414a4c !important;
|
||||
}
|
||||
|
||||
.m-table__row--is_vip td > span,
|
||||
.m-table__row--is_vip td > span a,
|
||||
.m-table__row--is_vip td > span a i {
|
||||
color: #414a4c !important;
|
||||
}
|
||||
|
||||
.m-table__row--is_emergency td {
|
||||
background-color: #ffa500 !important;
|
||||
color: #fff !important;
|
||||
}
|
||||
|
||||
.m-table__row--is_emergency td > span,
|
||||
.m-table__row--is_emergency td > span a,
|
||||
.m-table__row--is_emergency td > span a i {
|
||||
color: #fff !important;
|
||||
}
|
||||
|
||||
|
||||
|
||||
.m-datatable.m-datatable--default > .m-datatable__table {
|
||||
min-height: 0 !important;
|
||||
}
|
||||
|
|
@ -382,4 +358,4 @@ span.has-danger,
|
|||
|
||||
.map-info .m-badge {
|
||||
border-radius: 0;
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 2.8 KiB |
|
|
@ -1,74 +0,0 @@
|
|||
$(function() {
|
||||
// export table to csv
|
||||
$(document).on('click', '[data-export-csv]', async function(e) {
|
||||
const el = e.target.closest('[data-export-csv]');
|
||||
const oldLabel = el.innerHTML;
|
||||
|
||||
// set loading status
|
||||
el.disabled = true;
|
||||
el.innerHTML = 'Exporting...';
|
||||
|
||||
const formData = new FormData();
|
||||
|
||||
formData.append('datatable[pagination][page]', 1);
|
||||
formData.append('datatable[pagination][perpage]', 10000000);
|
||||
|
||||
// get all rows
|
||||
const response = await fetch(el.dataset.url, {
|
||||
method: el.dataset.method,
|
||||
body: formData,
|
||||
});
|
||||
|
||||
const result = await response.json();
|
||||
|
||||
if (response.status === 200) {
|
||||
// empty set returned
|
||||
if (parseInt(result.meta.total) === 0) {
|
||||
swal({
|
||||
title: 'Whoops',
|
||||
html: 'No data to export!',
|
||||
type: 'warning',
|
||||
});
|
||||
}
|
||||
|
||||
// build csv data
|
||||
const csvRows = [];
|
||||
const fieldList = el.dataset.fields.split(',');
|
||||
csvRows.push(el.dataset.headers);
|
||||
|
||||
result.data.forEach((row) => {
|
||||
const fieldData = [];
|
||||
fieldList.forEach((field) => {
|
||||
fieldData.push('"' + row[field] + '"');
|
||||
});
|
||||
|
||||
csvRows.push(fieldData.join(','));
|
||||
});
|
||||
|
||||
const csvData = csvRows.join('\n');
|
||||
|
||||
// build the csv file
|
||||
const csvFile = new Blob([csvData], {
|
||||
type: 'text/csv',
|
||||
});
|
||||
|
||||
// create a link to the file and download it
|
||||
const url = window.URL.createObjectURL(csvFile);
|
||||
const a = document.createElement('a');
|
||||
a.href = url;
|
||||
a.download = el.dataset.filename + '.csv';
|
||||
a.click();
|
||||
} else {
|
||||
// something went wrong on the server
|
||||
swal({
|
||||
title: 'Whoops',
|
||||
html: 'An error has occurred while retrieving data.',
|
||||
type: 'error',
|
||||
});
|
||||
}
|
||||
|
||||
// remove loading status
|
||||
el.disabled = false;
|
||||
el.innerHTML = oldLabel;
|
||||
});
|
||||
});
|
||||
|
|
@ -3,7 +3,6 @@ class DashboardMap {
|
|||
this.options = options;
|
||||
this.rider_markers = rider_markers;
|
||||
this.cust_markers = cust_markers;
|
||||
this.rider_availability = {};
|
||||
|
||||
// layer groups
|
||||
this.layer_groups = {
|
||||
|
|
@ -254,13 +253,10 @@ class DashboardMap {
|
|||
var lat = data.latitude;
|
||||
var lng = data.longitude;
|
||||
|
||||
if (data.has_jo) {
|
||||
my.rider_availability[id] = false;
|
||||
if (data.has_jo)
|
||||
my.putRiderActiveJOMarker(id, lat, lng);
|
||||
} else {
|
||||
my.rider_availability[id] = true;
|
||||
else
|
||||
my.putRiderAvailableMarker(id, lat, lng);
|
||||
}
|
||||
});
|
||||
|
||||
// console.log(rider_markers);
|
||||
|
|
|
|||
|
|
@ -1,8 +1,7 @@
|
|||
class MapEventHandler {
|
||||
constructor(options, dashmap, ssl) {
|
||||
constructor(options, dashmap) {
|
||||
this.options = options;
|
||||
this.dashmap = dashmap;
|
||||
this.ssl = ssl;
|
||||
}
|
||||
|
||||
connect(user_id, host, port) {
|
||||
|
|
@ -12,7 +11,7 @@ class MapEventHandler {
|
|||
|
||||
this.mqtt = new Paho.MQTT.Client(host, port, client_id);
|
||||
var options = {
|
||||
useSSL: this.ssl,
|
||||
// useSSL: true,
|
||||
timeout: 3,
|
||||
invocationContext: this,
|
||||
onSuccess: this.onConnect.bind(this),
|
||||
|
|
@ -36,10 +35,6 @@ class MapEventHandler {
|
|||
// subscribe to rider status
|
||||
console.log('subscribing to ' + my.options.channels.rider_status);
|
||||
my.mqtt.subscribe(my.options.channels.rider_status);
|
||||
|
||||
// subscribe to rider availability
|
||||
console.log('subscribing to ' + my.options.channels.rider_availability);
|
||||
my.mqtt.subscribe(my.options.channels.rider_availability);
|
||||
}
|
||||
|
||||
if (my.options.track_jo) {
|
||||
|
|
@ -78,12 +73,12 @@ class MapEventHandler {
|
|||
}
|
||||
|
||||
handleRider(chan_split, payload) {
|
||||
//console.log("rider message");
|
||||
console.log("rider message");
|
||||
switch (chan_split[2]) {
|
||||
case "location":
|
||||
console.log("got location for rider " + chan_split[1] + " - " + payload);
|
||||
var pl_split = payload.split(':');
|
||||
// console.log(pl_split);
|
||||
console.log(pl_split);
|
||||
|
||||
// check for correct format
|
||||
if (pl_split.length != 2)
|
||||
|
|
@ -110,44 +105,6 @@ class MapEventHandler {
|
|||
break;
|
||||
}
|
||||
break;
|
||||
case "availability":
|
||||
console.log("got availability for rider " + chan_split[1] + " - " + payload);
|
||||
var obj = JSON.parse(payload);
|
||||
|
||||
var status = obj.status;
|
||||
// console.log("status " + status);
|
||||
switch (status) {
|
||||
case 'rider_offline':
|
||||
this.dashmap.rider_availability[chan_split[1]] = false;
|
||||
this.dashmap.removeRiderMarker(chan_split[1]);
|
||||
break;
|
||||
case 'rider_online':
|
||||
this.dashmap.rider_availability[chan_split[1]] = true;
|
||||
var lat = parseFloat(obj.latitude);
|
||||
var lng = parseFloat(obj.longitude);
|
||||
|
||||
// check if rider is available / unavailable
|
||||
var dashmap = this.dashmap;
|
||||
var url = dashmap.options.rider_availability_url;
|
||||
var rider_availability_url = url.replace('[id]', chan_split[1]);
|
||||
$.get(rider_availability_url).done(function(data) {
|
||||
console.log('rider availability - ' + data);
|
||||
switch (data) {
|
||||
case 'available':
|
||||
console.log('putting available marker ' + chan_split[1] + ' ' + lat + ':' + lng);
|
||||
dashmap.switchRiderStatus(chan_split[1], 'available');
|
||||
dashmap.putRiderAvailableMarker(chan_split[1], lat, lng);
|
||||
break;
|
||||
case 'unavailable':
|
||||
console.log('putting active jo marker ' + chan_split[1] + ' ' + lat + ':' + lng);
|
||||
dashmap.switchRiderStatus(chan_split[1], 'jo');
|
||||
dashmap.putRiderActiveJOMarker(chan_split[1], lat, lng);
|
||||
break;
|
||||
}
|
||||
});
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
BIN
public/battery/enduro_mobile.jpg
Executable file → Normal file
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 13 KiB |
BIN
public/battery/excel_mobile.jpg
Executable file → Normal file
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 2.6 KiB |
BIN
public/battery/gold_mobile.jpg
Executable file → Normal file
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 14 KiB |
|
|
@ -1 +0,0 @@
|
|||
|
||||
|
|
@ -44,7 +44,7 @@
|
|||
|
||||
<h2 style="font-weight: bold; font-size: 40px;">Can I request for any Res-Q service if I don't have or have a weak data signal?
|
||||
</h2>
|
||||
<p>Res-Q needs a stable data connection for you to be able to request for a service and track the location of our rider. If you don't have a stable data connection, you may call our hotline at (02) 8370-6686.
|
||||
<p>Res-Q needs a stable data connection for you to be able to request for a service and track the location of our rider. If you don't have a stable data connection, you may call our hotline at (02) 370-6686.
|
||||
</p>
|
||||
|
||||
<h2 style="font-weight: bold; font-size: 40px;">
|
||||
|
|
@ -58,13 +58,7 @@ Yes, we accept Visa and Mastercard issued in the Philippines.
|
|||
How can I pay for your services/ products?
|
||||
</h2>
|
||||
<p>
|
||||
We accept COD, local credit cards, debit cards, and ATM cards for battery replacement transactions. We only accept cash payment for flat tire, refuel and overheat transactions.
|
||||
</p>
|
||||
<p>
|
||||
Credit Card and Debit Card Payment is for Battery Sales only.
|
||||
</p>
|
||||
<p>
|
||||
Cash only for services request.
|
||||
We accept COD, local Credit Cards, Debit Cards, and ATM Cards only.
|
||||
</p>
|
||||
|
||||
<h2 style="font-weight: bold; font-size: 40px;">
|
||||
|
|
@ -78,7 +72,7 @@ Once you have successfully submitted your request, you will be able to see the p
|
|||
How do I make a follow up for my order/service?
|
||||
</h2>
|
||||
<p>
|
||||
Once your order/ service has been assigned to a Technician Rider, you may be able to see his/her contact details in the App. If no Technician Rider has been assigned yet, you may call our hotline at (02) 8370-6686.
|
||||
Once your order/ service has been assigned to a Technician Rider, you may be able to see his/her contact details in the App. If no Technician Rider has been assigned yet, you may call our hotline at (02) 370-6686.
|
||||
</p>
|
||||
|
||||
<h2 style="font-weight: bold; font-size: 40px;">
|
||||
|
|
@ -99,14 +93,14 @@ Delivery for battery purchase is free of charge.
|
|||
Can you deliver anywhere in the Philippines?
|
||||
</h2>
|
||||
<p>
|
||||
Not yet. Res-Q is offered Metro Manila, Baguio City and Binan, Laguna only.
|
||||
Not yet. Res-Q is offered initially in Metro Manila only.
|
||||
</p>
|
||||
|
||||
<h2 style="font-weight: bold; font-size: 40px;">
|
||||
My battery was pulled out and is being recharged in an outlet. How do I follow-up when I can take my battery back?
|
||||
</h2>
|
||||
<p>
|
||||
Please call our hotline at (02) 8370-6686.
|
||||
Please call our hotline at (02) 370-6686.
|
||||
</p>
|
||||
|
||||
|
||||
|
|
@ -115,7 +109,7 @@ Please call our hotline at (02) 8370-6686.
|
|||
How do I contact you for questions or feedback?
|
||||
</h2>
|
||||
<p>
|
||||
You may call our Customer Support Hotline: 02-83706686 or email us at online@motolite.com.
|
||||
You may call our Customer Support Hotline: 02-3706686 or email us at online@motolite.com.
|
||||
</p>
|
||||
|
||||
<h2 style="font-weight: bold; font-size: 40px;">
|
||||
|
|
|
|||
|
|
@ -58,7 +58,7 @@ Yes, we accept Visa and Mastercard issued in the Philippines.
|
|||
How can I pay for your services/ products?
|
||||
</h2>
|
||||
<p>
|
||||
We accept COD, local credit cards, debit cards, and ATM cards for battery replacement transactions. We only accept cash payment for flat tire, refuel and overheat transactions.
|
||||
We accept COD, local Credit Cards, Debit Cards, and ATM Cards only.
|
||||
</p>
|
||||
|
||||
<h2 style="font-weight: bold; font-size: 40px;">
|
||||
|
|
@ -93,7 +93,7 @@ Delivery for battery purchase is free of charge.
|
|||
Can you deliver anywhere in the Philippines?
|
||||
</h2>
|
||||
<p>
|
||||
Not yet. Res-Q is offered Metro Manila, Baguio City and Binan, Laguna only.
|
||||
Not yet. Res-Q is offered initially in Metro Manila only.
|
||||
</p>
|
||||
|
||||
<h2 style="font-weight: bold; font-size: 40px;">
|
||||
|
|
|
|||
179
resq_settings/cmb/menu.yaml
Normal file
|
|
@ -0,0 +1,179 @@
|
|||
main_menu:
|
||||
- id: home
|
||||
acl: dashboard.menu
|
||||
label: Dashboard
|
||||
icon: flaticon-line-graph
|
||||
- id: user
|
||||
acl: user.menu
|
||||
label: User
|
||||
icon: flaticon-users
|
||||
- id: user_list
|
||||
acl: user.list
|
||||
label: Users
|
||||
parent: user
|
||||
- id: role_list
|
||||
acl: role.list
|
||||
label: Roles
|
||||
parent: user
|
||||
|
||||
- id: apiuser
|
||||
acl: apiuser.menu
|
||||
label: API User
|
||||
icon: flaticon-users
|
||||
- id: api_user_list
|
||||
acl: apiuser.list
|
||||
label: API Users
|
||||
parent: apiuser
|
||||
- id: api_role_list
|
||||
acl: apirole.list
|
||||
label: API Roles
|
||||
parent: apiuser
|
||||
|
||||
- id: logistics
|
||||
acl: logistics.menu
|
||||
label: Logistics
|
||||
icon: fa fa-truck
|
||||
- id: rider_list
|
||||
acl: rider.list
|
||||
label: Riders
|
||||
parent: logistics
|
||||
- id: service_charge_list
|
||||
acl: service_charge.list
|
||||
label: Service Charges
|
||||
parent: logistics
|
||||
|
||||
- id: battery
|
||||
acl: battery.menu
|
||||
label: Battery
|
||||
icon: fa fa-battery-3
|
||||
- id: battery_list
|
||||
acl: battery.list
|
||||
label: Batteries
|
||||
parent: battery
|
||||
- id: bmfg_list
|
||||
acl: bmfg.list
|
||||
label: Manufacturers
|
||||
parent: battery
|
||||
- id: bmodel_list
|
||||
acl: bmodel.list
|
||||
label: Models
|
||||
parent: battery
|
||||
- id: bsize_list
|
||||
acl: bsize.list
|
||||
label: Sizes
|
||||
parent: battery
|
||||
- id: promo_list
|
||||
acl: promo.list
|
||||
label: Promos
|
||||
parent: battery
|
||||
|
||||
- id: vehicle
|
||||
acl: vehicle.menu
|
||||
label: Vehicle
|
||||
icon: fa fa-car
|
||||
- id: vehicle_list
|
||||
acl: vehicle.list
|
||||
label: Vehicles
|
||||
parent: vehicle
|
||||
- id: vmfg_list
|
||||
acl: vmfg.list
|
||||
label: Manufacturers
|
||||
parent: vehicle
|
||||
|
||||
- id: location
|
||||
acl: location.menu
|
||||
label: Location
|
||||
icon: fa fa-home
|
||||
- id: outlet_list
|
||||
acl: outlet.menu
|
||||
label: Outlet
|
||||
parent: location
|
||||
- id: hub_list
|
||||
acl: hub.menu
|
||||
label: Hub
|
||||
parent: location
|
||||
- id: geofence_list
|
||||
acl: geofence.menu
|
||||
label: Geofence
|
||||
parent: location
|
||||
|
||||
|
||||
- id: joborder
|
||||
acl: joborder.menu
|
||||
label: Job Order
|
||||
icon: flaticon-calendar-3
|
||||
- id: jo_onestep_form
|
||||
acl: jo_onestep.form
|
||||
label: One-step Process
|
||||
parent: joborder
|
||||
- id: jo_walkin_form
|
||||
acl: jo_walkin.form
|
||||
label: Walk-in
|
||||
parent: joborder
|
||||
- id: jo_open
|
||||
acl: jo_open.list
|
||||
label: Open
|
||||
parent: joborder
|
||||
- id: jo_all
|
||||
acl: jo_all.list
|
||||
label: View All
|
||||
parent: joborder
|
||||
|
||||
- id: support
|
||||
acl: support.menu
|
||||
label: Customer Support
|
||||
icon: flaticon-support
|
||||
- id: customer_list
|
||||
acl: customer.list
|
||||
label: Customers
|
||||
parent: support
|
||||
- id: ticket_list
|
||||
acl: ticket.list
|
||||
label: Tickets
|
||||
parent: support
|
||||
- id: general_search
|
||||
acl: general.search
|
||||
label: Search
|
||||
parent: support
|
||||
- id: warranty_search
|
||||
acl: warranty.search
|
||||
label: Customer Battery Search
|
||||
parent: support
|
||||
- id: privacy_policy_list
|
||||
acl: privacy_policy.list
|
||||
label: Privacy Policy
|
||||
parent: support
|
||||
- id: warranty_list
|
||||
acl: warranty.list
|
||||
label: Warranty
|
||||
parent: support
|
||||
- id: warranty_upload
|
||||
acl: warranty.upload
|
||||
label: Warranty Upload
|
||||
parent: support
|
||||
- id: static_content_list
|
||||
acl: static_content.list
|
||||
label: Static Content
|
||||
parent: support
|
||||
|
||||
- id: service
|
||||
acl: service.menu
|
||||
label: Other Services
|
||||
icon: flaticon-squares
|
||||
- id: service_list
|
||||
acl: service.list
|
||||
label: Services
|
||||
parent: service
|
||||
|
||||
- id: partner
|
||||
acl: partner.menu
|
||||
label: Partners
|
||||
icon: flaticon-network
|
||||
- id: partner_list
|
||||
acl: partner.list
|
||||
label: Partners
|
||||
parent: partner
|
||||
- id: review_list
|
||||
acl: review.list
|
||||
label: Reviews
|
||||
parent: partner
|
||||
27
resq_settings/cmb/messages.en.yaml
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
# text
|
||||
title_login: Res-Q for CMB | Login
|
||||
block_title: Res-Q for CMB
|
||||
control_panel_sign_in: Sign-in to Control Panel
|
||||
alt_image_logo_login: Res-Q for CMB
|
||||
alt_image_dashboard: Res-Q for CMB
|
||||
copyright: Res-Q for CMB
|
||||
battery_size_tradein_brand: Trade-in Motolite
|
||||
battery_size_tradein_premium: Trade-in Premium
|
||||
battery_size_tradein_other: Trade-in Other
|
||||
add_cust_vehicle_battery_info: This vehicle is using a Motolite battery
|
||||
jo_title_pdf: Res-Q for CMB Job Order
|
||||
country_code_prefix: '+60'
|
||||
delivery_instructions_label: 'CarFix Details'
|
||||
|
||||
# images
|
||||
image_logo_login: /assets/images/black-text-logo-01.png
|
||||
icon_login: /assets/images/battery-assist-bm-logo-32x32.png
|
||||
icon_base_32x32: /assets/images/black-text-logo-01-32x32.png
|
||||
icon_base_16x16: /assets/images/black-text-logo-01-16x16.png
|
||||
image_dashboard: /assets/images/century_logo.png
|
||||
image_jo_pdf: /public/assets/images/black-text-logo-01-115x115.png
|
||||
|
||||
# default point for maps
|
||||
default_lat: 3.084216
|
||||
default_long: 101.6129996
|
||||
default_region: my
|
||||
246
resq_settings/cmb/services.yaml
Normal file
|
|
@ -0,0 +1,246 @@
|
|||
# Put parameters here that don't need to change on each machine where the app is deployed
|
||||
# https://symfony.com/doc/current/best_practices/configuration.html#application-related-configuration
|
||||
parameters:
|
||||
map_default:
|
||||
latitude: 14.6091
|
||||
longitude: 121.0223
|
||||
image_upload_directory: '%kernel.project_dir%/public/uploads'
|
||||
jo_extra_upload_directory: '%kernel.project_dir%/public/uploads/jo_extra'
|
||||
job_order_refresh_interval: 300000
|
||||
api_acl_file: 'api_acl.yaml'
|
||||
api_access_key: 'api_access_keys'
|
||||
app_acl_file: 'acl.yaml'
|
||||
app_access_key: 'access_keys'
|
||||
cvu_brand_id: "%env(CVU_BRAND_ID)%"
|
||||
country_code: "%env(COUNTRY_CODE)%"
|
||||
api_version: "%env(API_VERSION)%"
|
||||
|
||||
services:
|
||||
# default configuration for services in *this* file
|
||||
_defaults:
|
||||
autowire: true # Automatically injects dependencies in your services.
|
||||
autoconfigure: true # Automatically registers your services as commands, event subscribers, etc.
|
||||
public: false # Allows optimizing the container by removing unused services; this also means
|
||||
# fetching services directly from the container via $container->get() won't work.
|
||||
# The best practice is to be explicit about your dependencies anyway.
|
||||
|
||||
# makes classes in src/ available to be used as services
|
||||
# this creates a service per class whose id is the fully-qualified class name
|
||||
App\:
|
||||
resource: '../src/*'
|
||||
exclude: '../src/{Entity,Migrations,Tests,Menu,Access}'
|
||||
|
||||
# controllers are imported separately to make sure services can be injected
|
||||
# as action arguments even if you don't extend any base controller class
|
||||
App\Controller\:
|
||||
resource: '../src/Controller'
|
||||
tags: ['controller.service_arguments']
|
||||
|
||||
# add more service definitions when explicit configuration is needed
|
||||
# please note that last definitions always *replace* previous ones
|
||||
App\Menu\Generator:
|
||||
arguments:
|
||||
$router: "@router.default"
|
||||
$cache_dir: "%kernel.cache_dir%"
|
||||
$config_dir: "%kernel.root_dir%/../config"
|
||||
|
||||
Catalyst\AuthBundle\Service\ACLGenerator:
|
||||
arguments:
|
||||
$router: "@router.default"
|
||||
$cache_dir: "%kernel.cache_dir%"
|
||||
$config_dir: "%kernel.root_dir%/../config"
|
||||
$acl_file: "%app_acl_file%"
|
||||
|
||||
Catalyst\AuthBundle\Service\ACLVoter:
|
||||
arguments:
|
||||
$user_class: "App\\Entity\\User"
|
||||
tags: ['security.voter']
|
||||
|
||||
Catalyst\AuthBundle\Service\UserChecker:
|
||||
|
||||
App\Service\FileUploader:
|
||||
arguments:
|
||||
$target_dir: '%image_upload_directory%'
|
||||
|
||||
App\Service\MapTools:
|
||||
arguments:
|
||||
$em: "@doctrine.orm.entity_manager"
|
||||
$gmaps_api_key: "%env(GMAPS_API_KEY)%"
|
||||
$cust_dist_limit: "%env(CUST_DISTANCE_LIMIT)%"
|
||||
|
||||
App\Service\RisingTideGateway:
|
||||
arguments:
|
||||
$em: "@doctrine.orm.entity_manager"
|
||||
$user: "%env(RT_USER)%"
|
||||
$pass: "%env(RT_PASS)%"
|
||||
$usage_type: "%env(RT_USAGE_TYPE)%"
|
||||
$shortcode: "%env(RT_SHORTCODE)%"
|
||||
$dr_url: "https://resqaws.jankstudio.com/sms/delivery_receipt"
|
||||
|
||||
App\Service\MQTTClient:
|
||||
arguments:
|
||||
$redis_client: "@App\\Service\\RedisClientProvider"
|
||||
$key: "mqtt_events"
|
||||
|
||||
App\Service\APNSClient:
|
||||
arguments:
|
||||
$redis_client: "@App\\Service\\RedisClientProvider"
|
||||
|
||||
App\Service\RedisClientProvider:
|
||||
arguments:
|
||||
$scheme: "%env(REDIS_CLIENT_SCHEME)%"
|
||||
$host: "%env(REDIS_CLIENT_HOST)%"
|
||||
$port: "%env(REDIS_CLIENT_PORT)%"
|
||||
$password: "%env(REDIS_CLIENT_PASSWORD)%"
|
||||
|
||||
App\Service\GeofenceTracker:
|
||||
arguments:
|
||||
$geofence_flag: "%env(GEOFENCE_ENABLE)%"
|
||||
|
||||
App\Service\WarrantyHandler:
|
||||
arguments:
|
||||
$em: "@doctrine.orm.entity_manager"
|
||||
|
||||
App\Command\SetCustomerPrivacyPolicyCommand:
|
||||
arguments:
|
||||
$policy_promo: "%env(POLICY_PROMO)%"
|
||||
$policy_third_party: "%env(POLICY_THIRD_PARTY)%"
|
||||
$policy_mobile: "%env(POLICY_MOBILE)%"
|
||||
|
||||
App\Command\CreateCustomerFromWarrantyCommand:
|
||||
arguments:
|
||||
$cvu_mfg_id: "%env(CVU_MFG_ID)%"
|
||||
$cvu_brand_id: "%env(CVU_BRAND_ID)%"
|
||||
|
||||
# rider tracker service
|
||||
App\Service\RiderTracker:
|
||||
arguments:
|
||||
$redis_client: "@App\\Service\\RedisClientProvider"
|
||||
|
||||
Catalyst\APIBundle\Security\APIKeyUserProvider:
|
||||
arguments:
|
||||
$em: "@doctrine.orm.entity_manager"
|
||||
|
||||
Catalyst\APIBundle\Security\APIKeyAuthenticator:
|
||||
arguments:
|
||||
$em: "@doctrine.orm.entity_manager"
|
||||
|
||||
Catalyst\APIBundle\Command\UserCreateCommand:
|
||||
arguments:
|
||||
$em: "@doctrine.orm.entity_manager"
|
||||
tags: ['console.command']
|
||||
|
||||
Catalyst\APIBundle\Command\TestCommand:
|
||||
tags: ['console.command']
|
||||
|
||||
Catalyst\APIBundle\Command\TestAPICommand:
|
||||
tags: ['console.command']
|
||||
|
||||
Catalyst\APIBundle\Access\Voter:
|
||||
arguments:
|
||||
$acl_gen: "@Catalyst\\APIBundle\\Access\\Generator"
|
||||
$user_class: "Catalyst\\APIBundle\\Entity\\User"
|
||||
tags: ['security.voter']
|
||||
|
||||
Catalyst\APIBundle\Access\Generator:
|
||||
arguments:
|
||||
$router: "@router.default"
|
||||
$cache_dir: "%kernel.cache_dir%"
|
||||
$config_dir: "%kernel.root_dir%/../config"
|
||||
$acl_file: "%api_acl_file%"
|
||||
|
||||
Catalyst\MenuBundle\Menu\Generator:
|
||||
arguments:
|
||||
$router: "@router.default"
|
||||
$cache_dir: "%kernel.cache_dir%"
|
||||
$config_dir: "%kernel.root_dir%/../config"
|
||||
|
||||
Catalyst\MenuBundle\Listener\MenuAnnotationListener:
|
||||
arguments:
|
||||
$menu_name: "main_menu"
|
||||
tags:
|
||||
- { name: kernel.event_listener, event: kernel.controller, method: onKernelController }
|
||||
|
||||
# invoice generator
|
||||
App\Service\InvoiceGenerator\CMBInvoiceGenerator: ~
|
||||
|
||||
# invoice generator interface
|
||||
App\Service\InvoiceGeneratorInterface: "@App\\Service\\InvoiceGenerator\\CMBInvoiceGenerator"
|
||||
|
||||
# job order generator
|
||||
App\Service\JobOrderHandler\CMBJobOrderHandler:
|
||||
arguments:
|
||||
$country_code: "%env(COUNTRY_CODE)%"
|
||||
|
||||
#job order generator interface
|
||||
App\Service\JobOrderHandlerInterface: "@App\\Service\\JobOrderHandler\\CMBJobOrderHandler"
|
||||
|
||||
# customer generator
|
||||
App\Service\CustomerHandler\CMBCustomerHandler:
|
||||
arguments:
|
||||
$country_code: "%env(COUNTRY_CODE)%"
|
||||
|
||||
# customer generator interface
|
||||
App\Service\CustomerHandlerInterface: "@App\\Service\\CustomerHandler\\CMBCustomerHandler"
|
||||
|
||||
# rider assignment
|
||||
App\Service\RiderAssignmentHandler\CMBRiderAssignmentHandler: ~
|
||||
|
||||
# rider assignment interface
|
||||
App\Service\RiderAssignmentHandlerInterface: "@App\\Service\\RiderAssignmentHandler\\CMBRiderAssignmentHandler"
|
||||
|
||||
# rider API service
|
||||
App\Service\RiderAPIHandler\CMBRiderAPIHandler:
|
||||
arguments:
|
||||
$country_code: "%env(COUNTRY_CODE)%"
|
||||
$upload_dir: "%jo_extra_upload_directory%"
|
||||
|
||||
App\Service\RiderAPIHandlerInterface: "@App\\Service\\RiderAPIHandler\\CMBRiderAPIHandler"
|
||||
|
||||
# map manager
|
||||
#App\Service\GISManager\Bing: ~
|
||||
App\Service\GISManager\OpenStreet: ~
|
||||
#App\Service\GISManager\Google: ~
|
||||
|
||||
#App\Service\GISManagerInterface: "@App\\Service\\GISManager\\Bing"
|
||||
App\Service\GISManagerInterface: "@App\\Service\\GISManager\\OpenStreet"
|
||||
#App\Service\GISManagerInterface: "@App\\Service\\GISManager\\Google"
|
||||
|
||||
App\EventListener\JobOrderActiveCacheListener:
|
||||
arguments:
|
||||
$jo_cache: "@App\\Service\\JobOrderCache"
|
||||
$mqtt: "@App\\Service\\MQTTClient"
|
||||
tags:
|
||||
- name: 'doctrine.orm.entity_listener'
|
||||
event: 'postUpdate'
|
||||
entity: 'App\Entity\JobOrder'
|
||||
- name: 'doctrine.orm.entity_listener'
|
||||
event: 'postRemove'
|
||||
entity: 'App\Entity\JobOrder'
|
||||
- name: 'doctrine.orm.entity_listener'
|
||||
event: 'postPersist'
|
||||
entity: 'App\Entity\JobOrder'
|
||||
|
||||
App\Service\JobOrderCache:
|
||||
arguments:
|
||||
$redis_prov: "@App\\Service\\RedisClientProvider"
|
||||
$active_jo_key: "%env(LOCATION_JO_ACTIVE_KEY)%"
|
||||
|
||||
App\Service\RiderCache:
|
||||
arguments:
|
||||
$redis_prov: "@App\\Service\\RedisClientProvider"
|
||||
$loc_key: "%env(LOCATION_RIDER_ACTIVE_KEY)%"
|
||||
$status_key: "%env(STATUS_RIDER_KEY)%"
|
||||
|
||||
# inventory manager
|
||||
App\Service\InventoryManager:
|
||||
arguments:
|
||||
$api_url: "%env(INVENTORY_API_URL)%"
|
||||
$api_ocp_key: "%env(INVENTORY_API_OCP)%"
|
||||
$api_auth_prefix: "%env(INVENTORY_API_AUTH_TOKEN_PREFIX)%"
|
||||
$api_auth_token: "%env(INVENTORY_API_AUTH_TOKEN)%"
|
||||
|
||||
# API logging
|
||||
App\EventSubscriber\LogSubscriber:
|
||||
arguments:
|
||||
$api_log_flag: "%env(API_LOGGING)%"
|
||||
186
resq_settings/resq/menu.yaml
Normal file
|
|
@ -0,0 +1,186 @@
|
|||
main_menu:
|
||||
- id: home
|
||||
acl: dashboard.menu
|
||||
label: Dashboard
|
||||
icon: flaticon-line-graph
|
||||
- id: user
|
||||
acl: user.menu
|
||||
label: User
|
||||
icon: flaticon-users
|
||||
- id: user_list
|
||||
acl: user.list
|
||||
label: Users
|
||||
parent: user
|
||||
- id: role_list
|
||||
acl: role.list
|
||||
label: Roles
|
||||
parent: user
|
||||
|
||||
- id: apiuser
|
||||
acl: apiuser.menu
|
||||
label: API User
|
||||
icon: flaticon-users
|
||||
- id: api_user_list
|
||||
acl: apiuser.list
|
||||
label: API Users
|
||||
parent: apiuser
|
||||
- id: api_role_list
|
||||
acl: apirole.list
|
||||
label: API Roles
|
||||
parent: apiuser
|
||||
|
||||
- id: logistics
|
||||
acl: logistics.menu
|
||||
label: Logistics
|
||||
icon: fa fa-truck
|
||||
- id: rider_list
|
||||
acl: rider.list
|
||||
label: Riders
|
||||
parent: logistics
|
||||
|
||||
- id: battery
|
||||
acl: battery.menu
|
||||
label: Battery
|
||||
icon: fa fa-battery-3
|
||||
- id: battery_list
|
||||
acl: battery.list
|
||||
label: Batteries
|
||||
parent: battery
|
||||
- id: bmfg_list
|
||||
acl: bmfg.list
|
||||
label: Manufacturers
|
||||
parent: battery
|
||||
- id: bmodel_list
|
||||
acl: bmodel.list
|
||||
label: Models
|
||||
parent: battery
|
||||
- id: bsize_list
|
||||
acl: bsize.list
|
||||
label: Sizes
|
||||
parent: battery
|
||||
- id: promo_list
|
||||
acl: promo.list
|
||||
label: Promos
|
||||
parent: battery
|
||||
|
||||
- id: vehicle
|
||||
acl: vehicle.menu
|
||||
label: Vehicle
|
||||
icon: fa fa-car
|
||||
- id: vehicle_list
|
||||
acl: vehicle.list
|
||||
label: Vehicles
|
||||
parent: vehicle
|
||||
- id: vmfg_list
|
||||
acl: vmfg.list
|
||||
label: Manufacturers
|
||||
parent: vehicle
|
||||
|
||||
- id: location
|
||||
acl: location.menu
|
||||
label: Location
|
||||
icon: fa fa-home
|
||||
- id: outlet_list
|
||||
acl: outlet.menu
|
||||
label: Outlet
|
||||
parent: location
|
||||
- id: hub_list
|
||||
acl: hub.menu
|
||||
label: Hub
|
||||
parent: location
|
||||
- id: geofence_list
|
||||
acl: geofence.menu
|
||||
label: Geofence
|
||||
parent: location
|
||||
|
||||
|
||||
- id: joborder
|
||||
acl: joborder.menu
|
||||
label: Job Order
|
||||
icon: flaticon-calendar-3
|
||||
- id: jo_in
|
||||
acl: jo_in.list
|
||||
label: Incoming
|
||||
parent: joborder
|
||||
- id: jo_proc
|
||||
acl: jo_proc.list
|
||||
label: Dispatch
|
||||
parent: joborder
|
||||
- id: jo_assign
|
||||
acl: jo_assign.list
|
||||
label: Rider Assignment
|
||||
parent: joborder
|
||||
- id: jo_fulfill
|
||||
acl: jo_fulfill.list
|
||||
label: Fulfillment
|
||||
parent: joborder
|
||||
- id: jo_open
|
||||
acl: jo_open.list
|
||||
label: Open
|
||||
parent: joborder
|
||||
- id: jo_all
|
||||
acl: jo_all.list
|
||||
label: View All
|
||||
parent: joborder
|
||||
- id: jo_hub.view
|
||||
label: Hub View
|
||||
parent: joborder
|
||||
|
||||
- id: support
|
||||
acl: support.menu
|
||||
label: Customer Support
|
||||
icon: flaticon-support
|
||||
- id: customer_list
|
||||
acl: customer.list
|
||||
label: Customers
|
||||
parent: support
|
||||
- id: ticket_list
|
||||
acl: ticket.list
|
||||
label: Tickets
|
||||
parent: support
|
||||
- id: general_search
|
||||
acl: general.search
|
||||
label: Search
|
||||
parent: support
|
||||
- id: warranty_search
|
||||
acl: warranty.search
|
||||
label: Customer Battery Search
|
||||
parent: support
|
||||
- id: privacy_policy_list
|
||||
acl: privacy_policy.list
|
||||
label: Privacy Policy
|
||||
parent: support
|
||||
- id: warranty_list
|
||||
acl: warranty.list
|
||||
label: Warranty
|
||||
parent: support
|
||||
- id: warranty_upload
|
||||
acl: warranty.upload
|
||||
label: Warranty Upload
|
||||
parent: support
|
||||
- id: static_content_list
|
||||
acl: static_content.list
|
||||
label: Static Content
|
||||
parent: support
|
||||
|
||||
- id: service
|
||||
acl: service.menu
|
||||
label: Other Services
|
||||
icon: flaticon-squares
|
||||
- id: service_list
|
||||
acl: service.list
|
||||
label: Services
|
||||
parent: service
|
||||
|
||||
- id: partner
|
||||
acl: partner.menu
|
||||
label: Partners
|
||||
icon: flaticon-network
|
||||
- id: partner_list
|
||||
acl: partner.list
|
||||
label: Partners
|
||||
parent: partner
|
||||
- id: review_list
|
||||
acl: review.list
|
||||
label: Reviews
|
||||
parent: partner
|
||||
27
resq_settings/resq/messages.en.yaml
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
# text
|
||||
title_login: Motolite Res-Q | Login
|
||||
block_title: Motolite Res-Q
|
||||
control_panel_sign_in: Sign-in to Control Panel
|
||||
alt_image_logo_login: Res-Q
|
||||
alt_image_dashboard: Motolite
|
||||
copyright: Motolite Res-Q
|
||||
battery_size_tradein_brand: Trade-in Motolite
|
||||
battery_size_tradein_premium: Trade-in Premium
|
||||
battery_size_tradein_other: Trade-in Other
|
||||
add_cust_vehicle_battery_info: This vehicle is using a Motolite battery
|
||||
jo_title_pdf: Motolite Res-Q Job Order
|
||||
country_code_prefix: '+63'
|
||||
delivery_instructions_label: Delivery Instructions
|
||||
|
||||
# images
|
||||
image_logo_login: /assets/images/logo-resq.png
|
||||
icon_login: /assets/demo/default/media/img/logo/favicon.ico
|
||||
icon_base_32x32: /assets/images/favicon/favicon-32x32.png
|
||||
icon_base_16x16: /assets/images/favicon/favicon-16x16.png
|
||||
image_dashboard: /assets/images/logo-motolite.png
|
||||
image_jo_pdf: /public/assets/images/logo-resq.png
|
||||
|
||||
# default point for maps
|
||||
default_lat: 14.6091
|
||||
default_long: 121.0223
|
||||
default_region: ph
|
||||
244
resq_settings/resq/services.yaml
Normal file
|
|
@ -0,0 +1,244 @@
|
|||
# Put parameters here that don't need to change on each machine where the app is deployed
|
||||
# https://symfony.com/doc/current/best_practices/configuration.html#application-related-configuration
|
||||
parameters:
|
||||
map_default:
|
||||
latitude: 14.6091
|
||||
longitude: 121.0223
|
||||
image_upload_directory: '%kernel.project_dir%/public/uploads'
|
||||
job_order_refresh_interval: 300000
|
||||
api_acl_file: 'api_acl.yaml'
|
||||
api_access_key: 'api_access_keys'
|
||||
app_acl_file: 'acl.yaml'
|
||||
app_access_key: 'access_keys'
|
||||
cvu_brand_id: "%env(CVU_BRAND_ID)%"
|
||||
country_code: "%env(COUNTRY_CODE)%"
|
||||
api_version: "%env(API_VERSION)%"
|
||||
|
||||
services:
|
||||
# default configuration for services in *this* file
|
||||
_defaults:
|
||||
autowire: true # Automatically injects dependencies in your services.
|
||||
autoconfigure: true # Automatically registers your services as commands, event subscribers, etc.
|
||||
public: false # Allows optimizing the container by removing unused services; this also means
|
||||
# fetching services directly from the container via $container->get() won't work.
|
||||
# The best practice is to be explicit about your dependencies anyway.
|
||||
|
||||
# makes classes in src/ available to be used as services
|
||||
# this creates a service per class whose id is the fully-qualified class name
|
||||
App\:
|
||||
resource: '../src/*'
|
||||
exclude: '../src/{Entity,Migrations,Tests,Menu,Access}'
|
||||
|
||||
# controllers are imported separately to make sure services can be injected
|
||||
# as action arguments even if you don't extend any base controller class
|
||||
App\Controller\:
|
||||
resource: '../src/Controller'
|
||||
tags: ['controller.service_arguments']
|
||||
|
||||
# add more service definitions when explicit configuration is needed
|
||||
# please note that last definitions always *replace* previous ones
|
||||
App\Menu\Generator:
|
||||
arguments:
|
||||
$router: "@router.default"
|
||||
$cache_dir: "%kernel.cache_dir%"
|
||||
$config_dir: "%kernel.root_dir%/../config"
|
||||
|
||||
Catalyst\AuthBundle\Service\ACLGenerator:
|
||||
arguments:
|
||||
$router: "@router.default"
|
||||
$cache_dir: "%kernel.cache_dir%"
|
||||
$config_dir: "%kernel.root_dir%/../config"
|
||||
$acl_file: "%app_acl_file%"
|
||||
|
||||
Catalyst\AuthBundle\Service\ACLVoter:
|
||||
arguments:
|
||||
$user_class: "App\\Entity\\User"
|
||||
tags: ['security.voter']
|
||||
|
||||
Catalyst\AuthBundle\Service\UserChecker:
|
||||
|
||||
App\Service\FileUploader:
|
||||
arguments:
|
||||
$target_dir: '%image_upload_directory%'
|
||||
|
||||
App\Service\MapTools:
|
||||
arguments:
|
||||
$em: "@doctrine.orm.entity_manager"
|
||||
$gmaps_api_key: "%env(GMAPS_API_KEY)%"
|
||||
$cust_dist_limit: "%env(CUST_DISTANCE_LIMIT)%"
|
||||
|
||||
App\Service\RisingTideGateway:
|
||||
arguments:
|
||||
$em: "@doctrine.orm.entity_manager"
|
||||
$user: "%env(RT_USER)%"
|
||||
$pass: "%env(RT_PASS)%"
|
||||
$usage_type: "%env(RT_USAGE_TYPE)%"
|
||||
$shortcode: "%env(RT_SHORTCODE)%"
|
||||
$dr_url: "https://resqaws.jankstudio.com/sms/delivery_receipt"
|
||||
|
||||
App\Service\MQTTClient:
|
||||
arguments:
|
||||
$redis_client: "@App\\Service\\RedisClientProvider"
|
||||
$key: "mqtt_events"
|
||||
|
||||
App\Service\APNSClient:
|
||||
arguments:
|
||||
$redis_client: "@App\\Service\\RedisClientProvider"
|
||||
|
||||
App\Service\RedisClientProvider:
|
||||
arguments:
|
||||
$scheme: "%env(REDIS_CLIENT_SCHEME)%"
|
||||
$host: "%env(REDIS_CLIENT_HOST)%"
|
||||
$port: "%env(REDIS_CLIENT_PORT)%"
|
||||
$password: "%env(REDIS_CLIENT_PASSWORD)%"
|
||||
|
||||
App\Service\GeofenceTracker:
|
||||
arguments:
|
||||
$geofence_flag: "%env(GEOFENCE_ENABLE)%"
|
||||
|
||||
App\Service\WarrantyHandler:
|
||||
arguments:
|
||||
$em: "@doctrine.orm.entity_manager"
|
||||
|
||||
App\Command\SetCustomerPrivacyPolicyCommand:
|
||||
arguments:
|
||||
$policy_promo: "%env(POLICY_PROMO)%"
|
||||
$policy_third_party: "%env(POLICY_THIRD_PARTY)%"
|
||||
$policy_mobile: "%env(POLICY_MOBILE)%"
|
||||
|
||||
App\Command\CreateCustomerFromWarrantyCommand:
|
||||
arguments:
|
||||
$cvu_mfg_id: "%env(CVU_MFG_ID)%"
|
||||
$cvu_brand_id: "%env(CVU_BRAND_ID)%"
|
||||
|
||||
# rider tracker service
|
||||
App\Service\RiderTracker:
|
||||
arguments:
|
||||
$redis_client: "@App\\Service\\RedisClientProvider"
|
||||
|
||||
Catalyst\APIBundle\Security\APIKeyUserProvider:
|
||||
arguments:
|
||||
$em: "@doctrine.orm.entity_manager"
|
||||
|
||||
Catalyst\APIBundle\Security\APIKeyAuthenticator:
|
||||
arguments:
|
||||
$em: "@doctrine.orm.entity_manager"
|
||||
|
||||
Catalyst\APIBundle\Command\UserCreateCommand:
|
||||
arguments:
|
||||
$em: "@doctrine.orm.entity_manager"
|
||||
tags: ['console.command']
|
||||
|
||||
Catalyst\APIBundle\Command\TestCommand:
|
||||
tags: ['console.command']
|
||||
|
||||
Catalyst\APIBundle\Command\TestAPICommand:
|
||||
tags: ['console.command']
|
||||
|
||||
Catalyst\APIBundle\Access\Voter:
|
||||
arguments:
|
||||
$acl_gen: "@Catalyst\\APIBundle\\Access\\Generator"
|
||||
$user_class: "Catalyst\\APIBundle\\Entity\\User"
|
||||
tags: ['security.voter']
|
||||
|
||||
Catalyst\APIBundle\Access\Generator:
|
||||
arguments:
|
||||
$router: "@router.default"
|
||||
$cache_dir: "%kernel.cache_dir%"
|
||||
$config_dir: "%kernel.root_dir%/../config"
|
||||
$acl_file: "%api_acl_file%"
|
||||
|
||||
Catalyst\MenuBundle\Menu\Generator:
|
||||
arguments:
|
||||
$router: "@router.default"
|
||||
$cache_dir: "%kernel.cache_dir%"
|
||||
$config_dir: "%kernel.root_dir%/../config"
|
||||
|
||||
Catalyst\MenuBundle\Listener\MenuAnnotationListener:
|
||||
arguments:
|
||||
$menu_name: "main_menu"
|
||||
tags:
|
||||
- { name: kernel.event_listener, event: kernel.controller, method: onKernelController }
|
||||
|
||||
# invoice generator
|
||||
App\Service\InvoiceGenerator\ResqInvoiceGenerator: ~
|
||||
|
||||
# invoice generator interface
|
||||
App\Service\InvoiceGeneratorInterface: "@App\\Service\\InvoiceGenerator\\ResqInvoiceGenerator"
|
||||
|
||||
# job order generator
|
||||
App\Service\JobOrderHandler\ResqJobOrderHandler:
|
||||
arguments:
|
||||
$country_code: "%env(COUNTRY_CODE)%"
|
||||
|
||||
#job order generator interface
|
||||
App\Service\JobOrderHandlerInterface: "@App\\Service\\JobOrderHandler\\ResqJobOrderHandler"
|
||||
|
||||
# customer generator
|
||||
App\Service\CustomerHandler\ResqCustomerHandler:
|
||||
arguments:
|
||||
$country_code: "%env(COUNTRY_CODE)%"
|
||||
|
||||
# customer generator interface
|
||||
App\Service\CustomerHandlerInterface: "@App\\Service\\CustomerHandler\\ResqCustomerHandler"
|
||||
|
||||
# rider assignment
|
||||
App\Service\RiderAssignmentHandler\ResqRiderAssignmentHandler: ~
|
||||
|
||||
# rider assignment interface
|
||||
App\Service\RiderAssignmentHandlerInterface: "@App\\Service\\RiderAssignmentHandler\\ResqRiderAssignmentHandler"
|
||||
|
||||
# rider API service
|
||||
App\Service\RiderAPIHandler\ResqRiderAPIHandler:
|
||||
arguments:
|
||||
$country_code: "%env(COUNTRY_CODE)%"
|
||||
|
||||
App\Service\RiderAPIHandlerInterface: "@App\\Service\\RiderAPIHandler\\ResqRiderAPIHandler"
|
||||
|
||||
# map manager
|
||||
#App\Service\GISManager\Bing: ~
|
||||
App\Service\GISManager\OpenStreet: ~
|
||||
#App\Service\GISManager\Google: ~
|
||||
|
||||
#App\Service\GISManagerInterface: "@App\\Service\\GISManager\\Bing"
|
||||
App\Service\GISManagerInterface: "@App\\Service\\GISManager\\OpenStreet"
|
||||
#App\Service\GISManagerInterface: "@App\\Service\\GISManager\\Google"
|
||||
|
||||
App\EventListener\JobOrderActiveCacheListener:
|
||||
arguments:
|
||||
$jo_cache: "@App\\Service\\JobOrderCache"
|
||||
$mqtt: "@App\\Service\\MQTTClient"
|
||||
tags:
|
||||
- name: 'doctrine.orm.entity_listener'
|
||||
event: 'postUpdate'
|
||||
entity: 'App\Entity\JobOrder'
|
||||
- name: 'doctrine.orm.entity_listener'
|
||||
event: 'postRemove'
|
||||
entity: 'App\Entity\JobOrder'
|
||||
- name: 'doctrine.orm.entity_listener'
|
||||
event: 'postPersist'
|
||||
entity: 'App\Entity\JobOrder'
|
||||
|
||||
App\Service\JobOrderCache:
|
||||
arguments:
|
||||
$redis_prov: "@App\\Service\\RedisClientProvider"
|
||||
$active_jo_key: "%env(LOCATION_JO_ACTIVE_KEY)%"
|
||||
|
||||
App\Service\RiderCache:
|
||||
arguments:
|
||||
$redis_prov: "@App\\Service\\RedisClientProvider"
|
||||
$loc_key: "%env(LOCATION_RIDER_ACTIVE_KEY)%"
|
||||
$status_key: "%env(STATUS_RIDER_KEY)%"
|
||||
|
||||
# inventory manager
|
||||
App\Service\InventoryManager:
|
||||
arguments:
|
||||
$api_url: "%env(INVENTORY_API_URL)%"
|
||||
$api_ocp_key: "%env(INVENTORY_API_OCP)%"
|
||||
$api_auth_prefix: "%env(INVENTORY_API_AUTH_TOKEN_PREFIX)%"
|
||||
$api_auth_token: "%env(INVENTORY_API_AUTH_TOKEN)%"
|
||||
|
||||
# API logging
|
||||
App\EventSubscriber\LogSubscriber:
|
||||
arguments:
|
||||
$api_log_flag: "%env(API_LOGGING)%"
|
||||
55
src/Command/ConfigureResqCommand.php
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
<?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 Symfony\Component\Filesystem\Exception\IOExceptionInterface;
|
||||
use Symfony\Component\Filesystem\Filesystem;
|
||||
|
||||
class ConfigureResqCommand extends Command
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
protected function configure()
|
||||
{
|
||||
$this->setName('resq:configure')
|
||||
->setDescription('Copies the configuration files, depending on environment.')
|
||||
->setHelp('Copies the configuration files, depending on environment.')
|
||||
->addArgument('dir_name', InputArgument::REQUIRED, 'Name of source subdirectory.');
|
||||
}
|
||||
|
||||
protected function execute(InputInterface $input, OutputInterface $output)
|
||||
{
|
||||
$dir_name = $input->getArgument('dir_name');
|
||||
|
||||
$filesystem = new Filesystem();
|
||||
$current_dir = getcwd();
|
||||
|
||||
$source_dir = $current_dir . '/resq_settings/' . $dir_name . '/';
|
||||
$config_dir = $current_dir . '/config/';
|
||||
$translations_dir = $current_dir . '/translations/';
|
||||
|
||||
// copy services.yaml file
|
||||
error_log('Copying services.yaml file...');
|
||||
$filesystem->copy($source_dir . 'services.yaml', $config_dir . 'services.yaml', true);
|
||||
|
||||
// copy menu.yaml file
|
||||
error_log('Copying menu.yaml file...');
|
||||
$filesystem->copy($source_dir . 'menu.yaml', $config_dir . 'menu.yaml', true);
|
||||
|
||||
// copy messages.en.yaml file
|
||||
error_log('Copying messages.en.yaml file...');
|
||||
$filesystem->copy($source_dir . 'messages.en.yaml', $translations_dir . 'messages.en.yaml', true);
|
||||
|
||||
error_log('Done copying files.');
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,54 +0,0 @@
|
|||
<?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\WarrantySerialQueue;
|
||||
|
||||
class CountTotalPendingWarrantySerialFilesCommand extends Command
|
||||
{
|
||||
protected $em;
|
||||
|
||||
public function __construct(EntityManagerInterface $em)
|
||||
{
|
||||
$this->em = $em;
|
||||
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
protected function configure()
|
||||
{
|
||||
$this->setName('warrantyserial:count')
|
||||
->setDescription('Count number of pending warranty serial files.')
|
||||
->setHelp('Count number of pending warranty serial files.');
|
||||
}
|
||||
|
||||
protected function execute(InputInterface $input, OutputInterface $output)
|
||||
{
|
||||
$em = $this->em;
|
||||
|
||||
$status = 'pending';
|
||||
|
||||
$db = $em->getConnection();
|
||||
|
||||
$ws_query_sql = 'SELECT COUNT(*) AS total FROM warranty_serial_queue
|
||||
WHERE status = :status';
|
||||
|
||||
$ws_query_stmt = $db->prepare($ws_query_sql);
|
||||
$ws_query_stmt->bindValue('status', $status);
|
||||
|
||||
$ws_results = $ws_query_stmt->executeQuery();
|
||||
|
||||
$results = $ws_results->fetchAssociative();
|
||||
|
||||
$output->write($results['total']);
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
|
@ -216,8 +216,7 @@ class CreateCustomerFromWarrantyCommand extends Command
|
|||
$new_cust = new Customer();
|
||||
$new_cust->setFirstName($w_first_name)
|
||||
->setLastName($w_last_name)
|
||||
->setPhoneMobile($w_mobile_num)
|
||||
->setCreateSource('CMB_CreateCustomerFromWarranty');
|
||||
->setPhoneMobile($w_mobile_num);
|
||||
|
||||
$this->em->persist($new_cust);
|
||||
|
||||
|
|
|
|||
173
src/Command/CreateJOTestDataCommand.php
Normal file
|
|
@ -0,0 +1,173 @@
|
|||
<?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 CrEOF\Spatial\PHP\Types\Geometry\Point;
|
||||
|
||||
use DateTime;
|
||||
use DateInterval;
|
||||
|
||||
use App\Entity\JobOrder;
|
||||
use App\Entity\Rider;
|
||||
use App\Entity\CustomerVehicle;
|
||||
use App\Entity\Invoice;
|
||||
use App\Entity\InvoiceItem;
|
||||
use App\Entity\Battery;
|
||||
|
||||
use App\Ramcar\CMBServiceType;
|
||||
use App\Ramcar\TransactionOrigin;
|
||||
use App\Ramcar\WarrantyClass;
|
||||
use App\Ramcar\ModeOfPayment;
|
||||
use App\Ramcar\JOStatus;
|
||||
use App\Ramcar\InvoiceStatus;
|
||||
|
||||
class CreateJOTestDataCommand extends Command
|
||||
{
|
||||
protected $em;
|
||||
|
||||
public function __construct(EntityManagerInterface $em)
|
||||
{
|
||||
$this->em = $em;
|
||||
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
protected function configure()
|
||||
{
|
||||
$this->setName('joborder:create_testdata')
|
||||
->setDescription('Create JO test data, given a rider id.')
|
||||
->setHelp('Create JO test data, given a rider id.')
|
||||
->addArgument('rider_id', InputArgument::REQUIRED, 'Rider id.');
|
||||
}
|
||||
|
||||
protected function execute(InputInterface $input, OutputInterface $output)
|
||||
{
|
||||
$rider_id = $input->getArgument('rider_id');
|
||||
|
||||
$rider = $this->em->getRepository(Rider::class)->find($rider_id);
|
||||
|
||||
// get customer vehicles where plate number is not null
|
||||
$cv_query = $this->em->createQuery('SELECT cv FROM App\Entity\CustomerVehicle cv WHERE cv.plate_number is not null');
|
||||
$cv_results = $cv_query->getResult();
|
||||
|
||||
// get the first customer vehicle
|
||||
$cv = current($cv_results);
|
||||
|
||||
// get batteries
|
||||
$battery_results = $this->em->getRepository(Battery::class)->findAll();
|
||||
|
||||
// get the first battery
|
||||
$battery = current($battery_results);
|
||||
|
||||
error_log($cv->getPlateNumber());
|
||||
error_log($battery->getID());
|
||||
|
||||
if (empty($rider))
|
||||
{
|
||||
error_log('Rider not found.');
|
||||
}
|
||||
else
|
||||
{
|
||||
// get current date
|
||||
$current_date = new DateTime();
|
||||
|
||||
// for this month JO
|
||||
$current_year = $current_date->format('Y');
|
||||
$current_month = $current_date->format('M');
|
||||
|
||||
// for last month JO
|
||||
$date_interval = new DateInterval('P1M');
|
||||
$last_month_date = $current_date->sub($date_interval);
|
||||
|
||||
$last_month_year = $last_month_date->format('Y');
|
||||
$last_month_month = $last_month_date->format('M');
|
||||
|
||||
$time_schedule = $current_date->format('h:i A');
|
||||
|
||||
$this->createJobOrders($rider, $cv, $battery, $last_month_year, $last_month_month, $time_schedule);
|
||||
$this->createJobOrders($rider, $cv, $battery, $current_year, $current_month, $time_schedule);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
protected function createJobOrders(Rider $rider, CustomerVehicle $cv, Battery $battery, $year, $month, $time)
|
||||
{
|
||||
// insert 15 JOs for last month
|
||||
for ($i = 1; $i <= 15; $i++)
|
||||
{
|
||||
$jo = new JobOrder();
|
||||
|
||||
// set customer data
|
||||
$jo->setCustomerVehicle($cv);
|
||||
$jo->setCustomer($cv->getCustomer());
|
||||
|
||||
// set hub and rider data
|
||||
$jo->setRider($rider);
|
||||
$jo->setHub($rider->getHub());
|
||||
|
||||
// set JO details
|
||||
$point = new Point(121.0223, 14.6091);
|
||||
$s_type = CMBServiceType::BATTERY_REPLACEMENT_NEW;
|
||||
$source = TransactionOrigin::CALL;
|
||||
$advance_order = true;
|
||||
$warranty_class = WarrantyClass::WTY_PRIVATE;
|
||||
$status = JOStatus::FULFILLED;
|
||||
$delivery_address = '#1234 Moogle Lane';
|
||||
$mode_of_payment = ModeOfPayment::CASH;
|
||||
|
||||
// set invoice details
|
||||
$invoice = new Invoice();
|
||||
$invoice_item = new InvoiceItem();
|
||||
|
||||
// set invoice item details
|
||||
$invoice_item->setBattery($battery)
|
||||
->setTitle($battery->getModel()->getName() . ' ' . $battery->getSize()->getName())
|
||||
->setQuantity(1)
|
||||
->setPrice($battery->getSellingPrice())
|
||||
->setInvoice($invoice);
|
||||
|
||||
$invoice->addItem($invoice_item);
|
||||
|
||||
$this->em->persist($invoice_item);
|
||||
|
||||
// set invoice details
|
||||
$invoice->setTotalPrice($battery->getSellingPrice())
|
||||
->setStatus(InvoiceStatus::DRAFT)
|
||||
->setVATExclusivePrice($battery->getSellingPrice())
|
||||
->setDiscount(0.0)
|
||||
->setTradeIn(0.0)
|
||||
->setVAT(0.00);
|
||||
|
||||
$this->em->persist($invoice);
|
||||
|
||||
$jo->setInvoice($invoice);
|
||||
|
||||
// for last month
|
||||
$date_schedule_date = $i . ' ' . $month . ' ' . $year . ' ' . $time;
|
||||
error_log('Adding JO with date schedule ' . $date_schedule_date);
|
||||
$date_schedule = DateTime::createFromFormat("d M Y h:i A", $date_schedule_date);
|
||||
|
||||
$jo->setDateSchedule($date_schedule)
|
||||
->setCoordinates($point)
|
||||
->setAdvanceOrder($advance_order)
|
||||
->setServiceType($s_type)
|
||||
->setWarrantyClass($warranty_class)
|
||||
->setSource($source)
|
||||
->setStatus($status)
|
||||
->setDeliveryAddress($delivery_address);
|
||||
|
||||
$this->em->persist($jo);
|
||||
}
|
||||
|
||||
$this->em->flush();
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -1,92 +0,0 @@
|
|||
<?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\Input\InputArgument;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
|
||||
use App\Entity\ApiUser as APIUser;
|
||||
use Catalyst\ApiBundle\Entity\Role as APIRole;
|
||||
|
||||
use App\Entity\Rider;
|
||||
|
||||
use DateTime;
|
||||
|
||||
class CreateRiderAPIUserCommand extends Command
|
||||
{
|
||||
protected $em;
|
||||
|
||||
public function __construct(EntityManagerInterface $em)
|
||||
{
|
||||
$this->em = $em;
|
||||
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
protected function configure()
|
||||
{
|
||||
$this->setName('api:user-create-for-rider')
|
||||
->setDescription('Create API users for existing riders.')
|
||||
->setHelp('Creates API users for existing riders.')
|
||||
->addArgument('role_id', InputArgument::REQUIRED, 'Role ID for api_user.');
|
||||
}
|
||||
|
||||
protected function execute(InputInterface $input, OutputInterface $output)
|
||||
{
|
||||
error_log('Creating api users...');
|
||||
// get all existing riders
|
||||
$riders = $this->em->getRepository(Rider::class)->findAll();
|
||||
|
||||
// get role for rider api user
|
||||
$role_id = $input->getArgument('role_id');
|
||||
$role = $this->em->getRepository(APIRole::class)->find($role_id);
|
||||
if ($role == null)
|
||||
{
|
||||
error_log('Cannot find role with id ' . $role_id);
|
||||
return 0;
|
||||
}
|
||||
|
||||
foreach ($riders as $rider)
|
||||
{
|
||||
// skip riders who already have users
|
||||
if ($rider->getAPIUser() != null)
|
||||
continue;
|
||||
|
||||
// create api user for each rider
|
||||
// no need to generate the keys.
|
||||
// Secret and API keys are generated in constructor
|
||||
$api_user = new APIUser();
|
||||
|
||||
// set enabled to true
|
||||
$api_user->setEnabled(true);
|
||||
|
||||
// set name to rider's last name + first name
|
||||
$rider_name = $rider->getFirstName() . ' ' . $rider->getLastName();
|
||||
$api_user->setName($rider_name);
|
||||
|
||||
// set rider to api_user
|
||||
$api_user->setRider($rider);
|
||||
|
||||
// set meta
|
||||
$meta = ['rider_id' => $rider->getID()];
|
||||
$api_user->setMetaData($meta);
|
||||
|
||||
// set role
|
||||
$api_user->addRole($role);
|
||||
|
||||
// set rider's api user
|
||||
$rider->setAPIUser($api_user);
|
||||
|
||||
$this->em->persist($api_user);
|
||||
}
|
||||
|
||||
$this->em->flush();
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,529 +0,0 @@
|
|||
<?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\JobOrder;
|
||||
use App\Entity\JOEvent;
|
||||
use App\Entity\User;
|
||||
use App\Entity\Warranty;
|
||||
use App\Entity\SAPBattery;
|
||||
|
||||
use App\Ramcar\JOStatus;
|
||||
use App\Ramcar\JOEventType;
|
||||
use App\Ramcar\DeliveryStatus;
|
||||
use App\Ramcar\WarrantyClass;
|
||||
use App\Ramcar\ServiceType;
|
||||
use App\Ramcar\WarrantySource;
|
||||
use App\Ramcar\WarrantyStatus;
|
||||
|
||||
use DateTime;
|
||||
use DateInterval;
|
||||
|
||||
class FulfillOpenJobOrderCommand extends Command
|
||||
{
|
||||
const DEFAULT_SAP_WARRANTY = 12;
|
||||
const JO_BATCH_CTR = 200;
|
||||
|
||||
protected $em;
|
||||
protected $batt_hash;
|
||||
protected $sap_batt_hash;
|
||||
|
||||
public function __construct(EntityManagerInterface $em)
|
||||
{
|
||||
$this->em = $em;
|
||||
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
protected function configure()
|
||||
{
|
||||
$this->setName('joborder:fulfillopenjosnosms')
|
||||
->setDescription('Fulfill open job orders without sending an SMS message.')
|
||||
->setHelp('Mark open job orders as fulfilled and should not send a SMS message. Date format: YYYY-MM-DD')
|
||||
->addArgument('end_date', InputArgument::REQUIRED, 'End date. Format: YYYY-MM-DD');
|
||||
}
|
||||
|
||||
protected function execute(InputInterface $input, OutputInterface $output)
|
||||
{
|
||||
// load batteries into hash
|
||||
$this->populateBatteryIndex();
|
||||
|
||||
// load sap batteries into hash
|
||||
$this->populateSAPBatteryIndex();
|
||||
|
||||
// get the input date
|
||||
$str_date_end = $input->getArgument('end_date');
|
||||
|
||||
// append the 23:59:59 to end date
|
||||
$str_date_end = $str_date_end . ' ' . '23:59:59';
|
||||
|
||||
// starting time to count is date schedule
|
||||
$date_end = new DateTime($str_date_end);
|
||||
|
||||
// get current date and convert to string
|
||||
$current_date = new DateTime();
|
||||
$str_current_date = $current_date->format('Y-m-d H:i:s');
|
||||
|
||||
// find all open job orders starting from input date and before
|
||||
// need to get customer id, customer vehicle id, service type, warranty class
|
||||
$conn = $this->em->getConnection();
|
||||
|
||||
$jo_sql = 'SELECT jo.id AS jo_id, c.id AS c_id, cv.id AS cv_id,
|
||||
jo.service_type, jo.warranty_class, jo.rider_id, jo.date_schedule
|
||||
FROM job_order jo, customer c, customer_vehicle cv
|
||||
WHERE jo.customer_id = c.id AND jo.cvehicle_id = cv.id
|
||||
AND jo.status IN (\'pending\', \'rider_assign\', \'assigned\', \'in_transit\', \'in_progress\')
|
||||
AND jo.date_schedule <= :date_end';
|
||||
$stmt = $conn->prepare($jo_sql);
|
||||
$stmt->execute([
|
||||
'date_end' => $str_date_end]);
|
||||
|
||||
$jo_results = $stmt->fetchAll();
|
||||
|
||||
error_log('JOs found ' . count($jo_results));
|
||||
|
||||
$total_jos = count($jo_results);
|
||||
|
||||
$jo_ctr = 0;
|
||||
$update_jo_ctr = 0;
|
||||
$update_wheres = [];
|
||||
$w_data = [];
|
||||
$jo_evt_data = [];
|
||||
|
||||
foreach ($jo_results as $jo_row)
|
||||
{
|
||||
// get the data first
|
||||
$jo_id = $jo_row['jo_id'];
|
||||
$cust_id = $jo_row['c_id'];
|
||||
$cv_id = $jo_row['cv_id'];
|
||||
$service_type = $jo_row['service_type'];
|
||||
$warranty_class = $jo_row['warranty_class'];
|
||||
$rider_id = $jo_row['rider_id'];
|
||||
$str_date_schedule = $jo_row['date_schedule'];
|
||||
|
||||
$jo_ctr++;
|
||||
|
||||
// fulfill JO
|
||||
$this->fulfillJO($conn, $jo_id, $update_jo_ctr, $update_wheres, $jo_ctr, $total_jos);
|
||||
|
||||
// create JO event
|
||||
$jo_evt_data[] = $this->createJOEvent($conn, $jo_id, $str_current_date, $rider_id);
|
||||
|
||||
// error_log($jo_ctr . ' Processing JO ' . $jo_id);
|
||||
|
||||
// check service type
|
||||
if ($service_type == ServiceType::BATTERY_REPLACEMENT_NEW)
|
||||
{
|
||||
// new battery so we need to create warranty so we need to get battery id from invoice
|
||||
$batt_id = $this->getBatteryInformation($conn, $jo_id);
|
||||
|
||||
if (($batt_id != null) && (isset($this->batt_hash[$batt_id])))
|
||||
$w_data[] = $this->createWarrantyForJO($conn, $current_date, $str_date_schedule, $cust_id, $cv_id, $warranty_class, $batt_id);
|
||||
}
|
||||
}
|
||||
|
||||
// load data file for jo event
|
||||
$this->createLoadDataFileForJOEvent($jo_evt_data);
|
||||
|
||||
// load data file for warranty
|
||||
$this->createLoadDataFileForWarranty($w_data);
|
||||
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
protected function fulfillJO($conn, $jo_id, &$update_jo_ctr, &$update_wheres, $jo_ctr, $total_jos)
|
||||
{
|
||||
$update_wheres[] = 'id = ' . $jo_id;
|
||||
|
||||
// update db when we reach max # of JOs or when we reach total number of jos
|
||||
if (($update_jo_ctr == self::JO_BATCH_CTR) ||
|
||||
($jo_ctr == $total_jos))
|
||||
{
|
||||
error_log('Processing ' . $update_jo_ctr . ' job orders...');
|
||||
|
||||
$update_where_string = implode(' OR ' , $update_wheres);
|
||||
|
||||
// update job order
|
||||
$fulfill_jo_sql = 'UPDATE job_order SET status = :fulfilled, delivery_status = :del_fulfilled WHERE ' . $update_where_string;
|
||||
|
||||
// error_log($fulfill_jo_sql);
|
||||
|
||||
$fulfill_jo_stmt = $conn->prepare($fulfill_jo_sql);
|
||||
$fulfill_jo_stmt->execute([
|
||||
'fulfilled' => JOStatus::FULFILLED,
|
||||
'del_fulfilled' => DeliveryStatus::FULFILLED,
|
||||
]);
|
||||
|
||||
// reset the wheres string
|
||||
$update_wheres = [];
|
||||
|
||||
// reset the update jo counter
|
||||
$update_jo_ctr = 0;
|
||||
}
|
||||
else
|
||||
$update_jo_ctr++;
|
||||
}
|
||||
|
||||
protected function createJOEvent($conn, $jo_id, $str_current_date, $rider_id)
|
||||
{
|
||||
// create jo event
|
||||
// set user to admin that has id of 1
|
||||
$user_id = 1;
|
||||
|
||||
$r_id = '\N';
|
||||
// check if rider is null
|
||||
if ($rider_id != NULL)
|
||||
$r_id = $rider_id;
|
||||
|
||||
// create array for the jo event
|
||||
$data = [
|
||||
$user_id,
|
||||
$jo_id,
|
||||
$str_current_date,
|
||||
$str_current_date,
|
||||
JOEventType::FULFILL,
|
||||
$r_id,
|
||||
];
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
protected function getBatteryInformation($conn, $jo_id)
|
||||
{
|
||||
// break this down into two sql calls
|
||||
// get the invoice for job order
|
||||
$i_sql = 'SELECT i.id FROM invoice i
|
||||
WHERE i.job_order_id = :jo_id';
|
||||
$i_stmt = $conn->prepare($i_sql);
|
||||
$i_stmt->execute([
|
||||
'jo_id' => $jo_id,
|
||||
]);
|
||||
|
||||
$i_result = $i_stmt->fetch();
|
||||
|
||||
// check if invoice exists
|
||||
if (empty($i_result))
|
||||
return null;
|
||||
|
||||
$invoice_id = $i_result['id'];
|
||||
|
||||
// get the battery id from invoice item
|
||||
$ii_sql = 'SELECT ii.battery_id FROM invoice_item ii
|
||||
WHERE ii.invoice_id = :invoice_id
|
||||
AND ii.battery_id IS NOT NULL';
|
||||
$ii_stmt = $conn->prepare($ii_sql);
|
||||
$ii_stmt->execute([
|
||||
'invoice_id' => $invoice_id,
|
||||
]);
|
||||
|
||||
$ii_result = $ii_stmt->fetch();
|
||||
|
||||
// checking for result
|
||||
if (empty($ii_result))
|
||||
return null;
|
||||
|
||||
$batt_id = $ii_result['battery_id'];
|
||||
|
||||
return $batt_id;
|
||||
}
|
||||
|
||||
protected function createWarrantyForJO($conn, $current_date, $str_date_schedule, $cust_id, $cv_id, $warranty_class, $batt_id)
|
||||
{
|
||||
// convert current date to string since we use this for date_create
|
||||
$str_current_date = $current_date->format('Y-m-d H:i:s');
|
||||
|
||||
// get the warranty period based on warranty class from battery hash
|
||||
$warranty_period = $this->getWarrantyPeriod($batt_id, $warranty_class);
|
||||
|
||||
// compute date expiry.
|
||||
// convert to DateTime date schedule
|
||||
$date_schedule = DateTime::createFromFormat('Y-m-d H:i:s', $str_date_schedule);
|
||||
$date_expire = $this->computeDateExpire($date_schedule, $warranty_period);
|
||||
|
||||
// convert to string the expiry date
|
||||
$str_date_expire = $date_expire->format('Y-m-d');
|
||||
|
||||
// convert date schedule to just date
|
||||
$str_date_purchase = $date_schedule->format('Y-m-d');
|
||||
|
||||
// check if date_expire is after or equal to the current date
|
||||
// if so, set warranty status to active
|
||||
$warranty_status = WarrantyStatus::EXPIRED;
|
||||
if ($date_expire >= $current_date)
|
||||
$warranty_status = WarrantyStatus::ACTIVE;
|
||||
|
||||
// get customer
|
||||
$cust_info = $this->getCustomerInfo($conn, $cust_id);
|
||||
|
||||
// get customer vehicle
|
||||
$cv_info = $this->getCustomerVehicleInfo($conn, $cv_id);
|
||||
|
||||
// customer info
|
||||
$first_name = addslashes($cust_info['first_name']);
|
||||
$last_name = addslashes($cust_info['last_name']);
|
||||
$mobile = addslashes($cust_info['mobile']);
|
||||
|
||||
// customer vehicle info
|
||||
$plate_number = $cv_info['plate_number'];
|
||||
$vehicle_id = $cv_info['vehicle_id'];
|
||||
|
||||
// battery info
|
||||
$model_id = $this->batt_hash[$batt_id]['model_id'];
|
||||
$size_id = $this->batt_hash[$batt_id]['size_id'];
|
||||
// need to confirm that sap_code exists in sap_battery
|
||||
if (isset($this->sap_batt_hash['sap_code']))
|
||||
$sap_code = $this->batt_hash[$batt_id]['sap_code'];
|
||||
else
|
||||
$sap_code = '\N';
|
||||
|
||||
// set flag_activated to false since that's the default in Warranty's constructor
|
||||
$flag_activated = false;
|
||||
|
||||
// create array for the infile
|
||||
$warranty_data = [
|
||||
$model_id,
|
||||
$size_id,
|
||||
$sap_code,
|
||||
$warranty_class,
|
||||
$plate_number,
|
||||
$warranty_status,
|
||||
$str_current_date,
|
||||
$str_date_purchase,
|
||||
$str_date_expire,
|
||||
$first_name,
|
||||
$last_name,
|
||||
$mobile,
|
||||
$flag_activated,
|
||||
$vehicle_id,
|
||||
$cust_id,
|
||||
WarrantySource::ADMIN_PANEL,
|
||||
];
|
||||
|
||||
return $warranty_data;
|
||||
}
|
||||
|
||||
protected function createLoadDataFileForWarranty($warranty_data)
|
||||
{
|
||||
// cache directory
|
||||
$cache_dir = __DIR__ . '/../../var/cache';
|
||||
|
||||
$file = $cache_dir . '/warranty_data.tab';
|
||||
error_log('opening file for warranty - ' . $file);
|
||||
|
||||
$fp = fopen($file, 'w');
|
||||
if ($fp === false)
|
||||
{
|
||||
error_log('could not open file for load data infile - ' . $file);
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach ($warranty_data as $key => $data)
|
||||
{
|
||||
$line = implode('|', $data) . "\r\n";
|
||||
fwrite($fp, $line);
|
||||
}
|
||||
}
|
||||
|
||||
fclose($fp);
|
||||
|
||||
error_log('Loading warranty data');
|
||||
$conn = $this->em->getConnection();
|
||||
$stmt = $conn->prepare('LOAD DATA LOCAL INFILE \'' . $file . '\' INTO TABLE warranty FIELDS TERMINATED BY \'|\' LINES TERMINATED BY \'\\r\\n\' (bty_model_id,bty_size_id,sap_bty_id,warranty_class,plate_number,status,date_create,date_purchase,date_expire,first_name,last_name,mobile_number,flag_activated,vehicle_id,customer_id, create_source)');
|
||||
$result = $stmt->execute();
|
||||
if (!$result)
|
||||
error_log('Failed loading data.');
|
||||
|
||||
// TODO: delete file?
|
||||
}
|
||||
|
||||
protected function createLoadDataFileForJOEvent($jo_evt_data)
|
||||
{
|
||||
// cache directory
|
||||
$cache_dir = __DIR__ . '/../../var/cache';
|
||||
|
||||
$file = $cache_dir . '/jo_event_data.tab';
|
||||
error_log('opening file for jo_event - ' . $file);
|
||||
|
||||
$fp = fopen($file, 'w');
|
||||
if ($fp === false)
|
||||
{
|
||||
error_log('could not open file for load data infile - ' . $file);
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach ($jo_evt_data as $key => $data)
|
||||
{
|
||||
$line = implode('|', $data) . "\r\n";
|
||||
fwrite($fp, $line);
|
||||
}
|
||||
}
|
||||
|
||||
fclose($fp);
|
||||
|
||||
error_log('Loading jo event data');
|
||||
$conn = $this->em->getConnection();
|
||||
$stmt = $conn->prepare('LOAD DATA LOCAL INFILE \'' . $file . '\' INTO TABLE jo_event FIELDS TERMINATED BY \'|\' LINES TERMINATED BY \'\\r\\n\' (create_user_id, job_order_id, date_create, date_happen, type_id, rider_id)');
|
||||
$result = $stmt->execute();
|
||||
if (!$result)
|
||||
error_log('Failed loading data.');
|
||||
|
||||
// TODO: delete file?
|
||||
}
|
||||
|
||||
protected function getCustomerInfo($conn, $id)
|
||||
{
|
||||
$cust_info = [];
|
||||
|
||||
$cust_sql = 'SELECT c.first_name, c.last_name, c.phone_mobile
|
||||
FROM customer c
|
||||
WHERE c.id = :id';
|
||||
$cust_stmt = $conn->prepare($cust_sql);
|
||||
$cust_stmt->execute([
|
||||
'id' => $id,
|
||||
]);
|
||||
|
||||
$cust_result = $cust_stmt->fetch();
|
||||
|
||||
$cust_info = [
|
||||
'first_name' => $cust_result['first_name'],
|
||||
'last_name' => $cust_result['last_name'],
|
||||
'mobile' => $cust_result['phone_mobile'],
|
||||
];
|
||||
|
||||
return $cust_info;
|
||||
}
|
||||
|
||||
protected function getCustomerVehicleInfo($conn, $id)
|
||||
{
|
||||
$cv_info = [];
|
||||
|
||||
$cv_sql = 'SELECT cv.plate_number, cv.vehicle_id
|
||||
FROM customer_vehicle cv
|
||||
WHERE cv.id = :id';
|
||||
$cv_stmt = $conn->prepare($cv_sql);
|
||||
$cv_stmt->execute([
|
||||
'id' => $id,
|
||||
]);
|
||||
|
||||
$cv_result = $cv_stmt->fetch();
|
||||
|
||||
$plate_number = $cv_result['plate_number'];
|
||||
|
||||
$clean_plate = $this->cleanPlateNumber($plate_number);
|
||||
|
||||
$cv_info = [
|
||||
'plate_number' => $clean_plate,
|
||||
'vehicle_id' => $cv_result['vehicle_id'],
|
||||
];
|
||||
|
||||
return $cv_info;
|
||||
}
|
||||
|
||||
protected function getWarrantyPeriod($batt_id, $warranty_class)
|
||||
{
|
||||
// set default period to that of private
|
||||
$period = $this->batt_hash[$batt_id]['warr_private'];
|
||||
|
||||
if ($warranty_class == WarrantyClass::WTY_PRIVATE)
|
||||
{
|
||||
$period = $this->batt_hash[$batt_id]['warr_private'];
|
||||
return $period;
|
||||
}
|
||||
if ($warranty_class == WarrantyClass::WTY_COMMERCIAL)
|
||||
{
|
||||
$period = $this->batt_hash[$batt_id]['warr_commercial'];
|
||||
return $period;
|
||||
}
|
||||
if ($warranty_class == WarrantyClass::WTY_TNV)
|
||||
{
|
||||
$period = $this->batt_hash[$batt_id]['warr_tnv'];
|
||||
return $period;
|
||||
}
|
||||
|
||||
return $period;
|
||||
}
|
||||
|
||||
protected function computeDateExpire($purchase_date, $warranty_period)
|
||||
{
|
||||
$expire_date = clone $purchase_date;
|
||||
$expire_date->add(new DateInterval('P'.$warranty_period.'M'));
|
||||
return $expire_date;
|
||||
}
|
||||
|
||||
protected function cleanPlateNumber($plate)
|
||||
{
|
||||
// trim plate number down to 20 characters
|
||||
$trim_plate = str_replace(' ','', $plate);
|
||||
|
||||
// truncate plate number down to 20 (max length)
|
||||
$trunc_plate = substr($trim_plate, 0, 20);
|
||||
|
||||
return strtoupper($trunc_plate);
|
||||
}
|
||||
|
||||
protected function populateBatteryIndex()
|
||||
{
|
||||
$conn = $this->em->getConnection();
|
||||
|
||||
// get all the batteries
|
||||
$sql = 'SELECT b.id, b.model_id, b.size_id, b.sap_code, b.warr_private, b.warr_commercial, b.warr_tnv
|
||||
FROM battery b';
|
||||
$stmt = $conn->prepare($sql);
|
||||
$stmt->execute();
|
||||
|
||||
$results = $stmt->fetchAll();
|
||||
|
||||
// go through the rows
|
||||
foreach ($results as $row)
|
||||
{
|
||||
// breaking this down for clarity
|
||||
$battery_id = $row['id'];
|
||||
$model_id = $row['model_id'];
|
||||
$size_id = $row['size_id'];
|
||||
$sap_code = trim($row['sap_code']);
|
||||
$warr_private = $row['warr_private'];
|
||||
$warr_commercial = $row['warr_commercial'];
|
||||
$warr_tnv = $row['warr_tnv'];
|
||||
|
||||
$this->batt_hash[$battery_id] = [
|
||||
'sap_code' => $sap_code,
|
||||
'model_id' => $model_id,
|
||||
'size_id' => $size_id,
|
||||
'warr_private' => $warr_private,
|
||||
'warr_commercial' => $warr_commercial,
|
||||
'warr_tnv' => $warr_tnv,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
protected function populateSAPBatteryIndex()
|
||||
{
|
||||
$conn = $this->em->getConnection();
|
||||
|
||||
// get all the sap batteries
|
||||
$sql = 'SELECT sap.id, sap.brand_id, sap.size_id FROM sap_battery sap';
|
||||
$stmt = $conn->prepare($sql);
|
||||
$stmt->execute();
|
||||
|
||||
$results = $stmt->fetchAll();
|
||||
|
||||
// go through the rows
|
||||
foreach ($results as $row)
|
||||
{
|
||||
// set warranty period to default warranty period for SAP batteries
|
||||
$this->sap_batt_hash[$row['id']] = [
|
||||
'sap_brand' => $row['brand_id'],
|
||||
'sap_size' => $row['size_id'],
|
||||
'warranty' => self::DEFAULT_SAP_WARRANTY,
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -43,7 +43,7 @@ class GenerateBatteryCompatibilityCommand extends Command
|
|||
$vehicles = $vm->getVehicles();
|
||||
foreach ($vehicles as $vehicle)
|
||||
{
|
||||
$batteries = $vehicle->getActiveBatteries();
|
||||
$batteries = $vehicle->getBatteries();
|
||||
$comp_batt = [];
|
||||
foreach ($batteries as $battery)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,140 +0,0 @@
|
|||
<?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\Input\InputArgument;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
|
||||
use App\Entity\Customer;
|
||||
use App\Entity\CustomerVehicle;
|
||||
use App\Entity\VehicleManufacturer;
|
||||
use App\Entity\Vehicle;
|
||||
|
||||
use DateTime;
|
||||
use PDO;
|
||||
|
||||
class GenerateCustomerSourceReportCommand extends Command
|
||||
{
|
||||
protected $em;
|
||||
|
||||
public function __construct(EntityManagerInterface $em)
|
||||
{
|
||||
$this->em = $em;
|
||||
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
protected function configure()
|
||||
{
|
||||
$this->setName('report:customer_source')
|
||||
->setDescription('Create customer source reports')
|
||||
->setHelp('Creates customer source reports.')
|
||||
->addArgument('year', InputArgument::REQUIRED, 'Year to process customer data')
|
||||
->addArgument('month', InputArgument::REQUIRED, 'Month to process customer data')
|
||||
->addArgument('csv_file', InputArgument::REQUIRED, 'Output CSV file');
|
||||
}
|
||||
|
||||
protected function execute(InputInterface $input, OutputInterface $output)
|
||||
{
|
||||
$em = $this->em;
|
||||
|
||||
// get year and month
|
||||
$year = $input->getArgument('year');
|
||||
$month = $input->getArgument('month');
|
||||
$csv_file = $input->getArgument('csv_file');
|
||||
|
||||
// get all mobile user customer id hash
|
||||
$resq_cust_ids = $this->getRESQCustomerIDs();
|
||||
|
||||
// TODO: error checking for file
|
||||
$fp = fopen($csv_file, 'w');
|
||||
|
||||
// pdo connection
|
||||
$db = $em->getConnection();
|
||||
|
||||
// get all customers
|
||||
$sql = 'select c.id, c.first_name, c.last_name, c.phone_mobile, c.phone_landline, c.phone_office, c.phone_fax, c.email, c.flag_mobile_app, vm.name, v.make, cv.model_year, cv.plate_number from customer c, customer_vehicle cv, vehicle v, vehicle_manufacturer vm where year(c.date_create) = :year and month(c.date_create) = :month and c.id = cv.customer_id and cv.vehicle_id = v.id and v.manufacturer_id = vm.id';
|
||||
$stmt = $db->prepare($sql);
|
||||
$stmt->execute([
|
||||
'month' => $month,
|
||||
'year' => $year,
|
||||
]);
|
||||
|
||||
// add header rows
|
||||
fputcsv($fp, [
|
||||
'Customer ID',
|
||||
'First Name',
|
||||
'Last Name',
|
||||
'Mobile Phone',
|
||||
'Landline',
|
||||
'Office Phone',
|
||||
'Fax',
|
||||
'Email Address',
|
||||
'Vehicle Manufacturer',
|
||||
'Vehicle Make',
|
||||
'Model Year',
|
||||
'Plate Number',
|
||||
'Source',
|
||||
]);
|
||||
|
||||
// go through rows
|
||||
while ($row = $stmt->fetch(PDO::FETCH_NUM))
|
||||
{
|
||||
// TODO: find customer source
|
||||
// NOTE: flag_mobile_app is 0 for some reason
|
||||
// customer source
|
||||
if (isset($resq_cust_ids[$row[0]]))
|
||||
$source = 'resq';
|
||||
else
|
||||
$source = 'crm / owr';
|
||||
|
||||
$data = [
|
||||
$row[0], // id
|
||||
$row[1], // first name
|
||||
$row[2], // last name
|
||||
$row[3], // phone - mobile
|
||||
$row[4], // phone - landline
|
||||
$row[5], // phone - office
|
||||
$row[6], // phone - fax
|
||||
$row[7], // email
|
||||
$row[9], // vehicle manufacturer
|
||||
$row[10], // vehicle make
|
||||
$row[11], // vehicle model
|
||||
$row[12], // plate number
|
||||
$source // customer source
|
||||
];
|
||||
|
||||
fputcsv($fp, $data);
|
||||
}
|
||||
|
||||
fclose($fp);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
protected function getRESQCustomerIDs()
|
||||
{
|
||||
// pdo connection
|
||||
$db = $this->em->getConnection();
|
||||
|
||||
// get all customer ids of all mobile sessions
|
||||
$sql = 'select distinct customer_id from mobile_session';
|
||||
$stmt = $db->prepare($sql);
|
||||
$stmt->execute();
|
||||
$res = $stmt->fetchAll();
|
||||
|
||||
$cust_ids = [];
|
||||
|
||||
foreach ($res as $cust)
|
||||
{
|
||||
$cust_ids[$cust['customer_id']] = $cust['customer_id'];
|
||||
}
|
||||
|
||||
return $cust_ids;
|
||||
}
|
||||
}
|
||||
|
|
@ -16,25 +16,20 @@ use App\Entity\JobOrder;
|
|||
use App\Entity\Warranty;
|
||||
use App\Entity\SAPBattery;
|
||||
|
||||
use App\Service\WarrantyAPILogger;
|
||||
|
||||
use App\Ramcar\ServiceType;
|
||||
use App\Ramcar\WarrantyStatus;
|
||||
use App\Ramcar\WarrantySource;
|
||||
|
||||
use DoctrineExtensions\Query\Mysql\DateFormat;
|
||||
|
||||
class GenerateWarrantyFromJobOrderCommand extends Command
|
||||
{
|
||||
protected $em;
|
||||
protected $logger;
|
||||
protected $sapbatt_hash;
|
||||
protected $warranties_hash;
|
||||
|
||||
public function __construct(EntityManagerInterface $em, WarrantyAPILogger $logger)
|
||||
public function __construct(EntityManagerInterface $em)
|
||||
{
|
||||
$this->em = $em;
|
||||
$this->logger = $logger;
|
||||
|
||||
$this->loadSAPBatteries();
|
||||
|
||||
|
|
@ -210,32 +205,11 @@ class GenerateWarrantyFromJobOrderCommand extends Command
|
|||
$values = '(' . $bty_model_id . ',' . $bty_size_id . ',NULL,\'' . $warranty_class . '\',\''
|
||||
. $cleaned_plate_number . '\',\'' . WarrantyStatus::ACTIVE . '\',\'' . $date_create . '\',\'' . $date_purchase
|
||||
. '\',\'' . $date_expire . '\',NULL,'
|
||||
. $sap_code . ',NULL,\'' . $first_name . '\',\'' . $last_name . '\',\'' . $mobile_number . '\',' . 0 . ',NULL,\''
|
||||
. WarrantySource::COMMAND .'\');';
|
||||
. $sap_code . ',NULL,\'' . $first_name . '\',\'' . $last_name . '\',\'' . $mobile_number . '\',' . 0 . ',NULL' . ');';
|
||||
|
||||
$sql_statement = 'INSERT INTO `warranty` (bty_model_id,bty_size_id,serial,warranty_class,plate_number,status,date_create,date_purchase,date_expire,date_claim,sap_bty_id,claim_id,first_name,last_name,mobile_number,flag_activated,warranty_privacy_policy,create_source) VALUES ' . $values . "\n";
|
||||
$sql_statement = 'INSERT INTO `warranty` (bty_model_id,bty_size_id,serial,warranty_class,plate_number,status,date_create,date_purchase,date_expire,date_claim,sap_bty_id,claim_id,first_name,last_name,mobile_number,flag_activated,warranty_privacy_policy) VALUES ' . $values . "\n";
|
||||
|
||||
echo $sql_statement;
|
||||
|
||||
$db = $this->em->getConnection();
|
||||
$stmt = $db->prepare($sql_statement);
|
||||
$stmt->execute();
|
||||
|
||||
// log warranty creation
|
||||
$log_data = [
|
||||
'battery_model_id' => $bty_model_id,
|
||||
'battery_size_id' => $bty_size_id,
|
||||
'warranty_class' => $warranty_class,
|
||||
'plate_number' => $cleaned_plate_number,
|
||||
'date_create' => $date_create,
|
||||
'date_purchase' => $date_purchase,
|
||||
'date_expire' => $date_expire,
|
||||
'sap_code' => $sap_code,
|
||||
'first_name' => $first_name,
|
||||
'last_name' => $last_name,
|
||||
'mobile_number' => $mobile_number,
|
||||
];
|
||||
$this->logger->logWarrantyInfo($log_data, '', 'internal', 'create', WarrantySource::COMMAND);
|
||||
|
||||
}
|
||||
else
|
||||
|
|
|
|||
|
|
@ -1,357 +0,0 @@
|
|||
<?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 DateTime;
|
||||
use Exception;
|
||||
|
||||
use App\Entity\Customer;
|
||||
use App\Entity\CustomerTag;
|
||||
|
||||
class ImportCarClubCustomerDataCommand extends Command
|
||||
{
|
||||
// field index in csv file
|
||||
const F_DPA = 0;
|
||||
const F_FIRST_NAME = 1;
|
||||
const F_LAST_NAME = 2;
|
||||
const F_CAR_CLUB = 3;
|
||||
const F_CONTACT_NUM = 4;
|
||||
|
||||
protected $em;
|
||||
protected $cust_tag_hash;
|
||||
|
||||
public function __construct(EntityManagerInterface $em)
|
||||
{
|
||||
$this->em = $em;
|
||||
$this->loadCustomerTags();
|
||||
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
protected function configure()
|
||||
{
|
||||
$this->setName('customer:createfromcarclub')
|
||||
->setDescription('Create customers from car club file.')
|
||||
->setHelp('Creates customers from car club file.')
|
||||
->addArgument('promo_tag', InputArgument::REQUIRED, 'Promo customer tag ID to use.')
|
||||
->addArgument('input_file', InputArgument::REQUIRED, 'Path to the output CSV file with the car club info.')
|
||||
->addArgument('output_file', InputArgument::REQUIRED, 'Output filename');
|
||||
}
|
||||
|
||||
protected function getValidContactNumbers($contact_number)
|
||||
{
|
||||
// check contact number if mobile or not
|
||||
// check for spaces, slash, and forward slash
|
||||
$contact_num_array = [];
|
||||
if (preg_match('/[\\\s\/]/', $contact_number))
|
||||
{
|
||||
$contact_num_array = preg_split('/[\\\s\/]/', $contact_number);
|
||||
}
|
||||
else
|
||||
{
|
||||
// only one mobile number
|
||||
$contact_num_array[] = $contact_number;
|
||||
}
|
||||
|
||||
// collet clean numbers
|
||||
$clean_nums = [];
|
||||
foreach ($contact_num_array as $contact_num)
|
||||
{
|
||||
$c_num = trim($contact_num);
|
||||
|
||||
// clean the numbers
|
||||
$cleaned_number = $this->normalizeContactNumber($c_num);
|
||||
|
||||
// not a blank, save it
|
||||
if ($cleaned_number != '')
|
||||
{
|
||||
$clean_nums[] = $cleaned_number;
|
||||
}
|
||||
}
|
||||
|
||||
return $clean_nums;
|
||||
}
|
||||
|
||||
protected function execute(InputInterface $input, OutputInterface $output)
|
||||
{
|
||||
$csv_file = $input->getArgument('input_file');
|
||||
$output_file = $input->getArgument('output_file');
|
||||
$promo_tag_id = $input->getArgument('promo_tag');
|
||||
|
||||
// fetch promo tag
|
||||
$promo_tag = $this->em->getRepository(CustomerTag::class)->find($promo_tag_id);
|
||||
if ($promo_tag == null)
|
||||
{
|
||||
throw new Exception('Could not find promo tag - ' . $promo_tag_id);
|
||||
}
|
||||
|
||||
// attempt to open file
|
||||
try
|
||||
{
|
||||
$fh = fopen($csv_file, "r");
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
throw new Exception('The file "' . $csv_file . '" could be opened.');
|
||||
}
|
||||
|
||||
$row_num = 1;
|
||||
$output_info = [];
|
||||
while (($fields = fgetcsv($fh)) !== false)
|
||||
{
|
||||
// ignore first row
|
||||
if ($row_num == 1)
|
||||
{
|
||||
$row_num++;
|
||||
continue;
|
||||
}
|
||||
|
||||
// process row
|
||||
$output_info[] = $this->processRow($fields, $promo_tag);
|
||||
|
||||
$row_num++;
|
||||
}
|
||||
|
||||
// write to output file
|
||||
$this->outputCustomerInfo($output_file, $output_info);
|
||||
|
||||
fclose($fh);
|
||||
return 0;
|
||||
}
|
||||
|
||||
protected function setOutputInfo($fields, $status, $reason, $cust_id)
|
||||
{
|
||||
$car_club = trim($fields[self::F_CAR_CLUB]);
|
||||
$fname = trim($fields[self::F_FIRST_NAME]);
|
||||
$lname = trim($fields[self::F_LAST_NAME]);
|
||||
$dpa = trim($fields[self::F_DPA]);
|
||||
$contact_number = trim($fields[SELF::F_CONTACT_NUM]);
|
||||
|
||||
return [
|
||||
$dpa,
|
||||
$fname,
|
||||
$lname,
|
||||
$car_club,
|
||||
$contact_number,
|
||||
$status,
|
||||
$reason,
|
||||
$cust_id
|
||||
];
|
||||
}
|
||||
|
||||
protected function createNewCustomer($fields, $contact_numbers, $cust_tag, $promo_tag)
|
||||
{
|
||||
$fname = trim($fields[self::F_FIRST_NAME]);
|
||||
$lname = trim($fields[self::F_LAST_NAME]);
|
||||
$dpa = trim($fields[self::F_DPA]);
|
||||
|
||||
if (count($contact_numbers) > 0)
|
||||
$clean_number = $contact_numbers[0];
|
||||
else
|
||||
$clean_number = '';
|
||||
|
||||
// check dpa
|
||||
$is_dpa = false;
|
||||
if (strtoupper($dpa) == 'YES')
|
||||
$is_dpa = true;
|
||||
|
||||
// create new customer
|
||||
$new_cust = new Customer();
|
||||
$new_cust->setFirstName($fname)
|
||||
->setLastName($lname)
|
||||
->setPhoneMobile($clean_number)
|
||||
->setDpaConsent($is_dpa)
|
||||
->setCreateSource('car_club_file')
|
||||
->addCustomerTag($cust_tag)
|
||||
->addCustomerTag($promo_tag);
|
||||
|
||||
$this->em->persist($new_cust);
|
||||
$this->em->flush();
|
||||
|
||||
return $new_cust;
|
||||
}
|
||||
|
||||
protected function processRow($fields, $promo_tag)
|
||||
{
|
||||
$contact_number = trim($fields[SELF::F_CONTACT_NUM]);
|
||||
$car_club = trim($fields[self::F_CAR_CLUB]);
|
||||
|
||||
// clean up contact number
|
||||
$valid_contact_numbers = $this->getValidContactNumbers($contact_number);
|
||||
|
||||
// check customer tag
|
||||
$cust_tag = $this->findCustomerTag($car_club);
|
||||
$cust_id = '';
|
||||
|
||||
// give me first customer that matches any of the numbers
|
||||
$customer = $this->findCustomerByNumbers($valid_contact_numbers);
|
||||
|
||||
// if no customer found, create one
|
||||
if ($customer == null)
|
||||
{
|
||||
error_log('Creating customer...');
|
||||
error_log('cust tag id ' . $cust_tag->getID());
|
||||
|
||||
// create new customer
|
||||
$new_cust = $this->createNewCustomer($fields, $valid_contact_numbers, $cust_tag, $promo_tag);
|
||||
|
||||
// get customer id of new customer here
|
||||
$cust_id = $new_cust->getID();
|
||||
|
||||
// add info to output array
|
||||
return $this->setOutputInfo($fields, 'CREATED', '', $cust_id);
|
||||
}
|
||||
|
||||
error_log('Updating customer...');
|
||||
// add customer tag to existing customer
|
||||
|
||||
$cust_id = $customer->getID();
|
||||
// need to check if customer tag already exists for customer
|
||||
$tag_exists = $customer->getCustomerTag($cust_tag->getID());
|
||||
if ($tag_exists == null)
|
||||
{
|
||||
$customer->addCustomerTag($cust_tag)
|
||||
->addCustomerTag($promo_tag);
|
||||
$this->em->flush();
|
||||
|
||||
// add info to output array
|
||||
return $this->setOutputInfo($fields, 'UPDATED', '', $cust_id);
|
||||
}
|
||||
|
||||
return $this->setOutputInfo($fields, 'NOT CREATED/UPDATED', 'Customer and tag already exist', $cust_id);
|
||||
}
|
||||
|
||||
protected function findCustomerByNumbers($numbers)
|
||||
{
|
||||
error_log(print_r($numbers, true));
|
||||
$customer = $this->em->getRepository(Customer::class)->findOneBy(['phone_mobile' => $numbers]);
|
||||
return $customer;
|
||||
}
|
||||
|
||||
protected function outputCustomerInfo($output_file, $entries)
|
||||
{
|
||||
try
|
||||
{
|
||||
$fh = fopen($output_file, "w");
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
throw new Exception('The file "' . $report_file . '" could be opened.');
|
||||
}
|
||||
|
||||
// write the headers
|
||||
fputcsv($fh, [
|
||||
'I have read and understood and agreed to the confidentiality of this form request',
|
||||
'First Name',
|
||||
'Last Name',
|
||||
'Car Club/Organization',
|
||||
'Contact Number',
|
||||
'Status',
|
||||
'Reason',
|
||||
'Customer ID',
|
||||
]);
|
||||
|
||||
foreach($entries as $row)
|
||||
{
|
||||
fputcsv($fh, $row);
|
||||
}
|
||||
|
||||
fclose($fh);
|
||||
}
|
||||
|
||||
protected function loadCustomerTags()
|
||||
{
|
||||
$this->cust_tag_hash = [];
|
||||
|
||||
$cust_tags = $this->em->getRepository(CustomerTag::class)->findAll();
|
||||
foreach ($cust_tags as $cust_tag)
|
||||
{
|
||||
$tag_id = $cust_tag->getID();
|
||||
$this->cust_tag_hash[$tag_id] = $cust_tag;
|
||||
}
|
||||
}
|
||||
|
||||
protected function normalizeClubName($name)
|
||||
{
|
||||
// uppercase the name
|
||||
$clean_name = trim(strtoupper($name));
|
||||
|
||||
// remove apostrophes
|
||||
$clean_name = str_replace("'", '', $clean_name);
|
||||
|
||||
// replace all special characters except ampersand (&) with whitespace
|
||||
$clean_name = trim(preg_replace('/[^A-Za-z0-9&]/', ' ', $clean_name));
|
||||
|
||||
// replace spaces with underscore (_)
|
||||
$clean_name = preg_replace('/\s+/', '_', $clean_name);
|
||||
|
||||
// prepend 'TAG_'
|
||||
$tag_name = 'TAG_' . $clean_name;
|
||||
|
||||
return $tag_name;
|
||||
}
|
||||
|
||||
protected function findCustomerTag($car_club)
|
||||
{
|
||||
// find the customer tag for club
|
||||
$tag_name = $this->normalizeClubName($car_club);
|
||||
error_log($tag_name);
|
||||
if (isset($this->cust_tag_hash[$tag_name]))
|
||||
return $this->cust_tag_hash[$tag_name];
|
||||
|
||||
error_log('customer tag not in hash...');
|
||||
// create the customer tag
|
||||
$new_cust_tag = new CustomerTag();
|
||||
$tag_details = json_decode('{"type":"car club"}', true);
|
||||
$new_cust_tag->setID($tag_name)
|
||||
->setName(strtoupper($car_club))
|
||||
->setTagDetails($tag_details);
|
||||
$this->em->persist($new_cust_tag);
|
||||
|
||||
// need to flush before adding to hash
|
||||
$this->em->flush();
|
||||
|
||||
$this->cust_tag_hash[$tag_name] = $new_cust_tag;
|
||||
|
||||
return $new_cust_tag;
|
||||
}
|
||||
|
||||
protected function normalizeContactNumber($c_num)
|
||||
{
|
||||
// remove any non digit character from string
|
||||
$clean_number = preg_replace('~\D~', '', $c_num);
|
||||
error_log('cleaned ' . $clean_number);
|
||||
|
||||
// does it fit our 09XXXXXXXXX pattern?
|
||||
if (preg_match('/^09[0-9]{9}$/', $clean_number))
|
||||
{
|
||||
// remove first '0'
|
||||
$clean_number = substr($clean_number, 1);
|
||||
error_log("CONVERTED TO $clean_number");
|
||||
return $clean_number;
|
||||
}
|
||||
// does it fit our 63XXXXXXXXXX pattern?
|
||||
else if (preg_match('/^63[0-9]{10}$/', $clean_number))
|
||||
{
|
||||
// remove the 63
|
||||
$clean_number = substr($clean_number, 2);
|
||||
error_log("CONVERTED TO $clean_number");
|
||||
return $clean_number;
|
||||
}
|
||||
// does it fit our 9XXXXXXXXX pattern?
|
||||
else if (preg_match('/^9[0-9]{9}$/', $clean_number))
|
||||
{
|
||||
error_log("already cleaned $clean_number");
|
||||
return $clean_number;
|
||||
}
|
||||
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
|
@ -1,392 +0,0 @@
|
|||
<?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;
|
||||
use App\Entity\CustomerTag;
|
||||
use App\Entity\CarClubCustomerHub;
|
||||
use App\Entity\Hub;
|
||||
|
||||
class ImportCarClubCustomerHubCommand extends Command
|
||||
{
|
||||
// field index in csv file
|
||||
const F_HUB_NAME = 0;
|
||||
const F_HUB_ADDRESS = 1;
|
||||
const F_CAR_CLUB = 2;
|
||||
const F_FIRST_NAME = 3;
|
||||
const F_LAST_NAME = 4;
|
||||
const F_CONTACT_NUMBER = 5;
|
||||
const F_BATT_SIZE = 6;
|
||||
const F_SERIAL = 7;
|
||||
|
||||
protected $em;
|
||||
protected $cust_tag_hash;
|
||||
|
||||
public function __construct(EntityManagerInterface $em)
|
||||
{
|
||||
$this->em = $em;
|
||||
$this->loadCustomerTags();
|
||||
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
protected function configure()
|
||||
{
|
||||
$this->setName('customer:importcarclubhub')
|
||||
->setDescription('Import assigned hubs for customers for car club.')
|
||||
->setHelp('Import assigned hubs for customers for car club.')
|
||||
->addArgument('promo_tag', InputArgument::REQUIRED, 'Promo customer tag ID to use.')
|
||||
->addArgument('input_file', InputArgument::REQUIRED, 'Path to the input CSV file with the customer and hub info.')
|
||||
->addArgument('output_file', InputArgument::REQUIRED, 'Output filename');
|
||||
}
|
||||
|
||||
protected function execute(InputInterface $input, OutputInterface $output)
|
||||
{
|
||||
$csv_file = $input->getArgument('input_file');
|
||||
$output_file = $input->getArgument('output_file');
|
||||
$promo_tag_id = $input->getArgument('promo_tag');
|
||||
|
||||
// fetch promo tag
|
||||
$promo_tag = $this->em->getRepository(CustomerTag::class)->find($promo_tag_id);
|
||||
if ($promo_tag == null)
|
||||
{
|
||||
throw new Exception('Could not find promo tag - ' . $promo_tag_id);
|
||||
}
|
||||
|
||||
// attempt to open file
|
||||
try
|
||||
{
|
||||
$fh = fopen($csv_file, "r");
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
throw new Exception('The file "' . $csv_file . '" could be opened.');
|
||||
}
|
||||
|
||||
$row_num = 1;
|
||||
$output_info = [];
|
||||
while (($fields = fgetcsv($fh)) !== false)
|
||||
{
|
||||
// ignore first row
|
||||
if ($row_num == 1)
|
||||
{
|
||||
$row_num++;
|
||||
continue;
|
||||
}
|
||||
|
||||
// process row
|
||||
$output_info[] = $this->processRow($fields, $promo_tag);
|
||||
|
||||
$row_num++;
|
||||
}
|
||||
|
||||
// write to output file
|
||||
$this->outputCarClubCustomerHubInfo($output_file, $output_info);
|
||||
|
||||
fclose($fh);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
protected function processRow($fields, $promo_tag)
|
||||
{
|
||||
$contact_number = trim($fields[SELF::F_CONTACT_NUMBER]);
|
||||
$car_club = trim($fields[self::F_CAR_CLUB]);
|
||||
|
||||
if (empty($contact_number))
|
||||
{
|
||||
// add info to output array
|
||||
return $this->setOutputInfo($fields, 'NOT ADDED', 'No mobile number', '');
|
||||
}
|
||||
|
||||
$hub_name = trim($fields[SELF::F_HUB_NAME]);
|
||||
|
||||
// find hub using name
|
||||
$hub = $this->findHubByName($hub_name);
|
||||
|
||||
if ($hub == null)
|
||||
{
|
||||
// add info to output array
|
||||
return $this->setOutputInfo($fields, 'NOT ADDED', 'No hub found', '');
|
||||
}
|
||||
|
||||
// clean up contact number
|
||||
$valid_contact_numbers = $this->getValidContactNumbers($contact_number);
|
||||
|
||||
// check customer tag
|
||||
$cust_tag = $this->findCustomerTag($car_club);
|
||||
$cust_id = '';
|
||||
|
||||
// get first customer that matches any of the numbers
|
||||
$customer = $this->findCustomerByNumbers($valid_contact_numbers);
|
||||
|
||||
// if no customer found, create one and add the hub
|
||||
if ($customer == null)
|
||||
{
|
||||
error_log('Creating customer...');
|
||||
|
||||
// create new customer
|
||||
$new_cust = $this->createNewCustomer($fields, $valid_contact_numbers, $cust_tag, $promo_tag);
|
||||
|
||||
// get customer id of new customer here
|
||||
$cust_id = $new_cust->getID();
|
||||
|
||||
// create the carclubcustomerhub
|
||||
$this->createCarClubCustomerHub($fields, $new_cust, $hub);
|
||||
|
||||
// add info to output array
|
||||
return $this->setOutputInfo($fields, 'CUSTOMER CREATED AND CUSTOMER HUB ADDED', '', $cust_id);
|
||||
}
|
||||
|
||||
//customer exists, we just need to add the hub and the promo tag
|
||||
// NOTE: for now, we add the promo tag and the hub
|
||||
// to the first customer found with the mobile number
|
||||
$customer->addCustomerTag($promo_tag)
|
||||
->addCustomerTag($cust_tag);
|
||||
|
||||
// create the carclubcustomerhub
|
||||
$this->createCarClubCustomerHub($fields, $customer, $hub);
|
||||
|
||||
return $this->setOutputInfo($fields, 'CUSTOMER HUB ADDED', '', $customer->getID());
|
||||
}
|
||||
|
||||
protected function createCarClubCustomerHub($fields, $cust, $hub)
|
||||
{
|
||||
$car_club_cust_hub = new CarClubCustomerHub();
|
||||
$car_club_cust_hub->setHub($hub);
|
||||
|
||||
$cust->setCarClubCustomerHub($car_club_cust_hub);
|
||||
|
||||
$this->em->persist($car_club_cust_hub);
|
||||
$this->em->flush();
|
||||
}
|
||||
|
||||
protected function createNewCustomer($fields, $contact_numbers, $cust_tag, $promo_tag)
|
||||
{
|
||||
$fname = trim($fields[self::F_FIRST_NAME]);
|
||||
$lname = trim($fields[self::F_LAST_NAME]);
|
||||
|
||||
if (count($contact_numbers) > 0)
|
||||
$clean_number = $contact_numbers[0];
|
||||
else
|
||||
$clean_number = '';
|
||||
|
||||
// create new customer
|
||||
$new_cust = new Customer();
|
||||
$new_cust->setFirstName($fname)
|
||||
->setLastName($lname)
|
||||
->setPhoneMobile($clean_number)
|
||||
->setCreateSource('car_club_file')
|
||||
->addCustomerTag($cust_tag)
|
||||
->addCustomerTag($promo_tag);
|
||||
|
||||
$this->em->persist($new_cust);
|
||||
$this->em->flush();
|
||||
|
||||
return $new_cust;
|
||||
}
|
||||
|
||||
protected function setOutputInfo($fields, $status, $reason, $cust_id)
|
||||
{
|
||||
$hub_name = trim($fields[SELF::F_HUB_NAME]);
|
||||
$hub_address = trim($fields[SELF::F_HUB_ADDRESS]);
|
||||
$car_club_name = trim($fields[SELF::F_CAR_CLUB]);
|
||||
$first_name = trim($fields[self::F_FIRST_NAME]);
|
||||
$last_name = trim($fields[self::F_LAST_NAME]);
|
||||
$contact_number = trim($fields[SELF::F_CONTACT_NUMBER]);
|
||||
$battery_size = trim($fields[SELF::F_BATT_SIZE]);
|
||||
$serial = trim($fields[SELF::F_SERIAL]);
|
||||
|
||||
return [
|
||||
$hub_name,
|
||||
$hub_address,
|
||||
$car_club_name,
|
||||
$first_name,
|
||||
$last_name,
|
||||
$contact_number,
|
||||
$battery_size,
|
||||
$serial,
|
||||
$status,
|
||||
$reason,
|
||||
$cust_id
|
||||
];
|
||||
}
|
||||
|
||||
protected function outputCarClubCustomerHubInfo($output_file, $entries)
|
||||
{
|
||||
try
|
||||
{
|
||||
$fh = fopen($output_file, "w");
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
throw new Exception('The file "' . $report_file . '" could be opened.');
|
||||
}
|
||||
|
||||
// write the headers
|
||||
fputcsv($fh, [
|
||||
'Hub Name',
|
||||
'Hub Address',
|
||||
'Car Club Name',
|
||||
'First Name',
|
||||
'Last Name',
|
||||
'Contact Number',
|
||||
'Battery Size',
|
||||
'Serial',
|
||||
'Status',
|
||||
'Reason',
|
||||
'Customer ID',
|
||||
]);
|
||||
|
||||
foreach($entries as $row)
|
||||
{
|
||||
fputcsv($fh, $row);
|
||||
}
|
||||
|
||||
fclose($fh);
|
||||
|
||||
}
|
||||
protected function findCustomerByNumbers($numbers)
|
||||
{
|
||||
error_log(print_r($numbers, true));
|
||||
$customer = $this->em->getRepository(Customer::class)->findOneBy(['phone_mobile' => $numbers]);
|
||||
return $customer;
|
||||
}
|
||||
|
||||
protected function findHubByName($hub_name)
|
||||
{
|
||||
$hname = strtoupper($hub_name);
|
||||
$hub = $this->em->getRepository(Hub::class)->findOneBy(['name' => $hname]);
|
||||
return $hub;
|
||||
}
|
||||
|
||||
protected function findCustomerTag($car_club)
|
||||
{
|
||||
// find the customer tag for club
|
||||
$tag_name = $this->normalizeClubName($car_club);
|
||||
error_log($tag_name);
|
||||
if (isset($this->cust_tag_hash[$tag_name]))
|
||||
return $this->cust_tag_hash[$tag_name];
|
||||
|
||||
error_log('customer tag not in hash...');
|
||||
// create the customer tag
|
||||
$new_cust_tag = new CustomerTag();
|
||||
$tag_details = json_decode('{"type":"car club"}', true);
|
||||
$new_cust_tag->setID($tag_name)
|
||||
->setName(strtoupper($car_club))
|
||||
->setTagDetails($tag_details);
|
||||
$this->em->persist($new_cust_tag);
|
||||
|
||||
// need to flush before adding to hash
|
||||
$this->em->flush();
|
||||
|
||||
$this->cust_tag_hash[$tag_name] = $new_cust_tag;
|
||||
|
||||
return $new_cust_tag;
|
||||
}
|
||||
|
||||
protected function getValidContactNumbers($contact_number)
|
||||
{
|
||||
// check contact number if mobile or not
|
||||
// check for spaces, slash, and forward slash
|
||||
$contact_num_array = [];
|
||||
if (preg_match('/[\\\s\/]/', $contact_number))
|
||||
{
|
||||
$contact_num_array = preg_split('/[\\\s\/]/', $contact_number);
|
||||
}
|
||||
else
|
||||
{
|
||||
// only one mobile number
|
||||
$contact_num_array[] = $contact_number;
|
||||
}
|
||||
|
||||
// collect clean numbers
|
||||
$clean_nums = [];
|
||||
foreach ($contact_num_array as $contact_num)
|
||||
{
|
||||
$c_num = trim($contact_num);
|
||||
|
||||
// clean the numbers
|
||||
$cleaned_number = $this->normalizeContactNumber($c_num);
|
||||
|
||||
// not a blank, save it
|
||||
if ($cleaned_number != '')
|
||||
{
|
||||
$clean_nums[] = $cleaned_number;
|
||||
}
|
||||
}
|
||||
|
||||
return $clean_nums;
|
||||
}
|
||||
|
||||
protected function normalizeContactNumber($c_num)
|
||||
{
|
||||
// remove any non digit character from string
|
||||
$clean_number = preg_replace('~\D~', '', $c_num);
|
||||
error_log('cleaned ' . $clean_number);
|
||||
|
||||
// does it fit our 09XXXXXXXXX pattern?
|
||||
if (preg_match('/^09[0-9]{9}$/', $clean_number))
|
||||
{
|
||||
// remove first '0'
|
||||
$clean_number = substr($clean_number, 1);
|
||||
error_log("CONVERTED TO $clean_number");
|
||||
return $clean_number;
|
||||
}
|
||||
// does it fit our 63XXXXXXXXXX pattern?
|
||||
else if (preg_match('/^63[0-9]{10}$/', $clean_number))
|
||||
{
|
||||
// remove the 63
|
||||
$clean_number = substr($clean_number, 2);
|
||||
error_log("CONVERTED TO $clean_number");
|
||||
return $clean_number;
|
||||
}
|
||||
// does it fit our 9XXXXXXXXX pattern?
|
||||
else if (preg_match('/^9[0-9]{9}$/', $clean_number))
|
||||
{
|
||||
error_log("already cleaned $clean_number");
|
||||
return $clean_number;
|
||||
}
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
protected function loadCustomerTags()
|
||||
{
|
||||
$this->cust_tag_hash = [];
|
||||
|
||||
$cust_tags = $this->em->getRepository(CustomerTag::class)->findAll();
|
||||
foreach ($cust_tags as $cust_tag)
|
||||
{
|
||||
$tag_id = $cust_tag->getID();
|
||||
$this->cust_tag_hash[$tag_id] = $cust_tag;
|
||||
}
|
||||
}
|
||||
|
||||
protected function normalizeClubName($name)
|
||||
{
|
||||
// uppercase the name
|
||||
$clean_name = trim(strtoupper($name));
|
||||
|
||||
// remove apostrophes
|
||||
$clean_name = str_replace("'", '', $clean_name);
|
||||
|
||||
// replace all special characters except ampersand (&) with whitespace
|
||||
$clean_name = trim(preg_replace('/[^A-Za-z0-9&]/', ' ', $clean_name));
|
||||
|
||||
// replace spaces with underscore (_)
|
||||
$clean_name = preg_replace('/\s+/', '_', $clean_name);
|
||||
|
||||
// prepend 'TAG_'
|
||||
$tag_name = 'TAG_' . $clean_name;
|
||||
|
||||
return $tag_name;
|
||||
}
|
||||
}
|
||||
|
|
@ -418,8 +418,7 @@ class ImportCustomerCommand extends Command
|
|||
$fields[self::F_OFFICE_PHONE],
|
||||
$fields[self::F_FAX],
|
||||
$fields[self::F_EMAIL],
|
||||
isset($fields[self::F_NOTES]) ? $fields[self::F_NOTES] : '',
|
||||
'CMB_ImportCustomerCommand'
|
||||
isset($fields[self::F_NOTES]) ? $fields[self::F_NOTES] : ''
|
||||
];
|
||||
$cust_row = str_replace('\\', '\\\\', implode('|', $cust_fields)) . "\n";
|
||||
fputs($cust_file, $cust_row);
|
||||
|
|
|
|||
|
|
@ -1,41 +0,0 @@
|
|||
<?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 App\Entity\HubFilterArea;
|
||||
|
||||
use App\Service\HubFilterKMLFileImporter;
|
||||
|
||||
class ImportHubFilterKMLFileCommand extends Command
|
||||
{
|
||||
protected $importer;
|
||||
|
||||
protected function configure()
|
||||
{
|
||||
$this->setName('hubfilterarea:import')
|
||||
->setDescription('Extracts map data of the hub filter area from the KML file and saves to database')
|
||||
->setHelp('Gets the coordinates of the hub filter area and saves to the database')
|
||||
->addArgument('file', InputArgument::REQUIRED, 'Path to the KML file');
|
||||
}
|
||||
|
||||
public function __construct(HubFilterKMLFileImporter $importer)
|
||||
{
|
||||
$this->importer = $importer;
|
||||
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
protected function execute(InputInterface $input, OutputInterface $output)
|
||||
{
|
||||
$kml_file = $input->getArgument('file');
|
||||
|
||||
$this->importer->getMapData($kml_file);
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,363 +0,0 @@
|
|||
<?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\SAPBattery;
|
||||
use App\Entity\SAPBatteryBrand;
|
||||
use App\Entity\SAPBatterySize;
|
||||
|
||||
class ImportSAPDeltaCommand extends Command
|
||||
{
|
||||
private $em;
|
||||
private $sap_battery_hash;
|
||||
private $sap_battery_size_hash;
|
||||
private $sap_battery_brand_hash;
|
||||
|
||||
public function __construct(EntityManagerInterface $em)
|
||||
{
|
||||
$this->em = $em;
|
||||
$this->initSAPBatteryHash();
|
||||
$this->initSAPBatterySizeHash();
|
||||
$this->initSAPBatteryBrandHash();
|
||||
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
protected function configure()
|
||||
{
|
||||
$this->setName('sap_battery:delta')
|
||||
->setDescription('Update SAP battery table with new SAP battery data.')
|
||||
->setHelp('Creates SAP battery data entries from CSV file.')
|
||||
->addArgument('file', InputArgument::REQUIRED, 'Path to the CSV file.')
|
||||
->addArgument('output_file', InputArgument::REQUIRED, 'Path to the output CSV file.');
|
||||
}
|
||||
|
||||
protected function execute(InputInterface $input, OutputInterface $output)
|
||||
{
|
||||
$csv_file = $input->getArgument('file');
|
||||
$report_file = $input->getArgument('output_file');
|
||||
|
||||
// CSV column order:
|
||||
// 0 - brand
|
||||
// 1 - sku
|
||||
// 2 - size
|
||||
|
||||
// attempt to open file
|
||||
try
|
||||
{
|
||||
$fh = fopen($csv_file, "r");
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
throw new Exception('The file "' . $csv_file . '" could not be read.');
|
||||
}
|
||||
|
||||
// get entity manager
|
||||
$em = $this->em;
|
||||
|
||||
// loop through the rows
|
||||
$row_num = 0;
|
||||
error_log('Processing sap battery csv file...');
|
||||
$existing_brands = [];
|
||||
$existing_sizes = [];
|
||||
$existing_batteries = [];
|
||||
$added_brands = [];
|
||||
$added_sizes = [];
|
||||
$added_batteries = [];
|
||||
$not_added_batteries = [];
|
||||
$total_processed = 0;
|
||||
$total_not_processed = 0;
|
||||
while (($fields = fgetcsv($fh)) !== false)
|
||||
{
|
||||
// data starts at row 1
|
||||
if ($row_num < 1)
|
||||
{
|
||||
$row_num++;
|
||||
continue;
|
||||
}
|
||||
|
||||
// check if blank row
|
||||
if ((strlen(trim($fields[0])) == 0) &&
|
||||
(strlen(trim($fields[1])) == 0) &&
|
||||
(strlen(trim($fields[2])) == 0))
|
||||
{
|
||||
$total_not_processed++;
|
||||
continue;
|
||||
}
|
||||
|
||||
// clean up fields
|
||||
$clean_brand = $this->normalizeName(trim($fields[0]));
|
||||
$clean_sku = $this->normalizeName(trim($fields[1]));
|
||||
$clean_size = $this->normalizeName(trim($fields[2]));
|
||||
|
||||
if ((empty($clean_brand)) ||
|
||||
(empty($clean_sku)) ||
|
||||
(empty($clean_size)))
|
||||
{
|
||||
$not_added_batteries[] = [
|
||||
'sku' => $clean_sku,
|
||||
'brand' => $clean_brand,
|
||||
'size' => $clean_size,
|
||||
];
|
||||
$total_not_processed++;
|
||||
continue;
|
||||
}
|
||||
|
||||
// check if sap battery code already exists
|
||||
if (!isset($this->sap_battery_hash[$clean_sku]))
|
||||
{
|
||||
// check if brand in system
|
||||
$sap_brand = null;
|
||||
if (!isset($this->sap_battery_brand_hash[$clean_brand]))
|
||||
{
|
||||
// add brand
|
||||
$sap_brand = new SAPBatteryBrand();
|
||||
$sap_brand->setName($clean_brand);
|
||||
|
||||
$em->persist($sap_brand);
|
||||
|
||||
// add to list of added brands
|
||||
$added_brands[$clean_brand] = $clean_brand;
|
||||
|
||||
//$output->writeln('Adding brand: ' . $clean_brand);
|
||||
|
||||
// add to hash
|
||||
$this->sap_battery_brand_hash[$clean_brand] = $sap_brand;
|
||||
}
|
||||
else
|
||||
{
|
||||
// get the brand
|
||||
$sap_brand = $this->sap_battery_brand_hash[$clean_brand];
|
||||
|
||||
// need to check if this is in added_brands because the hash contains
|
||||
// existing + added. What we need is the list of existing only
|
||||
if (!isset($added_brands[$clean_brand]))
|
||||
{
|
||||
// add to list of existing brands
|
||||
//$output->writeln('Brand already in db ' . $clean_brand);
|
||||
$existing_brands[$clean_brand] = $clean_brand;
|
||||
}
|
||||
}
|
||||
|
||||
// check if size in system
|
||||
$sap_size = null;
|
||||
if (!isset($this->sap_battery_size_hash[$clean_size]))
|
||||
{
|
||||
// add size
|
||||
$sap_size = new SAPBatterySize();
|
||||
$sap_size->setName($clean_size);
|
||||
|
||||
$em->persist($sap_size);
|
||||
|
||||
// add to list of added sizes
|
||||
$added_sizes[$clean_size] = $clean_size;
|
||||
|
||||
//$output->writeln('Adding size: ' . $clean_size);
|
||||
|
||||
// add to hash
|
||||
$this->sap_battery_size_hash[$clean_size] = $sap_size;
|
||||
}
|
||||
else
|
||||
{
|
||||
// get the size
|
||||
$sap_size = $this->sap_battery_size_hash[$clean_size];
|
||||
|
||||
// need to check if this is in added_sizes because the hash contains
|
||||
// existing + added. What we need is the list of existing only
|
||||
if (!isset($added_sizes[$clean_size]))
|
||||
{
|
||||
// add to list of existing sizes
|
||||
//$output->writeln('Size already in db ' . $clean_size);
|
||||
$existing_sizes[$clean_size] = $clean_size;
|
||||
}
|
||||
}
|
||||
|
||||
// add the sap_battery
|
||||
// create sap battery entry
|
||||
$sap_battery = new SAPBattery();
|
||||
$sap_battery->setID($clean_sku)
|
||||
->setSize($sap_size)
|
||||
->setBrand($sap_brand);
|
||||
|
||||
$em->persist($sap_battery);
|
||||
|
||||
// add to list of added batteries
|
||||
$added_batteries[$clean_sku] = $clean_sku;
|
||||
|
||||
//$output->writeln('Adding battery: ' . $clean_sku);
|
||||
|
||||
// add to hash
|
||||
$this->sap_battery_hash[$clean_sku] = $sap_battery;
|
||||
}
|
||||
else
|
||||
{
|
||||
// TODO: for now, assume that the brand and size in system == brand and size in csv file
|
||||
// need to check if this is in added_batteries because the hash contains
|
||||
// existing + added. What we need is the list of existing only
|
||||
if (!isset($added_batteries[$clean_sku]))
|
||||
{
|
||||
// add to list of existing batteries
|
||||
//$output->writeln('Battery already in db ' . $clean_sku);
|
||||
$existing_batteries[$clean_sku] = $this->sap_battery_hash[$clean_sku];
|
||||
if (!isset($existing_brands[$clean_brand]))
|
||||
$existing_brands[$clean_brand] = $clean_brand;
|
||||
if (!isset($existing_sizes[$clean_size]))
|
||||
$existing_sizes[$clean_size] = $clean_size;
|
||||
}
|
||||
}
|
||||
|
||||
$total_processed++;
|
||||
$row_num++;
|
||||
|
||||
}
|
||||
|
||||
$em->flush();
|
||||
|
||||
// need to output the list of added and not added data
|
||||
$this->writeOutputFile($report_file, $added_brands, $added_sizes, $added_batteries,
|
||||
$existing_brands, $existing_sizes, $existing_batteries, $total_processed,
|
||||
$not_added_batteries, $total_not_processed);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
protected function initSAPBatteryHash()
|
||||
{
|
||||
$this->sap_battery_hash = [];
|
||||
|
||||
$batts = $this->em->getRepository(SAPBattery::class)->findAll();
|
||||
foreach ($batts as $batt)
|
||||
{
|
||||
$id = $this->normalizeName($batt->getID());
|
||||
$this->sap_battery_hash[$id] = $batt;
|
||||
}
|
||||
}
|
||||
|
||||
protected function initSAPBatterySizeHash()
|
||||
{
|
||||
$this->sap_battery_size_hash = [];
|
||||
|
||||
$sizes = $this->em->getRepository(SAPBatterySize::class)->findAll();
|
||||
foreach ($sizes as $size)
|
||||
{
|
||||
$name = $this->normalizeName($size->getName());
|
||||
$this->sap_battery_size_hash[$name] = $size;
|
||||
}
|
||||
}
|
||||
|
||||
protected function initSAPBatteryBrandHash()
|
||||
{
|
||||
$this->sap_battery_brand_hash = [];
|
||||
|
||||
$brands = $this->em->getRepository(SAPBatteryBrand::class)->findAll();
|
||||
foreach ($brands as $brand)
|
||||
{
|
||||
$name = $this->normalizeName($brand->getName());
|
||||
$this->sap_battery_brand_hash[$name] = $brand;
|
||||
}
|
||||
}
|
||||
|
||||
protected function writeOutputFile($report_file, $added_brands, $added_sizes, $added_batteries,
|
||||
$existing_brands, $existing_sizes, $existing_batteries, $total_processed,
|
||||
$bad_battery_data, $total_not_processed)
|
||||
{
|
||||
try
|
||||
{
|
||||
$fh = fopen($report_file, "w");
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
throw new Exception('The file "' . $report_file . '" could be opened.');
|
||||
}
|
||||
|
||||
fputs($fh, 'Total entries processed: ' . $total_processed . "\n");
|
||||
fputs($fh, 'Total entries not processed: ' . $total_not_processed . "\n");
|
||||
|
||||
fputs($fh, 'Total brands added: ' . count($added_brands) . "\n");
|
||||
fputs($fh, 'Total sizes added: ' . count($added_sizes) . "\n");
|
||||
fputs($fh, 'Total batteries added: ' . count($added_batteries) . "\n");
|
||||
|
||||
fputs($fh, 'Total number of brands in csv file that are in the system: ' . count($existing_brands) . "\n");
|
||||
fputs($fh, 'Total number of sizes in csv file that are in the system: ' . count($existing_sizes) . "\n");
|
||||
fputs($fh, 'Total number of batteries in csv file that are in the system: ' . count($existing_batteries) . "\n");
|
||||
|
||||
// write the batteries with bad data
|
||||
fputs($fh, 'Entry Not Added: ' . "\n");
|
||||
foreach($bad_battery_data as $bad_batt)
|
||||
{
|
||||
$battery_line = $bad_batt['sku'] . ' ' . $bad_batt['brand'] . ' ' . $bad_batt['size'];
|
||||
fputs($fh, $battery_line, strlen($battery_line));
|
||||
fputs($fh, "\n");
|
||||
}
|
||||
|
||||
// write the added batteries
|
||||
// check the existing brands array for the added ones
|
||||
$not_added_batteries = [];
|
||||
fputs($fh, 'Added Batteries: ' . "\n");
|
||||
foreach($added_batteries as $added_battery)
|
||||
{
|
||||
fputs($fh, $added_battery, strlen($added_battery));
|
||||
fputs($fh, "\n");
|
||||
}
|
||||
|
||||
// write the added brands
|
||||
// check the existing arrays for the added ones
|
||||
$not_added_brands = [];
|
||||
fputs($fh, 'Added Brands: ' . "\n");
|
||||
foreach ($added_brands as $added_brand)
|
||||
{
|
||||
fputs($fh, $added_brand, strlen($added_brand));
|
||||
fputs($fh, "\n");
|
||||
}
|
||||
|
||||
// write the added sizes
|
||||
// check the existing array for the added ones
|
||||
$not_added_sizes = [];
|
||||
fputs($fh, 'Added Sizes: ' . "\n");
|
||||
foreach ($added_sizes as $added_size)
|
||||
{
|
||||
fputs($fh, $added_size, strlen($added_size));
|
||||
fputs($fh, "\n");
|
||||
}
|
||||
|
||||
// write the not added batteries
|
||||
fputs($fh, 'Batteries already in system: ' . "\n");
|
||||
foreach($existing_batteries as $not_added_battery)
|
||||
{
|
||||
fputs($fh, $not_added_battery->getID(), strlen($not_added_battery->getID()));
|
||||
fputs($fh, "\n");
|
||||
}
|
||||
|
||||
// write the not added brands
|
||||
fputs($fh, 'Brands already in system: ' . "\n");
|
||||
foreach($existing_brands as $not_added_brand)
|
||||
{
|
||||
fputs($fh, $not_added_brand, strlen($not_added_brand));
|
||||
fputs($fh, "\n");
|
||||
}
|
||||
|
||||
// write the not added sizes
|
||||
fputs($fh, 'Sizes already in system: ' . "\n");
|
||||
foreach($existing_sizes as $not_added_size)
|
||||
{
|
||||
fputs($fh, $not_added_size, strlen($not_added_size));
|
||||
fputs($fh, "\n");
|
||||
}
|
||||
|
||||
fclose($fh);
|
||||
}
|
||||
|
||||
protected function normalizeName($name)
|
||||
{
|
||||
$normalized_key = trim(strtoupper($name));
|
||||
|
||||
return $normalized_key;
|
||||
}
|
||||
}
|
||||