diff --git a/src/Controller/APIController.php b/src/Controller/APIController.php index 64662057..821fa490 100644 --- a/src/Controller/APIController.php +++ b/src/Controller/APIController.php @@ -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'); diff --git a/src/Controller/CustomerAppAPI/JobOrderController.php b/src/Controller/CustomerAppAPI/JobOrderController.php index 07356ce2..3bffbfc6 100644 --- a/src/Controller/CustomerAppAPI/JobOrderController.php +++ b/src/Controller/CustomerAppAPI/JobOrderController.php @@ -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'); diff --git a/src/Controller/TAPI/JobOrderController.php b/src/Controller/TAPI/JobOrderController.php index d173e314..023543be 100644 --- a/src/Controller/TAPI/JobOrderController.php +++ b/src/Controller/TAPI/JobOrderController.php @@ -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, diff --git a/src/Service/JobOrderHandler/ResqJobOrderHandler.php b/src/Service/JobOrderHandler/ResqJobOrderHandler.php index 8ccde62c..8be6bd4c 100644 --- a/src/Service/JobOrderHandler/ResqJobOrderHandler.php +++ b/src/Service/JobOrderHandler/ResqJobOrderHandler.php @@ -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.'; diff --git a/src/Service/JobOrderManager.php b/src/Service/JobOrderManager.php index c54557d6..7f097267 100644 --- a/src/Service/JobOrderManager.php +++ b/src/Service/JobOrderManager.php @@ -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))