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
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

View file

@ -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:

View file

@ -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);