Fix checking for customer job orders. #773

This commit is contained in:
Korina Cordero 2023-11-09 16:30:57 +08:00
parent 35456cfb19
commit 806418db52
5 changed files with 83 additions and 19 deletions

View file

@ -49,6 +49,7 @@ use App\Service\HubDistributor;
use App\Service\HubFilterLogger;
use App\Service\HubFilteringGeoChecker;
use App\Service\HashGenerator;
use App\Service\JobOrderManager;
use App\Entity\MobileSession;
use App\Entity\Customer;
@ -867,7 +868,7 @@ class APIController extends Controller implements LoggedController
MapTools $map_tools, InventoryManager $im, MQTTClient $mclient,
RiderAssignmentHandlerInterface $rah, PromoLogger $promo_logger,
HubSelector $hub_select, HubDistributor $hub_dist, HubFilterLogger $hub_filter_logger,
HubFilteringGeoChecker $hub_geofence)
HubFilteringGeoChecker $hub_geofence, JobOrderManager $jo_manager)
{
// check required parameters and api key
$required_params = [
@ -928,7 +929,15 @@ class APIController extends Controller implements LoggedController
->setErrorMessage('No customer information found');
return $res->getReturnResponse();
}
// check if customer has more than one job order already
$flag_new_cust = false;
$cust_jo_count = $jo_manager->getCustomerJobOrderCount($cust);
if ($cust_jo_count <= 1)
$flag_new_cust = true;
$jo->setCustomer($cust);
$jo->setCustNew($flag_new_cust);
// validate service type
$stype = $req->request->get('service_type');
@ -2732,7 +2741,7 @@ class APIController extends Controller implements LoggedController
MapTools $map_tools, InventoryManager $im, MQTTClient $mclient,
RiderAssignmentHandlerInterface $rah, PromoLogger $promo_logger,
HubSelector $hub_select, HubDistributor $hub_dist, HubFilterLogger $hub_filter_logger,
HubFilteringGeoChecker $hub_geofence)
HubFilteringGeoChecker $hub_geofence, JobOrderManager $jo_manager)
{
// check required parameters and api key
$required_params = [
@ -2857,7 +2866,16 @@ class APIController extends Controller implements LoggedController
// ->setErrorMessage('No customer information found');
// return $res->getReturnResponse();
// }
// check if customer has more than one job order already
$flag_new_cust = false;
$cust_jo_count = $jo_manager->getCustomerJobOrderCount($cust);
error_log('cust jo count for customer id ' .$cust->getID() . ' ' . $cust_jo_count);
if ($cust_jo_count <= 1)
$flag_new_cust = true;
$jo->setCustomer($cust);
$jo->setCustNew($flag_new_cust);
// validate service type
$stype = $req->request->get('service_type');

View file

@ -20,6 +20,7 @@ use App\Service\HubSelector;
use App\Service\HubDistributor;
use App\Service\HubFilterLogger;
use App\Service\HubFilteringGeoChecker;
use App\Service\JobOrderManager;
use App\Ramcar\ServiceType;
use App\Ramcar\APIRiderStatus;
use App\Ramcar\InvoiceCriteria;
@ -482,7 +483,8 @@ class JobOrderController extends ApiController
HubSelector $hub_select,
HubDistributor $hub_dist,
HubFilterLogger $hub_filter_logger,
HubFilteringGeoChecker $hub_geofence
HubFilteringGeoChecker $hub_geofence,
JobOrderManager $jo_manager
) {
// validate params
$validity = $this->validateRequest($req, [
@ -594,7 +596,16 @@ class JobOrderController extends ApiController
// ->setErrorMessage('No customer information found');
// return $res->getReturnResponse();
// }
// check if customer has more than one job order already
$flag_new_cust = false;
$cust_jo_count = $jo_manager->getCustomerJobOrderCount($cust);
if ($cust_jo_count <= 1)
$flag_new_cust = true;
$jo->setCustomer($cust);
$jo->setCustNew($flag_new_cust);
// validate service type
$stype = $req->request->get('service_type');
@ -956,7 +967,8 @@ class JobOrderController extends ApiController
HubSelector $hub_select,
HubDistributor $hub_dist,
HubFilterLogger $hub_filter_logger,
HubFilteringGeoChecker $hub_geofence
HubFilteringGeoChecker $hub_geofence,
JobOrderManager $jo_manager
) {
// validate params
$validity = $this->validateRequest($req, [
@ -1011,7 +1023,16 @@ class JobOrderController extends ApiController
if ($cust == null) {
return new ApiResponse(false, 'No customer information found.');
}
// check if customer has more than one job order already
$flag_new_cust = false;
$cust_jo_count = $jo_manager->getCustomerJobOrderCount($cust);
if ($cust_jo_count <= 1)
$flag_new_cust = true;
$jo->setCustomer($cust);
$jo->setCustNew($flag_new_cust);
// validate service type
$stype = $req->request->get('service_type');

View file

@ -45,6 +45,7 @@ use App\Service\HubFilteringGeoChecker;
use App\Service\RiderTracker;
use App\Service\PromoLogger;
use App\Service\MapTools;
use App\Service\JobOrderManager;
use App\Entity\JobOrder;
use App\Entity\CustomerVehicle;
@ -78,7 +79,7 @@ class JobOrderController extends ApiController
FCMSender $fcmclient,
RiderAssignmentHandlerInterface $rah, PromoLogger $promo_logger,
HubSelector $hub_select, HubDistributor $hub_dist, HubFilterLogger $hub_filter_logger,
HubFilteringGeoChecker $hub_geofence, EntityManagerInterface $em)
HubFilteringGeoChecker $hub_geofence, EntityManagerInterface $em, JobOrderManager $jo_manager)
{
$this->denyAccessUnlessGranted('tapi_jo.request', null, 'No access.');
@ -107,7 +108,7 @@ class JobOrderController extends ApiController
// get data from request
$data = [];
$status = $this->getJobOrderRequestInfo($req, $em, $data);
$status = $this->getJobOrderRequestInfo($req, $em, $jo_manager, $data);
if ($status != null)
return new APIResponse(false, $status);
@ -1246,7 +1247,7 @@ class JobOrderController extends ApiController
return $file_path;
}
protected function getJobOrderRequestInfo(Request $req, EntityManagerInterface $em, &$data)
protected function getJobOrderRequestInfo(Request $req, EntityManagerInterface $em, JobOrderManager $jo_manager, &$data)
{
$error = $this->validateJORequest($req, $em);
if ($error != null)
@ -1369,7 +1370,7 @@ class JobOrderController extends ApiController
];
// process customer and vehicle information
$cust_data = $this->processCustomerAndVehicleInformation($c_data, $em);
$cust_data = $this->processCustomerAndVehicleInformation($c_data, $em, $jo_manager);
$data = [
'trade_in_type' => $trade_in_type,
@ -1546,7 +1547,7 @@ class JobOrderController extends ApiController
return null;
}
protected function processCustomerAndVehicleInformation($data, EntityManagerInterface $em)
protected function processCustomerAndVehicleInformation($data, EntityManagerInterface $em, JobOrderManager $jo_manager)
{
$c_data = [];
@ -1611,14 +1612,14 @@ class JobOrderController extends ApiController
$em->flush();
}
// check if customer already has existing job orders
// check if customer has more than one job order already
if ($cust != null)
{
$cust_jos = $cust->getJobOrders();
if (count($cust_jos) <= 1)
$cust_jo_count = $jo_manager->getCustomerJobOrderCount($cust);
if ($cust_jo_count <= 1)
$flag_new_cust = true;
}
$c_data = [
'customer' => $cust_vehicle->getCustomer(),
'customer_vehicle' => $cust_vehicle,

View file

@ -68,6 +68,7 @@ use App\Service\PromoLogger;
use App\Service\HubSelector;
use App\Service\HubDistributor;
use App\Service\HubFilteringGeoChecker;
use App\Service\JobOrderManager;
use CrEOF\Spatial\PHP\Types\Geometry\Point;
@ -94,6 +95,7 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface
protected $hub_geofence;
protected $cust_distance_limit;
protected $hub_filter_enable;
protected $jo_manager;
protected $template_hash;
@ -102,7 +104,7 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface
TranslatorInterface $translator, RiderAssignmentHandlerInterface $rah,
string $country_code, WarrantyHandler $wh, RisingTideGateway $rt,
PromoLogger $promo_logger, HubDistributor $hub_dist, HubFilteringGeoChecker $hub_geofence,
string $cust_distance_limit, string $hub_filter_enabled)
string $cust_distance_limit, string $hub_filter_enabled, JobOrderManager $jo_manager)
{
$this->em = $em;
$this->ic = $ic;
@ -118,6 +120,7 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface
$this->hub_geofence = $hub_geofence;
$this->cust_distance_limit = $cust_distance_limit;
$this->hub_filter_enabled = $hub_filter_enabled;
$this->jo_manager = $jo_manager;
$this->loadTemplates();
}
@ -388,13 +391,13 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface
->setResearchSms($req->request->get('flag_research_sms', false))
->setResearchEmail($req->request->get('flag_research_email', false))
->setDpaConsent($is_dpa_checked);
// check if customer has more than one job order already
$cust_jos = $customer->getJobOrders();
if (count($cust_jos) <= 1)
$flag_new_cust = true;
}
// check if customer has more than one job order already
$cust_jo_count = $this->jo_manager->getCustomerJobOrderCount($customer);
if ($cust_jo_count <= 1)
$flag_new_cust = true;
// check if lat and lng are provided
if (empty($req->request->get('coord_lng')) || empty($req->request->get('coord_lat'))) {
$error_array['coordinates'] = 'No map coordinates provided. Please click on a location on the map.';

View file

@ -5,9 +5,12 @@ namespace App\Service;
use App\Entity\JobOrder;
use App\Ramcar\ServiceType;
use App\Ramcar\JOStatus;
use Doctrine\ORM\EntityManagerInterface;
use PDO;
class JobOrderManager
{
protected $em;
@ -36,6 +39,24 @@ class JobOrderManager
return false;
}
public function getCustomerJobOrderCount($customer)
{
$db = $this->em->getConnection();
$cust_id = $customer->getID();
$query_sql = 'SELECT COUNT(*) AS jo_count FROM job_order WHERE customer_id = :cust_id AND status != :status_cancelled';
$query_stmt = $db->prepare($query_sql);
$query_stmt->bindValue('cust_id', $cust_id);
$query_stmt->bindValue('status_cancelled', JOStatus::CANCELLED);
$jo_results = $query_stmt->executeQuery();
$results = $jo_results->fetchAssociative();
return $results['jo_count'];
}
protected function updateCustomerVehicleBattery($cust_vehicle, $invoice)
{
if (($cust_vehicle != null) && ($invoice != null))