Add path to tapi calls. Add more required parameters for new job order. #686
This commit is contained in:
parent
08050416bb
commit
fb91d462ff
3 changed files with 96 additions and 52 deletions
|
|
@ -81,17 +81,17 @@ access_keys:
|
|||
- id: tapi_vehicle.list
|
||||
label: List Third Party Vehicles
|
||||
- id: tapi_promo
|
||||
labels: Third Party Promo Access
|
||||
label: Third Party Promo Access
|
||||
acls:
|
||||
- id: tapi_promo.list
|
||||
label: List Third Party Promos
|
||||
- id: tapi_battery
|
||||
labels: Third Party Battery Access
|
||||
label: Third Party Battery Access
|
||||
acls:
|
||||
- id: tapi_battery_compatible.list
|
||||
label: List Third Party Compatible Batteries
|
||||
- id: tapi_jo
|
||||
labels: Third Party Job Order Access
|
||||
label: Third Party Job Order Access
|
||||
acls:
|
||||
- id: tapi_jo.request
|
||||
label: Third Party Request Job Order
|
||||
|
|
@ -114,7 +114,7 @@ access_keys:
|
|||
- id: tapi_jo.get.info
|
||||
label: Third Party Get Job Order Info
|
||||
- id: tapi_service
|
||||
labels: Third Party Service Access
|
||||
label: Third Party Service Access
|
||||
acls:
|
||||
- id: tapi_service.list
|
||||
label: List Third Party Services
|
||||
|
|
|
|||
|
|
@ -59,6 +59,14 @@ security:
|
|||
provider: api_key_user_provider
|
||||
user_checker: Catalyst\AuthBundle\Service\UserChecker
|
||||
|
||||
third_party_api:
|
||||
pattern: ^\/tapi\/
|
||||
stateless: true
|
||||
simple_preauth:
|
||||
authenticator: Catalyst\APIBundle\Security\APIKeyAuthenticator
|
||||
provider: api_key_user_provider
|
||||
user_checker: Catalyst\AuthBundle\Service\UserChecker
|
||||
|
||||
main:
|
||||
provider: user_provider
|
||||
form_login:
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ namespace App\Controller\TAPI;
|
|||
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\Dotenv\Dotenv;
|
||||
|
||||
use Doctrine\ORM\Query;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
|
|
@ -25,6 +26,8 @@ use App\Ramcar\JOEventType;
|
|||
use App\Ramcar\HubCriteria;
|
||||
use App\Ramcar\ModeOfPayment;
|
||||
use App\Ramcar\APIRiderStatus;
|
||||
use App\Ramcar\VehicleStatusCondition;
|
||||
use App\Ramcar\FuelType;
|
||||
|
||||
use App\Service\InvoiceGeneratorInterface;
|
||||
use App\Service\RisingTideGateway;
|
||||
|
|
@ -49,6 +52,7 @@ use App\Entity\Customer;
|
|||
use App\Entity\Hub;
|
||||
use App\Entity\Invoice;
|
||||
use App\Entity\Vehicle;
|
||||
use App\Entity\VehicleManufacturer;
|
||||
|
||||
use DateTime;
|
||||
use DateInterval;
|
||||
|
|
@ -71,9 +75,6 @@ class JobOrderController extends APIController
|
|||
HubSelector $hub_select, HubDistributor $hub_dist, HubFilterLogger $hub_filter_logger,
|
||||
HubFilteringGeoChecker $hub_geofence, EntityManagerInterface $em)
|
||||
{
|
||||
// TODO: fix all the responses
|
||||
$this->denyAccessUnlessGranted('tapi_jo.request', null, 'No access.');
|
||||
|
||||
// check required parameters and api key
|
||||
$required_params = [
|
||||
'service_type',
|
||||
|
|
@ -86,6 +87,10 @@ class JobOrderController extends APIController
|
|||
'mobile_number',
|
||||
'vehicle_manufacturer_id',
|
||||
'vehicle_model_id',
|
||||
'vehicle_model_year',
|
||||
'vehicle_color',
|
||||
'vehicle_condition',
|
||||
'vehicle_fuel_type',
|
||||
'plate_number'
|
||||
];
|
||||
|
||||
|
|
@ -94,7 +99,8 @@ class JobOrderController extends APIController
|
|||
return new APIResponse(false, $msg);
|
||||
|
||||
// get data from request
|
||||
$status = $this->getJobOrderRequestInfo($req, $data);
|
||||
$data = [];
|
||||
$status = $this->getJobOrderRequestInfo($req, $em, $data);
|
||||
if ($status != null)
|
||||
return new APIResponse(false, $status);
|
||||
|
||||
|
|
@ -112,6 +118,8 @@ class JobOrderController extends APIController
|
|||
$jo = new JobOrder();
|
||||
$jo->setSource($data['source'])
|
||||
->setStatus(JOStatus::PENDING)
|
||||
->setServiceType($data['service_type'])
|
||||
->setWarrantyClass($data['warranty_class'])
|
||||
->setDeliveryInstructions($data['instructions'])
|
||||
->setTier1Notes('')
|
||||
->setTier2Notes('')
|
||||
|
|
@ -124,6 +132,7 @@ class JobOrderController extends APIController
|
|||
->setLandmark($data['landmark']);
|
||||
|
||||
$jo->setCustomer($data['customer']);
|
||||
$jo->setCustomerVehicle($data['customer_vehicle']);
|
||||
|
||||
// set coordinates
|
||||
$point = new Point($data['long'], $data['lat']);
|
||||
|
|
@ -136,10 +145,10 @@ class JobOrderController extends APIController
|
|||
// TODO add promo to criteria if any
|
||||
// check promo
|
||||
// put in criteria
|
||||
$icrit->addPromo($data['promo']);
|
||||
if ($data['promo'] != null)
|
||||
$icrit->addPromo($data['promo']);
|
||||
|
||||
$icrit->setCustomerVehicle($data['customer_vehicle']);
|
||||
$jo->setCustomerVehicle($data['customer_vehicle']);
|
||||
|
||||
$icrit->addEntry($data['batt'], $data['trade_in_type'], 1);
|
||||
|
||||
|
|
@ -149,6 +158,7 @@ class JobOrderController extends APIController
|
|||
|
||||
// assign hub and rider
|
||||
// check if hub is null
|
||||
$hub = $data['hub'];
|
||||
if ($hub == null)
|
||||
{
|
||||
// TODO: need to factor out the setting of HubCriteria fields
|
||||
|
|
@ -158,7 +168,7 @@ class JobOrderController extends APIController
|
|||
// get distance limit for mobile from env
|
||||
// get value of hub_filter_enable from env
|
||||
$dotenv = new Dotenv();
|
||||
$dotenv->loadEnv(__DIR__.'/../../.env');
|
||||
$dotenv->loadEnv(__DIR__.'/../../../.env');
|
||||
$limit_distance = $_ENV['CUST_DISTANCE_LIMIT'];
|
||||
$hub_filter_enabled = $_ENV['HUB_FILTER_ENABLE'];
|
||||
|
||||
|
|
@ -298,7 +308,7 @@ class JobOrderController extends APIController
|
|||
$jo->setStatus(JOStatus::RIDER_ASSIGN);
|
||||
$jo->setStatusAutoAssign(AutoAssignStatus::HUB_ASSIGNED);
|
||||
|
||||
if ($date_schedule != null)
|
||||
if ($data['date_schedule'] != null)
|
||||
$jo->setDateSchedule($data['date_schedule']);
|
||||
|
||||
// update redis hub_jo_count for hub
|
||||
|
|
@ -1470,7 +1480,7 @@ class JobOrderController extends APIController
|
|||
|
||||
protected function getJobOrderRequestInfo(Request $req, EntityManagerInterface $em, &$data)
|
||||
{
|
||||
$error = $this->validateRequest($req);
|
||||
$error = $this->validateRequest($req, $em);
|
||||
if ($error != null)
|
||||
{
|
||||
// there is a validation error
|
||||
|
|
@ -1481,7 +1491,7 @@ class JobOrderController extends APIController
|
|||
|
||||
// at this point, the request data has been validated
|
||||
// trade-in type
|
||||
$trade_in_type = $this->cleanText($r->get('trade_in_type'));
|
||||
$trade_in_type = $this->cleanText($r->get('trade_in_type', ''));
|
||||
switch ($trade_in_type)
|
||||
{
|
||||
case TradeInType::MOTOLITE:
|
||||
|
|
@ -1507,12 +1517,12 @@ class JobOrderController extends APIController
|
|||
$lat = $r->get('latitude');
|
||||
|
||||
// get service type
|
||||
$stype = $this->cleanText($r->get('service_type'));
|
||||
$stype = $this->cleanText($r->get('service_type', ''));
|
||||
|
||||
// get mode of payment
|
||||
$payment_mode = $this->clean($r->get('mode_of_payment'));
|
||||
$payment_mode = $this->cleanText($r->get('mode_of_payment', ''));
|
||||
|
||||
$advance_order = $r->get('flag_advance_order');
|
||||
$advance_order = $r->get('flag_advance_order', 0);
|
||||
// check for 'false' text
|
||||
if ($advance_order === false || $advance_order === 0 || $advance_order === '0' || $advance_order == 'false')
|
||||
$flag_advance_order = false;
|
||||
|
|
@ -1525,28 +1535,22 @@ class JobOrderController extends APIController
|
|||
$hub = $em->getRepository(Hub::class)->find($hub_id);
|
||||
|
||||
$schedule_date = $r->get('date_schedule');
|
||||
$slot_id = $r->get('slot_id');
|
||||
|
||||
// process the jo date schedule
|
||||
$date_schedule = null;
|
||||
if ((strlen($schedule_date) > 0) && (strlen($slot_id) > 0))
|
||||
{
|
||||
$time_schedule = $this->getTimeFromSlot($slot_id);
|
||||
if (!empty($time_schedule))
|
||||
{
|
||||
$s_date = $schedule_date . ' ' . $time_schedule;
|
||||
$date_schedule = DateTime::createFromFormat('Y-m-d H:i', $s_date);
|
||||
// error_log($date_schedule->format('Y-m-d H:i'));
|
||||
}
|
||||
}
|
||||
if (strlen($schedule_date) > 0)
|
||||
$date_schedule = DateTime::createFromFormat('Y-m-d H:i', $schedule_date);
|
||||
|
||||
// get promo
|
||||
$promo_id = $r->get('promo_id');
|
||||
$promo_id = $r->get('promo_id', 0);
|
||||
$promo = $em->getRepository(Promo::class)->find($promo_id);
|
||||
|
||||
// check battery
|
||||
$batt_id = $req->request->get('batt_id');
|
||||
$batt_id = $req->request->get('battery_id', 0);
|
||||
$batt = $em->getRepository(Battery::class)->find($batt_id);
|
||||
$warranty_class = '';
|
||||
if (($batt != null) && ($stype == ServiceType::BATTERY_REPLACEMENT_NEW))
|
||||
$warranty_class = WarrantyClass::WTY_PRIVATE;
|
||||
|
||||
// get customer and vehicle info
|
||||
$fname = trim($r->get('first_name', ''));
|
||||
|
|
@ -1556,19 +1560,24 @@ class JobOrderController extends APIController
|
|||
// validate mobile number
|
||||
$clean_mobile = $this->cleanPhoneNumber($mobile);
|
||||
|
||||
$vmanu_id = $r->get('vehicle_manufacturer');
|
||||
$vmanu_id = $r->get('vehicle_manufacturer_id', 0);
|
||||
// find vehicle manufacturer
|
||||
$vmanu = $em->getRepository(VehicleManufacturer::class)->find($vmanu_id);
|
||||
|
||||
$vmodel_id = $r->get('vehicle_model');
|
||||
$vmodel_id = $r->get('vehicle_model_id', 0);
|
||||
// find vehicle
|
||||
$vehicle = $em->getRepository(Vehicle::class)->find($vmodel_id);
|
||||
|
||||
$plate_number = $r->get('plate_number');
|
||||
$plate_number = $r->get('plate_number', '');
|
||||
|
||||
// clean plate number
|
||||
$clean_plate = $this->cleanPlateNumber($plate_number);
|
||||
|
||||
$v_condition = $this->cleanText($r->get('vehicle_condition', ''));
|
||||
$fuel_type = $this->cleanText($r->get('vehicle_fuel_type', ''));
|
||||
$color = trim($r->get('vehicle_color', ''));
|
||||
$model_year = trim($r->get('vehicle_model_year', 0));
|
||||
|
||||
$c_data = [
|
||||
'first_name' => $fname,
|
||||
'last_name' => $lname,
|
||||
|
|
@ -1576,6 +1585,10 @@ class JobOrderController extends APIController
|
|||
'vmanu' => $vmanu,
|
||||
'vehicle' => $vehicle,
|
||||
'plate_number' => $clean_plate,
|
||||
'model_year' => $model_year,
|
||||
'condition' => $v_condition,
|
||||
'color' => $color,
|
||||
'fuel_type' => $fuel_type,
|
||||
];
|
||||
|
||||
// process customer and vehicle information
|
||||
|
|
@ -1598,6 +1611,7 @@ class JobOrderController extends APIController
|
|||
'customer' => $cust_data['customer'],
|
||||
'customer_vehicle' => $cust_data['customer_vehicle'],
|
||||
'source' => TransactionOrigin::THIRD_PARTY,
|
||||
'warranty_class' => $warranty_class,
|
||||
];
|
||||
|
||||
return null;
|
||||
|
|
@ -1608,15 +1622,16 @@ class JobOrderController extends APIController
|
|||
$r = $req->request;
|
||||
|
||||
// validate trade-in type
|
||||
$trade_in_type = $this->cleanText($r->get('trade_in_type'));
|
||||
if (!TradeInType::validate($trade_in_type))
|
||||
$trade_in_type = $this->cleanText($r->get('trade_in_type', ''));
|
||||
if ((!empty($trade_in_type)) &&
|
||||
(!TradeInType::validate($trade_in_type)))
|
||||
{
|
||||
$message = 'Invalid trade in type';
|
||||
return $message;
|
||||
}
|
||||
|
||||
// validate service type
|
||||
$stype = $this->cleanText($r->get('service_type'));
|
||||
$stype = $this->cleanText($r->get('service_type', ''));
|
||||
if (!ServiceType::validate($stype))
|
||||
{
|
||||
$message = 'Invalid service type';
|
||||
|
|
@ -1624,7 +1639,7 @@ class JobOrderController extends APIController
|
|||
}
|
||||
|
||||
// validate mode of payment
|
||||
$payment_mode = $this->clean($r->get('mode_of_payment'));
|
||||
$payment_mode = $this->cleanText($r->get('mode_of_payment', ''));
|
||||
if (!ModeOfPayment::validate($payment_mode))
|
||||
{
|
||||
$message = 'Invalid mode of payment';
|
||||
|
|
@ -1633,7 +1648,7 @@ class JobOrderController extends APIController
|
|||
|
||||
// check promo
|
||||
$promo = null;
|
||||
$promo_id = $r->get('promo_id');
|
||||
$promo_id = $r->get('promo_id', 0);
|
||||
if (!empty($promo_id))
|
||||
{
|
||||
$promo = $em->getRepository(Promo::class)->find($promo_id);
|
||||
|
|
@ -1646,8 +1661,8 @@ class JobOrderController extends APIController
|
|||
|
||||
// check battery
|
||||
$batt = null;
|
||||
$batt_id = $req->request->get('batt_id');
|
||||
if ($empty($batt_id))
|
||||
$batt_id = $req->request->get('battery_id', 0);
|
||||
if (!empty($batt_id))
|
||||
{
|
||||
$batt = $em->getRepository(Battery::class)->find($batt_id);
|
||||
if ($batt == null)
|
||||
|
|
@ -1667,7 +1682,7 @@ class JobOrderController extends APIController
|
|||
}
|
||||
|
||||
$vmanu = null;
|
||||
$vmanu_id = $r->get('vehicle_manufacturer');
|
||||
$vmanu_id = $r->get('vehicle_manufacturer_id', 0);
|
||||
// validate the vehicle manufacturer id
|
||||
// find vehicle manufacturer
|
||||
$vmanu = $em->getRepository(VehicleManufacturer::class)->find($vmanu_id);
|
||||
|
|
@ -1678,23 +1693,39 @@ class JobOrderController extends APIController
|
|||
}
|
||||
|
||||
$vmodel = null;
|
||||
$vmodel_id = $r->get('vehicle_model');
|
||||
$vmodel_id = $r->get('vehicle_model_id', 0);
|
||||
// validate the vehicle model id
|
||||
// find vehicle
|
||||
$vmodel = $em->getRepository(Vehicle::class)->find($vmodel_id);
|
||||
if ($vmodel = null)
|
||||
if ($vmodel == null)
|
||||
{
|
||||
$message = 'Invalid vehicle model id.';
|
||||
return $message;
|
||||
}
|
||||
|
||||
// confirm that vehicle model's manufacturer is the same as the one in vehicle
|
||||
if ($vmodel->getManufacturer()->getID != $vmanu_id)
|
||||
if ($vmodel->getManufacturer()->getID() != $vmanu_id)
|
||||
{
|
||||
$message = 'Invalid vehicle manufacturer id for vehicle model.';
|
||||
return $message;
|
||||
}
|
||||
|
||||
// validate vehicle condition
|
||||
$v_condition = $this->cleanText($r->get('vehicle_condition', ''));
|
||||
if (!VehicleStatusCondition::validate($v_condition))
|
||||
{
|
||||
$message = 'Invalid vehicle condition.';
|
||||
return $message;
|
||||
}
|
||||
|
||||
// validate fuel type
|
||||
$fuel_type = $this->cleanText($r->get('vehicle_fuel_type', ''));
|
||||
if (!FuelType::validate($fuel_type))
|
||||
{
|
||||
$message = 'Invalid vehicle fuel type.';
|
||||
return $message;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
@ -1714,8 +1745,8 @@ class JobOrderController extends APIController
|
|||
$cust_vehicle = null;
|
||||
|
||||
// find customer + customer vehicle combo
|
||||
$cv = $this->findCustomerAndCustomerVehicle($data, $em);
|
||||
if ($cv == null)
|
||||
$cust_vehicle = $this->findCustomerAndCustomerVehicle($data, $em);
|
||||
if ($cust_vehicle == null)
|
||||
{
|
||||
// find customer given phone number
|
||||
$cust = $em->getRepository(Customer::class)->findOneBy(['phone_mobile' => $mobile]);
|
||||
|
|
@ -1749,34 +1780,39 @@ class JobOrderController extends APIController
|
|||
$em->persist($cust);
|
||||
|
||||
// add customer vehicle
|
||||
$cust_vehicle = $this->createCustomerVehicle($em, $cust, $vehicle);
|
||||
$cust_vehicle = $this->createCustomerVehicle($em, $cust, $data);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
// create customer vehicle
|
||||
$cust_vehicle = $this->createCustomerVehicle($em, $cust, $vehicle);
|
||||
$cust_vehicle = $this->createCustomerVehicle($em, $cust, $data);
|
||||
}
|
||||
|
||||
$em->flush();
|
||||
}
|
||||
|
||||
$c_data = [
|
||||
'customer' => $cust,
|
||||
'customer' => $cust_vehicle->getCustomer(),
|
||||
'customer_vehicle' => $cust_vehicle,
|
||||
];
|
||||
|
||||
return $c_data;
|
||||
}
|
||||
|
||||
protected function createCustomerVehicle(EntityManagerInterface $em, Customer $cust, Vehicle $vehicle)
|
||||
protected function createCustomerVehicle(EntityManagerInterface $em, Customer $cust, $data)
|
||||
{
|
||||
// add customer vehicle
|
||||
$cust_vehicle = new CustomerVehicle();
|
||||
|
||||
$cust_vehicle->setCustomer($cust)
|
||||
->setPlateNumber($plate_number)
|
||||
->setVehicle($vehicle);
|
||||
->setPlateNumber($data['plate_number'])
|
||||
->setVehicle($data['vehicle'])
|
||||
->setModelYear($data['model_year'])
|
||||
->setStatusCondition($data['condition'])
|
||||
->setColor($data['color'])
|
||||
->setHasMotoliteBattery(true)
|
||||
->setFuelType($data['fuel_type']);
|
||||
|
||||
$em->persist($cust_vehicle);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue