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..ef4c655c 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) { @@ -319,8 +323,8 @@ $routes->group("/util", ["filter" => "authMVC"], function ($routes) { $routes->get("test_mail", "MasterController::testGmailAPI"); $routes->post("test_mail", "MasterController::testGmailAPI"); $routes->get("check_policy_no/(:any)", "ClientController::check_policy_no/$1"); - $routes->get("get_client_policy_data_using_policy_no/(:any)", "ClientController::get_client_policy_data_using_policy_no/$1"); - $routes->get("get_client_policy_data_using_policy_no_and_endo_no/(:any)", "ClientController::get_client_policy_data_using_policy_no_and_endo_no/$1"); + $routes->get("get_client_policy_data_using_policy_no", "ClientController::get_client_policy_data_using_policy_no"); + $routes->get("get_client_policy_data_using_policy_no_and_endo_no", "ClientController::get_client_policy_data_using_policy_no_and_endo_no"); $routes->get("checkInvoiceStatus/(:any)", "PolicyTransactionController::checkInvoiceStatus/$1"); $routes->get("base_policy_for_policy_inception/(:any)", "PolicyTransactionController::getBasePolicy/$1"); $routes->get("sentTestMail/(:any)", "NotificationController::sentTestMail/$1"); @@ -353,12 +357,16 @@ $routes->group("/util", ["filter" => "authMVC"], function ($routes) { $routes->get('getLeadNonEB/(:any)', 'LeadsController::getLeadNonEB/$1'); $routes->get('getPolicyTypeFields', 'LeadsController::getPolicyTypeFields'); $routes->get('removeMultiFile', 'LeadsController::removeMultiFile'); + $routes->get('removeInstallments', 'LeadsController::removeInstallments'); }); +$routes->post("policy_tranction/sendInstallmentRemainderMail","PolicyTransactionController::sendInstallmentRemainderMail"); +$routes->cli("cli/sendInstallmentRemainderMail","PolicyTransactionController::sendInstallmentRemainderMail"); + $routes->group("policy_tranction", ["filter" => "authMVC"], function ($routes) { $routes->group("inception", ["filter" => "authMVC"], function ($routes) { - $routes->get("list", "PolicyTransactionController::viewInception"); + $routes->match(['get', 'post'], 'list', 'PolicyTransactionController::viewInception'); $routes->post("create", "PolicyTransactionController::createInceptionPolicy"); $routes->get("list/(:any)", "PolicyTransactionController::getInceptionDataForEdit/$1"); $routes->get("remove/(:any)", "PolicyTransactionController::removeCDMaster/$1"); @@ -373,7 +381,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"); @@ -532,13 +540,15 @@ $routes->group("/bdsReport", ["filter" => "authMVC"], function ($routes) { $routes->get('insurer_wise_data/(:any)','BDSReportController::Insurer_wise_Data/$1'); $routes->get('bap_wise_data/(:any)','BDSReportController::Bap_Wise_Data/$1'); $routes->match( ['get', 'post'], 'renewal_report','BDSReportController::renewalReport'); - + $routes->get('getTATReport','BDSReportController::bdsTATReport'); + $routes->get("getMultiReport/(:any)", "BDSReportController::getMultiReport/$1"); }); //New Tickets $routes->group("/ticket", ["filter" => "authMVC"], function ($routes) { $routes->match( ['get', 'post'], 'list','TicketController::ticketList'); $routes->get('feedback-list','TicketController::feedbackList'); + $routes->get('remove','TicketController::removeTicket'); $routes->get('new/(:any)','TicketController::ticket_form/$1'); $routes->post('create','TicketController::createTicket'); $routes->post('update','TicketController::updateTicket'); @@ -550,6 +560,20 @@ $routes->group("/ticket", ["filter" => "authMVC"], function ($routes) { $routes->match( ['get', 'post'], 'ticket_reports','TicketController::ticketReports'); $routes->post('getPolicyStartDate','TicketController::getPolicyStartDate'); $routes->post("getPoliciesbyEmpID","TicketController::getPoliciesbyEmpID"); + $routes->post("getMoreInfo","TicketController::getMoreInfo"); // $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/BDSReportController.php b/app/Controllers/BDSReportController.php index 54abf46f..c3005aac 100644 --- a/app/Controllers/BDSReportController.php +++ b/app/Controllers/BDSReportController.php @@ -33,6 +33,7 @@ class BDSReportController extends AdminController protected $PTCOShareDetailsModel; protected $coShareStmtDetailsModel; protected $policyTypeModel; + protected $policyTatReportType; public function __construct() { @@ -46,6 +47,13 @@ class BDSReportController extends AdminController $this->PTCOShareDetailsModel = new PTCOShareDetailsModel(); $this->coShareStmtDetailsModel = new COShareStmtDetailsModel(); $this->policyTypeModel = new PolicyTypeModel(); + + + $this->policyTatReportType = [ + '1' => "TAT Band Wise report", + '2' => "Account Manger Status Wise Report", + '3' => "Account Manger TAT Wise Report" + ]; } // public function Insurer_wise_Data($insurerCategory, $fromDate, $toDate) @@ -209,7 +217,7 @@ class BDSReportController extends AdminController $html = view('bds_report_bap_wise_data', $viewData); return $this->respond(['status' => true, 'html' => $html], 200); - } else if($report_type == 'bapInsurer'){ + } else if ($report_type == 'bapInsurer') { //Condition for BAP Insurer wise date $category = $category == 'life' ? 1 : 0; @@ -217,8 +225,7 @@ class BDSReportController extends AdminController $html = view('irda_bap_insurer_report_list', $viewData); return $this->respond(['status' => true, 'html' => $html], 200); - - }else if($report_type == 'bapClient'){ + } else if ($report_type == 'bapClient') { //Condition for BAP Client wise date $category = $category == 'life' ? 1 : 0; @@ -226,8 +233,7 @@ class BDSReportController extends AdminController $html = view('irda_bap_client_report_list', $viewData); return $this->respond(['status' => true, 'html' => $html], 200); - - }else if($report_type == 'client'){ + } else if ($report_type == 'client') { //Condition for Client wise date $category = $category == 'life' ? 1 : 0; @@ -517,7 +523,7 @@ class BDSReportController extends AdminController if (!empty($start_date) && !empty($end_date)) { $fromDate = change_date_format($start_date); - $toDate = change_date_format($end_date); + $toDate = change_date_format($end_date); } $this->myLogger->logme('error', 'From date : {fromDate} - To date {toDate} ', ['fromDate' => $fromDate, 'toDate' => $toDate]); @@ -597,7 +603,7 @@ class BDSReportController extends AdminController // $db = db_connect(); // $builder = $db->query(" - + // select ins.id, ins.name as insurer_name, // -- Health Policies @@ -706,7 +712,7 @@ class BDSReportController extends AdminController // life_premium DESC, // marine_cargo_premium DESC, // marine_hull_premium DESC; - + // "); // // Get the query @@ -745,7 +751,7 @@ class BDSReportController extends AdminController // $db = db_connect(); // $builder = $db->query(" - + // SELECT // c.id AS client_id, // c.client_name, @@ -808,7 +814,7 @@ class BDSReportController extends AdminController // life_premium DESC, // marine_cargo_premium DESC, // marine_hull_premium DESC - + // "); // // Get the query @@ -847,11 +853,11 @@ class BDSReportController extends AdminController // $db = db_connect(); // $builder = $db->query(" - + // select // c.id as client_id, // c.client_name, - + // ( // select // count(policy_transaction.id) @@ -862,7 +868,7 @@ class BDSReportController extends AdminController // and policy_transaction.is_active = 1 // ) as policy_count, - + // COALESCE(( // select // sum(stmt.actual_bp_amt + stmt.actual_tp_amt + stmt.actual_tep_amt) as premium @@ -873,9 +879,9 @@ class BDSReportController extends AdminController // and stmt.is_active = 1 // and ptco.is_active = 1 // and pt.is_active = 1 - + // ), 0) as premium - + // from clients c // join policy_transaction on c.id = policy_transaction.client_id AND policy_transaction.policy_issue_date >= '$fromDate' AND policy_transaction.policy_issue_date <= '$toDate' // join policy_type on policy_transaction.policy_type_id = policy_type.id and policy_type.policy_category = $category @@ -910,7 +916,6 @@ class BDSReportController extends AdminController $data['issuer'] = [1 => 'JIBS', 2 => 'Nhance']; $data['page_name'] = "Renewal Report"; return $this->loadLayout('renewal_search', $data); - } else { $fromDate = $this->request->getPost('fromDate'); @@ -927,4 +932,224 @@ class BDSReportController extends AdminController return $this->respond(['status' => true, 'html' => $html], 200); } } + + public function bdsTATReport() + { + $sql = " + SELECT + tc.TAT_Category, + COALESCE(SUM(CASE WHEN subquery.status = 'under_process' THEN 1 ELSE 0 END), 0) AS `Under Process`, + COALESCE(SUM(CASE WHEN subquery.status = 'client_pending' THEN 1 ELSE 0 END), 0) AS `Client Pending`, + COALESCE(SUM(CASE WHEN subquery.status = 'insurer_pending' THEN 1 ELSE 0 END), 0) AS `Insurer Pending`, + COALESCE(SUM(CASE WHEN subquery.status = 'instalment_pending' THEN 1 ELSE 0 END), 0) AS `Instalment Pending`, + COALESCE(SUM(CASE WHEN subquery.status = 'co_insurer_pending' THEN 1 ELSE 0 END), 0) AS `Co-Insurer Pending`, + COALESCE(SUM(CASE WHEN subquery.status = 'tpa_pending' THEN 1 ELSE 0 END), 0) AS `TPA Pending`, + COALESCE(SUM(CASE WHEN subquery.status = 'validated' THEN 1 ELSE 0 END), 0) AS `Validated`, + COALESCE(SUM(CASE WHEN subquery.status = 'cancelled' THEN 1 ELSE 0 END), 0) AS `Cancelled`, + COALESCE(SUM(CASE WHEN subquery.status = 'completed' THEN 1 ELSE 0 END), 0) AS `Completed`, + COALESCE(SUM(CASE WHEN subquery.status = 'lost' THEN 1 ELSE 0 END), 0) AS `Lost` FROM + ( + SELECT 'Above 12 Days' AS TAT_Category + UNION ALL + SELECT '9-12 Days' + UNION ALL + SELECT '5-8 Days' + UNION ALL + SELECT '0-4 Days' + ) AS tc + LEFT JOIN ( + SELECT + pt.id AS policy_id, + ls.status, + CASE + WHEN DATEDIFF(CURRENT_DATE, pt.created_at) BETWEEN 0 AND 4 THEN '0-4 Days' + WHEN DATEDIFF(CURRENT_DATE, pt.created_at) BETWEEN 5 AND 8 THEN '5-8 Days' + WHEN DATEDIFF(CURRENT_DATE, pt.created_at) BETWEEN 9 AND 12 THEN '9-12 Days' + ELSE 'Above 12 Days' + END AS TAT_Category + FROM + policy_transaction pt + LEFT JOIN ( + SELECT + pts1.* + FROM + policy_transaction_status pts1 + INNER JOIN ( + SELECT + policy_tran_id, + MAX(created_at) AS max_created_at + FROM + policy_transaction_status + WHERE is_active = 1 + GROUP BY policy_tran_id + ) pts2 + ON pts1.policy_tran_id = pts2.policy_tran_id + AND pts1.created_at = pts2.max_created_at + WHERE pts1.is_active = 1 + ) ls + ON pt.id = ls.policy_tran_id + WHERE pt.is_active = 1 + ) AS subquery + ON tc.TAT_Category = subquery.TAT_Category + GROUP BY + tc.TAT_Category + ORDER BY + FIELD(tc.TAT_Category, '0-4 Days', '5-8 Days' , '9-12 Days' , 'Above 12 Days' ) + "; + + // Run the query + $db = \Config\Database::connect(); + $query = $db->query($sql); + + // Get the result + $result = $query->getResultArray(); + // dd(db_connect()->getLastQuery(),$result); + $data['data'] = $result; + // dd($data, get_role_id(), ENROLLMENT_TEAM_ID, user_team()); + // return $this->loadLayout('bds_tat_wise_report', $data); + + return $result; + } + + public function accountMangerStatusBDSReport() + { + $data['page_name'] = "Account Manager BDS Report"; + + $sql = " + SELECT + COALESCE(ACM_Name, 'Total') AS ACM_Name, + COALESCE(SUM(CASE WHEN status = 'instalment_pending' THEN 1 ELSE 0 END), 0) AS `Instalment Pending`, + COALESCE(SUM(CASE WHEN status = 'under_process' THEN 1 ELSE 0 END), 0) AS `Under Process`, + COALESCE(SUM(CASE WHEN status = 'client_pending' THEN 1 ELSE 0 END), 0) AS `Client Pending`, + COALESCE(SUM(CASE WHEN status = 'co_insurer_pending' THEN 1 ELSE 0 END), 0) AS `Co Insurer Pending`, + COALESCE(SUM(CASE WHEN status = 'tpa_pending' THEN 1 ELSE 0 END), 0) AS `TPA Pending`, + COALESCE(SUM(CASE WHEN status = 'validated' THEN 1 ELSE 0 END), 0) AS `Validated`, + COALESCE(SUM(CASE WHEN status = 'cancelled' THEN 1 ELSE 0 END), 0) AS `Cancelled`, + COALESCE(SUM(CASE WHEN status = 'completed' THEN 1 ELSE 0 END), 0) AS `Completed`, + COALESCE(SUM(CASE WHEN status = 'lost' THEN 1 ELSE 0 END), 0) AS `Lost`, + COALESCE(SUM(CASE WHEN status = 'insurer_pending' THEN 1 ELSE 0 END), 0) AS `Insurer Pending` + + FROM ( + SELECT + up.first_name AS ACM_Name, + ls.status + FROM policy_transaction pt + JOIN clients c ON pt.client_id = c.id AND c.is_active = 1 + JOIN client_rm crm ON crm.client_id = c.id AND crm.is_active = 1 AND crm.level = 3 + JOIN user_profiles up ON up.id = crm.user_id AND up.is_active = 1 + LEFT JOIN ( + SELECT + pts1.policy_tran_id, + pts1.status, + pts1.created_at + FROM policy_transaction_status pts1 + INNER JOIN ( + SELECT + policy_tran_id, + MAX(created_at) AS max_created_at + FROM policy_transaction_status + WHERE is_active = 1 + GROUP BY policy_tran_id + ) pts2 + ON pts1.policy_tran_id = pts2.policy_tran_id + AND pts1.created_at = pts2.max_created_at + WHERE pts1.is_active = 1 + ) ls ON pt.id = ls.policy_tran_id + WHERE pt.is_active = 1 + AND DATEDIFF(CURDATE(), ls.created_at) >= 4 + ) AS sub + GROUP BY ACM_Name; + "; + + $db = \Config\Database::connect(); + $query = $db->query($sql); + + // Get the result + $result = $query->getResultArray(); + + return $result; + } + + public function accountManagerTatBDSReport(){ + + $sql = " + SELECT + COALESCE(ACM_Name, 'Total') AS ACM_Name, + COALESCE(SUM(CASE WHEN tat_bucket = '0-4 Days' THEN 1 ELSE 0 END), 0) AS `0-4 Days`, + COALESCE(SUM(CASE WHEN tat_bucket = '5-8 Days' THEN 1 ELSE 0 END), 0) AS `5-8 Days`, + COALESCE(SUM(CASE WHEN tat_bucket = '9-12 Days' THEN 1 ELSE 0 END), 0) AS `9-12 Days`, + COALESCE(SUM(CASE WHEN tat_bucket = 'Above 12 Days' THEN 1 ELSE 0 END), 0) AS `Above 12 Days` + FROM ( + SELECT + up.first_name AS ACM_Name, + CASE + WHEN DATEDIFF(CURDATE(), ls.created_at) BETWEEN 0 AND 4 THEN '0-4 Days' + WHEN DATEDIFF(CURDATE(), ls.created_at) BETWEEN 5 AND 8 THEN '5-8 Days' + WHEN DATEDIFF(CURDATE(), ls.created_at) BETWEEN 9 AND 12 THEN '9-12 Days' + WHEN DATEDIFF(CURDATE(), ls.created_at) > 12 THEN 'Above 12 Days' + ELSE 'Unknown' + END AS tat_bucket + FROM policy_transaction pt + JOIN clients c ON pt.client_id = c.id AND c.is_active = 1 + JOIN client_rm crm ON crm.client_id = c.id AND crm.is_active = 1 AND crm.level = 3 + JOIN user_profiles up ON up.id = crm.user_id AND up.is_active = 1 + LEFT JOIN ( + SELECT + pts1.policy_tran_id, + pts1.status, + pts1.created_at + FROM policy_transaction_status pts1 + INNER JOIN ( + SELECT + policy_tran_id, + MAX(created_at) AS max_created_at + FROM policy_transaction_status + WHERE is_active = 1 + GROUP BY policy_tran_id + ) pts2 + ON pts1.policy_tran_id = pts2.policy_tran_id + AND pts1.created_at = pts2.max_created_at + WHERE pts1.is_active = 1 + ) ls ON pt.id = ls.policy_tran_id + WHERE pt.is_active = 1 + AND ls.created_at IS NOT NULL + ) AS sub + GROUP BY ACM_Name; + + "; + + $db = \Config\Database::connect(); + $query = $db->query($sql); + + // Get the result + $result = $query->getResultArray(); + + return $result; + + } + + public function getMultiReport($report_type){ + + $data['page_name'] = "BDS Report"; + + if ($report_type == 1){ + + $data['page_title'] = "BDS TAT Report"; + $data['data'] = $this->bdsTATReport(); + }else if ($report_type == 2){ + + $data['page_title'] = "Account Manager Status Report"; + $data['data'] = $this->accountMangerStatusBDSReport(); + + }else{ + + $data['page_title'] = "Account Manager TAT Report"; + $data['data'] = $this->accountManagerTatBDSReport(); + + } + + return $this->loadLayout('bds_multi_report', $data); + + } } + 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 71bf3c98..9bf373ce 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,9 +40,11 @@ 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; +use App\Controllers\PolicyTransactionController; use App\Helpers\sendMailNotification; use App\Models\PTCOShareDetailsModel; @@ -83,7 +86,7 @@ class ClientController extends AdminController protected $policyTransactionStatusModel; protected $vehicleModel; protected $leadsModel; - + protected $clientApi; public function __construct() @@ -119,6 +122,7 @@ class ClientController extends AdminController $this->policyTransactionStatusModel = new PolicyTransactionStatusModel(); $this->vehicleModel = new VehicleModel(); $this->leadsModel = new LeadsModel(); + $this->clientApi = new ClientApiModel(); } //-------------------------------------------------------------------------------------------------------- @@ -751,7 +755,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); @@ -3996,8 +4000,9 @@ class ClientController extends AdminController } } - public function get_client_policy_data_using_policy_no($policy_no) - { + public function get_client_policy_data_using_policy_no() + { + $policy_no = $this->request->getGet('policy_no'); $data = $this->clientPolicyModel ->select(" client_policy.*, @@ -4017,8 +4022,11 @@ class ClientController extends AdminController } } - public function get_client_policy_data_using_policy_no_and_endo_no($policy_no, $endorsement_no) - { + public function get_client_policy_data_using_policy_no_and_endo_no() + { + $policy_no = $this->request->getGet('policy_no'); + $endorsement_no = $this->request->getGet('endorsement_no'); + $data = $this->clientPolicyModel ->select('client_policy.*, endorsement.endorsement_type') ->join('endorsement', 'client_policy.id = endorsement.client_policy_id') @@ -4596,6 +4604,16 @@ 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' => '865']); + // $res = $empServiceController->excelFileDataValidation(['file_id' => '865']); + // $res = $empServiceController->employeesSIEnhanceProcess(['file_id' => '829']); + // $res = $empServiceController->employeeDisembark(['file_id' => '858']); + + $policyTransactionController = new PolicyTransactionController(); + // $res = $policyTransactionController->validateInsurerStatement(['file_id' => '17']); + // $res = $policyTransactionController->updateInsurerStatement(['file_id' => '22']); + // dd('-----', $res); // ----------EMP DATA SERVICE CONTROLLER-------------------------------------------------------------------------------- @@ -4619,8 +4637,10 @@ class ClientController extends AdminController // $ids = array_column($emp_data, 'id'); // $EmpDataServiceController->sendMailForDownloadingECard($ids); - // $EmpDataServiceController = new EmpDataServiceController(); + $EmpDataServiceController = new EmpDataServiceController(); // $EmpDataServiceController->importDeletionValidation(['file_id' => 304]); //for live + // $EmpDataServiceController->importSIEnhancementUpdateEndorsementID(['file_id' => 1199]); //for live + // $EmpDataServiceController->importSIEnhancementValidation(['file_id' => 1205]); //for live // $result = $this->employeePolicyModel->getDeletionEmployeeDataForExportExcel($batch_data); // print_rr($result); die; @@ -4665,7 +4685,7 @@ class ClientController extends AdminController // ------------- LEADS CONTROLLER ---------------------------------------------------------- - // $LeadsController = new LeadsController(); + $LeadsController = new LeadsController(); // $RFQModel = new RFQModel(); // $data = $RFQModel->where('is_active', 1)->where('lead_id', 40)->first(); @@ -4679,6 +4699,8 @@ class ClientController extends AdminController // $returndata = $LeadsController->convertQCRJsonToPolicyTerms($jsonArray, $policy_type, $proposel_name, $insurer_name); // dd($returndata); + $LeadsController->handleMemberDataGPATotalSumInsurerFromExcel(['lead_id' => 169]); + // -----------BDS REPORT CONTROLLER--------------------------------------------------------------------------------- // $BDSReportController = new BDSReportController(); @@ -5692,6 +5714,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..b9ed11a4 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, @@ -164,22 +238,71 @@ class DashboardController extends AdminController // echo "
";
             $data['pendingActionsData'] = $pendingActionsData;
             $data['businessTeamCount'] = count($businessTeamData) ?? 0;
+            // dd($businessTeamData);
             $data['financeTeamCount'] = count($financeTeamData) ?? 0;
             $data['businessTeamStatusData'] = $businessTeamStatusData;
             $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());
+        // dd($data);
+        
         $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 +335,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 +366,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 +407,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 +536,6 @@ class DashboardController extends AdminController
                             $reminder_whole_mail[] = $mail_result;
                         }
                     }
-
                 } else { // crone
 
                     if (!empty($client_policy['reminder_date'])) {
@@ -511,15 +625,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 +660,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 +691,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 +711,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)
@@ -620,9 +727,8 @@ class DashboardController extends AdminController
             'validated' => [],
             'cancelled' => [],
             'instalment_pending' => [],
-            'completed' => [],
         ];
-        
+
         // Loop through results and group them by their status
         foreach ($data as $row) {
             switch ($row['status']) {
@@ -650,13 +756,32 @@ class DashboardController extends AdminController
                 case 'instalment_pending':
                     $groupedData['instalment_pending'][] = $row;
                     break;
-                default:
+                case 'under_process':
                     $groupedData['under_process'][] = $row;
                     break;
+                default:
+                    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 c7f9d689..19d57a7d 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 {
@@ -945,6 +949,9 @@ class EmpDataServiceController extends BaseController
                 $export_data['event_type'] = 'correction';
                 $correctionData = $this->employeePolicyModel->getCorrectionEmployeesDataForExportExcel($export_data);
 
+            }else if($value == "missed_inception"){
+                $export_data['event_type'] = 'missed_inception';
+                $additionData = $this->employeePolicyModel->getInceptionEmployeeDataForExportExcel($export_data);
             }
           
         }
@@ -1196,6 +1203,7 @@ class EmpDataServiceController extends BaseController
 
                 // Close and remove temporary file
                 fclose($tempFile);
+                exit();
 
                 return true; // Excel file successfully generated and exported
 
@@ -2415,8 +2423,17 @@ class EmpDataServiceController extends BaseController
         $client_policy_id = $file['client_policy_id'];
         $client_branch_id = $file['client_branch_id'];
         $batch_code = $file['batch_code'];
+        $insurer_or_tpa = $file['insurer_or_tpa'];
         $user_id = $file['created_by'];
 
+        $ref_data = [
+            'client_id' => $client_id,
+            'client_policy_id' => $client_policy_id,
+            'client_branch_id' => $client_branch_id,
+            'insurer_or_tpa' => $insurer_or_tpa,
+            'event_type' => $file['event_type'],
+        ];
+
 
         $file_name_with_path = WRITEPATH . "/uploads/import_excel/" . $file['file_name'];
 
@@ -2448,92 +2465,92 @@ class EmpDataServiceController extends BaseController
             }
         }
 
+        $endorsement_data = $this->employeePolicyModel->getSIEnhancementEmployeesDataForExportExcel($ref_data, 1);
+            // $db = \Config\Database::connect();
 
-            $db = \Config\Database::connect();
+            // // Raw SQL query
+            // $sql = "
+            //     SELECT 
+            //         a.id as endorsement_primarykey,
+            //         a.group_key,
+            //         employee_polices.id AS primaryKey,
+            //         employees.id AS emp_primary,
+            //         employees.name AS emp_name,
+            //         employees.emp_code AS emp_code,
+            //         employees.dob AS emp_dob,
+            //         employees.gender AS emp_gender,
+            //         employees.relationship_code AS emp_relationship_code,
+            //         'Has Define' AS emp_type,
+            //         employee_polices.uhid AS risk_id,
+            //         employee_polices.pre_existing_alignments,
+            //         employee_polices.policy_end_date,
+            //         employee_polices.basic_cover_si as old_basic_cover_si,
+            //         employee_polices.rata_premimum as old_si_premium,
+            //         sidata.new_basic_cover_si,
+            //         sidata.new_si_premium,
+            //         sidata.date_of_coverage,
+            //         DATEDIFF(employee_polices.policy_end_date, sidata.date_of_coverage) + 1 AS no_of_days,
+            //         sidata.new_si_premium - employee_polices.rata_premimum AS difference_premium,
+            //         ROUND((sidata.new_si_premium - employee_polices.rata_premimum) * (DATEDIFF(employee_polices.policy_end_date, sidata.date_of_coverage) + 1) / 365, 2) AS pro_rata_premimum,
+            //         ROUND(((sidata.new_si_premium - employee_polices.rata_premimum) * (DATEDIFF(employee_polices.policy_end_date, sidata.date_of_coverage) + 1) / 365) * 0.18, 2) AS gst,
+            //         ((sidata.new_si_premium - employee_polices.rata_premimum) * (DATEDIFF(employee_polices.policy_end_date, sidata.date_of_coverage) + 1) / 365) + ROUND(((sidata.new_si_premium - employee_polices.rata_premimum) * (DATEDIFF(employee_polices.policy_end_date, sidata.date_of_coverage) + 1) / 365) * 0.18, 2) AS total
+            //     FROM 
+            //         emp_endorsement a
+            //     LEFT JOIN 
+            //         employees ON employees.emp_code = a.emp_code
+            //     LEFT JOIN 
+            //         employee_polices ON employees.id = employee_polices.employee_id 
+            //     LEFT JOIN (
+            //         SELECT 
+            //             aa.emp_code, 
+            //             aa.new_value as new_basic_cover_si, 
+            //             bb.new_value as new_si_premium, 
+            //             cc.new_value as date_of_coverage 
+            //         FROM (
+            //             SELECT  
+            //                 a1.emp_code, 
+            //                 a1.field_name, 
+            //                 a1.new_value 
+            //             FROM 
+            //                 emp_endorsement as a1 
+            //             WHERE 
+            //                 a1.field_name = 'basic_cover_si'
+            //         ) aa 
+            //         LEFT JOIN (
+            //             SELECT  
+            //                 b1.emp_code, 
+            //                 b1.field_name, 
+            //                 b1.new_value 
+            //             FROM 
+            //                 emp_endorsement as b1 
+            //             WHERE 
+            //                 b1.field_name = 'premium'
+            //         ) bb ON aa.emp_code = bb.emp_code 
+            //         LEFT JOIN (
+            //             SELECT  
+            //                 c1.emp_code, 
+            //                 c1.field_name, 
+            //                 c1.new_value 
+            //             FROM 
+            //                 emp_endorsement as c1  
+            //             WHERE 
+            //                 c1.field_name = 'si_enhancement_date'
+            //         ) cc ON aa.emp_code = cc.emp_code
+            //     ) as sidata ON a.emp_code = sidata.emp_code 
+            //     WHERE 
+            //         employee_polices.client_policy_id = '$client_policy_id'
+            //         AND employees.client_branch_id = '$client_branch_id'
+            //         AND employee_polices.is_active = '1'
+            //         AND (a.endorsement_id IS NULL OR a.endorsement_id = '')   
+            //         AND a.actions = 'si'
+            //     GROUP BY group_key
+            // ";
 
-            // Raw SQL query
-            $sql = "
-                SELECT 
-                    a.id as endorsement_primarykey,
-                    a.group_key,
-                    employee_polices.id AS primaryKey,
-                    employees.id AS emp_primary,
-                    employees.name AS emp_name,
-                    employees.emp_code AS emp_code,
-                    employees.dob AS emp_dob,
-                    employees.gender AS emp_gender,
-                    employees.relationship_code AS emp_relationship_code,
-                    'Has Define' AS emp_type,
-                    employee_polices.uhid AS risk_id,
-                    employee_polices.pre_existing_alignments,
-                    employee_polices.policy_end_date,
-                    employee_polices.basic_cover_si as old_basic_cover_si,
-                    employee_polices.rata_premimum as old_si_premium,
-                    sidata.new_basic_cover_si,
-                    sidata.new_si_premium,
-                    sidata.date_of_coverage,
-                    DATEDIFF(employee_polices.policy_end_date, sidata.date_of_coverage) + 1 AS no_of_days,
-                    sidata.new_si_premium - employee_polices.rata_premimum AS difference_premium,
-                    ROUND((sidata.new_si_premium - employee_polices.rata_premimum) * (DATEDIFF(employee_polices.policy_end_date, sidata.date_of_coverage) + 1) / 365, 2) AS pro_rata_premimum,
-                    ROUND(((sidata.new_si_premium - employee_polices.rata_premimum) * (DATEDIFF(employee_polices.policy_end_date, sidata.date_of_coverage) + 1) / 365) * 0.18, 2) AS gst,
-                    ((sidata.new_si_premium - employee_polices.rata_premimum) * (DATEDIFF(employee_polices.policy_end_date, sidata.date_of_coverage) + 1) / 365) + ROUND(((sidata.new_si_premium - employee_polices.rata_premimum) * (DATEDIFF(employee_polices.policy_end_date, sidata.date_of_coverage) + 1) / 365) * 0.18, 2) AS total
-                FROM 
-                    emp_endorsement a
-                LEFT JOIN 
-                    employees ON employees.emp_code = a.emp_code
-                LEFT JOIN 
-                    employee_polices ON employees.id = employee_polices.employee_id 
-                LEFT JOIN (
-                    SELECT 
-                        aa.emp_code, 
-                        aa.new_value as new_basic_cover_si, 
-                        bb.new_value as new_si_premium, 
-                        cc.new_value as date_of_coverage 
-                    FROM (
-                        SELECT  
-                            a1.emp_code, 
-                            a1.field_name, 
-                            a1.new_value 
-                        FROM 
-                            emp_endorsement as a1 
-                        WHERE 
-                            a1.field_name = 'basic_cover_si'
-                    ) aa 
-                    LEFT JOIN (
-                        SELECT  
-                            b1.emp_code, 
-                            b1.field_name, 
-                            b1.new_value 
-                        FROM 
-                            emp_endorsement as b1 
-                        WHERE 
-                            b1.field_name = 'premium'
-                    ) bb ON aa.emp_code = bb.emp_code 
-                    LEFT JOIN (
-                        SELECT  
-                            c1.emp_code, 
-                            c1.field_name, 
-                            c1.new_value 
-                        FROM 
-                            emp_endorsement as c1  
-                        WHERE 
-                            c1.field_name = 'si_enhancement_date'
-                    ) cc ON aa.emp_code = cc.emp_code
-                ) as sidata ON a.emp_code = sidata.emp_code 
-                WHERE 
-                    employee_polices.client_policy_id = '$client_policy_id'
-                    AND employees.client_branch_id = '$client_branch_id'
-                    AND employee_polices.is_active = '1'
-                    AND (a.endorsement_id IS NULL OR a.endorsement_id = '')   
-                    AND a.actions = 'si'
-                GROUP BY group_key
-            ";
+            // // Execute the query
+            // $query = $db->query($sql);
 
-            // Execute the query
-            $query = $db->query($sql);
-
-            // Fetch the results
-            $endorsement_data = $query->getResultArray();
+            // // Fetch the results
+            // $endorsement_data = $query->getResultArray();
 
 
 
@@ -2740,11 +2757,11 @@ class EmpDataServiceController extends BaseController
                 ];
             }
 
-            if ($endorsement_value['pro_rata_premimum'] != $excel_data[$key][16]) {
+            if ($endorsement_value['pro_rata_premium'] != $excel_data[$key][16]) {
                 $errors[$key][] = [
                     'row' => $key,
                     'column' => 16,
-                    'db_data' => $endorsement_value['pro_rata_premimum'],
+                    'db_data' => $endorsement_value['pro_rata_premium'],
                     'excel_data' => $excel_data[$key][16]
                 ];
             }
@@ -2945,7 +2962,7 @@ class EmpDataServiceController extends BaseController
                 
                 $empData['basic_cover_si'] = $value[8];
                 $empData['premium'] = $value[14];
-                $empData['si_enhancement_date'] = $value[10];
+                $empData['si_enhancement_date'] = date('Y-m-d', strtotime($value[10])) ?? null;
                 $empData['rata_premimum'] = $value[16];
                 $empData['gst'] = $value[17];
                 $empData['created_by'] =  $user_id;
@@ -2959,26 +2976,20 @@ class EmpDataServiceController extends BaseController
 
         $this->employeePolicyModel->updateBatch($emp_policy_ids, 'id');
 
-        $db = \Config\Database::connect();
-        $db->transStart();
-        
-        $this->employeePolicyModel->insertBatch($emp_details);
+        // $this->employeePolicyModel->insertBatch($emp_details);
+        // $insertedIds = [];
+        // $startId = $db->insertID(); // Get the first inserted ID
         
+        // for ($i = 0; $i < count($emp_details); $i++) {
+        //     $insertedIds[] = $startId + $i;
+        // }
+
         $insertedIds = [];
-        $startId = $db->insertID(); // Get the first inserted ID
-        
-        for ($i = 0; $i < count($emp_details); $i++) {
-            $insertedIds[] = $startId + $i;
+        foreach ($emp_details as $emp) {
+            $insertedIds[] = $this->employeePolicyModel->insert($emp);
         }
         
-        $db->transComplete();
-        
-        // if ($db->transStatus() === FALSE) {
-        //     // Handle the error, rollback, etc.
-        // } else {
-        //     // Transaction successful
-        //     print_r($insertedIds); // This will print the array of inserted IDs
-        // }
+        // dd($insertedIds);
         
         $this->employeePolicyModel->bulkUpdateForEndorsement($endorsement_details);
         $this->storeEndorsementNumber($file_id, $endorsement_id, $enrollment_file_id);
diff --git a/app/Controllers/EmployeeController.php b/app/Controllers/EmployeeController.php
index 30f012b7..0bcc03c5 100755
--- a/app/Controllers/EmployeeController.php
+++ b/app/Controllers/EmployeeController.php
@@ -190,7 +190,7 @@ class EmployeeController extends AdminController
         // print_r($this->request->getPost('upload-action-type'));
         // die();
         // $empServiceController = new EmployeeServiceController();
-        // $res = $empServiceController->excelFileFormatValidation(['file_id' => '42']);
+        // $res = $empServiceController->excelFileDataValidation(['file_id' => '933']);
         // dd($res);
 
         // $empServiceController = new EmployeeServiceController();
@@ -434,7 +434,7 @@ class EmployeeController extends AdminController
             $filePath = ROOTPATH . 'public/sample_excel/sample_correction .xls';
         } else if ($actionType == 'si_enhancement') {
             $filePath = ROOTPATH . 'public/sample_excel/sample_si_enhancement.xls';
-        } else if ($actionType == 'dependent_addtion') {
+        } else if ($actionType == 'dependent_addition') {
             $filePath = ROOTPATH . 'public/sample_excel/sample_dependent_addition.xls';
         } else if ($actionType == 'addition') {
             $filePath = ROOTPATH . 'public/sample_excel/sample_addition.xls';
@@ -444,6 +444,8 @@ class EmployeeController extends AdminController
             $filePath = ROOTPATH . 'public/sample_excel/enrollment.xlsx';
         }else if ($actionType == 'missed_inception') {
             $filePath = ROOTPATH . 'public/sample_excel/sample_inception.xls';
+        }else if ($actionType == 'member_data') {
+             $filePath = ROOTPATH . 'public/sample_excel/Sample_Member_Data.xlsx';
         }
 
         // Check if the file exists
diff --git a/app/Controllers/EmployeeRestController.php b/app/Controllers/EmployeeRestController.php
index 9b137fda..3feb5558 100755
--- a/app/Controllers/EmployeeRestController.php
+++ b/app/Controllers/EmployeeRestController.php
@@ -3226,18 +3226,12 @@ class EmployeeRestController extends AdminController
                     $message = 'Claim Iniated Successfully';
                     return $this->respond(['status' => true, 'code' => 200, 'message' => $message], 200);
                 } else {
-                    $mail_sent_status = json_decode($mail_sent_status);
+                    $mail_sent_status_object = json_decode($mail_sent_status);
                 }
-                // dd(gettype($mail_sent_status));
 
-                if ($mail_sent_status->status == 'success') {
-                    $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['mail_subject'] = $mail_sent_status->data->params->subject;
-                    $sent_message_data['mail_content'] = $mail_sent_status->data->params->message;
+                if ($mail_sent_status_object->status == 'success') {
 
-                    $message_insert_status = $this->ticketMessage->insert($sent_message_data);
+                    $message_insert_status = $this->ticketController->autoMessageInsertBasedOnMailResponse($mail_sent_status, $ticket_id);
 
                     if ($message_insert_status) {
                         $message = 'Claim Initiated Successfully';
@@ -3248,11 +3242,11 @@ class EmployeeRestController extends AdminController
                         return $this->respond(['status' => false, 'code' => 400, 'message' => $message], 200);
                     }
                 } else {
-
                     $message = 'Claim Initiated, Failed to send Mail ';
                     $this->myLogger->logme('error', "Claim initiated, Failed to send Mail :$ticket_id ");
                     return $this->respond(['status' => false, 'code' => 400, 'message' => $message], 200);
                 }
+
             } else {
                 $message = 'Something Went Wrong';
                 return $this->respond(['status' => false, 'code' => 400, 'message' => $message], 200);
diff --git a/app/Controllers/EmployeeServiceController.php b/app/Controllers/EmployeeServiceController.php
index 61e0af4a..5d65c4a4 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,
@@ -725,6 +728,7 @@ class EmployeeServiceController extends AdminController
         $allowedHighestColumn = end($columns_to_check);
         // dd($allowedHighestColumn);
         $excel_data = $sheet->rangeToArray('A1:' . $allowedHighestColumn['col_cell_name'] . $highestRowAndColumn['row']);
+        $excel_data = ExcelSanitizeHelper::sanitizeArrayData($excel_data);
        // !dd(array_chunk($excel_data,20)[0]);
 
         //check no of columns in excel
@@ -994,7 +998,7 @@ class EmployeeServiceController extends AdminController
 
         $allowedHighestColumn = end($columns_to_check);
         $excel_data = $sheet->rangeToArray('A1:' . $allowedHighestColumn['col_cell_name'] . $highestRowAndColumn['row']);
-        // print_r($keys);die();
+        $excel_data = ExcelSanitizeHelper::sanitizeArrayData($excel_data);
 
         //remove header
         unset($excel_data[0]);
@@ -1032,6 +1036,14 @@ class EmployeeServiceController extends AdminController
                                  // kint::dump($family);
                                  $family = data_group_by_family($family)[ $emp_id ];// reason to call this again  bring self to first index of the array
                             }
+                            $firstNonTemp = null;
+
+                            foreach ($family as $fam) {
+                                if (!isset($fam['temp'])) {
+                                    $firstNonTemp = $fam;
+                                    break;
+                                }
+                            }
                             // kint::dump($family);//die();
                             
                             //check name dup within a family
@@ -1067,7 +1079,7 @@ class EmployeeServiceController extends AdminController
                                 if(!count($self_details))
                                 {
                                         array_push($result['error_summary'],14); // Self not found
-                                        $result['error_data'][ $family[0][0] ]['sno']['error'][] = "Self not found in Database";
+                                        $result['error_data'][ $firstNonTemp[0] ]['sno']['error'][] = "Self not found in Database";
                                 }
                             }
                            
@@ -1075,7 +1087,7 @@ class EmployeeServiceController extends AdminController
                            if($file['action'] == 'dependent_addition' || $file['action'] == 'addition' || $file['action'] == 'inception'|| $file['action'] == 'missed_inception' || $file['action'] == 'enrollment')
                             {
                                 $res = check_dependent_conflict($family,$policy_terms,$file['action'],$is_lgbtq);
-                                // dd($res);
+                                // Kint::dump($res);
                                 if(!$res['status'])
                                 {
                                     foreach($res['error_data'] as $key => $value)
@@ -1088,7 +1100,7 @@ class EmployeeServiceController extends AdminController
 
                             //check dup with empid and name with db 
                             $res = name_and_empid_check_in_db($family,$file);
-                            // dd($res);
+                            // Kint::dump($res['del']);
                             // echo '
'; // print_r($res); if(count($res['del'])) @@ -1110,7 +1122,7 @@ class EmployeeServiceController extends AdminController }// end of foreach }// end of if current action I,DA,A - // return $result; + // return $result; // die(); if(isset($result['error_summary']) && count($result['error_summary'])) { @@ -1356,19 +1368,28 @@ class EmployeeServiceController extends AdminController break; } // echo '
START- ' . $row[2]; - $employee = $this->employeeModel->where('emp_code', $row[1])->where('name',$row[2])->where('client_id',$file['client_id'])->where('client_branch_id',$file['client_branch_id'])->first(); + + $employee = $this->employeeModel + ->where('emp_code', $row[1]) + ->where('name',$row[2]) + ->where('client_id',$file['client_id']) + ->where('client_branch_id',$file['client_branch_id']) + ->where('emp_status !=','truncated') + ->where('is_active', 1) + ->first(); // $employee = $this->employeeModel->where('emp_code', $row[1])->where('name',$row[2])->where('client_id',$file['client_id'])->first(); // dd($employee); if(is_array($employee) && count($employee)) { // dd($employee); $existing_endorsements = $this->empEndorsementModel->where('actions','d') - ->where('table_name','employees') + ->where('table_name','employee_polices') ->where('endorsement_id is null') ->where('emp_code',$employee['emp_code']) ->where('name',$employee['name']) - ->where('field_name','emp_status') + ->where('field_name','status') ->where('status !=','truncated') + ->where('is_active', 1) ->findAll(); // dd($existing_endorsements); @@ -1527,8 +1548,21 @@ class EmployeeServiceController extends AdminController break; } // echo '
START- ' . $row[2]; - $employee = $this->employeeModel->where('emp_code', $row[1])->where('name',$row[2])->where('client_id',$file['client_id'])->where('client_branch_id',$file['client_branch_id'])->first(); - $employee_policy = $this->employeePolicyModel->where('employee_id',$employee['id'])->where('client_policy_id',$file['policy_id'])->first(); + $employee = $this->employeeModel + ->where('emp_code', $row[1]) + ->where('name',$row[2]) + ->where('client_id',$file['client_id']) + ->where('client_branch_id',$file['client_branch_id']) + ->where('emp_status', 'active') + ->where('is_active', 1) + ->first(); + $employee_policy = $this->employeePolicyModel + ->where('employee_id',$employee['id']) + ->where('client_policy_id',$file['policy_id']) + ->where('status', 'active') + ->where('is_active', 1) + ->first(); + // dd($employee, $employee_policy); $existing_endorsements = $this->empEndorsementModel->where('actions','si') ->where('table_name','employee_polices') @@ -1552,9 +1586,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,11 +1599,13 @@ 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); $policy_terms = $this->clientPolicyModel->getPolicyDetails($file['client_id'],$file['policy_id']); + $policy_terms = (array) $policy_terms[0]; + // dd($policy_terms); //grouping slab details by rack rate name $temp_slab_rates = group_slab_rates_basedon_name($slab_details); @@ -1658,6 +1696,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']; @@ -2048,12 +2087,14 @@ public function getFileMetaDataByFileId($file_id, $status = 'success'){ $relation = 'parent'; } else if(strtolower(trim($value['relationship'])) === 'son' || strtolower(trim($value['relationship'])) === 'daughter'){ $relation = 'child'; - }else if(strtolower(trim($value['relationship'])) === 'father in law' || strtolower(trim($value['relationship'])) === 'mother in law'){ + }else if((strtolower(trim($value['relationship'])) === 'father in law' || strtolower(trim($value['relationship'])) === 'mother in law') || (strtolower(trim($value['relationship'])) === 'father-in-law' || strtolower(trim($value['relationship'])) === 'mother-in-law')){ $relation = 'parent_in_law'; }else if(strtolower(trim($value['relationship'])) === 'spouse'){ $relation = 'spouse'; - }else{ + }else if(strtolower(trim($value['relationship'])) === 'self'){ $relation = 'self'; + }else { + $relation = ''; } $value['family_floater_key'] = $relation; @@ -2081,7 +2122,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 fdeca47e..0a16cb5e 100644 --- a/app/Controllers/LeadsController.php +++ b/app/Controllers/LeadsController.php @@ -30,6 +30,7 @@ use App\Models\RFQModel; use App\Models\InsurerModel; use App\Models\OccupancyMasterModel; use App\Models\LeadFilesModel; +use App\Models\LeadInstallmentPaymentDetails; use App\Helpers\MailHelper; use App\Helpers\ExcelMergeHelper; @@ -65,6 +66,7 @@ class LeadsController extends BaseController protected $insurerModel; protected $occupancyModel; protected $leadFilesModel; + protected $leadInstallmentPaymentDetails; //variables for storing array protected $issuer; @@ -96,20 +98,27 @@ class LeadsController extends BaseController $this->insurerModel = new InsurerModel(); $this->occupancyModel = new OccupancyMasterModel(); $this->leadFilesModel = new LeadFilesModel(); + $this->leadInstallmentPaymentDetails = new LeadInstallmentPaymentDetails(); $this->issuer = [1 => 'JIBS', 2 => 'Nhance']; $this->clientType = [1 => 'Group', 2 => 'Individual']; $this->leadType = [1 => 'Fresh', 2 => 'Renewal', 3 => 'Roll Over']; - $this->buisnessType = [1 => 'Industrial', 2 => 'Non Industrial']; + $data = $this->kycEntityTypeModel->where('is_active', 1)->findAll(); + $this->buisnessType = array_column($data, 'name', 'id'); + // $this->buisnessType = [1 => 'Public Sector', 2 => 'Private Sector',3=> 'Trust',4 => 'Proprietorship',5 => 'Partnership',6 => 'Private',7 => 'Individual']; $this->leadsStatus = [ - 'queued' => 'In-Queued', - 'qcr_sent' => 'QCR sent', - 'lost' => 'Lost', - 'co_insurer_pending' => 'Co-Insurer Pending', - 'won' => 'Won', - 'completed_with_corrections' => 'Completed with Corrections', - 'completed_without_corrections' => 'Completed w/o Corrections', + 'queued' => 'In-Queued', + 'rfq_created' => 'RFQ Created', + 'rfq_sent' => 'RFQ Sent', + 'qcr_created' => 'QCR Created', + 'qcr_sent' => 'QCR Sent', + 'lost' => 'Lost', + 'co_insurer_pending' => 'Co-Insurer Pending', + 'won' => 'Won', + 'completed_with_corrections' => 'Completed with Corrections', + 'completed_without_corrections' => 'Completed without Corrections', ]; + $this->claim_type_for_gpa = [ 'accident_death' => 'Accident Death', 'permanent_total_disablement' => 'Permanent Total Disablement', @@ -146,19 +155,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); + } } } @@ -575,12 +601,14 @@ class LeadsController extends BaseController $this->leadFilesModel->where('id', $value['id'])->set($lead_file_data)->update(); } else { - $lead_file_data = [ - 'lead_id' => $lead_id, - 'docs_name' => $value['docs_name'], - 'file_name' => $value['file_name'], - ]; - $this->leadFilesModel->insert($lead_file_data); + if (!empty($value['file_name'])) { + $lead_file_data = [ + 'lead_id' => $lead_id, + 'docs_name' => $value['docs_name'], + 'file_name' => $value['file_name'], + ]; + $this->leadFilesModel->insert($lead_file_data); + } } if ($key == 0 && !empty($value['file_name'])) { @@ -659,7 +687,7 @@ class LeadsController extends BaseController $data['exclusiveUserList'] = $this->userModel->getexclusiveUserListForRFQ(); $data['lead_data'] = $lead_data; - $mail_content = " + $mail_content = '

Dear Sir,

Greetings From Nhance India!

Please find attached the {{RFQ_OR_QCR}} for {{POLICY_TYPE}} policy pertaining to {{CLIENT_NAME}}.

@@ -670,27 +698,32 @@ class LeadsController extends BaseController
{{LOGGED_USER_NAME}}
-
Email: {{LOGGED_USER_EMAIL}}
Mobile: {{LOGGED_USER_MOBILE}}
- + Nhance Logo + '; - "; - - 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}}"; + } + if($lead_data['policy_type_id'] == 1){ + $data['totalSumAssured'] = $this->handleMemberDataGPATotalSumInsurerFromExcel(['lead_id' => $id]); + }else{ + $data['totalSumAssured'] = []; } $data['mail_content'] = $this->transformMailContent($lead_data, $mail_content, $data['page_name']); $data['subject'] = $this->transformMailContent($lead_data, $subject, $data['page_name']); $data['multi_file_data'] = $this->leadFilesModel->where('lead_id', $id)->where('is_active', 1)->findAll() ?? null; + $installment_data['installments'] = $this->leadInstallmentPaymentDetails->where('lead_id', $id)->where('is_active', 1)->findAll() ?? null; + $data['lead_data']['installment_data'] = view('rfq/installment_fields', $installment_data) ?? 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) { @@ -711,11 +744,14 @@ class LeadsController extends BaseController $data["child_table_data"] = json_decode($data['question_json'], true)['child_table_data']; } + $data['product'] = $this->leadsModel->select("policy_type.policy_type")->join('policy_type', 'leads.policy_type_id = policy_type.id')->where('leads.id', $id)->first()['policy_type']; // $data['lead_register_data'] = json_decode($data['lead_data']['custom_fields']); // dd($data['lead_register_data']); + // $data['entity_type'] = $this->kycEntityTypeModel->where('is_active', 1)->findAll(); + $data['buisness_type'] = $this->buisnessType; + // dd($data); $data['client_type'] = $this->clientType; - $data['buisness_type'] = $this->buisnessType; $this->loadLayout('view_rfq_non_eb', $data); } } @@ -760,12 +796,27 @@ class LeadsController extends BaseController return $this->respond(['status' => false, 'message' => 'Lead ID is required'], 400); } + $rfq_created = $this->RFQModel->where('lead_id', $lead_id)->where('is_active', 1)->countAllResults(); + $qcr_created = false; $inputJson = json_decode($data['json'], true); if (isset($inputJson['premium_data']) && !empty($inputJson['premium_data'])) { $sortedJson = $this->reorderProposalsByInsurerTotal($inputJson); $data['json'] = json_encode($sortedJson); + $qcr_created = true; } + if(($data['submit_type'] ?? "") == 'QCR'){ + $inputJson = json_decode($data['json'], true); + $proposal_data = array_pop($inputJson); + if(isset($proposal_data['proposal_data']['over_all_column_data'])){ + $proposel_count = $proposal_data['proposal_data']['over_all_column_data']; + foreach ($proposel_count as $key => $value) { + if(!empty($value['insurers'])){ + $qcr_created = true; + } + } + } + } $data['type'] = 1; @@ -805,6 +856,19 @@ class LeadsController extends BaseController } if ($insertId) { + + if(empty($rfq_created)){ + $this->leadsModel->update($lead_id, ['status' => "rfq_created"]); + } + + if($qcr_created == true){ + $this->leadsModel + ->where('id', $lead_id) + ->whereNotIn('status', ['qcr_sent', 'lost', 'co_insurer_pending', 'won', 'completed_with_corrections', 'completed_without_corrections']) + ->set(['status' => "qcr_created"]) + ->update(); + } + $message = ($data['submit_type'] ?? '') == 'QCR' ? 'QCR saved successfully' : 'RFQ saved successfully'; return $this->respond([ 'status' => true, @@ -866,7 +930,7 @@ class LeadsController extends BaseController if ($subKey !== 'Quote Asked' && isset($subVal['Total'])) { $proposals[$key] = $value; break; - }else{ + } else { $proposals[$key] = $value; } } @@ -1047,6 +1111,17 @@ class LeadsController extends BaseController return $result; } + public function removeInstallments() + { + $id = $this->request->getGet('id'); + // print_r($id); die; + if (!empty($id)) { + $this->leadInstallmentPaymentDetails->whereIn('id', $id)->set(['is_active' => 0])->update(); + return $this->respond(['status' => true, 'message' => 'Removed successfully'], 200); + } else { + return $this->respond(['status' => false, 'message' => 'Could not be removed.'], 200); + } + } //-----RFQ and QCR EXPORT------------------------------------------------------------------------------------------------ @@ -1123,36 +1198,32 @@ class LeadsController extends BaseController if ($rfq_data['policy_type_id'] == 2) { $lead_data = [ - 'policy_end_date' => $rfq_data['policy_end_date'], 'Insured' => $rfq_data['client_name'], - 'Policy Status' => $rfq_data['status'], + 'Policy Type' => $this->leadType[$rfq_data['lead_type']] ?? "", 'No of Employees' => $rfq_data['incept_emp_count'], 'No of Dependents' => $rfq_data['incept_dept_count'], 'Total Lives' => $rfq_data['incept_no_of_lives'], - 'Period of Insurance ' => date('d/m/Y', strtotime($rfq_data['policy_start_date'])) . ' to ' . date('d/m/Y', strtotime($rfq_data['policy_end_date'])), + 'Period of Insurance ' => !empty($rfq_data['policy_start_date']) && !empty($rfq_data['policy_end_date']) ? date('d/m/Y', strtotime($rfq_data['policy_start_date'])) . ' to ' . date('d/m/Y', strtotime($rfq_data['policy_end_date'])) : "To be decided", 'Policy Run Days' => $rfq_data['policy_run_days'], ]; } else if ($rfq_data['policy_type_id'] == 1) { $lead_data = [ - 'policy_end_date' => $rfq_data['policy_end_date'], 'Insured' => $rfq_data['client_name'], 'No of Employees at Inception' => $rfq_data['incept_emp_count'], 'Total Sum Insured at Inception ' => $rfq_data['total_si_at_incept'], - 'Policy Period' => date('d/m/Y', strtotime($rfq_data['policy_start_date'])) . ' to ' . date('d/m/Y', strtotime($rfq_data['policy_end_date'])), - 'Policy Status' => $rfq_data['status'], - 'Existing Insurer' => $rfq_data['insurer_name'], - 'TPA ' => $rfq_data['tpa_name'], + 'Policy Period' => !empty($rfq_data['policy_start_date']) && !empty($rfq_data['policy_end_date']) ? date('d/m/Y', strtotime($rfq_data['policy_start_date'])) . ' to ' . date('d/m/Y', strtotime($rfq_data['policy_end_date'])) : "To be decided", + 'Policy Type' => $this->leadType[$rfq_data['lead_type']] ?? "", ]; } + } else { if ($rfq_data['policy_type_id'] == 2) { $lead_data = [ - 'policy_end_date' => $rfq_data['policy_end_date'], 'Insured' => $rfq_data['client_name'], - 'Policy Status' => $rfq_data['status'], + 'Policy Type' => $this->leadType[$rfq_data['lead_type']] ?? "", 'No of Employees at Inception' => $rfq_data['incept_emp_count'], 'No of Dependents at Inception' => $rfq_data['incept_dept_count'], @@ -1166,7 +1237,7 @@ class LeadsController extends BaseController 'No of Dependents at Renewal' => $rfq_data['renewal_dept_count'], 'Total Lives at Renewal ' => $rfq_data['renewal_no_of_lives'], - 'Period of Insurance ' => date('d/m/Y', strtotime($rfq_data['policy_start_date'])) . ' to ' . date('d/m/Y', strtotime($rfq_data['policy_end_date'])), + 'Period of Insurance ' => !empty($rfq_data['policy_start_date']) && !empty($rfq_data['policy_end_date']) ? date('d/m/Y', strtotime($rfq_data['policy_start_date'])) . ' to ' . date('d/m/Y', strtotime($rfq_data['policy_end_date'])) : "To be decided", 'Policy Run Days' => $rfq_data['policy_run_days'], 'Inception Premium' => $rfq_data['premium_at_inception'], 'Premium as on (Date - DD MM YYYY should be entered based on the claims dump report)' => $rfq_data['premium_date'], @@ -1178,12 +1249,11 @@ class LeadsController extends BaseController ]; } else if ($rfq_data['policy_type_id'] == 1) { $lead_data = [ - 'policy_end_date' => $rfq_data['policy_end_date'], 'Insured' => $rfq_data['client_name'], 'No of Employees at Renewal' => $rfq_data['renewal_emp_count'], 'Total Sum Insured at Renewal ' => $rfq_data['total_si_at_renewal'], - 'Policy Period' => date('d/m/Y', strtotime($rfq_data['policy_start_date'])) . ' to ' . date('d/m/Y', strtotime($rfq_data['policy_end_date'])), - 'Policy Status' => $rfq_data['status'], + 'Policy Period' => !empty($rfq_data['policy_start_date']) && !empty($rfq_data['policy_end_date']) ? date('d/m/Y', strtotime($rfq_data['policy_start_date'])) . ' to ' . date('d/m/Y', strtotime($rfq_data['policy_end_date'])) : "To be decided", + 'Policy Type' => $this->leadType[$rfq_data['lead_type']] ?? "", 'Existing Insurer' => $rfq_data['insurer_name'], 'TPA ' => $rfq_data['tpa_name'], ]; @@ -1193,13 +1263,16 @@ class LeadsController extends BaseController $data = json_decode($rfq_data['json'], true); // dd($data); + $sheetName = 'Worksheet'; if ($type == 2) { + $sheetName = 'QCR'; $data = $this->convertJsonForQCR($data, $type); if ($propsal_and_insurer !== null) { list($proposal_key, $insurer_key) = explode('-', $propsal_and_insurer, 2); $data = $this->transformProposelData($data, $proposal_key, $insurer_key); } } else if ($type == 1) { + $sheetName = 'RFQ'; $data = $this->convertJsonForQCR($data, $type); // dd($data); } @@ -1207,6 +1280,7 @@ class LeadsController extends BaseController $spreadsheet = new Spreadsheet(); $sheet = $spreadsheet->getActiveSheet(); + $sheet->setTitle($sheetName); // Start with lead_data at the top @@ -1226,22 +1300,6 @@ class LeadsController extends BaseController ], ]); - // Set column width to fit the image properly - $sheet->getColumnDimension('C')->setWidth(20); // Adjust as needed - $sheet->getRowDimension($rowNumber)->setRowHeight(40); // Adjust as needed - - $drawing = new Drawing(); - $path = ROOTPATH . "public/assets/images/Nhance-Logo-Final.png"; // Use FCPATH for server path - $drawing->setPath($path); - $drawing->setCoordinates("C{$rowNumber}"); // Set position in column B - $drawing->setHeight(35); // Adjust image height - - // Center align the image in the cell - $drawing->setOffsetX(30); // Adjust horizontal offset - $drawing->setOffsetY(5); // Adjust vertical offset - - $drawing->setWorksheet($sheet); - // Apply center alignment to the cell $sheet->getStyle("C{$rowNumber}")->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER); $sheet->getStyle("C{$rowNumber}")->getAlignment()->setVertical(\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER); @@ -1288,11 +1346,10 @@ class LeadsController extends BaseController $rowNumber++; } - // Set column width based on max content length (adjusted for padding) + // // Set column width based on max content length (adjusted for padding) $sheet->getColumnDimension('A')->setWidth($maxWidthA * 1.2); $sheet->getColumnDimension('B')->setWidth($maxWidthA * 5); - $sheet->getColumnDimension('C')->setWidth($maxWidthB * 1.2); - // $sheet->getColumnDimension('D')->setWidth($maxWidthB * 1.2); + $sheet->getColumnDimension('C')->setWidth($maxWidthB * 1.6); // $rowNumber += 2; @@ -1334,9 +1391,13 @@ class LeadsController extends BaseController ]); $sheet->mergeCells($mergeRange); + $rowNumber_for_remove_quote_asked = $rowNumber; $rowNumber = $rowNumber + 1; - - $subHeaderRow = $rowNumber + 1; + if($type == 2){ + $subHeaderRow = $rowNumber + 1; + }else{ + $subHeaderRow = $rowNumber_for_remove_quote_asked; + } $columnLetter = 'A'; foreach ($headers as $header) { @@ -1377,9 +1438,12 @@ class LeadsController extends BaseController // Add subheaders foreach ($header['subHeaders'] as $subHeader) { - $sheet->setCellValue("{$columnLetter}{$subHeaderRow}", $subHeader); - if ($columnLetter != "A" && $columnLetter != "B" && $columnLetter != "C" && $columnLetter != "D") { + if($type == 2){ + $sheet->setCellValue("{$columnLetter}{$subHeaderRow}", $subHeader); + } + + if ($columnLetter != "A" && $columnLetter != "B" && $columnLetter != "C") { $sheet->getColumnDimension($columnLetter)->setWidth(35); } else { $sheet->getColumnDimension('A')->setWidth(10); @@ -1498,6 +1562,51 @@ class LeadsController extends BaseController ]); } + + //set imgage and align the row and column + // Kint::dump($columnLetter); + if($type == 2){ + $columnLetter_img = $this->getPreviousColumn($columnLetter, 2); + }else{ + $columnLetter_img = $this->getPreviousColumn($columnLetter); + } + // dd($columnLetter_img); + + $company_name = $this->getPreviousColumn($columnLetter_img); + $mergeRange1 = "A1:{$company_name}1"; + $sheet->mergeCells($mergeRange1); + + $rowCount = count($lead_data); + for ($i = 2; $i <= $rowCount + 1; $i++) { + $mergeRange1 = "C{$i}:{$columnLetter_img}{$i}"; + $sheet->mergeCells($mergeRange1); + $sheet->getStyle($mergeRange1)->applyFromArray([ + 'borders' => [ + 'allBorders' => [ + 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN, + 'color' => ['argb' => 'FF000000'], // Black color + ], + ], + ]); + } + + $sheet->getColumnDimension($columnLetter_img)->setWidth(40); + $sheet->getRowDimension(1)->setRowHeight(40); // Adjust as needed + + $drawing = new Drawing(); + $path = ROOTPATH . "public/assets/images/Nhance-Logo-Final.png"; // Use FCPATH for server path + $drawing->setPath($path); + $drawing->setCoordinates("{$columnLetter_img}1"); // Set position in column B + $drawing->setHeight(35); // Adjust image height + + // Center align the image in the cell + $drawing->setOffsetX(110); // Adjust horizontal offset + $drawing->setOffsetY(10); // Adjust vertical offset + $drawing->setWorksheet($sheet); + + //end + + // Auto-size columns // foreach ($sheet->getColumnIterator() as $column) { // $sheet->getColumnDimension($column->getColumnIndex())->setAutoSize(true); @@ -1535,7 +1644,7 @@ class LeadsController extends BaseController } $lastRow = count($lead_data) + 1; - $leadRange = "A1:C{$lastRow}"; + $leadRange = "A1:{$columnLetter_img}{$lastRow}"; $sheet->getStyle($leadRange)->applyFromArray([ 'borders' => [ @@ -1546,7 +1655,7 @@ class LeadsController extends BaseController ], ]); - + // Set filename $string = ($type == 2) ? 'QCR' : 'RFQ'; @@ -1554,15 +1663,14 @@ class LeadsController extends BaseController $next_year = $current_year + 1; $policy_year = "$current_year-$next_year"; - if (!empty($rfq_data['policy_end_date'])){ - $policy_expiry = strtotime($lead_data['policy_end_date']); + if (!empty($rfq_data['policy_end_date'])) { - $formatted_policy = date("d-m-Y",$policy_expiry); + $policy_expiry = strtotime($rfq_data['policy_end_date']); + $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.'(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 . '_' . '.xlsx'; } @@ -1658,7 +1766,7 @@ class LeadsController extends BaseController ['file_path' => WRITEPATH . 'uploads/lead_files/' . $lead_data['file_name'], 'sheets' => [0, 1]], ['file_path' => WRITEPATH . '/uploads/lead_files/' . $result['filename'], 'sheets' => []], ]; - $outputPath = WRITEPATH . 'uploads/lead_files/Member_Data.xlsx'; + $outputPath = WRITEPATH . 'uploads/lead_files/' .$lead_data['file_name']; $result_merge = ExcelMergeHelper::mergeExcelFiles($filePaths, $outputPath); if ($result_merge) { // Call the delete function after the file is successfully created @@ -2060,17 +2168,19 @@ class LeadsController extends BaseController ->where('leads.id', $lead_id) ->first(); + // log_message('error', 'Lead Data' . json_encode($lead_data)); // print_r($lead_data ); die; $cc_mails = []; $bcc_mails = []; //get CC Mails - if ($recipient_type == 'internal' || $recipient_type == 'placement' || $recipient_type == 'insurer' || $recipient_type == 'client') { + if ($recipient_type == 'internal' || $recipient_type == 'insurer' || $recipient_type == 'client') { $cc_data = isset($params['cc']) ? $params['cc'] : ""; $param_cc_mail = json_decode($cc_data, true); + if (isset($param_cc_mail) && is_array($param_cc_mail) && count($param_cc_mail) > 0) { // Fetch user data where ID is in the param_cc_mail array $userData = $this->userModel @@ -2094,6 +2204,8 @@ class LeadsController extends BaseController // Handle case where param_cc_mail is not valid // return $this->respond(['status' => 'failed','code' => 400,'data' => '','message' => 'CC mail not found!'], 200); } + }else if($recipient_type == 'placement'){ + $cc_mails = isset($params['cc']) ? json_decode($params['cc'], true) : ""; } //get BCC Mails @@ -2161,6 +2273,7 @@ class LeadsController extends BaseController $result = $file_info['filePath']; // return $this->respond(['status' => 'fail', 'code' => 200, 'messgae' => 'File Not Found'], 200); } + // print_rr($result); die; // print_rr($file_info); // $file_path = WRITEPATH."uploads/excel/sample/correction.xls"; @@ -2179,23 +2292,18 @@ class LeadsController extends BaseController //get recipient address if ($recipient_type == 'insurer' || $recipient_type == 'placement') { - // print_r($recipient_mail); die; - $recipient_data = $this->levelContactModel ->where(['contact_type' => 'insurer', 'is_active' => 1]) ->whereIn('id', $recipient_mail) ->findAll(); - // print_r($recipient_data); die; - } 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']]]; } @@ -2221,9 +2329,9 @@ class LeadsController extends BaseController foreach ($recipient_data as $recipient) { $message = $original_message; - $message = str_replace("{{RECIPIENT_NAME}}", $recipient['name'], $message); - $message = str_replace("{{CLIENT_NAME}}", $lead_data['client_name'], $message); - $message = str_replace("{{POLICY_LONG_NAME}}", $lead_data['long_name'], $message); + $message = str_replace("{{RECIPIENT_NAME}}", $recipient['name'] != "" ? $recipient['name'] :" ", $message); + $message = str_replace("{{CLIENT_NAME}}", $lead_data['client_name'] != "" ? $lead_data['client_name'] : "", $message); + $message = str_replace("{{POLICY_LONG_NAME}}",$lead_data['long_name'] != ""? $lead_data['long_name'] : "", $message); $message = str_replace("{{POLICY_START_DATE}}", change_date_format($lead_data['policy_start_date'], 'Y-m-d', 'd-m-Y'), $message); $message = str_replace("{{DURATION}}", calculate_days_bw_dates($lead_data['policy_end_date'] ?? "", $lead_data['policy_start_date'] ?? "")->days, $message) ?? '--'; @@ -2250,16 +2358,54 @@ class LeadsController extends BaseController $data = [ 'proposel_data' => json_encode($lead_update_data), 'status' => 'won', - 'placement_date' => change_date_format($params['placement_date'], 'd/m/Y', 'Y-m-d'), - 'payment_date' => change_date_format($params['payment_date'], 'd/m/Y', 'Y-m-d'), - 'utr_no' => $params['utr_no'], - 'is_cd' => $params['is_cd'], - 'premium_amount' => $params['premium_amount'], - 'total_amount' => $params['total_amount'], - 'cd_amount' => $params['cd_amount'], + 'placement_date' => date('Y-m-d', strtotime($params['placement_date']) ?? "") ?? null, + 'payment_date' => date('Y-m-d', strtotime($params['payment_date'] ?? "")) ?? null, + 'utr_no' => $params['utr_no'] ?? null, + 'is_cd' => $params['is_cd'] ?? null , + 'premium_amount' => $params['premium_amount'] ?? null, + 'total_amount' => $params['total_amount'] ?? null, + 'cd_amount' => $params['cd_amount'] ?? null, + 'no_of_installment' => $params['no_of_installment'] ?? null, + 'is_installment' => $params['is_installment'] ?? null, ]; $this->leadsModel->where('id', $lead_id)->set($data)->update(); + + if(isset($params['installments']) && !empty($params['installments'])){ + + $installment_data = json_decode($params['installments'], true); + if(!empty($installment_data)){ + foreach ($installment_data as $key => $value) { + $value['payment_date'] = !empty($value['payment_date']) && strtotime($value['payment_date']) + ? date('Y/m/d', strtotime($value['payment_date'])) + : null; + if(isset($value['id']) && !empty($value['id'])){ + $this->leadInstallmentPaymentDetails->where('id', $value['id'])->set($value)->update(); + }else{ + $this->leadInstallmentPaymentDetails->insert($value); + } + } + } + } + + } + + if ($recipient_type == 'client') { + + $this->leadsModel + ->where('id', $lead_id) + ->whereNotIn('status', ['lost', 'co_insurer_pending', 'won', 'completed_with_corrections', 'completed_without_corrections']) + ->set(['status' => "qcr_sent"]) + ->update(); + } + + if ($recipient_type == 'insurer') { + + $this->leadsModel + ->where('id', $lead_id) + ->whereNotIn('status', ['qcr_created', 'qcr_sent', 'lost', 'co_insurer_pending', 'won', 'completed_with_corrections', 'completed_without_corrections']) + ->set(['status' => "rfq_sent"]) + ->update(); } //delete attachment file @@ -2849,7 +2995,7 @@ class LeadsController extends BaseController $value = $cellData['display_content'] ?? ''; // Skip unwanted keys - if (in_array($parentth, ['SNO', 'Particulars', 'Action']) || $subth === 'Quote Asked') { + if (in_array($parentth, ['SNO', 'Particulars', 'Action']) || $subth === 'Sum Insured' || $subth === 'Fidelity Limit') { continue; } @@ -2934,13 +3080,17 @@ class LeadsController extends BaseController $current_year = date('Y'); $next_year = $current_year + 1; $policy_year = "$current_year-$next_year"; + $page_name = $page_name == "QCR" ? "Quote Comparison Report" : $page_name; + $log_path = base_url() . '/public/assets/images/Nhance-Logo-Final.png'; + // $log_path ='https://venbait.in/nhance/dev/public/assets/images/Nhance-Logo-Final.png'; + // dd($log_path); $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) { @@ -2951,11 +3101,12 @@ 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); + $message = str_replace("{{LOGO_PATH}}", $log_path, $message); return $message; } else { @@ -3065,7 +3216,6 @@ class LeadsController extends BaseController $data['lead_edit_data']['claims_details_html'] = ""; } } - // dd($data); return $this->loadLayout('leads_form_handler', $data); @@ -3098,6 +3248,7 @@ class LeadsController extends BaseController 3 => 'rfq/gmc', 4 => 'rfq/gmc', 5 => 'rfq/gmc', + 17=> 'rfq/burglary', 22 => 'rfq/car', 23 => 'rfq/cpm', 24 => 'rfq/cyber_crime', @@ -3237,11 +3388,11 @@ class LeadsController extends BaseController $sheet->getColumnDimension('B')->setWidth($maxWidthA * 1.2); $sheet->getColumnDimension('C')->setWidth($maxWidthB * 1.2); - $rowNumber += 2; + $rowNumber += 1; //Policy Registration if (!empty($policy_registration_data)) { foreach ($policy_registration_data as $key => $value) { - + // kint::dump($value); $startRow = $rowNumber; // Track where the block starts // Title Row @@ -3328,6 +3479,24 @@ class LeadsController extends BaseController $rowNumber++; } + if (isset($value['policyDetails']) && !empty($value['policyDetails'])) { + // Type of Business + $sheet->mergeCells("A{$rowNumber}:B{$rowNumber}"); + $sheet->setCellValue("A{$rowNumber}", "Terrorism"); + $sheet->setCellValue("C{$rowNumber}", ucfirst($value['policyDetails']['terrorism'] ?? 'No')); + + $sheet->getStyle("A{$rowNumber}")->applyFromArray([ + 'font' => ['bold' => true], + 'alignment' => [ + 'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER, + 'vertical' => \PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER, + ], + ]); + + $rowNumber++; + + } + $endRow = $rowNumber - 1; // Block ends at previous row // Apply border to the whole block @@ -3340,8 +3509,9 @@ class LeadsController extends BaseController ], ]); - $rowNumber += 2; // Add space before the next block + $rowNumber += 1; // Add space before the next block } + // die(); } //Table Data @@ -3445,6 +3615,18 @@ class LeadsController extends BaseController } } + // For the subheader row, merge B and C and set the value + $sheet->setCellValue("B{$subHeaderRow}", "Sum Insured"); + $sheet->mergeCells("B{$subHeaderRow}:C{$subHeaderRow}"); + $sheet->getStyle("B{$subHeaderRow}:C{$subHeaderRow}")->applyFromArray([ + 'font' => ['bold' => true], + 'alignment' => [ + 'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER, + 'vertical' => \PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER, + ], + ]); + + // Apply border to the header range $prevColumn4 = $this->getPreviousColumn($columnLetter); $headerRange = "A{$rowNumber}:" . "{$prevColumn4}" . "{$subHeaderRow}"; @@ -3461,7 +3643,9 @@ class LeadsController extends BaseController $sheet->getRowDimension($rowNumber)->setRowHeight(25); // Header row height $sheet->getRowDimension($subHeaderRow)->setRowHeight(20); // Subheader row height - $rowNumber = $subHeaderRow + 2; + // $rowNumber = $subHeaderRow + 2; + $rowNumber = $subHeaderRow + 1; + $column_data = $data['table_data']['data']; // dd($column_data); $serial_no = 1; @@ -3749,7 +3933,7 @@ class LeadsController extends BaseController $row['data'] = array_filter( $row['data'], function ($item) { - return in_array($item['subth'], ['Quote asked', '-']); + return in_array($item['subth'], ['Sum Insured', '-',"Liability Limit"]); } ); @@ -3838,7 +4022,7 @@ class LeadsController extends BaseController if ($subHeader === $insurer) { $headerData[] = [ 'parentHeader' => $header['parentHeader'], - 'subHeaders' => ['Quote asked', $subHeader] + 'subHeaders' => ['Sum Insured', $subHeader] ]; break 2; // Exit both loops after match is found } @@ -3871,8 +4055,8 @@ class LeadsController extends BaseController $filteredData[] = $item; } - // Include Proposal with Quote Asked - if ($item['parentth'] === $proposal && $item['subth'] === "Quote asked") { + // Include Proposal with Sum Insured + if ($item['parentth'] === $proposal && ($item['subth'] === "Sum Insured" || $item['subth'] === "Liability Limit")) { $filteredData[] = $item; } @@ -3919,14 +4103,86 @@ class LeadsController extends BaseController $lead_file = $this->leadFilesModel->where('lead_id', $lead_id)->where('id', $id)->where('is_active', 1)->first(); if ($lead_file) { - $attachments[] = [ - 'fileName' => $lead_file['file_name'], - 'filePath' => $lead_file_path . $lead_file['file_name'] - ]; + + $fullPath = $lead_file_path . $lead_file['file_name']; + + if (file_exists($fullPath) && !empty($fileName)) { + $attachments[] = [ + 'fileName' => $lead_file['file_name'], + 'filePath' => $fullPath + ]; + } } } } return $attachments; } + + public function handleMemberDataGPATotalSumInsurerFromExcel($params) + { + $lead_id = $params['lead_id']; + $lead_data = $this->leadsModel->find($lead_id); + // dd($lead_data); + $file_name_with_path = WRITEPATH . "/uploads/lead_files/" . $lead_data['file_name']; + // dd($file_name_with_path); + + if (!$lead_data) { + return ['status' => 'failed', 'message' => 'Lead data not found']; + } + + if ($lead_data['file_name']) { + + //check physical file + if (!file_exists($file_name_with_path)) { + + $message = "Lead Physcial file not found"; + $this->myLogger->logme('error', ($message . ' for file ' . $file_name_with_path)); + return ['status' => 'failed', 'message' => 'no physical file']; + } + + $spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($file_name_with_path); + + //get members data + $members_sheet = $spreadsheet->getSheet(0); + $highestRowAndColumn = $members_sheet->getHighestRowAndColumn(); + // dd($highestRowAndColumn); + + $uncleaned_members = $members_sheet->rangeToArray('A1:' . $highestRowAndColumn['column'] . $highestRowAndColumn['row']); + // dd($uncleaned_members); + + $members = ExcelSanitizeHelper::sanitizeArrayData($uncleaned_members); + // dd($members); + + + // Check column headings + $members_heading = $members[0]; + $available_col = []; + + $lower_headers = array_map('strtolower', $members_heading); + foreach ($lower_headers as $index => $header) { + if (preg_match('/^sa\s*-\s*option\s*\d*$/i', $header)) { + $column_name = $members_heading[$index]; + $sum = 0; + + for ($i = 1; $i < count($members); $i++) { + $cell_raw = $members[$i][$index] ?? ''; + $cell_clean = preg_replace('/[^0-9.\-]/', '', $cell_raw); // remove non-numeric chars + + if ($cell_clean !== '' && is_numeric($cell_clean)) { + $sum += (float) $cell_clean; + } + } + + $available_col[] = $sum; + } + } + + + // dd($available_col); + return $available_col; + } + + return []; + } } diff --git a/app/Controllers/MasterController.php b/app/Controllers/MasterController.php index 02409c2c..0a3c357d 100755 --- a/app/Controllers/MasterController.php +++ b/app/Controllers/MasterController.php @@ -1680,7 +1680,7 @@ class MasterController extends AdminController ["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 = 'srinivas.saravanan@venbainfotech.com'; + $email_id = ['srinivas.saravanan@venbainfotech.com','srinivassaravanan2002@gmail.com']; $params = ['mail'=>$email_id]; $common = ['mail_type'=>'test_mail_cli']; // $bcc = "vijayalakshmi@nhanceindia.in,vitvelz@gmail.com,velmurugan.s@venbainfotech.com,hariharan@nhanceindia.in,hariharan@jubiliant.in,srinivas.saravanan@venbainfotech.com"; @@ -1829,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 7b35bc86..ea4a45de 100644 --- a/app/Controllers/PolicyTransactionController.php +++ b/app/Controllers/PolicyTransactionController.php @@ -32,10 +32,13 @@ use App\Models\InvPaymentDetailsModel; use App\Models\BatchFileModel; use App\Models\FileModel; use App\Models\COShareStmtDetailsModel; -use Kint; +use App\Models\BdsPlacementModel; +use Kint\Kint; +use App\Helpers\MailHelper; +use Exception; class PolicyTransactionController extends BaseController -{ +{ use ResponseTrait; protected $myLogger; @@ -64,7 +67,8 @@ class PolicyTransactionController extends BaseController protected $batchFileModel; protected $filesModel; protected $coShareStmtDetailsModel; - + protected $BdsPlacementModel; + public function __construct() { set_session_context('Policy Tranction'); @@ -94,6 +98,7 @@ class PolicyTransactionController extends BaseController $this->batchFileModel = new BatchFileModel(); $this->filesModel = new FileModel(); $this->coShareStmtDetailsModel = new COShareStmtDetailsModel(); + $this->BdsPlacementModel = new BdsPlacementModel(); $this->invoiceStatus = [ 'pending' => 'Pending', 'generated' => 'Generated', @@ -106,7 +111,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 +153,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 +163,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,19 +173,39 @@ 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, - $end_date, - $client_id, - $insurer_id, - $policy_type_id, - $date_type, - $issuer, - $status - ); - + + if ($this->request->is('get')) { + + // Fetch inception data list + $data['inception_data_list'] = $this->policyTransactionModel->getInceptionTranctionListData( + $start_date, + $end_date, + $client_id, + $insurer_id, + $policy_type_id, + $date_type, + $issuer, + $status + ); + } else { + + $ids = $this->request->getPost('ids'); + $ids = array_filter(explode(',', $ids)); + $data['inception_data_list'] = $this->policyTransactionModel->getInceptionTranctionListData( + $start_date = 0, + $end_date = 0, + $client_id = 0, + $insurer_id = 0, + $policy_type_id = 0, + $date_type = 0, + $issuer = 0, + $status = 0, + $ids + ); + } + + + // Fetch additional data $data['client'] = $this->clientModel->where('is_active', 1)->findAll(); $data['client_branch'] = $this->clientBranchModel->where('is_active', 1)->findAll(); @@ -190,7 +215,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 +229,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 +254,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 +312,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']) {
@@ -312,17 +337,16 @@ class PolicyTransactionController extends BaseController
             $data['is_cd_reduce_from_bds'] = 1;
         }
 
-        if($data['ct_type'] == ""){
+        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;
@@ -355,75 +379,85 @@ class PolicyTransactionController extends BaseController
                 }
             }
 
+            $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($insert, "Policy transaction created successfully", $data);
         }
 
         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['client_type'] == 1 && $data['is_cd_reduce_from_bds'] == 1){
-                    $this->processCompletedStatus($data, $data['client_policy_id'], $data['insurer_id']);
+
+                if ($data['status'] == 'completed' && $data['ct_type'] == 2) {
+                    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
-                if(isset($insurer) && !empty($insurer)){
-                    list($insurer_branch_id, $insurer_id) = explode('-', $insurer);                
-                }else{
+                if (isset($insurer) && !empty($insurer)) {
+                    list($insurer_branch_id, $insurer_id) = explode('-', $insurer);
+                } else {
                     $insurer_branch_id = null;
                     $insurer_id = null;
                 }
@@ -469,47 +503,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 +553,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 +564,7 @@ class PolicyTransactionController extends BaseController
             'gst' => 18,
         ];
     }
-    
+
     private function insertTransactionStatus($policyTranId, $data, $statusType)
     {
         $statusData = [
@@ -543,12 +576,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 (BDS).';
-    
+
         $cdTransactionData = [
             'amount' => $totalAmount,
             'sub_type_id' => 4,
@@ -569,32 +602,32 @@ class PolicyTransactionController extends BaseController
     }
 
     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
@@ -602,52 +635,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);
@@ -655,15 +687,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);
@@ -674,7 +705,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, 
@@ -695,83 +726,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
@@ -782,15 +813,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
@@ -799,7 +830,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());
             }
@@ -810,7 +841,7 @@ class PolicyTransactionController extends BaseController
 
 
         $data['pt_co_share_details'] = $this->PTCOShareDetailsModel
-                ->select("
+            ->select("
                     pt_co_share_details.*,
             
                     (
@@ -926,41 +957,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);
@@ -968,31 +997,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 +1079,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 +1097,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 +1109,7 @@ class PolicyTransactionController extends BaseController
         $id = $this->request->getPost('id');
         $data = $this->preparePolicyTransactionData();
         // print_r($data); die;
-        
+
         if (!$id) {
             return $this->insertEndorsementTransaction($data);
         } else {
@@ -1108,47 +1137,45 @@ class PolicyTransactionController extends BaseController
             $data['is_cd_reduce_from_bds'] = 1;
         }
 
-        if(empty($data['data_received_date'])){
+        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']);
@@ -1156,20 +1183,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,
@@ -1177,8 +1204,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' => 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,
+                '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,
@@ -1188,7 +1215,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,
@@ -1250,13 +1277,13 @@ class PolicyTransactionController extends BaseController
     }
 
     private function handleCompletedStatus($data, $policy_tran_id)
-    {    
+    {
         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 (BDS)';
+            $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,
@@ -1474,13 +1501,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';
 
@@ -1513,7 +1540,7 @@ class PolicyTransactionController extends BaseController
                     $insert = $this->PTFileModel->insert($docData);
 
                     if ($insert) {
-                        $uploadData[] = $docData; 
+                        $uploadData[] = $docData;
                     }
                 }
             }
@@ -1522,23 +1549,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']);
@@ -1554,7 +1581,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');
         }
 
@@ -1563,8 +1590,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);
@@ -1581,7 +1608,7 @@ class PolicyTransactionController extends BaseController
             'updated_by' => get_session_userid(),
             'is_active' => 0
         ];
-        
+
         $update = $this->PTCOShareDetailsModel->where('id', $id)->set($data)->update();
 
         if ($update) {
@@ -1624,8 +1651,8 @@ 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();    
+
+        $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, "cd_master_data" => $cd_ac_no], 200);
@@ -1633,7 +1660,6 @@ class PolicyTransactionController extends BaseController
             $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)
@@ -1648,28 +1674,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);
         }
     }
 
@@ -1677,7 +1703,7 @@ class PolicyTransactionController extends BaseController
 
     //get BDS Reports data old function
     public function reportBDSOld()
-    {   
+    {
 
         $data['page_name'] = 'BDS Report';
 
@@ -1691,7 +1717,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',
@@ -1718,27 +1744,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';
 
@@ -1752,7 +1778,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',
@@ -1772,6 +1798,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');
@@ -1784,35 +1811,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'];
@@ -1839,30 +1881,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'];
@@ -1885,24 +1926,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'];
@@ -1925,24 +1966,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'];
@@ -1963,20 +2004,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);
     }
 
     //---------------------------------------------------------------------------------------------------
@@ -1985,16 +2025,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, 
@@ -2009,18 +2050,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);
@@ -2071,80 +2112,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()
@@ -2152,23 +2190,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.');
         }
     }
 
@@ -2180,37 +2215,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']);
@@ -2219,33 +2252,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]);
@@ -2253,27 +2282,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']); } @@ -2285,37 +2311,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']); @@ -2324,33 +2348,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 @@ -2360,18 +2380,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 == 0) && !empty($actual_bp_amt)) { + $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; } @@ -2380,17 +2395,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 == "") && !empty($actual_tp_amt)) { $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; } @@ -2399,17 +2410,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 == "") && !empty($actual_tep_amt)) { $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; } @@ -2417,13 +2424,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); @@ -2434,59 +2440,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']; @@ -2504,10 +2508,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']; @@ -2529,19 +2533,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); @@ -2558,7 +2563,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)) { @@ -2578,14 +2583,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'); @@ -2596,37 +2600,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); - - } //--------------------------------------------------------------------------------------------------- @@ -2686,7 +2686,7 @@ class PolicyTransactionController extends BaseController ], 200); } } - + public function getClientPolicyDataBasedOnClientAndInsuer() { @@ -2697,14 +2697,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); @@ -2725,22 +2725,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") @@ -2748,13 +2748,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, @@ -2764,48 +2764,145 @@ 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); } + + public function sendInstallmentRemainderMail() + { + + $this->myLogger->logme("error", "Cron Job For Send Installment Remainder Mail Started"); + + try { + + try { + + $bdsInstallmentData = $this->BdsPlacementModel->getClientInstallmentDetails(); + + }catch (Exception $e) { + + $this->myLogger->logme('error', 'Exception: ' . $e->getMessage() . 'Page: ' . $e->getFile() . ' Line: ' . $e->getLine()); - -} \ No newline at end of file + } + $this->myLogger->logme("error", "Data for BDS Installment " . json_encode($bdsInstallmentData)); + // dd($bdsInstallmentData); + + if (empty($bdsInstallmentData)) { + + $this->myLogger->logme("error", "No Client Installment is Due in the 15th Day"); + + return false; + } + + foreach ($bdsInstallmentData as $installmentData) { + + $mailData = $this->PrepareBDSMailData($installmentData); + $to_mail = $mailData['to_mail']; + $message = $mailData['message']; + $subject = $mailData['subject']; + + $this->myLogger->logme("error", "Installment Pending for" . $subject); + + $common = ['mail_type' => 'installment_amount_due_remainder_mail']; + + $res = MailHelper::send_email(['mail' => $to_mail, 'subject' => $subject, 'message' => $message, 'common' => $common]); + + $res = json_decode($res); + $this->myLogger->logme('error', 'res: ' . json_encode($res)); + + if ($res->status == 'success') { + return true; + } else { + return false; + } + } + } catch (Exception $e) { + + $this->myLogger->logme('error', 'Exception: ' . $e->getMessage() . 'Page: ' . $e->getFile() . ' Line: ' . $e->getLine()); + } + } + + protected function PrepareBDSMailData($data) + { + + try { + + $installment_amount = $data['installment_amount']; + $payment_date = date('d-m-Y', strtotime($data['payment_date'])); + $client = $data['client_name']; + $branch = $data['branch_name']; + $sales_person_mail = $data['sales_person']; + $heads = $data['heads']; + $admins = $data['admins']; + $buisness_team = $data['buisness_team']; + $policy_no = $data['policy_no']; + $client_short_name = isset($data['short_name']) && $data['short_name'] != null ? $data['short_name'] : $data['client_name']; + + $subject = "Installment Amount Due For Client - {$client_short_name} - Policy NO({$policy_no}) is Due On - {$payment_date}"; + + $message = "Policy Installment for Client - {$client}, Branch - {$branch} is Due on {$payment_date} + with amount of {$installment_amount}.
+ Policy No : {$policy_no}"; + + + $to_mail = array_merge( + array_column($heads, 'email'), + array_column($admins, 'email'), + array_column($buisness_team, 'email'), + [$sales_person_mail] + ); + + $to_mail = array_unique($to_mail); + + $this->myLogger->logme("error", "Selected To Address : " . json_encode($to_mail)); + + // dd($to_mail); + return [ + 'to_mail' => $to_mail, + 'message' => $message, + 'subject' => $subject + ]; + + } catch (Exception $e) { + + $this->myLogger->logme('error', 'Exception: ' . $e->getMessage() . 'Page: ' . $e->getFile() . ' Line: ' . $e->getLine()); + } + } +} diff --git a/app/Controllers/TicketController.php b/app/Controllers/TicketController.php index 4b42394a..005bebc4 100644 --- a/app/Controllers/TicketController.php +++ b/app/Controllers/TicketController.php @@ -54,6 +54,8 @@ class TicketController extends BaseController public function __construct() { $this->myLogger = \Config\Services::mylogger(); + set_session_context('Ticket Master Controller'); + $this->ticketMasterModel = new TicketMasterModel(); @@ -123,6 +125,7 @@ class TicketController extends BaseController '((CLAIM_FEEDBACK_FORM))' => 'claim_feedback_form', '((SETTLED_LETTER))' => 'settle_letter', '((APPROVED_LETTER))' => 'approved_letter', + '((APPROVED_DESCRIBTION))' => 'approved_description', ]; $this->extraFields = [ 1 => ['non_id_reason'], @@ -132,13 +135,13 @@ class TicketController extends BaseController 5 => ['claim_number', 'registration_date'], 7 => ['query_received_date'], 8 => ['denial_reason','denial_date'], - 9 => ['approved_amount','approved_date', 'approved_letter'], + 9 => ['approved_amount','approved_date', 'approved_letter', "approved_description"], 11 => ['utr_details', 'settled_date', 'settle_letter'], - 40 => ['approved_amount','approved_date', 'approved_letter'], + 40 => ['approved_amount','approved_date', 'approved_letter', "approved_description"], 44 => ['utr_details', 'settled_date', 'settle_letter'], - 30 => ['approved_amount','approved_date', 'approved_letter'], + 30 => ['approved_amount','approved_date', 'approved_letter', "approved_description"], 34 => ['utr_details', 'settled_date', 'settle_letter'], - 20 => ['approved_amount','approved_date', 'approved_letter'], + 20 => ['approved_amount','approved_date', 'approved_letter', "approved_description"], 24 => ['utr_details', 'settled_date', 'settle_letter'], 14 => ['return_remark', 'awb_no_courier_name'], 48 => ['return_remark', 'awb_no_courier_name'], @@ -173,6 +176,9 @@ class TicketController extends BaseController public function ticketList() { $data['ticket_type'] = $this->ticketType; + $data['modeOFIntimate'] = $this->modeOFIntimate; + $data['priorityType'] = $this->priorityType; + $data['claimType'] = $this->claimType; if ($this->request->is('get')) { $data['page_name'] = "Claims"; $data['claim_status'] = $this->claimStatus->select('id,ticket_type,claim_status')->where('is_active', 1)->findAll(); @@ -181,49 +187,75 @@ 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)){ + $data['page_name'] = "Claims"; + if ($isFromDashboard == 1) { + + $data['ticket_data'] = $this->ticketSearch(3); + + }else if ($isFromDashboard == 2){ + $data['ticket_data'] = $this->ticketSearch(4); + + }else if ($isFromDashboard == 3){ + $data['ticket_data'] = $this->ticketSearch(2); + + }else if ($isFromDashboard == 4){ + $data['ticket_data'] = $this->ticketSearch(5); + + } + $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(); + // dd($data); + 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); + } + } } public function ticketSearch($action = null) - { + { $db = db_connect(); - $subquery = $db->table('ticket_history th') + $subquery = $db->table('ticket_master tm') ->select([ - 'th.ticket_id', + 'tm.id AS 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" + 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('ticket_master tm', 'tm.id = th.ticket_id', 'right') + ->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('th.ticket_id, tm.created_at'); + ->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, action 3 gets according to dashboard, action 4 gets according to ACM, action 5 tat if ($action == 1) { $query = $db->table('ticket_master tm') @@ -238,12 +270,63 @@ class TicketController extends BaseController 'tm.tpa_no', 'tm.emp_name', 'tm.emp_code', + 'tm.relationship', 'i.name AS insurer_name', 'c.client_name', 'tm.insured_name', 'c.short_name', 'DATE_FORMAT(tm.created_at, "%d-%m-%Y") AS ticket_created_date', - 'COALESCE(tat_category.tat, "0-6 Days") AS tat' + 'COALESCE(tat_category.tat, "0-6 Days") AS tat', + + 'tm.claim_status_id', + + '(SELECT first_name FROM user_profiles WHERE user_profiles.id = tm.acm_id) AS acm_name', + '(SELECT name FROM insurers WHERE insurers.id = tm.insurer_id) AS insurer_name', + '(SELECT name FROM tpa WHERE tpa.id = tm.tpa_id) AS tpa_name', + + 'tm.acm_id', + 'tm.insurer_id', + 'tm.tpa_id', + 'tm.client_policy_id', + + 'tm.policy_no', + 'tm.priority', + 'tm.relationship', + 'tm.emp_mobile', + 'tm.emp_mail', + 'tm.emp_personal_mail', + 'tm.mode_of_intimation', + 'tm.claim_type', + 'tm.hospital_name', + 'tm.doa', + 'tm.dod', + 'tm.claim_amount', + 'tm.pod_no', + 'tm.date_of_join', + 'tm.date_of_incep', + 'tm.dob', + 'tm.date_of_accident', + 'tm.date_of_death', + 'tm.date_of_intimat', + 'tm.si_amt', + 'tm.raised_date', + 'tm.registration_date', + 'tm.query_received_date', + 'tm.denial_date', + 'tm.approved_date', + 'tm.settled_date', + 'tm.denial_reason', + 'tm.approved_letter', + 'tm.approved_amount', + 'tm.utr_details', + 'tm.settle_letter', + 'tm.return_remark', + 'tm.cancel_remark', + 'tm.awb_no_courier_name', + 'tm.non_id_reason', + 'tm.pay_initiate_date', + 'tm.approved_description' + ]) ->join('insurers i', 'i.id = tm.insurer_id AND i.is_active = 1', 'left') ->join('clients c', 'c.id = tm.client_id AND c.is_active = 1', 'left') @@ -252,56 +335,142 @@ class TicketController extends BaseController ->where('tm.is_active', 1) ->orderBy('tm.id', 'DESC'); - $data = $query->get()->getResultArray(); + $data = $query->get()->getResultArray(); // dd(db_connect()->getLastQuery()); 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 if ($action == 4){ + $acm_id = $this->request->getPost('ids'); + + // dd($acm_id); + if (!empty($acm_id)) { + $where = "tm.acm_id = $acm_id"; + } else { + $where = '1 = 0'; // No valid IDs, return empty result + } + + }else if ($action == 5) { + $search_data = $this->request->getPost(); + $where = "tm.created_at >= '" . $search_data['from_date'] . "' AND tm.created_at <= '" . $search_data['to_date'] . "'" ."and ticket_type_id = ".$search_data['ticket_type_id']; } 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') - ->select([ - 'tm.id', - 'tm.ticket_type_id', - 'tcs.claim_status AS status', - 'tm.claim_number AS claim_no', - 'tm.claim_status_id', - 'tm.is_head_approved', - 'tm.tpa_id', - 'tm.tpa_no', - 'tm.emp_name', - 'tm.emp_code', - 'i.name AS insurer_name', - 'c.client_name', - 'tm.insured_name', - 'c.short_name', - 'DATE_FORMAT(tm.created_at, "%d-%m-%Y") AS ticket_created_date', - 'COALESCE(tat_category.tat, "0-6 Days") AS tat' - ]) - ->join('insurers i', 'i.id = tm.insurer_id AND i.is_active = 1', 'left') - ->join('clients c', 'c.id = tm.client_id AND c.is_active = 1', 'left') - ->join('ticket_claim_status tcs', 'tcs.id = tm.claim_status_id AND tcs.is_active = 1', 'left') - ->join("({$subquery->getCompiledSelect()}) tat_category", 'tm.id = tat_category.ticket_id', 'left') - ->where('tm.is_active', 1) - ->where($where) - ->orderBy('tm.id', 'DESC'); - $data = $query->get()->getResultArray(); - // print_rr($data); - // log_message('error',' Claims Master Data '.json_encode($data));die(); - // print_rr($data);die(); - - return $data; } + $query = $db->table('ticket_master tm') + ->select([ + 'tm.id', + 'tm.ticket_type_id', + 'tcs.claim_status AS status', + 'tm.claim_number AS claim_no', + 'tm.claim_status_id', + 'tm.is_head_approved', + 'tm.tpa_id', + 'tm.tpa_no', + 'tm.emp_name', + 'tm.emp_code', + 'tm.relationship', + 'i.name AS insurer_name', + 'c.client_name', + 'tm.insured_name', + 'c.short_name', + 'DATE_FORMAT(tm.created_at, "%d-%m-%Y") AS ticket_created_date', + 'COALESCE(tat_category.tat, "0-6 Days") AS tat', + + '(SELECT first_name FROM user_profiles WHERE user_profiles.id = tm.acm_id) AS acm_name', + '(SELECT name FROM insurers WHERE insurers.id = tm.insurer_id) AS insurer_name', + '(SELECT name FROM tpa WHERE tpa.id = tm.tpa_id) AS tpa_name', + + 'tm.claim_status_id', + 'tm.acm_id', + 'tm.insurer_id', + 'tm.tpa_id', + 'tm.client_policy_id', + 'tm.policy_no', + 'tm.priority', + 'tm.relationship', + 'tm.emp_mobile', + 'tm.emp_mail', + 'tm.emp_personal_mail', + 'tm.mode_of_intimation', + 'tm.claim_type', + 'tm.hospital_name', + 'tm.doa', + 'tm.dod', + 'tm.claim_amount', + 'tm.pod_no', + 'tm.date_of_join', + 'tm.date_of_incep', + 'tm.dob', + 'tm.date_of_accident', + 'tm.date_of_death', + 'tm.date_of_intimat', + 'tm.si_amt', + 'tm.raised_date', + 'tm.registration_date', + 'tm.query_received_date', + 'tm.denial_date', + 'tm.approved_date', + 'tm.settled_date', + 'tm.denial_reason', + 'tm.approved_letter', + 'tm.approved_amount', + 'tm.utr_details', + 'tm.settle_letter', + 'tm.return_remark', + 'tm.cancel_remark', + 'tm.awb_no_courier_name', + 'tm.non_id_reason', + 'tm.pay_initiate_date', + 'tm.approved_description' + + ]) + ->join('insurers i', 'i.id = tm.insurer_id AND i.is_active = 1', 'left') + ->join('clients c', 'c.id = tm.client_id AND c.is_active = 1', 'left') + ->join('ticket_claim_status tcs', 'tcs.id = tm.claim_status_id AND tcs.is_active = 1', 'left') + ->join("({$subquery->getCompiledSelect()}) tat_category", 'tm.id = tat_category.ticket_id', 'left') + ->where('tm.is_active', 1) + ->where($where) + ->orderBy('tm.id', 'DESC'); + + $data = $query->get()->getResultArray(); + // dd($db->getLastQuery()->getQuery()); + // dd($data); + if ($action == 5){ + + $tat = $this->request->getPost("tat_category"); + + $data = array_values(array_filter($data, function($dat) use ($tat) { + return $dat['tat'] == $tat; + })); + + } + // print_rr($data); + // log_message('error',' Claims Master Data '.json_encode($data));die(); + // print_rr($data);die(); + + return $data; } public function ticket_form($ticket_type) @@ -806,10 +975,27 @@ class TicketController extends BaseController } public function convertHtmlToText($html) + { + if(!empty($html)){ + $dom = new DOMDocument(); + @$dom->loadHTML($html); + return strip_tags($dom->saveHTML()); + }else{ + return ''; + } + } + + public function removeTicket() { - $dom = new DOMDocument(); - @$dom->loadHTML($html); - return strip_tags($dom->saveHTML()); + $ticket_id = $this->request->getGet('ticket_id'); + if(!empty($ticket_id)){ + $data['is_active'] = 0; + $this->ticketMasterModel->where('id', $ticket_id)->set($data)->update(); + return $this->respond(['status' => true, 'code' => 200, 'message' => 'Claim removed successfully'], 200); + }else{ + return $this->respond(['status' => false, 'code' => 404, 'message' => 'Failed to remove Claim'], 200); + } + } //---- Email Trigger Part---------------------------------------------------------------------------------------------- @@ -868,24 +1054,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; @@ -903,6 +1089,10 @@ class TicketController extends BaseController $this->myLogger->logme('error', "Replacing placeholders in content"); if (!empty($ticket_data) && !empty($content)) { + // print_rr($ticket_data);die(); + if (!isset($ticket_data['id'])) { $ticket_data['id'] = $ticket_data['ticket_master_id'];} + if (!isset($ticket_data['ticket_master_id'])) {$ticket_data['ticket_master_id'] = $ticket_data['id'];} + foreach ($this->placeHolders as $key => $value) { if ($value == "emp_code") { @@ -976,28 +1166,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' => [], @@ -1019,10 +1209,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 { @@ -1235,7 +1426,8 @@ class TicketController extends BaseController if ($received_data['report_type'] == "acc_manager_wise_status"){ $viewData['policy_type'] = $received_data['policy_type']; $viewData['account_manager_wise_data'] = $this->ticketMasterModel->accountManagerWiseReport($policy_type,$fromDate,$toDate); - // print_rr($viewData); + + // print_rr($viewData);die(); if ($policy_type == 1){ $viewData['column_order'] = [ 'ACM_NAME', 'ID NOT GENERATED', 'NON ID', 'CDA', 'INFORMATION REQUIRED', @@ -1253,6 +1445,7 @@ class TicketController extends BaseController $ordered_data[] = $temp; } $viewData['tpa_wise_data'] = $ordered_data; + // print_rr($viewData);die(); $html = view('claims_report_acc_manager_wise', $viewData); return $this->respond(['status' => true, 'html' => $html], 200); }else{ @@ -1271,6 +1464,7 @@ class TicketController extends BaseController $ordered_data[] = $temp; } $viewData['tpa_wise_data'] = $ordered_data; + // print_rr($viewData);die(); $html = view('claims_report_acc_manager_wise', $viewData); return $this->respond(['status' => true, 'html' => $html], 200); } @@ -1282,7 +1476,7 @@ class TicketController extends BaseController 'TPA_NAME', 'NON ID', 'ID NOT GENERATED', 'CDA', 'INFORMATION REQUIRED', 'UNDER PROCESS - CLAIM NO. UPDATION', 'UNDER PROCESS - QUERY DOCUMENT RECEIVED', 'APPROVED', 'PAYMENT INITIATED', - 'TOTAL', 'SETTLED', 'CLOSED', 'CANCELLED', 'RETURNED', 'CLEARED_TOTAL' + 'TOTAL', 'SETTLED', 'CLOSED', 'CANCELLED', 'RETURNED', 'CLEARED_TOTAL','TPA_ID' ]; // Reorder data based on column order @@ -1296,6 +1490,7 @@ class TicketController extends BaseController $ordered_data[] = $temp; } $viewData['tpa_wise_data'] = $ordered_data; + // print_r($ordered_data);die(); // $html = view('claims_report_tpa_wise', $viewData); $html = view('claims_report_tpa_wise',$viewData); @@ -1303,6 +1498,9 @@ class TicketController extends BaseController } else if ($received_data['report_type'] == 'tat_band_wise') { $viewData['data'] = $this->ticketMasterModel->getTATReport($policy_type, $fromDate, $toDate); + $viewData['policyType'] = $policy_type; + $viewData['fromDate'] = $fromDate; + $viewData['toDate'] = $toDate; $html = view('tat_report_band_wise_list', $viewData); return $this->respond(['status' => true, 'html' => $html], 200); } @@ -1533,7 +1731,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; @@ -1549,7 +1747,7 @@ class TicketController extends BaseController } else { $this->myLogger->logme('error', "Failed to send Mail :$ticket_id "); - return true; + return false; } } @@ -1634,4 +1832,85 @@ class TicketController extends BaseController $this->loadLayout("ticket_feedback_list",$data); } + public function getMoreInfo() { + $ticket_id = $this->request->getPost('ticket_id'); + $this->myLogger->logme("error", "Ticket ID : " . $ticket_id); + + $fields = $this->extraFields; + $data_to_send = []; + + // Get ticket data + $ticket_data = $this->ticketMasterModel->where("id", $ticket_id)->where("is_active", 1)->first(); + + // Query previous status + $ticket_previous_status = $this->ticketMasterModel + ->select("th.old_value, tcs.claim_status") + ->join("ticket_history th", "th.ticket_id = ticket_master.id AND th.field_name = 'claim_status_id' AND th.is_active = 1") + ->join("ticket_claim_status tcs", "tcs.id = th.old_value AND tcs.is_active = 1") + ->where("ticket_master.is_active", 1) + ->where("ticket_master.id", $ticket_id) + ->groupBy("th.old_value, tcs.claim_status") + ->get() + ->getResultArray(); + + // Loop through previous status and gather the required data + foreach ($ticket_previous_status as $status) { + $this->myLogger->logme("error", "Status : " . json_encode($status)); + + if (isset($fields[$status['old_value']])) { + $field = $fields[$status['old_value']]; + + // Ensure claim_status is a scalar value (string or int) + $claim_status = (string)$status['claim_status']; // Cast to string to avoid issues + + // Initialize claim_status if it doesn't exist in the array + if (!isset($data_to_send[$claim_status])) { + $data_to_send[$claim_status] = []; + } + + // Handle case where $field is an array + if (is_array($field)) { + foreach ($field as $f) { + // Check if the field exists in the ticket data + $data_to_send[$claim_status][$f] = isset($ticket_data[$f]) ? $ticket_data[$f] : null; + + // Check if the field contains a date and format it + if ($this->isDate($data_to_send[$claim_status][$f])) { + $data_to_send[$claim_status][$f] = date('d-m-Y', strtotime($data_to_send[$claim_status][$f])); + } + + $this->myLogger->logme("error", "Data for field {$f}: " . json_encode($data_to_send[$claim_status][$f])); + } + } else { + // If field is not an array, handle it as a single field + $data_to_send[$claim_status][$field] = isset($ticket_data[$field]) ? $ticket_data[$field] : null; + + // Check if the field contains a date and format it + if ($this->isDate($data_to_send[$claim_status][$field])) { + $data_to_send[$claim_status][$field] = date('d-m-Y', strtotime($data_to_send[$claim_status][$field])); + } + + $this->myLogger->logme("error", "Data for field {$field}: " . json_encode($data_to_send[$claim_status][$field])); + } + } + } + + $this->myLogger->logme('error', "Total data: " . json_encode($data_to_send)); + + // Send response based on data availability + if (!empty($data_to_send)) { + return $this->respond(['status' => true, 'data' => $data_to_send], 200); + } else { + return $this->respond(['status' => false], 200); + } + } + + private function isDate($value, $format = 'Y-m-d') { + // Check if the value is a valid date string (basic validation) + $date = \DateTime::createFromFormat($format, $value); + return $date && $date->format($format) === $value; + } + + + } 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 @@ + [ - '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..67ffc9b1 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 @@ -440,8 +440,20 @@ if (!function_exists('name_dup_check_within_family')) foreach ($family_data as $rkey => $row) { if(in_array($row[2],$temp)) - { - array_push($result,$row[0]); + { + // Kint::dump($row); + $emp_code = $row[1]; + $tempFam = null; + foreach ($family_data as $family) { + if ($family[1] == $emp_code &&!isset($family['temp'])) { + $tempFam = $family; + break; // Stop at the first match + } + } + // Kint::dump($tempFam); + // die(); + + array_push($result,$tempFam[0]); } else { @@ -449,7 +461,7 @@ if (!function_exists('name_dup_check_within_family')) } } - + // dd($result); return $result; } } @@ -519,7 +531,15 @@ if (!function_exists('name_and_empid_check_in_db')) } if(($current_action == 'inception' || $current_action == 'dependent_addition' || $current_action == 'addition' || $current_action == 'enrollment') && count($res)) { - array_push($result['i'],$row[0]); + $emp_code = $row[1]; + $tempFam = null; + foreach ($family_data as $family) { + if ($family[1] == $emp_code &&!isset($family['temp'])) { + $tempFam = $family; + break; // Stop at the first match + } + } + array_push($result['i'],$tempFam[0]); } } @@ -566,6 +586,15 @@ if (!function_exists('check_dependent_conflict')) $allowed_parents_count = $temp['either-parents-pil'] == 0 ? $temp['parents'] : 0; $allowed_parent_in_laws_count = $temp['either-parents-pil'] == 0 ? $temp['parents-in-law'] : 0; // dd($allowed_adults == 0); + $firstNonTemp = null; + + foreach ($family_data as $family) { + if (!isset($family['temp'])) { + $firstNonTemp = $family; + break; + } + } + // Kint::dump($firstNonTemp); foreach ($family_data as $key => $row) { // dd($family_data[0][0]); @@ -580,7 +609,7 @@ if (!function_exists('check_dependent_conflict')) if($relationship == 'self') { $self_gender = $row[4]; - $self_emp_row_id = $row[0]; + $self_emp_row_id = isset($row['temp']) ? null : $row[0]; } if($relationship == 'spouse') { @@ -612,8 +641,9 @@ if (!function_exists('check_dependent_conflict')) $repeated_count = array_intersect($repeated_relationships_count,$temp_counts); if(is_array($repeated_count) && count($repeated_count)) { + // Kint::dump($firstNonTemp);die(); $result['status'] = false; - $result['error_data'][] = ['code' => 13,'col_name' => 'relationship','msg' => 'Rule conflict: Twofold relationship found within family','row_id' => $family_data[0][0]]; + $result['error_data'][] = ['code' => 13,'col_name' => 'relationship','msg' => 'Rule conflict: Twofold relationship found within family','row_id' => $firstNonTemp[0]]; } } // print_r($repeated_count); @@ -630,26 +660,26 @@ if (!function_exists('check_dependent_conflict')) if($self_gender && $spouse_gender && $self_gender == $spouse_gender) { $result['status'] = false; - $result['error_data'][] = ['code' => 4,'col_name' => 'gender','msg' => 'Rule conflict: Self and Spouse cannot be same gender','row_id' => (isset($self_emp_row_id) ? $self_emp_row_id : $family_data[0][0])]; + $result['error_data'][] = ['code' => 4,'col_name' => 'gender','msg' => 'Rule conflict: Self and Spouse cannot be same gender','row_id' => (isset($self_emp_row_id) ? $self_emp_row_id : $firstNonTemp[0])]; } } if(($allowed_spouse_count < $received_spouse_count) || ($allowed_child_count < $received_child_count) ) { $result['status'] = false; - $result['error_data'][] = ['code' => 12,'col_name' => 'sno','msg' => 'Rule conflict: As per policy, count of dependents has exceeded configured count','row_id' => (isset($self_emp_row_id) ? $self_emp_row_id : $family_data[0][0])];//dependent count mismatch + $result['error_data'][] = ['code' => 12,'col_name' => 'sno','msg' => 'Rule conflict: As per policy, count of dependents has exceeded configured count','row_id' => (isset($self_emp_row_id) ? $self_emp_row_id : $firstNonTemp[0])];//dependent count mismatch } // || ($allowed_parents_count < $received_parents_count) || ($allowed_parent_in_laws_count < $received_parent_in_laws_count) if($allowed_adults == 1 && $received_parents_count && $received_parent_in_laws_count ) { $result['status'] = false; - $result['error_data'][] = ['code' => 12,'col_name' => 'sno','msg' => 'Rule conflict: Parents and Parents in law both not allowed','row_id' => (isset($self_emp_row_id) ? $self_emp_row_id : $family_data[0][0])]; + $result['error_data'][] = ['code' => 12,'col_name' => 'sno','msg' => 'Rule conflict: Parents and Parents in law both not allowed','row_id' => (isset($self_emp_row_id) ? $self_emp_row_id : $firstNonTemp[0])]; if((2 < $received_parents_count) || (2 < $received_parent_in_laws_count)) { $result['status'] = false; - $result['error_data'][] = ['code' => 12,'col_name' => 'sno','msg' => 'Rule conflict: As per policy, count of dependents has exceeded configured count','row_id' => (isset($self_emp_row_id) ? $self_emp_row_id : $family_data[0][0])];//dependent count mismatch + $result['error_data'][] = ['code' => 12,'col_name' => 'sno','msg' => 'Rule conflict: As per policy, count of dependents has exceeded configured count','row_id' => (isset($self_emp_row_id) ? $self_emp_row_id : $firstNonTemp[0])];//dependent count mismatch } } //check for any cross parents but not more than two @@ -657,7 +687,7 @@ if (!function_exists('check_dependent_conflict')) { // dd($allowed_adults); $result['status'] = false; - $result['error_data'][] = ['code' => 12,'col_name' => 'sno','msg' => 'Rule conflict:As per policy, count of dependents has exceeded configured count','row_id' => (isset($self_emp_row_id) ? $self_emp_row_id : $family_data[0][0])];//dependent count mismatch + $result['error_data'][] = ['code' => 12,'col_name' => 'sno','msg' => 'Rule conflict:As per policy, count of dependents has exceeded configured count','row_id' => (isset($self_emp_row_id) ? $self_emp_row_id : $firstNonTemp[0])];//dependent count mismatch } @@ -1132,7 +1162,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 +2149,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 +2167,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; @@ -2180,12 +2210,14 @@ if (!function_exists('generate_family_floater_key')) { $relation = 'parent'; } else if (strtolower(trim($relationship)) === 'son' || strtolower(trim($relationship)) === 'daughter') { $relation = 'child'; - } else if (strtolower(trim($relationship)) === 'father in Law' || strtolower(trim($relationship)) === 'mother in Law') { + }else if((strtolower(trim($relationship)) === 'father in Law' || strtolower(trim($relationship)) === 'mother in Law') || (strtolower(trim($relationship)) === 'father-in-Law' || strtolower(trim($relationship)) === 'mother-in-Law')){ $relation = 'parent_in_law'; } else if (strtolower(trim($relationship)) === 'spouse') { $relation = 'spouse'; - } else { + } else if(strtolower(trim($relationship)) === 'self'){ $relation = 'self'; + }else{ + $relation = ''; } return $relation; diff --git a/app/Helpers/utility_helper.php b/app/Helpers/utility_helper.php index 33f504c0..0d4529c3 100755 --- a/app/Helpers/utility_helper.php +++ b/app/Helpers/utility_helper.php @@ -55,8 +55,8 @@ if (!function_exists('file_Upload')) { function file_Upload($fileToUpload, $filepath) { if ($fileToUpload !== null && $fileToUpload->isValid() && !$fileToUpload->hasMoved()) { + $fileToUpload->move($filepath); $fileName = $fileToUpload->getName(); - $fileToUpload->move($filepath, $fileName); return $fileName; } else { return ""; diff --git a/app/Models/BdsPlacementModel.php b/app/Models/BdsPlacementModel.php new file mode 100644 index 00000000..2cd7c6f4 --- /dev/null +++ b/app/Models/BdsPlacementModel.php @@ -0,0 +1,93 @@ +db->table("bds_installment_payment_details bipd") + ->select("bipd.*, ct.client_name,ct.short_name, cb.branch_name, leads.salse_person_id,cp.policy_no") + ->join("policy_transaction pt", "pt.id = bipd.pt_id") + ->join("clients ct", "ct.id = pt.client_id") + ->join("client_branch cb", "cb.id = pt.client_branch_id") + ->join("leads", "leads.id = bipd.lead_id") + ->join("client_policy cp","cp.id = pt.client_policy_id") + ->where("bipd.is_active", 1) + ->where("bipd.payment_date", date('Y-m-d', strtotime('+15 days'))); + + $data = $builder->get()->getResultArray(); + + // Loop through to extract sales person details + foreach ($data as &$row) { + $sales_person_ids = json_decode($row['salse_person_id'], true); + $sales_person_id = $sales_person_ids[0] ?? null; + + if ($sales_person_id) { + $user = $this->db->table('user_profiles') + ->select('email') // or whatever field + ->where('id', $sales_person_id) + ->get() + ->getRowArray(); + + $row['sales_person'] = $user['email'] ?? 'N/A'; + } else { + $row['sales_person'] = 'Not Assigned'; + } + + $head = $this->db->table('user_profiles') + ->select('email') // or whatever field + ->where('role', 5) + ->where('is_active',1) + ->get() + ->getResultArray(); + + + $row['heads'] = $head; + + $admin = $this->db->table('user_profiles') + ->select('email') + ->where("is_active",1) + ->where("role",1) + ->get() + ->getResultArray(); + + $row['admins'] = $admin; + + $buisenessTeam = $this->db->table("user_teams ut") + ->select("up.email") + ->join('user_profiles up','up.id = ut.user_id and up.is_active = 1') + ->where("ut.team_id",7) + ->where("ut.is_active",1) + ->get() + ->getResultArray(); + + $row['buisness_team'] = $buisenessTeam; + + + } + + + return $data; + } +} 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/EmployeePolicyModel.php b/app/Models/EmployeePolicyModel.php index 175be311..7f6310af 100755 --- a/app/Models/EmployeePolicyModel.php +++ b/app/Models/EmployeePolicyModel.php @@ -594,7 +594,7 @@ class EmployeePolicyModel extends Model } - public function getSIEnhancementEmployeesDataForExportExcel($ref_data) + public function getSIEnhancementEmployeesDataForExportExcel($ref_data, $return_type = 0) { $client_id = $ref_data['client_id']; @@ -732,7 +732,14 @@ class EmployeePolicyModel extends Model // Get the result set $results = $query->getResult(); - // dd($this->db->getLastQuery(), $results); + + if($return_type == 1){ + $results = $query->getResultArray(); + }else{ + $results = $query->getResult(); + } + + // dd($this->db->getLastQuery()); return $results; } @@ -1528,73 +1535,120 @@ class EmployeePolicyModel extends Model } - public function bulkUpdateForEndorsement($endorsement_details) + // public function bulkUpdateForEndorsement($endorsement_details) + // { + // // dd($endorsement_details, '---'); + // // Extract IDs, endorsement_ids, and statuses + // $ids = array_column($endorsement_details, 'group_key'); + // $endorsement_ids = array_column($endorsement_details, 'endorsement_id'); + // $statuses = array_column($endorsement_details, 'status'); + + // // Escape values for SQL + // $escapedIds = array_map([$this->db, 'escape'], $ids); + // $escapedEndorsementIds = array_map([$this->db, 'escape'], $endorsement_ids); + // $escapedStatuses = array_map([$this->db, 'escape'], $statuses); + + // // Construct the CASE statements + // $caseEndorsementId = array_map(function ($id, $endorsement_id) { + // return "WHEN group_key = $id THEN $endorsement_id"; + // }, $escapedIds, $escapedEndorsementIds); + + // // $caseStatus = array_map(function ($id, $status) { + // // return "WHEN status = $id THEN $status"; + // // }, $escapedIds, $escapedStatuses); + + // // Convert cases to a string + // $caseEndorsementIdString = implode(' ', $caseEndorsementId); + // // $caseStatusString = implode(' ', $caseStatus); + + // // Convert ids to a string + // $idsString = implode(', ', $escapedIds); + + // // Construct the SQL query + // $sql = " + // UPDATE emp_endorsement + // SET + // endorsement_id = CASE {$caseEndorsementIdString} END, + // status = 'complete' + // WHERE group_key IN ({$idsString}) + // "; + + + // // dd($sql); + // // Begin a transaction + // $this->db->transBegin(); + + // try { + // // Start the transaction + // $this->db->transBegin(); + + // // Execute the query + // $this->db->query($sql); + + // // Check transaction status + // if ($this->db->transStatus() === false) { + // $error = $this->db->error(); // Get the last database error + // $this->db->transRollback(); + + // // Optionally log the error + // log_message('error', 'Bulk update failed. Error: ' . json_encode($error)); + + // throw new \Exception('Bulk update failed. Error: ' . $error['message']); + // } + + // // Commit if everything is fine + // $this->db->transCommit(); + + // return $this->db->getLastQuery(); // Optional: return last executed query for debugging + // } catch (\Exception $e) { + // $this->db->transRollback(); + + // // Optionally log the exception + // log_message('error', 'Exception during bulk update: ' . $e->getMessage()); + + // // Re-throw with detailed context + // throw new \RuntimeException('Exception during bulk update: ' . $e->getMessage(), $e->getCode(), $e); + // } + + // } + + public function bulkUpdateForEndorsement(array $endorsement_details) { - - // Extract IDs, endorsement_ids, and statuses - $ids = array_column($endorsement_details, 'group_key'); - $endorsement_ids = array_column($endorsement_details, 'endorsement_id'); - $statuses = array_column($endorsement_details, 'status'); - - // Escape values for SQL - $escapedIds = array_map([$this->db, 'escape'], $ids); - $escapedEndorsementIds = array_map([$this->db, 'escape'], $endorsement_ids); - $escapedStatuses = array_map([$this->db, 'escape'], $statuses); - - // Construct the CASE statements - $caseEndorsementId = array_map(function ($id, $endorsement_id) { - return "WHEN group_key = $id THEN $endorsement_id"; - }, $escapedIds, $escapedEndorsementIds); - - // $caseStatus = array_map(function ($id, $status) { - // return "WHEN status = $id THEN $status"; - // }, $escapedIds, $escapedStatuses); - - // Convert cases to a string - $caseEndorsementIdString = implode(' ', $caseEndorsementId); - // $caseStatusString = implode(' ', $caseStatus); - - // Convert ids to a string - $idsString = implode(', ', $escapedIds); - - // Construct the SQL query + if (empty($endorsement_details)) { + throw new \InvalidArgumentException("No endorsement details provided."); + } + + $caseParts = []; + $groupKeys = []; + + foreach ($endorsement_details as $row) { + $groupKey = $this->db->escape($row['group_key']); + $endorsementId = $this->db->escape($row['endorsement_id']); + $caseParts[] = "WHEN group_key = {$groupKey} THEN {$endorsementId}"; + $groupKeys[] = $groupKey; + } + $sql = " UPDATE emp_endorsement SET - endorsement_id = CASE {$caseEndorsementIdString} END, + endorsement_id = CASE " . implode(' ', $caseParts) . " END, status = 'complete' - WHERE group_key IN ({$idsString}) + WHERE group_key IN (" . implode(', ', $groupKeys) . ") "; - - - // dd($sql); - // Begin a transaction - $this->db->transBegin(); - - try { - // Execute the query - $this->db->query($sql); - - // Commit the transaction - if ($this->db->transStatus() === FALSE) { - // If something went wrong, rollback - $this->db->transRollback(); - throw new \Exception('Bulk update failed.'); - } else { - // Otherwise, commit - $this->db->transCommit(); - } - // $this->storeEndorsementNumber($file_id, $endorsement_id, $enrollment_file_id); - - return $this->db->getLastQuery(); - } catch (\Exception $e) { - // Rollback the transaction on error - $this->db->transRollback(); - throw $e; + + $this->db->query($sql); + + // Check if query was successful + if ($this->db->affectedRows() === 0) { + throw new \RuntimeException('No rows were updated.'); } + + return true; } + + public function bulkUpdateForCorrection($emp_details){ foreach ($emp_details as $employee) { diff --git a/app/Models/LeadInstallmentPaymentDetails.php b/app/Models/LeadInstallmentPaymentDetails.php new file mode 100644 index 00000000..53657d03 --- /dev/null +++ b/app/Models/LeadInstallmentPaymentDetails.php @@ -0,0 +1,54 @@ +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 +171,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 +186,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 b43669b2..ec355e34 100644 --- a/app/Models/PolicyTransactionModel.php +++ b/app/Models/PolicyTransactionModel.php @@ -81,7 +81,7 @@ class PolicyTransactionModel extends Model 'policy_with_corr', 'is_cd_reduce_from_bds', ]; - + // Callbacks @@ -98,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(); } @@ -109,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(); } @@ -267,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); } @@ -289,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(); } @@ -446,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, @@ -511,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') { @@ -547,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); // } @@ -555,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); // } @@ -565,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); // } @@ -578,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); @@ -589,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 . "' "; } @@ -782,7 +781,7 @@ 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 ( @@ -797,16 +796,18 @@ class PolicyTransactionModel extends Model $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){ @@ -823,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); } @@ -841,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); } @@ -851,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')); + $fromDate = date('Y-m-d', strtotime('-60 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'); @@ -875,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); @@ -917,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); // } @@ -925,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); // } @@ -945,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(); @@ -960,7 +962,7 @@ class PolicyTransactionModel extends Model // 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) + 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, $where = null) { $builder = $this->db->table('policy_transaction') ->select(' @@ -1003,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 @@ -1024,12 +1026,16 @@ class PolicyTransactionModel extends Model } // Default to Last 30 Days if No Filters Are Applied - if (empty($client_id) && empty($insurer_id) && empty($policy_type_id) && empty($date_type) && empty($issuer)) { - $fromDate = date('Y-m-d', strtotime('-30 days')); + if (empty($client_id) && empty($insurer_id) && empty($policy_type_id) && empty($date_type) && empty($issuer) && empty($where)) { + $fromDate = date('Y-m-d', strtotime('-60 days')); $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); + } + + if (!empty($where)) { + $builder->whereIn('policy_transaction.id', $where); } // Optimize Query Execution @@ -1038,7 +1044,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); @@ -1055,7 +1061,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) @@ -1073,20 +1079,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); } @@ -1094,15 +1100,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); } @@ -1110,16 +1116,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(); @@ -1235,14 +1240,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) { @@ -1279,7 +1284,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); } @@ -1296,6 +1301,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', @@ -1319,9 +1325,21 @@ 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 is not null", null, false) + ->whereNotIn("policy_transaction.status", ['completed']) // ->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) { @@ -1360,12 +1378,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, @@ -1388,12 +1415,22 @@ 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') + ->where("policy_transaction.status is not null", null, false) + ->whereNotIn("policy_transaction.status", ['completed']); if ($start_date != 0 && $end_date != 0 && $date_type != 0) { @@ -1489,55 +1526,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, @@ -1553,32 +1590,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(); } @@ -1588,12 +1625,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.*, @@ -1618,7 +1655,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); @@ -1629,7 +1666,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 @@ -1637,6 +1674,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..b85dad62 100644 --- a/app/Models/TicketMasterModel.php +++ b/app/Models/TicketMasterModel.php @@ -74,11 +74,13 @@ class TicketMasterModel extends Model 'head_rejection_reason', 'pay_initiate_date', 'emp_personal_mail', - 'client_policy_id' - - ]; - - + 'client_policy_id', + + 'approved_description' + + ]; + + // Callbacks protected $allowCallbacks = true; protected $beforeInsert = ["checkAndADDCreatedByValue"]; @@ -93,7 +95,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 +106,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 +132,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 +175,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 +212,7 @@ class TicketMasterModel extends Model // "; // $statusResult = $this->db->query($statusQuery)->getResultArray(); // // dd($statusResult); - + // // Initialize dynamic query parts // $dynamicSelect = ''; @@ -248,12 +250,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 +319,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,167 +331,249 @@ 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'); + + // if (!empty($start_date) && !empty($end_date)) { + // $fromDate = change_date_format($start_date); + // $toDate = change_date_format($end_date); + // } + // $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"; + // } + + // // Fetch claim statuses from the `ticket_claim_status` table + // $statusQuery = " SELECT + // id, claim_status, ticket_type + // FROM ticket_claim_status + // Where is_active = 1 + // $ticket_type_data_1 + // "; + // $statusResult = $this->db->query($statusQuery)->getResultArray(); + // // dd($statusResult); + + // // Initialize dynamic query parts + // $dynamicSelect = ''; + + // // Loop through each claim status and generate the COALESCE and CASE statements for the SELECT + // foreach ($statusResult as $status) { + + // $columnName = $status['claim_status']; // Default column name + + // if (empty($ticket_type)) { + // // Append the insurance type prefix based on `ticket_type` + // switch ($status['ticket_type']) { + // case 1: + // $columnName = "GMC - {$status['claim_status']}"; + // break; + // case 2: + // $columnName = "GPA - {$status['claim_status']}"; + // break; + // case 3: + // $columnName = "EDLI - {$status['claim_status']}"; + // break; + // case 4: + // $columnName = "GTLI - {$status['claim_status']}"; + // break; + // } + // } + + // $dynamicSelect .= " + // COALESCE( + // SUM( + // CASE + // WHEN subquery.status_id = {$status['id']} THEN 1 + // ELSE 0 + // END + // ), + // 0 + // ) AS `$columnName`, "; + // } + + // // Remove the trailing comma from the SELECT part + // $dynamicSelect = rtrim($dynamicSelect, ', '); + // // dd($dynamicSelect); + + + // // Construct the full SQL query + // $sql = " + // SELECT + // tc.TAT_Category, + // $dynamicSelect + // FROM + // ( + // SELECT 'Above 20 Days' AS TAT_Category + // UNION ALL + // SELECT '13-20 Days' + // UNION ALL + // SELECT '7-12 Days' + // UNION ALL + // SELECT '0-6 Days' + // ) AS tc + // LEFT JOIN ( + // SELECT + // tm.id AS ticket_id, + // latest_status.claim_status_id AS status_id, + // CASE + // WHEN DATEDIFF(CURDATE(), COALESCE(latest_status.change_date, tm.created_at)) BETWEEN 0 AND 6 THEN '0-6 Days' + // WHEN DATEDIFF(CURDATE(), COALESCE(latest_status.change_date, tm.created_at)) BETWEEN 7 AND 12 THEN '7-12 Days' + // WHEN DATEDIFF(CURDATE(), COALESCE(latest_status.change_date, tm.created_at)) BETWEEN 13 AND 20 THEN '13-20 Days' + // ELSE 'Above 20 Days' + // END AS TAT_Category + // FROM + // ticket_master tm + // LEFT JOIN ( + // SELECT + // th.ticket_id, + // th.new_value AS claim_status_id, + // MAX(th.created_at) AS change_date + // FROM + // ticket_history th + // WHERE + // th.field_name = 'claim_status_id' + // AND th.is_active = 1 + // GROUP BY + // th.ticket_id, th.new_value + // ) AS latest_status ON latest_status.ticket_id = tm.id + // WHERE tm.is_active = 1 + // AND tm.created_at >= '$fromDate' + // AND tm.created_at <= '$toDate' + // " . (!empty($ticket_type) ? " AND tm.ticket_type_id = $ticket_type" : "") . " + // GROUP BY tm.id, latest_status.claim_status_id, latest_status.change_date, tm.created_at + // ) AS subquery ON tc.TAT_Category = subquery.TAT_Category + // GROUP BY + // tc.TAT_Category + // 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(); + // // dd($data); + // print_rr($data);die(); + // // print_rr($this->db->getLastQuery()->getQuery()); die; + + // return $data; + // } public function getTATReport($ticket_type = null, $start_date = null, $end_date = null) - { - //set default last 3 months data date + { + // Set default date range (last 90 days) $fromDate = date('Y-m-d', strtotime('-90 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); } - $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"; - } - - // Fetch claim statuses from the `ticket_claim_status` table - $statusQuery = " SELECT - id, claim_status, ticket_type - FROM ticket_claim_status - Where is_active = 1 - $ticket_type_data_1 - "; - $statusResult = $this->db->query($statusQuery)->getResultArray(); - // dd($statusResult); - // Initialize dynamic query parts - $dynamicSelect = ''; - - // Loop through each claim status and generate the COALESCE and CASE statements for the SELECT - foreach ($statusResult as $status) { - - $columnName = $status['claim_status']; // Default column name - - if (empty($ticket_type)) { - // Append the insurance type prefix based on `ticket_type` - switch ($status['ticket_type']) { - case 1: - $columnName = "GMC - {$status['claim_status']}"; - break; - case 2: - $columnName = "GPA - {$status['claim_status']}"; - break; - case 3: - $columnName = "EDLI - {$status['claim_status']}"; - break; - case 4: - $columnName = "GTLI - {$status['claim_status']}"; - break; + // Get all active claim statuses + $statusQuery = $this->db->table('ticket_claim_status') + ->select('id, claim_status') + ->where('is_active', 1) + ->orderBy('id', 'ASC'); + + if (!empty($ticket_type)) { + $statusQuery->where('ticket_type', $ticket_type); + } + + $statusResult = $statusQuery->get()->getResultArray(); + + // Create a list of all TAT categories we want in the output + $tatCategories = [ + 'Above 20 Days', + '13-20 Days', + '7-12 Days', + '0-6 Days' + ]; + + // Initialize the result array with all TAT categories + $result = []; + foreach ($tatCategories as $category) { + $row = ['TAT_Category' => $category]; + foreach ($statusResult as $status) { + $row[$status['claim_status']] = 0; + } + $result[] = $row; + } + + // Get the base query for ticket counts by status and TAT category + $query = $this->db->table('ticket_master tm') + ->select([ + 'tcs.claim_status', + 'CASE + WHEN DATEDIFF(CURDATE(), COALESCE( + (SELECT MAX(th.created_at) + FROM ticket_history th + WHERE th.ticket_id = tm.id + AND th.field_name = "claim_status_id" + AND th.is_active = 1), + tm.created_at + )) BETWEEN 0 AND 6 THEN "0-6 Days" + WHEN DATEDIFF(CURDATE(), COALESCE( + (SELECT MAX(th.created_at) + FROM ticket_history th + WHERE th.ticket_id = tm.id + AND th.field_name = "claim_status_id" + AND th.is_active = 1), + tm.created_at + )) BETWEEN 7 AND 12 THEN "7-12 Days" + WHEN DATEDIFF(CURDATE(), COALESCE( + (SELECT MAX(th.created_at) + FROM ticket_history th + WHERE th.ticket_id = tm.id + AND th.field_name = "claim_status_id" + AND th.is_active = 1), + tm.created_at + )) BETWEEN 13 AND 20 THEN "13-20 Days" + ELSE "Above 20 Days" + END AS tat_category', + 'COUNT(*) AS count' + ]) + ->join('ticket_claim_status tcs', 'tcs.id = tm.claim_status_id AND tcs.is_active = 1') + ->where('tm.is_active', 1) + ->where('tm.created_at >=', $fromDate) + ->where('tm.created_at <=', $toDate) + ->groupBy('tcs.claim_status, tat_category') + ->orderBy('FIELD(tat_category, "Above 20 Days", "13-20 Days", "7-12 Days", "0-6 Days")'); + + if (!empty($ticket_type)) { + $query->where('tm.ticket_type_id', $ticket_type); + } + + $countResults = $query->get()->getResultArray(); + + // Populate the result array with actual counts + foreach ($countResults as $row) { + foreach ($result as &$categoryRow) { + if ($categoryRow['TAT_Category'] === $row['tat_category']) { + $categoryRow[$row['claim_status']] = (int)$row['count']; + break; } } - - $dynamicSelect .= " - COALESCE( - SUM( - CASE - WHEN subquery.status_id = {$status['id']} THEN 1 - ELSE 0 - END - ), - 0 - ) AS `$columnName`, "; } - // Remove the trailing comma from the SELECT part - $dynamicSelect = rtrim($dynamicSelect, ', '); - // dd($dynamicSelect); - - - // Construct the full SQL query - $sql = " - SELECT - tc.TAT_Category, - $dynamicSelect - FROM - ( - SELECT 'Above 20 Days' AS TAT_Category - UNION ALL - SELECT '13-20 Days' - UNION ALL - SELECT '7-12 Days' - UNION ALL - SELECT '0-6 Days' - ) AS tc - LEFT JOIN ( - - SELECT - th.ticket_id, - tcs.claim_status, - tcs.id AS status_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_Category - - FROM - ticket_master tm - JOIN ticket_history th ON tm.id = th.ticket_id - JOIN ticket_claim_status tcs ON th.field_name = 'claim_status_id' AND th.new_value = tcs.id - $ticket_type_data_2 - AND tm.created_at >= '$fromDate' - AND tm.created_at <= '$toDate' - AND tm.is_active = 1 - AND th.is_active = 1 - AND tcs.is_active = 1 - - ) AS subquery ON tc.TAT_Category = subquery.TAT_Category - GROUP BY - tc.TAT_Category - 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; - - // $tableData = []; - // if (!empty($data)) { - // // Extract table headers from the first row keys - // $headers = array_keys($data[0]); - // $tableData['headers'] = $headers; - // $tableData['body'] = $data; - // } - - return $data; + return $result; } - 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 +595,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 @@ -532,6 +625,7 @@ class TicketMasterModel extends Model // Construct the final SQL query $sql = " SELECT + tpa.id as TPA_ID, tpa.name AS TPA_NAME, $dynamicSelect, ($dynamicTotal) AS TOTAL, @@ -553,48 +647,49 @@ 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.id as ACM_ID, user_profiles.first_name AS ACM_NAME, $dynamicSelect, ($dynamicTotal) AS TOTAL @@ -611,47 +706,51 @@ class TicketMasterModel extends Model "; $result = $this->db->query($sql)->getResultArray(); - // 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, ' +'); @@ -660,6 +759,7 @@ class TicketMasterModel extends Model // Construct the final SQL query $sql = " SELECT + user_profiles.id as ACM_ID, user_profiles.first_name AS ACM_NAME, $dynamicSelect, ($dynamicTotal) AS TOTAL, @@ -675,12 +775,13 @@ 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 +806,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..08e08855 100755 --- a/app/Views/DashBoard.php +++ b/app/Views/DashBoard.php @@ -173,7 +173,7 @@ - +
@@ -217,18 +217,53 @@ + + + + + + + + + +
+ + + + + + + + + + + - - -
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{
- -