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\HubFilterLogger;
use App\Service\HubFilteringGeoChecker; use App\Service\HubFilteringGeoChecker;
use App\Service\HashGenerator; use App\Service\HashGenerator;
use App\Service\JobOrderManager;
use App\Entity\MobileSession; use App\Entity\MobileSession;
use App\Entity\Customer; use App\Entity\Customer;
@ -867,7 +868,7 @@ class APIController extends Controller implements LoggedController
MapTools $map_tools, InventoryManager $im, MQTTClient $mclient, MapTools $map_tools, InventoryManager $im, MQTTClient $mclient,
RiderAssignmentHandlerInterface $rah, PromoLogger $promo_logger, RiderAssignmentHandlerInterface $rah, PromoLogger $promo_logger,
HubSelector $hub_select, HubDistributor $hub_dist, HubFilterLogger $hub_filter_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 // check required parameters and api key
$required_params = [ $required_params = [
@ -928,7 +929,15 @@ class APIController extends Controller implements LoggedController
->setErrorMessage('No customer information found'); ->setErrorMessage('No customer information found');
return $res->getReturnResponse(); 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->setCustomer($cust);
$jo->setCustNew($flag_new_cust);
// validate service type // validate service type
$stype = $req->request->get('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, MapTools $map_tools, InventoryManager $im, MQTTClient $mclient,
RiderAssignmentHandlerInterface $rah, PromoLogger $promo_logger, RiderAssignmentHandlerInterface $rah, PromoLogger $promo_logger,
HubSelector $hub_select, HubDistributor $hub_dist, HubFilterLogger $hub_filter_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 // check required parameters and api key
$required_params = [ $required_params = [
@ -2857,7 +2866,16 @@ class APIController extends Controller implements LoggedController
// ->setErrorMessage('No customer information found'); // ->setErrorMessage('No customer information found');
// return $res->getReturnResponse(); // 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->setCustomer($cust);
$jo->setCustNew($flag_new_cust);
// validate service type // validate service type
$stype = $req->request->get('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\HubDistributor;
use App\Service\HubFilterLogger; use App\Service\HubFilterLogger;
use App\Service\HubFilteringGeoChecker; use App\Service\HubFilteringGeoChecker;
use App\Service\JobOrderManager;
use App\Ramcar\ServiceType; use App\Ramcar\ServiceType;
use App\Ramcar\APIRiderStatus; use App\Ramcar\APIRiderStatus;
use App\Ramcar\InvoiceCriteria; use App\Ramcar\InvoiceCriteria;
@ -482,7 +483,8 @@ class JobOrderController extends ApiController
HubSelector $hub_select, HubSelector $hub_select,
HubDistributor $hub_dist, HubDistributor $hub_dist,
HubFilterLogger $hub_filter_logger, HubFilterLogger $hub_filter_logger,
HubFilteringGeoChecker $hub_geofence HubFilteringGeoChecker $hub_geofence,
JobOrderManager $jo_manager
) { ) {
// validate params // validate params
$validity = $this->validateRequest($req, [ $validity = $this->validateRequest($req, [
@ -594,7 +596,16 @@ class JobOrderController extends ApiController
// ->setErrorMessage('No customer information found'); // ->setErrorMessage('No customer information found');
// return $res->getReturnResponse(); // 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->setCustomer($cust);
$jo->setCustNew($flag_new_cust);
// validate service type // validate service type
$stype = $req->request->get('service_type'); $stype = $req->request->get('service_type');
@ -956,7 +967,8 @@ class JobOrderController extends ApiController
HubSelector $hub_select, HubSelector $hub_select,
HubDistributor $hub_dist, HubDistributor $hub_dist,
HubFilterLogger $hub_filter_logger, HubFilterLogger $hub_filter_logger,
HubFilteringGeoChecker $hub_geofence HubFilteringGeoChecker $hub_geofence,
JobOrderManager $jo_manager
) { ) {
// validate params // validate params
$validity = $this->validateRequest($req, [ $validity = $this->validateRequest($req, [
@ -1011,7 +1023,16 @@ class JobOrderController extends ApiController
if ($cust == null) { if ($cust == null) {
return new ApiResponse(false, 'No customer information found.'); 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->setCustomer($cust);
$jo->setCustNew($flag_new_cust);
// validate service type // validate service type
$stype = $req->request->get('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\RiderTracker;
use App\Service\PromoLogger; use App\Service\PromoLogger;
use App\Service\MapTools; use App\Service\MapTools;
use App\Service\JobOrderManager;
use App\Entity\JobOrder; use App\Entity\JobOrder;
use App\Entity\CustomerVehicle; use App\Entity\CustomerVehicle;
@ -78,7 +79,7 @@ class JobOrderController extends ApiController
FCMSender $fcmclient, FCMSender $fcmclient,
RiderAssignmentHandlerInterface $rah, PromoLogger $promo_logger, RiderAssignmentHandlerInterface $rah, PromoLogger $promo_logger,
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, JobOrderManager $jo_manager)
{ {
$this->denyAccessUnlessGranted('tapi_jo.request', null, 'No access.'); $this->denyAccessUnlessGranted('tapi_jo.request', null, 'No access.');
@ -107,7 +108,7 @@ class JobOrderController extends ApiController
// get data from request // get data from request
$data = []; $data = [];
$status = $this->getJobOrderRequestInfo($req, $em, $data); $status = $this->getJobOrderRequestInfo($req, $em, $jo_manager, $data);
if ($status != null) if ($status != null)
return new APIResponse(false, $status); return new APIResponse(false, $status);
@ -1246,7 +1247,7 @@ class JobOrderController extends ApiController
return $file_path; 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); $error = $this->validateJORequest($req, $em);
if ($error != null) if ($error != null)
@ -1369,7 +1370,7 @@ class JobOrderController extends ApiController
]; ];
// process customer and vehicle information // process customer and vehicle information
$cust_data = $this->processCustomerAndVehicleInformation($c_data, $em); $cust_data = $this->processCustomerAndVehicleInformation($c_data, $em, $jo_manager);
$data = [ $data = [
'trade_in_type' => $trade_in_type, 'trade_in_type' => $trade_in_type,
@ -1546,7 +1547,7 @@ class JobOrderController extends ApiController
return null; return null;
} }
protected function processCustomerAndVehicleInformation($data, EntityManagerInterface $em) protected function processCustomerAndVehicleInformation($data, EntityManagerInterface $em, JobOrderManager $jo_manager)
{ {
$c_data = []; $c_data = [];
@ -1611,14 +1612,14 @@ class JobOrderController extends ApiController
$em->flush(); $em->flush();
} }
// check if customer already has existing job orders // check if customer has more than one job order already
if ($cust != null) if ($cust != null)
{ {
$cust_jos = $cust->getJobOrders(); $cust_jo_count = $jo_manager->getCustomerJobOrderCount($cust);
if (count($cust_jos) <= 1) if ($cust_jo_count <= 1)
$flag_new_cust = true; $flag_new_cust = true;
} }
$c_data = [ $c_data = [
'customer' => $cust_vehicle->getCustomer(), 'customer' => $cust_vehicle->getCustomer(),
'customer_vehicle' => $cust_vehicle, 'customer_vehicle' => $cust_vehicle,

View file

@ -68,6 +68,7 @@ use App\Service\PromoLogger;
use App\Service\HubSelector; use App\Service\HubSelector;
use App\Service\HubDistributor; use App\Service\HubDistributor;
use App\Service\HubFilteringGeoChecker; use App\Service\HubFilteringGeoChecker;
use App\Service\JobOrderManager;
use CrEOF\Spatial\PHP\Types\Geometry\Point; use CrEOF\Spatial\PHP\Types\Geometry\Point;
@ -94,6 +95,7 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface
protected $hub_geofence; protected $hub_geofence;
protected $cust_distance_limit; protected $cust_distance_limit;
protected $hub_filter_enable; protected $hub_filter_enable;
protected $jo_manager;
protected $template_hash; protected $template_hash;
@ -102,7 +104,7 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface
TranslatorInterface $translator, RiderAssignmentHandlerInterface $rah, TranslatorInterface $translator, RiderAssignmentHandlerInterface $rah,
string $country_code, WarrantyHandler $wh, RisingTideGateway $rt, string $country_code, WarrantyHandler $wh, RisingTideGateway $rt,
PromoLogger $promo_logger, HubDistributor $hub_dist, HubFilteringGeoChecker $hub_geofence, 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->em = $em;
$this->ic = $ic; $this->ic = $ic;
@ -118,6 +120,7 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface
$this->hub_geofence = $hub_geofence; $this->hub_geofence = $hub_geofence;
$this->cust_distance_limit = $cust_distance_limit; $this->cust_distance_limit = $cust_distance_limit;
$this->hub_filter_enabled = $hub_filter_enabled; $this->hub_filter_enabled = $hub_filter_enabled;
$this->jo_manager = $jo_manager;
$this->loadTemplates(); $this->loadTemplates();
} }
@ -388,13 +391,13 @@ class ResqJobOrderHandler implements JobOrderHandlerInterface
->setResearchSms($req->request->get('flag_research_sms', false)) ->setResearchSms($req->request->get('flag_research_sms', false))
->setResearchEmail($req->request->get('flag_research_email', false)) ->setResearchEmail($req->request->get('flag_research_email', false))
->setDpaConsent($is_dpa_checked); ->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 // check if lat and lng are provided
if (empty($req->request->get('coord_lng')) || empty($req->request->get('coord_lat'))) { 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.'; $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\Entity\JobOrder;
use App\Ramcar\ServiceType; use App\Ramcar\ServiceType;
use App\Ramcar\JOStatus;
use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\EntityManagerInterface;
use PDO;
class JobOrderManager class JobOrderManager
{ {
protected $em; protected $em;
@ -36,6 +39,24 @@ class JobOrderManager
return false; 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) protected function updateCustomerVehicleBattery($cust_vehicle, $invoice)
{ {
if (($cust_vehicle != null) && ($invoice != null)) if (($cust_vehicle != null) && ($invoice != null))