diff --git a/.gitignore b/.gitignore index a599a01e..e0e9251f 100755 --- a/.gitignore +++ b/.gitignore @@ -33,3 +33,5 @@ build/ composer.lock .env .phpunit* +phpqueue.sh + diff --git a/app/Config/Filters.php b/app/Config/Filters.php index 0855ec3e..2cf9a260 100755 --- a/app/Config/Filters.php +++ b/app/Config/Filters.php @@ -12,6 +12,7 @@ use CodeIgniter\Filters\SecureHeaders; use App\Filters\AuthMVC; use App\Filters\HttpRequestLog; use App\Filters\CloseDbConnection; +use App\Filters\AuthClientApi; use App\Filters\AuthJWT; @@ -34,6 +35,7 @@ class Filters extends BaseConfig 'authMVC' => AuthMVC::class, 'HttpRequestLog' => HttpRequestLog::class, 'authJWT' => AuthJWT::class, + 'AuthClientApi' => AuthClientApi::class, 'CloseDbConnection' => CloseDbConnection::class ]; diff --git a/app/Config/Routes.php b/app/Config/Routes.php index 45619181..7b42c29a 100755 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -32,6 +32,7 @@ $routes->get("sendextraparam", "ClientController::sendextraparam"); $routes->get("updateRenewalData", "ClientController::updateRenewalData"); $routes->get("updateRenewalDataNotExistingClient", "ClientController::updateRenewalDataNotExistingClient"); $routes->get("updateRenewalInsurerData", "ClientController::updateRenewalInsurerData"); +$routes->get("sendMutipleToEmails", "MasterController::sendMutipleToEmails"); // $routes->post("iAgreeForAddOn", "EmployeeRestController::iAgreeForAddOn"); // $routes->get("sendCroneRemainderMail", "DashboardController::sendCroneRemainderMail"); // $routes->post("employeeUpload", "EmployeeRestController::employeeUpload"); @@ -72,6 +73,7 @@ $routes->group("/dashboard", ["filter" => "authMVC"], function ($routes) { $routes->get('get-notification', 'DashboardController::getDashboardNotifications'); $routes->get('acknowledge-notification/(:segment)', 'DashboardController::acknowledgeMessage/$1'); $routes->get('get-pending-action', 'PendingActionsController::getPendingActions'); + $routes->post("prepareClaimSearchData","DashboardController::prepareClaimSearchData"); }); $routes->group("/client", ["filter" => "authMVC"], function ($routes) { @@ -87,6 +89,8 @@ $routes->group("/client", ["filter" => "authMVC"], function ($routes) { $routes->get('view_deposit/(:num)', 'ClientController::view_Deposit/$1'); $routes->get('createtransaction', 'ClientController::createtransaction'); $routes->post('save_deposit', 'ClientController::saveDeposit'); + $routes->post("saveApiData", "ClientController::saveApiData"); + $routes->get("generateToken","ClientController::sendToken"); // $routes->get('view_Deposit/(:num)/(:num)','ClientController/view_Deposit/$1/$2'); $routes->group("notification", ["filter" => "authMVC"], function ($routes) { @@ -373,7 +377,7 @@ $routes->group("policy_tranction", ["filter" => "authMVC"], function ($routes) { }); $routes->group("report", ["filter" => "authMVC"], function ($routes) { - $routes->get("list", "PolicyTransactionController::reportBDS"); + $routes->match(['get', 'post'],"list", "PolicyTransactionController::reportBDS"); $routes->get("report-varience-list", "PolicyTransactionController::reportVarience"); $routes->get("report-business-list", "PolicyTransactionController::reportBusinessList"); $routes->get("report-finance-list", "PolicyTransactionController::reportFinanceList"); @@ -553,3 +557,16 @@ $routes->group("/ticket", ["filter" => "authMVC"], function ($routes) { // $routes->post('ticket_messages','TicketController::getTicketMessage'); }); +$routes->group("clientApi",["filter" => "AuthClientApi"], function ($routes){ + + $routes->post("getPolicyMaster","ClientAPIController::sendPolicyMaster"); + $routes->post("getEmployeeMaster","ClientAPIController::sendEmpMaster"); + $routes->post("getClaimMaster","ClientAPIController::sendClaimMaster"); + // $routes->post("pushData","ClientWebHooksController::sendSample"); +}); + +$routes->post("dispatchWebhookData/(:any)/(:any)",'ClientWebHooksController::pushData/$1/$2'); + + +$routes->post("retrieveWebhookDataEmp","ClientWebHooksController::pullData_emp"); +$routes->post("retrieveWebhookDataClaim","ClientWebHooksController::pullData_claim"); diff --git a/app/Controllers/ClientAPIController.php b/app/Controllers/ClientAPIController.php new file mode 100644 index 00000000..4a6bff4f --- /dev/null +++ b/app/Controllers/ClientAPIController.php @@ -0,0 +1,310 @@ +myLogger = \Config\Services::mylogger(); + + //models + $this->clientAPI = new ClientApiModel(); + $this->clientPolicy = new ClientPolicyModel(); + + //helper + $this->clientQueryHelper = new ClientQueryHelper(); + + //controller + $this->ticketController = new TicketController(); + + //variables + $this->operators = [ + + "GT" => ">", + "LT" => "<", + "GTE" => ">=", + "LTE" => "<=", + "ET" => "=", + "NE" => "!=", + "LIKE" => "LIKE", + "NL" => "NOT LIKE", + "BTW" => "BETWEEN", + "NB" => "NOT BETWEEN", + "IS" => "IS NULL", + "ISN" => "IS NOT NULL", + + ]; + $this->propertyNames = [ + 'empMaster' => ['name','emp_code','relationship','client_branch_id','emp_status','mobile','email_corporate','change_event','dob','doj','band','gender'], + 'claimMaster' => ['emp_name','insured_name',"emp_code",'policy_no','emp_mobile','emp_mail','hospital_name','claim_type','claim_status','claim_no','claim_amount','claim_date','si_amt','raised_date','registration_date','denial_date','denial_reason','approved_amount','utr_details','return_remark','cancel_remark','non_id_reason','head_rejection_reason'], + ]; + + } + + public function validateToken() + { + + try { + + $authHeader = $this->request->getHeaderLine('Authorization'); + + // Check if header exists + if (empty($authHeader)) { + $this->myLogger->log('error', 'Authorization header missing'); + return $this->respond(['status' => "Failure", 'error' => ['message' => 'Authorization header missing', 'code' => 401]], 401); + } + + // Check if Bearer is present + if (!str_contains($authHeader, 'Bearer ')) { + $this->myLogger->log('error', 'Authorization Bearer missing'); + return $this->respond(['status' => "Failure", 'error' => ['message' => 'Invalid Authorization header', 'code' => 401]], 401); + } + + // Extract the token + $token = str_replace('Bearer ', '', $authHeader); + if (empty($token)) { + + $this->myLogger->log('error', 'Empty Token'); + return $this->respond(['status' => "Failure", 'error' => ['message' => 'Invalid Token Format', 'code' => 401]], 401); + } + + try { + + // Extract client_id from the token + $client_id = ClientTokenHelper::extractClientId($token); + } catch (\Exception $e) { + $this->myLogger->log('error', 'Invalid Client Token Format'); + + return $this->respond(['status' => "Failure", 'error' => 'Invalid Token Format'], 401); + } + + // Fetch client details from the database + $client = $this->clientAPI->where('client_id', $client_id)->where("is_active", 1)->where("api_access", 1)->first(); + + // Client validation + if (!$client) { + $this->myLogger->log('error', 'Client Not Found or Unauthorized'); + return $this->respond(['status' => "Failure", 'error' => ['message' => 'Client not found or unauthorized', 'code' => '403']], 403); + } + + // Validate the token + if (hash_equals($client['client_token'], $token)) { + $this->myLogger->log('error', 'Access Granted For Client : ' . $client_id); + return true; + } else { + $this->myLogger->log('error', 'Invalid Token given for client : ' . $client_id); + return $this->respond([ + 'status' => "Failure", + 'error' => ['message' => 'Invalid token', 'code' => 401] + ], 401); + } + } catch (\Exception $e) { + log_message('error', 'Error in ClientAPIController:validateToken - ' . $e->getMessage()); + return $this->respond(['status' => "Failure", 'error' => ['message' => 'Internal Server Error', 'code' => 500]], 500); + } + } + + public function getClientIdfromToken() + { + $authHeader = $this->request->getHeaderLine('Authorization'); + $token = str_replace('Bearer ', '', $authHeader); + $client_id = ClientTokenHelper::extractClientId($token); + + $this->myLogger->log('error', 'Client ID: ' . $client_id); + return [$client_id, $token]; + } + + public function sendPolicyMaster() + { + + $data = $this->getClientIdfromToken(); + $client_id = $data[0]; + $keyString = $data[1]; + + // Extract only the actual key (after colon) + // list($prefix, $hexKey) = explode(':', $keyString, 2); + + // // Convert hex to binary (32 bytes) + // $key = hex2bin($hexKey); + + + $clientPolicy = $this->clientQueryHelper->clientPolicyMaster($client_id); + + $this->myLogger->log('error', 'Client Policy Master: ' . json_encode($clientPolicy)); + + + // $encode_data = ClientTokenHelper::encryptData($clientPolicy, $key); + // return $this->respond(['status' => "Success", 'data' => $encode_data], 200); + + return $this->respond(['status' => "Success", 'data' => $clientPolicy], 200); + } + + + public function sendEmpMaster() + { + $data = $this->getClientIdfromToken(); + $client_id = $data[0]; + $keyString = $data[1]; + + $received_data = $this->request->getJSON(); + $filters = $received_data->filters ?? null; + $limit = $received_data->limit ?? null; + $after = $received_data->after ?? 0; + + if ($limit > getenv('MAX_LIMIT')) { + + $this->myLogger->log('error', "Limit exceeds maximum allowed limit"); + return $this->respond(['status' => "Failure", 'error' => ['message' => 'Limit exceeds maximum allowed limit', 'code' => 400]], 400); + } + + try{ + if (!empty($filters)) { + $whereConditions = $this->prepareWhereConditions($filters,"",'empMaster'); + $employees = $this->clientQueryHelper->sendEmpMaster($client_id, $whereConditions,!empty($limit) ? $limit : 10,$after); + }else{ + $employees = $this->clientQueryHelper->sendEmpMaster($client_id, [],!empty($limit) ? $limit : 10,$after); + } + }catch (\InvalidArgumentException $e) { + return $this->respond(['status' => "Failure",'error' => ['message' => $e->getMessage(), 'code' => 400]], 400); + } + + foreach ($employees as &$employee){ + + $employee['policy_details'] = $this->clientQueryHelper->sendEmpPolicies($employee['ref_no']); + } + + $next_after = (count($employees) < $limit) ? null : ($after + $limit); + + if (!empty($employees)){ + return $this->respond(['Status' => "Success","data" => $employees,'next_after'=>$next_after], 200); + }else{ + return $this->respond(['Status' => "Failure","error" => ['message' => 'No Employees Found', 'code' => 404]], 404); + } + } + + public function sendClaimMaster() + { + $policy_type = $this->ticketController->ticketType; + + $data = $this->getClientIdfromToken(); + $client_id = $data[0]; + $keyString = $data[1]; + + $received_data = $this->request->getJSON(); + $filters = $received_data->filters ?? null; + $limit = $received_data->limit ?? null; + $after = $received_data->after ?? 0; + + if ($limit > getenv('MAX_LIMIT')) { + $this->myLogger->log('error', "Limit exceeds maximum allowed limit"); + return $this->respond(['status' => "Failure", 'error' => ['message' => 'Limit exceeds maximum allowed limit', 'code' => 400]], 400); + } + + try{ + if (!empty($filters)) { + $whereConditions = $this->prepareWhereConditions($filters,"ticket_master",'claimMaster'); + $claimDetails = $this->clientQueryHelper->sendClaimMaster($client_id,$whereConditions,!empty($limit) ? $limit : 10); + }else{ + $claimDetails = $this->clientQueryHelper->sendClaimMaster($client_id, [],!empty($limit) ? $limit : 10); + } + + } catch (\InvalidArgumentException $e) { + return $this->respond(['status' => "Failure",'error' => ['message' => $e->getMessage(), 'code' => 400]], 400); + } + + foreach ($claimDetails as &$claim){ + + $claim['policy_type'] = $policy_type[$claim['policy_type']]; + } + // dd($claimDetails); + + $next_after = (count($claimDetails) < $limit) ? null : ($after + $limit); + + + if (!empty($claimDetails)){ + return $this->respond(['Status' => "Success","data" => $claimDetails,'next_after'=>$next_after], 200); + }else{ + return $this->respond(['Status' => "Failure","error" => ['message' => 'No Claims Found', 'code' => 404]], 404); + } + } + + public function prepareWhereConditions($filters,$tableName = null,$model) + { + $whereConditions = []; + + foreach ($filters as $filter) { + + $propertyName = $filter->propertyName; + $operator = $filter->operator; + $this->myLogger->log('error', 'Property Name: ' . $propertyName); + if (!in_array($operator, array_keys($this->operators))) { + $this->myLogger->log('error', 'Invalid operator: ' . $operator); + throw new \InvalidArgumentException('Invalid operator'); + } + if (!in_array($propertyName, $this->propertyNames[$model])) { + $this->myLogger->log('error', 'Invalid property name: ' . $propertyName); + throw new \InvalidArgumentException('Invalid property name '.$propertyName); + } + $value = isset($filter->value) ? $filter->value : null; + $sqlOperator = $this->operators[$operator]; + + $column = !empty($tableName) ? "{$tableName}.{$propertyName}" : $propertyName; + + if ($sqlOperator === '=') { + $whereConditions[$column] = $value; + } else if($sqlOperator == "LIKE" || $sqlOperator == "NOT LIKE") { + $whereConditions["{$column} {$sqlOperator}"] = "%{$value}%"; + + } else if ($sqlOperator == 'BETWEEN') { + if (is_array($value) && count($value) === 2) { + // $whereConditions[] = [$column, $sqlOperator, $value[0]]; + $whereConditions["{$column} >="] = $value[0]; + $whereConditions["{$column} <="] = $value[1]; + + } else { + return $this->respond(['status' => "Failure", 'error' => ['message' => 'Invalid value for BETWEEN operator', 'code' => 400]], 400); + } + }else if ($sqlOperator == 'NOT BETWEEN') { + if (is_array($value) && count($value) === 2) { + $whereConditions["{$column} <="] = $value[0]; + $whereConditions["{$column} >="] = $value[1]; + } else { + return $this->respond(['status' => "Failure", 'error' => ['message' => 'Invalid value for NOT BETWEEN operator', 'code' => 400]], 400); + } + }else { + $whereConditions["{$column} {$sqlOperator}"] = $value; + } + + } + + return $whereConditions; + } + +} diff --git a/app/Controllers/ClientController.php b/app/Controllers/ClientController.php index 21f0afa5..ff19c48c 100755 --- a/app/Controllers/ClientController.php +++ b/app/Controllers/ClientController.php @@ -4,6 +4,7 @@ namespace App\Controllers; use App\Helpers\DepositHelper; use App\Helpers\MailHelper; +use App\Helpers\ClientTokenHelper; use App\helpers\JWTToken; use CodeIgniter\HTTP\IncomingRequest; use CodeIgniter\HTTP\RequestInterface; @@ -39,6 +40,7 @@ use App\Models\PolicyTransactionModel; use App\Models\PolicyTransactionStatusModel; use App\Models\VehicleModel; use App\Models\LeadsModel; +use App\Models\ClientApiModel; use App\Controllers\EmpDataServiceController; use App\Controllers\GoogleDriveController; @@ -83,7 +85,7 @@ class ClientController extends AdminController protected $policyTransactionStatusModel; protected $vehicleModel; protected $leadsModel; - + protected $clientApi; public function __construct() @@ -119,6 +121,7 @@ class ClientController extends AdminController $this->policyTransactionStatusModel = new PolicyTransactionStatusModel(); $this->vehicleModel = new VehicleModel(); $this->leadsModel = new LeadsModel(); + $this->clientApi = new ClientApiModel(); } //-------------------------------------------------------------------------------------------------------- @@ -751,7 +754,7 @@ class ClientController extends AdminController $editData['client_policy']['role'] = get_role_id(); $editData['notification'] = $this->notificationModel->select('template_name,enabled')->where('client_id', $id)->findAll(); $editData['placeHolders'] = ['member_name', 'member_mobile', 'nhance_logo', 'tpa_id', 'ecard_download_link', 'client_logo', 'policy_no', 'member_summary', 'app_link', 'post_enrollment_app_link', 'client_name']; - + $editData['api_data'] = $this->clientApi->where("client_id", $id)->where("is_active",1)->first(); // dd($editData); echo view('layout/header', $headerData); echo view('client_onboarding', $editData); @@ -4596,6 +4599,11 @@ class ClientController extends AdminController // $employeeRestController->employeesOnboardProcess(['file_id' => 835]); // $employeeRestController->employeesEnrollmentInsert(['file_id' => 836]); // $r = Jobs::addJob(['job_name' => 'employeesEnrollmentInsert','payload' => ['file_id' => 721]]); + $empServiceController = new EmployeeServiceController(); + // $res = $empServiceController->excelFileFormatValidation(['file_id' => '873']); + // $res = $empServiceController->excelFileDataValidation(['file_id' => '874']); + // $res = $empServiceController->employeesSIEnhanceProcess(['file_id' => '874']); + // dd('-----', $res); // ----------EMP DATA SERVICE CONTROLLER-------------------------------------------------------------------------------- @@ -4776,6 +4784,15 @@ class ClientController extends AdminController // dd($finalJson); + // $baseWhere = [ + // 'client_id' => 159, + // 'client_policy_id' => 336, + // 'insurer_id' => 1, + // 'cd_ac_pk' => 56, + // 'event_name' => "addition", + // ]; + // $return_value = check_cd_entry_exist($baseWhere); + // dd($return_value); } @@ -5683,6 +5700,40 @@ class ClientController extends AdminController return $result; } + public function saveApiData(){ + + $receivedData = $this->request->getPost(); + + if (!empty($receivedData['id'])){ + $status = $this->clientApi->save($receivedData); + + }else{ + $status = $this->clientApi->insert($receivedData); + } + + + if ($status){ + return $this->respond(['status'=>"Sucesss",'message'=>"Submitted Successfully"],200); + }else{ + return $this->respond(['status'=>"Failed",'message'=>"Submission Faild"],500); + } + + } + + public function sendToken(){ + + $client_id = $this->request->getGet('client_id'); + + $token = ClientTokenHelper::generateKey($client_id); + + if ($token){ + return $this->respond(['status' => 'success', 'token' => $token,'message' => "Token Generated Successfully"],200); + }else{ + return $this->respond(['status' => "Failed","message"=>"Token Generation Failed, Try Again After some time"],500); + } + } } + + diff --git a/app/Controllers/ClientWebHooksController.php b/app/Controllers/ClientWebHooksController.php new file mode 100644 index 00000000..a54deaf2 --- /dev/null +++ b/app/Controllers/ClientWebHooksController.php @@ -0,0 +1,319 @@ +myLogger = \Config\Services::mylogger(); + + //models + $this->clientAPI = new ClientApiModel(); + $this->clientPolicy = new ClientPolicyModel(); + + // Helpers + $this->webHookHelper = new clientWebHookHelper(); + $this->clientTokenHelper = new ClientTokenHelper(); + } + + public function pushData($clientID, $type) + { + if ($type == 1) { + + $webHookType = "emp"; + } else if ($type == 2) { + + $webHookType = "claim"; + } + log_message('error', 'Client ID: ' . $clientID); + log_message('error', 'Webhook Type: ' . $webHookType); + // Validate client ID + if (empty($clientID)) { + return $this->respond(["status" => "Failure", "error" => ["message" => 'Client ID is required.', "code" => 400]], 400); + } + $webhookData = $this->clientAPI->where('client_id', $clientID)->where('is_active', 1)->first(); + if (empty($webhookData)) { + log_message('error', 'Client Not Found or Unauthorized'); + return $this->respond(["status" => "Failure", "error" => ["message" => 'Client Not Found or Client Does not have any Active Hooks.', "code" => 404]], 404); + } + $url = $webhookData[$webHookType . '_url']; + if (empty($url)) { + log_message('error', 'No active webhook found for the client.'); + return $this->respond(["status" => "Failure", "error" => ["message" => 'No active webhook found for the client.', "code" => 404]], 404); + } + + + $method = $webhookData[$webHookType . '_method']; + $auth_method = $webhookData[$webHookType . '_tkn_type']; + $token = $webhookData[$webHookType . '_token']; + $objectType = json_decode($webhookData[$webHookType . '_obj']); + + try { + $client = \Config\Services::curlrequest(); + $data = [ + "name" => "Kavitha", + "emp_code" => "EMP001-K4", + "emp_status" => "active", + "mobile" => "2233448965" + ]; + + try { + $mapped_data = $this->webHookHelper->mapObjectType($data, $objectType); + } catch (Exception $e) { + $errorMessage = "Object Mapping Failed: " . $e->getMessage(); + log_message('error', $errorMessage); + + return $this->respond(['status' => 'Failure', 'error' => ['code' => 500, 'message' => "Object Mapping Failed"]], 500); + } + + // Create payload + $payload = [ + 'event_type' => 'insert', + 'timestamp' => date('c'), + 'data' => $mapped_data + ]; + + log_message("error", "Payload: " . json_encode($payload)); + + // Configure request headers + $headers = ['Content-Type' => 'application/json']; + if ($auth_method && $token) { + if (strtolower($auth_method) === 'bearer') { + $headers['Authorization'] = 'Bearer ' . $token; + } else { + $headers[$auth_method] = $token; + } + } + + // Configure request based on method + $options = [ + 'headers' => $headers, + 'timeout' => 10, + 'http_errors' => false // Don't throw exceptions for 4xx/5xx responses + ]; + + if ($method === 'GET') { + $options['query'] = $payload; + } else { + $options['json'] = $payload; + } + + // Execute webhook request + $response = $client->request($method, $url, $options); + $statusCode = $response->getStatusCode(); + $responseBody = $response->getBody(); + + // Log and format response + $logMessage = "Webhook to {$url} returned status: {$statusCode}"; + log_message('error', $logMessage); + + return $this->respond(['status' => 'Success', "response" => $responseBody], $statusCode); + } catch (\Throwable $e) { + $errorMessage = "Webhook failed: " . $e->getMessage(); + log_message('error', $errorMessage); + + return $this->respond(['status' => 'Failure', 'error' => ['code' => 500, 'message' => $errorMessage, 'exception' => get_class($e)]], 500); + } + } + + public function validateToken($type) + { + $type = $type == 1 ? "pull_emp_token" : "pull_claim_token"; + try { + + $authHeader = $this->request->getHeaderLine('Authorization'); + + // Check if header exists + if (empty($authHeader)) { + log_message('error', 'Authorization header missing'); + return $this->respond(['status' => "Failure", 'error' => ['message' => 'Authorization header missing', 'code' => 401]], 401); + } + + // Check if Bearer is present + if (!str_contains($authHeader, 'Bearer ')) { + log_message('error', 'Authorization Bearer missing'); + return $this->respond(['status' => "Failure", 'error' => ['message' => 'Invalid Authorization header', 'code' => 401]], 401); + } + + // Extract the token + $token = str_replace('Bearer ', '', $authHeader); + if (empty($token)) { + + log_message('error', 'Empty Token'); + return $this->respond(['status' => "Failure", 'error' => ['message' => 'Invalid Token Format', 'code' => 401]], 401); + } + + try { + + // Extract client_id from the token + $client_id = ClientTokenHelper::extractClientId($token); + } catch (\Exception $e) { + log_message('error', 'Invalid Client Token Format'); + + return $this->respond(['status' => "Failure", 'error' => 'Invalid Token Format'], 401); + } + + // Fetch client details from the database + $client = $this->clientAPI->where('client_id', $client_id)->where("is_active", 1)->where("api_access", 1)->first(); + + // Client validation + if (!$client) { + log_message('error', 'Client Not Found or Unauthorized'); + return $this->respond(['status' => "Failure", 'error' => ['message' => 'Client not found or unauthorized', 'code' => '403']], 403); + } + + // Validate the token + if (hash_equals($client[$type], $token)) { + log_message('error', 'Access Granted For Client : ' . $client_id); + return true; + } else { + log_message('error', 'Invalid Token given for client : ' . $client_id); + return $this->respond([ + 'status' => "Failure", + 'error' => ['message' => 'Invalid token', 'code' => 401] + ], 401); + } + } catch (\Exception $e) { + log_message('error', 'Error in ClientAPIController:validateToken - ' . $e->getMessage()); + return $this->respond(['status' => "Failure", 'error' => ['message' => 'Internal Server Error', 'code' => 500]], 500); + } + } + + public function getClientIdfromToken() + { + $authHeader = $this->request->getHeaderLine('Authorization'); + $token = str_replace('Bearer ', '', $authHeader); + $client_id = ClientTokenHelper::extractClientId($token); + + log_message('error', 'Client ID: ' . $client_id); + return [$client_id, $token]; + } + + public function pullData_emp() + { + $validationStatus = $this->validateToken(1); + + $data = $this->getClientIdfromToken(); + $client_id = $data[0]; + + log_message('error', "Pull data emp from Client ID: ". $client_id); + $client = $this->clientAPI->where('client_id', $client_id)->where("is_active", 1)->where("api_access", 1)->first(); + if (empty($client)) { + log_message('error', 'Client Not Found or Unauthorized'); + return $this->respond(['status' => 'Failure', 'error' => ['code' => 404, 'message' => 'Client Not Found or Unauthorized']], 404); + } + + $objectType = $client['pull_emp_obj']; + + if ($validationStatus) { + $responseBody = $this->request->getBody(); + $data_to_map = json_decode($responseBody, true); + $objectType = json_decode($objectType, true); + if (!isset($data_to_map['data']) || !is_array($data_to_map['data'])) { + + log_message('error', "Invalid Response from Endpoint 'data' Key Missing"); + return $this->respond(['status' => 'Failure', 'error' => ['code' => 500, 'message' => "Invalid Response from Endpoint 'data' Key Missing"]], 500); + } + + foreach ($data_to_map['data'] as $index => $item) { + + try { + $mapped_data = $this->webHookHelper->mapObjectType($item, $objectType); + } catch (Exception $e) { + $errorMessage = "Object Mapping Failed: " . $e->getMessage(); + log_message('error', $errorMessage); + + return $this->respond(['status' => 'Failure', 'error' => ['code' => 500, 'message' => "Object Mapping Failed"]], 500); + } + + try { + $mapped_data['client_id'] = $client_id; + $this->webHookHelper->insertData($mapped_data, 1); + } catch (Exception $e) { + $errorMessage = "Data Insertion Failed: " . $e->getMessage(); + log_message('error', $errorMessage); + + return $this->respond(['status' => 'Failure', 'error' => ['code' => 500, 'message' => "Data Insertion Failed"]], 500); + } + } + + log_message('error', "Data Inserted Successfully for Client ID: " . $client_id); + // Return success response + return $this->respond(['status' => 'Success', 'message' => "Data Inserted Successfully"], 200); + } + } + + public function pullData_claim() + { + $validationStatus = $this->validateToken(2); + + $data = $this->getClientIdfromToken(); + $client_id = $data[0]; + log_message('error', "Pull data claim from Client ID: ". $client_id); + $client = $this->clientAPI->where('client_id', $client_id)->where("is_active", 1)->where("api_access", 1)->first(); + if (empty($client)) { + log_message('error', 'Client Not Found or Unauthorized'); + return $this->respond(['status' => 'Failure', 'error' => ['code' => 404, 'message' => 'Client Not Found or Unauthorized']], 404); + } + + $objectType = $client['pull_claim_obj']; + + if ($validationStatus) { + $responseBody = $this->request->getBody(); + $data_to_map = json_decode($responseBody, true); + $objectType = json_decode($objectType, true); + if (!isset($data_to_map['data']) || !is_array($data_to_map['data'])) { + + log_message('error', "Invalid Response from Endpoint 'data' Key Missing"); + return $this->respond(['status' => 'Failure', 'error' => ['code' => 500, 'message' => "Invalid Response from Endpoint 'data' Key Missing"]], 500); + } + foreach ($data_to_map['data'] as $index => $item) { + try { + $mapped_data = $this->webHookHelper->mapObjectType($item, $objectType); + } catch (Exception $e) { + $errorMessage = "Object Mapping Failed: " . $e->getMessage(); + log_message('error', $errorMessage); + + return $this->respond(['status' => 'Failure', 'error' => ['code' => 500, 'message' => "Object Mapping Failed"]], 500); + } + + try { + $mapped_data['client_id'] = $client_id; + $this->webHookHelper->insertData($mapped_data, 2); + } catch (Exception $e) { + $errorMessage = "Data Insertion Failed: " . $e->getMessage(); + log_message('error', $errorMessage); + + return $this->respond(['status' => 'Failure', 'error' => ['code' => 500, 'message' => "Data Insertion Failed"]], 500); + } + } + + + log_message('error', "Data Inserted Successfully for Client ID: " . $client_id); + // Return success response + return $this->respond(['status' => 'Success', 'message' => "Data Inserted Successfully"], 200); + } + } +} diff --git a/app/Controllers/DashboardController.php b/app/Controllers/DashboardController.php index f4eb8d34..2adf141a 100755 --- a/app/Controllers/DashboardController.php +++ b/app/Controllers/DashboardController.php @@ -21,6 +21,10 @@ use App\Models\NotificationModel; use App\Models\EmployeePolicyModel; use App\Controllers\PendingActionsContrller; use App\Controllers\EmpDataServiceController; +use App\Models\TicketMasterModel; +use App\Models\LeadsModel; +use App\Models\TicketClaimStatusModel; + class DashboardController extends AdminController { @@ -33,8 +37,12 @@ class DashboardController extends AdminController protected $notificationModel; protected $employeePolicyModel; protected $policyTransactionModel; + protected $leadModel; + protected $ticketModel; + protected $ticketStatusModel; protected $policyStatus; protected $colorShades; + protected $claimDashLimit; protected $myLogger; @@ -48,9 +56,76 @@ class DashboardController extends AdminController $this->employeePolicyModel = new EmployeePolicyModel(); $this->clientModel = new ClientModel(); $this->policyTransactionModel = new PolicyTransactionModel(); + $this->ticketModel = new TicketMasterModel(); + $this->leadModel = new LeadsModel(); + $this->ticketStatusModel = new TicketClaimStatusModel(); $this->myLogger = \Config\Services::mylogger(); + $this->claimDashLimit = [ + 1 => [ + 'non_id' => 3, + 'id_not_generated' => 3, + 'cda' => 3, + 'information_required' => 3, + 'under_process' => 3, + 'rejected' => 3, + 'approved' => 3, + 'payment_initiated' => 3, + 'settled' => 3, + 'closed' => 3, + 'cancelled' => 3, + 'returned' => 3 + ], + + 2 => [ + 'claim_intimation' => 3, + 'intimation_to_insurer' => 3, + 'client_pending' => 3, + 'insurer_pending' => 3, + 'investigation' => 3, + 'approved' => 3, + 'closed' => 3, + 'not_covered' => 3, + 'settled' => 3, + 'coverage_check' => 3, + 'cancelled' => 3, + 'returned' => 3, + 'rejected' => 3, + 'dv_sent_to_insured' => 3 + ], + 3 => [ + 'claim_intimation' => 3, + 'intimation_to_insurer' => 3, + 'client_pending' => 3, + 'insurer_pending' => 3, + 'investigation' => 3, + 'approved' => 3, + 'closed' => 3, + 'not_covered' => 3, + 'settled' => 3, + 'coverage_check' => 3, + 'cancelled' => 3, + 'returned' => 3, + 'rejected' => 3 + ], + 4 => [ + 'claim_intimation' => 3, + 'intimation_to_insurer' => 3, + 'client_pending' => 3, + 'insurer_pending' => 3, + 'investigation' => 3, + 'approved' => 3, + 'closed' => 3, + 'not_covered' => 3, + 'settled' => 3, + 'coverage_check' => 3, + 'cancelled' => 3, + 'returned' => 3, + 'rejected' => 3 + ] + ]; + $this->policyStatus = [ 'under_process' => 'Under Process', 'client_pending' => 'Client Pending', @@ -92,7 +167,6 @@ class DashboardController extends AdminController 'linear-gradient(45deg, #494f4f, #353d3d)' // SilverChalice shade 6 ] ]; - } public function dashboard() @@ -100,8 +174,8 @@ class DashboardController extends AdminController $data = []; - if (in_array(get_role_id(), [1,2,3,5]) || (in_array(MANAGEMENT_TEAM_ID, user_team()) || in_array(FINANCE_TEAM_ID, user_team()) || in_array(BUSINESS_TEAM_ID, user_team()))) { - + if (in_array(get_role_id(), [1, 2, 3, 5]) || (in_array(MANAGEMENT_TEAM_ID, user_team()) || in_array(FINANCE_TEAM_ID, user_team()) || in_array(BUSINESS_TEAM_ID, user_team()))) { + $db = db_connect(); $sql = "SELECT clients.id AS client_id, @@ -169,17 +243,64 @@ class DashboardController extends AdminController $data['financeTeamStatusData'] = $financeTeamStatusData; $data['policyStatus'] = $this->policyStatus; $data['colorShades'] = $this->colorShades; - // print_r($data);die; + } + if ((get_role_id() == STAFF_ROLE_ID && in_array(CLAIMS_TEAM_ID,user_team())) || in_array(get_role_id(),[1,5])){ + $data['claim_data'] = $this->getClaimData(); + $data['colorShades'] = $this->colorShades; + + } + if ((get_role_id() == STAFF_ROLE_ID && in_array(ENROLLMENT_TEAM_ID,user_team())) || in_array(get_role_id(),[1,5])){ + $data['lead_data'] = $this->leadModel->getDashData(); + $data['bds_renewal'] = $this->policyTransactionModel->getBDSRenewalData(); + $data['colorShades'] = $this->colorShades; } + // dd(get_role_id(),user_team()); + $data['page_name'] = 'Dashboard'; echo view('layout/header', $data); echo view('DashBoard', $data); echo view('layout/footer'); } - + + + public function getClaimData() + { + + $results = $this->ticketStatusModel + ->select("ticket_type as ticket_type_id, claim_status") + ->where("is_active", 1) + ->findAll(); + + $claim_status = []; + + foreach ($results as $row) { + if (empty($row['ticket_type_id']) || empty($row['claim_status'])) { + continue; // Skip if either value is empty + } + $typeId = $row['ticket_type_id']; + $status = $row['claim_status']; + + // Initialize if not set + if (!isset($claim_status[$typeId])) { + $claim_status[$typeId] = []; + } + + $claim_status[$typeId][$status] = true; + } + + // Convert set-like structure to plain array + foreach ($claim_status as $typeId => $statuses) { + $claim_status[$typeId] = array_keys($statuses); + } + $data = $this->ticketModel->getDashData($claim_status, $this->claimDashLimit); + + + return $data; + } + public function getDashboardNotifications() { @@ -212,29 +333,29 @@ class DashboardController extends AdminController { $clientPolicyModel = new ClientPolicyModel(); $myLogger = \Config\Services::mylogger(); - + $client_policy_data = $clientPolicyModel->getPolicyDetailsForEnrollment(); $myLogger->logme('error', 'Fetched client policy data for Enrollment Status update'); - + // dd($client_policy_data); $currentDate = date('d-m-Y'); $openEnrollment = []; $closeEnrollment = []; - + // Update policy status based on start and end dates foreach ($client_policy_data as $client_policy) { $id = $client_policy['id']; $openDate = date('d-m-Y', strtotime($client_policy['open_date'])); $closeDate = date('d-m-Y', strtotime($client_policy['close_date'])); - + if ($currentDate == $openDate) { $clientPolicyModel->update($id, ['open_for_enrollment' => 1]); $openEnrollment[] = $id; $myLogger->logme('error', 'Updated policy ID ' . $id . ' to open for enrollment.'); } - + if ($closeDate < $currentDate) { $clientPolicyModel->update($id, ['open_for_enrollment' => 0]); $closeEnrollment[] = $id; @@ -243,37 +364,36 @@ class DashboardController extends AdminController } $myLogger->logme('error', 'enrollment_status function completed'); - $myLogger->logme('error', 'updated Open Enrollment Policy count : "'.count($openEnrollment).'" and Close Enrollment Policy count : "'.count($closeEnrollment).'"'); + $myLogger->logme('error', 'updated Open Enrollment Policy count : "' . count($openEnrollment) . '" and Close Enrollment Policy count : "' . count($closeEnrollment) . '"'); return $this->respond([ - 'status' => true, - 'message' => 'updated Open and Close Enrollment successfully', - 'open_policy_count' => count($openEnrollment), + 'status' => true, + 'message' => 'updated Open and Close Enrollment successfully', + 'open_policy_count' => count($openEnrollment), 'close_policy_count' => count($closeEnrollment), - 'open_policy_ids' => $openEnrollment, + 'open_policy_ids' => $openEnrollment, 'close_policy_ids' => $closeEnrollment, ]); - } - + public function sendCroneRemainderMail() { $clientPolicyModel = new ClientPolicyModel(); $myLogger = \Config\Services::mylogger(); - - + + $client_policy_data = $clientPolicyModel->getPolicyDetailsForRemainder(); $myLogger->logme('error', 'Fetched client policy data'); // dd($client_policy_data); - + // Mail send function $result = $this->sendRemainderMail($client_policy_data, 'crone'); $myLogger->logme('error', 'sendCroneRemainderMail function completed'); - - if($result){ + + if ($result) { return json_encode(['status' => true, 'message' => 'Mail send successfully']); - }else{ + } else { return json_encode(['status' => false, 'message' => 'There is no data to send']); } } @@ -285,29 +405,22 @@ class DashboardController extends AdminController $data = []; - if($type == 'insurer'){ + if ($type == 'insurer') { $data = $pendingActionsData['uhid']; - - }else if($type == 'TPA'){ + } else if ($type == 'TPA') { $data = $pendingActionsData['tpa']; - - }else if($type == 'I'){ + } else if ($type == 'I') { $data = $pendingActionsData['inception']; - - }else if($type == 'D'){ + } else if ($type == 'D') { $data = $pendingActionsData['deletion']; - - }else if($type == 'C'){ + } else if ($type == 'C') { $data = $pendingActionsData['correction']; - - }else if($type == 'SI'){ + } else if ($type == 'SI') { $data = $pendingActionsData['si_enhancement']; - - }else if($type == 'policy'){ + } else if ($type == 'policy') { $data = $pendingActionsData['policy']; - - }else if($type == 'ticket'){ + } else if ($type == 'ticket') { $data = $pendingActionsData['uhid']; } @@ -421,7 +534,6 @@ class DashboardController extends AdminController $reminder_whole_mail[] = $mail_result; } } - } else { // crone if (!empty($client_policy['reminder_date'])) { @@ -511,15 +623,12 @@ class DashboardController extends AdminController // $this->myLogger->logme('error', 'Mail sent result: ' . json_encode($mail_result)); $reminder_whole_mail[] = $mail_result; } - } } - } else { $this->myLogger->logme('error', "SEND REMAINDER CRONE --- Remainder date is empty()"); } } - } else { $this->myLogger->logme('error', 'Notification setup not found or not enabled'); @@ -549,29 +658,28 @@ class DashboardController extends AdminController public function sendManualReminder($client_id, $client_branch_id, $client_policy_id = null) { - $this->myLogger->logme('error','Log Works'); + $this->myLogger->logme('error', 'Log Works'); $this->myLogger->logme('error', "sendManualRemainder called with client_id: {$client_id}, client_branch_id: {$client_branch_id}"); - + $client_policy_data = $this->clientPolicyModel->getPolicyDetailsForRemainder($client_id, $client_branch_id, $client_policy_id); // print_r($client_policy_data); die; // print_r($this->clientPolicyModel->getLastQuery()); die; // $this->myLogger->logme('error', "Policy details fetched: " . json_encode($client_policy_data)); - + if ($client_policy_data) { $result = $this->sendRemainderMail($client_policy_data); - log_message('error',json_encode($result)); - $this->myLogger->logme('error',$result); + log_message('error', json_encode($result)); + $this->myLogger->logme('error', $result); $this->myLogger->logme('error', "Manual Remainder Mail sending result: " . ($result ? 'success' : 'failure')); - + if ($result) { $this->myLogger->logme('error', 'Manual Remainder Mail sent successfully'); return $this->respond(['status' => true, 'code' => 200, 'message' => 'Mail sent successfully'], 200); } else { $this->myLogger->logme('error', 'Failed to send manual remainder mail, no data to send'); - return $this->respond(['status' => false, 'code' => 200, 'message' => 'There is no data to send','message2' => 'Failed' ], 200); + return $this->respond(['status' => false, 'code' => 200, 'message' => 'There is no data to send', 'message2' => 'Failed'], 200); } - } else { $this->myLogger->logme('error', 'No policy data found to send'); return $this->respond(['status' => false, 'code' => 200, 'message' => 'There is no data to send', 'message2' => 'No policy data found to send'], 200); @@ -581,19 +689,17 @@ class DashboardController extends AdminController public function sendManualEcard($client_id, $client_branch_id, $policy_id) { $this->myLogger->logme('error', "sendManualEcard called with client_id: {$client_id}, client_branch_id: {$client_branch_id}, policy id : {$policy_id}"); - - $notification = $this->notificationModel->where('client_id', $client_id)->where('template_name', 'member_ecard_mail')->first(); - // print_r(($notification)); die; - if($notification && $notification['enabled'] == 0 && $notification['mail_content'] == '') - { - return $this->respond(['status' => false, 'code' => 400, 'message' => 'No template found','message2' => 'Failed' ], 200); - } - + + $notification = $this->notificationModel->where('client_id', $client_id)->where('template_name', 'member_ecard_mail')->first(); + // print_r(($notification)); die; + if ($notification && $notification['enabled'] == 0 && $notification['mail_content'] == '') { + return $this->respond(['status' => false, 'code' => 400, 'message' => 'No template found', 'message2' => 'Failed'], 200); + } + $emp_data = $this->employeePolicyModel->getEmployeePolicyForEcard($policy_id); - if(count($emp_data) == 0) - { - return $this->respond(['status' => false, 'code' => 400, 'message' => 'No employees found','message2' => 'Failed' ], 200); + if (count($emp_data) == 0) { + return $this->respond(['status' => false, 'code' => 400, 'message' => 'No employees found', 'message2' => 'Failed'], 200); } $ids = array_column($emp_data, 'id'); // print_r(($ids)); die; @@ -603,9 +709,8 @@ class DashboardController extends AdminController // $empEmpDataServiceController = new EmpDataServiceController(); // $empEmpDataServiceController->sendMailForDownloadingECard($ids); - + return $this->respond(['status' => true, 'code' => 200, 'message' => 'Mail Queued'], 200); - } public function data_construct_for_bds($data) @@ -622,7 +727,7 @@ class DashboardController extends AdminController 'instalment_pending' => [], 'completed' => [], ]; - + // Loop through results and group them by their status foreach ($data as $row) { switch ($row['status']) { @@ -655,8 +760,26 @@ class DashboardController extends AdminController break; } } - + return $groupedData; } + public function prepareClaimSearchData() + { + + $received_data = $this->request->getPost(); + $ticketTypeId = $received_data['ticketTypeId']; + $status = $received_data['status']; + + $status = strtoupper($status); + $status = str_replace('_', ' ', $status); + + $data = $this->ticketModel + ->select("tcs.id as claim_status_id") + ->join("ticket_claim_status tcs", "tcs.ticket_type = " . (int)$ticketTypeId) + ->where("tcs.claim_status", $status) + ->first(); + $data['ticket_type_id'] = $ticketTypeId; + return $this->respond(['status' => "success", "data" => $data], 200); + } } diff --git a/app/Controllers/EmpDataServiceController.php b/app/Controllers/EmpDataServiceController.php index 76d44b73..cb259f6c 100755 --- a/app/Controllers/EmpDataServiceController.php +++ b/app/Controllers/EmpDataServiceController.php @@ -529,6 +529,7 @@ class EmpDataServiceController extends BaseController // Close and remove temporary file fclose($tempFile); + exit(); return true; // Excel file successfully generated and exported @@ -633,6 +634,7 @@ class EmpDataServiceController extends BaseController // Close and remove the temporary file fclose($tempFile); + exit(); return true; } else { @@ -784,6 +786,7 @@ class EmpDataServiceController extends BaseController // Close and remove the temporary file fclose($tempFile); + exit(); return true; } else { @@ -897,6 +900,7 @@ class EmpDataServiceController extends BaseController // Close and remove the temporary file fclose($tempFile); + exit(); return true; } else { @@ -1196,6 +1200,7 @@ class EmpDataServiceController extends BaseController // Close and remove temporary file fclose($tempFile); + exit(); return true; // Excel file successfully generated and exported @@ -4105,6 +4110,9 @@ class EmpDataServiceController extends BaseController AND emp_endorsement.pk IN (" . implode(',', $arrayData['employeeIds']) . ") AND employee_polices.claim_status = 0 AND emp_endorsement.field_name = 'date_of_exit' + AND emp_endorsement.is_active = 1 + AND emp_endorsement.actions = 'd' + AND emp_endorsement.status != 'truncated'; ")->getRow(); // dd(db_connect()->getLastQuery(), $amount); diff --git a/app/Controllers/EmployeeServiceController.php b/app/Controllers/EmployeeServiceController.php index 61e0af4a..4caa5c4f 100755 --- a/app/Controllers/EmployeeServiceController.php +++ b/app/Controllers/EmployeeServiceController.php @@ -28,6 +28,9 @@ use App\Controllers\JobWorker ; use PhpOffice\PhpSpreadsheet\Spreadsheet; use Kint\Kint; +use App\Helpers\ExcelSanitizeHelper; + + class EmployeeServiceController extends AdminController { @@ -468,7 +471,7 @@ class EmployeeServiceController extends AdminController 'format' => null, 'allowed_values' => null, 'custom' => 'check_si', - 'params' => ['row', 'policy_terms', 'slab_details'] + 'params' => ['row', 'policy_details', 'slab_details'] ], 'date_of_enhancement' => [ 'col_idx' => 4, @@ -1552,9 +1555,11 @@ class EmployeeServiceController extends AdminController if($pre_rack_rate_name != $slab_value['rack_rate_name']) { $pre_rack_rate_name = $slab_value['rack_rate_name']; - $rack_rate_json = json_decode($slab_value['additional_relationship']); - if(in_array(strtolower($employee['relationship']), $rack_rate_json) && $rack_rate_json[ strtolower($employee['relationship']) ] != 0 && $rack_rate_json[ strtolower($employee['relationship']) ] != 'NA') - { + $rack_rate_json = json_decode($slab_value['additional_relationship'], true); + $relationship_array_key = strtolower($employee['relationship']); + + if(array_key_exists($relationship_array_key, $rack_rate_json) && $rack_rate_json[ strtolower($employee['relationship']) ] != 0 && $rack_rate_json[ strtolower($employee['relationship']) ] != 'NA') + { $applicable_rack_rate_name = $slab_value['rack_rate_name']; $applicable_rack_rate_master = $slab_value['grid_master']; break; @@ -1563,7 +1568,7 @@ class EmployeeServiceController extends AdminController } //get max age,max count of the familiy - $max_age_and_max_count_of_current_member = $this->employeeModel->getFamiliyCountAndMaxage($employee['emp_code']); + $max_age_and_max_count_of_current_member = $this->employeeModel->getFamiliyCountAndMaxage($employee['emp_code']); //transform SI excel row data as inception excel OR premium calculateable fomart $data = transform_si_excel_row_to_calculatable_format(employee: $employee,employee_policy: $employee_policy,maxage_and_maxcount: $max_age_and_max_count_of_current_member,slab_details: $slab_details,applicable_slab_name: $applicable_rack_rate_name,augmented_si: $row[3],grid_master: $applicable_rack_rate_master); @@ -1658,6 +1663,7 @@ class EmployeeServiceController extends AdminController // $this->myLogger->logme('error',('Insert - ' . $value['emp_code'] .' - '. $value['name'])); // echo 'update emp'; } + $value = ExcelSanitizeHelper::sanitizeArrayData($value); $this->employeeModel->save($value); if (isset($value['id'])) { $emp_id = $value['id']; @@ -2081,7 +2087,8 @@ public function getFileMetaDataByFileId($file_id, $status = 'success'){ $value['created_by'] = $file['created_by']; $log_message = 'Enrollment Insert Employee- '.$value['name'] .'('.$value['emp_code'] .') with PK '; } - + + $value = ExcelSanitizeHelper::sanitizeArrayData($value); $this->employeeModel->save($value); if (isset($value['id'])) { $emp_id = $value['id']; } diff --git a/app/Controllers/LeadsController.php b/app/Controllers/LeadsController.php index 617add8f..79ca3591 100644 --- a/app/Controllers/LeadsController.php +++ b/app/Controllers/LeadsController.php @@ -146,19 +146,36 @@ class LeadsController extends BaseController $this->loadLayout('lead_filter', $data); } else { - $search_data = $this->request->getPost(); - // print_r($search_data); + $isFromDashboard = $this->request->getPost("is_dashboard"); - $where = []; - foreach ($search_data as $search_objects => $key) { - if ($key != null && $key != '' && $key != 0) { - $where[$search_objects] = $key; + if (isset($isFromDashboard) && !empty($isFromDashboard) && $isFromDashboard == 1) { + $ids = $this->request->getPost('ids'); + $ids = array_filter(explode(',', $ids)); + + if (!empty($ids)) { + $idsStr = implode(',', array_map('intval', $ids)); // sanitize IDs to be integers + $where = "leads.id IN ($idsStr)"; + } else { + $where = '1 = 0'; // No valid IDs, return empty result } - } + // dd($where ); + $data['lead_data_list'] = $this->leadsModel->getLeadDataForLising($where); + $this->loadLayout('lead_filter', $data); + } else { + $search_data = $this->request->getPost(); - $data['lead_data_list'] = $this->leadsModel->getLeadDataForLising($where); - $html = view('leads_list', $data); - return $this->respond(['status' => true, 'html' => $html], 200); + $where = []; + foreach ($search_data as $search_objects => $key) { + if ($key != null && $key != '' && $key != 0 && $search_objects != 'is_dashboard') { + $where[$search_objects] = $key; + } + } + + $data['lead_data_list'] = $this->leadsModel->getLeadDataForLising($where); + + $html = view('leads_list', $data); + return $this->respond(['status' => true, 'html' => $html], 200); + } } } @@ -602,7 +619,7 @@ class LeadsController extends BaseController return $this->respond(['status' => false, 'message' => 'File could not be removed.'], 200); } } - //--------RFQ----------------------------------------------------------------------------------------------- + //--------RFQ----------------------------------------------------------------------------------------------- public function viewRFQ($id, $type = 1) @@ -678,11 +695,10 @@ class LeadsController extends BaseController "; - if ($data['lead_data']['policy_end_date'] != null){ + if ($data['lead_data']['policy_end_date'] != null) { $subject = "{{CLIENT_NAME}} _ {{POLICY_TYPE}} _ {{RFQ_OR_QCR}} _ {{POLICY_YEAR}} {{POLICY_END_DATE}}"; - }else{ + } else { $subject = "{{CLIENT_NAME}} _ {{POLICY_TYPE}} _ {{RFQ_OR_QCR}} _ {{POLICY_YEAR}}"; - } $data['mail_content'] = $this->transformMailContent($lead_data, $mail_content, $data['page_name']); @@ -690,7 +706,7 @@ class LeadsController extends BaseController $data['multi_file_data'] = $this->leadFilesModel->where('lead_id', $id)->where('is_active', 1)->findAll() ?? null; $data['attachment_html'] = view('rfq/attachment_files', $data) ?? ""; - $data['user_team'] = $this->userModel->select("ut.team_id")->join("user_teams ut","ut.user_id = user_profiles.id and ut.is_active = 1")->where("user_profiles.is_active",1)->first()['team_id']; + $data['user_team'] = $this->userModel->select("ut.team_id")->join("user_teams ut", "ut.user_id = user_profiles.id and ut.is_active = 1")->where("user_profiles.is_active", 1)->first()['team_id']; // dd($data); if ($data['lead_data']['lead_form_type'] == 1) { @@ -866,7 +882,7 @@ class LeadsController extends BaseController if ($subKey !== 'Quote Asked' && isset($subVal['Total'])) { $proposals[$key] = $value; break; - }else{ + } else { $proposals[$key] = $value; } } @@ -1546,7 +1562,7 @@ class LeadsController extends BaseController ], ]); - + // Set filename $string = ($type == 2) ? 'QCR' : 'RFQ'; @@ -1554,15 +1570,14 @@ class LeadsController extends BaseController $next_year = $current_year + 1; $policy_year = "$current_year-$next_year"; - if (!empty($rfq_data['policy_end_date'])){ + if (!empty($rfq_data['policy_end_date'])) { $policy_expiry = strtotime($lead_data['policy_end_date']); - $formatted_policy = date("d-m-Y",$policy_expiry); + $formatted_policy = date("d-m-Y", $policy_expiry); - $filename = "{$rfq_data['client_name']}_{$rfq_data['policy_type']}_{$string}_" .$policy_year.'(Due On '.$formatted_policy . ')' .'.xlsx'; - - }else{ - $filename = "{$rfq_data['client_name']}_{$rfq_data['policy_type']}_{$string}_".$policy_year.'_' . '.xlsx'; + $filename = "{$rfq_data['client_name']}_{$rfq_data['policy_type']}_{$string}_" . $policy_year . '(Due On ' . $formatted_policy . ')' . '.xlsx'; + } else { + $filename = "{$rfq_data['client_name']}_{$rfq_data['policy_type']}_{$string}_" . $policy_year . '_' . '.xlsx'; } @@ -2190,12 +2205,11 @@ class LeadsController extends BaseController } else if ($recipient_type == 'client') { - $mailIDS = explode(',',$params['contact_mail']); + $mailIDS = explode(',', $params['contact_mail']); $recipient_data = []; - foreach ($mailIDS as $mail){ + foreach ($mailIDS as $mail) { $recipient_data[] = ['name' => $lead_data['contact_person_name'], 'email' => $mail]; } - } else { $recipient_data = [['name' => "Team", 'email' => $params['to']]]; } @@ -2902,10 +2916,10 @@ class LeadsController extends BaseController $policy_expiry = strtotime($lead_data['policy_end_date']); - $formatted_policy = date("d-m-Y",$policy_expiry); + $formatted_policy = date("d-m-Y", $policy_expiry); $logged_user_id = get_session_userid(); - $logged_user_data = $this->userModel->where("id",$logged_user_id)->where("is_active",1)->first(); + $logged_user_data = $this->userModel->where("id", $logged_user_id)->where("is_active", 1)->first(); if ($lead_data) { @@ -2916,11 +2930,11 @@ class LeadsController extends BaseController $message = str_replace("{{POLICY_TYPE}}", $lead_data['policy_type'] ?? "Insurance Policy", $message); $message = str_replace("{{RFQ_OR_QCR}}", $page_name, $message); $message = str_replace("{{POLICY_YEAR}}", $policy_year, $message); - $message = str_replace("{{POLICY_END_DATE}}"," (Due On ".$formatted_policy.")",$message); + $message = str_replace("{{POLICY_END_DATE}}", " (Due On " . $formatted_policy . ")", $message); - $message = str_replace("{{LOGGED_USER_NAME}}",ucfirst($logged_user_data['first_name'])." ".ucfirst($logged_user_data['last_name']),$message); - $message = str_replace("{{LOGGED_USER_EMAIL}}",$logged_user_data['email'],$message); - $message = str_replace("{{LOGGED_USER_MOBILE}}",$logged_user_data['mobile'],$message); + $message = str_replace("{{LOGGED_USER_NAME}}", ucfirst($logged_user_data['first_name']) . " " . ucfirst($logged_user_data['last_name']), $message); + $message = str_replace("{{LOGGED_USER_EMAIL}}", $logged_user_data['email'], $message); + $message = str_replace("{{LOGGED_USER_MOBILE}}", $logged_user_data['mobile'], $message); return $message; } else { diff --git a/app/Controllers/MasterController.php b/app/Controllers/MasterController.php index 4e1271f8..fa094bb8 100755 --- a/app/Controllers/MasterController.php +++ b/app/Controllers/MasterController.php @@ -1422,11 +1422,12 @@ class MasterController extends AdminController if ($insert) { //for CD Tranction Table + $cd_tranction_data['cd_ac_pk'] = $this->CDMasterModel->insertID(); $response = DepositHelper::saveDeposit($cd_tranction_data, $loggedInUserID); $cd_data = $this->CDMasterModel->where('client_id', $data['client_id'])->where('insurer_id', $data['insurer_id'])->findAll(); - return $this->respond(['status' => true, 'data' => $cd_data, 'cd_ac_no'=>$data['cd_ac_no'], 'message' => 'CD Account number created successfully'], 200); + return $this->respond(['status' => true, 'data' => $cd_data, 'cd_ac_no'=>$data['cd_ac_no'], 'message' => 'CD Account number created successfully', "FOR BDS PURPOSE"], 200); }else{ return $this->respond(['status' => false, 'message' => 'Failed to created CD Account number'], 200); } @@ -1828,4 +1829,22 @@ class MasterController extends AdminController echo "################################################################\n\n"; } + public function sendMutipleToEmails() + { + + $message = '

Request for Quotation (RFQ)

Dear {{RECIPIENT_NAME}},

We are reaching out to request a quotation for the following insurance coverage. Please review the details below and provide your quote at your earliest convenience.

RFQ Details

Client name{{CLIENT_NAME}}
Coverage Type{{POLICY_LONG_NAME}}
Policy Start Date{{POLICY_START_DATE}}
Policy Duration{{DURATION}}
Please note: Additional terms and details are included in the attachment for your reference.

Please feel free to reach out if you require any further information to prepare the quote. We look forward to receiving your proposal.

Best regards,

Nhance India Pvt Ltd

'; + $attachments = [ + ["filePath" => ROOTPATH."public/sample_excel/sample_addition.xls","fileName" => "sample_addition.xls"], + ["filePath" => ROOTPATH."public/sample_excel/sample_inception.xls","fileName" => "sample_inception.xls"], + ["filePath" => ROOTPATH."public/assets/images/login_bg.jpg","fileName" => "login_bg.jpg"] + ]; + $email_id = 'venkateshraman786@gmail.com'; + $params = ['mail'=>$email_id]; + $multi_mails = ['venkateshraman786@gmail.com', 'gowtham.manavalan.la@gmail.com', 'venkatesh.r@venbainfotech.com']; + $common = ['mail_type'=>'test_mail_cli']; + $bcc = "vitvelz@gmail.com,velmurugan.s@venbainfotech.com,srinivas.saravanan@venbainfotech.com"; + $result = MailHelper::send_email(['mail' => $multi_mails, 'bcc'=>$bcc, 'params'=>$params,'subject' => 'Send Multiple " To " emails','message' => $message,'attachments' => $attachments,'common'=>$common]); + dd($result); + } + } \ No newline at end of file diff --git a/app/Controllers/PolicyTransactionController.php b/app/Controllers/PolicyTransactionController.php index 3f7f36df..99180333 100644 --- a/app/Controllers/PolicyTransactionController.php +++ b/app/Controllers/PolicyTransactionController.php @@ -64,7 +64,7 @@ class PolicyTransactionController extends BaseController protected $batchFileModel; protected $filesModel; protected $coShareStmtDetailsModel; - + public function __construct() { set_session_context('Policy Tranction'); @@ -106,7 +106,7 @@ class PolicyTransactionController extends BaseController public function viewInception() { $data['page_name'] = 'Policy'; - + // Static arrays for dropdowns $data['issuer'] = [1 => 'JIBS', 2 => 'Nhance']; $data['client_type'] = [1 => 'Group', 2 => 'Individual']; @@ -148,7 +148,7 @@ class PolicyTransactionController extends BaseController 'policy_start_date' => 'Policy Start Date', 'policy_end_date' => 'Policy End Date', ]; - + // Filter data $start_date = $this->request->getGet('start_date'); $end_date = $this->request->getGet('end_date'); @@ -158,7 +158,7 @@ class PolicyTransactionController extends BaseController $date_type = $this->request->getGet('date_type'); $issuer = $this->request->getGet('issuer'); $status = $this->request->getGet('status'); - + // Handle null or empty values $start_date = empty($start_date) ? 0 : $start_date; $end_date = empty($end_date) ? 0 : $end_date; @@ -168,7 +168,7 @@ class PolicyTransactionController extends BaseController $date_type = empty($date_type) ? 0 : $date_type; $issuer = empty($issuer) ? 0 : $issuer; $status = empty($status) ? 0 : $status; // Corrected from `$issuer` - + // Fetch inception data list $data['inception_data_list'] = $this->policyTransactionModel->getInceptionTranctionListData( $start_date, @@ -180,7 +180,7 @@ class PolicyTransactionController extends BaseController $issuer, $status ); - + // Fetch additional data $data['client'] = $this->clientModel->where('is_active', 1)->findAll(); $data['client_branch'] = $this->clientBranchModel->where('is_active', 1)->findAll(); @@ -190,7 +190,7 @@ class PolicyTransactionController extends BaseController $data['policy_types'] = $this->policyTypeModel->where('is_active', 1)->findAll(); $data['insurer_branch'] = $this->insurerBranchModel->getInsurerBranchesWithInsurerNames(); $data['tpa'] = $this->tpaBranchModel->getTpaBranchesWithTpaNames(); - + // Fetch PP Teams Data $data['ppTeamsData'] = $this->userModel ->where('is_active', 1) @@ -204,22 +204,22 @@ class PolicyTransactionController extends BaseController ->where('user_teams.is_active', 1) ->where('user_profiles.is_active', 1) ->findAll(); - + // Fetch ACM $data['ACM'] = $this->userModel ->where('role', 3) // Assuming `role` is in `user_profiles` ->where('is_active', 1) ->findAll(); - + // echo '
';
         // print_r($data['ppTeamsData']); die;
-        
+
         // dd($data);
-    
+
         // Load view
         $this->loadLayout('policy_transaction_inception_list', $data);
     }
-    
+
     // policy Transaction Create function start
     public function createInceptionPolicy()
     {
@@ -229,56 +229,56 @@ class PolicyTransactionController extends BaseController
         $data['cd_ac_pk'] = $this->request->getPost('cd_ac_no');
         // print_r($this->request->getPost()); die;
 
-    
+
         if (!$id) {
             return $this->insertInceptionPolicy($data);
         } else {
             return $this->updateInceptionPolicy($id, $data);
         }
     }
-    
+
     private function preparePolicyData()
     {
         $data = $this->request->getPost();
-    
+
         // print_r($data); die;
         // var_dump($data); die;
 
-        if(empty($data['policy_issue_date'])){
+        if (empty($data['policy_issue_date'])) {
             $data['policy_issue_date'] = null;
         }
 
-        if(empty($data['policy_start_date'])){
-            $data['policy_start_date'] = null;        
+        if (empty($data['policy_start_date'])) {
+            $data['policy_start_date'] = null;
         }
 
-        if(empty($data['policy_end_date'])){
-            $data['policy_end_date'] = null;        
+        if (empty($data['policy_end_date'])) {
+            $data['policy_end_date'] = null;
         }
 
-        if(empty($data['renewal_date'])){
-            $data['renewal_date'] = null;        
+        if (empty($data['renewal_date'])) {
+            $data['renewal_date'] = null;
         }
 
-        if(empty($data['rollover_date'])){
-            $data['rollover_date'] = null;        
+        if (empty($data['rollover_date'])) {
+            $data['rollover_date'] = null;
         }
 
-        if(empty($data['last_action_date'])){
+        if (empty($data['last_action_date'])) {
             $data['last_action_date'] = null;
-        }else{
+        } else {
             $data['last_action_date'] = change_date_format($data['last_action_date']);
         }
 
 
         // Separate Insurer and TPA Branch IDs and IDs
-        if(isset($data['insurer_id']) && !empty($data['insurer_id'])){
+        if (isset($data['insurer_id']) && !empty($data['insurer_id'])) {
             list($data['insurer_branch_id'], $data['insurer_id']) = explode('-', $data['insurer_id']);
             if (isset($data['tpa']) && !empty($data['tpa'])) {
                 list($data['tpa_branch_id'], $data['tpa_id']) = explode('-', $data['tpa']);
             }
         }
-    
+
         $data['tsi'] = generate_tsi_code($data['issue_type']);
         $data['action_type'] = 'inception';
 
@@ -287,13 +287,13 @@ class PolicyTransactionController extends BaseController
         } elseif ($data['co_share']) {
             $data['co_share'] = 1;
         }
-    
+
         if (!isset($data['bro_payable_by'])) {
             $data['bro_payable_by'] = 0;
         } elseif ($data['bro_payable_by']) {
             $data['bro_payable_by'] = 1;
         }
-    
+
         if (!isset($data['same_as_proposer'])) {
             $data['same_as_proposer'] = 0;
         } elseif ($data['same_as_proposer']) {
@@ -306,24 +306,29 @@ class PolicyTransactionController extends BaseController
             $data['policy_with_corr'] = 1;
         }
 
-        if($data['ct_type'] == ""){
+        if (!isset($data['is_cd_reduce_from_bds'])) {
+            $data['is_cd_reduce_from_bds'] = 0;
+        } elseif ($data['is_cd_reduce_from_bds']) {
+            $data['is_cd_reduce_from_bds'] = 1;
+        }
+
+        if ($data['ct_type'] == "") {
             $data['ct_type'] = 1;
         }
 
         // $month = '01-'.(string)$this->request->getPost('month');
         // $data['month'] = empty($data['month']) ? null : date('Y-m-d', strtotime($month));    
-    
+
         // Determine $is_addon value
-        $data['is_addon'] = in_array($data['policy_type_id'], [1, 2, 6, 7]) ? 1 :
-                            (in_array($data['policy_type_id'], [4, 5]) ? 2 : ($data['policy_type_id'] == 3 && isset($data['base_policy']) ? 3 : 1));
-    
+        $data['is_addon'] = in_array($data['policy_type_id'], [1, 2, 6, 7]) ? 1 : (in_array($data['policy_type_id'], [4, 5]) ? 2 : ($data['policy_type_id'] == 3 && isset($data['base_policy']) ? 3 : 1));
+
         // print_r($data); die;
 
         return $data;
     }
-    
+
     private function insertInceptionPolicy($data)
-    {   
+    {
         // print_r($data); die;
 
         $insert = $this->policyTransactionModel->insert($data);
@@ -331,7 +336,7 @@ class PolicyTransactionController extends BaseController
             $this->insertTransactionStatus($insert, $data, 1);
             $emp_data = $this->processInsertIndividualMemberInEmpTable($data);
 
-            if(isset($data['follow_insurer_id']) && !empty($data['follow_insurer_id'][0])){
+            if (isset($data['follow_insurer_id']) && !empty($data['follow_insurer_id'][0])) {
 
                 $pt_co_share_details = $this->insertOrUpdateCoShareDetails($data, $insert);
 
@@ -342,7 +347,7 @@ class PolicyTransactionController extends BaseController
                     $this->policyTransactionModel->update($insert, ['client_policy_id' => $client_policy_id]);
                     $emp_policy_insert = $this->InsertIndividualEmpPolicyTable($emp_data, $client_policy_id);
 
-                    if ($data['client_type'] == 1 && $data['status'] == 'completed') {
+                    if ($data['client_type'] == 1 && $data['status'] == 'completed' && $data['is_cd_reduce_from_bds'] == 1) {
                         $this->processCompletedStatus($data, $client_policy_id, $data['insurer_id']);
                     }
                 }
@@ -350,7 +355,7 @@ class PolicyTransactionController extends BaseController
 
                 $data['pt_co_share_details'] = $this->PTCOShareDetailsModel->where('pt_id', $insert)->where('is_active', 1)->findAll();
             }
-            
+
             $client_data = $this->clientModel->where('id', $data['client_id'])->first();
             $data['client_kyc']       = $this->clientKYCDocsModel->where('client_id',  $data['client_id'])->findAll();
             $data['entity_type_id'] =  $client_data['entity_type_id'];
@@ -359,74 +364,79 @@ class PolicyTransactionController extends BaseController
         }
         return $this->respondError("Failed to create policy transaction");
     }
-    
+
     private function updateInceptionPolicy($id, $data)
-    {   
+    {
+        // print_r($data); die;
         if ($this->policyTransactionModel->update($id, $data)) {
-    
+
             $this->insertTransactionStatus($id, $data, 1);
             $emp_data = $this->processInsertIndividualMemberInEmpTable($data);
-    
+
             if (isset($data['follow_insurer_id']) && !empty($data['follow_insurer_id'][0])) {
-    
+
                 $this->insertOrUpdateCoShareDetails($data, $id);
 
                 if ($data['ct_type'] == 1) {
-                    $this->policyTransactionModel->update($id, ['client_policy_id' => $data['client_policy_id']]);    
+                    $this->policyTransactionModel->update($id, ['client_policy_id' => $data['client_policy_id']]);
                 }
-    
+
                 if (empty($data['client_policy_id']) || $data['client_policy_id'] == 0) {
-    
+
                     if ($data['ct_type'] == 2) {
                         $client_policy_insert_data = $this->prepareClientPolicyInsertData($data);
                         $client_policy_id = $this->clientPolicyModel->insert($client_policy_insert_data);
-                        $this->policyTransactionModel->update($id, ['client_policy_id' => $client_policy_id]);    
+                        $this->policyTransactionModel->update($id, ['client_policy_id' => $client_policy_id]);
                         $this->InsertIndividualEmpPolicyTable($emp_data, $client_policy_id);
                     }
-    
                 } else {
                     if (isset($data['emp_policy_id']) && !empty($data['emp_policy_id'][0])) {
                         $this->InsertIndividualEmpPolicyTable($emp_data, $data['client_policy_id']);
                     }
                 }
-    
+
                 if ($data['status'] == 'completed' && $data['ct_type'] == 2) {
-                    if($data['client_type'] == 1){
+                    if ($data['client_type'] == 1 && $data['is_cd_reduce_from_bds'] == 1) {
                         $this->processCompletedStatus($data, $data['client_policy_id'], $data['insurer_id']);
                     }
                 }
-    
+
                 $data['pt_co_share_details'] = $this->PTCOShareDetailsModel->where('pt_id', $id)->where('is_active', 1)->findAll();
             }
-    
+
             $client_data = $this->clientModel->where('id', $data['client_id'])->first();
             $data['client_kyc']       = $this->clientKYCDocsModel->where('client_id',  $data['client_id'])->findAll();
             $data['entity_type_id'] =  $client_data['entity_type_id'];
 
             return $this->respondSuccess($id, "Policy transaction updated successfully", $data);
         }
-    
+
         return $this->respondError("Failed to update policy transaction");
     }
-    
+
     private function insertOrUpdateCoShareDetails($data, $pt_id)
-    {   
+    {
         // Prepare data for insertion and updating
         $coShareDetails = [];
-        
+
         // print_r($data); die;
         // die;
 
-        if(isset($data['co_share_id']) && !empty($data['co_share_id'])){
+        if (isset($data['co_share_id']) && !empty($data['co_share_id'])) {
             $this->removePtCoShareRecords($data['co_share_id'], $pt_id);
         }
 
-        if(isset($data['follow_insurer_id'])){
+        if (isset($data['follow_insurer_id'])) {
 
             foreach ($data['follow_insurer_id'] as $index => $insurer) {
-                
+
                 // Separate the insurer and insurer branch
-                list($insurer_branch_id, $insurer_id) = explode('-', $insurer);                
+                if (isset($insurer) && !empty($insurer)) {
+                    list($insurer_branch_id, $insurer_id) = explode('-', $insurer);
+                } else {
+                    $insurer_branch_id = null;
+                    $insurer_id = null;
+                }
 
                 // Prepare each co-share detail entry
                 $coShareDetails[] = [
@@ -469,47 +479,46 @@ class PolicyTransactionController extends BaseController
                     'created_by' => get_session_userid() ?? null,
                     'updated_by' => get_session_userid() ?? null,
                     'id' => $data['co_share_id'][$index] ?? null, // Assuming this is the ID to identify existing records
-                    'follower_policy_no' => $data['follower_policy_no'][$index] ?? null, 
-                    'non_comm_per_amt' => $data['non_comm_per_amt'][$index] ?? null, 
+                    'follower_policy_no' => $data['follower_policy_no'][$index] ?? null,
+                    'non_comm_per_amt' => $data['non_comm_per_amt'][$index] ?? null,
                 ];
             }
 
             // print_r($pt_id); 
             // print_r($coShareDetails); 
             // die;
-        
+
             // Separate data into insert and update batches
-            $insertData = array_filter($coShareDetails, function($detail) {
+            $insertData = array_filter($coShareDetails, function ($detail) {
                 return empty($detail['id']); // Only insert new records
             });
-        
-            $updateData = array_filter($coShareDetails, function($detail) {
+
+            $updateData = array_filter($coShareDetails, function ($detail) {
                 return !empty($detail['id']); // Only update existing records
             });
-        
+
             // Insert new records
             if (!empty($insertData)) {
                 $this->PTCOShareDetailsModel->insertBatch($insertData);
             }
-        
+
             // Update existing records
             if (!empty($updateData)) {
                 $this->PTCOShareDetailsModel->updateBatch($updateData, 'id'); // Assuming 'id' is the unique identifier
             }
-            
+
             // print_r($this->PTCOShareDetailsModel->getLastQuery()); die;
 
             // print_r($coShareDetails); 
             // die;
 
             return true;
-
         }
-        
+
         // print_r($data); 
         // die;
     }
-    
+
     private function prepareClientPolicyInsertData($data)
     {
         return [
@@ -520,7 +529,7 @@ class PolicyTransactionController extends BaseController
             'tpa_branch_id' => $data['tpa_branch_id'] ?? null,
             'policy_type_id' => $data['policy_type_id'] ?? null,
             'policy_start_date' => $data['policy_start_date'] ?? null,
-            'policy_end_date' => $data['policy_end_date'] ?? null ,
+            'policy_end_date' => $data['policy_end_date'] ?? null,
             'policy_status' => 1,
             'is_addon' => $data['is_addon'] ?? null,
             'base_policy' => $data['base_policy'] ?? 0,
@@ -531,7 +540,7 @@ class PolicyTransactionController extends BaseController
             'gst' => 18,
         ];
     }
-    
+
     private function insertTransactionStatus($policyTranId, $data, $statusType)
     {
         $statusData = [
@@ -543,12 +552,12 @@ class PolicyTransactionController extends BaseController
         ];
         $this->policyTransactionStatusModel->insert($statusData);
     }
-    
+
     private function processCompletedStatus($data, $client_policy_id, $insurer_id)
     {
         $totalAmount = (int)$data['total'][0] ?? 0;
-        $description = 'The following amount of Rs. ' . $totalAmount . '/- has been debited for the ' . $data['emp_count'] . ' employees at Inception.';
-    
+        $description = 'The following amount of Rs. ' . $totalAmount . '/- has been debited for the ' . $data['emp_count'] . ' employees at Inception (BDS).';
+
         $cdTransactionData = [
             'amount' => $totalAmount,
             'sub_type_id' => 4,
@@ -562,38 +571,39 @@ class PolicyTransactionController extends BaseController
             'updated_by' => get_session_userid(),
             'event_name' => 'inception',
             'is_active' => 1,
+            'cd_ac_pk'  => $data['cd_ac_pk']
         ];
-    
+
         DepositHelper::saveDeposit($cdTransactionData, get_session_userid());
     }
 
     private function processInsertIndividualMemberInEmpTable($data)
-    {   
+    {
         // print_r($data);
-        if(isset($data['family_name']) && !empty($data['family_name'])){
+        if (isset($data['family_name']) && !empty($data['family_name'])) {
 
             $emp_data = [];
             $emp_ids = [];
             $random_code = generateRandomCode(); // Generate random code once
-            
+
             foreach ($data['family_name'] as $index => $val) {
-            
+
                 // Determine the gender based on the relationship
                 $relationship = $data['relationship'][$index] ?? '';
                 $gender = 'M'; // Default to Male
-                
+
                 // Set gender based on relationship
                 if (in_array($relationship, ['Mother', 'Daughter', 'Mother in law', 'Spouse'])) {
                     $gender = 'F';
                 }
-            
+
                 $emp_data[] = [
                     'client_id' => $data['client_id'] ?? 0,
                     'client_branch_id' => $data['client_branch_id'] ?? 0,
                     'name' => $val,
                     'relationship' => $relationship,
-                    'gender' => $gender, 
-                    'emp_status' => 'active', 
+                    'gender' => $gender,
+                    'emp_status' => 'active',
                     'created_by' => get_session_userid(),
                     'emp_code' => $random_code, // Use the same random code for all
                     'id' => $data['emp_id'][$index] ?? null
@@ -601,52 +611,51 @@ class PolicyTransactionController extends BaseController
 
                 $emp_ids[] = $data['emp_id'][$index] ?? 0;
             }
-            
-            
+
+
             // print_r($emp_data); die;
-            
+
             // Separate data into insert and update batches
-            $insertData = array_filter($emp_data, function($detail) {
+            $insertData = array_filter($emp_data, function ($detail) {
                 return empty($detail['id']); // Only insert new records
             });
-        
-            $updateData = array_filter($emp_data, function($detail) {
+
+            $updateData = array_filter($emp_data, function ($detail) {
                 return !empty($detail['id']); // Only update existing records
             });
-        
+
             // Insert new records
             if (!empty($insertData)) {
                 $this->employeeModel->insertBatch($insertData);
             }
-        
+
             // Update existing records
             if (!empty($updateData)) {
                 $this->employeeModel->updateBatch($updateData, 'id'); // Assuming 'id' is the unique identifier
             }
-            
-            return $emp_ids;
 
+            return $emp_ids;
         }
     }
 
     private function InsertIndividualEmpPolicyTable($emp_ids, $client_policy_id)
-    {   
-        if(!empty($emp_ids)){
+    {
+        if (!empty($emp_ids)) {
 
             $emp_policy_data = [];
-            
+
             foreach ($emp_ids as $index => $emp_id) {
 
                 $emp_policy_data[] = [
                     'employee_id' => $emp_id ?? 0,
                     'client_policy_id' => $client_policy_id ?? 0,
                     'created_by' => get_session_userid(),
-                    'status' => 'active', 
+                    'status' => 'active',
                 ];
             }
-            
+
             // print_r($emp_policy_data); die;
-            
+
             // Insert new records
             if (!empty($emp_policy_data)) {
                 $this->employeePolicyModel->insertBatch($emp_policy_data);
@@ -654,15 +663,14 @@ class PolicyTransactionController extends BaseController
 
 
             return true;
-
         }
     }
-    
+
     private function respondSuccess($id, $message, $data)
     {
-        return $this->respond(['status' => true, 'pt_id' => $id, 'message' => $message, 'data' =>$data], 200);
+        return $this->respond(['status' => true, 'pt_id' => $id, 'message' => $message, 'data' => $data], 200);
     }
-    
+
     private function respondError($message)
     {
         return $this->respond(['status' => false, 'message' => $message], 200);
@@ -673,7 +681,7 @@ class PolicyTransactionController extends BaseController
     public function getInceptionDataForEdit($id)
     {
         $data = $this->policyTransactionModel
-                ->select('
+            ->select('
                         policy_transaction.*, 
                         clients.short_name as client_short_name, 
                         clients.client_type, 
@@ -694,83 +702,83 @@ class PolicyTransactionController extends BaseController
 
                         ) as last_action_date
                     ')
-                ->join('clients', 'clients.id = policy_transaction.client_id')
-                ->join('client_policy', 'policy_transaction.client_policy_id = client_policy.id', 'left')
-                ->join('policy_type', 'client_policy.policy_type_id = policy_type.id', 'left')
-                ->where('policy_transaction.id', $id)
-                ->where('policy_transaction.is_active', 1)
-                ->first();
+            ->join('clients', 'clients.id = policy_transaction.client_id')
+            ->join('client_policy', 'policy_transaction.client_policy_id = client_policy.id', 'left')
+            ->join('policy_type', 'client_policy.policy_type_id = policy_type.id', 'left')
+            ->where('policy_transaction.id', $id)
+            ->where('policy_transaction.is_active', 1)
+            ->first();
 
-            // $data['policy_issue_date'] = (isset($data['policy_issue_date']) && $data['policy_issue_date'] !== null && $data['policy_issue_date'] !== '') 
-            //     ? date('d/m/Y', strtotime($data['policy_issue_date'])) 
-            //     : null;
-            
-            // $data['policy_start_date'] = (isset($data['policy_start_date']) && $data['policy_start_date'] !== null && $data['policy_start_date'] !== '') 
-            //     ? date('d/m/Y', strtotime($data['policy_start_date'])) 
-            //     : null;
-            
-            // $data['policy_end_date'] = (isset($data['policy_end_date']) && $data['policy_end_date'] !== null && $data['policy_end_date'] !== '') 
-            //     ? date('d/m/Y', strtotime($data['policy_end_date'])) 
-            //     : null;
-            
-            // $data['renewal_date'] = (isset($data['renewal_date']) && $data['renewal_date'] !== null && $data['renewal_date'] !== '') 
-            //     ? date('d/m/Y', strtotime($data['renewal_date'])) 
-            //     : null;
-            
-            // $data['rollover_date'] = (isset($data['rollover_date']) && $data['rollover_date'] !== null && $data['rollover_date'] !== '') 
-            //     ? date('d/m/Y', strtotime($data['rollover_date'])) 
-            //     : null;
-            
-            // $data['month'] = (isset($data['month']) && $data['month'] !== null && $data['month'] !== '') 
-            //     ? date('M/Y', strtotime($data['month'])) 
-            //     : null;
+        // $data['policy_issue_date'] = (isset($data['policy_issue_date']) && $data['policy_issue_date'] !== null && $data['policy_issue_date'] !== '') 
+        //     ? date('d/m/Y', strtotime($data['policy_issue_date'])) 
+        //     : null;
 
-            
-            $data['created_at'] = (isset($data['created_at']) && $data['created_at'] !== null && $data['created_at'] !== '') 
-                ? date('d/m/Y h:i:s A', strtotime($data['created_at'])) 
-                : null;
-            
-            $data['updated_at'] = (isset($data['updated_at']) && $data['updated_at'] !== null && $data['updated_at'] !== '') 
-                ? date('d/m/Y h:i:s A', strtotime($data['updated_at'])) 
-                : null;
-            
+        // $data['policy_start_date'] = (isset($data['policy_start_date']) && $data['policy_start_date'] !== null && $data['policy_start_date'] !== '') 
+        //     ? date('d/m/Y', strtotime($data['policy_start_date'])) 
+        //     : null;
+
+        // $data['policy_end_date'] = (isset($data['policy_end_date']) && $data['policy_end_date'] !== null && $data['policy_end_date'] !== '') 
+        //     ? date('d/m/Y', strtotime($data['policy_end_date'])) 
+        //     : null;
+
+        // $data['renewal_date'] = (isset($data['renewal_date']) && $data['renewal_date'] !== null && $data['renewal_date'] !== '') 
+        //     ? date('d/m/Y', strtotime($data['renewal_date'])) 
+        //     : null;
+
+        // $data['rollover_date'] = (isset($data['rollover_date']) && $data['rollover_date'] !== null && $data['rollover_date'] !== '') 
+        //     ? date('d/m/Y', strtotime($data['rollover_date'])) 
+        //     : null;
+
+        // $data['month'] = (isset($data['month']) && $data['month'] !== null && $data['month'] !== '') 
+        //     ? date('M/Y', strtotime($data['month'])) 
+        //     : null;
+
+
+        $data['created_at'] = (isset($data['created_at']) && $data['created_at'] !== null && $data['created_at'] !== '')
+            ? date('d/m/Y h:i:s A', strtotime($data['created_at']))
+            : null;
+
+        $data['updated_at'] = (isset($data['updated_at']) && $data['updated_at'] !== null && $data['updated_at'] !== '')
+            ? date('d/m/Y h:i:s A', strtotime($data['updated_at']))
+            : null;
+
+
+        if (!empty($data['policy_issue_date'])) {
+            $data['policy_issue_date'] =  change_date_format($data['policy_issue_date'], 'Y-m-d', 'd/m/Y');
+        }
+
+        if (!empty($data['policy_start_date'])) {
+            $data['policy_start_date'] =  change_date_format($data['policy_start_date'], 'Y-m-d', 'd/m/Y');
+        }
+
+        if (!empty($data['policy_end_date'])) {
+            $data['policy_end_date'] =  change_date_format($data['policy_end_date'], 'Y-m-d', 'd/m/Y');
+        }
+
+        if (!empty($data['renewal_date'])) {
+            $data['renewal_date'] =  change_date_format($data['renewal_date'], 'Y-m-d', 'd/m/Y');
+        }
+
+        if (!empty($data['rollover_date'])) {
+            $data['rollover_date'] =  change_date_format($data['rollover_date'], 'Y-m-d', 'd/m/Y');
+        }
+
+        if (!empty($data['endorse_eff_date'])) {
+            $data['endorse_eff_date'] =  change_date_format($data['endorse_eff_date'], 'Y-m-d', 'd/m/Y');
+        }
+
+        if (!empty($data['last_action_date'])) {
+            $data['last_action_date'] =  change_date_format($data['last_action_date'], 'Y-m-d', 'd/m/Y');
+        }
+
+        if (!empty($data['month'])) {
+            $data['month'] =  change_date_format($data['month'], 'Y-m-d', 'M/Y');
+        } else {
+            $data['month'] = null;
+        }
 
-            if(!empty($data['policy_issue_date'])){
-                $data['policy_issue_date'] =  change_date_format($data['policy_issue_date'], 'Y-m-d', 'd/m/Y');
-            }
 
-            if(!empty($data['policy_start_date'])){
-                $data['policy_start_date'] =  change_date_format($data['policy_start_date'], 'Y-m-d', 'd/m/Y');
-            }
-    
-            if(!empty($data['policy_end_date'])){
-                $data['policy_end_date'] =  change_date_format($data['policy_end_date'], 'Y-m-d', 'd/m/Y');
-            }
-    
-            if(!empty($data['renewal_date'])){
-                $data['renewal_date'] =  change_date_format($data['renewal_date'], 'Y-m-d', 'd/m/Y');
-            }
-    
-            if(!empty($data['rollover_date'])){
-                $data['rollover_date'] =  change_date_format($data['rollover_date'], 'Y-m-d', 'd/m/Y');
-            }
-    
-            if(!empty($data['endorse_eff_date'])){
-                $data['endorse_eff_date'] =  change_date_format($data['endorse_eff_date'], 'Y-m-d', 'd/m/Y');
-            }
 
-            if(!empty($data['last_action_date'])){
-                $data['last_action_date'] =  change_date_format($data['last_action_date'], 'Y-m-d', 'd/m/Y');
-            }
-    
-            if(!empty($data['month'])){
-                $data['month'] =  change_date_format($data['month'], 'Y-m-d', 'M/Y');
-            }else{
-                $data['month'] = null;
-            }
-    
-            
-                
         // print_r($data); die;
 
         $data['renewal_policy'] = $this->clientPolicyModel
@@ -781,15 +789,15 @@ class PolicyTransactionController extends BaseController
             ->where('client_policy.is_active', 1)
             ->findAll();
 
-       
+
         $data['base_policy_data'] = $this->clientPolicyModel
-                ->select('client_policy.*, policy_type.policy_type')
-                ->join('policy_type', 'policy_type.id = client_policy.policy_type_id')
-                ->where('client_policy.client_id', $data['client_id'])
-                ->where('client_policy.client_branch_id', $data['client_branch_id'])
-                ->whereIn('client_policy.policy_type_id', [2, 3])
-                ->where('client_policy.is_active', 1)
-                ->findAll();
+            ->select('client_policy.*, policy_type.policy_type')
+            ->join('policy_type', 'policy_type.id = client_policy.policy_type_id')
+            ->where('client_policy.client_id', $data['client_id'])
+            ->where('client_policy.client_branch_id', $data['client_branch_id'])
+            ->whereIn('client_policy.policy_type_id', [2, 3])
+            ->where('client_policy.is_active', 1)
+            ->findAll();
 
 
         $ptFileQuery = $this->PTFileModel
@@ -798,7 +806,7 @@ class PolicyTransactionController extends BaseController
             ->where('pt_files.is_active', 1);
 
         if (!in_array(get_role_id(), [1, 5]) && empty(array_intersect(user_team(), [MANAGEMENT_TEAM_ID, FINANCE_TEAM_ID, BUSINESS_TEAM_ID]))) {
-            
+
             if (get_role_id() == 4 && in_array(POS_TEAM_ID, user_team())) {
                 $ptFileQuery->where('pt_files.created_by', get_session_userid());
             }
@@ -809,7 +817,7 @@ class PolicyTransactionController extends BaseController
 
 
         $data['pt_co_share_details'] = $this->PTCOShareDetailsModel
-                ->select("
+            ->select("
                     pt_co_share_details.*,
             
                     (
@@ -925,41 +933,39 @@ class PolicyTransactionController extends BaseController
                         ) AS actual_tep_brokerage_amount
 
                 ")
-                ->where('pt_id', $id)
-                ->where('is_active', 1)
-                ->orderBy('id', 'asc')
-                ->findAll();
-            
+            ->where('pt_id', $id)
+            ->where('is_active', 1)
+            ->orderBy('id', 'asc')
+            ->findAll();
+
         $data['emp_data'] = $this->employeeModel
-                        ->select('employees.*, employee_polices.id as emp_policy_id')
-                        ->join('employee_polices', 'employees.id = employee_polices.employee_id', 'left')
-                        ->where('employees.client_id', $data['client_id'])
-                        ->where('employees.is_active', 1)->findAll();
+            ->select('employees.*, employee_polices.id as emp_policy_id')
+            ->join('employee_polices', 'employees.id = employee_polices.employee_id', 'left')
+            ->where('employees.client_id', $data['client_id'])
+            ->where('employees.is_active', 1)->findAll();
         $data['client_kyc']   = $this->clientKYCDocsModel->where('client_id',  $data['client_id'])->findAll();
         $data['vehicle_docs'] = $this->clientKYCDocsModel
-                        ->where('client_id',  $data['client_id'])
-                        ->where('vehicle_id', $data['vehicle_id'])
-                        ->findAll();
+            ->where('client_id',  $data['client_id'])
+            ->where('vehicle_id', $data['vehicle_id'])
+            ->findAll();
 
         // print_r( $data['pt_co_share_details']); die;
 
-        if($data){
+        if ($data) {
             return $this->respond(['status' => true, 'data' => $data], 200);
-        }else{
+        } else {
             return $this->respond(['status' => false], 200);
         }
-
     }
 
     public function removePolicyTransaction($id)
     {
         if ($id) {
-            
+
             $data['is_active']  = 0;
             $this->policyTransactionModel->where('id', $id)->set($data)->update();
             $this->PTCOShareDetailsModel->where('pt_id', $id)->set($data)->update();
             return $this->respond(['status' => true, 'code' => 200, 'message' => 'Policy Transaction removed successfully'], 200);
-        
         } else {
 
             return $this->respond(['status' => false, 'code' => 404, 'message' => 'Failed to remove policy transaction'], 200);
@@ -967,32 +973,31 @@ class PolicyTransactionController extends BaseController
     }
 
     //function for soft delete for pt_co_share_details records
-    public function removePtCoShareRecords($primaryKeys, $pt_id) 
+    public function removePtCoShareRecords($primaryKeys, $pt_id)
     {
         if (empty($primaryKeys)) {
-            return false; 
+            return false;
         }
-    
+
         // Convert array to a comma-separated string of placeholders for query binding
         $placeholders = implode(',', array_fill(0, count($primaryKeys), '?'));
-    
+
         // Prepare the query with proper binding
         $sql = "UPDATE pt_co_share_details SET is_active = 0 WHERE pt_id = ? AND id NOT IN ($placeholders)";
-        
+
         // Merge pt_id with primary keys for binding
         $params = array_merge([$pt_id], $primaryKeys);
-        
+
         // Execute the query with bound parameters
         return db_connect()->query($sql, $params);
     }
-    
-    
+
 
     //------------------------------------------------------------------------------------------------
 
     // Policy Transaction Endorsement
     public function viewEndorsement()
-    {   
+    {
         // echo '
';
         // !dd($this->getEndorsementDataForEdit(17));
 
@@ -1050,16 +1055,16 @@ class PolicyTransactionController extends BaseController
         $date_type = $this->request->getGet('date_type');
         $issuer = $this->request->getGet('issuer');
         $status = $this->request->getGet('status');
-        
+
         $start_date = (!isset($start_date) || $start_date === '' || $start_date === null) ? 0 : $start_date;
         $end_date = (!isset($end_date) || $end_date === '' || $end_date === null) ? 0 : $end_date;
-        
+
         $client_id = (!isset($client_id) || $client_id === '' || $client_id === null) ? 0 : $client_id;
-        $insurer_id = (!isset($insurer_id) || $insurer_id === '' || $insurer_id === null) ? 0 : $insurer_id;      
-        $policy_type_id = (!isset($policy_type_id) || $policy_type_id === '' || $policy_type_id === null) ? 0 : $policy_type_id;      
-        $date_type = (!isset($date_type) || $date_type === '' || $date_type === null) ? 0 : $date_type;      
-        $issuer = (!isset($issuer) || $issuer === '' || $issuer === null) ? 0 : $issuer;   
-        $status = (!isset($issuer) || $status === '' || $status === null) ? 0 : $status;   
+        $insurer_id = (!isset($insurer_id) || $insurer_id === '' || $insurer_id === null) ? 0 : $insurer_id;
+        $policy_type_id = (!isset($policy_type_id) || $policy_type_id === '' || $policy_type_id === null) ? 0 : $policy_type_id;
+        $date_type = (!isset($date_type) || $date_type === '' || $date_type === null) ? 0 : $date_type;
+        $issuer = (!isset($issuer) || $issuer === '' || $issuer === null) ? 0 : $issuer;
+        $status = (!isset($issuer) || $status === '' || $status === null) ? 0 : $status;
 
 
         $data['endorsement_data_list'] = $this->policyTransactionModel->getEndorsementTranctionListData($start_date, $end_date, $client_id, $insurer_id, $policy_type_id, $date_type, $issuer, $status);
@@ -1068,8 +1073,8 @@ class PolicyTransactionController extends BaseController
 
         $data['insurer'] = $this->insurerModel->where('is_active', 1)->findAll();
         // $data['tpa']           = $this->tpaModel->where('is_active', 1)->findAll();
-        $data['insurer_branch']      = $this->insurerBranchModel ->getInsurerBranchesWithInsurerNames();
-        $data['tpa']           = $this->tpaBranchModel ->getTpaBranchesWithTpaNames();
+        $data['insurer_branch']      = $this->insurerBranchModel->getInsurerBranchesWithInsurerNames();
+        $data['tpa']           = $this->tpaBranchModel->getTpaBranchesWithTpaNames();
 
 
         $this->loadLayout('policy_transaction_endorsement_list', $data);
@@ -1080,7 +1085,7 @@ class PolicyTransactionController extends BaseController
         $id = $this->request->getPost('id');
         $data = $this->preparePolicyTransactionData();
         // print_r($data); die;
-        
+
         if (!$id) {
             return $this->insertEndorsementTransaction($data);
         } else {
@@ -1102,47 +1107,51 @@ class PolicyTransactionController extends BaseController
             $data['policy_with_corr'] = 1;
         }
 
-        if(empty($data['data_received_date'])){
+        if (!isset($data['is_cd_reduce_from_bds'])) {
+            $data['is_cd_reduce_from_bds'] = 0;
+        } elseif ($data['is_cd_reduce_from_bds']) {
+            $data['is_cd_reduce_from_bds'] = 1;
+        }
+
+        if (empty($data['data_received_date'])) {
             $data['data_received_date'] = null;
-        }else{
+        } else {
             $data['data_received_date'] =  change_date_format($data['data_received_date'], 'd/m/Y', 'Y-m-d');
         }
 
-        if(empty($data['policy_issue_date'])){
+        if (empty($data['policy_issue_date'])) {
             $data['policy_issue_date'] = null;
-        }else{
+        } else {
             $data['policy_issue_date'] =  change_date_format($data['policy_issue_date'], 'd/m/Y', 'Y-m-d');
         }
 
-        if(empty($data['endorse_eff_date'])){
+        if (empty($data['endorse_eff_date'])) {
             $data['endorse_eff_date'] = null;
-        }else{
+        } else {
             $data['endorse_eff_date'] =  change_date_format($data['endorse_eff_date'], 'd/m/Y', 'Y-m-d');
-
         }
 
-        if(empty($data['install_due_date'])){
+        if (empty($data['install_due_date'])) {
             $data['install_due_date'] = null;
-        }else{
+        } else {
             $data['install_due_date'] =  change_date_format($data['install_due_date'], 'd/m/Y', 'Y-m-d');
-
         }
 
-        if(!empty($data['month'])){
-            $month = '01/'.$data['month'];
+        if (!empty($data['month'])) {
+            $month = '01/' . $data['month'];
             $data['month'] =  change_date_format($month, 'd/M/Y', 'Y-m-d');
         }
 
-        if(empty($data['last_action_date'])){
+        if (empty($data['last_action_date'])) {
             $data['last_action_date'] = null;
-        }else{
+        } else {
             $data['last_action_date'] = change_date_format($data['last_action_date']);
         }
 
         // print_r($data); die;   
 
         // Separate Insurer and TPA Branch IDs and IDs
-        if(isset($data['insurer_id']) && !empty($data['insurer_id'])){
+        if (isset($data['insurer_id']) && !empty($data['insurer_id'])) {
             list($data['insurer_branch_id'], $data['insurer_id']) = explode('-', $data['insurer_id']);
             if (isset($data['tpa']) && !empty($data['tpa'])) {
                 list($data['tpa_branch_id'], $data['tpa_id']) = explode('-', $data['tpa']);
@@ -1150,20 +1159,20 @@ class PolicyTransactionController extends BaseController
         }
 
         $issue_type = $this->policyTransactionModel
-                        ->where('action_type', 'inception')
-                        ->where('client_id', $this->request->getPost('client_id'))
-                        ->where('client_policy_id', $this->request->getPost('client_policy_id'))
-                        ->where('policy_transaction.is_active', 1)
-                        ->first();
+            ->where('action_type', 'inception')
+            ->where('client_id', $this->request->getPost('client_id'))
+            ->where('client_policy_id', $this->request->getPost('client_policy_id'))
+            ->where('policy_transaction.is_active', 1)
+            ->first();
 
         $data['tsi'] = generate_tsi_code($issue_type['issue_type'] ?? 1);
 
         $client_branch_id = $data['client_branch_id'];
-        if($data['client_branch_id'] == ""){
+        if ($data['client_branch_id'] == "") {
             $client_branch_id = $issue_type['client_branch_id'];
         }
 
-        if(!$data['id']){
+        if (!$data['id']) {
 
             $data += [
                 'issuer' => $issue_type['issuer'] ?? null,
@@ -1171,8 +1180,8 @@ class PolicyTransactionController extends BaseController
                 'policy_type_id' => $issue_type['policy_type_id'] ?? null,
                 'issue_type' => $issue_type['issue_type'] ?? null,
                 'source_client_policy_id' => $issue_type['source_client_policy_id'] ?? null,
-                'cd_ac_no' => $issue_type['cd_ac_no'] ?? null,
-                'cd_ac_pk' => $issue_type['cd_ac_pk'] ?? null,
+                'cd_ac_no' => isset($data['cd_ac_no']) && !empty($data['cd_ac_no']) ? $data['cd_ac_no'] : $issue_type['cd_ac_no'] ?? null,
+                'cd_ac_pk' => isset($data['cd_ac_pk']) && !empty($data['cd_ac_pk']) ? $data['cd_ac_pk'] : $issue_type['cd_ac_pk'] ?? null,
                 // 'policy_issue_date' => $issue_type['policy_issue_date'] ?? null,
                 'policy_start_date' => $issue_type['policy_start_date'] ?? null,
                 'policy_end_date' => $issue_type['policy_end_date'] ?? null,
@@ -1182,7 +1191,7 @@ class PolicyTransactionController extends BaseController
                 'installment' => $issue_type['installment'] ?? null,
                 'installment_data' => $issue_type['installment_data'] ?? null,
                 'location' => $issue_type['location'] ?? null,
-                'links' =>  $issue_type['links'] ??null,
+                'links' =>  $issue_type['links'] ?? null,
                 'stage' => $issue_type['stage'] ?? null,
                 'etat' => $issue_type['etat'] ?? null,
                 'etat_band' => $issue_type['etat_band'] ?? null,
@@ -1231,6 +1240,7 @@ class PolicyTransactionController extends BaseController
         $update = $this->policyTransactionModel->where('id', $id)->set($data)->update();
 
         if ($update) {
+
             $this->insertTransactionStatus($id, $data, 1);
             $this->handleCompletedStatus($data, $id);
             $this->insertOrUpdateCoShareDetails($data, $id);
@@ -1244,12 +1254,12 @@ class PolicyTransactionController extends BaseController
 
     private function handleCompletedStatus($data, $policy_tran_id)
     {
-        if ($data['status'] == 'completed' && $data['ct_type'] == 2) {
+        if ($data['client_type'] == 1 && $data['status'] == 'completed' && $data['is_cd_reduce_from_bds'] == 1) {
 
             $tolamt = $data['total'][0] ?? 0;
 
-            $description = 'The following amount of Rs. ' . round($tolamt, 2) . '/- has been' . 
-                        ($data['action_type'] == 'deletion' ? ' Credit ' : ' Debit ') . 'from the policy transaction';
+            $description = 'The following amount of Rs. ' . round($tolamt, 2) . '/- has been' .
+                ($data['action_type'] == 'deletion' ? ' Credit ' : ' Debit ') . 'from the policy transaction (BDS)';
 
             $cd_tranction_data = [
                 'amount' => $tolamt,
@@ -1264,6 +1274,7 @@ class PolicyTransactionController extends BaseController
                 'updated_by' => get_session_userid(),
                 'event_name' => $data['action_type'],
                 'is_active' => 1,
+                'cd_ac_pk' => $data['cd_ac_pk'] ?? null,
             ];
 
             DepositHelper::saveDeposit($cd_tranction_data, get_session_userid());
@@ -1466,13 +1477,13 @@ class PolicyTransactionController extends BaseController
 
     //file upload function 
     public function uploadFile()
-    {   
+    {
         $GoogleDriveController = new GoogleDriveController();
         $files = $this->request->getFiles();
-        $doc_name = $this->request->getPost('doc_name[]');     
-        $pt_id = $this->request->getPost('pt_id');     
-        $client_policy_id = $this->request->getPost('client_policy_id');     
-        $data = $this->request->getPost();     
+        $doc_name = $this->request->getPost('doc_name[]');
+        $pt_id = $this->request->getPost('pt_id');
+        $client_policy_id = $this->request->getPost('client_policy_id');
+        $data = $this->request->getPost();
 
         $uploadFilePath = WRITEPATH . 'uploads/client_kyc_documents';
 
@@ -1505,7 +1516,7 @@ class PolicyTransactionController extends BaseController
                     $insert = $this->PTFileModel->insert($docData);
 
                     if ($insert) {
-                        $uploadData[] = $docData; 
+                        $uploadData[] = $docData;
                     }
                 }
             }
@@ -1514,23 +1525,23 @@ class PolicyTransactionController extends BaseController
         // print_r($uploadData); die;
 
         // $uploadData = uploadFilesToGoogleDrive($files['file'], $doc_name, $pt_id);
-        
+
         if (!empty($uploadData)) {
 
-        $ptFileQuery = $this->PTFileModel
-            ->join('policy_transaction', 'pt_files.pt_id = policy_transaction.id')
-            ->where('pt_files.pt_id', $pt_id)
-            ->where('pt_files.is_active', 1);
+            $ptFileQuery = $this->PTFileModel
+                ->join('policy_transaction', 'pt_files.pt_id = policy_transaction.id')
+                ->where('pt_files.pt_id', $pt_id)
+                ->where('pt_files.is_active', 1);
 
-        if (!in_array(get_role_id(), [1, 5]) && empty(array_intersect(user_team(), [MANAGEMENT_TEAM_ID, FINANCE_TEAM_ID, BUSINESS_TEAM_ID]))) {
-            
-            if (get_role_id() == 4 && in_array(POS_TEAM_ID, user_team())) {
-                $ptFileQuery->where('pt_files.created_by', get_session_userid());
+            if (!in_array(get_role_id(), [1, 5]) && empty(array_intersect(user_team(), [MANAGEMENT_TEAM_ID, FINANCE_TEAM_ID, BUSINESS_TEAM_ID]))) {
+
+                if (get_role_id() == 4 && in_array(POS_TEAM_ID, user_team())) {
+                    $ptFileQuery->where('pt_files.created_by', get_session_userid());
+                }
             }
-        }
 
-        $data['pt_files'] = $ptFileQuery->findAll();        
-                 
+            $data['pt_files'] = $ptFileQuery->findAll();
+
             return $this->respond(['status' => true, 'message' => 'File uploaded successfully in G-Drive', 'data' => $data]);
         } else {
             return $this->respond(['status' => false, 'message' => 'Failed to upload file in G-Drive']);
@@ -1546,7 +1557,7 @@ class PolicyTransactionController extends BaseController
         // var_dump($ids); die;
 
         $data['invoice_status'] = $this->request->getPost('invoice_status');
-        if($this->request->getPost('invoice_status') == 'generated'){
+        if ($this->request->getPost('invoice_status') == 'generated') {
             $data['invoice_no'] = $this->request->getPost('invoice_no');
         }
 
@@ -1555,8 +1566,8 @@ class PolicyTransactionController extends BaseController
             ->whereIn('id', $ids)
             ->set($data)
             ->update();
-            
-    
+
+
         if ($update) {
 
             return $this->respond(['status' => true, 'data' => $ids, 'message' => 'Invoice status updated successfully'], 200);
@@ -1573,7 +1584,7 @@ class PolicyTransactionController extends BaseController
             'updated_by' => get_session_userid(),
             'is_active' => 0
         ];
-        
+
         $update = $this->PTCOShareDetailsModel->where('id', $id)->set($data)->update();
 
         if ($update) {
@@ -1589,6 +1600,7 @@ class PolicyTransactionController extends BaseController
             ->select("
                     pt_co_share_details.*,
                     policy_transaction.bro_payable_by,
+                    policy_transaction.cd_ac_pk,
                     (
                         select cd_ac_no
                         from cd_master
@@ -1615,13 +1627,15 @@ class PolicyTransactionController extends BaseController
             ->where('action_type', 'inception')
             ->where('is_active', 1)
             ->first();
-            
+
+        $cd_ac_no = db_connect()->table('cd_master')->where('id', $is_copay_yes['cd_ac_pk'] ?? null)->get()->getRowArray();
+
         if ($totalCount) {
-            return $this->respond(['status' => true, 'code' => 200, 'data' => $totalCount, 'is_copay_yes' => $is_copay_yes], 200);
+            return $this->respond(['status' => true, 'code' => 200, 'data' => $totalCount, 'is_copay_yes' => $is_copay_yes, "cd_master_data" => $cd_ac_no], 200);
         } else {
+            $insurer_data = $this->clientPolicyModel->where('id', $client_policy_id)->where('is_active', 1)->first();
             return $this->respond(['status' => false, 'code' => 404, 'message' => 'Failed to get data'], 200);
         }
-
     }
 
     public function checkInvoiceStatus($pt_id)
@@ -1636,28 +1650,28 @@ class PolicyTransactionController extends BaseController
             ->where('insurer_statements.invoice_no IS NOT NULL')
             ->countAllResults();
 
-        if($data){
-            return $this->respond(['status' => true, 'count'=> $data,  'code' => 200], 200);
-        }else{
-            return $this->respond(['status' => false, 'count'=> 0, 'message' => 'No Data Found', 'code' => 404], 200);
+        if ($data) {
+            return $this->respond(['status' => true, 'count' => $data,  'code' => 200], 200);
+        } else {
+            return $this->respond(['status' => false, 'count' => 0, 'message' => 'No Data Found', 'code' => 404], 200);
         }
     }
 
     public function getBasePolicy($client_id, $client_branch_id)
     {
         $data = $this->clientPolicyModel
-        ->select('client_policy.*, policy_type.policy_type')
-        ->join('policy_type', 'policy_type.id = client_policy.policy_type_id')
-        ->where('client_policy.client_id', $client_id)
-        ->where('client_policy.client_branch_id', $client_branch_id)
-        ->whereIn('client_policy.policy_type_id', [2, 3])
-        ->where('client_policy.is_active', 1)
-        ->findAll();
+            ->select('client_policy.*, policy_type.policy_type')
+            ->join('policy_type', 'policy_type.id = client_policy.policy_type_id')
+            ->where('client_policy.client_id', $client_id)
+            ->where('client_policy.client_branch_id', $client_branch_id)
+            ->whereIn('client_policy.policy_type_id', [2, 3])
+            ->where('client_policy.is_active', 1)
+            ->findAll();
 
-        if($data){
-            return $this->respond(['status' => true, 'data'=> $data,  'code' => 200], 200);
-        }else{
-            return $this->respond(['status' => false, 'count'=> 0, 'message' => 'No Data Found', 'code' => 404], 200);
+        if ($data) {
+            return $this->respond(['status' => true, 'data' => $data,  'code' => 200], 200);
+        } else {
+            return $this->respond(['status' => false, 'count' => 0, 'message' => 'No Data Found', 'code' => 404], 200);
         }
     }
 
@@ -1665,7 +1679,7 @@ class PolicyTransactionController extends BaseController
 
     //get BDS Reports data old function
     public function reportBDSOld()
-    {   
+    {
 
         $data['page_name'] = 'BDS Report';
 
@@ -1679,7 +1693,7 @@ class PolicyTransactionController extends BaseController
             'exported_to_tpa' => 'Exported to TPA',
             'imported_from_tpa' => 'Imported from TPA',
             'completed' => 'Completed'
-        ];   
+        ];
         $data['invoice_status_array'] = [
             'yet_to_generate' => 'Yet to Generate',
             'generated' => 'Generated',
@@ -1706,27 +1720,27 @@ class PolicyTransactionController extends BaseController
         $policy_type_id = $this->request->getGet('policy_type_id');
         $date_type = $this->request->getGet('date_type');
         $issuer = $this->request->getGet('issuer');
-        
+
         $start_date = (!isset($start_date) || $start_date === '' || $start_date === null) ? 0 : $start_date;
         $end_date = (!isset($end_date) || $end_date === '' || $end_date === null) ? 0 : $end_date;
-        
+
         $client_id = (!isset($client_id) || $client_id === '' || $client_id === null) ? 0 : $client_id;
-        $insurer_id = (!isset($insurer_id) || $insurer_id === '' || $insurer_id === null) ? 0 : $insurer_id;      
-        $policy_type_id = (!isset($policy_type_id) || $policy_type_id === '' || $policy_type_id === null) ? 0 : $policy_type_id;      
-        $date_type = (!isset($date_type) || $date_type === '' || $date_type === null) ? 0 : $date_type;      
-        $issuer = (!isset($issuer) || $issuer === '' || $issuer === null) ? 0 : $issuer;   
-        
-        
+        $insurer_id = (!isset($insurer_id) || $insurer_id === '' || $insurer_id === null) ? 0 : $insurer_id;
+        $policy_type_id = (!isset($policy_type_id) || $policy_type_id === '' || $policy_type_id === null) ? 0 : $policy_type_id;
+        $date_type = (!isset($date_type) || $date_type === '' || $date_type === null) ? 0 : $date_type;
+        $issuer = (!isset($issuer) || $issuer === '' || $issuer === null) ? 0 : $issuer;
+
+
         //Actual data for the list
         $data['report_list'] = $this->policyTransactionModel->getBDSReportList($start_date, $end_date, $client_id, $insurer_id, $policy_type_id, $date_type, $issuer);
         // dd($data);
-        
-        $this->loadLayout('report_bds_filter', $data); 
+
+        $this->loadLayout('report_bds_filter', $data);
     }
 
     //get BDS Reports data New Function
     public function reportBDS()
-    {   
+    {
 
         $data['page_name'] = 'BDS Report';
 
@@ -1740,7 +1754,7 @@ class PolicyTransactionController extends BaseController
             'exported_to_tpa' => 'Exported to TPA',
             'imported_from_tpa' => 'Imported from TPA',
             'completed' => 'Completed'
-        ];   
+        ];
         $data['invoice_status_array'] = [
             'yet_to_generate' => 'Yet to Generate',
             'generated' => 'Generated',
@@ -1760,6 +1774,7 @@ class PolicyTransactionController extends BaseController
         $data['policy_types'] = $this->policyTypeModel->where('is_active', 1)->findAll();
         $data['clients'] = $this->clientModel->where('is_active', 1)->findAll();
 
+
         //filter datas
         $start_date = $this->request->getGet('start_date');
         $end_date = $this->request->getGet('end_date');
@@ -1772,35 +1787,50 @@ class PolicyTransactionController extends BaseController
         $insurer_branch_id = $this->request->getGet('insurer_branch_id');
         $client_policy_id = $this->request->getGet('client_policy_id');
 
-        if($date_type == 'statement_month'){
+        if ($date_type == 'statement_month') {
             $start_date = (string)date('Y-m-01', strtotime($start_date));
             $end_date = (string)date('Y-m-31', strtotime($end_date));
         }
 
         // dd($start_date, $end_date, $date_type);
-        
+
         $start_date = (!isset($start_date) || $start_date === '' || $start_date === null) ? 0 : $start_date;
         $end_date = (!isset($end_date) || $end_date === '' || $end_date === null) ? 0 : $end_date;
-        
+
         $client_id = (!isset($client_id) || $client_id === '' || $client_id === null) ? 0 : $client_id;
-        $insurer_id = (!isset($insurer_id) || $insurer_id === '' || $insurer_id === null) ? 0 : $insurer_id;      
-        $policy_type_id = (!isset($policy_type_id) || $policy_type_id === '' || $policy_type_id === null) ? 0 : $policy_type_id;      
-        $date_type = (!isset($date_type) || $date_type === '' || $date_type === null) ? 0 : $date_type;      
-        $issuer = (!isset($issuer) || $issuer === '' || $issuer === null) ? 0 : $issuer;   
-        $client_branch_id = (!isset($client_branch_id) || $client_branch_id === '' || $client_branch_id === null) ? 0 : $client_branch_id;   
-        $insurer_branch_id = (!isset($insurer_branch_id) || $insurer_branch_id === '' || $insurer_branch_id === null) ? 0 : $insurer_branch_id;   
-        $client_policy_id = (!isset($client_policy_id) || $client_policy_id === '' || $client_policy_id === null) ? 0 : $client_policy_id;   
-        
-        
+        $insurer_id = (!isset($insurer_id) || $insurer_id === '' || $insurer_id === null) ? 0 : $insurer_id;
+        $policy_type_id = (!isset($policy_type_id) || $policy_type_id === '' || $policy_type_id === null) ? 0 : $policy_type_id;
+        $date_type = (!isset($date_type) || $date_type === '' || $date_type === null) ? 0 : $date_type;
+        $issuer = (!isset($issuer) || $issuer === '' || $issuer === null) ? 0 : $issuer;
+        $client_branch_id = (!isset($client_branch_id) || $client_branch_id === '' || $client_branch_id === null) ? 0 : $client_branch_id;
+        $insurer_branch_id = (!isset($insurer_branch_id) || $insurer_branch_id === '' || $insurer_branch_id === null) ? 0 : $insurer_branch_id;
+        $client_policy_id = (!isset($client_policy_id) || $client_policy_id === '' || $client_policy_id === null) ? 0 : $client_policy_id;
+        if ($this->request->is('post')) {
+            $isFromDashboard = $this->request->getPost("is_dashboard");
+
+            if (isset($isFromDashboard) && !empty($isFromDashboard) && $isFromDashboard == 1) {
+                $ids = $this->request->getPost('ids');
+                
+                $ids = array_filter(explode(',', $ids));
+
+                if (!empty($ids)) {
+                    $idsStr = implode(',', array_map('intval', $ids)); // sanitize IDs to be integers
+                    $where = "policy_transaction.id IN ($idsStr)";
+                } else {
+                    $where = []; // No valid IDs, return empty result
+                }
+            }
+            // dd($ids);
+        }
         //Actual data for the list
-        $data['report_list'] = $this->policyTransactionModel->getBDSReportList($start_date, $end_date, $client_id, $insurer_id, $policy_type_id, $date_type, $issuer, $client_branch_id, $insurer_branch_id, $client_policy_id);
+        $data['report_list'] = $this->policyTransactionModel->getBDSReportList($start_date, $end_date, $client_id, $insurer_id, $policy_type_id, $date_type, $issuer, $client_branch_id, $insurer_branch_id, $client_policy_id, isset($where) ? $where : '');
         //!dd($data['report_list']);
-        
-        $this->loadLayout('report_bds_filter', $data); 
+
+        $this->loadLayout('report_bds_filter', $data);
     }
 
     public function reportVarience()
-    {   
+    {
         $data['page_name'] = 'Variance Report';
 
         $data['issuer'] = [1 => 'JIBS', 2 => 'Nhance'];
@@ -1827,30 +1857,29 @@ class PolicyTransactionController extends BaseController
         $insurer_branch_id = $this->request->getGet('insurer_branch_id');
         $client_policy_id = $this->request->getGet('client_policy_id');
 
-        
+
         $start_date = (!isset($start_date) || $start_date === '' || $start_date === null) ? 0 : $start_date;
         $end_date = (!isset($end_date) || $end_date === '' || $end_date === null) ? 0 : $end_date;
-        
-        $client_id = (!isset($client_id) || $client_id === '' || $client_id === null) ? 0 : $client_id;
-        $insurer_id = (!isset($insurer_id) || $insurer_id === '' || $insurer_id === null) ? 0 : $insurer_id;      
-        $policy_type_id = (!isset($policy_type_id) || $policy_type_id === '' || $policy_type_id === null) ? 0 : $policy_type_id;      
-        $date_type = (!isset($date_type) || $date_type === '' || $date_type === null) ? 0 : $date_type;      
-        $issuer = (!isset($issuer) || $issuer === '' || $issuer === null) ? 0 : $issuer;   
 
-        $client_branch_id = (!isset($client_branch_id) || $client_branch_id === '' || $client_branch_id === null) ? 0 : $client_branch_id;   
-        $insurer_branch_id = (!isset($insurer_branch_id) || $insurer_branch_id === '' || $insurer_branch_id === null) ? 0 : $insurer_branch_id;   
-        $client_policy_id = (!isset($client_policy_id) || $client_policy_id === '' || $client_policy_id === null) ? 0 : $client_policy_id;   
+        $client_id = (!isset($client_id) || $client_id === '' || $client_id === null) ? 0 : $client_id;
+        $insurer_id = (!isset($insurer_id) || $insurer_id === '' || $insurer_id === null) ? 0 : $insurer_id;
+        $policy_type_id = (!isset($policy_type_id) || $policy_type_id === '' || $policy_type_id === null) ? 0 : $policy_type_id;
+        $date_type = (!isset($date_type) || $date_type === '' || $date_type === null) ? 0 : $date_type;
+        $issuer = (!isset($issuer) || $issuer === '' || $issuer === null) ? 0 : $issuer;
+
+        $client_branch_id = (!isset($client_branch_id) || $client_branch_id === '' || $client_branch_id === null) ? 0 : $client_branch_id;
+        $insurer_branch_id = (!isset($insurer_branch_id) || $insurer_branch_id === '' || $insurer_branch_id === null) ? 0 : $insurer_branch_id;
+        $client_policy_id = (!isset($client_policy_id) || $client_policy_id === '' || $client_policy_id === null) ? 0 : $client_policy_id;
 
 
         $data['varience_list'] = $this->policyTransactionModel->getVarienceReportLIst($start_date, $end_date, $client_id, $insurer_id, $policy_type_id, $date_type, $issuer, $client_branch_id, $insurer_branch_id, $client_policy_id);
         // !dd($data['varience_list']);
-        $this->loadLayout('variance_report_list', $data); 
-
+        $this->loadLayout('variance_report_list', $data);
     }
 
 
     public function reportBusinessList()
-    {   
+    {
         $data['page_name'] = 'Business Report';
 
         $data['issuer'] = [1 => 'JIBS', 2 => 'Nhance'];
@@ -1873,24 +1902,24 @@ class PolicyTransactionController extends BaseController
         $policy_type_id = $this->request->getGet('policy_type_id');
         $date_type = $this->request->getGet('date_type');
         $issuer = $this->request->getGet('issuer');
-        
+
         $start_date = (!isset($start_date) || $start_date === '' || $start_date === null) ? 0 : $start_date;
         $end_date = (!isset($end_date) || $end_date === '' || $end_date === null) ? 0 : $end_date;
-        
+
         $client_id = (!isset($client_id) || $client_id === '' || $client_id === null) ? 0 : $client_id;
-        $insurer_id = (!isset($insurer_id) || $insurer_id === '' || $insurer_id === null) ? 0 : $insurer_id;      
-        $policy_type_id = (!isset($policy_type_id) || $policy_type_id === '' || $policy_type_id === null) ? 0 : $policy_type_id;      
-        $date_type = (!isset($date_type) || $date_type === '' || $date_type === null) ? 0 : $date_type;      
-        $issuer = (!isset($issuer) || $issuer === '' || $issuer === null) ? 0 : $issuer;   
+        $insurer_id = (!isset($insurer_id) || $insurer_id === '' || $insurer_id === null) ? 0 : $insurer_id;
+        $policy_type_id = (!isset($policy_type_id) || $policy_type_id === '' || $policy_type_id === null) ? 0 : $policy_type_id;
+        $date_type = (!isset($date_type) || $date_type === '' || $date_type === null) ? 0 : $date_type;
+        $issuer = (!isset($issuer) || $issuer === '' || $issuer === null) ? 0 : $issuer;
 
 
         $data['business_list'] = $this->policyTransactionModel->getBusinessReportList($start_date, $end_date, $client_id, $insurer_id, $policy_type_id, $date_type, $issuer);
-        $this->loadLayout('business_team_list', $data);     
+        $this->loadLayout('business_team_list', $data);
     }
 
 
     public function reportFinanceList()
-    {   
+    {
         $data['page_name'] = 'Finance Report';
 
         $data['issuer'] = [1 => 'JIBS', 2 => 'Nhance'];
@@ -1913,24 +1942,24 @@ class PolicyTransactionController extends BaseController
         $policy_type_id = $this->request->getGet('policy_type_id');
         $date_type = $this->request->getGet('date_type');
         $issuer = $this->request->getGet('issuer');
-        
+
         $start_date = (!isset($start_date) || $start_date === '' || $start_date === null) ? 0 : $start_date;
         $end_date = (!isset($end_date) || $end_date === '' || $end_date === null) ? 0 : $end_date;
-        
+
         $client_id = (!isset($client_id) || $client_id === '' || $client_id === null) ? 0 : $client_id;
-        $insurer_id = (!isset($insurer_id) || $insurer_id === '' || $insurer_id === null) ? 0 : $insurer_id;      
-        $policy_type_id = (!isset($policy_type_id) || $policy_type_id === '' || $policy_type_id === null) ? 0 : $policy_type_id;      
-        $date_type = (!isset($date_type) || $date_type === '' || $date_type === null) ? 0 : $date_type;      
-        $issuer = (!isset($issuer) || $issuer === '' || $issuer === null) ? 0 : $issuer;   
+        $insurer_id = (!isset($insurer_id) || $insurer_id === '' || $insurer_id === null) ? 0 : $insurer_id;
+        $policy_type_id = (!isset($policy_type_id) || $policy_type_id === '' || $policy_type_id === null) ? 0 : $policy_type_id;
+        $date_type = (!isset($date_type) || $date_type === '' || $date_type === null) ? 0 : $date_type;
+        $issuer = (!isset($issuer) || $issuer === '' || $issuer === null) ? 0 : $issuer;
 
 
 
         $data['finance_list'] = $this->policyTransactionModel->getFinanceReportList($start_date, $end_date, $client_id, $insurer_id, $policy_type_id, $date_type, $issuer);
-        $this->loadLayout('finance_team_list', $data); 
+        $this->loadLayout('finance_team_list', $data);
     }
 
     public function reportOutstanding()
-    {   
+    {
         $data['page_name'] = 'Outstanding Report';
 
         $data['issuer'] = [1 => 'JIBS', 2 => 'Nhance'];
@@ -1951,20 +1980,19 @@ class PolicyTransactionController extends BaseController
         $client_id = $this->request->getGet('client_id');
         $insurer_id = $this->request->getGet('insurer_id');
         $insurer_branch_id = $this->request->getGet('insurer_branch_id');
-        
-        $start_date = (!isset($start_date) || $start_date === '' || $start_date === null) ? 0 : change_date_format($start_date,'d-m-Y','Y-m-01');
-        $end_date = (!isset($end_date) || $end_date === '' || $end_date === null) ? 0 : change_date_format($end_date,'d-m-Y','Y-m-31');
-        // dd([$start_date,$end_date]);
-        
-        
-        $insurer_id = (!isset($insurer_id) || $insurer_id === '' || $insurer_id === null) ? 0 : $insurer_id;      
-        $insurer_branch_id = (!isset($insurer_branch_id) || $insurer_branch_id === '' || $insurer_branch_id === null) ? 0 : $insurer_branch_id;      
 
-        $data['outstanting_list'] = $this->policyTransactionModel->getOutstandingReportLIst($start_date, $end_date,$insurer_id, $insurer_branch_id);
+        $start_date = (!isset($start_date) || $start_date === '' || $start_date === null) ? 0 : change_date_format($start_date, 'd-m-Y', 'Y-m-01');
+        $end_date = (!isset($end_date) || $end_date === '' || $end_date === null) ? 0 : change_date_format($end_date, 'd-m-Y', 'Y-m-31');
+        // dd([$start_date,$end_date]);
+
+
+        $insurer_id = (!isset($insurer_id) || $insurer_id === '' || $insurer_id === null) ? 0 : $insurer_id;
+        $insurer_branch_id = (!isset($insurer_branch_id) || $insurer_branch_id === '' || $insurer_branch_id === null) ? 0 : $insurer_branch_id;
+
+        $data['outstanting_list'] = $this->policyTransactionModel->getOutstandingReportLIst($start_date, $end_date, $insurer_id, $insurer_branch_id);
         // dd($this->policyTransactionModel->getLastQuery());
         // dd($data);
-        $this->loadLayout('outstanding_report_list', $data); 
-
+        $this->loadLayout('outstanding_report_list', $data);
     }
 
     //---------------------------------------------------------------------------------------------------
@@ -1973,16 +2001,17 @@ class PolicyTransactionController extends BaseController
     public function statementList()
     {
         // dd($this->validateInsurerStatement(['file_id' => 30]));
-         // $data['insurers'] = $this->insurerModel->where('is_active',1)->findAll();
+        // $data['insurers'] = $this->insurerModel->where('is_active',1)->findAll();
         $today = date('Y-m-d');
         $fromday = $from_date = date('Y-m-d', strtotime('-180 days', strtotime($today)));
         // echo $fromday;die();
-         $data['invoice_status_array'] = $this->invoiceStatus;
-         $data['insurers'] = $this->insurerBranchModel ->getInsurerBranchesWithInsurerNames();
+        $data['invoice_status_array'] = $this->invoiceStatus;
+        $data['insurers'] = $this->insurerBranchModel->getInsurerBranchesWithInsurerNames();
 
-         // dd( $data['insurers']);
-         $data['insurer_statement_list'] = $this->insurerStatements
-                                                ->select('insurer_statements.*, 
+        // dd( $data['insurers']);
+        $data['insurer_statement_list'] = $this->insurerStatements
+            ->select(
+                'insurer_statements.*, 
                                                           insurers.name AS insurer_name, 
                                                           insurers.short_name, 
                                                           user_profiles.first_name, 
@@ -1997,18 +2026,18 @@ class PolicyTransactionController extends BaseController
                                                            WHERE inv_payment_details.is_active = 1 
                                                              AND inv_payment_details.statement_id = insurer_statements.id
                                                           ) AS received_inv_amt'
-                                                )
-                                                ->join('insurers', 'insurer_statements.insurer_id = insurers.id')
-                                                ->join('insurer_branch', 'insurer_statements.branch_id = insurer_branch.id')
-                                                ->join('user_profiles', 'insurer_statements.created_by = user_profiles.id')
-                                                ->where('insurer_statements.is_active', 1)
-                                                // ->where('insurer_statements.file_status','success')
-                                                ->where('date(insurer_statements.created_at) >= ', $from_date)
-                                                ->where('date(insurer_statements.created_at) <= ', $today)
-                                                ->orderBy('insurer_statements.id', 'DESC')
-                                                ->findAll();
+            )
+            ->join('insurers', 'insurer_statements.insurer_id = insurers.id')
+            ->join('insurer_branch', 'insurer_statements.branch_id = insurer_branch.id')
+            ->join('user_profiles', 'insurer_statements.created_by = user_profiles.id')
+            ->where('insurer_statements.is_active', 1)
+            // ->where('insurer_statements.file_status','success')
+            ->where('date(insurer_statements.created_at) >= ', $from_date)
+            ->where('date(insurer_statements.created_at) <= ', $today)
+            ->orderBy('insurer_statements.id', 'DESC')
+            ->findAll();
 
-            // dd( $this->insurerStatements->getLastQuery());
+        // dd( $this->insurerStatements->getLastQuery());
         $data['page_name'] = 'Statement Upload';
 
         $this->loadLayout('insurer_statement_list',  $data);
@@ -2059,80 +2088,77 @@ class PolicyTransactionController extends BaseController
     public function uploadInsurerStatement()
     {
 
-            //validate uploaded file
-            $filename = '';
-            $validated = $this->validate([
-                'statement' => [
-                    'uploaded[statement]',
-                    'mime_in[statement,application/vnd.ms-excel,application/vnd,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.oasis.opendocument.spreadsheet]',
-                    'max_size[statement,16384]',
-                ],
-            ]);
-            // $this->createStatementFolder();
-            if ($validated) 
-            {
-                    $avatar = $this->request->getFile('statement');
-                    if (!$avatar) {
-                        $this->myLogger->logme("error", 'Statement File not found');
-                        return $this->respond(['dataStatus' => false, 'code' => 400, 'message' => 'File not found'], 400);
-                    }
+        //validate uploaded file
+        $filename = '';
+        $validated = $this->validate([
+            'statement' => [
+                'uploaded[statement]',
+                'mime_in[statement,application/vnd.ms-excel,application/vnd,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.oasis.opendocument.spreadsheet]',
+                'max_size[statement,16384]',
+            ],
+        ]);
+        // $this->createStatementFolder();
+        if ($validated) {
+            $avatar = $this->request->getFile('statement');
+            if (!$avatar) {
+                $this->myLogger->logme("error", 'Statement File not found');
+                return $this->respond(['dataStatus' => false, 'code' => 400, 'message' => 'File not found'], 400);
+            }
 
-                    $is_moved = $avatar->move(WRITEPATH . 'uploads/statements/');
-                    if ($is_moved) {
-                        $filename = $avatar->getName();
-                        // Handle successful upload, e.g., log success or further processing
-                        $this->myLogger->logme("error", 'Statement File moved successful');
-                        
-                    } else {
-                        $this->myLogger->logme("error", 'Statement File move failed');
-                        return $this->respond(['dataStatus' => false, 'code' => 500, 'message' => 'File move failed'], 500);
-                    }
+            $is_moved = $avatar->move(WRITEPATH . 'uploads/statements/');
+            if ($is_moved) {
+                $filename = $avatar->getName();
+                // Handle successful upload, e.g., log success or further processing
+                $this->myLogger->logme("error", 'Statement File moved successful');
             } else {
-                $this->myLogger->logme("error", 'Statement Upload failed Invalid file');
-                return $this->respond(['dataStatus' => false, 'code' => 404, 'message' => 'Invalid file'], 404);
+                $this->myLogger->logme("error", 'Statement File move failed');
+                return $this->respond(['dataStatus' => false, 'code' => 500, 'message' => 'File move failed'], 500);
             }
+        } else {
+            $this->myLogger->logme("error", 'Statement Upload failed Invalid file');
+            return $this->respond(['dataStatus' => false, 'code' => 404, 'message' => 'Invalid file'], 404);
+        }
 
-            //process post variable entry in file table
-            $loggedInUserID = get_session_userid();
-            // dd($loggedInUserID);
-            // $loggedInUserID = 8;
+        //process post variable entry in file table
+        $loggedInUserID = get_session_userid();
+        // dd($loggedInUserID);
+        // $loggedInUserID = 8;
 
-            $insurer = $this->request->getPost('insurer');
+        $insurer = $this->request->getPost('insurer');
 
-            $insurer_id = explode('-', $insurer)[0];
-            $branch_id = explode('-', $insurer)[1];
-            // print_r($insurer_id);
-            // print_r($branch_id);
-            // die();
-            $month = $this->request->getPost('statement_month');
-            $month = $month.'-01';
-            // print_r($month);die;
-            $month = change_date_format($month,'Y-M-d','Y-m-d');
-            $stmt_sno = $this->request->getPost('statement_no');
-            // print_r($month);die;
+        $insurer_id = explode('-', $insurer)[0];
+        $branch_id = explode('-', $insurer)[1];
+        // print_r($insurer_id);
+        // print_r($branch_id);
+        // die();
+        $month = $this->request->getPost('statement_month');
+        $month = $month . '-01';
+        // print_r($month);die;
+        $month = change_date_format($month, 'Y-M-d', 'Y-m-d');
+        $stmt_sno = $this->request->getPost('statement_no');
+        // print_r($month);die;
 
-            $file_id = $this->insurerStatements->insert(['insurer_id' => $insurer_id, 'branch_id' => $branch_id, 'file_name' => $filename,'month' => $month, 'created_by' => $loggedInUserID,'stmt_sno' => $stmt_sno]); //here field policy_id have client_policy_id and not policy id from policy master
-            $this->myLogger->logme("error", '{file_id} statement uploaded success', ['file_id' => $file_id]);
+        $file_id = $this->insurerStatements->insert(['insurer_id' => $insurer_id, 'branch_id' => $branch_id, 'file_name' => $filename, 'month' => $month, 'created_by' => $loggedInUserID, 'stmt_sno' => $stmt_sno]); //here field policy_id have client_policy_id and not policy id from policy master
+        $this->myLogger->logme("error", '{file_id} statement uploaded success', ['file_id' => $file_id]);
 
-            //validate file
-            $validation_result = $this->validateInsurerStatement(['file_id' => $file_id]);
-            //update file content to DB
-            if($validation_result['status'] )
-            {
-                $this->updateInsurerStatement(['file_id' => $file_id]);
-            }
-           
-            if (!isset($file_id) || !$validation_result['status']) {
-                return $this->respond(['dataStatus' => false, 'code' => 404, 'message' => 'file not uploaded', 'error_data' => $validation_result['error_data'],'error_code' =>   $validation_result['error_code']], 200);
-            }
+        //validate file
+        $validation_result = $this->validateInsurerStatement(['file_id' => $file_id]);
+        //update file content to DB
+        if ($validation_result['status']) {
+            $this->updateInsurerStatement(['file_id' => $file_id]);
+        }
 
-            if (isset($file_id) || $validation_result['status']) {
-                $this->insurerStatements->where('id', $file_id)->set(['invoice_status' => 'pending'])->update();
-            }
+        if (!isset($file_id) || !$validation_result['status']) {
+            return $this->respond(['dataStatus' => false, 'code' => 404, 'message' => 'file not uploaded', 'error_data' => $validation_result['error_data'], 'error_code' =>   $validation_result['error_code']], 200);
+        }
+
+        if (isset($file_id) || $validation_result['status']) {
+            $this->insurerStatements->where('id', $file_id)->set(['invoice_status' => 'pending'])->update();
+        }
 
 
 
-            return $this->respond(['dataStatus' => true, 'code' => 200, 'data' => 'file upload success'], 200);
+        return $this->respond(['dataStatus' => true, 'code' => 200, 'data' => 'file upload success'], 200);
     }
 
     public function createStatementFolder()
@@ -2140,23 +2166,20 @@ class PolicyTransactionController extends BaseController
         $folderPath = WRITEPATH . 'uploads/statements/';
 
         // Check if the folder doesn't exist
-        if (!file_exists($folderPath)) 
-        {
+        if (!file_exists($folderPath)) {
             // Create the folder
             if (mkdir($folderPath, 0777, true)) {
-               $this->myLogger->logme('error','statement upload folder created successfully');
-                
+                $this->myLogger->logme('error', 'statement upload folder created successfully');
+
                 // Set permissions to a+rwx (read, write, execute for all)
                 chmod($folderPath, 0777);
-                $this->myLogger->logme('error','Permissions set to a+rwx.');
+                $this->myLogger->logme('error', 'Permissions set to a+rwx.');
             } else {
                 // echo "Failed to create folder.";
-                $this->myLogger->logme('error','Failed to create statement upload folder.');
+                $this->myLogger->logme('error', 'Failed to create statement upload folder.');
             }
-        } 
-        else 
-        {
-            $this->myLogger->logme('error','upload folder exists.');
+        } else {
+            $this->myLogger->logme('error', 'upload folder exists.');
         }
     }
 
@@ -2168,37 +2191,35 @@ class PolicyTransactionController extends BaseController
         $file = $this->insurerStatements->find($file_id);
         // dd($file);
         $date = new \DateTime($file['month']);
-        
-        $month = $date->format('m'); 
+
+        $month = $date->format('m');
         $year = $date->format('Y');
 
-        $error_data = ['error_code' => '','error_data' => []];
+        $error_data = ['error_code' => '', 'error_data' => []];
         $status = 'success';
         $ret_status = true;
         // dd($month.'-'.$year);
         $return = [];
-        if(!isset($file))
-        {
+        if (!isset($file)) {
             //file not found in DB
             return array('status' => false, 'msg' => 'statement file not found in DB');
         }
-        $file_name_with_path = WRITEPATH."/uploads/statements/".$file['file_name'];
-        
+        $file_name_with_path = WRITEPATH . "/uploads/statements/" . $file['file_name'];
+
         //check physical file
-        if(!file_exists($file_name_with_path))
-        {
+        if (!file_exists($file_name_with_path)) {
             //file not found  update status and reason 
             $message = "Physcial file not found";
             // echo $message;
-            $this->myLogger->logme('error',($message . ' for statement file id ' . $file_id));
-            $this->insurerStatements->where('id', $file_id)->set(['file_status' => 'failed','reason' => json_encode(['error_code' => 0,'error_data' => $message])])->update();
+            $this->myLogger->logme('error', ($message . ' for statement file id ' . $file_id));
+            $this->insurerStatements->where('id', $file_id)->set(['file_status' => 'failed', 'reason' => json_encode(['error_code' => 0, 'error_data' => $message])])->update();
             return  array('status' => false, 'error_code' => 0); //0 - Physcial file not found
         }
 
         //get excel data to php array
         $spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($file_name_with_path);
         $sheet = $spreadsheet->getActiveSheet();
-        
+
         $highestRowAndColumn = $sheet->getHighestRowAndColumn();
         // dd($highestRowAndColumn);
         $excel_data = $sheet->rangeToArray('A1:' . $highestRowAndColumn['column'] . $highestRowAndColumn['row']);
@@ -2207,33 +2228,29 @@ class PolicyTransactionController extends BaseController
         //get no of line items and update in DB
         $line_items = 0;
         // get uploaded month transactions data
-        $source_data = $this->PTCOShareDetailsModel->getNonReconcileredPolicyTransactions(insurer_id:$file['insurer_id'],insurer_branch_id:$file['branch_id']);
+        $source_data = $this->PTCOShareDetailsModel->getNonReconcileredPolicyTransactions(insurer_id: $file['insurer_id'], insurer_branch_id: $file['branch_id']);
         // var_dump($source_data);die();
         // Kint::dump($source_data);//die();
 
-       
+
         // check policy no,insurer and etc in DB for this month
         // if all good return true, otherwise return false with messssage 
-        foreach ($excel_data as $excel_key => $excel_row) 
-        {
+        foreach ($excel_data as $excel_key => $excel_row) {
             $is_row_empty = check_row_is_empty_or_null($excel_row);
-            if(!$is_row_empty)
-            {
+            if (!$is_row_empty) {
                 // $excel_row = ExcelSanitizeHelper::sanitizeArrayData($excel_row);
                 $is_source_found = 0;
-                $policy_start_date = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $excel_row[4]);//policy_start_date from excel
-                $policy_end_date = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $excel_row[5]);//policy_end_date from excel
-                $policy_no = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $excel_row[1]);//policy_end_date from excel
-                $policy_no = preg_replace('/[\x{200C}\x{200B}]/u', '',  $excel_row[1]);//policy_end_date from excel
-                $client_name = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $excel_row[3]);//clientname from excel
-                $endorsement_no = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $excel_row[2]);//policy_end_date from excel
+                $policy_start_date = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $excel_row[4]); //policy_start_date from excel
+                $policy_end_date = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $excel_row[5]); //policy_end_date from excel
+                $policy_no = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $excel_row[1]); //policy_end_date from excel
+                $policy_no = preg_replace('/[\x{200C}\x{200B}]/u', '',  $excel_row[1]); //policy_end_date from excel
+                $client_name = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $excel_row[3]); //clientname from excel
+                $endorsement_no = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $excel_row[2]); //policy_end_date from excel
                 // Kint::dump($policy_no);
-                foreach ($source_data as $source_key => $source_row) 
-                {
+                foreach ($source_data as $source_key => $source_row) {
                     $source_endorsement_no = $source_row['endorsement_no'] !== null ? $source_row['endorsement_no'] : null;
                     // Kint::dump($source_endorsement_no);
-                    if( ($policy_no == $source_row['policy_no']) && $endorsement_no == $source_endorsement_no  && change_date_format($policy_start_date,'d-m-Y','Y-m-d') == $source_row['policy_start_date'] &&  change_date_format($policy_end_date,'d-m-Y','Y-m-d') == $source_row['policy_end_date'] && $client_name == $source_row['client_name'])
-                    {
+                    if (($policy_no == $source_row['policy_no']) && $endorsement_no == $source_endorsement_no  && change_date_format($policy_start_date, 'd-m-Y', 'Y-m-d') == $source_row['policy_start_date'] &&  change_date_format($policy_end_date, 'd-m-Y', 'Y-m-d') == $source_row['policy_end_date'] && $client_name == $source_row['client_name']) {
                         $is_source_found = 1;
                         $line_items = $line_items + 1;
                         unset($source_data[$source_key]);
@@ -2241,27 +2258,24 @@ class PolicyTransactionController extends BaseController
                     }
                 }
 
-                if($is_source_found == 0)
-                {
+                if ($is_source_found == 0) {
                     // echo $excel_key.'-'.$excel_row[1] . '- not found
'; - $error_data['error_code'] = 1;//match not found + $error_data['error_code'] = 1; //match not found // $error_data['error_data'] = ($error_data['error_data'] ?? []); - $error_data['error_data'] = array_merge($error_data['error_data'],[$excel_row[0]]);//match not found + $error_data['error_data'] = array_merge($error_data['error_data'], [$excel_row[0]]); //match not found } - } } // dd($error_data); - if($error_data['error_code']) - { - $status = 'failed'; - $ret_status = false; + if ($error_data['error_code']) { + $status = 'failed'; + $ret_status = false; } - //update in DB - $this->insurerStatements->where('id', $file_id)->set(['line_items' => $line_items,'file_status' => $status,'reason' => json_encode($error_data)])->update(); - return array('status' => $ret_status, 'error_code' => $error_data['error_code'],'error_data' => $error_data['error_data']); + //update in DB + $this->insurerStatements->where('id', $file_id)->set(['line_items' => $line_items, 'file_status' => $status, 'reason' => json_encode($error_data)])->update(); + return array('status' => $ret_status, 'error_code' => $error_data['error_code'], 'error_data' => $error_data['error_data']); } @@ -2273,37 +2287,35 @@ class PolicyTransactionController extends BaseController $file = $this->insurerStatements->find($file_id); // dd($file); $date = new \DateTime($file['month']); - - $month = $date->format('m'); + + $month = $date->format('m'); $year = $date->format('Y'); - $error_data = ['error_code' => '','error_data' => []]; + $error_data = ['error_code' => '', 'error_data' => []]; $status = 'success'; $ret_status = true; // dd($month.'-'.$year); $return = []; - if(!isset($file)) - { + if (!isset($file)) { //file not found in DB return array('status' => false, 'msg' => 'statement file not found in DB'); } - $file_name_with_path = WRITEPATH."/uploads/statements/".$file['file_name']; - + $file_name_with_path = WRITEPATH . "/uploads/statements/" . $file['file_name']; + //check physical file - if(!file_exists($file_name_with_path)) - { + if (!file_exists($file_name_with_path)) { //file not found update status and reason $message = "Physcial file not found"; // echo $message; - $this->myLogger->logme('error',($message . ' for statement file id ' . $file_id)); - $this->insurerStatements->where('id', $file_id)->set(['file_status' => 'failed','reason' => json_encode(['error_code' => 0,'error_data' => $message])])->update(); + $this->myLogger->logme('error', ($message . ' for statement file id ' . $file_id)); + $this->insurerStatements->where('id', $file_id)->set(['file_status' => 'failed', 'reason' => json_encode(['error_code' => 0, 'error_data' => $message])])->update(); return array('status' => false, 'error_code' => 0); //0 - Physcial file not found } //get excel data to php array $spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($file_name_with_path); $sheet = $spreadsheet->getActiveSheet(); - + $highestRowAndColumn = $sheet->getHighestRowAndColumn(); // dd($highestRowAndColumn); $excel_data = $sheet->rangeToArray('A1:' . $highestRowAndColumn['column'] . $highestRowAndColumn['row']); @@ -2312,33 +2324,29 @@ class PolicyTransactionController extends BaseController //get no of line items and update in DB $line_items = count($excel_data); // get uploaded month transactions data - $source_data = $this->PTCOShareDetailsModel->getNonReconcileredPolicyTransactions(insurer_id:$file['insurer_id'],insurer_branch_id:$file['branch_id']); + $source_data = $this->PTCOShareDetailsModel->getNonReconcileredPolicyTransactions(insurer_id: $file['insurer_id'], insurer_branch_id: $file['branch_id']); // Kint::dump($source_data);//die; // Kint::dump($excel_data); // die; // check policy no,insurer and etc in DB for this month // if all good return true, otherwise return false with messssage $data_to_update = []; - foreach ($excel_data as $excel_key => $excel_row) - { + foreach ($excel_data as $excel_key => $excel_row) { $is_row_empty = check_row_is_empty_or_null($excel_row); - if(!$is_row_empty) - { - + if (!$is_row_empty) { + $is_source_found = 0; - $policy_start_date = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $excel_row[4]);//policy_start_date from excel - $policy_end_date = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $excel_row[5]);//policy_end_date from excel - $policy_no = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $excel_row[1]);//policy_end_date from excel - $policy_no = preg_replace('/[\x{200C}\x{200B}]/u', '', $excel_row[1]);// - $client_name = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $excel_row[3]);//clientname from excel - $endorsement_no = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $excel_row[2]);//policy_end_date from excel - - foreach ($source_data as $source_key => $source_row) - { + $policy_start_date = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $excel_row[4]); //policy_start_date from excel + $policy_end_date = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $excel_row[5]); //policy_end_date from excel + $policy_no = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $excel_row[1]); //policy_end_date from excel + $policy_no = preg_replace('/[\x{200C}\x{200B}]/u', '', $excel_row[1]); // + $client_name = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $excel_row[3]); //clientname from excel + $endorsement_no = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $excel_row[2]); //policy_end_date from excel + + foreach ($source_data as $source_key => $source_row) { // Kint::dump(change_date_format($excel_row[3],'d-m-Y','Y-m-d')); $source_endorsement_no = $source_row['endorsement_no'] !== null ? $source_row['endorsement_no'] : null; - if( ($policy_no == $source_row['policy_no']) && $endorsement_no == $source_endorsement_no && change_date_format($policy_start_date,'d-m-Y','Y-m-d') == $source_row['policy_start_date'] && change_date_format($policy_end_date,'d-m-Y','Y-m-d') == $source_row['policy_end_date'] && $client_name == $source_row['client_name']) - { + if (($policy_no == $source_row['policy_no']) && $endorsement_no == $source_endorsement_no && change_date_format($policy_start_date, 'd-m-Y', 'Y-m-d') == $source_row['policy_start_date'] && change_date_format($policy_end_date, 'd-m-Y', 'Y-m-d') == $source_row['policy_end_date'] && $client_name == $source_row['client_name']) { $is_source_found = 1; //calculate percentage first @@ -2348,18 +2356,13 @@ class PolicyTransactionController extends BaseController $actual_bp_brokerage = trim($excel_row[12]); $actual_bp_amt = trim($excel_row[6]); - if(($actual_bp_brokerage && $actual_bp_brokerage != 0 && $actual_bp_brokerage != "")) - { + if (($actual_bp_brokerage && $actual_bp_brokerage != 0 && $actual_bp_brokerage != "")) { $total_amt += $actual_bp_brokerage; //percentage reverse calculation - if($actual_bp_per == 0 || $actual_bp_per == "") - { - $actual_bp_per = round(($actual_bp_brokerage / $actual_bp_amt) * 100,2); + if ($actual_bp_per == 0 || $actual_bp_per == "") { + $actual_bp_per = round(($actual_bp_brokerage / $actual_bp_amt) * 100, 2); } - - } - else - { + } else { $actual_bp_brokerage = $actual_bp_amt * ($actual_bp_per / 100); $total_amt += $actual_bp_brokerage; } @@ -2368,17 +2371,13 @@ class PolicyTransactionController extends BaseController $actual_tp_brokerage = trim($excel_row[13]); $actual_tp_amt = trim($excel_row[7]); - if($actual_tp_brokerage && $actual_tp_brokerage != 0 && $actual_tp_brokerage != "") - { + if ($actual_tp_brokerage && $actual_tp_brokerage != 0 && $actual_tp_brokerage != "") { $total_amt += $actual_tp_brokerage; //percentage reverse calculation - if($actual_tp_per == 0 || $actual_tp_per == "") - { + if ($actual_tp_per == 0 || $actual_tp_per == "") { $actual_tp_per = ($actual_tp_brokerage / $actual_tp_amt) * 100; } - } - else - { + } else { $actual_tp_brokerage = $actual_tp_amt * ($actual_tp_per / 100); $total_amt += $actual_tp_brokerage; } @@ -2387,17 +2386,13 @@ class PolicyTransactionController extends BaseController $actual_tep_brokerage = trim($excel_row[14]); $actual_tep_amt = trim($excel_row[8]); - if($actual_tep_brokerage && $actual_tep_brokerage != 0 && $actual_tep_brokerage != "") - { + if ($actual_tep_brokerage && $actual_tep_brokerage != 0 && $actual_tep_brokerage != "") { $total_amt += $actual_tep_brokerage; //percentage reverse calculation - if($actual_tep_per == 0 || $actual_tep_per == "") - { + if ($actual_tep_per == 0 || $actual_tep_per == "") { $actual_tep_per = ($actual_tep_brokerage / $actual_tep_amt) * 100; } - } - else - { + } else { $actual_tep_brokerage = $actual_tep_amt * ($actual_tep_per / 100); $total_amt += $actual_tep_brokerage; } @@ -2405,13 +2400,12 @@ class PolicyTransactionController extends BaseController //find variance $variance_amt = $source_row['exp_amt'] - $total_amt; - $data_to_update[] = ['co_share_id' => $source_row['id'],'actual_bp_amt' => $actual_bp_amt,'actual_tp_amt' => $actual_tp_amt,'actual_tep_amt' => $actual_tep_amt,'actual_bp_per' => $actual_bp_per,'actual_tp_per' => $actual_tp_per,'actual_tep_per' => $actual_tep_per,'variance' => $variance_amt,'actual_tep_brokerage_amt' => $actual_tep_brokerage,'actual_tp_brokerage_amt' => $actual_tp_brokerage,'actual_bp_brokerage_amt' => $actual_bp_brokerage,'reward' => trim($excel_row[15]),'statement_id' => $file_id]; + $data_to_update[] = ['co_share_id' => $source_row['id'], 'actual_bp_amt' => $actual_bp_amt, 'actual_tp_amt' => $actual_tp_amt, 'actual_tep_amt' => $actual_tep_amt, 'actual_bp_per' => $actual_bp_per, 'actual_tp_per' => $actual_tp_per, 'actual_tep_per' => $actual_tep_per, 'variance' => $variance_amt, 'actual_tep_brokerage_amt' => $actual_tep_brokerage, 'actual_tp_brokerage_amt' => $actual_tp_brokerage, 'actual_bp_brokerage_amt' => $actual_bp_brokerage, 'reward' => trim($excel_row[15]), 'statement_id' => $file_id]; unset($source_data[$source_key]); continue 2; } } - } } // dd($data_to_update); @@ -2422,59 +2416,57 @@ class PolicyTransactionController extends BaseController // $status = 'failed'; // $ret_status = false; // } - //update in DB - $this->insurerStatements->where('id', $file_id)->set(['file_status' => $status,'reason' => json_encode($error_data),'invoice_status' =>'pending'])->update(); - return array('status' => $ret_status, 'error_code' => $error_data['error_code'],'error_data' => $error_data['error_data']); + //update in DB + $this->insurerStatements->where('id', $file_id)->set(['file_status' => $status, 'reason' => json_encode($error_data), 'invoice_status' => 'pending'])->update(); + return array('status' => $ret_status, 'error_code' => $error_data['error_code'], 'error_data' => $error_data['error_data']); } public function getInvoicePaymentDetails() { - $statement_id = $this->request->getUri()->getSegment(4); - - $inv_details = $this->insurerStatements->find($statement_id); - $inv_payment_details = $this->invPaymentDetailsModel - ->where('statement_id',$statement_id) - ->where('is_active',1) - ->get() - ->getResultArray(); - if(!$inv_details['invoice_value']) - { + $statement_id = $this->request->getUri()->getSegment(4); + + $inv_details = $this->insurerStatements->find($statement_id); + $inv_payment_details = $this->invPaymentDetailsModel + ->where('statement_id', $statement_id) + ->where('is_active', 1) + ->get() + ->getResultArray(); + if (!$inv_details['invoice_value']) { $stmt_level_value = $this->coShareStmtDetailsModel->select('sum(actual_tep_brokerage_amt) + sum(actual_tp_brokerage_amt) + sum(actual_bp_brokerage_amt) + sum(reward) as invoice_value') - ->where('statement_id',$statement_id) - ->groupBy('statement_id') - ->get() - ->getResultArray(); - // print_r($stmt_level_value); - if($stmt_level_value && count($stmt_level_value) && isset($stmt_level_value[0])) - { + ->where('statement_id', $statement_id) + ->groupBy('statement_id') + ->get() + ->getResultArray(); + // print_r($stmt_level_value); + if ($stmt_level_value && count($stmt_level_value) && isset($stmt_level_value[0])) { $inv_details['invoice_value'] = $stmt_level_value[0]['invoice_value']; } } - // ~dd($inv_details); - $data = [ 'invoice_status' => $inv_details['invoice_status'], - 'gst_per' => isset($inv_details['gst_per']) ? $inv_details['gst_per'] : 18 , - 'invoice_value' => $inv_details['invoice_value'], - 'gst_value' => $inv_details['gst_value'], - 'invoice_no' => $inv_details['invoice_no'], - 'invoice_amount' => $inv_details['invoice_amount'], - 'invoice_date' => isset($inv_details['invoice_date']) ? change_date_format($inv_details['invoice_date'],'Y-m-d','d/m/Y') : null ]; + // ~dd($inv_details); + $data = [ + 'invoice_status' => $inv_details['invoice_status'], + 'gst_per' => isset($inv_details['gst_per']) ? $inv_details['gst_per'] : 18, + 'invoice_value' => $inv_details['invoice_value'], + 'gst_value' => $inv_details['gst_value'], + 'invoice_no' => $inv_details['invoice_no'], + 'invoice_amount' => $inv_details['invoice_amount'], + 'invoice_date' => isset($inv_details['invoice_date']) ? change_date_format($inv_details['invoice_date'], 'Y-m-d', 'd/m/Y') : null + ]; $data['payments'] = $inv_payment_details; return $this->respond(['dataStatus' => true, 'code' => 200, 'data' => $data], 200); - - } public function saveInvoicePaymentDetails() { - $jsonData = $this->request->getJSON(); - $jsonData = (array)$jsonData; - // echo 'Hi'; - // print_r($jsonData);die(); + $jsonData = $this->request->getJSON(); + $jsonData = (array)$jsonData; + // echo 'Hi'; + // print_r($jsonData);die(); $invoiceStatus = $jsonData['invoice_status']; $hiddenStatementId = $jsonData['hidden_statement_id']; $invoiceNo = $jsonData['invoice_no']; - $invoiceDate = change_date_format($jsonData['invoice_date'],'d/m/Y','Y-m-d'); + $invoiceDate = change_date_format($jsonData['invoice_date'], 'd/m/Y', 'Y-m-d'); $invoice_amount = $jsonData['invoice_amount']; $invoice_value = $jsonData['invoice_value']; $gst_per = $jsonData['invoice_gst_per']; @@ -2492,10 +2484,10 @@ class PolicyTransactionController extends BaseController 'updated_by' => get_session_userid() ]; - + $this->insurerStatements->update($hiddenStatementId, $parentData); - + // Process child data $receivedAmounts = $jsonData['received_amount']; $utrNos = $jsonData['utr_no']; @@ -2517,19 +2509,20 @@ class PolicyTransactionController extends BaseController 'utr_no' => $utrNo, 'tds' => $tds, 'gst' => $gst, - 'received_date' => change_date_format($paymentDate,'d/m/Y','Y-m-d'), + 'received_date' => change_date_format($paymentDate, 'd/m/Y', 'Y-m-d'), 'statement_id' => $hiddenStatementId ]; - if($pk){ - $childData['updated_by'] = get_session_userid(); - $childData['id'] = (int)$pk; + if ($pk) { + $childData['updated_by'] = get_session_userid(); + $childData['id'] = (int)$pk; + } else { + $childData['created_by'] = get_session_userid(); } - else { $childData['created_by'] = get_session_userid(); } // print_r($childData); // Insert or update $this->invPaymentDetailsModel->save($childData); // print_r($this->invPaymentDetailsModel->errors()); - + } return $this->respond(['dataStatus' => true, 'code' => 200], 200); @@ -2546,7 +2539,7 @@ class PolicyTransactionController extends BaseController public function downloadSampleInsurerStatement() { - + $filePath = ROOTPATH . 'public/sample_excel/insurer_stament_sample.xlsx'; // Check if the file exists if (file_exists($filePath)) { @@ -2566,14 +2559,13 @@ class PolicyTransactionController extends BaseController { $file_id = $this->request->getUri()->getSegment(4); $file = $this->insurerStatements->find($file_id); - return $this->respond(['dataStatus' => true, 'code' => 200,'data' => $file['reason']], 200); + return $this->respond(['dataStatus' => true, 'code' => 200, 'data' => $file['reason']], 200); } public function dmsSearch() { - // echo 'scbsc';die(); - if ($this->request->getMethod() == 'post') - { + // echo 'scbsc';die(); + if ($this->request->getMethod() == 'post') { // $jsonData = (array)$this->request->getJSON(); $customer_id = $this->request->getPost('customer_id'); $policy_id = $this->request->getPost('policy_id'); @@ -2584,37 +2576,33 @@ class PolicyTransactionController extends BaseController $batch_files = []; $files = []; // print_r($jsonData);die(); - if($policy_id != "") - { + if ($policy_id != "") { //get policy docs from policy transation related tables - $pt_files = $this->PTFileModel->getPolicyDriveFilesIndex($policy_id,$policy_doc_name); - $batch_files = $this->batchFileModel->getBatchFilesDataForDocumentSearch($policy_id,$policy_doc_name); - $files = $this->filesModel->getFilesDataForDocumentSearch($policy_id,$policy_doc_name); + $pt_files = $this->PTFileModel->getPolicyDriveFilesIndex($policy_id, $policy_doc_name); + $batch_files = $this->batchFileModel->getBatchFilesDataForDocumentSearch($policy_id, $policy_doc_name); + $files = $this->filesModel->getFilesDataForDocumentSearch($policy_id, $policy_doc_name); // dd($files); // dd($this->PTFileModel->getLastQuery()); // ~dd($pt_files); } - if($customer_id != "") - { - $kyc_files = $this->clientKYCDocsModel->getClientKYCDriveFilesIndex($customer_id,$cus_doc_name); + if ($customer_id != "") { + $kyc_files = $this->clientKYCDocsModel->getClientKYCDriveFilesIndex($customer_id, $cus_doc_name); // dd($this->clientKYCDocsModel->getLastQuery()); // !dd($kyc_files); } - $data['files'] = array_merge($pt_files,$kyc_files,$batch_files,$files); - // dd($data['files']); + $data['files'] = array_merge($pt_files, $kyc_files, $batch_files, $files); + // dd($data['files']); } $data['page_name'] = 'Documents Search'; - $data['customers'] = $this->clientModel->select('id,client_name,short_name as display_value')->where('is_active',1)->get()->getResultarray(); + $data['customers'] = $this->clientModel->select('id,client_name,short_name as display_value')->where('is_active', 1)->get()->getResultarray(); $data['policies'] = $this->clientPolicyModel->select("client_policy.id,client_policy.policy_no,policy_type.policy_type,concat(policy_type.policy_type,' - ',client_policy.policy_no) as display_value") - ->join('policy_type','client_policy.policy_type_id = policy_type.id') - ->where('client_policy.is_active',1)->get()->getResultarray(); - // dd($data); + ->join('policy_type', 'client_policy.policy_type_id = policy_type.id') + ->where('client_policy.is_active', 1)->get()->getResultarray(); + // dd($data); $this->loadLayout('dms_search', $data); - - } //--------------------------------------------------------------------------------------------------- @@ -2674,7 +2662,7 @@ class PolicyTransactionController extends BaseController ], 200); } } - + public function getClientPolicyDataBasedOnClientAndInsuer() { @@ -2685,14 +2673,14 @@ class PolicyTransactionController extends BaseController $policy_type_id = $this->request->getGet('policy_type_id') ?? 0; $builder = db_connect()->table("client_policy") - ->select(" + ->select(" client_policy.*, policy_type.policy_type, ") - ->join('policy_type', 'client_policy.policy_type_id = policy_type.id') - ->where([ - 'client_policy.is_active' => 1, - ]); + ->join('policy_type', 'client_policy.policy_type_id = policy_type.id') + ->where([ + 'client_policy.is_active' => 1, + ]); if (!empty($client_id)) { $builder->where('client_policy.client_id', $client_id); @@ -2713,22 +2701,22 @@ class PolicyTransactionController extends BaseController $result = $builder->get()->getResultArray(); if ($result) { - return $this->respond(['status' => true,'code' => 200,'data' => $result, 'getData' => $this->request->getGet()], 200); + return $this->respond(['status' => true, 'code' => 200, 'data' => $result, 'getData' => $this->request->getGet()], 200); } else { - return $this->respond(['status' => false,'code' => 400,'message' => 'No data found'], 200); + return $this->respond(['status' => false, 'code' => 400, 'message' => 'No data found'], 200); } } - + public function checkCDAmountForBasePremium() { $base_premium = $this->request->getGet('base_premium') ?? 0; $cd_ac_no = $this->request->getGet('cd_ac_no') ?? 0; - + // Validate inputs if (empty($cd_ac_no)) { return $this->respond(['status' => false, 'code' => 400, 'message' => 'CD Account Number is required'], 200); } - + // Build query $db = db_connect(); $builder = $db->table("cash_deposit") @@ -2736,13 +2724,13 @@ class PolicyTransactionController extends BaseController ->where('is_active', 1) ->orderBy('id', 'desc') ->limit(1); - + $result = $builder->get()->getRowArray(); - + if ($result) { // Check if base premium exceeds balance $base_premium_greater_than_balance = $base_premium > $result['balance']; - + return $this->respond([ 'status' => true, 'code' => 200, @@ -2752,48 +2740,44 @@ class PolicyTransactionController extends BaseController 'base_premium_greater_than_balance' => $base_premium_greater_than_balance, ], 200); } - + return $this->respond(['status' => false, 'code' => 400, 'message' => 'No data found for this CD'], 200); } - public function getInsurerStatementMonth() + public function getInsurerStatementMonth() { $insurer_id = $this->request->getGet('insurer_id'); $month = $this->request->getGet('month'); // echo $month; - $insurer_branch_id = explode('-',$insurer_id)[1]; - $insurer_id = explode('-',$insurer_id)[0]; - $month = $month.'-01'; - $month = change_date_format($month,'Y-M-d','Y-m-d'); + $insurer_branch_id = explode('-', $insurer_id)[1]; + $insurer_id = explode('-', $insurer_id)[0]; + $month = $month . '-01'; + $month = change_date_format($month, 'Y-M-d', 'Y-m-d'); // echo $month; $res_data = $this->insurerStatements - ->where('insurer_id',$insurer_id) - ->where('branch_id',$insurer_branch_id) - ->where('month', $month) - ->where('is_active', 1) - ->where('file_status', 'success') - ->findAll(); - - return $this->respond(['dataStatus' => true, 'code' => 200,'data' => $res_data], 200); - + ->where('insurer_id', $insurer_id) + ->where('branch_id', $insurer_branch_id) + ->where('month', $month) + ->where('is_active', 1) + ->where('file_status', 'success') + ->findAll(); + return $this->respond(['dataStatus' => true, 'code' => 200, 'data' => $res_data], 200); } public function deleteStatement($id) { // echo $id;die(); - $this->coShareStmtDetailsModel->where('statement_id',$id) - ->set(['is_active' => 0]) - ->update(); - $this->invPaymentDetailsModel->where('statement_id',$id) - ->set(['is_active' => 0]) - ->update(); - $this->insurerStatements->where('id',$id) - ->set(['is_active' => 0]) - ->update(); + $this->coShareStmtDetailsModel->where('statement_id', $id) + ->set(['is_active' => 0]) + ->update(); + $this->invPaymentDetailsModel->where('statement_id', $id) + ->set(['is_active' => 0]) + ->update(); + $this->insurerStatements->where('id', $id) + ->set(['is_active' => 0]) + ->update(); return $this->respond(['dataStatus' => true, 'code' => 200], 200); } - - -} \ No newline at end of file +} diff --git a/app/Controllers/TicketController.php b/app/Controllers/TicketController.php index f6999bdf..c58a6fef 100644 --- a/app/Controllers/TicketController.php +++ b/app/Controllers/TicketController.php @@ -122,6 +122,7 @@ class TicketController extends BaseController '((CLAIM_FORM_LINK))' => 'claim_form_link', '((CLAIM_FEEDBACK_FORM))' => 'claim_feedback_form', '((SETTLED_LETTER))' => 'settle_letter', + '((APPROVED_LETTER))' => 'approved_letter', ]; $this->extraFields = [ 1 => ['non_id_reason'], @@ -180,9 +181,20 @@ class TicketController extends BaseController return $this->loadLayout('ticket_search', $data); } else { - $data['ticket_data'] = $this->ticketSearch(); - $html = view('ticket_list', $data); - return $this->respond(['status' => true, 'html' => $html], 200); + $isFromDashboard = $this->request->getPost("is_dashboard"); + + if (isset($isFromDashboard) && !empty($isFromDashboard) && $isFromDashboard == 1) { + $data['page_name'] = "Claims"; + $data['ticket_data'] = $this->ticketSearch(3); + $data['claim_status'] = $this->claimStatus->select('id,ticket_type,claim_status')->where('is_active', 1)->findAll(); + $data['client_list'] = $this->clientModel->select('id,client_name')->where('is_active', 1)->findAll(); + return $this->loadLayout('ticket_search', $data); + }else{ + $data['ticket_data'] = $this->ticketSearch(); + $html = view('ticket_list', $data); + return $this->respond(['status' => true, 'html' => $html], 200); + } + } } @@ -190,39 +202,38 @@ class TicketController extends BaseController { $db = db_connect(); - $subquery = $db->table('ticket_history th') - ->select([ - 'th.ticket_id', - "CASE - WHEN DATEDIFF( - th.created_at, - COALESCE( - (SELECT MIN(created_at) FROM ticket_history th2 WHERE th2.ticket_id = th.ticket_id), - tm.created_at - ) - ) BETWEEN 0 AND 6 THEN '0-6 Days' - WHEN DATEDIFF( - th.created_at, - COALESCE( - (SELECT MIN(created_at) FROM ticket_history th2 WHERE th2.ticket_id = th.ticket_id), - tm.created_at - ) - ) BETWEEN 7 AND 12 THEN '7-12 Days' - WHEN DATEDIFF( - th.created_at, - COALESCE( - (SELECT MIN(created_at) FROM ticket_history th2 WHERE th2.ticket_id = th.ticket_id), - tm.created_at - ) - ) BETWEEN 13 AND 20 THEN '13-20 Days' - ELSE 'Above 20 Days' - END AS tat" - ]) - ->join('ticket_master tm', 'tm.id = th.ticket_id', 'right') - ->where('tm.is_active', 1) - ->groupBy('th.ticket_id, tm.created_at'); + $subquery = $db->table('ticket_master tm') + ->select([ + 'tm.id AS ticket_id', + "CASE + WHEN DATEDIFF( + CURDATE(), + COALESCE(latest_history.created_at, tm.created_at) + ) BETWEEN 0 AND 6 THEN '0-6 Days' + WHEN DATEDIFF( + CURDATE(), + COALESCE(latest_history.created_at, tm.created_at) + ) BETWEEN 7 AND 12 THEN '7-12 Days' + WHEN DATEDIFF( + CURDATE(), + COALESCE(latest_history.created_at, tm.created_at) + ) BETWEEN 13 AND 20 THEN '13-20 Days' + ELSE 'Above 20 Days' + END AS tat" + ]) + ->join( + '(SELECT th.ticket_id, MAX(th.created_at) AS created_at + FROM ticket_history th + WHERE th.field_name = "claim_status_id" + GROUP BY th.ticket_id) AS latest_history', + 'latest_history.ticket_id = tm.id', + 'left' + ) + ->where('tm.is_active', 1) + ->groupBy('tm.id, tm.created_at, latest_history.created_at'); - //action 1 get last 100 rows, action 2 filter and get all rows related to that + + //action 1 get last 100 rows, action 2 filter and get all rows related to that and action 3 gets according to dashboard if ($action == 1) { $query = $db->table('ticket_master tm') @@ -257,17 +268,31 @@ class TicketController extends BaseController return $data; + }else if ($action == 3) { + $ids = $this->request->getPost('ids'); + $ids = array_filter(explode(',', $ids)); + + if (!empty($ids)) { + $idsStr = implode(',', array_map('intval', $ids)); // sanitize IDs to be integers + $where = "tm.id IN ($idsStr)"; + } else { + $where = '1 = 0'; // No valid IDs, return empty result + } + // dd($where); + } else { $search_data = $this->request->getPost(); - // print_r($search_data); + // print_r($search_data); die() $where = []; foreach ($search_data as $search_objects => $key) { - if ($key != null && $key != '' && $key != 0) { + if ($key != null && $key != '' && $key != 0 && $search_objects != 'is_dashboard') { $where[$search_objects] = $key; } } // print_rr($where); - $query = $db->table('ticket_master tm') + + } + $query = $db->table('ticket_master tm') ->select([ 'tm.id', 'tm.ticket_type_id', @@ -300,7 +325,6 @@ class TicketController extends BaseController // print_rr($data);die(); return $data; - } } public function ticket_form($ticket_type) @@ -867,24 +891,24 @@ class TicketController extends BaseController } // Construct Mail Data - $mailData[] = [ - 'mail' => $ticket_data['emp_mail'], + $mailData = [ + 'mail' => [$ticket_data['emp_mail'], $ticket_data['emp_personal_mail'] ?? ""], 'subject' => $subject, 'message' => $message, 'cc' => $ticket_data['common_mails'] ?? '', 'attachments' => [] ]; - // if the employee personal mail is not empty then send the mail to the employee personal mail - if(!empty($ticket_data['emp_personal_mail'])){ - $mailData[] = [ - 'mail' => $ticket_data['emp_personal_mail'], - 'subject' => $subject, - 'message' => $message, - 'cc' => $ticket_data['common_mails'] ?? '', - 'attachments' => [] - ]; - } + // // if the employee personal mail is not empty then send the mail to the employee personal mail + // if(!empty($ticket_data['emp_personal_mail'])){ + // $mailData[] = [ + // 'mail' => [$ticket_data['emp_mail'], $ticket_data['emp_personal_mail'] ?? ""], + // 'subject' => $subject, + // 'message' => $message, + // 'cc' => $ticket_data['common_mails'] ?? '', + // 'attachments' => [] + // ]; + // } // print_r($mailData); die; @@ -914,6 +938,8 @@ class TicketController extends BaseController $replaceData = 'Click to open Claim Feedback Form'; } else if ($value == "settle_letter"){ $replaceData = ' View Settlement Letter '; + }else if ($value == "approved_letter"){ + $replaceData = ' View Approved Letter '; }else { $replaceData = isset($ticket_data[$value]) ? $ticket_data[$value] : ''; } @@ -973,28 +999,28 @@ class TicketController extends BaseController $this->myLogger->logme('error', "Fetched ACM emails"); - if(!empty($ticket_data['emp_personal_mail'])){ + // if(!empty($ticket_data['emp_personal_mail'])){ - $this->myLogger->logme('error', "Send employee personal mail start"); + // $this->myLogger->logme('error', "Send employee personal mail start"); - $emailPersonalData = [ - 'mail' => $ticket_data['emp_personal_mail'], - 'subject' => $mail_data['mail_subject'], - 'message' => $mail_data['mail_content'], - 'common' => [], - 'cc' => $acm_mails['common_mails'], - 'attachments' => [] - ]; + // $emailPersonalData = [ + // 'mail' => $ticket_data['emp_personal_mail'], + // 'subject' => $mail_data['mail_subject'], + // 'message' => $mail_data['mail_content'], + // 'common' => [], + // 'cc' => $acm_mails['common_mails'], + // 'attachments' => [] + // ]; - $this->sendTrigger($emailPersonalData); + // $this->sendTrigger($emailPersonalData); - $this->myLogger->logme('error', "Send employee personal mail successfully"); - }else{ - $this->myLogger->logme('error', "Send employee personal mail is empty"); - } + // $this->myLogger->logme('error', "Send employee personal mail successfully"); + // }else{ + // $this->myLogger->logme('error', "Send employee personal mail is empty"); + // } $emailData = [ - 'mail' => $mail_data['emp_mail'], + 'mail' => [$mail_data['emp_mail'], $ticket_data['emp_personal_mail'] ?? ""], 'subject' => $mail_data['mail_subject'], 'message' => $mail_data['mail_content'], 'common' => [], @@ -1016,10 +1042,11 @@ class TicketController extends BaseController if (!empty($auto_mail_enable) && $auto_mail_enable['is_auto_mail'] == 1) { $mail_content = $this->constructMailContent($ticket_id); // print_r($mail_content); die; - foreach ($mail_content as $key => $value) { - $mail_responce = $this->sendTrigger($value); - $this->myLogger->logme('error', '{data} - Auto Mail Sent, Successfully', ['data' => $key + 1]); - } + // foreach ($mail_content as $key => $value) { + $mail_responce = $this->sendTrigger($mail_content); + // $this->myLogger->logme('error', '{data} - Auto Mail Sent, Successfully', ['data' => $key + 1]); + $this->myLogger->logme('error', 'Auto Mail Sent, Successfully'); + // } } elseif (!empty($auto_mail_enable) && $auto_mail_enable['is_auto_mail'] == 0) { $this->myLogger->logme('error', 'Auto Mail Not Sent, Reason: Automail Not Enabled'); } else { @@ -1236,7 +1263,7 @@ class TicketController extends BaseController if ($policy_type == 1){ $viewData['column_order'] = [ 'ACM_NAME', 'ID NOT GENERATED', 'NON ID', 'CDA', 'INFORMATION REQUIRED', - 'UNDER PROCESS - CLAIM NO. UPDATION', 'UNDER PROCESS - INVESTIGATION STATUS', + 'UNDER PROCESS - CLAIM NO. UPDATION', 'UNDER PROCESS - QUERY DOCUMENT RECEIVED', 'APPROVED', 'PAYMENT INITIATED', 'TOTAL' ]; @@ -1255,7 +1282,7 @@ class TicketController extends BaseController }else{ $viewData['column_order'] = [ 'ACM_NAME', 'CLAIM INTIMATION', 'INTIMATION TO INSURER', 'CLIENT PENDING', - 'INSURER PENDING','INVESTIGATION','APPROVED','ON HOLD','TOTAL', 'NOT COVERED', + 'INSURER PENDING','INVESTIGATION','APPROVED','TOTAL', 'NOT COVERED', 'CLOSED', 'SETTLED', 'CLEARED_TOTAL' ]; $ordered_data = []; @@ -1277,7 +1304,7 @@ class TicketController extends BaseController $viewData['column_order'] = [ 'TPA_NAME', 'NON ID', 'ID NOT GENERATED', 'CDA', 'INFORMATION REQUIRED', - 'UNDER PROCESS - CLAIM NO. UPDATION', 'UNDER PROCESS - INVESTIGATION STATUS', + 'UNDER PROCESS - CLAIM NO. UPDATION', 'UNDER PROCESS - QUERY DOCUMENT RECEIVED', 'APPROVED', 'PAYMENT INITIATED', 'TOTAL', 'SETTLED', 'CLOSED', 'CANCELLED', 'RETURNED', 'CLEARED_TOTAL' ]; @@ -1530,7 +1557,7 @@ class TicketController extends BaseController $sent_message_data['ticket_id'] = $ticket_id; $sent_message_data['sender'] = 'staff'; - $sent_message_data['emp_mail'] = $mail_sent_status->data->params->mail; + $sent_message_data['emp_mail'] = isset($mail_sent_status->data->params->mail[0]) ? $mail_sent_status->data->params->mail[0] ?? null : $mail_sent_status->data->params->mail ?? null; $sent_message_data['mail_subject'] = $mail_sent_status->data->params->subject; $sent_message_data['mail_content'] = $mail_sent_status->data->params->message; diff --git a/app/Filters/AuthClientApi.php b/app/Filters/AuthClientApi.php new file mode 100644 index 00000000..2b3eb46e --- /dev/null +++ b/app/Filters/AuthClientApi.php @@ -0,0 +1,87 @@ +clientAPI = new ClientApiModel(); + $this->myLogger = \Config\Services::mylogger(); + + } + public function before(RequestInterface $request, $arguments = null) + { + $response = service('response'); + try { + + $authHeader = $request->getHeaderLine('Authorization'); + + // Check if header exists + if (empty($authHeader)) { + $this->myLogger->log('error', 'Authorization header missing'); + return $response->setJson(['status' => "Failure", 'error' => ['message'=>'Authorization header missing','code'=> 401]], 401); + } + + if(!str_contains($authHeader, 'Bearer ')){ + $this->myLogger->log('error', 'Authorization Bearer missing'); + return $response->setJson(['status' => "Failure", 'error' => ['message'=>'Invalid Authorization header','code'=>401]], 401); + } + + $token = str_replace('Bearer ', '', $authHeader); + if (empty($token)) { + + $this->myLogger->log('error', 'Empty Token'); + return $response->setJson(['status' => "Failure", 'error' => ['message'=>'Invalid Token Format','code'=> 401]], 401); + } + + try{ + + $client_id = ClientTokenHelper::extractClientId($token); + + }catch(\Exception $e){ + + $this->myLogger->log('error', 'Invalid Client Token Format'); + + return $response->setJson(['status' => "Failure", 'error' => 'Invalid Token Format'], 401); + } + $client = $this->clientAPI->where('client_id', $client_id)->where("is_active", 1)->where("api_access", 1)->first(); + + // Client validation + if (!$client) { + $this->myLogger->log('error', 'Client Not Found or Unauthorized'); + return $response->setJson(['status' => "Failure", 'error' => ['message' => 'Client not found or unauthorized','code'=>'403']], 403); + } + + if (hash_equals($client['client_token'], $token)) { + $this->myLogger->log('error', 'Access Granted For Client : '.$client_id); + return true; + } else { + $this->myLogger->log('error', 'Invalid Token given for client : '.$client_id); + return $response->setJson(['status' => "Failure", 'error' => ['message' => 'Invalid token','code'=>401] + ], 401); + } + } catch (\Exception $e) { + log_message('error', 'Error in ClientAPIController:validateToken - ' . $e->getMessage()); + return $response->setJson(['status' => "Failure", 'error' => ['message'=>'Internal Server Error','code'=> 500]], 500); + } + + } + + public function after(RequestInterface $request, ResponseInterface $response, $arguments = null) + { + // Do something here + } +} + diff --git a/app/Helpers/ClientQueryHelper.php b/app/Helpers/ClientQueryHelper.php new file mode 100644 index 00000000..6d58de19 --- /dev/null +++ b/app/Helpers/ClientQueryHelper.php @@ -0,0 +1,100 @@ +clientPolicy = new ClientPolicyModel(); + $this->empModel = new EmployeeModel(); + $this->empPolicyModel = new EmployeePolicyModel(); + $this->claimModel = new TicketMasterModel(); + } + + public function clientPolicyMaster($client_id){ + + return $this->clientPolicy->select("client_policy.id as policy_ref_no,client_policy.client_branch_id as branch_ref_no,client_branch.branch_code, + client_policy.insurer_id as insurer_ref_no,insurers.name as insurer,client_policy.policy_type_id,policy_type.policy_type, + client_policy.tpa_id as tpa_ref_no,client_policy.policy_start_date,client_policy.policy_end_date,client_policy.policy_no,client_policy.policy_status") + ->join('insurers', 'client_policy.insurer_id = insurers.id and insurers.is_active = 1') + ->join('policy_type', 'client_policy.policy_type_id = policy_type.id and policy_type.is_active = 1') + ->join('client_branch', 'client_policy.client_branch_id = client_branch.id and client_branch.is_active = 1') + ->where('client_policy.is_active', 1) + ->where('client_policy.client_id', $client_id) + ->get() + ->getResultArray(); + } + + public function sendEmpMaster($client_id,$where,$limit,$offset = 0) + { + + return $this->empModel->select("id as ref_no,name,emp_code, + relationship,emp_status,mobile,email_corporate, + change_event,dob,doj,band,gender") + ->where("is_active",1) + ->where("client_id", $client_id) + ->where($where) + ->whereNotIn('emp_status', ['truncated'],) + ->orderBy("id") + ->limit($limit,$offset) + ->get() + ->getResultArray(); + + } + + public function sendEmpPolicies($emp_id) + { + return $this->empPolicyModel->select("id as ref_no,client_policy_id as policy_ref_no, + tpa_id as tpa_ref_no,uhid as policy_no,pre_existing_alignments,age_band,basic_cover_si,date_coverage, + policy_end_date,days,premium,rata_premimum,date_of_exit,reason_for_exit,payable_employee") + ->where("employee_id", $emp_id) + ->where("is_active", 1) + ->whereNotIn("status", ['truncated']) + ->orderBy("id") + ->get() + ->getResultArray(); + } + + public function sendClaimMaster($client_id,$where,$limit,$offset = 0) + { + + return $this->claimModel->select("i.name as insurer,tpa.name as tpa,concat(up.first_name,' ',up.last_name) as acm_name, + cs.claim_status,ticket_master.emp_name,ticket_master.insured_name, + ticket_master.emp_code,ticket_master.policy_no,ticket_master.ticket_type_id as policy_type, + ticket_master.emp_mobile,ticket_master.emp_mail,ticket_master.hospital_name,ticket_master.doa, + ticket_master.dod,ticket_master.claim_amount,ticket_master.date_of_join,ticket_master.date_of_incep, + ticket_master.date_of_accident,ticket_master.date_of_death, + ticket_master.date_of_intimat,ticket_master.claim_number,ticket_master.si_amt, + ticket_master.raised_date,ticket_master.registration_date,ticket_master.denial_date, + ticket_master.settled_date,ticket_master.denial_reason,ticket_master.approved_amount, + ticket_master.utr_details,ticket_master.return_remark,ticket_master.cancel_remark, + ticket_master.non_id_reason,ticket_master.head_rejection_reason") + ->join("tpa","tpa.id = ticket_master.tpa_id and tpa.is_active = 1") + ->join("user_profiles up", "ticket_master.acm_id = up.id and up.is_active = 1") + ->join('insurers i', 'ticket_master.insurer_id = i.id and i.is_active = 1') + ->join('ticket_claim_status cs', 'ticket_master.claim_status_id = cs.id and cs.is_active = 1') + ->where("ticket_master.client_id", $client_id) + ->where("ticket_master.is_active", 1) + ->where($where) + ->orderBy("ticket_master.id") + ->limit($limit,$offset) + ->get() + ->getResultArray(); + + } + + +} \ No newline at end of file diff --git a/app/Helpers/ClientTokenHelper.php b/app/Helpers/ClientTokenHelper.php new file mode 100644 index 00000000..50c73f23 --- /dev/null +++ b/app/Helpers/ClientTokenHelper.php @@ -0,0 +1,54 @@ +query($getLastBalanceQuery, $getLastBalanceParams)->getRow()->balance ?? 0; diff --git a/app/Helpers/GmailResponseHandler.php b/app/Helpers/GmailResponseHandler.php index 8ff0ed35..beb731a7 100644 --- a/app/Helpers/GmailResponseHandler.php +++ b/app/Helpers/GmailResponseHandler.php @@ -74,7 +74,11 @@ class GmailResponseHandler{ if(in_array($key,$arr)){ $data[$key] = isset($value)?json_encode($value):null; }else{ - $data[$key] = isset($value)?$value:null; + if($key == "mail" && is_array($value)){ + $data[$key] = isset($value)?json_encode($value):null; + }else{ + $data[$key] = isset($value)?$value:null; + } } } } diff --git a/app/Helpers/MailHelper.php b/app/Helpers/MailHelper.php index 8fc4884b..cce74a9a 100755 --- a/app/Helpers/MailHelper.php +++ b/app/Helpers/MailHelper.php @@ -292,154 +292,164 @@ class MailHelper } } - public static function send_email($params) -{ - $myLogger = \Config\Services::mylogger(); - - $emaill = $params['mail']; - $subject = $params['subject']; - $message = $params['message']; - $attachments = isset($params['attachments']) ? $params['attachments'] : []; - $common = isset($params['common']) ? $params['common'] : ''; - $bcc = isset($params['bcc']) ? $params['bcc'] : ''; - $cc = isset($params['cc']) ? $params['cc'] : ''; - - $from_address = isset($params['from_mail']) && !empty($params['from_mail']) ? $params['from_mail'] : getenv('email.fromEmail'); - // $from_address = "claims@nhanceindia.in"; - try { - $curl = curl_init(); - - $postData = [ - 'from' => [ - 'address' => $from_address - ], - 'to' => [ - [ + public static function send_email($params) + { + $myLogger = \Config\Services::mylogger(); + if (is_array($params['mail'])) { + $emails = []; + + foreach ($params['mail'] as $key => $emaill) { + $emails[] = [ 'email_address' => [ 'address' => $emaill ] + ]; + } + } else { + $emails[] = [ + 'email_address' => [ + 'address' => $params['mail'] ] - ], - 'subject' => $subject, - 'htmlbody' => $message - ]; - - // Add CC recipients if provided - if (!empty($cc)) { - $ccList = explode(',', $cc); - $ccList = array_map('trim', $ccList); - $postData['cc'] = array_map(function($email) { - return [ - 'email_address' => [ - 'address' => $email - ] - ]; - }, $ccList); - } - // Add BCC if present - if (!empty($bcc)) { - $bccList = explode(',', $bcc); - $bccList = array_map('trim', $bccList); - $postData['bcc'] = array_map(function($email) { - return [ - 'email_address' => [ - 'address' => $email - ] - ]; - }, $bccList); + ]; } - // Add BCC recipients if provided - // if (!empty($bcc)) { - // $postData['bcc'] = []; - // // Handle both string and array inputs for BCC - // $bccEmails = is_array($bcc) ? $bcc : [$bcc]; - // foreach ($bccEmails as $bccEmail) { - // $postData['bcc'][] = [ - // 'email_address' => [ - // 'address' => $bccEmail - // ] - // ]; - // } - // } + $subject = $params['subject']; + $message = $params['message']; + $attachments = isset($params['attachments']) ? $params['attachments'] : []; + $common = isset($params['common']) ? $params['common'] : ''; + $bcc = isset($params['bcc']) ? $params['bcc'] : ''; + $cc = isset($params['cc']) ? $params['cc'] : ''; - // Handle attachments - if (!empty($attachments)) { - $postData['attachments'] = []; - foreach ($attachments as $attachment) { - if (isset($attachment['filePath']) && file_exists($attachment['filePath'])) { - // Determine MIME type dynamically - $fileMimeType = mime_content_type($attachment['filePath']); - - $postData['attachments'][] = [ - 'content' => base64_encode(file_get_contents($attachment['filePath'])), - 'name' => $attachment['fileName'], - 'mime_type' => $fileMimeType, + $from_address = isset($params['from_mail']) && !empty($params['from_mail']) ? $params['from_mail'] : getenv('email.fromEmail'); + // $from_address = "claims@nhanceindia.in"; + try { + $curl = curl_init(); + + $postData = [ + 'from' => [ + 'address' => $from_address + ], + 'to' => $emails, + 'subject' => $subject, + 'htmlbody' => $message + ]; + + // Add CC recipients if provided + if (!empty($cc)) { + $ccList = explode(',', $cc); + $ccList = array_map('trim', $ccList); + $postData['cc'] = array_map(function ($email) { + return [ + 'email_address' => [ + 'address' => $email + ] ]; + }, $ccList); + } + // Add BCC if present + if (!empty($bcc)) { + $bccList = explode(',', $bcc); + $bccList = array_map('trim', $bccList); + $postData['bcc'] = array_map(function ($email) { + return [ + 'email_address' => [ + 'address' => $email + ] + ]; + }, $bccList); + } + + // Add BCC recipients if provided + // if (!empty($bcc)) { + // $postData['bcc'] = []; + // // Handle both string and array inputs for BCC + // $bccEmails = is_array($bcc) ? $bcc : [$bcc]; + // foreach ($bccEmails as $bccEmail) { + // $postData['bcc'][] = [ + // 'email_address' => [ + // 'address' => $bccEmail + // ] + // ]; + // } + // } + + // Handle attachments + if (!empty($attachments)) { + $postData['attachments'] = []; + foreach ($attachments as $attachment) { + if (isset($attachment['filePath']) && file_exists($attachment['filePath'])) { + // Determine MIME type dynamically + $fileMimeType = mime_content_type($attachment['filePath']); + + $postData['attachments'][] = [ + 'content' => base64_encode(file_get_contents($attachment['filePath'])), + 'name' => $attachment['fileName'], + 'mime_type' => $fileMimeType, + ]; + } } } - } - curl_setopt_array($curl, [ - CURLOPT_URL => "https://api.zeptomail.in/v1.1/email", - CURLOPT_RETURNTRANSFER => true, - CURLOPT_ENCODING => "", - CURLOPT_MAXREDIRS => 10, - CURLOPT_TIMEOUT => 30, - CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, - CURLOPT_CUSTOMREQUEST => "POST", - CURLOPT_POSTFIELDS => json_encode($postData), - CURLOPT_HTTPHEADER => [ - "accept: application/json", - "authorization: Zoho-enczapikey " . getenv('ZEPTO_API_KEY'), - "cache-control: no-cache", - "content-type: application/json", - ], - ]); + curl_setopt_array($curl, [ + CURLOPT_URL => "https://api.zeptomail.in/v1.1/email", + CURLOPT_RETURNTRANSFER => true, + CURLOPT_ENCODING => "", + CURLOPT_MAXREDIRS => 10, + CURLOPT_TIMEOUT => 30, + CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, + CURLOPT_CUSTOMREQUEST => "POST", + CURLOPT_POSTFIELDS => json_encode($postData), + CURLOPT_HTTPHEADER => [ + "accept: application/json", + "authorization: Zoho-enczapikey " . getenv('ZEPTO_API_KEY'), + "cache-control: no-cache", + "content-type: application/json", + ], + ]); - $mail_result = curl_exec($curl); - $err = curl_error($curl); - curl_close($curl); + $mail_result = curl_exec($curl); + $err = curl_error($curl); + curl_close($curl); - $res['params'] = $params; - $MailDataHelper = new GmailResponseHandler(); - $apiResponse = json_decode($mail_result, true); - $res['zepto_api'] = $apiResponse; - - if (isset($apiResponse['error'])) { + $res['params'] = $params; + $MailDataHelper = new GmailResponseHandler(); + $apiResponse = json_decode($mail_result, true); + $res['zepto_api'] = $apiResponse; + + if (isset($apiResponse['error'])) { + $response = $res; + $MailDataHelper->receive_and_distribute_param_to_functions($response); + return json_encode([ + 'status' => 'failed', + 'code' => 404, + 'message' => 'Email Sent Failed...' . json_encode($params['mail']), + 'data' => $res + ], 404); + } + + if (isset($apiResponse['data'])) { + $response = $res; + $MailDataHelper->receive_and_distribute_param_to_functions($response); + return json_encode([ + 'status' => 'success', + 'code' => 200, + 'message' => 'Email Sent Successfully...' . json_encode($params['mail']), + 'data' => $res + ], 200); + } + } catch (\Exception $e) { + $msg['error'] = $e->getMessage(); + $msg['params'] = $params; $response = $res; $MailDataHelper->receive_and_distribute_param_to_functions($response); return json_encode([ 'status' => 'failed', - 'code' => 404, - 'message' => 'Email Sent Failed...' . $emaill, - 'data' => $res - ], 404); + 'code' => 500, + 'data' => $msg + ], 500); } - - if (isset($apiResponse['data'])) { - $response = $res; - $MailDataHelper->receive_and_distribute_param_to_functions($response); - return json_encode([ - 'status' => 'success', - 'code' => 200, - 'message' => 'Email Sent Successfully...' . $emaill, - 'data' => $res - ], 200); - } - - } catch (\Exception $e) { - $msg['error'] = $e->getMessage(); - $msg['params'] = $params; - $response = $res; - $MailDataHelper->receive_and_distribute_param_to_functions($response); - return json_encode([ - 'status' => 'failed', - 'code' => 500, - 'data' => $msg - ], 500); } -} + public static function bulk_mail(array $mails = []) { $model = new JobModel(); diff --git a/app/Helpers/clientWebHookHelper.php b/app/Helpers/clientWebHookHelper.php new file mode 100644 index 00000000..ba55eb18 --- /dev/null +++ b/app/Helpers/clientWebHookHelper.php @@ -0,0 +1,39 @@ +empModel = new EmployeeModel(); + $this->empPolicyModel = new EmployeePolicyModel(); + $this->claimModel = new TicketMasterModel(); + + } + + public function mapObjectType($data_to_map, $objectType) + { + $mapped_data = []; + foreach ($objectType as $key => $value){ + $mapped_data[$key] = $data_to_map[$value]; + } + + return $mapped_data; + } + + public function insertData($mapped_data, $type){ + + $model = $type == 1 ? "empModel" : "claimModel"; + $this->$model->insert($mapped_data); + } +} diff --git a/app/Helpers/excel_util_helper.php b/app/Helpers/excel_util_helper.php index c90eebb3..593b2d05 100755 --- a/app/Helpers/excel_util_helper.php +++ b/app/Helpers/excel_util_helper.php @@ -407,7 +407,7 @@ if (!function_exists('data_group_by_family')) $row = transform_enrollment_row_to_inception_row($row); } - if(strtolower($row[5]) == 'self' && isset($result[$row[1]])) + if(isset($row[5]) && strtolower($row[5]) == 'self' && isset($result[$row[1]])) { array_unshift($result[$row[1]],$row); }else @@ -1132,7 +1132,7 @@ if (!function_exists('premium_calculation_manager')) { $insurer = new InsurerModel(); $insurer = ($insurer->find($policy_terms['insurer_id'])); - if($insurer['addition_add_day'] == true) + if(isset($insurer['addition_add_day']) && $insurer['addition_add_day'] == true) { // $emp_data['policy_details']['date_coverage'] = (new DateTime($emp_data['policy_details']['date_coverage']))->modify('+1 day')->format('Y-m-d'); @@ -2119,15 +2119,15 @@ if(!function_exists('check_unit')) if(!function_exists('transform_si_excel_row_to_calculatable_format')) { - function transform_si_excel_row_to_calculatable_format(array $employee,array$employee_policy,array $maxage_and_maxcount,array $slab_details,string $applicable_slab_name,string $augmented_si,array $grid_master) - { + function transform_si_excel_row_to_calculatable_format(array $employee, array $employee_policy,array $maxage_and_maxcount,array $slab_details,string $applicable_slab_name,string $augmented_si,array $grid_master) + { $employee['temp'] = []; $employee['temp']['max_age'] = $maxage_and_maxcount[0]['max_age']; $employee['temp']['max_count'] = $maxage_and_maxcount[0]['family_member_count']; $employee['temp']['grid_name'] = $applicable_slab_name; $employee['temp']['grid_master'] = $grid_master; $employee['temp']['acting_self'] = true; - $employee['temp']['premium_type'] = $grid_master['premium_type']; + $employee['temp']['premium_type'] = $slab_details['slab_rates'][0]['premium_type']; $employee['temp']['grid_type'] = $applicable_slab_name; $employee['temp']['grid_id'] = $grid_master['ui_type']; $employee['temp']['action'] = 'SI'; @@ -2137,7 +2137,7 @@ if(!function_exists('transform_si_excel_row_to_calculatable_format')) $employee['temp']['policy_status'] = null; $employee['temp']['emp_status'] = null; $employee['temp']['rata_premimum'] = null; - + $employee['policy_details'] = $employee_policy; return $employee; diff --git a/app/Helpers/utility_helper.php b/app/Helpers/utility_helper.php index 54a5883a..33f504c0 100755 --- a/app/Helpers/utility_helper.php +++ b/app/Helpers/utility_helper.php @@ -677,3 +677,69 @@ if (!function_exists('is_json_string')) { } } +if (!function_exists('check_cd_entry_exist')) { + function check_cd_entry_exist($params) + { + $db = db_connect(); + + $client_id = $params['client_id']; + $client_policy_id = $params['client_policy_id']; + $insurer_id = $params['insurer_id']; + $cd_ac_pk = $params['cd_ac_pk']; + $event_name = $params['event_name']; + + // Check if truncated entry (sub_type = 8) exists + $has_truncated = $db->table('cash_deposit') + ->where('client_id', $client_id) + ->where('insurer_id', $insurer_id) + ->where('cd_ac_pk', $cd_ac_pk) + ->where('client_policy_id', $client_policy_id) + ->where('event_name', $event_name) + ->where('sub_type', 8) + ->where('is_active', 1) + ->countAllResults(); + + if ($has_truncated) { + + echo "has_truncated"; + // Get all entries with same details (including truncated) + $entries = $db->table('cash_deposit') + ->where('client_id', $client_id) + ->where('insurer_id', $insurer_id) + ->where('cd_ac_pk', $cd_ac_pk) + ->where('client_policy_id', $client_policy_id) + ->where('event_name', $event_name) + ->where('is_active', 1) + ->where('sub_type !=', 8) + ->get() + ->getResultArray(); + + if (count($entries) > 1) { + // Only one entry found (truncated) + return true; + }else{ + return false; + } + } else { + // Check if any other entry exists + $entry = $db->table('cash_deposit') + ->where('client_id', $client_id) + ->where('insurer_id', $insurer_id) + ->where('cd_ac_pk', $cd_ac_pk) + ->where('client_policy_id', $client_policy_id) + ->where('event_name', $event_name) + ->where('is_active', 1) + ->get() + ->getRowArray(); + + if (!empty($entry)) { + return true; + } + } + + return false; + } +} + + + diff --git a/app/Models/ClientApiModel.php b/app/Models/ClientApiModel.php new file mode 100644 index 00000000..59830aa0 --- /dev/null +++ b/app/Models/ClientApiModel.php @@ -0,0 +1,45 @@ +db->table('client_policy') - ->select('insurers.name as insurer_name, insurers.short_name as insurer_short') - ->select('tpa.name as tpa_name, tpa.short_name as tpa_short') - ->select('policies.name as policy_name') - ->select('insurer_branch.branch_name as insurer_branch_name, insurer_branch.branch_code as insurer_branch_code') - ->select('tpa_branch.branch_name as tpa_branch_name, tpa_branch.branch_code as tpa_branch_code') - ->join('insurers', 'insurers.id = client_policy.insurer_id') - ->join('insurer_branch', 'client_policy.insurer_branch_id = insurer_branch.id') - ->join('tpa', 'tpa.id = client_policy.tpa_id') - ->join('tpa_branch', 'client_policy.tpa_branch_id = tpa_branch.id') - ->join('policies', 'policies.id = client_policy.policy_id') - ->where('client_policy.id', $id) - ->get() - ->getResult(); - + ->select('insurers.name as insurer_name, insurers.short_name as insurer_short') + ->select('tpa.name as tpa_name, tpa.short_name as tpa_short') + ->select('policies.name as policy_name') + ->select('insurer_branch.branch_name as insurer_branch_name, insurer_branch.branch_code as insurer_branch_code') + ->select('tpa_branch.branch_name as tpa_branch_name, tpa_branch.branch_code as tpa_branch_code') + ->join('insurers', 'insurers.id = client_policy.insurer_id') + ->join('insurer_branch', 'client_policy.insurer_branch_id = insurer_branch.id') + ->join('tpa', 'tpa.id = client_policy.tpa_id') + ->join('tpa_branch', 'client_policy.tpa_branch_id = tpa_branch.id') + ->join('policies', 'policies.id = client_policy.policy_id') + ->where('client_policy.id', $id) + ->get() + ->getResult(); } - public function getClientPolicyByClientId($client_id){ - + public function getClientPolicyByClientId($client_id) + { + return $this->db->table('client_policy') - ->select('client_policy.*') - ->select('insurers.name as insurer_name, insurers.short_name as insurer_short') - ->select('tpa.name as tpa_name, tpa.short_name as tpa_short') - ->select('policy_type.policy_type as policy_type_name') - ->select('insurer_branch.branch_name as insurer_branch_name, insurer_branch.branch_code as insurer_branch_code') - ->select('tpa_branch.branch_name as tpa_branch_name, tpa_branch.branch_code as tpa_branch_code') - ->select('policy_type.policy_type as policy_type_name') - ->select('client_branch.branch_name as branch_name') - ->join('insurers', 'insurers.id = client_policy.insurer_id') - ->join('insurer_branch', 'client_policy.insurer_branch_id = insurer_branch.id') - ->join('tpa', 'tpa.id = client_policy.tpa_id', 'left') - ->join('tpa_branch', 'client_policy.tpa_branch_id = tpa_branch.id', 'left') - ->join('policy_type', 'policy_type.id = client_policy.policy_type_id') - ->join('client_branch', 'client_branch.id = client_policy.client_branch_id') - ->where('client_policy.client_id', $client_id) - ->where('client_policy.policy_status', 1) - ->where('client_policy.is_active', 1) - ->get() - ->getResult(); - - - + ->select('client_policy.*') + ->select('insurers.name as insurer_name, insurers.short_name as insurer_short') + ->select('tpa.name as tpa_name, tpa.short_name as tpa_short') + ->select('policy_type.policy_type as policy_type_name') + ->select('insurer_branch.branch_name as insurer_branch_name, insurer_branch.branch_code as insurer_branch_code') + ->select('tpa_branch.branch_name as tpa_branch_name, tpa_branch.branch_code as tpa_branch_code') + ->select('policy_type.policy_type as policy_type_name') + ->select('client_branch.branch_name as branch_name') + ->join('insurers', 'insurers.id = client_policy.insurer_id') + ->join('insurer_branch', 'client_policy.insurer_branch_id = insurer_branch.id') + ->join('tpa', 'tpa.id = client_policy.tpa_id', 'left') + ->join('tpa_branch', 'client_policy.tpa_branch_id = tpa_branch.id', 'left') + ->join('policy_type', 'policy_type.id = client_policy.policy_type_id') + ->join('client_branch', 'client_branch.id = client_policy.client_branch_id') + ->where('client_policy.client_id', $client_id) + ->where('client_policy.policy_status', 1) + ->where('client_policy.is_active', 1) + ->get() + ->getResult(); } - public function getPolicyPremium($policy_id){ + public function getPolicyPremium($policy_id) + { return $this->db->table('policies') - ->select('policy_type.*') - ->join('policy_type', 'policy_type.id = policies.policy_type_id') - ->where('policies.id', $policy_id) - ->get() - ->getResult(); + ->select('policy_type.*') + ->join('policy_type', 'policy_type.id = policies.policy_type_id') + ->where('policies.id', $policy_id) + ->get() + ->getResult(); } - public function getPolicyPremiumPolicyTypeId($policy_type_id){ + public function getPolicyPremiumPolicyTypeId($policy_type_id) + { return $this->db->table('policies') - ->select('policy_type.*') - ->join('policy_type', 'policy_type.id = policies.policy_type_id') - ->where('policies.id', $policy_type_id) - ->get() - ->getResult(); + ->select('policy_type.*') + ->join('policy_type', 'policy_type.id = policies.policy_type_id') + ->where('policies.id', $policy_type_id) + ->get() + ->getResult(); } - public function getPolicyDetails($client_id,$policy_id) + public function getPolicyDetails($client_id, $policy_id) { return $this->select('*') - ->where('client_id',$client_id) - ->where('id',$policy_id) - ->get() - ->getResult(); - + ->where('client_id', $client_id) + ->where('id', $policy_id) + ->get() + ->getResult(); } - public function getinsurerswithclientid($id){ + public function getinsurerswithclientid($id) + { return $this->db->table('client_policy') - ->select('client_policy.*, cd_master.cd_ac_no as cd_master_account_no') - ->select('insurers.name as insurer_name, insurers.short_name as insurer_short') - ->select('clients.client_name as client_name') - ->join('clients','clients.id=client_policy.client_id') - ->join('insurers', 'insurers.id = client_policy.insurer_id') - ->join('cd_master', 'cd_master.insurer_id = insurers.id AND cd_master.client_id = client_policy.client_id') - ->where('client_policy.client_id', $id) - ->where('cd_master.id = client_policy.cd_ac_pk') - ->groupBy('client_policy.insurer_id') - ->groupBy('client_policy.client_id', $id) // Group by insurer_id - ->get() - ->getResult(); + ->select('client_policy.*, cd_master.cd_ac_no as cd_master_account_no') + ->select('insurers.name as insurer_name, insurers.short_name as insurer_short') + ->select('clients.client_name as client_name') + ->join('clients', 'clients.id=client_policy.client_id') + ->join('insurers', 'insurers.id = client_policy.insurer_id') + ->join('cd_master', 'cd_master.insurer_id = insurers.id AND cd_master.client_id = client_policy.client_id') + ->where('client_policy.client_id', $id) + ->where('cd_master.id = client_policy.cd_ac_pk') + ->groupBy('client_policy.insurer_id') + ->groupBy('client_policy.client_id', $id) // Group by insurer_id + ->get() + ->getResult(); // return $this->db->table('client_policy') // ->select('insurers.name as insurer_name, insurers.short_name as insurer_short') @@ -198,26 +198,28 @@ class ClientPolicyModel extends Model // ->getResult(); } - - public function getinsurerswithinsurenceid($insurerId){ + + public function getinsurerswithinsurenceid($insurerId) + { return $this->db->table('client_policy') - ->select('client_policy.*') - ->select('insurers.name as insurer_name, insurers.short_name as insurer_short') - ->select('clients.client_name as clientname, clients.short_name as clientshort') - ->join('insurers', 'insurers.id = client_policy.insurer_id') - ->join('clients', 'clients.id = client_policy.client_id') - ->where('client_policy.insurer_id', $insurerId) - ->groupBy('client_policy.client_id') // Group by insurer_id - ->get() - ->getResult(); + ->select('client_policy.*') + ->select('insurers.name as insurer_name, insurers.short_name as insurer_short') + ->select('clients.client_name as clientname, clients.short_name as clientshort') + ->join('insurers', 'insurers.id = client_policy.insurer_id') + ->join('clients', 'clients.id = client_policy.client_id') + ->where('client_policy.insurer_id', $insurerId) + ->groupBy('client_policy.client_id') // Group by insurer_id + ->get() + ->getResult(); } - public function getClientById($id) { + public function getClientById($id) + { $query = $this->db->table('clients')->getWhere(['id' => $id]); - // Debug statement + // Debug statement return $query->getRow(); } @@ -248,112 +250,113 @@ class ClientPolicyModel extends Model ->get() ->getResult(); } - - + + public function getDepositSummary($clientId, $insurerId) -{ - // Fetch the sum of credit and debit transactions and calculate the balance - return $this->db->table('cash_deposit') - ->select('SUM(CASE WHEN transaction_type = "Credit" THEN amount ELSE 0 END) AS total_credit') - ->select('SUM(CASE WHEN transaction_type = "Debit" THEN amount ELSE 0 END) AS total_withdraw') - ->select('SUM(CASE WHEN transaction_type = "Credit" THEN amount ELSE -amount END) AS balance') - ->select('SUM(CASE WHEN sub_type = 3 THEN amount ELSE 0 END) AS total_refund') - ->where('client_id', $clientId) - ->where('insurer_id', $insurerId) - ->where('cash_deposit.is_active', 1) - ->get() - ->getRow(); -} -// Inside your clientPolicyModel -// Inside your clientPolicyModel -// public function getDepositDataWithBalance($clientId, $insurerId) -// { -// // Fetch deposit data with balance information -// $builder = $this->db->table('cash_deposit'); -// $builder->select('id, created_at, description, sub_type, amount, transaction_type'); + { + // Fetch the sum of credit and debit transactions and calculate the balance + return $this->db->table('cash_deposit') + ->select('SUM(CASE WHEN transaction_type = "Credit" THEN amount ELSE 0 END) AS total_credit') + ->select('SUM(CASE WHEN transaction_type = "Debit" THEN amount ELSE 0 END) AS total_withdraw') + ->select('SUM(CASE WHEN transaction_type = "Credit" THEN amount ELSE -amount END) AS balance') + ->select('SUM(CASE WHEN sub_type = 3 THEN amount ELSE 0 END) AS total_refund') + ->where('client_id', $clientId) + ->where('insurer_id', $insurerId) + ->where('cash_deposit.is_active', 1) + ->get() + ->getRow(); + } + // Inside your clientPolicyModel + // Inside your clientPolicyModel + // public function getDepositDataWithBalance($clientId, $insurerId) + // { + // // Fetch deposit data with balance information + // $builder = $this->db->table('cash_deposit'); + // $builder->select('id, created_at, description, sub_type, amount, transaction_type'); -// $builder->where('client_id', $clientId); -// $builder->where('insurer_id', $insurerId); -// $builder->orderBy('created_at', 'asc'); + // $builder->where('client_id', $clientId); + // $builder->where('insurer_id', $insurerId); + // $builder->orderBy('created_at', 'asc'); -// $depositData = $builder->get()->getResult(); + // $depositData = $builder->get()->getResult(); -// $currentBalance = 0; + // $currentBalance = 0; -// foreach ($depositData as $transaction) { -// if ($transaction->transaction_type == 'Credit') { -// $currentBalance += $transaction->amount; -// } elseif ($transaction->transaction_type == 'Debit') { -// $currentBalance -= $transaction->amount; -// } + // foreach ($depositData as $transaction) { + // if ($transaction->transaction_type == 'Credit') { + // $currentBalance += $transaction->amount; + // } elseif ($transaction->transaction_type == 'Debit') { + // $currentBalance -= $transaction->amount; + // } -// $transaction->balance = $currentBalance; -// } + // $transaction->balance = $currentBalance; + // } -// return $depositData; -// } + // return $depositData; + // } -public function getBalances($clientId) -{ - $depositsummary = $this->getDepositlistsummary($clientId); - $balances = []; + public function getBalances($clientId) + { + $depositsummary = $this->getDepositlistsummary($clientId); + $balances = []; - foreach ($depositsummary as $summary) { - $insurerId = $summary->insurer_id; - $balances[$insurerId] = $summary; + foreach ($depositsummary as $summary) { + $insurerId = $summary->insurer_id; + $balances[$insurerId] = $summary; + } + + return $balances; } - return $balances; -} - -public function getDepositlistsummary($id) -{ - return $this->db->table('cash_deposit') - ->select('insurer_id') - ->select('SUM(CASE WHEN transaction_type = "Credit" THEN amount ELSE -amount END) AS balance') - ->where('client_id', $id) - ->groupBy('insurer_id') - ->get() - ->getResult(); -} + public function getDepositlistsummary($id) + { + return $this->db->table('cash_deposit') + ->select('insurer_id') + ->select('SUM(CASE WHEN transaction_type = "Credit" THEN amount ELSE -amount END) AS balance') + ->where('client_id', $id) + ->groupBy('insurer_id') + ->get() + ->getResult(); + } -public function updateStatus(){ + public function updateStatus() + { - // Update client_policy table - $client = $this->db->query("UPDATE client_policy SET policy_status = 0 WHERE policy_end_date < CURDATE()"); - $client_count = $this->db->affectedRows(); - // Update employee_polices table - $employee = $this->db->query("UPDATE employee_polices SET status = 'expired' WHERE policy_end_date < CURDATE()"); - $emp_count = $this->db->affectedRows(); + // Update client_policy table + $client = $this->db->query("UPDATE client_policy SET policy_status = 0 WHERE policy_end_date < CURDATE()"); + $client_count = $this->db->affectedRows(); + // Update employee_polices table + $employee = $this->db->query("UPDATE employee_polices SET status = 'expired' WHERE policy_end_date < CURDATE()"); + $emp_count = $this->db->affectedRows(); - return ['client'=>$client_count, 'emp' => $emp_count]; + return ['client' => $client_count, 'emp' => $emp_count]; + } + + public function getpolicyWithPattern($client_id) + { + + $query = $this->db->table('client_policy') + ->select('client_policy.*, policies.name, policies.policy_type_id, policy_type.policy_type') + ->join('policies', 'policies.id = client_policy.policy_id') + ->join('policy_type', 'policy_type.id = policies.policy_type_id') + // ->where('policy_type.policy_type', 'GMC') + ->whereIn('policy_type.id', [2, 3]) + ->where('client_policy.client_id', $client_id) + ->get() + ->getResult(); -} + return $query; + } -public function getpolicyWithPattern($client_id){ + public function getTopUpPolicy($client_id, $type) + { - $query = $this->db->table('client_policy') - ->select('client_policy.*, policies.name, policies.policy_type_id, policy_type.policy_type') - ->join('policies', 'policies.id = client_policy.policy_id') - ->join('policy_type', 'policy_type.id = policies.policy_type_id') - // ->where('policy_type.policy_type', 'GMC') - ->whereIn('policy_type.id', [2, 3]) - ->where('client_policy.client_id', $client_id) - ->get() - ->getResult(); - - - return $query; -} - -public function getTopUpPolicy($client_id, $type){ - - $query = " + $query = " SELECT client_policy.*, policies.name, policies.policy_type_id FROM client_policy JOIN policies ON policies.id = client_policy.policy_id @@ -361,65 +364,63 @@ public function getTopUpPolicy($client_id, $type){ WHERE policy_type.policy_type = '{$type}' AND client_policy.client_id = {$client_id}"; - $result = $this->db->query($query)->getResult(); + $result = $this->db->query($query)->getResult(); - return $result; - -} - - -public function getClientPolicyByPolicyType($client_id, $type){ - - - $query = $this->db->table('client_policy') - ->select('client_policy.*, insurers.name as insurer_name, insurers.short_name as insurer_short') - ->select('tpa.name as tpa_name, tpa.short_name as tpa_short') - ->select('policies.name as policy_name, policies.policy_type_id') - ->select('policy_type.policy_type as policy_type_name') - ->select('insurer_branch.branch_name as insurer_branch_name, insurer_branch.branch_code as insurer_branch_code') - ->select('tpa_branch.branch_name as tpa_branch_name, tpa_branch.branch_code as tpa_branch_code') - ->join('insurers', 'insurers.id = client_policy.insurer_id') - ->join('insurer_branch', 'client_policy.insurer_branch_id = insurer_branch.id') - ->join('tpa', 'tpa.id = client_policy.tpa_id') - ->join('tpa_branch', 'client_policy.tpa_branch_id = tpa_branch.id') - ->join('policies', 'policies.id = client_policy.policy_id') - ->join('policy_type', 'policy_type.id = policies.policy_type_id') - ->where('client_policy.client_id', $client_id) - ->where('client_policy.policy_status', 1); - - if ($type == 2) { - $query->where('policy_type.policy_type', 'GMC - Top-up'); - } else if ($type == 3) { - $query->whereIn('policy_type.policy_type', ['GMC - Parents', 'GMC - Top-up(Parents)']); + return $result; } - $result = $query->get()->getResult(); - return $result; + public function getClientPolicyByPolicyType($client_id, $type) + { -} + $query = $this->db->table('client_policy') + ->select('client_policy.*, insurers.name as insurer_name, insurers.short_name as insurer_short') + ->select('tpa.name as tpa_name, tpa.short_name as tpa_short') + ->select('policies.name as policy_name, policies.policy_type_id') + ->select('policy_type.policy_type as policy_type_name') + ->select('insurer_branch.branch_name as insurer_branch_name, insurer_branch.branch_code as insurer_branch_code') + ->select('tpa_branch.branch_name as tpa_branch_name, tpa_branch.branch_code as tpa_branch_code') + ->join('insurers', 'insurers.id = client_policy.insurer_id') + ->join('insurer_branch', 'client_policy.insurer_branch_id = insurer_branch.id') + ->join('tpa', 'tpa.id = client_policy.tpa_id') + ->join('tpa_branch', 'client_policy.tpa_branch_id = tpa_branch.id') + ->join('policies', 'policies.id = client_policy.policy_id') + ->join('policy_type', 'policy_type.id = policies.policy_type_id') + ->where('client_policy.client_id', $client_id) + ->where('client_policy.policy_status', 1); + + if ($type == 2) { + $query->where('policy_type.policy_type', 'GMC - Top-up'); + } else if ($type == 3) { + $query->whereIn('policy_type.policy_type', ['GMC - Parents', 'GMC - Top-up(Parents)']); + } + + $result = $query->get()->getResult(); + + return $result; + } -public function getPolicyTypeForPolicyBinding($client_id){ + public function getPolicyTypeForPolicyBinding($client_id) + { - $result = $this->table('client_policy') - ->select('policy_type.*, client_policy.id as client_policy_id, client_policy.policy_no') - ->join('policy_type', 'policy_type.id = client_policy.policy_type_id') - ->where('client_policy.client_id', $client_id) - ->where('client_policy.is_active', 1) - ->whereIn('policy_type.id', [2,3]) - ->findAll(); + $result = $this->table('client_policy') + ->select('policy_type.*, client_policy.id as client_policy_id, client_policy.policy_no') + ->join('policy_type', 'policy_type.id = client_policy.policy_type_id') + ->where('client_policy.client_id', $client_id) + ->where('client_policy.is_active', 1) + ->whereIn('policy_type.id', [2, 3]) + ->findAll(); - return $result; + return $result; + } -} + public function getCliendDataForExcelFileName($client_policy_id) + { - -public function getCliendDataForExcelFileName($client_policy_id){ - - return $this->table('client_policy') + return $this->table('client_policy') ->select('clients.short_name, policy_type.policy_type, client_branch.branch_code') ->join('clients', 'clients.id = client_policy.client_id') ->join('client_branch', 'client_branch.id = client_policy.client_branch_id') @@ -427,49 +428,48 @@ public function getCliendDataForExcelFileName($client_policy_id){ ->where('client_policy.id', $client_policy_id) ->where('client_policy.is_active', 1) ->first(); - -} - -//for this using in CRONE JOB -public function getPolicyDetailsForRemainder($client_id = null, $branch_id = null, $policy_id = null) -{ - $builder = $this->table('client_policy') - ->where('client_policy.is_active', 1) - ->where('client_policy.policy_status', 1) - // ->where('client_policy.is_addon', 1) - // ->where('client_policy.inception_type', 2) - ->where('client_policy.open_for_enrollment', 1); - - if ($client_id && $branch_id) { - $builder->where('client_policy.client_id', $client_id) - ->where('client_policy.client_branch_id', $branch_id); } - if(empty($policy_id)){ - $builder->whereIn('client_policy.policy_type_id', [2, 3, 4, 5]); - }else{ - $builder->where('client_policy.id', $policy_id); + //for this using in CRONE JOB + public function getPolicyDetailsForRemainder($client_id = null, $branch_id = null, $policy_id = null) + { + $builder = $this->table('client_policy') + ->where('client_policy.is_active', 1) + ->where('client_policy.policy_status', 1) + // ->where('client_policy.is_addon', 1) + // ->where('client_policy.inception_type', 2) + ->where('client_policy.open_for_enrollment', 1); + + if ($client_id && $branch_id) { + $builder->where('client_policy.client_id', $client_id) + ->where('client_policy.client_branch_id', $branch_id); + } + + if (empty($policy_id)) { + $builder->whereIn('client_policy.policy_type_id', [2, 3, 4, 5]); + } else { + $builder->where('client_policy.id', $policy_id); + } + + return $builder->get()->getResultArray(); } - return $builder->get()->getResultArray(); -} + //for this using in CRONE JOB + public function getPolicyDetailsForEnrollment($client_id = null, $branch_id = null) + { + $builder = $this->table('client_policy') + ->where('client_policy.is_active', 1) + ->where('client_policy.policy_status', 1) + ->where('client_policy.open_date IS NOT NULL') + ->where('client_policy.close_date IS NOT NULL'); -//for this using in CRONE JOB -public function getPolicyDetailsForEnrollment($client_id = null, $branch_id = null) -{ - $builder = $this->table('client_policy') - ->where('client_policy.is_active', 1) - ->where('client_policy.policy_status', 1) - ->where('client_policy.open_date IS NOT NULL') - ->where('client_policy.close_date IS NOT NULL'); + if ($client_id && $branch_id) { + $builder->where('client_policy.client_id', $client_id) + ->where('client_policy.client_branch_id', $branch_id); + } - if ($client_id && $branch_id) { - $builder->where('client_policy.client_id', $client_id) - ->where('client_policy.client_branch_id', $branch_id); + return $builder->get()->getResultArray(); } - return $builder->get()->getResultArray(); + } - -} - diff --git a/app/Models/EmployeeModel.php b/app/Models/EmployeeModel.php index 524eb18b..6f4af68b 100755 --- a/app/Models/EmployeeModel.php +++ b/app/Models/EmployeeModel.php @@ -222,7 +222,7 @@ class EmployeeModel extends Model ) AS family_stats ORDER BY family_member_count DESC, max_age DESC LIMIT 1;"; - $results = $this->db->query($query)->getResult(); + $results = $this->db->query($query)->getResultArray(); return $results; } diff --git a/app/Models/LeadsModel.php b/app/Models/LeadsModel.php index cd516c7a..64dfd8d0 100644 --- a/app/Models/LeadsModel.php +++ b/app/Models/LeadsModel.php @@ -30,17 +30,17 @@ class LeadsModel extends Model 'source_policy_id', 'policy_type_id', 'salse_person_id', - 'insurer_id', - 'insurer_branch_id', - 'tpa_id', - 'tpa_branch_id', - 'policy_start_date', - 'policy_end_date', - 'no_of_lives', - 'incurred_claims', - 'location', - 'proposed_insurer_id', - 'proposed_insurer_branch_id', + 'insurer_id', + 'insurer_branch_id', + 'tpa_id', + 'tpa_branch_id', + 'policy_start_date', + 'policy_end_date', + 'no_of_lives', + 'incurred_claims', + 'location', + 'proposed_insurer_id', + 'proposed_insurer_branch_id', 'proposed_tpa_id', 'proposed_tpa_branch_id', 'proposel_data', @@ -90,7 +90,7 @@ class LeadsModel extends Model 'source_policy_start_date', 'source_policy_end_date', - + 'payment_date', 'is_cd' ]; @@ -110,7 +110,7 @@ class LeadsModel extends Model protected function checkAndADDCreatedByValue(array $data) { // Check if 'updated_by' value is null or empty - if (empty($data['data']['created_by'])) { + if (empty($data['data']['created_by'])) { // Set 'updated_by' value to the current session user ID $data['data']['created_by'] = get_session_userid(); } @@ -121,7 +121,7 @@ class LeadsModel extends Model protected function checkAndUpdateUpdatedByValue(array $data) { // Check if 'updated_by' value is null or empty - if (empty($data['data']['updated_by'])) { + if (empty($data['data']['updated_by'])) { // Set 'updated_by' value to the current session user ID $data['data']['updated_by'] = get_session_userid(); } @@ -153,10 +153,10 @@ class LeadsModel extends Model ) AS rfq_count ') - ->join('kyc_entity_type', 'leads.entity_type_id = kyc_entity_type.id', 'left') - ->join('user_profiles', 'leads.salse_person_id = user_profiles.id', 'left') - ->join('policy_type', 'leads.policy_type_id = policy_type.id', 'left') - ->where('leads.is_active', 1); + ->join('kyc_entity_type', 'leads.entity_type_id = kyc_entity_type.id', 'left') + ->join('user_profiles', 'leads.salse_person_id = user_profiles.id', 'left') + ->join('policy_type', 'leads.policy_type_id = policy_type.id', 'left') + ->where('leads.is_active', 1); if (!empty($where)) { $data->where($where); @@ -168,12 +168,12 @@ class LeadsModel extends Model public function getLeadForInsertClientList($type = null, $client_id = null) { $query = $this->db->table('leads') - ->select('leads.*, user_profiles.first_name as user_name') - ->join('user_profiles', 'leads.created_by = user_profiles.id') - ->where('leads.is_active', 1) - ->where('leads.status', 'won') - ->where("leads.proposel_data IS NOT NULL AND leads.proposel_data <> ''") - ->where("(leads.is_client_created = '' OR leads.is_client_created IS NULL)"); + ->select('leads.*, user_profiles.first_name as user_name') + ->join('user_profiles', 'leads.created_by = user_profiles.id') + ->where('leads.is_active', 1) + ->where('leads.status', 'won') + ->where("leads.proposel_data IS NOT NULL AND leads.proposel_data <> ''") + ->where("(leads.is_client_created = '' OR leads.is_client_created IS NULL)"); @@ -183,11 +183,83 @@ class LeadsModel extends Model if ($client_id) { $query->where('leads.client_id', $client_id); } - + $result = $query->get()->getResultArray(); return $result; - + } + + public function getDashData() + { + $statuses = $this->db->table('leads') + ->select('status') + ->where("is_active", 1) + ->groupBy('status') + ->get() + ->getResultArray(); + + $selectParts = []; + + foreach ($statuses as $status) { + $s = $status['status']; + $alias = strtolower(str_replace(' ', '_', $s)); + + // Count alias + $selectParts[] = "SUM(CASE WHEN status = '{$s}' THEN 1 ELSE 0 END) AS `{$alias}`"; + + // IDs alias + $selectParts[] = "GROUP_CONCAT(CASE WHEN status = '{$s}' THEN leads.id ELSE NULL END) AS `{$alias}_ids`"; + } + + $select = implode(", ", $selectParts); + + // Start query builder + $builder = $this->db->table('leads'); + + $builder->select($select); + + // Auditing subquery + $subquery = "(SELECT pk, MAX(created_at) AS last_claim_status_change + FROM auditing_history + WHERE table_name = 'leads' AND field_name = 'status' + GROUP BY pk)"; + + $builder->join("{$subquery} AS th", 'leads.id = th.pk', 'left'); + + // Date filtering for last status change + $dateLimit = 3; + $dateThreshold = date('Y-m-d H:i:s', strtotime("-{$dateLimit} days")); + + $builder->groupStart() + ->where('th.last_claim_status_change <=', $dateThreshold) + ->orWhere('th.last_claim_status_change IS NULL') + ->groupEnd(); + + // Add only active + $builder->where("leads.is_active", 1); + + $lead_data = $builder->get()->getResultArray(); + + // Fallback for empty results + if (empty($lead_data)) { + $lead_data[0] = ['total' => 0]; + foreach ($statuses as $status) { + $alias = strtolower(str_replace(' ', '_', $status['status'])); + $lead_data[0][$alias] = 0; + $lead_data[0]["{$alias}_ids"] = ''; + } + } + + // Calculate total + $total = 0; + foreach ($lead_data[0] as $key => $value) { + if (!str_ends_with($key, '_ids') && $key != "won") { + $total += (int) $value; + } + } + $lead_data[0]['total'] = $total; + + // dd($lead_data[0]); + return $lead_data[0]; } - } diff --git a/app/Models/PolicyTransactionModel.php b/app/Models/PolicyTransactionModel.php index 2a77d201..cb7a1ce4 100644 --- a/app/Models/PolicyTransactionModel.php +++ b/app/Models/PolicyTransactionModel.php @@ -79,8 +79,9 @@ class PolicyTransactionModel extends Model 'cd_ac_pk', 'install_due_date', 'policy_with_corr', + 'is_cd_reduce_from_bds', ]; - + // Callbacks @@ -97,7 +98,7 @@ class PolicyTransactionModel extends Model protected function checkAndADDCreatedByValue(array $data) { // Check if 'updated_by' value is null or empty - if (empty($data['data']['created_by'])) { + if (empty($data['data']['created_by'])) { // Set 'updated_by' value to the current session user ID $data['data']['created_by'] = get_session_userid(); } @@ -108,7 +109,7 @@ class PolicyTransactionModel extends Model protected function checkAndUpdateUpdatedByValue(array $data) { // Check if 'updated_by' value is null or empty - if (empty($data['data']['updated_by'])) { + if (empty($data['data']['updated_by'])) { // Set 'updated_by' value to the current session user ID $data['data']['updated_by'] = get_session_userid(); } @@ -266,21 +267,21 @@ class PolicyTransactionModel extends Model ->join('tpa_branch', 'policy_transaction.tpa_branch_id = tpa_branch.id', 'left') ->join('user_profiles AS sales_user', 'policy_transaction.sales_generated_by = sales_user.id', 'left') ->join('user_profiles AS service_user', 'policy_transaction.serviced_by = service_user.id', 'left') - ->where('policy_transaction.is_active', 1); - + ->where('policy_transaction.is_active', 1); + // Check if the start date and end date are provided if ($start_date != 0 && $end_date != 0 && $date_type != 0) { $startDate = date('Y-m-d 00:00:00', strtotime($start_date)); $endDate = date('Y-m-d 23:59:59', strtotime($end_date)); - $builder->where('policy_transaction.'.$date_type.'>=', $startDate) - ->where('policy_transaction.'.$date_type.'<=', $endDate); - }else{ + $builder->where('policy_transaction.' . $date_type . '>=', $startDate) + ->where('policy_transaction.' . $date_type . '<=', $endDate); + } else { // $fromDate = date('Y-m-d', strtotime('-30 days')); // $toDate = date('Y-m-d 23:59:59'); - + // $builder->where('policy_transaction.created_at >=', $fromDate) // ->where('policy_transaction.created_at <=', $toDate); } @@ -288,31 +289,30 @@ class PolicyTransactionModel extends Model if ($client_id != 0) { $builder->where('policy_transaction.client_id', $client_id); } - + if ($insurer_id != 0) { $builder->where('policy_transaction.insurer_id', $insurer_id); } - + if ($policy_type_id != 0) { $builder->where('client_policy.policy_type_id', $policy_type_id); } - + if ($issuer != 0) { $builder->where('policy_transaction.issuer', $issuer); } - if($client_id == 0 && $insurer_id == 0 && $policy_type_id == 0 && $date_type == 0 && $issuer == 0){ + if ($client_id == 0 && $insurer_id == 0 && $policy_type_id == 0 && $date_type == 0 && $issuer == 0) { $fromDate = date('Y-m-d', strtotime('-30 days')); $toDate = date('Y-m-d 23:59:59'); - - $builder->where('policy_transaction.created_at >=', $fromDate) - ->where('policy_transaction.created_at <=', $toDate); + $builder->where('policy_transaction.created_at >=', $fromDate) + ->where('policy_transaction.created_at <=', $toDate); } $builder->orderBy('policy_transaction.id', 'desc'); - + return $builder->get()->getResultArray(); } @@ -445,7 +445,7 @@ class PolicyTransactionModel extends Model // AND insurer_statements.is_active = 1 // AND insurer_statements.invoice_status IS NOT NULL // $date_condition - + // ), // 2 // ) AS billed_amt, @@ -510,7 +510,7 @@ class PolicyTransactionModel extends Model // ->join('user_profiles AS service_user', 'policy_transaction.serviced_by = service_user.id', 'left') // ->where('policy_transaction.is_active', 1) // ->where('pt_co_share_details.is_active', 1); - + // // Check if the start date and end date are provided // if ($start_date != 0 && $end_date != 0 && $date_type != 0 && $date_type != 'statement_month') { @@ -546,7 +546,7 @@ class PolicyTransactionModel extends Model // if ($client_id != 0) { // $builder->where('policy_transaction.client_id', $client_id); // } - + // if ($insurer_id != 0) { // $builder->where('policy_transaction.insurer_id', $insurer_id); // } @@ -554,7 +554,7 @@ class PolicyTransactionModel extends Model // if ($client_branch_id != 0) { // $builder->where('policy_transaction.client_branch_id', $client_branch_id); // } - + // if ($insurer_branch_id != 0) { // $builder->where('policy_transaction.insurer_branch_id', $insurer_branch_id); // } @@ -564,11 +564,11 @@ class PolicyTransactionModel extends Model // } - + // if ($policy_type_id != 0) { // $builder->where('client_policy.policy_type_id', $policy_type_id); // } - + // if ($issuer != 0) { // $builder->where('policy_transaction.issuer', $issuer); // } @@ -577,7 +577,7 @@ class PolicyTransactionModel extends Model // $fromDate = date('Y-m-d', strtotime('-30 days')); // $toDate = date('Y-m-d 23:59:59'); - + // $builder->where('policy_transaction.created_at >=', $fromDate) // ->where('policy_transaction.created_at <=', $toDate); @@ -588,18 +588,18 @@ class PolicyTransactionModel extends Model // $result = $builder->get()->getResultArray(); // // dd($this->db->getLastQuery()); - + // return $result; // } - public function getBDSReportList($start_date = 0, $end_date = 0, $client_id = 0, $insurer_id = 0, $policy_type_id = 0, $date_type = 0, $issuer = 0, $client_branch_id = 0, $insurer_branch_id = 0, $client_policy_id = 0) - { + public function getBDSReportList($start_date = 0, $end_date = 0, $client_id = 0, $insurer_id = 0, $policy_type_id = 0, $date_type = 0, $issuer = 0, $client_branch_id = 0, $insurer_branch_id = 0, $client_policy_id = 0, $where = []) + { $date_condition = ''; - if($date_type == 'statement_month' && $start_date != 0 && $end_date != 0) { + if ($date_type == 'statement_month' && $start_date != 0 && $end_date != 0) { $date_condition = " - AND insurer_statements.month >= '".$start_date ."' - AND insurer_statements.month <= '".$end_date ."' + AND insurer_statements.month >= '" . $start_date . "' + AND insurer_statements.month <= '" . $end_date . "' "; } @@ -781,18 +781,33 @@ class PolicyTransactionModel extends Model ->join('tpa_branch', 'policy_transaction.tpa_branch_id = tpa_branch.id', 'left') ->join('user_profiles AS sales_user', 'policy_transaction.sales_generated_by = sales_user.id', 'left') ->join('user_profiles AS service_user', 'policy_transaction.serviced_by = service_user.id', 'left') - ->where('policy_transaction.is_active', 1) + ->where('policy_transaction.is_active', 1) ->where('pt_co_share_details.is_active', 1); - + + if ( + (!in_array(get_role_id(), [1, 5])) && + !( + in_array(MANAGEMENT_TEAM_ID, user_team()) || + in_array(FINANCE_TEAM_ID, user_team()) || + in_array(BUSINESS_TEAM_ID, user_team()) + ) + ) { + if (get_role_id() == 4 && in_array(POS_TEAM_ID, user_team())) { + $builder->where('policy_transaction.created_by', get_session_userid()); + } + } + if (!empty($where)) { + log_message('info', 'Where condition: ' . json_encode($where)); + $builder->where($where); + } // Check if the start date and end date are provided if ($start_date != 0 && $end_date != 0 && $date_type != 0 && $date_type != 'statement_month') { $startDate = date('Y-m-d 00:00:00', strtotime($start_date)); $endDate = date('Y-m-d 23:59:59', strtotime($end_date)); - $builder->where('policy_transaction.'.$date_type.'>=', $startDate) - ->where('policy_transaction.'.$date_type.'<=', $endDate); - + $builder->where('policy_transaction.' . $date_type . '>=', $startDate) + ->where('policy_transaction.' . $date_type . '<=', $endDate); } // if($date_type == 'statement_month' && $start_date != 0 && $end_date != 0){ @@ -809,17 +824,17 @@ class PolicyTransactionModel extends Model $endDate = date('Y-m-d', strtotime($end_date)); $builder->join('co_share_stmt_details', 'pt_co_share_details.id = co_share_stmt_details.co_share_id', 'left') - ->join('insurer_statements', 'co_share_stmt_details.statement_id = insurer_statements.id','left') - ->where('insurer_statements.is_active', 1) - ->where('insurer_statements.month >=', $startDate) - ->where('insurer_statements.month <=', $endDate) - ->groupBy('co_share_stmt_details.co_share_id'); + ->join('insurer_statements', 'co_share_stmt_details.statement_id = insurer_statements.id', 'left') + ->where('insurer_statements.is_active', 1) + ->where('insurer_statements.month >=', $startDate) + ->where('insurer_statements.month <=', $endDate) + ->groupBy('co_share_stmt_details.co_share_id'); } if ($client_id != 0) { $builder->where('policy_transaction.client_id', $client_id); } - + if ($insurer_id != 0) { $builder->where('policy_transaction.insurer_id', $insurer_id); } @@ -827,7 +842,7 @@ class PolicyTransactionModel extends Model if ($client_branch_id != 0) { $builder->where('policy_transaction.client_branch_id', $client_branch_id); } - + if ($insurer_branch_id != 0) { $builder->where('policy_transaction.insurer_branch_id', $insurer_branch_id); } @@ -837,23 +852,24 @@ class PolicyTransactionModel extends Model } - + if ($policy_type_id != 0) { $builder->where('client_policy.policy_type_id', $policy_type_id); } - + if ($issuer != 0) { $builder->where('policy_transaction.issuer', $issuer); } - if($client_id == 0 && $insurer_id == 0 && $policy_type_id == 0 && $date_type == 0 && $issuer == 0){ + if ($client_id == 0 && $insurer_id == 0 && $policy_type_id == 0 && $date_type == 0 && $issuer == 0) { $fromDate = date('Y-m-d', strtotime('-30 days')); $toDate = date('Y-m-d 23:59:59'); - - $builder->where('policy_transaction.created_at >=', $fromDate) - ->where('policy_transaction.created_at <=', $toDate); + if (empty($where)) { + $builder->where('policy_transaction.created_at >=', $fromDate) + ->where('policy_transaction.created_at <=', $toDate); + } } $builder->orderBy('policy_transaction.id', 'desc'); @@ -861,10 +877,10 @@ class PolicyTransactionModel extends Model $result = $builder->get()->getResultArray(); // dd($this->db->getLastQuery()); - + return $result; } - + // public function getInceptionTranctionListData($start_date = 0, $end_date = 0, $client_id = 0, $insurer_id = 0, $policy_type_id = 0, $date_type = 0, $issuer = 0, $status = 0) // { // // dd($start_date, $end_date, $client_id, $insurer_id, $policy_type_id, $date_type, $issuer, $status); @@ -903,7 +919,7 @@ class PolicyTransactionModel extends Model // // $fromDate = date('Y-m-d', strtotime('-30 days')); // // $toDate = date('Y-m-d 23:59:59'); - + // // $builder->where('policy_transaction.created_at >=', $fromDate) // // ->where('policy_transaction.created_at <=', $toDate); // } @@ -911,15 +927,15 @@ class PolicyTransactionModel extends Model // if ($client_id != 0) { // $builder->where('policy_transaction.client_id', $client_id); // } - + // if ($insurer_id != 0) { // $builder->where('policy_transaction.insurer_id', $insurer_id); // } - + // if ($policy_type_id != 0) { // $builder->where('client_policy.policy_type_id', $policy_type_id); // } - + // if ($issuer != 0) { // $builder->where('policy_transaction.issuer', $issuer); // } @@ -931,12 +947,12 @@ class PolicyTransactionModel extends Model // $fromDate = date('Y-m-d', strtotime('-30 days')); // $toDate = date('Y-m-d 23:59:59'); - + // $builder->where('policy_transaction.created_at >=', $fromDate) // ->where('policy_transaction.created_at <=', $toDate); // } - + // $builder->orderBy('policy_transaction.id', 'desc')->limit(10); // $result = $builder->get()->getResultArray(); @@ -989,7 +1005,7 @@ class PolicyTransactionModel extends Model // Optimize Date Filtering if (!empty($start_date) && !empty($end_date) && !empty($date_type)) { $builder->where("policy_transaction.$date_type >=", date('Y-m-d 00:00:00', strtotime($start_date))) - ->where("policy_transaction.$date_type <=", date('Y-m-d 23:59:59', strtotime($end_date))); + ->where("policy_transaction.$date_type <=", date('Y-m-d 23:59:59', strtotime($end_date))); } // Apply Filters Only When Necessary @@ -1015,7 +1031,7 @@ class PolicyTransactionModel extends Model $toDate = date('Y-m-d 23:59:59'); $builder->where('policy_transaction.created_at >=', $fromDate) - ->where('policy_transaction.created_at <=', $toDate); + ->where('policy_transaction.created_at <=', $toDate); } // Optimize Query Execution @@ -1024,7 +1040,7 @@ class PolicyTransactionModel extends Model return $builder->get()->getResultArray(); } - + public function getEndorsementTranctionListData($start_date = 0, $end_date = 0, $client_id = 0, $insurer_id = 0, $policy_type_id = 0, $date_type = 0, $issuer = 0, $status = 0) { // dd($start_date, $end_date, $client_id, $insurer_id, $policy_type_id, $date_type, $issuer, $status); @@ -1041,7 +1057,7 @@ class PolicyTransactionModel extends Model ->join('pt_co_share_details', 'policy_transaction.id = pt_co_share_details.pt_id', 'left') ->join('clients', 'policy_transaction.client_id = clients.id', 'left') ->join('client_branch', 'policy_transaction.client_branch_id = client_branch.id', 'left') - ->join('insurers', 'pt_co_share_details.insurer_id = insurers.id','left') + ->join('insurers', 'pt_co_share_details.insurer_id = insurers.id', 'left') ->join('client_policy', 'policy_transaction.client_policy_id = client_policy.id', 'left') ->join('policy_type', 'client_policy.policy_type_id = policy_type.id', 'left') ->where('policy_transaction.is_active', 1) @@ -1059,20 +1075,20 @@ class PolicyTransactionModel extends Model $builder->where('policy_transaction.created_by', get_session_userid()); } } - + if ($start_date != 0 && $end_date != 0 && $date_type != 0) { $startDate = date('Y-m-d 00:00:00', strtotime($start_date)); $endDate = date('Y-m-d 23:59:59', strtotime($end_date)); - $builder->where('policy_transaction.'.$date_type.'>=', $startDate) - ->where('policy_transaction.'.$date_type.'<=', $endDate); - }else{ + $builder->where('policy_transaction.' . $date_type . '>=', $startDate) + ->where('policy_transaction.' . $date_type . '<=', $endDate); + } else { // $fromDate = date('Y-m-d', strtotime('-30 days')); // $toDate = date('Y-m-d 23:59:59'); - + // $builder->where('policy_transaction.created_at >=', $fromDate) // ->where('policy_transaction.created_at <=', $toDate); } @@ -1080,15 +1096,15 @@ class PolicyTransactionModel extends Model if ($client_id != 0) { $builder->where('policy_transaction.client_id', $client_id); } - + if ($insurer_id != 0) { $builder->where('policy_transaction.insurer_id', $insurer_id); } - + if ($policy_type_id != 0) { $builder->where('client_policy.policy_type_id', $policy_type_id); } - + if ($issuer != 0) { $builder->where('policy_transaction.issuer', $issuer); } @@ -1096,16 +1112,15 @@ class PolicyTransactionModel extends Model $builder->where('policy_transaction.status', $status); } - if($client_id == 0 && $insurer_id == 0 && $policy_type_id == 0 && $date_type == 0 && $issuer == 0){ + if ($client_id == 0 && $insurer_id == 0 && $policy_type_id == 0 && $date_type == 0 && $issuer == 0) { $fromDate = date('Y-m-d', strtotime('-30 days')); $toDate = date('Y-m-d 23:59:59'); - - $builder->where('policy_transaction.created_at >=', $fromDate) - ->where('policy_transaction.created_at <=', $toDate); + $builder->where('policy_transaction.created_at >=', $fromDate) + ->where('policy_transaction.created_at <=', $toDate); } - + $builder->orderBy('policy_transaction.id', 'desc'); return $builder->get()->getResultArray(); @@ -1221,14 +1236,14 @@ class PolicyTransactionModel extends Model // ->having('premium_variance_amt !=',0); // ->group_start() - ->having('variance_amt IS NOT NULL') - ->orHaving('variance_amt !=', 0) - ->having('premium_variance_amt IS NOT NULL') - ->orHaving('premium_variance_amt !=', 0); - // ->group_end(); - // ->where('pt_co_share_details.actual_bp_brokerage_amt IS NOT NULL AND pt_co_share_details.actual_bp_brokerage_amt != 0'); - // ->where('pt_co_share_details.variance IS NOT NULL') - // ->where('pt_co_share_details.variance !=', 0); + ->having('variance_amt IS NOT NULL') + ->orHaving('variance_amt !=', 0) + ->having('premium_variance_amt IS NOT NULL') + ->orHaving('premium_variance_amt !=', 0); + // ->group_end(); + // ->where('pt_co_share_details.actual_bp_brokerage_amt IS NOT NULL AND pt_co_share_details.actual_bp_brokerage_amt != 0'); + // ->where('pt_co_share_details.variance IS NOT NULL') + // ->where('pt_co_share_details.variance !=', 0); if ($start_date != 0 && $end_date != 0 && $date_type != 0) { @@ -1265,7 +1280,7 @@ class PolicyTransactionModel extends Model if ($client_branch_id != 0) { $builder->where('policy_transaction.client_branch_id', $client_branch_id); } - + if ($insurer_branch_id != 0) { $builder->where('policy_transaction.insurer_branch_id', $insurer_branch_id); } @@ -1282,6 +1297,7 @@ class PolicyTransactionModel extends Model public function getBusinessReportList($start_date = 0, $end_date = 0, $client_id = 0, $insurer_id = 0, $policy_type_id = 0, $date_type = 0, $issuer = 0, $status = 0) { + $dateThreshold = date('Y-m-d H:i:s', strtotime("- 3 days")); $builder = $this->db->table('policy_transaction') ->select([ 'policy_transaction.id AS policy_trns_id', @@ -1305,9 +1321,19 @@ class PolicyTransactionModel extends Model ->join('insurers', 'pt_co_share_details.insurer_id = insurers.id', 'left') ->join('client_policy', 'policy_transaction.client_policy_id = client_policy.id', 'left') ->join('policy_type', 'policy_transaction.policy_type_id = policy_type.id', 'left') + ->join( + '(SELECT policy_tran_id, MAX(created_at) AS last_policy_status_change,is_active + FROM policy_transaction_status + WHERE is_active = 1 + GROUP BY policy_tran_id) th', + 'policy_transaction.id = th.policy_tran_id' + + ) + ->where("th.last_policy_status_change <= '{$dateThreshold}'", null, false) ->where('policy_transaction.is_active', 1) // ->where('policy_transaction.status', 'completed') - ->where('pt_co_share_details.bp_amt IS NULL OR pt_co_share_details.bp_amt = 0'); + ->where('(pt_co_share_details.bp_amt IS NULL OR pt_co_share_details.bp_amt = 0)', null, false); + if ($start_date != 0 && $end_date != 0 && $date_type != 0) { @@ -1346,12 +1372,21 @@ class PolicyTransactionModel extends Model } $builder->orderBy('policy_transaction.id', 'desc'); + // echo $builder->getCompiledSelect(); + // exit; - return $builder->get()->getResultArray(); + $returnData = $builder->get()->getResultArray(); + + + + // dd($returnData); + return $returnData; } public function getFinanceReportList($start_date = 0, $end_date = 0, $client_id = 0, $insurer_id = 0, $policy_type_id = 0, $date_type = 0, $issuer = 0, $status = 0) { + $dateThreshold = date('Y-m-d H:i:s', strtotime("- 3 days")); + $builder = $this->db->table('policy_transaction') ->select(" policy_transaction.id, @@ -1374,11 +1409,20 @@ class PolicyTransactionModel extends Model ->join('insurers', 'pt_co_share_details.insurer_id = insurers.id', 'left') ->join('client_policy', 'policy_transaction.client_policy_id = client_policy.id', 'left') ->join('policy_type', 'policy_transaction.policy_type_id = policy_type.id', 'left') + ->join( + '(SELECT policy_tran_id, MAX(created_at) AS last_policy_status_change,is_active + FROM policy_transaction_status + WHERE is_active = 1 + GROUP BY policy_tran_id) th', + 'policy_transaction.id = th.policy_tran_id' + + ) + ->where("th.last_policy_status_change <= '{$dateThreshold}'", null, false) ->where('policy_transaction.is_active', 1) // ->where('policy_transaction.status', 'completed') ->where('COALESCE(pt_co_share_details.agreed_bp_per, 0) + COALESCE(pt_co_share_details.agreed_tp_per, 0) + COALESCE(pt_co_share_details.agreed_tep_per, 0) = 0') ->where('COALESCE(pt_co_share_details.actual_bp_amt, 0) + COALESCE(pt_co_share_details.actual_tp_amt, 0) + COALESCE(pt_co_share_details.actual_tep_amt, 0) = 0') - ->where('COALESCE(pt_co_share_details.actual_bp_brokerage_amt, 0) + COALESCE(pt_co_share_details.actual_tp_brokerage_amt, 0) + COALESCE(pt_co_share_details.actual_tep_brokerage_amt, 0) = 0'); + ->where('COALESCE(pt_co_share_details.actual_bp_brokerage_amt, 0) + COALESCE(pt_co_share_details.actual_tp_brokerage_amt, 0) + COALESCE(pt_co_share_details.actual_tep_brokerage_amt, 0) = 0'); if ($start_date != 0 && $end_date != 0 && $date_type != 0) { @@ -1475,55 +1519,55 @@ class PolicyTransactionModel extends Model ->join('client_policy', 'policy_transaction.client_policy_id = client_policy.id', 'left') ->join('policy_type', 'policy_transaction.policy_type_id = policy_type.id', 'left') ->where('policy_transaction.is_active', 1); - + // Date range filtering if ($start_date != 0 && $end_date != 0 && $date_type != 0) { $startDate = date('Y-m-d 00:00:00', strtotime($start_date)); $endDate = date('Y-m-d 23:59:59', strtotime($end_date)); - + $builder->where('policy_transaction.' . $date_type . '>=', $startDate) ->where('policy_transaction.' . $date_type . '<=', $endDate); } else { $fromDate = date('Y-m-d', strtotime('-30 days')); $toDate = date('Y-m-d 23:59:59'); - + $builder->where('policy_transaction.created_at >=', $fromDate) ->where('policy_transaction.created_at <=', $toDate); } - + // Additional filters if ($client_id != 0) { $builder->where('policy_transaction.client_id', $client_id); } - + if ($insurer_id != 0) { $builder->where('policy_transaction.insurer_id', $insurer_id); } - + if ($policy_type_id != 0) { $builder->where('client_policy.policy_type_id', $policy_type_id); } - + if ($issuer != 0) { $builder->where('policy_transaction.issuer', $issuer); } - + if ($status != 0) { $builder->where('policy_transaction.status', $status); } - + // Filter where outstanding_amount is not null $builder->having('outstanding_amount IS NOT NULL'); - + $builder->orderBy('policy_transaction.id', 'desc'); - + return $builder->get()->getResultArray(); } - public function getOutstandingReportList($start_date = 0, $end_date = 0, $insurer_id = 0,$insurer_branch_id = 0) + public function getOutstandingReportList($start_date = 0, $end_date = 0, $insurer_id = 0, $insurer_branch_id = 0) { $builder = $this->db->table('insurer_statements s') - ->select(' + ->select(' s.id, s.insurer_id, s.branch_id, @@ -1539,32 +1583,32 @@ class PolicyTransactionModel extends Model COALESCE(SUM(p.inv_amt) + SUM(p.tds) + SUM(p.gst), 0) AS total_paid, (s.invoice_amount - COALESCE(SUM(p.inv_amt) + SUM(p.tds) + SUM(p.gst), 0)) AS outstanding_amount ') - ->join('inv_payment_details p', 's.id = p.statement_id', 'left') - ->join('insurers ins', 's.insurer_id = ins.id') - ->join('insurer_branch ib', 's.branch_id = ib.id') - ->where('s.is_active', 1) - ->where('p.is_active', 1) - ->groupBy('s.id, s.invoice_no, s.invoice_date, s.invoice_amount') - ->having('outstanding_amount >', 0); - // ->get(); + ->join('inv_payment_details p', 's.id = p.statement_id', 'left') + ->join('insurers ins', 's.insurer_id = ins.id') + ->join('insurer_branch ib', 's.branch_id = ib.id') + ->where('s.is_active', 1) + ->where('p.is_active', 1) + ->groupBy('s.id, s.invoice_no, s.invoice_date, s.invoice_amount') + ->having('outstanding_amount >', 0); + // ->get(); + - // Date range filtering if ($start_date != 0 && $end_date != 0) { - + $builder->where('s.month >=', $start_date) ->where('s.month <=', $end_date); - } - + } + if ($insurer_id != 0) { $builder->where('s.insurer_id', $insurer_id); } - if ($insurer_branch_id != 0) { + if ($insurer_branch_id != 0) { $builder->where('s.branch_id', $insurer_branch_id); } $builder->orderBy('s.id', 'desc'); - + return $builder->get()->getResultArray(); } @@ -1574,12 +1618,12 @@ class PolicyTransactionModel extends Model { $fromDate = date('Y-m-d', strtotime('-60 days')); $toDate = date('Y-m-d 23:59:59'); - + if (!empty($start_date) && !empty($end_date)) { $fromDate = change_date_format($start_date); $toDate = change_date_format($end_date); } - + $query = $this->db->table('policy_transaction pt') ->select(' pt.*, @@ -1604,7 +1648,7 @@ class PolicyTransactionModel extends Model ->where('pt.is_active', 1) ->where('pt_co.is_active', 1) ->where('pt.action_type', "inception"); - + // Apply filters if parameters are provided if (!empty($client_type)) { $query->where('c.client_type', $client_type); @@ -1615,7 +1659,7 @@ class PolicyTransactionModel extends Model if (!empty($issuer)) { // Corrected condition to check $issuer $query->where('pt.issuer', $issuer); } - + $query->groupBy('pt.id'); $query->orderBy('pt.id', 'DESC'); // Fetch and return results @@ -1623,6 +1667,47 @@ class PolicyTransactionModel extends Model // print($this->db->getLastQuery()); die; return $results; } - - + + public function getBDSRenewalData() + { + // Increase GROUP_CONCAT limit + $this->db->query("SET SESSION group_concat_max_len = 1000000;"); + + $builder = $this->db->table('policy_transaction pt'); + + $builder->select([ + 'SUM(CASE WHEN pt.policy_end_date < CURDATE() THEN 1 ELSE 0 END) AS Expired', + 'SUM(CASE WHEN pt.policy_end_date BETWEEN CURDATE() AND (CURDATE() + INTERVAL 1 MONTH) THEN 1 ELSE 0 END) AS `Renewal Pending`', + 'GROUP_CONCAT(CASE WHEN pt.policy_end_date < CURDATE() THEN pt.id ELSE NULL END) AS Expired_ids', + 'GROUP_CONCAT(CASE WHEN pt.policy_end_date BETWEEN CURDATE() AND (CURDATE() + INTERVAL 1 MONTH) THEN pt.id ELSE NULL END) AS Renewal_Pending_ids' + ]); + $builder->where("pt.policy_end_date IS NOT NULL", null, false); + $builder->where('pt.is_active', 1); + + // Self join to check if a policy has been renewed + $builder->join('policy_transaction renewed', 'renewed.source_client_policy_id = pt.client_policy_id and renewed.client_id = pt.client_id and renewed.client_branch_id = pt.client_branch_id', 'left'); + + // Filter for expired or expiring policies + $builder->where("(pt.policy_end_date < CURDATE() OR pt.policy_end_date BETWEEN CURDATE() AND (CURDATE() + INTERVAL 1 MONTH))", null, false); + + $builder->where('renewed.id IS NULL', null, false); + $query = $builder->get(); + $result = $query->getResultArray(); + + $total = 0; + foreach ($result[0] as $key => $value) { + if ($key !== 'Expired_ids' && $key !== 'Renewal_Pending_ids') { + $total += $value; + } + } + + // Ensure ID fields are arrays (not null) + $result[0]['Expired_ids'] = $result[0]['Expired_ids'] ? $result[0]['Expired_ids'] : []; + $result[0]['Renewal Pending_ids'] = $result[0]['Renewal_Pending_ids'] ? $result[0]['Renewal_Pending_ids'] : []; + + // Add total count + $result[0]['total'] = $total; + + return $result[0]; + } } diff --git a/app/Models/TicketMasterModel.php b/app/Models/TicketMasterModel.php index 1612c08e..7e011952 100644 --- a/app/Models/TicketMasterModel.php +++ b/app/Models/TicketMasterModel.php @@ -75,10 +75,10 @@ class TicketMasterModel extends Model 'pay_initiate_date', 'emp_personal_mail', 'client_policy_id' - - ]; - - + + ]; + + // Callbacks protected $allowCallbacks = true; protected $beforeInsert = ["checkAndADDCreatedByValue"]; @@ -93,7 +93,7 @@ class TicketMasterModel extends Model protected function checkAndADDCreatedByValue(array $data) { // Check if 'updated_by' value is null or empty - if (empty($data['data']['created_by'])) { + if (empty($data['data']['created_by'])) { // Set 'updated_by' value to the current session user ID $data['data']['created_by'] = get_session_userid(); } @@ -104,7 +104,7 @@ class TicketMasterModel extends Model protected function checkAndUpdateUpdatedByValue(array $data) { // Check if 'updated_by' value is null or empty - if (empty($data['data']['updated_by'])) { + if (empty($data['data']['updated_by'])) { // Set 'updated_by' value to the current session user ID $data['data']['updated_by'] = get_session_userid(); } @@ -130,21 +130,21 @@ class TicketMasterModel extends Model public function getTemplateDataByTicketID($ticket_id) { $template_data = $this - ->select("ticket_mail_template.*, CASE + ->select("ticket_mail_template.*, CASE WHEN employees.email_corporate IS NULL OR employees.email_corporate = '' THEN ticket_master.emp_mail ELSE employees.email_corporate END as emp_mail, ,ticket_master.claim_status_id") - ->join('ticket_claim_status', 'ticket_master.claim_status_id = ticket_claim_status.id and ticket_claim_status.is_active = 1') - ->join('ticket_mail_template', ' + ->join('ticket_claim_status', 'ticket_master.claim_status_id = ticket_claim_status.id and ticket_claim_status.is_active = 1') + ->join('ticket_mail_template', ' ticket_claim_status.trigger_type = ticket_mail_template.trigger_type and ticket_claim_status.ticket_type = ticket_mail_template.ticket_type and ticket_mail_template.is_active = 1') - ->join('employees','employees.id = ticket_master.emp_id','left') - ->where('ticket_master.id', $ticket_id) - ->where('ticket_master.is_active', 1) - ->where('ticket_claim_status.is_active', 1) - ->first(); + ->join('employees', 'employees.id = ticket_master.emp_id', 'left') + ->where('ticket_master.id', $ticket_id) + ->where('ticket_master.is_active', 1) + ->where('ticket_claim_status.is_active', 1) + ->first(); return $template_data; } @@ -173,16 +173,16 @@ class TicketMasterModel extends Model ->join('clients', 'ticket_master.client_id = clients.id', 'left') ->join('insurers', 'ticket_master.insurer_id = insurers.id', 'left') ->join('tpa', 'ticket_master.tpa_id = tpa.id', 'left') - ->join('ticket_notes', 'ticket_master.id = ticket_notes.ticket_id and ticket_notes.is_active = 1 and ticket_notes.is_auto_query = 1','left') + ->join('ticket_notes', 'ticket_master.id = ticket_notes.ticket_id and ticket_notes.is_active = 1 and ticket_notes.is_auto_query = 1', 'left') ->join('user_profiles', 'ticket_master.acm_id = user_profiles.id', 'left') - ->join('employees','employees.id = ticket_master.emp_id','left') + ->join('employees', 'employees.id = ticket_master.emp_id', 'left') ->where('ticket_master.id', $ticket_id) ->where('ticket_master.is_active', 1) ->first(); return $ticket_data; } - + //get TAT report BAND wise Data // public function getTATReport($ticket_type = null, $start_date = null, $end_date = null) // { @@ -210,7 +210,7 @@ class TicketMasterModel extends Model // "; // $statusResult = $this->db->query($statusQuery)->getResultArray(); // // dd($statusResult); - + // // Initialize dynamic query parts // $dynamicSelect = ''; @@ -248,12 +248,12 @@ class TicketMasterModel extends Model // 0 // ) AS `$columnName`, "; // } - + // // Remove the trailing comma from the SELECT part // $dynamicSelect = rtrim($dynamicSelect, ', '); // // dd($dynamicSelect); - + // // Construct the full SQL query // $sql = " // SELECT @@ -317,7 +317,7 @@ class TicketMasterModel extends Model // ORDER BY // FIELD(tc.TAT_Category, 'Above 20 Days', '13-20 Days', '7-12 Days', '0-6 Days'); // "; - + // // Execute the query and return the result // $data = $this->db->query($sql)->getResultArray(); // // print_rr($this->db->getLastQuery(), $data); die; @@ -329,12 +329,12 @@ class TicketMasterModel extends Model // // $tableData['headers'] = $headers; // // $tableData['body'] = $data; // // } - + // return $data; // } public function getTATReport($ticket_type = null, $start_date = null, $end_date = null) - { + { //set default last 3 months data date $fromDate = date('Y-m-d', strtotime('-90 days')); $toDate = date('Y-m-d 23:59:59'); @@ -345,9 +345,9 @@ class TicketMasterModel extends Model } $ticket_type_data_1 = ""; $ticket_type_data_2 = ""; - if(!empty($ticket_type)){ - $ticket_type_data_1 = "AND ticket_type = $ticket_type"; - $ticket_type_data_2 = "WHERE tm.ticket_type_id = $ticket_type"; + if (!empty($ticket_type)) { + $ticket_type_data_1 = "AND ticket_type = $ticket_type"; + $ticket_type_data_2 = "WHERE tm.ticket_type_id = $ticket_type"; } // Fetch claim statuses from the `ticket_claim_status` table @@ -359,7 +359,7 @@ class TicketMasterModel extends Model "; $statusResult = $this->db->query($statusQuery)->getResultArray(); // dd($statusResult); - + // Initialize dynamic query parts $dynamicSelect = ''; @@ -397,12 +397,12 @@ class TicketMasterModel extends Model 0 ) AS `$columnName`, "; } - + // Remove the trailing comma from the SELECT part $dynamicSelect = rtrim($dynamicSelect, ', '); // dd($dynamicSelect); - + // Construct the full SQL query $sql = " SELECT @@ -472,7 +472,7 @@ class TicketMasterModel extends Model '0-6 Days' ); "; - + // Execute the query and return the result $data = $this->db->query($sql)->getResultArray(); // print_rr($this->db->getLastQuery(), $data); die; @@ -484,12 +484,13 @@ class TicketMasterModel extends Model // $tableData['headers'] = $headers; // $tableData['body'] = $data; // } - + return $data; } - public function tpaWiseReport($policy_type = null ,$start_date = null, $end_date = null){ - $ticket_type_data_1 = ""; + public function tpaWiseReport($policy_type = null, $start_date = null, $end_date = null) + { + $ticket_type_data_1 = ""; $ticket_type_data_2 = ""; if (!empty($policy_type)) { @@ -511,8 +512,17 @@ class TicketMasterModel extends Model $dynamicSelect .= " COUNT(CASE WHEN master.claim_status_id = {$status['id']} THEN master.id END) AS `{$status['claim_status']}`, "; - if (in_array($status['claim_status'], ['ID NOT GENERATED', 'NON ID', 'CDA', 'INFORMATION REQUIRED','UNDER PROCESS - CLAIM NO. UPDATION', - 'UNDER PROCESS - INVESTIGATION STATUS','UNDER PROCESS - QUERY DOCUMENT RECEIVED','APPROVED','PAYMENT INITIATED'])) { + if (in_array($status['claim_status'], [ + 'ID NOT GENERATED', + 'NON ID', + 'CDA', + 'INFORMATION REQUIRED', + 'UNDER PROCESS - CLAIM NO. UPDATION', + 'UNDER PROCESS - INVESTIGATION STATUS', + 'UNDER PROCESS - QUERY DOCUMENT RECEIVED', + 'APPROVED', + 'PAYMENT INITIATED' + ])) { $dynamicTotal .= "COUNT(CASE WHEN master.claim_status_id = {$status['id']} THEN master.id END) + "; } // Include in total count @@ -553,47 +563,47 @@ class TicketMasterModel extends Model // print_rr($result);die(); return $result; - } - public function accountManagerWiseReport($policy_type = null ,$start_date = null, $end_date = null){ + public function accountManagerWiseReport($policy_type = null, $start_date = null, $end_date = null) + { if ($policy_type == 1) { $ticket_type_data_1 = ""; - $ticket_type_data_2 = ""; + $ticket_type_data_2 = ""; - if (!empty($policy_type)) { - $ticket_type_data_1 = "AND ticket_type = $policy_type"; - $ticket_type_data_2 = "AND master.ticket_type_id = $policy_type"; - } + if (!empty($policy_type)) { + $ticket_type_data_1 = "AND ticket_type = $policy_type"; + $ticket_type_data_2 = "AND master.ticket_type_id = $policy_type"; + } - // Fetch claim statuses dynamically - $statusQuery = "SELECT id, claim_status FROM ticket_claim_status WHERE is_active = 1 $ticket_type_data_1"; - $statusResult = $this->db->query($statusQuery)->getResultArray(); + // Fetch claim statuses dynamically + $statusQuery = "SELECT id, claim_status FROM ticket_claim_status WHERE is_active = 1 $ticket_type_data_1"; + $statusResult = $this->db->query($statusQuery)->getResultArray(); - // Initialize dynamic query parts - $dynamicSelect = ''; - $dynamicTotal = ''; + // Initialize dynamic query parts + $dynamicSelect = ''; + $dynamicTotal = ''; - // Loop through each claim status and generate the CASE statements - foreach ($statusResult as $status) { - $dynamicSelect .= " + // Loop through each claim status and generate the CASE statements + foreach ($statusResult as $status) { + $dynamicSelect .= " COUNT(CASE WHEN master.claim_status_id = {$status['id']} THEN master.id END) AS `{$status['claim_status']}`, "; - // Include in total count - $dynamicTotal .= "COUNT(CASE WHEN master.claim_status_id = {$status['id']} THEN master.id END) + "; + // Include in total count + $dynamicTotal .= "COUNT(CASE WHEN master.claim_status_id = {$status['id']} THEN master.id END) + "; - // Include only closed-related statuses in total2 count + // Include only closed-related statuses in total2 count - } + } - // Remove the trailing commas and `+` signs - $dynamicSelect = rtrim($dynamicSelect, ', '); - $dynamicTotal = rtrim($dynamicTotal, ' +'); - // print_rr($dynamicSelect); - // Construct the final SQL query - $sql = " + // Remove the trailing commas and `+` signs + $dynamicSelect = rtrim($dynamicSelect, ', '); + $dynamicTotal = rtrim($dynamicTotal, ' +'); + // print_rr($dynamicSelect); + // Construct the final SQL query + $sql = " SELECT user_profiles.first_name AS ACM_NAME, $dynamicSelect, @@ -614,44 +624,49 @@ class TicketMasterModel extends Model // dd($result); return $result; - - - }else{ + } else { $ticket_type_data_1 = ""; $ticket_type_data_2 = ""; - + if (!empty($policy_type)) { $ticket_type_data_1 = "AND ticket_type = $policy_type"; $ticket_type_data_2 = "AND master.ticket_type_id = $policy_type"; } - + // Fetch claim statuses dynamically $statusQuery = "SELECT id, claim_status FROM ticket_claim_status WHERE is_active = 1 $ticket_type_data_1"; $statusResult = $this->db->query($statusQuery)->getResultArray(); - + // Initialize dynamic query parts $dynamicSelect = ''; $dynamicTotal = ''; $dynamicClosedTotal = ''; - + // Loop through each claim status and generate the CASE statements foreach ($statusResult as $status) { $dynamicSelect .= " COUNT(CASE WHEN master.claim_status_id = {$status['id']} THEN master.id END) AS `{$status['claim_status']}`, "; - - if (in_array($status['claim_status'], ['CLAIM INTIMATION', 'INTIMATION TO INSURER', 'CLIENT PENDING', 'INSURER PENDING','INVESTIGATION', - 'APPROVED','ON HOLD'])) { + + if (in_array($status['claim_status'], [ + 'CLAIM INTIMATION', + 'INTIMATION TO INSURER', + 'CLIENT PENDING', + 'INSURER PENDING', + 'INVESTIGATION', + 'APPROVED', + 'ON HOLD' + ])) { $dynamicTotal .= "COUNT(CASE WHEN master.claim_status_id = {$status['id']} THEN master.id END) + "; } // Include in total count // $dynamicTotal .= "COUNT(CASE WHEN master.claim_status_id = {$status['id']} THEN master.id END) + "; - + // Include only closed-related statuses in total2 count if (in_array($status['claim_status'], ['CLOSED', 'SETTLED', 'NOT COVERED'])) { $dynamicClosedTotal .= "COUNT(CASE WHEN master.claim_status_id = {$status['id']} THEN master.id END) + "; } } - + // Remove the trailing commas and `+` signs $dynamicSelect = rtrim($dynamicSelect, ', '); $dynamicTotal = rtrim($dynamicTotal, ' +'); @@ -675,10 +690,10 @@ class TicketMasterModel extends Model GROUP BY user_profiles.id; "; - + // Execute the query $result = $this->db->query($sql)->getResultArray(); - + // print_rr($result);die(); return $result; } @@ -705,6 +720,151 @@ class TicketMasterModel extends Model // dd($data, db_connect()->getLastQuery()); return $data; } - - + + public function getDashData($claim_statuses, $limit) + { + $finalResults = []; + + foreach ($claim_statuses as $typeId => $statuses) { + // Get all active, non-null claim status tickets for this type + $builder = $this->db->table('ticket_master tm') + ->select('tm.id, tm.ticket_type_id, tcs.claim_status, th.last_claim_status_change') + ->join('ticket_claim_status tcs', 'tm.claim_status_id = tcs.id', 'left') + ->join( + '(SELECT ticket_id, MAX(created_at) AS last_claim_status_change + FROM ticket_history + WHERE field_name = \'claim_status_id\' + GROUP BY ticket_id) th', + 'tm.id = th.ticket_id', + 'left' + ) + ->where('tm.ticket_type_id', $typeId) + ->where('tm.is_active', 1) + ->where('tm.claim_status_id IS NOT NULL'); + + $results = $builder->get()->getResultArray(); + + $summary = [ + 'ticket_type_id' => $typeId, + ]; + + $total = 0; + foreach ($statuses as $status) { + $alias = strtolower(str_replace(' ', '_', $status)); + $summary[$alias] = 0; + $summary[$alias . '_ids'] = ''; + + $dateLimit = $limit[$typeId][$status] ?? 3; + $threshold = date('Y-m-d H:i:s', strtotime("-{$dateLimit} days")); + + $ticketIds = []; + // dd($results); + foreach ($results as $row) { + if ( + $row['claim_status'] === $status && + ( + !$row['last_claim_status_change'] || + $row['last_claim_status_change'] <= $threshold + ) + ) { + $summary[$alias]++; + $ticketIds[] = $row['id']; + if ($status == "APPROVED"|| $status == "SETTLED"|| $status == "CLOSED" ){ + continue; + } + + $total++; + + + } + } + + // Convert ticket IDs array to a comma-separated string + $summary[$alias . '_ids'] = implode(',', $ticketIds); + } + + $summary['total'] = $total; + + // Add approved but not settled IDs and count + $approvedNotSettled = $this->getNotSettledbutApprovedCount($typeId); + $summary['approved_not_settled'] = $approvedNotSettled['count']; + $summary['approved_not_settled_ids'] = $approvedNotSettled['ticket_ids']; + + $finalResults[$typeId] = $summary; + } + + // dd($finalResults); + return $finalResults; + } + + + + public function getNotSettledbutApprovedCount($ticket_type) + { + // Fetch the approved and settled claim_status IDs + $builder = $this->db->table("ticket_claim_status approved") + ->select("approved.id AS approved_id, settled.id AS settled_id") + ->join("ticket_claim_status settled", "approved.ticket_type = settled.ticket_type") + ->where("approved.claim_status", "APPROVED") + ->where("settled.claim_status", "SETTLED") + ->where("approved.ticket_type", $ticket_type) + ->where("approved.is_active", 1) + ->where("settled.is_active", 1); + + $ids = $builder->get()->getRowArray(); + + // If no matching status IDs are found, return empty + if (!$ids) { + return ['count' => 0, 'ticket_ids' => '']; + } + + // Extract approved and settled status IDs + $approved_id = $ids['approved_id']; + $settled_id = $ids['settled_id']; + + // Subquery to get the latest approval time for each ticket + $subquery = $this->db->table('ticket_history') + ->select('ticket_id, MAX(created_at) AS approved_time') + ->where('field_name', 'claim_status_id') + ->where('new_value', $approved_id) + ->groupBy('ticket_id'); + + // Main query to find tickets that are approved but not settled + $builder = $this->db->table('ticket_master tm'); + + $builder->join("({$subquery->getCompiledSelect()}) latest_approval", 'tm.id = latest_approval.ticket_id', 'inner'); + + // Left join to find if there is a settled status for each ticket after approval + $builder->join( + 'ticket_history th_settled', + "th_settled.ticket_id = tm.id + AND th_settled.field_name = 'claim_status_id' + AND th_settled.new_value = {$settled_id} + AND th_settled.created_at > latest_approval.approved_time", + 'left', + false // Important for raw ON condition + ); + + // Filtering conditions: not settled and approved time older than 12 days + $builder->where('tm.claim_status_id !=', $settled_id); + $builder->where('tm.is_active', 1); + $builder->where("latest_approval.approved_time <= DATE_SUB(NOW(), INTERVAL 12 DAY)", null, false); + $builder->where('th_settled.id IS NULL', null, false); + + // Final select to get ticket IDs of approved but not settled tickets + $builder->select('tm.id'); + + // Execute the query + $query = $builder->get(); + $ticketIds = array_column($query->getResultArray(), 'id'); // Extract the IDs + + // Convert ticket IDs array to a comma-separated string + $ticketIdsString = implode(',', $ticketIds); + + // Return the count and comma-separated ticket IDs + return [ + 'count' => count($ticketIds), + 'ticket_ids' => $ticketIdsString + ]; + } } diff --git a/app/Views/DashBoard.php b/app/Views/DashBoard.php index 3102ab15..40d25654 100755 --- a/app/Views/DashBoard.php +++ b/app/Views/DashBoard.php @@ -173,7 +173,7 @@ - +
@@ -217,9 +217,43 @@ + + + + + + + + + +
+ + + + + + + + + + @@ -229,6 +263,7 @@ +
diff --git a/app/Views/bds_dash.php b/app/Views/bds_dash.php index c6711ec9..4afc8015 100644 --- a/app/Views/bds_dash.php +++ b/app/Views/bds_dash.php @@ -131,11 +131,14 @@ body{
- - +
+ + + +
+

@@ -585,6 +595,14 @@ $(document).ready(function(){ var cd_ac_no = $(this).find('option:selected').attr('data-cd'); var start_date = $(this).find('option:selected').attr('data-sd'); var end_date = $(this).find('option:selected').attr('data-ed'); + var policy_type_id = $(this).find('option:selected').attr('data-ptid'); + + if(policy_type_id == 1 || policy_type_id == 2 || policy_type_id == 3 || policy_type_id == 4 || policy_type_id == 5 || policy_type_id == 6 || policy_type_id == 7){ + $('#is_cd_reduce_from_bds').prop('disabled',true).prop('checked', false) + }else{ + $('#is_cd_reduce_from_bds').prop('disabled',false) + } + // console.log('client_id', client_id); // console.log('client_policy_id', client_policy_id); @@ -596,7 +614,7 @@ $(document).ready(function(){ $('#policy_no').val(policy_no); $('#insurer_id').val(insurer); $('#tpa').val(tpa).change(); - $('#cd_ac_no').val(cd_ac_no); + // $('#cd_ac_no').val(cd_ac_no); $('#policy_start_date').val(start_date); $('#policy_end_date').val(end_date); @@ -619,6 +637,9 @@ $(document).ready(function(){ if(res.status == true){ if(res.data.length > 0){ + $('#ct_type').val(2) + $('#cd_ac_pk').val(res.is_copay_yes.cd_ac_pk); + $('#cd_ac_no').val(res.cd_master_data.cd_ac_no ?? ""); $('#bro_payable_by').val(res.data[0].bro_payable_by) if(res.is_copay_yes && res.is_copay_yes.co_share == 1){ @@ -633,9 +654,11 @@ $(document).ready(function(){ }else{ + $('#ct_type').val(1) addInsurerColumn() } }else{ + $('#ct_type').val(1) addInsurerColumn() } }, @@ -914,6 +937,9 @@ function getPolicyTransactionDataForEndorsementEdit(input){ $('#last_action_date').val(res.data.last_action_date); $('#install_due_date').val(res.data.install_due_date); $('#bro_payable_by').val(res.data.bro_payable_by); + $('#cd_ac_pk').val(res.data.cd_ac_pk); + $('#cd_ac_no').val(res.data.cd_ac_no); + $('#ct_type').val(res.data.ct_type); if (res.data.policy_with_corr == 1) { $('#policy_with_corr').prop('checked', true); @@ -921,6 +947,12 @@ function getPolicyTransactionDataForEndorsementEdit(input){ $('#policy_with_corr').prop('checked', false); } + if (res.data.is_cd_reduce_from_bds == 1) { + $('#is_cd_reduce_from_bds').prop('checked', true).prop('checked', false); + } else { + $('#is_cd_reduce_from_bds').prop('checked', false); + } + if (res.data.action_type == 'policy_instalment') { $('.install_due_date_div').show() }else{ @@ -937,6 +969,13 @@ function getPolicyTransactionDataForEndorsementEdit(input){ addInsurerColumn(); } + if(res.data.policy_type_id == 1 || res.data.policy_type_id == 2 || res.data.policy_type_id == 3 || res.data.policy_type_id == 4 || res.data.policy_type_id == 5 || res.data.policy_type_id == 6 || res.data.policy_type_id == 7){ + $('#is_cd_reduce_from_bds').prop('disabled',true).prop('checked', false); + }else{ + $('#is_cd_reduce_from_bds').prop('disabled',false); + } + + }else{ console.log('No data found'); } @@ -1769,7 +1808,7 @@ function addInsurerColumn() { break; } - }else if(team_id.includes('3')){ + }else if(team_id.includes('3') || team_id.includes('8')){ switch(index) { case 0: // Insurer selection @@ -2155,7 +2194,7 @@ function populateTable(dataArray, status = false) { cell.find('input[type="hidden"]').val(status ? data.id : ''); break; } - }else if(team_id.includes('3')){ + }else if(team_id.includes('3') || team_id.includes('8')){ switch (rowIndex) { case 0: // Insurer selection cell.find('select').val(insurer); diff --git a/app/Views/policy_transaction_endorsement_list.php b/app/Views/policy_transaction_endorsement_list.php index 9259dc90..9c321e2e 100644 --- a/app/Views/policy_transaction_endorsement_list.php +++ b/app/Views/policy_transaction_endorsement_list.php @@ -698,6 +698,7 @@ document.addEventListener("DOMContentLoaded", function () { 'data-itp' : item.itp, 'data-bap' : item.bap, 'data-tpa' : item.tpa_branch_id + '-' + item.tpa_id, + 'data-ptid' : item.policy_type_id, }); $('#client_policy_id').append(option); }); diff --git a/app/Views/policy_transaction_inception_form.php b/app/Views/policy_transaction_inception_form.php index 11f601cc..0469a9d4 100644 --- a/app/Views/policy_transaction_inception_form.php +++ b/app/Views/policy_transaction_inception_form.php @@ -123,6 +123,12 @@ color: white !important; margin-right: 5px; } + +:disabled { + background-color: #e0e0e0; + color: #666; +} +
@@ -422,6 +428,16 @@
+
+ + + +
+