Add path to tapi calls. Add more required parameters for new job order. #686

This commit is contained in:
Korina Cordero 2022-06-20 09:00:56 +00:00
parent 08050416bb
commit fb91d462ff
3 changed files with 96 additions and 52 deletions

View file

@ -81,17 +81,17 @@ access_keys:
- id: tapi_vehicle.list - id: tapi_vehicle.list
label: List Third Party Vehicles label: List Third Party Vehicles
- id: tapi_promo - id: tapi_promo
labels: Third Party Promo Access label: Third Party Promo Access
acls: acls:
- id: tapi_promo.list - id: tapi_promo.list
label: List Third Party Promos label: List Third Party Promos
- id: tapi_battery - id: tapi_battery
labels: Third Party Battery Access label: Third Party Battery Access
acls: acls:
- id: tapi_battery_compatible.list - id: tapi_battery_compatible.list
label: List Third Party Compatible Batteries label: List Third Party Compatible Batteries
- id: tapi_jo - id: tapi_jo
labels: Third Party Job Order Access label: Third Party Job Order Access
acls: acls:
- id: tapi_jo.request - id: tapi_jo.request
label: Third Party Request Job Order label: Third Party Request Job Order
@ -114,7 +114,7 @@ access_keys:
- id: tapi_jo.get.info - id: tapi_jo.get.info
label: Third Party Get Job Order Info label: Third Party Get Job Order Info
- id: tapi_service - id: tapi_service
labels: Third Party Service Access label: Third Party Service Access
acls: acls:
- id: tapi_service.list - id: tapi_service.list
label: List Third Party Services label: List Third Party Services

View file

@ -59,6 +59,14 @@ security:
provider: api_key_user_provider provider: api_key_user_provider
user_checker: Catalyst\AuthBundle\Service\UserChecker 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: main:
provider: user_provider provider: user_provider
form_login: form_login:

View file

@ -4,6 +4,7 @@ namespace App\Controller\TAPI;
use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Dotenv\Dotenv;
use Doctrine\ORM\Query; use Doctrine\ORM\Query;
use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\EntityManagerInterface;
@ -25,6 +26,8 @@ use App\Ramcar\JOEventType;
use App\Ramcar\HubCriteria; use App\Ramcar\HubCriteria;
use App\Ramcar\ModeOfPayment; use App\Ramcar\ModeOfPayment;
use App\Ramcar\APIRiderStatus; use App\Ramcar\APIRiderStatus;
use App\Ramcar\VehicleStatusCondition;
use App\Ramcar\FuelType;
use App\Service\InvoiceGeneratorInterface; use App\Service\InvoiceGeneratorInterface;
use App\Service\RisingTideGateway; use App\Service\RisingTideGateway;
@ -49,6 +52,7 @@ use App\Entity\Customer;
use App\Entity\Hub; use App\Entity\Hub;
use App\Entity\Invoice; use App\Entity\Invoice;
use App\Entity\Vehicle; use App\Entity\Vehicle;
use App\Entity\VehicleManufacturer;
use DateTime; use DateTime;
use DateInterval; use DateInterval;
@ -71,9 +75,6 @@ class JobOrderController extends APIController
HubSelector $hub_select, HubDistributor $hub_dist, HubFilterLogger $hub_filter_logger, HubSelector $hub_select, HubDistributor $hub_dist, HubFilterLogger $hub_filter_logger,
HubFilteringGeoChecker $hub_geofence, EntityManagerInterface $em) HubFilteringGeoChecker $hub_geofence, EntityManagerInterface $em)
{ {
// TODO: fix all the responses
$this->denyAccessUnlessGranted('tapi_jo.request', null, 'No access.');
// check required parameters and api key // check required parameters and api key
$required_params = [ $required_params = [
'service_type', 'service_type',
@ -86,6 +87,10 @@ class JobOrderController extends APIController
'mobile_number', 'mobile_number',
'vehicle_manufacturer_id', 'vehicle_manufacturer_id',
'vehicle_model_id', 'vehicle_model_id',
'vehicle_model_year',
'vehicle_color',
'vehicle_condition',
'vehicle_fuel_type',
'plate_number' 'plate_number'
]; ];
@ -94,7 +99,8 @@ class JobOrderController extends APIController
return new APIResponse(false, $msg); return new APIResponse(false, $msg);
// get data from request // get data from request
$status = $this->getJobOrderRequestInfo($req, $data); $data = [];
$status = $this->getJobOrderRequestInfo($req, $em, $data);
if ($status != null) if ($status != null)
return new APIResponse(false, $status); return new APIResponse(false, $status);
@ -112,6 +118,8 @@ class JobOrderController extends APIController
$jo = new JobOrder(); $jo = new JobOrder();
$jo->setSource($data['source']) $jo->setSource($data['source'])
->setStatus(JOStatus::PENDING) ->setStatus(JOStatus::PENDING)
->setServiceType($data['service_type'])
->setWarrantyClass($data['warranty_class'])
->setDeliveryInstructions($data['instructions']) ->setDeliveryInstructions($data['instructions'])
->setTier1Notes('') ->setTier1Notes('')
->setTier2Notes('') ->setTier2Notes('')
@ -124,6 +132,7 @@ class JobOrderController extends APIController
->setLandmark($data['landmark']); ->setLandmark($data['landmark']);
$jo->setCustomer($data['customer']); $jo->setCustomer($data['customer']);
$jo->setCustomerVehicle($data['customer_vehicle']);
// set coordinates // set coordinates
$point = new Point($data['long'], $data['lat']); $point = new Point($data['long'], $data['lat']);
@ -136,10 +145,10 @@ class JobOrderController extends APIController
// TODO add promo to criteria if any // TODO add promo to criteria if any
// check promo // check promo
// put in criteria // put in criteria
if ($data['promo'] != null)
$icrit->addPromo($data['promo']); $icrit->addPromo($data['promo']);
$icrit->setCustomerVehicle($data['customer_vehicle']); $icrit->setCustomerVehicle($data['customer_vehicle']);
$jo->setCustomerVehicle($data['customer_vehicle']);
$icrit->addEntry($data['batt'], $data['trade_in_type'], 1); $icrit->addEntry($data['batt'], $data['trade_in_type'], 1);
@ -149,6 +158,7 @@ class JobOrderController extends APIController
// assign hub and rider // assign hub and rider
// check if hub is null // check if hub is null
$hub = $data['hub'];
if ($hub == null) if ($hub == null)
{ {
// TODO: need to factor out the setting of HubCriteria fields // 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 distance limit for mobile from env
// get value of hub_filter_enable from env // get value of hub_filter_enable from env
$dotenv = new Dotenv(); $dotenv = new Dotenv();
$dotenv->loadEnv(__DIR__.'/../../.env'); $dotenv->loadEnv(__DIR__.'/../../../.env');
$limit_distance = $_ENV['CUST_DISTANCE_LIMIT']; $limit_distance = $_ENV['CUST_DISTANCE_LIMIT'];
$hub_filter_enabled = $_ENV['HUB_FILTER_ENABLE']; $hub_filter_enabled = $_ENV['HUB_FILTER_ENABLE'];
@ -298,7 +308,7 @@ class JobOrderController extends APIController
$jo->setStatus(JOStatus::RIDER_ASSIGN); $jo->setStatus(JOStatus::RIDER_ASSIGN);
$jo->setStatusAutoAssign(AutoAssignStatus::HUB_ASSIGNED); $jo->setStatusAutoAssign(AutoAssignStatus::HUB_ASSIGNED);
if ($date_schedule != null) if ($data['date_schedule'] != null)
$jo->setDateSchedule($data['date_schedule']); $jo->setDateSchedule($data['date_schedule']);
// update redis hub_jo_count for hub // update redis hub_jo_count for hub
@ -1470,7 +1480,7 @@ class JobOrderController extends APIController
protected function getJobOrderRequestInfo(Request $req, EntityManagerInterface $em, &$data) protected function getJobOrderRequestInfo(Request $req, EntityManagerInterface $em, &$data)
{ {
$error = $this->validateRequest($req); $error = $this->validateRequest($req, $em);
if ($error != null) if ($error != null)
{ {
// there is a validation error // there is a validation error
@ -1481,7 +1491,7 @@ class JobOrderController extends APIController
// at this point, the request data has been validated // at this point, the request data has been validated
// trade-in type // 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) switch ($trade_in_type)
{ {
case TradeInType::MOTOLITE: case TradeInType::MOTOLITE:
@ -1507,12 +1517,12 @@ class JobOrderController extends APIController
$lat = $r->get('latitude'); $lat = $r->get('latitude');
// get service type // get service type
$stype = $this->cleanText($r->get('service_type')); $stype = $this->cleanText($r->get('service_type', ''));
// get mode of payment // 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 // check for 'false' text
if ($advance_order === false || $advance_order === 0 || $advance_order === '0' || $advance_order == 'false') if ($advance_order === false || $advance_order === 0 || $advance_order === '0' || $advance_order == 'false')
$flag_advance_order = false; $flag_advance_order = false;
@ -1525,28 +1535,22 @@ class JobOrderController extends APIController
$hub = $em->getRepository(Hub::class)->find($hub_id); $hub = $em->getRepository(Hub::class)->find($hub_id);
$schedule_date = $r->get('date_schedule'); $schedule_date = $r->get('date_schedule');
$slot_id = $r->get('slot_id');
// process the jo date schedule // process the jo date schedule
$date_schedule = null; $date_schedule = null;
if ((strlen($schedule_date) > 0) && (strlen($slot_id) > 0)) if (strlen($schedule_date) > 0)
{ $date_schedule = DateTime::createFromFormat('Y-m-d H:i', $schedule_date);
$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'));
}
}
// get promo // get promo
$promo_id = $r->get('promo_id'); $promo_id = $r->get('promo_id', 0);
$promo = $em->getRepository(Promo::class)->find($promo_id); $promo = $em->getRepository(Promo::class)->find($promo_id);
// check battery // 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); $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 // get customer and vehicle info
$fname = trim($r->get('first_name', '')); $fname = trim($r->get('first_name', ''));
@ -1556,19 +1560,24 @@ class JobOrderController extends APIController
// validate mobile number // validate mobile number
$clean_mobile = $this->cleanPhoneNumber($mobile); $clean_mobile = $this->cleanPhoneNumber($mobile);
$vmanu_id = $r->get('vehicle_manufacturer'); $vmanu_id = $r->get('vehicle_manufacturer_id', 0);
// find vehicle manufacturer // find vehicle manufacturer
$vmanu = $em->getRepository(VehicleManufacturer::class)->find($vmanu_id); $vmanu = $em->getRepository(VehicleManufacturer::class)->find($vmanu_id);
$vmodel_id = $r->get('vehicle_model'); $vmodel_id = $r->get('vehicle_model_id', 0);
// find vehicle // find vehicle
$vehicle = $em->getRepository(Vehicle::class)->find($vmodel_id); $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 number
$clean_plate = $this->cleanPlateNumber($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 = [ $c_data = [
'first_name' => $fname, 'first_name' => $fname,
'last_name' => $lname, 'last_name' => $lname,
@ -1576,6 +1585,10 @@ class JobOrderController extends APIController
'vmanu' => $vmanu, 'vmanu' => $vmanu,
'vehicle' => $vehicle, 'vehicle' => $vehicle,
'plate_number' => $clean_plate, 'plate_number' => $clean_plate,
'model_year' => $model_year,
'condition' => $v_condition,
'color' => $color,
'fuel_type' => $fuel_type,
]; ];
// process customer and vehicle information // process customer and vehicle information
@ -1598,6 +1611,7 @@ class JobOrderController extends APIController
'customer' => $cust_data['customer'], 'customer' => $cust_data['customer'],
'customer_vehicle' => $cust_data['customer_vehicle'], 'customer_vehicle' => $cust_data['customer_vehicle'],
'source' => TransactionOrigin::THIRD_PARTY, 'source' => TransactionOrigin::THIRD_PARTY,
'warranty_class' => $warranty_class,
]; ];
return null; return null;
@ -1608,15 +1622,16 @@ class JobOrderController extends APIController
$r = $req->request; $r = $req->request;
// validate trade-in type // validate trade-in type
$trade_in_type = $this->cleanText($r->get('trade_in_type')); $trade_in_type = $this->cleanText($r->get('trade_in_type', ''));
if (!TradeInType::validate($trade_in_type)) if ((!empty($trade_in_type)) &&
(!TradeInType::validate($trade_in_type)))
{ {
$message = 'Invalid trade in type'; $message = 'Invalid trade in type';
return $message; return $message;
} }
// validate service type // validate service type
$stype = $this->cleanText($r->get('service_type')); $stype = $this->cleanText($r->get('service_type', ''));
if (!ServiceType::validate($stype)) if (!ServiceType::validate($stype))
{ {
$message = 'Invalid service type'; $message = 'Invalid service type';
@ -1624,7 +1639,7 @@ class JobOrderController extends APIController
} }
// validate mode of payment // 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)) if (!ModeOfPayment::validate($payment_mode))
{ {
$message = 'Invalid mode of payment'; $message = 'Invalid mode of payment';
@ -1633,7 +1648,7 @@ class JobOrderController extends APIController
// check promo // check promo
$promo = null; $promo = null;
$promo_id = $r->get('promo_id'); $promo_id = $r->get('promo_id', 0);
if (!empty($promo_id)) if (!empty($promo_id))
{ {
$promo = $em->getRepository(Promo::class)->find($promo_id); $promo = $em->getRepository(Promo::class)->find($promo_id);
@ -1646,8 +1661,8 @@ class JobOrderController extends APIController
// check battery // check battery
$batt = null; $batt = null;
$batt_id = $req->request->get('batt_id'); $batt_id = $req->request->get('battery_id', 0);
if ($empty($batt_id)) if (!empty($batt_id))
{ {
$batt = $em->getRepository(Battery::class)->find($batt_id); $batt = $em->getRepository(Battery::class)->find($batt_id);
if ($batt == null) if ($batt == null)
@ -1667,7 +1682,7 @@ class JobOrderController extends APIController
} }
$vmanu = null; $vmanu = null;
$vmanu_id = $r->get('vehicle_manufacturer'); $vmanu_id = $r->get('vehicle_manufacturer_id', 0);
// validate the vehicle manufacturer id // validate the vehicle manufacturer id
// find vehicle manufacturer // find vehicle manufacturer
$vmanu = $em->getRepository(VehicleManufacturer::class)->find($vmanu_id); $vmanu = $em->getRepository(VehicleManufacturer::class)->find($vmanu_id);
@ -1678,23 +1693,39 @@ class JobOrderController extends APIController
} }
$vmodel = null; $vmodel = null;
$vmodel_id = $r->get('vehicle_model'); $vmodel_id = $r->get('vehicle_model_id', 0);
// validate the vehicle model id // validate the vehicle model id
// find vehicle // find vehicle
$vmodel = $em->getRepository(Vehicle::class)->find($vmodel_id); $vmodel = $em->getRepository(Vehicle::class)->find($vmodel_id);
if ($vmodel = null) if ($vmodel == null)
{ {
$message = 'Invalid vehicle model id.'; $message = 'Invalid vehicle model id.';
return $message; return $message;
} }
// confirm that vehicle model's manufacturer is the same as the one in vehicle // 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.'; $message = 'Invalid vehicle manufacturer id for vehicle model.';
return $message; 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; return null;
} }
@ -1714,8 +1745,8 @@ class JobOrderController extends APIController
$cust_vehicle = null; $cust_vehicle = null;
// find customer + customer vehicle combo // find customer + customer vehicle combo
$cv = $this->findCustomerAndCustomerVehicle($data, $em); $cust_vehicle = $this->findCustomerAndCustomerVehicle($data, $em);
if ($cv == null) if ($cust_vehicle == null)
{ {
// find customer given phone number // find customer given phone number
$cust = $em->getRepository(Customer::class)->findOneBy(['phone_mobile' => $mobile]); $cust = $em->getRepository(Customer::class)->findOneBy(['phone_mobile' => $mobile]);
@ -1749,34 +1780,39 @@ class JobOrderController extends APIController
$em->persist($cust); $em->persist($cust);
// add customer vehicle // add customer vehicle
$cust_vehicle = $this->createCustomerVehicle($em, $cust, $vehicle); $cust_vehicle = $this->createCustomerVehicle($em, $cust, $data);
} }
else else
{ {
// create customer vehicle // create customer vehicle
$cust_vehicle = $this->createCustomerVehicle($em, $cust, $vehicle); $cust_vehicle = $this->createCustomerVehicle($em, $cust, $data);
} }
$em->flush(); $em->flush();
} }
$c_data = [ $c_data = [
'customer' => $cust, 'customer' => $cust_vehicle->getCustomer(),
'customer_vehicle' => $cust_vehicle, 'customer_vehicle' => $cust_vehicle,
]; ];
return $c_data; return $c_data;
} }
protected function createCustomerVehicle(EntityManagerInterface $em, Customer $cust, Vehicle $vehicle) protected function createCustomerVehicle(EntityManagerInterface $em, Customer $cust, $data)
{ {
// add customer vehicle // add customer vehicle
$cust_vehicle = new CustomerVehicle(); $cust_vehicle = new CustomerVehicle();
$cust_vehicle->setCustomer($cust) $cust_vehicle->setCustomer($cust)
->setPlateNumber($plate_number) ->setPlateNumber($data['plate_number'])
->setVehicle($vehicle); ->setVehicle($data['vehicle'])
->setModelYear($data['model_year'])
->setStatusCondition($data['condition'])
->setColor($data['color'])
->setHasMotoliteBattery(true)
->setFuelType($data['fuel_type']);
$em->persist($cust_vehicle); $em->persist($cust_vehicle);