diff --git a/app/Config/Routes.php b/app/Config/Routes.php index 83992845..5065832a 100755 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -6,6 +6,9 @@ use CodeIgniter\Router\RouteCollection; /** * @var RouteCollection $routes */ +$routes->post('/chat', 'ChatbotControllerNew::index'); +$routes->get('/widget', 'ChatbotControllerNew::widget'); +$routes->get('/chatbot', 'ChatbotControllerNew::chatbot'); $routes->get('/swagger', 'SwaggerController::index', ['filter' => 'authMVC']); @@ -14,6 +17,7 @@ $routes->get('/swagger', 'SwaggerController::index', ['filter' => 'authMVC']); $routes->get("reminder_mail", "NotificationController::reminder_mail"); $routes->get("getClientData", "ClientController::getClientData"); $routes->get("testing_for_review_mail/(:any)", "ClientController::testingForReviewMail/$1"); +$routes->get("sendMemberReviewConfirmationMail/(:any)", "ClientController::sendMemberReviewConfirmationMail/$1"); $routes->get("update-policy-terms-for-corrections", "ClientController::updatePolicyTermsForCorrections"); $routes->get("update_rack_rate_json", "ClientController::updateRackRateJson"); $routes->get("updatajson", "EmpDataServiceController::updatajson"); @@ -335,6 +339,9 @@ $routes->group("/util", ["filter" => "authMVC"], function ($routes) { $routes->post('get_data_for_mapping', 'EmployeeController::getDataForMapping'); $routes->post('unmap_employees/(:num)', 'EmployeeController::unmapEmployees/$1'); $routes->get('transformMailContent', 'LeadsController::transformMailContent'); + $routes->get('getCDAmount', 'ClientController::getCDAmount'); + $routes->get('getTheEmpDataForClaim/(:any)', 'ClientController::getTheEmpDataForClaim/$1'); + $routes->get('getTheEmpDataForClaimSearchByMobile/(:any)', 'ClientController::getTheEmpDataForClaimSearchByMobile/$1'); }); $routes->group("policy_tranction", ["filter" => "authMVC"], function ($routes) { @@ -372,6 +379,7 @@ $routes->group("policy_tranction", ["filter" => "authMVC"], function ($routes) { $routes->get("getFileErr/(:any)", "PolicyTransactionController::getFileErr/$1"); $routes->get("getInsurerStatementMonth", "PolicyTransactionController::getInsurerStatementMonth"); $routes->get("deleteStatement/(:any)", "PolicyTransactionController::deleteStatement/$1"); + //$routes->post('failedStatement',"PolicyTransactionController::failedStatementList"); }); }); @@ -404,6 +412,7 @@ $routes->get('cli/sendZeptoMail', 'MasterController::testZeptoSMTP'); $routes->cli('cli/processjob', 'JobWorker::processJob'); $routes->cli('cli/processjobs', 'JobWorker::processJobs'); +$routes->cli('cli/sendMailWithAutoQuery','TicketController::sendMailWithAutoQuery'); $routes->get("processjob", "JobWorker::processJob"); $routes->cli('cli/new_gmail_token', 'MasterController::generateNewGmailAPIToken'); @@ -413,6 +422,10 @@ $routes->cli('cli/check_bounce_mail_cli', 'MasterController::testCheckBounceMail $routes->cli('cli/app_check_list', 'MasterController::appCheckList'); $routes->cli('cli/new_gdrive_token', 'GoogleDriveController::generateNewGoogleDriveAccessToken'); +//crone job +$routes->cli('cli/enrollOpendAndClose', 'DashboardController::updatePolicyEnrollmentStatus'); +$routes->cli("cli/sendCroneRemainderMail", "DashboardController::sendCroneRemainderMail"); + //Employee login api's $routes->post("/employeeRest/verifyEmployeeNumber", "RestAuthenticationController::verifyEmployeeWithMobileNumber"); $routes->post("/employeeRest/getVerifiedUserData", "RestAuthenticationController::getVerifiedUserData"); @@ -424,11 +437,17 @@ $routes->post("/employeeRest/verifyEmployeeEmailId", "RestAuthenticationControll $routes->post("/employeeRest/verifyHrWithMobileNumber", "RestAuthenticationController::verifyHrWithMobileNumber"); $routes->post("/employeeRest/getVerifiedHrData", "RestAuthenticationController::getVerifiedHrData"); +// Test initiate Claim +$routes->post('initiateClaim',"EmployeeRestController::initiateClaim"); + $routes->group("/api", ["filter" => "authJWT"], function ($routes) { $routes->post("logined", "RestAuthenticationController::logined"); $routes->post("getId", "RestAuthenticationController::getUserIdFromToken"); + $routes->post('initiateClaim',"EmployeeRestController::initiateClaim"); + }); -// $routes->get("getEmployeePolicy", "EmployeeRestController::getEmployeePolicy"); +$routes->get("getEmployeePolicy", "EmployeeRestController::getEmployeePolicy"); +$routes->get("getAddOnPolicy", "EmployeeRestController::getAddOnPolicy"); $routes->group("employeeRest", ["filter" => "authJWT"], function ($routes) { $routes->post("getVerifiedUserData", "RestAuthenticationController::getVerifiedUserData"); @@ -468,6 +487,7 @@ $routes->group("employeeRest", ["filter" => "authJWT"], function ($routes) { $routes->get("getEmployeeActiveOrInactivePolicy", "EmployeeRestController::getEmployeeActiveOrInactivePolicy"); $routes->get("getFEContent", "EmployeeRestController::getFEContent"); $routes->get("getAdvertisementImage", "EmployeeRestController::getAdvertisementImage"); + // $routes->post('postDataForTicket',"EmployeeRestController::postDataForTicket"); }); $routes->get("getEmployeeActiveOrInactivePolicy", "EmployeeRestController::getEmployeeActiveOrInactivePolicy"); $routes->get("sendPushNotification", "EmployeeRestController::sendPushNotification"); @@ -478,3 +498,29 @@ $routes->get("getBackToEnrolledDetails", "EmployeeRestController::getBackToEnrol // Ticketing System // Ticketing System End's + + +//BDSReports +$routes->group("/bdsReport", ["filter" => "authMVC"], function ($routes) { + $routes->match( ['get', 'post'], 'irba_report','BDSReportController::irba_report'); + $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'); + +}); + +//New Tickets +$routes->group("/ticket", ["filter" => "authMVC"], function ($routes) { + $routes->match( ['get', 'post'], 'list','TicketController::ticketList'); + $routes->get('new/(:any)','TicketController::ticket_form/$1'); + $routes->post('create','TicketController::createTicket'); + $routes->post('update','TicketController::updateTicket'); + $routes->get('view/(:any)','TicketController::view_ticket/$1'); + $routes->get('mail_template','TicketController::mailTemplate'); + $routes->post('crud_mail_template/(:any)','TicketController::crudTemplate/$1'); + $routes->post('note/(:any)','TicketController::crudNote/$1'); + $routes->post('reply','TicketController::saveReply'); + $routes->match( ['get', 'post'], 'ticket_reports','TicketController::ticketReports'); +// $routes->post('ticket_messages','TicketController::getTicketMessage'); +}); + diff --git a/app/Controllers/BDSReportController.php b/app/Controllers/BDSReportController.php new file mode 100644 index 00000000..67634315 --- /dev/null +++ b/app/Controllers/BDSReportController.php @@ -0,0 +1,930 @@ +myLogger = \Config\Services::mylogger(); + + $this->clientModel = new ClientModel(); + $this->clientPolicyModel = new ClientPolicyModel(); + $this->insurerModel = new InsurerModel(); + $this->insurerBranchModel = new InsurerBranchModel(); + $this->policyTransactionModel = new PolicyTransactionModel(); + $this->PTCOShareDetailsModel = new PTCOShareDetailsModel(); + $this->coShareStmtDetailsModel = new COShareStmtDetailsModel(); + $this->policyTypeModel = new PolicyTypeModel(); + } + + // public function Insurer_wise_Data($insurerCategory, $fromDate, $toDate) + // { + + // $fromDate = \DateTime::createFromFormat('d-m-Y', $fromDate)->format('Y-m-d'); + // $toDate = \DateTime::createFromFormat('d-m-Y', $toDate)->format('Y-m-d'); + // try { + // $sql = " + // select ins.id,ins.name as insurers, + // COALESCE(SUM(CASE WHEN pt.action_type = 'inception' and pt.insurer_id = ins.id and ptp.policy_category = $insurerCategory THEN 1 ELSE 0 END), 0) AS Policies, + // COALESCE(SUM(CASE WHEN ptp.policy_category = $insurerCategory and pt_co.insurer_id = ins.id THEN (pt_co.bp_amt + pt_co.tp_amt + pt_co.tep_amt + pt_co.non_comm_per_amt) ELSE 0 END), 0) AS Premium, + // COALESCE(SUM(CASE WHEN stmt.co_share_id = pt_co.id and ptp.policy_category = $insurerCategory and pt_co.insurer_id = ins.id THEN stmt.reward + stmt.actual_bp_brokerage_amt + stmt.actual_tep_brokerage_amt + stmt.actual_tp_brokerage_amt ELSE 0 END), 0) AS Revenue, + // COALESCE(SUM(CASE WHEN ptp.policy_category = $insurerCategory and pt_co.insurer_id = ins.id THEN pt_co.exp_amt ELSE 0 END), 0) AS Expected_amt + // from insurers ins + // left join pt_co_share_details pt_co on ins.id = pt_co.insurer_id and pt_co.is_active = 1 + // left join co_share_stmt_details stmt on pt_co.id = stmt.co_share_id and stmt.is_active = 1 + // left join policy_transaction pt on pt_co.pt_id = pt.id and pt.is_active = 1 and pt.policy_issue_date >= '$fromDate' and pt.policy_issue_date <= '$toDate' + // left join policy_type ptp on pt.policy_type_id = ptp.id and ptp.policy_category = $insurerCategory and ptp.is_active = 1 + // where ins.is_active = 1 and (ptp.policy_category = $insurerCategory or ptp.policy_category is null) + // group by ins.id + // "; + + // $data['insurer_wise_data'] = $this->insurerModel->query($sql)->getResultArray(); + // // log_message('error',$this->insurerModel->getLastQuery()); + // // log_message('error',json_encode($data)); + // } catch (\Exception $e) { + // $data['message'] = 'No data Found'; + // $this->myLogger->logme('error', $e->getMessage()); + // return $data; + // } + // return ($data); + // } + + public function Insurer_wise_Data($insurerCategory, $fromDate, $toDate) + { + + $fromDate = \DateTime::createFromFormat('d-m-Y', $fromDate)->format('Y-m-d'); + $toDate = \DateTime::createFromFormat('d-m-Y', $toDate)->format('Y-m-d'); + try { + $sql = " + SELECT + ins.id, + ins.name AS insurers, + COALESCE(SUM(CASE WHEN pt.action_type = 'inception' AND pt.insurer_id = ins.id AND ptp.policy_category = $insurerCategory THEN 1 ELSE 0 END), 0) AS Policies, + COALESCE(SUM(CASE WHEN ptp.policy_category = $insurerCategory AND pt_co.insurer_id = ins.id THEN (pt_co.bp_amt + pt_co.tp_amt + pt_co.tep_amt + pt_co.non_comm_per_amt) ELSE 0 END), 0) AS Premium, + COALESCE(SUM(CASE WHEN stmt.co_share_id = pt_co.id AND ptp.policy_category = $insurerCategory AND pt_co.insurer_id = ins.id THEN stmt.reward + stmt.actual_bp_brokerage_amt + stmt.actual_tep_brokerage_amt + stmt.actual_tp_brokerage_amt ELSE 0 END), 0) AS Revenue, + COALESCE(SUM(CASE WHEN ptp.policy_category = $insurerCategory AND pt_co.insurer_id = ins.id THEN pt_co.exp_amt ELSE 0 END), 0) AS Expected_amt + FROM + insurers ins + LEFT JOIN + pt_co_share_details pt_co ON ins.id = pt_co.insurer_id AND pt_co.is_active = 1 + LEFT JOIN + co_share_stmt_details stmt ON pt_co.id = stmt.co_share_id AND stmt.is_active = 1 + LEFT JOIN + policy_transaction pt ON pt_co.pt_id = pt.id AND pt.is_active = 1 AND pt.policy_issue_date >= '$fromDate' AND pt.policy_issue_date <= '$toDate' + LEFT JOIN + policy_type ptp ON pt.policy_type_id = ptp.id AND ptp.policy_category = $insurerCategory AND ptp.is_active = 1 + WHERE + ins.is_active = 1 AND (ptp.policy_category = $insurerCategory OR ptp.policy_category IS NULL) + GROUP BY + ins.id; + "; + + $data['insurer_wise_data'] = $this->insurerModel->query($sql)->getResultArray(); + // log_message('error',$this->insurerModel->getLastQuery()); + // log_message('error',json_encode($data)); + } catch (\Exception $e) { + $data['message'] = 'No data Found'; + $this->myLogger->logme('error', $e->getMessage()); + return $data; + } + return ($data); + } + + public function Bap_Wise_Data($insurerCategory, $fromDate, $toDate) + { + $fromDate = \DateTime::createFromFormat('d-m-Y', $fromDate)->format('Y-m-d'); + $toDate = \DateTime::createFromFormat('d-m-Y', $toDate)->format('Y-m-d'); + + try { + $sql = " + SELECT + pot.bap AS bap, + COALESCE(COUNT(DISTINCT pt.id), 0) AS Policies, + COALESCE(SUM((pt_co.bp_amt + pt_co.tp_amt + pt_co.tep_amt + pt_co.non_comm_per_amt)), 0) AS Premium, + COALESCE(SUM(co.reward + co.actual_bp_brokerage_amt + co.actual_tep_brokerage_amt + co.actual_tp_brokerage_amt), 0) AS Revenue, + COALESCE(SUM(pt_co.exp_amt), 0) AS Expected_amt + FROM policy_type AS pot + LEFT JOIN policy_transaction AS pt ON pot.id = pt.policy_type_id AND pt.is_active = 1 AND pt.action_type = 'inception' and pt.policy_issue_date >= '$fromDate' and pt.policy_issue_date <= '$toDate' + LEFT JOIN pt_co_share_details AS pt_co ON pt.id = pt_co.pt_id AND pt_co.is_active = 1 + LEFT JOIN co_share_stmt_details AS co ON pt_co.id = co.co_share_id AND co.is_active = 1 + WHERE pot.is_active = 1 + AND pot.policy_category = $insurerCategory + GROUP BY pot.bap; + + "; + $data['bap_wise_data'] = $this->policyTypeModel->query($sql)->getResultArray(); + } catch (\Exception $e) { + $data['message'] = 'No Data Found'; + $this->myLogger->logme('error', $e->getMessage()); + return $data; + } + + + return ($data); + } + + public function irba_report() + { + + if ($this->request->is('get')) { + $default_start = new \DateTime(); + $data['default_end'] = $default_start->format('d-m-Y'); + $data['default_start'] = $default_start->modify('-90 days')->format('d-m-Y'); + $data['categories'] = [ + 'Life' => 'life', + 'Non Life' => 'nonLife' + ]; + $data['report_type'] = [ + 'Insurer' => 'insurer', + 'BAP' => 'bap', + 'BAP-Client' => 'bapClient', + 'BAP-Insurer' => 'bapInsurer', + 'Client' => 'client' + ]; + return $this->loadLayout('irba_report', $data); + } else { + + $fromDate = $this->request->getPost('fromDate'); + $toDate = $this->request->getPost('toDate'); + $category = $this->request->getPost('category'); + $report_type = $this->request->getPost('report_type'); + // log_message('error',json_encode($_POST));die(); + if ($report_type == 'insurer') { + $life = $category == 'life' ? 1 : 0; + $viewData = $this->Insurer_wise_Data($life, $fromDate, $toDate); + if (isset($data['message'])) { + return $this->respond(['status' => false, 'message' => $data['message']], 200); + } + // Ensure $viewData is an array + if (!is_array($viewData)) { + $viewData = []; + } + + + $html = view('bds_report_Insurer_wise_Data', $viewData); + return $this->respond(['status' => true, 'html' => $html], 200); + } else if ($report_type == 'bap') { + + $life = $category == 'life' ? 1 : 0; + $viewData = $this->Bap_wise_Data($life, $fromDate, $toDate); + if (isset($data['message'])) { + return $this->respond(['status' => false, 'message' => $data['message']], 200); + } + // Ensure $viewData is an array + if (!is_array($viewData)) { + $viewData = []; + } + + + $html = view('bds_report_bap_wise_data', $viewData); + return $this->respond(['status' => true, 'html' => $html], 200); + } else if($report_type == 'bapInsurer'){ + + //Condition for BAP Insurer wise date + $category = $category == 'life' ? 1 : 0; + $viewData['data'] = $this->getBAPInsurerData($category, $fromDate, $toDate); + + $html = view('irda_bap_insurer_report_list', $viewData); + return $this->respond(['status' => true, 'html' => $html], 200); + + }else if($report_type == 'bapClient'){ + + //Condition for BAP Client wise date + $category = $category == 'life' ? 1 : 0; + $viewData['data'] = $this->getBAPClientData($category, $fromDate, $toDate); + + $html = view('irda_bap_client_report_list', $viewData); + return $this->respond(['status' => true, 'html' => $html], 200); + + }else if($report_type == 'client'){ + + //Condition for Client wise date + $category = $category == 'life' ? 1 : 0; + $viewData['data'] = $this->getClientData($category, $fromDate, $toDate); + + $html = view('irda_client_report_list', $viewData); + return $this->respond(['status' => true, 'html' => $html], 200); + } + } + } + + // ------------------------------------------------------------------------------------------------ + + //Function for get BAP INSURE wise data for premium , policy count , revenue only + public function getBAPInsurerData($category = 0, $start_date = null, $end_date = null) + { + try { + $this->myLogger->logme('error', 'getBAPInsurerData function called'); + $this->myLogger->logme('error', 'category : {data}', ['data' => $category]); + $this->myLogger->logme('error', 'start date : {start_date} - end date {end_date} ', ['start_date' => $start_date, 'end_date' => $end_date]); + + + //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); + } + + $this->myLogger->logme('error', 'From date : {fromDate} - To date {toDate} ', ['fromDate' => $fromDate, 'toDate' => $toDate]); + + $db = db_connect(); + $builder = $db->query(" + select ins.id, ins.name as insurer_name, + + -- Health Policies + COALESCE(SUM(CASE WHEN ptp.bap = 'Health' AND pt.action_type = 'inception' THEN 1 ELSE 0 END), 0) AS health_policy_count, + COALESCE(SUM(CASE WHEN ptp.bap = 'Health' THEN (pt_co.bp_amt + pt_co.tp_amt + pt_co.tep_amt + pt_co.non_comm_per_amt) ELSE 0 END), 0) AS health_premium, + COALESCE(SUM(CASE WHEN ptp.bap = 'Health' THEN stmt.actual_bp_brokerage_amt + stmt.actual_tp_brokerage_amt + stmt.actual_tep_brokerage_amt + stmt.reward ELSE 0 END), 0) AS health_revenue, + COALESCE(SUM(CASE WHEN ptp.bap = 'Health' THEN pt_co.exp_amt ELSE 0 END), 0) AS health_exp_amt, + + -- Misc Policies + COALESCE(SUM(CASE WHEN ptp.bap = 'Misc' AND pt.action_type = 'inception' THEN 1 ELSE 0 END), 0) AS misc_policy_count, + COALESCE(SUM(CASE WHEN ptp.bap = 'Misc' THEN (pt_co.bp_amt + pt_co.tp_amt + pt_co.tep_amt + pt_co.non_comm_per_amt) ELSE 0 END), 0) AS misc_premium, + COALESCE(SUM(CASE WHEN ptp.bap = 'Misc' THEN stmt.actual_bp_brokerage_amt + stmt.actual_tp_brokerage_amt + stmt.actual_tep_brokerage_amt + stmt.reward ELSE 0 END), 0) AS misc_revenue, + COALESCE(SUM(CASE WHEN ptp.bap = 'Misc' THEN pt_co.exp_amt ELSE 0 END), 0) AS misc_exp_amt, + + + -- Motor Policies + COALESCE(SUM(CASE WHEN ptp.bap = 'Motor' AND pt.action_type = 'inception' THEN 1 ELSE 0 END), 0) AS motor_policy_count, + COALESCE(SUM(CASE WHEN ptp.bap = 'Motor' THEN (pt_co.bp_amt + pt_co.tp_amt + pt_co.tep_amt + pt_co.non_comm_per_amt) ELSE 0 END), 0) AS motor_premium, + COALESCE(SUM(CASE WHEN ptp.bap = 'Motor' THEN stmt.actual_bp_brokerage_amt + stmt.actual_tp_brokerage_amt + stmt.actual_tep_brokerage_amt + stmt.reward ELSE 0 END), 0) AS motor_revenue, + COALESCE(SUM(CASE WHEN ptp.bap = 'Motor' THEN pt_co.exp_amt ELSE 0 END), 0) AS motor_exp_amt, + + -- Engineering Policies + COALESCE(SUM(CASE WHEN ptp.bap = 'Engineering' AND pt.action_type = 'inception' THEN 1 ELSE 0 END), 0) AS engineering_policy_count, + COALESCE(SUM(CASE WHEN ptp.bap = 'Engineering' THEN (pt_co.bp_amt + pt_co.tp_amt + pt_co.tep_amt + pt_co.non_comm_per_amt) ELSE 0 END), 0) AS engineering_premium, + COALESCE(SUM(CASE WHEN ptp.bap = 'Engineering' THEN stmt.actual_bp_brokerage_amt + stmt.actual_tp_brokerage_amt + stmt.actual_tep_brokerage_amt + stmt.reward ELSE 0 END), 0) AS engineering_revenue, + COALESCE(SUM(CASE WHEN ptp.bap = 'Engineering' THEN pt_co.exp_amt ELSE 0 END), 0) AS engineering_exp_amt, + + + + -- Fire Policies + COALESCE(SUM(CASE WHEN ptp.bap = 'Fire' AND pt.action_type = 'inception' THEN 1 ELSE 0 END), 0) AS fire_policy_count, + COALESCE(SUM(CASE WHEN ptp.bap = 'Fire' THEN (pt_co.bp_amt + pt_co.tp_amt + pt_co.tep_amt + pt_co.non_comm_per_amt) ELSE 0 END), 0) AS fire_premium, + COALESCE(SUM(CASE WHEN ptp.bap = 'Fire' THEN stmt.actual_bp_brokerage_amt + stmt.actual_tp_brokerage_amt + stmt.actual_tep_brokerage_amt + stmt.reward ELSE 0 END), 0) AS fire_revenue, + COALESCE(SUM(CASE WHEN ptp.bap = 'Fire' THEN pt_co.exp_amt ELSE 0 END), 0) AS fire_exp_amt, + + + -- Liability Policies + COALESCE(SUM(CASE WHEN ptp.bap = 'Liability' AND pt.action_type = 'inception' THEN 1 ELSE 0 END), 0) AS liability_policy_count, + COALESCE(SUM(CASE WHEN ptp.bap = 'Liability' THEN (pt_co.bp_amt + pt_co.tp_amt + pt_co.tep_amt + pt_co.non_comm_per_amt) ELSE 0 END), 0) AS liability_premium, + COALESCE(SUM(CASE WHEN ptp.bap = 'Liability' THEN stmt.actual_bp_brokerage_amt + stmt.actual_tp_brokerage_amt + stmt.actual_tep_brokerage_amt + stmt.reward ELSE 0 END), 0) AS liability_revenue, + COALESCE(SUM(CASE WHEN ptp.bap = 'Liability' THEN pt_co.exp_amt ELSE 0 END), 0) AS liability_exp_amt, + + + -- Life Policies + COALESCE(SUM(CASE WHEN ptp.bap = 'Life' AND pt.action_type = 'inception' THEN 1 ELSE 0 END), 0) AS life_policy_count, + COALESCE(SUM(CASE WHEN ptp.bap = 'Life' THEN (pt_co.bp_amt + pt_co.tp_amt + pt_co.tep_amt + pt_co.non_comm_per_amt) ELSE 0 END), 0) AS life_premium, + COALESCE(SUM(CASE WHEN ptp.bap = 'Life' THEN stmt.actual_bp_brokerage_amt + stmt.actual_tp_brokerage_amt + stmt.actual_tep_brokerage_amt + stmt.reward ELSE 0 END), 0) AS life_revenue, + COALESCE(SUM(CASE WHEN ptp.bap = 'Life' THEN pt_co.exp_amt ELSE 0 END), 0) AS life_exp_amt, + + + -- Marine Cargo Policies + COALESCE(SUM(CASE WHEN ptp.bap = 'Marine Cargo' AND pt.action_type = 'inception' THEN 1 ELSE 0 END), 0) AS marine_cargo_policy_count, + COALESCE(SUM(CASE WHEN ptp.bap = 'Marine Cargo' THEN (pt_co.bp_amt + pt_co.tp_amt + pt_co.tep_amt + pt_co.non_comm_per_amt) ELSE 0 END), 0) AS marine_cargo_premium, + COALESCE(SUM(CASE WHEN ptp.bap = 'Marine Cargo' THEN stmt.actual_bp_brokerage_amt + stmt.actual_tp_brokerage_amt + stmt.actual_tep_brokerage_amt + stmt.reward ELSE 0 END), 0) AS marine_cargoe_revenue, + COALESCE(SUM(CASE WHEN ptp.bap = 'Marine Cargo' THEN pt_co.exp_amt ELSE 0 END), 0) AS marine_cargo_exp_amt, + + + -- Marine Hull Policies + COALESCE(SUM(CASE WHEN ptp.bap = 'Marine Hull' AND pt.action_type = 'inception' THEN 1 ELSE 0 END), 0) AS marine_hull_policy_count, + COALESCE(SUM(CASE WHEN ptp.bap = 'Marine Hull' THEN (pt_co.bp_amt + pt_co.tp_amt + pt_co.tep_amt + pt_co.non_comm_per_amt) ELSE 0 END), 0) AS marine_hull_premium, + COALESCE(SUM(CASE WHEN ptp.bap = 'Marine Hull' THEN stmt.actual_bp_brokerage_amt + stmt.actual_tp_brokerage_amt + stmt.actual_tep_brokerage_amt + stmt.reward ELSE 0 END), 0) AS marine_hull_revenue, + COALESCE(SUM(CASE WHEN ptp.bap = 'Marine Hull' THEN pt_co.exp_amt ELSE 0 END), 0) AS marine_hull_exp_amt, + + -- Grand Totals + COALESCE( + SUM(CASE WHEN ptp.bap = 'Health' AND pt.action_type = 'inception' THEN 1 ELSE 0 END) + + SUM(CASE WHEN ptp.bap = 'Marine Hull' AND pt.action_type = 'inception' THEN 1 ELSE 0 END) + + SUM(CASE WHEN ptp.bap = 'Life' AND pt.action_type = 'inception' THEN 1 ELSE 0 END) + + SUM(CASE WHEN ptp.bap = 'Motor' AND pt.action_type = 'inception' THEN 1 ELSE 0 END) + + SUM(CASE WHEN ptp.bap = 'Fire' AND pt.action_type = 'inception' THEN 1 ELSE 0 END) + + SUM(CASE WHEN ptp.bap = 'Engineering' AND pt.action_type = 'inception' THEN 1 ELSE 0 END) + + SUM(CASE WHEN ptp.bap = 'Liability' AND pt.action_type = 'inception' THEN 1 ELSE 0 END)+ + SUM(CASE WHEN ptp.bap = 'Marine Cargo' AND pt.action_type = 'inception' THEN 1 ELSE 0 END) + + SUM(CASE WHEN ptp.bap = 'Misc' AND pt.action_type = 'inception' THEN 1 ELSE 0 END), + 0 + ) AS total_policy_count, + + COALESCE( + SUM(CASE WHEN ptp.bap = 'Health' THEN (pt_co.bp_amt + pt_co.tp_amt + pt_co.tep_amt + pt_co.non_comm_per_amt) ELSE 0 END) + + SUM(CASE WHEN ptp.bap = 'Marine Hull' THEN (pt_co.bp_amt + pt_co.tp_amt + pt_co.tep_amt + pt_co.non_comm_per_amt) ELSE 0 END) + + SUM(CASE WHEN ptp.bap = 'Life' THEN (pt_co.bp_amt + pt_co.tp_amt + pt_co.tep_amt + pt_co.non_comm_per_amt) ELSE 0 END) + + SUM(CASE WHEN ptp.bap = 'Motor' THEN (pt_co.bp_amt + pt_co.tp_amt + pt_co.tep_amt + pt_co.non_comm_per_amt) ELSE 0 END) + + SUM(CASE WHEN ptp.bap = 'Fire' THEN (pt_co.bp_amt + pt_co.tp_amt + pt_co.tep_amt + pt_co.non_comm_per_amt) ELSE 0 END) + + SUM(CASE WHEN ptp.bap = 'Engineering' THEN (pt_co.bp_amt + pt_co.tp_amt + pt_co.tep_amt + pt_co.non_comm_per_amt) ELSE 0 END) + + SUM(CASE WHEN ptp.bap = 'Liability' THEN (pt_co.bp_amt + pt_co.tp_amt + pt_co.tep_amt + pt_co.non_comm_per_amt) ELSE 0 END)+ + SUM(CASE WHEN ptp.bap = 'Marine Cargo' THEN (pt_co.bp_amt + pt_co.tp_amt + pt_co.tep_amt + pt_co.non_comm_per_amt) ELSE 0 END)+ + SUM(CASE WHEN ptp.bap = 'Misc' THEN (pt_co.bp_amt + pt_co.tp_amt + pt_co.tep_amt + pt_co.non_comm_per_amt) ELSE 0 END), + 0 + ) AS total_premium, + + COALESCE( + SUM(CASE WHEN ptp.bap = 'Health' THEN stmt.actual_bp_brokerage_amt + stmt.actual_tp_brokerage_amt + stmt.actual_tep_brokerage_amt + stmt.reward ELSE 0 END) + + SUM(CASE WHEN ptp.bap = 'Marine Hull' THEN stmt.actual_bp_brokerage_amt + stmt.actual_tp_brokerage_amt + stmt.actual_tep_brokerage_amt + stmt.reward ELSE 0 END) + + SUM(CASE WHEN ptp.bap = 'Life' THEN stmt.actual_bp_brokerage_amt + stmt.actual_tp_brokerage_amt + stmt.actual_tep_brokerage_amt + stmt.reward ELSE 0 END) + + SUM(CASE WHEN ptp.bap = 'Motor' THEN stmt.actual_bp_brokerage_amt + stmt.actual_tp_brokerage_amt + stmt.actual_tep_brokerage_amt + stmt.reward ELSE 0 END) + + SUM(CASE WHEN ptp.bap = 'Fire' THEN stmt.actual_bp_brokerage_amt + stmt.actual_tp_brokerage_amt + stmt.actual_tep_brokerage_amt + stmt.reward ELSE 0 END) + + SUM(CASE WHEN ptp.bap = 'Engineering' THEN stmt.actual_bp_brokerage_amt + stmt.actual_tp_brokerage_amt + stmt.actual_tep_brokerage_amt + stmt.reward ELSE 0 END) + + SUM(CASE WHEN ptp.bap = 'Liability' THEN stmt.actual_bp_brokerage_amt + stmt.actual_tp_brokerage_amt + stmt.actual_tep_brokerage_amt + stmt.reward ELSE 0 END)+ + SUM(CASE WHEN ptp.bap = 'Marine Cargo' THEN stmt.actual_bp_brokerage_amt + stmt.actual_tp_brokerage_amt + stmt.actual_tep_brokerage_amt + stmt.reward ELSE 0 END)+ + SUM(CASE WHEN ptp.bap = 'Misc' THEN stmt.actual_bp_brokerage_amt + stmt.actual_tp_brokerage_amt + stmt.actual_tep_brokerage_amt + stmt.reward ELSE 0 END), + 0 + ) AS total_revenue + + from insurers ins + left join pt_co_share_details pt_co on ins.id = pt_co.insurer_id and pt_co.is_active = 1 + left join co_share_stmt_details stmt on pt_co.id = stmt.co_share_id and stmt.is_active = 1 + left join policy_transaction pt on pt_co.pt_id = pt.id and pt.is_active = 1 AND pt.policy_issue_date >= '$fromDate' AND pt.policy_issue_date <= '$toDate' + left join policy_type ptp on pt.policy_type_id = ptp.id and ptp.policy_category = $category + where ins.is_active = 1 + group by ins.id + ORDER BY + health_premium DESC, + misc_premium DESC, + motor_premium DESC, + engineering_premium DESC, + fire_premium DESC, + liability_premium DESC, + life_premium DESC, + marine_cargo_premium DESC, + marine_hull_premium DESC; + + "); + + // Get the query + $result = $builder->getResultArray(); + $this->myLogger->logme('error', 'Query executed successfully.'); + // dd(db_connect()->getLastQuery(),$result); + return $result; + } catch (\Exception $e) { + + // Log the exception details for debugging + $this->myLogger->logme('error', 'Error occurred in getBAPInsurerData: {message}', ['message' => $e->getMessage()]); + $this->myLogger->logme('error', 'Stack trace: {trace}', ['trace' => $e->getTraceAsString()]); + return []; + } + } + + //Function for get BAP CLIENT wise data for premium , policy count , revenue only + public function getBAPClientData($category = 0, $start_date = null, $end_date = null) + { + + try { + $this->myLogger->logme('error', 'getBAPClientData function called'); + $this->myLogger->logme('error', 'category : {data}', ['data' => $category]); + $this->myLogger->logme('error', 'start date : {start_date} - end date {end_date} ', ['start_date' => $start_date, 'end_date' => $end_date]); + + //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); + } + + $this->myLogger->logme('error', 'From date : {fromDate} - To date {toDate} ', ['fromDate' => $fromDate, 'toDate' => $toDate]); + + $db = db_connect(); + $builder = $db->query(" + + SELECT + c.id AS client_id, + c.client_name, + + -- Health Policies + COALESCE(SUM(CASE WHEN ptp.bap = 'Health' AND pt.action_type = 'inception' THEN 1 ELSE 0 END), 0) AS health_policy_count, + COALESCE(SUM(CASE WHEN ptp.bap = 'Health' THEN (pt_co.bp_amt + pt_co.tp_amt + pt_co.tep_amt + pt_co.non_comm_per_amt) ELSE 0 END), 0) AS health_premium, + + -- Misc Policies + COALESCE(SUM(CASE WHEN ptp.bap = 'Misc' AND pt.action_type = 'inception' THEN 1 ELSE 0 END), 0) AS misc_policy_count, + COALESCE(SUM(CASE WHEN ptp.bap = 'Misc' THEN (pt_co.bp_amt + pt_co.tp_amt + pt_co.tep_amt + pt_co.non_comm_per_amt) ELSE 0 END), 0) AS misc_premium, + + -- Motor Policies + COALESCE(SUM(CASE WHEN ptp.bap = 'Motor' AND pt.action_type = 'inception' THEN 1 ELSE 0 END), 0) AS motor_policy_count, + COALESCE(SUM(CASE WHEN ptp.bap = 'Motor' THEN (pt_co.bp_amt + pt_co.tp_amt + pt_co.tep_amt + pt_co.non_comm_per_amt) ELSE 0 END), 0) AS motor_premium, + + -- Engineering Policies + COALESCE(SUM(CASE WHEN ptp.bap = 'Engineering' AND pt.action_type = 'inception' THEN 1 ELSE 0 END), 0) AS engineering_policy_count, + COALESCE(SUM(CASE WHEN ptp.bap = 'Engineering' THEN (pt_co.bp_amt + pt_co.tp_amt + pt_co.tep_amt + pt_co.non_comm_per_amt) ELSE 0 END), 0) AS engineering_premium, + + -- Fire Policies + COALESCE(SUM(CASE WHEN ptp.bap = 'Fire' AND pt.action_type = 'inception' THEN 1 ELSE 0 END), 0) AS fire_policy_count, + COALESCE(SUM(CASE WHEN ptp.bap = 'Fire' THEN (pt_co.bp_amt + pt_co.tp_amt + pt_co.tep_amt + pt_co.non_comm_per_amt) ELSE 0 END), 0) AS fire_premium, + + -- Liability Policies + COALESCE(SUM(CASE WHEN ptp.bap = 'Liability' AND pt.action_type = 'inception' THEN 1 ELSE 0 END), 0) AS liability_policy_count, + COALESCE(SUM(CASE WHEN ptp.bap = 'Liability' THEN (pt_co.bp_amt + pt_co.tp_amt + pt_co.tep_amt + pt_co.non_comm_per_amt) ELSE 0 END), 0) AS liability_premium, + + -- Life Policies + COALESCE(SUM(CASE WHEN ptp.bap = 'Life' AND pt.action_type = 'inception' THEN 1 ELSE 0 END), 0) AS life_policy_count, + COALESCE(SUM(CASE WHEN ptp.bap = 'Life' THEN (pt_co.bp_amt + pt_co.tp_amt + pt_co.tep_amt + pt_co.non_comm_per_amt) ELSE 0 END), 0) AS life_premium, + + -- Marine Cargo Policies + COALESCE(SUM(CASE WHEN ptp.bap = 'Marine Cargo' AND pt.action_type = 'inception' THEN 1 ELSE 0 END), 0) AS marine_cargo_policy_count, + COALESCE(SUM(CASE WHEN ptp.bap = 'Marine Cargo' THEN (pt_co.bp_amt + pt_co.tp_amt + pt_co.tep_amt + pt_co.non_comm_per_amt) ELSE 0 END), 0) AS marine_cargo_premium, + + -- Marine Hull Policies + COALESCE(SUM(CASE WHEN ptp.bap = 'Marine Hull' AND pt.action_type = 'inception' THEN 1 ELSE 0 END), 0) AS marine_hull_policy_count, + COALESCE(SUM(CASE WHEN ptp.bap = 'Marine Hull' THEN (pt_co.bp_amt + pt_co.tp_amt + pt_co.tep_amt + pt_co.non_comm_per_amt) ELSE 0 END), 0) AS marine_hull_premium, + + -- Grand Totals + COALESCE(SUM(CASE WHEN pt.action_type = 'inception' THEN 1 ELSE 0 END), 0) AS total_policy_count, + COALESCE(SUM(pt_co.bp_amt + pt_co.tp_amt + pt_co.tep_amt + pt_co.non_comm_per_amt), 0) AS total_premium + + FROM clients c + LEFT JOIN policy_transaction pt ON pt.client_id = c.id AND pt.is_active = 1 AND pt.policy_issue_date >= '$fromDate' AND pt.policy_issue_date <= '$toDate' + LEFT JOIN policy_type ptp ON pt.policy_type_id = ptp.id + LEFT JOIN pt_co_share_details pt_co ON pt_co.pt_id = pt.id AND pt_co.is_active = 1 + LEFT JOIN co_share_stmt_details stmt ON stmt.co_share_id = pt_co.id AND stmt.is_active = 1 + WHERE c.is_active = 1 + AND ptp.policy_category = $category + GROUP BY c.id + ORDER BY + health_premium DESC, + misc_premium DESC, + motor_premium DESC, + engineering_premium DESC, + fire_premium DESC, + liability_premium DESC, + life_premium DESC, + marine_cargo_premium DESC, + marine_hull_premium DESC + + "); + + // Get the query + $result = $builder->getResultArray(); + // dd(db_connect()->getLastQuery(),$result); + return $result; + } catch (\Exception $e) { + + // Log the exception details for debugging + $this->myLogger->logme('error', 'Error occurred in getBAPClientData: {message}', ['message' => $e->getMessage()]); + $this->myLogger->logme('error', 'Stack trace: {trace}', ['trace' => $e->getTraceAsString()]); + return []; + } + } + + //Function for get CLIENT wise data for premium and policy count only + public function getClientData($category = 0, $start_date = null, $end_date = null) + { + + try { + + $this->myLogger->logme('error', 'getClientData function called'); + $this->myLogger->logme('error', 'category : {data}', ['data' => $category]); + $this->myLogger->logme('error', 'start date : {start_date} - end date {end_date} ', ['start_date' => $start_date, 'end_date' => $end_date]); + + //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); + } + + $this->myLogger->logme('error', 'From date : {fromDate} - To date {toDate} ', ['fromDate' => $fromDate, 'toDate' => $toDate]); + + $db = db_connect(); + $builder = $db->query(" + + select + c.id as client_id, + c.client_name, + + ( + select + count(policy_transaction.id) + from policy_transaction + left join policy_type on policy_transaction.policy_type_id = policy_type.id + where policy_transaction.client_id = c.id + and policy_transaction.action_type = 'inception' + and policy_transaction.is_active = 1 + + ) as policy_count, + + COALESCE(( + select + sum(pt_co.bp_amt + pt_co.tp_amt + pt_co.tep_amt + pt_co.non_comm_per_amt) as premium + from co_share_stmt_details stmt + left join pt_co_share_details pt_co on stmt.co_share_id = pt_co.id + left join policy_transaction pt on pt_co.pt_id = pt.id + where pt.client_id = c.id + and stmt.is_active = 1 + and pt_co.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 + where c.is_active = 1 + group by client_name + order by premium desc + "); + + // Get the query + $result = $builder->getResultArray(); + // dd(db_connect()->getLastQuery(),$result); + return $result; + } catch (\Exception $e) { + + // Log the exception details for debugging + $this->myLogger->logme('error', 'Error occurred in getClientData: {message}', ['message' => $e->getMessage()]); + $this->myLogger->logme('error', 'Stack trace: {trace}', ['trace' => $e->getTraceAsString()]); + return []; + } + } + + + // //Function for get BAP INSURE wise data for premium , policy count , revenue only + // public function getBAPInsurerData($category = 0, $start_date = null, $end_date = null) + // { + // try { + // $this->myLogger->logme('error', 'getBAPInsurerData function called'); + // $this->myLogger->logme('error', 'category : {data}', ['data' => $category]); + // $this->myLogger->logme('error', 'start date : {start_date} - end date {end_date} ', ['start_date' => $start_date, 'end_date' => $end_date]); + + + // //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); + // } + + // $this->myLogger->logme('error', 'From date : {fromDate} - To date {toDate} ', ['fromDate' => $fromDate, 'toDate' => $toDate]); + + // $db = db_connect(); + // $builder = $db->query(" + + // select ins.id, ins.name as insurer_name, + + // -- Health Policies + // COALESCE(SUM(CASE WHEN ptp.bap = 'Health' AND pt.action_type = 'inception' THEN 1 ELSE 0 END), 0) AS health_policy_count, + // COALESCE(SUM(CASE WHEN ptp.bap = 'Health' THEN stmt.actual_bp_amt + stmt.actual_tp_amt + stmt.actual_tep_amt ELSE 0 END), 0) AS health_premium, + // COALESCE(SUM(CASE WHEN ptp.bap = 'Health' THEN stmt.actual_bp_brokerage_amt + stmt.actual_tp_brokerage_amt + stmt.actual_tep_brokerage_amt + stmt.reward ELSE 0 END), 0) AS health_revenue, + + // -- Misc Policies + // COALESCE(SUM(CASE WHEN ptp.bap = 'Misc' AND pt.action_type = 'inception' THEN 1 ELSE 0 END), 0) AS misc_policy_count, + // COALESCE(SUM(CASE WHEN ptp.bap = 'Misc' THEN stmt.actual_bp_amt + stmt.actual_tp_amt + stmt.actual_tep_amt ELSE 0 END), 0) AS misc_premium, + // COALESCE(SUM(CASE WHEN ptp.bap = 'Misc' THEN stmt.actual_bp_brokerage_amt + stmt.actual_tp_brokerage_amt + stmt.actual_tep_brokerage_amt + stmt.reward ELSE 0 END), 0) AS misc_revenue, + + + // -- Motor Policies + // COALESCE(SUM(CASE WHEN ptp.bap = 'Motor' AND pt.action_type = 'inception' THEN 1 ELSE 0 END), 0) AS motor_policy_count, + // COALESCE(SUM(CASE WHEN ptp.bap = 'Motor' THEN stmt.actual_bp_amt + stmt.actual_tp_amt + stmt.actual_tep_amt ELSE 0 END), 0) AS motor_premium, + // COALESCE(SUM(CASE WHEN ptp.bap = 'Motor' THEN stmt.actual_bp_brokerage_amt + stmt.actual_tp_brokerage_amt + stmt.actual_tep_brokerage_amt + stmt.reward ELSE 0 END), 0) AS motor_revenue, + + // -- Engineering Policies + // COALESCE(SUM(CASE WHEN ptp.bap = 'Engineering' AND pt.action_type = 'inception' THEN 1 ELSE 0 END), 0) AS engineering_policy_count, + // COALESCE(SUM(CASE WHEN ptp.bap = 'Engineering' THEN stmt.actual_bp_amt + stmt.actual_tp_amt + stmt.actual_tep_amt ELSE 0 END), 0) AS engineering_premium, + // COALESCE(SUM(CASE WHEN ptp.bap = 'Engineering' THEN stmt.actual_bp_brokerage_amt + stmt.actual_tp_brokerage_amt + stmt.actual_tep_brokerage_amt + stmt.reward ELSE 0 END), 0) AS engineering_revenue, + + + // -- Fire Policies + // COALESCE(SUM(CASE WHEN ptp.bap = 'Fire' AND pt.action_type = 'inception' THEN 1 ELSE 0 END), 0) AS fire_policy_count, + // COALESCE(SUM(CASE WHEN ptp.bap = 'Fire' THEN stmt.actual_bp_amt + stmt.actual_tp_amt + stmt.actual_tep_amt ELSE 0 END), 0) AS fire_premium, + // COALESCE(SUM(CASE WHEN ptp.bap = 'Fire' THEN stmt.actual_bp_brokerage_amt + stmt.actual_tp_brokerage_amt + stmt.actual_tep_brokerage_amt + stmt.reward ELSE 0 END), 0) AS fire_revenue, + + // -- Liability Policies + // COALESCE(SUM(CASE WHEN ptp.bap = 'Liability' AND pt.action_type = 'inception' THEN 1 ELSE 0 END), 0) AS liability_policy_count, + // COALESCE(SUM(CASE WHEN ptp.bap = 'Liability' THEN stmt.actual_bp_amt + stmt.actual_tp_amt + stmt.actual_tep_amt ELSE 0 END), 0) AS liability_premium, + // COALESCE(SUM(CASE WHEN ptp.bap = 'Liability' THEN stmt.actual_bp_brokerage_amt + stmt.actual_tp_brokerage_amt + stmt.actual_tep_brokerage_amt + stmt.reward ELSE 0 END), 0) AS liability_revenue, + + + // -- Life Policies + // COALESCE(SUM(CASE WHEN ptp.bap = 'Life' AND pt.action_type = 'inception' THEN 1 ELSE 0 END), 0) AS life_policy_count, + // COALESCE(SUM(CASE WHEN ptp.bap = 'Life' THEN stmt.actual_bp_amt + stmt.actual_tp_amt + stmt.actual_tep_amt ELSE 0 END), 0) AS life_premium, + // COALESCE(SUM(CASE WHEN ptp.bap = 'Life' THEN stmt.actual_bp_brokerage_amt + stmt.actual_tp_brokerage_amt + stmt.actual_tep_brokerage_amt + stmt.reward ELSE 0 END), 0) AS life_revenue, + + + // -- Marine Cargo Policies + // COALESCE(SUM(CASE WHEN ptp.bap = 'Marine Cargo' AND pt.action_type = 'inception' THEN 1 ELSE 0 END), 0) AS marine_cargo_policy_count, + // COALESCE(SUM(CASE WHEN ptp.bap = 'Marine Cargo' THEN stmt.actual_bp_amt + stmt.actual_tp_amt + stmt.actual_tep_amt ELSE 0 END), 0) AS marine_cargo_premium, + // COALESCE(SUM(CASE WHEN ptp.bap = 'Marine Cargo' THEN stmt.actual_bp_brokerage_amt + stmt.actual_tp_brokerage_amt + stmt.actual_tep_brokerage_amt + stmt.reward ELSE 0 END), 0) AS marine_cargoe_revenue, + + // -- Marine Hull Policies + // COALESCE(SUM(CASE WHEN ptp.bap = 'Marine Hull' AND pt.action_type = 'inception' THEN 1 ELSE 0 END), 0) AS marine_hull_policy_count, + // COALESCE(SUM(CASE WHEN ptp.bap = 'Marine Hull' THEN stmt.actual_bp_amt + stmt.actual_tp_amt + stmt.actual_tep_amt ELSE 0 END), 0) AS marine_hull_premium, + // COALESCE(SUM(CASE WHEN ptp.bap = 'Marine Hull' THEN stmt.actual_bp_brokerage_amt + stmt.actual_tp_brokerage_amt + stmt.actual_tep_brokerage_amt + stmt.reward ELSE 0 END), 0) AS marine_hull_revenue, + + // -- Grand Totals + // COALESCE( + // SUM(CASE WHEN ptp.bap = 'Health' AND pt.action_type = 'inception' THEN 1 ELSE 0 END) + + // SUM(CASE WHEN ptp.bap = 'Marine Hull' AND pt.action_type = 'inception' THEN 1 ELSE 0 END) + + // SUM(CASE WHEN ptp.bap = 'Life' AND pt.action_type = 'inception' THEN 1 ELSE 0 END) + + // SUM(CASE WHEN ptp.bap = 'Motor' AND pt.action_type = 'inception' THEN 1 ELSE 0 END) + + // SUM(CASE WHEN ptp.bap = 'Fire' AND pt.action_type = 'inception' THEN 1 ELSE 0 END) + + // SUM(CASE WHEN ptp.bap = 'Engineering' AND pt.action_type = 'inception' THEN 1 ELSE 0 END) + + // SUM(CASE WHEN ptp.bap = 'Liability' AND pt.action_type = 'inception' THEN 1 ELSE 0 END)+ + // SUM(CASE WHEN ptp.bap = 'Marine Cargo' AND pt.action_type = 'inception' THEN 1 ELSE 0 END) + + // SUM(CASE WHEN ptp.bap = 'Misc' AND pt.action_type = 'inception' THEN 1 ELSE 0 END), + // 0 + // ) AS total_policy_count, + + // COALESCE( + // SUM(CASE WHEN ptp.bap = 'Health' THEN stmt.actual_bp_amt + stmt.actual_tp_amt + stmt.actual_tep_amt ELSE 0 END) + + // SUM(CASE WHEN ptp.bap = 'Marine Hull' THEN stmt.actual_bp_amt + stmt.actual_tp_amt + stmt.actual_tep_amt ELSE 0 END) + + // SUM(CASE WHEN ptp.bap = 'Life' THEN stmt.actual_bp_amt + stmt.actual_tp_amt + stmt.actual_tep_amt ELSE 0 END) + + // SUM(CASE WHEN ptp.bap = 'Motor' THEN stmt.actual_bp_amt + stmt.actual_tp_amt + stmt.actual_tep_amt ELSE 0 END) + + // SUM(CASE WHEN ptp.bap = 'Fire' THEN stmt.actual_bp_amt + stmt.actual_tp_amt + stmt.actual_tep_amt ELSE 0 END) + + // SUM(CASE WHEN ptp.bap = 'Engineering' THEN stmt.actual_bp_amt + stmt.actual_tp_amt + stmt.actual_tep_amt ELSE 0 END) + + // SUM(CASE WHEN ptp.bap = 'Liability' THEN stmt.actual_bp_amt + stmt.actual_tp_amt + stmt.actual_tep_amt ELSE 0 END)+ + // SUM(CASE WHEN ptp.bap = 'Marine Cargo' THEN stmt.actual_bp_amt + stmt.actual_tp_amt + stmt.actual_tep_amt ELSE 0 END)+ + // SUM(CASE WHEN ptp.bap = 'Misc' THEN stmt.actual_bp_amt + stmt.actual_tp_amt + stmt.actual_tep_amt ELSE 0 END), + // 0 + // ) AS total_premium, + + // COALESCE( + // SUM(CASE WHEN ptp.bap = 'Health' THEN stmt.actual_bp_brokerage_amt + stmt.actual_tp_brokerage_amt + stmt.actual_tep_brokerage_amt + stmt.reward ELSE 0 END) + + // SUM(CASE WHEN ptp.bap = 'Marine Hull' THEN stmt.actual_bp_brokerage_amt + stmt.actual_tp_brokerage_amt + stmt.actual_tep_brokerage_amt + stmt.reward ELSE 0 END) + + // SUM(CASE WHEN ptp.bap = 'Life' THEN stmt.actual_bp_brokerage_amt + stmt.actual_tp_brokerage_amt + stmt.actual_tep_brokerage_amt + stmt.reward ELSE 0 END) + + // SUM(CASE WHEN ptp.bap = 'Motor' THEN stmt.actual_bp_brokerage_amt + stmt.actual_tp_brokerage_amt + stmt.actual_tep_brokerage_amt + stmt.reward ELSE 0 END) + + // SUM(CASE WHEN ptp.bap = 'Fire' THEN stmt.actual_bp_brokerage_amt + stmt.actual_tp_brokerage_amt + stmt.actual_tep_brokerage_amt + stmt.reward ELSE 0 END) + + // SUM(CASE WHEN ptp.bap = 'Engineering' THEN stmt.actual_bp_brokerage_amt + stmt.actual_tp_brokerage_amt + stmt.actual_tep_brokerage_amt + stmt.reward ELSE 0 END) + + // SUM(CASE WHEN ptp.bap = 'Liability' THEN stmt.actual_bp_brokerage_amt + stmt.actual_tp_brokerage_amt + stmt.actual_tep_brokerage_amt + stmt.reward ELSE 0 END)+ + // SUM(CASE WHEN ptp.bap = 'Marine Cargo' THEN stmt.actual_bp_brokerage_amt + stmt.actual_tp_brokerage_amt + stmt.actual_tep_brokerage_amt + stmt.reward ELSE 0 END)+ + // SUM(CASE WHEN ptp.bap = 'Misc' THEN stmt.actual_bp_brokerage_amt + stmt.actual_tp_brokerage_amt + stmt.actual_tep_brokerage_amt + stmt.reward ELSE 0 END), + // 0 + // ) AS total_revenue + + // from insurers ins + // left join pt_co_share_details pt_co on ins.id = pt_co.insurer_id and pt_co.is_active = 1 + // left join co_share_stmt_details stmt on pt_co.id = stmt.co_share_id and stmt.is_active = 1 + // left join policy_transaction pt on pt_co.pt_id = pt.id and pt.is_active = 1 AND pt.policy_issue_date >= '$fromDate' AND pt.policy_issue_date <= '$toDate' + // left join policy_type ptp on pt.policy_type_id = ptp.id and ptp.policy_category = $category + // where ins.is_active = 1 + // group by ins.id + // ORDER BY + // health_premium DESC, + // misc_premium DESC, + // motor_premium DESC, + // engineering_premium DESC, + // fire_premium DESC, + // liability_premium DESC, + // life_premium DESC, + // marine_cargo_premium DESC, + // marine_hull_premium DESC; + + // "); + + // // Get the query + // $result = $builder->getResultArray(); + // $this->myLogger->logme('error', 'Query executed successfully.'); + // // dd(db_connect()->getLastQuery(),$result); + // return $result; + // } catch (\Exception $e) { + + // // Log the exception details for debugging + // $this->myLogger->logme('error', 'Error occurred in getBAPInsurerData: {message}', ['message' => $e->getMessage()]); + // $this->myLogger->logme('error', 'Stack trace: {trace}', ['trace' => $e->getTraceAsString()]); + // return []; + // } + // } + + // //Function for get BAP CLIENT wise data for premium , policy count , revenue only + // public function getBAPClientData($category = 0, $start_date = null, $end_date = null) + // { + + // try { + // $this->myLogger->logme('error', 'getBAPClientData function called'); + // $this->myLogger->logme('error', 'category : {data}', ['data' => $category]); + // $this->myLogger->logme('error', 'start date : {start_date} - end date {end_date} ', ['start_date' => $start_date, 'end_date' => $end_date]); + + // //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); + // } + + // $this->myLogger->logme('error', 'From date : {fromDate} - To date {toDate} ', ['fromDate' => $fromDate, 'toDate' => $toDate]); + + // $db = db_connect(); + // $builder = $db->query(" + + // SELECT + // c.id AS client_id, + // c.client_name, + + // -- Health Policies + // COALESCE(SUM(CASE WHEN ptp.bap = 'Health' AND pt.action_type = 'inception' THEN 1 ELSE 0 END), 0) AS health_policy_count, + // COALESCE(SUM(CASE WHEN ptp.bap = 'Health' THEN stmt.actual_bp_amt + stmt.actual_tp_amt + stmt.actual_tep_amt ELSE 0 END), 0) AS health_premium, + + // -- Misc Policies + // COALESCE(SUM(CASE WHEN ptp.bap = 'Misc' AND pt.action_type = 'inception' THEN 1 ELSE 0 END), 0) AS misc_policy_count, + // COALESCE(SUM(CASE WHEN ptp.bap = 'Misc' THEN stmt.actual_bp_amt + stmt.actual_tp_amt + stmt.actual_tep_amt ELSE 0 END), 0) AS misc_premium, + + // -- Motor Policies + // COALESCE(SUM(CASE WHEN ptp.bap = 'Motor' AND pt.action_type = 'inception' THEN 1 ELSE 0 END), 0) AS motor_policy_count, + // COALESCE(SUM(CASE WHEN ptp.bap = 'Motor' THEN stmt.actual_bp_amt + stmt.actual_tp_amt + stmt.actual_tep_amt ELSE 0 END), 0) AS motor_premium, + + // -- Engineering Policies + // COALESCE(SUM(CASE WHEN ptp.bap = 'Engineering' AND pt.action_type = 'inception' THEN 1 ELSE 0 END), 0) AS engineering_policy_count, + // COALESCE(SUM(CASE WHEN ptp.bap = 'Engineering' THEN stmt.actual_bp_amt + stmt.actual_tp_amt + stmt.actual_tep_amt ELSE 0 END), 0) AS engineering_premium, + + // -- Fire Policies + // COALESCE(SUM(CASE WHEN ptp.bap = 'Fire' AND pt.action_type = 'inception' THEN 1 ELSE 0 END), 0) AS fire_policy_count, + // COALESCE(SUM(CASE WHEN ptp.bap = 'Fire' THEN stmt.actual_bp_amt + stmt.actual_tp_amt + stmt.actual_tep_amt ELSE 0 END), 0) AS fire_premium, + + // -- Liability Policies + // COALESCE(SUM(CASE WHEN ptp.bap = 'Liability' AND pt.action_type = 'inception' THEN 1 ELSE 0 END), 0) AS liability_policy_count, + // COALESCE(SUM(CASE WHEN ptp.bap = 'Liability' THEN stmt.actual_bp_amt + stmt.actual_tp_amt + stmt.actual_tep_amt ELSE 0 END), 0) AS liability_premium, + + // -- Life Policies + // COALESCE(SUM(CASE WHEN ptp.bap = 'Life' AND pt.action_type = 'inception' THEN 1 ELSE 0 END), 0) AS life_policy_count, + // COALESCE(SUM(CASE WHEN ptp.bap = 'Life' THEN stmt.actual_bp_amt + stmt.actual_tp_amt + stmt.actual_tep_amt ELSE 0 END), 0) AS life_premium, + + // -- Marine Cargo Policies + // COALESCE(SUM(CASE WHEN ptp.bap = 'Marine Cargo' AND pt.action_type = 'inception' THEN 1 ELSE 0 END), 0) AS marine_cargo_policy_count, + // COALESCE(SUM(CASE WHEN ptp.bap = 'Marine Cargo' THEN stmt.actual_bp_amt + stmt.actual_tp_amt + stmt.actual_tep_amt ELSE 0 END), 0) AS marine_cargo_premium, + + // -- Marine Hull Policies + // COALESCE(SUM(CASE WHEN ptp.bap = 'Marine Hull' AND pt.action_type = 'inception' THEN 1 ELSE 0 END), 0) AS marine_hull_policy_count, + // COALESCE(SUM(CASE WHEN ptp.bap = 'Marine Hull' THEN stmt.actual_bp_amt + stmt.actual_tp_amt + stmt.actual_tep_amt ELSE 0 END), 0) AS marine_hull_premium, + + // -- Grand Totals + // COALESCE(SUM(CASE WHEN pt.action_type = 'inception' THEN 1 ELSE 0 END), 0) AS total_policy_count, + // COALESCE(SUM(stmt.actual_bp_amt + stmt.actual_tp_amt + stmt.actual_tep_amt), 0) AS total_premium + + // FROM clients c + // LEFT JOIN policy_transaction pt ON pt.client_id = c.id AND pt.is_active = 1 AND pt.policy_issue_date >= '$fromDate' AND pt.policy_issue_date <= '$toDate' + // LEFT JOIN policy_type ptp ON pt.policy_type_id = ptp.id + // LEFT JOIN pt_co_share_details ptco ON ptco.pt_id = pt.id AND ptco.is_active = 1 + // LEFT JOIN co_share_stmt_details stmt ON stmt.co_share_id = ptco.id AND stmt.is_active = 1 + // WHERE c.is_active = 1 + // AND ptp.policy_category = $category + // GROUP BY c.id + // ORDER BY + // health_premium DESC, + // misc_premium DESC, + // motor_premium DESC, + // engineering_premium DESC, + // fire_premium DESC, + // liability_premium DESC, + // life_premium DESC, + // marine_cargo_premium DESC, + // marine_hull_premium DESC + + // "); + + // // Get the query + // $result = $builder->getResultArray(); + // // dd(db_connect()->getLastQuery(),$result); + // return $result; + // } catch (\Exception $e) { + + // // Log the exception details for debugging + // $this->myLogger->logme('error', 'Error occurred in getBAPClientData: {message}', ['message' => $e->getMessage()]); + // $this->myLogger->logme('error', 'Stack trace: {trace}', ['trace' => $e->getTraceAsString()]); + // return []; + // } + // } + + // //Function for get CLIENT wise data for premium and policy count only + // public function getClientData($category = 0, $start_date = null, $end_date = null) + // { + + // try { + + // $this->myLogger->logme('error', 'getClientData function called'); + // $this->myLogger->logme('error', 'category : {data}', ['data' => $category]); + // $this->myLogger->logme('error', 'start date : {start_date} - end date {end_date} ', ['start_date' => $start_date, 'end_date' => $end_date]); + + // //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); + // } + + // $this->myLogger->logme('error', 'From date : {fromDate} - To date {toDate} ', ['fromDate' => $fromDate, 'toDate' => $toDate]); + + // $db = db_connect(); + // $builder = $db->query(" + + // select + // c.id as client_id, + // c.client_name, + + // ( + // select + // count(policy_transaction.id) + // from policy_transaction + // left join policy_type on policy_transaction.policy_type_id = policy_type.id + // where policy_transaction.client_id = c.id + // and policy_transaction.action_type = 'inception' + // 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 + // from co_share_stmt_details stmt + // left join pt_co_share_details ptco on stmt.co_share_id = ptco.id + // left join policy_transaction pt on ptco.pt_id = pt.id + // where pt.client_id = c.id + // 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 + // where c.is_active = 1 + // group by client_name + // order by premium desc + // "); + + // // Get the query + // $result = $builder->getResultArray(); + // // dd(db_connect()->getLastQuery(),$result); + // return $result; + // } catch (\Exception $e) { + + // // Log the exception details for debugging + // $this->myLogger->logme('error', 'Error occurred in getClientData: {message}', ['message' => $e->getMessage()]); + // $this->myLogger->logme('error', 'Stack trace: {trace}', ['trace' => $e->getTraceAsString()]); + // return []; + // } + // } + + // ---------------RENEWAL REPORT----------------------------------------------------------------------------------- + + + public function renewalReport() + { + if ($this->request->is('get')) { + + $default_start = new \DateTime(); + $data['default_end'] = $default_start->format('d-m-Y'); + $data['default_start'] = $default_start->modify('-60 days')->format('d-m-Y'); + $data['issuer'] = [1 => 'JIBS', 2 => 'Nhance']; + $data['page_name'] = "Renewal Report"; + return $this->loadLayout('renewal_search', $data); + + } else { + + $fromDate = $this->request->getPost('fromDate'); + $toDate = $this->request->getPost('toDate'); + $client_id = $this->request->getPost('client_id'); + $client_type = $this->request->getPost('client_type'); + $issuer = $this->request->getPost('issuer'); + + $data['issuer'] = [1 => 'JIBS', 2 => 'Nhance']; + $data['client_type'] = [1 => 'Group', 2 => 'Individual']; + $data['renewal_data'] = $this->policyTransactionModel->getRenewalReportData($fromDate, $toDate, $client_type, $client_id, $issuer); + // print_r($data); die; + $html = view('bds_renewal_report_list', $data); + return $this->respond(['status' => true, 'html' => $html], 200); + } + } +} diff --git a/app/Controllers/Chatbot/BotService.php b/app/Controllers/Chatbot/BotService.php new file mode 100644 index 00000000..ee3b57ad --- /dev/null +++ b/app/Controllers/Chatbot/BotService.php @@ -0,0 +1,110 @@ +reply('Welcome! Please choose an option:', [ + 'reply_markup' => json_encode([ + 'keyboard' => [ + ['Card Download'], + ['Network Hospital'], + ['Reimbursement Claim Process'], + ['Reimbursement Claim Status'], + ['New Policy'], + ['Renew Policy'] + ], + 'resize_keyboard' => true, + 'one_time_keyboard' => true + ]) + ]); + } + + public static function handleCardDownload(BotMan $bot) + { + $bot->reply('Please choose an option:', [ + 'reply_markup' => json_encode([ + 'keyboard' => [ + ['Download Card'], + ['Go Back'] + ], + 'resize_keyboard' => true, + 'one_time_keyboard' => true + ]) + ]); + } + + public static function handleNetworkHospital(BotMan $bot) + { + $bot->reply('Please choose an option:', [ + 'reply_markup' => json_encode([ + 'keyboard' => [ + ['Find Hospital'], + ['Go Back'] + ], + 'resize_keyboard' => true, + 'one_time_keyboard' => true + ]) + ]); + } + + public static function handleReimbursementClaimProcess(BotMan $bot) + { + $bot->reply('Please choose an option:', [ + 'reply_markup' => json_encode([ + 'keyboard' => [ + ['Submit Claim'], + ['Go Back'] + ], + 'resize_keyboard' => true, + 'one_time_keyboard' => true + ]) + ]); + } + + public static function handleReimbursementClaimStatus(BotMan $bot) + { + $bot->reply('Please choose an option:', [ + 'reply_markup' => json_encode([ + 'keyboard' => [ + ['Check Status'], + ['Go Back'] + ], + 'resize_keyboard' => true, + 'one_time_keyboard' => true + ]) + ]); + } + + public static function handleNewPolicy(BotMan $bot) + { + $bot->reply('Please choose an option:', [ + 'reply_markup' => json_encode([ + 'keyboard' => [ + ['Get Quote'], + ['Go Back'] + ], + 'resize_keyboard' => true, + 'one_time_keyboard' => true + ]) + ]); + } + + public static function handleRenewPolicy(BotMan $bot) + { + $bot->reply('Please choose an option:', [ + 'reply_markup' => json_encode([ + 'keyboard' => [ + ['Renew Now'], + ['Go Back'] + ], + 'resize_keyboard' => true, + 'one_time_keyboard' => true + ]) + ]); + } +} \ No newline at end of file diff --git a/app/Controllers/Chatbot/ClaimHandler.php b/app/Controllers/Chatbot/ClaimHandler.php new file mode 100644 index 00000000..b1839734 --- /dev/null +++ b/app/Controllers/Chatbot/ClaimHandler.php @@ -0,0 +1,34 @@ + "Reimbursement Claim Process: Here is a dummy response.", + 'reimbursement_claim_status' => "Reimbursement Claim Status: Here is a dummy response." + ]; + + if (isset($responses[$option])) { + $bot->reply($responses[$option]); + } else { + $bot->reply("Unknown claim option."); + } + + // Send Back Button + self::sendBackButton($bot); + } + + private static function sendBackButton(BotMan $bot) + { + $bot->reply(ButtonTemplate::create("Would you like to return?") + ->addButton(ElementButton::create("Go Back")->type('postback')->payload("main_menu")) + ); + } +} diff --git a/app/Controllers/Chatbot/EcardDownloadConversation.php b/app/Controllers/Chatbot/EcardDownloadConversation.php new file mode 100644 index 00000000..19fad42f --- /dev/null +++ b/app/Controllers/Chatbot/EcardDownloadConversation.php @@ -0,0 +1,65 @@ +showEcardMenu(); + } + + protected function showEcardMenu() + { + $policy_list = ChatbotHelper::getListOfPolicies(); + $buttons = []; + $question = 'Choose Policy to Download Ecard:'; + if(is_array($policy_list) && count($policy_list)) + { + foreach($policy_list as $policy) + { + // $question = Question::create("Choose Policy to Download Ecard:") + // ->addButtons([ + // Button::create("🔹 $policy['policy_name']")->value("$policy['emp_policy_id']"), + // Button::create("◀️ Go Back")->value("go_back"), + // ]); + $buttons[] = Button::create("🔹 {$policy['policy_name']}")->value($policy['emp_policy_id'].'#'.$policy['rand_string']); + } + } + else + { + $question = 'No policy found'; + } + $buttons = array_merge($buttons,[Button::create("◀️ Go Back")->value("go_back")]); + $question = Question::create($question) + ->addButtons($buttons); + + $this->bot->ask($question, function ($answer) { + // print_r($answer->getValue());die(); + switch ($answer->getValue()) { + case "go_back": + $this->bot->startConversation(new MainMenuConversation()); + break; + case is_string($answer->getValue()) && is_array(explode('#',$answer->getValue())) && count((explode('#',$answer->getValue()))) == 2: + + $link = base_url().'/download-e-card/' . explode('#',$answer->getValue())[1].'/1'; + $this->say('Click here to downlad: Ecard'); + + $this->bot->startConversation(new doYouWantToContinueConversation()); // ✅ Restart the + + break; + + default: + $this->say("Invalid selection. Please choose an option."); + $this->bot->startConversation(new EcardDownloadConversation()); // ✅ Restart the conversation + break; + } + }); + } +} diff --git a/app/Controllers/Chatbot/MainMenuConversation.php b/app/Controllers/Chatbot/MainMenuConversation.php new file mode 100644 index 00000000..2c9059f9 --- /dev/null +++ b/app/Controllers/Chatbot/MainMenuConversation.php @@ -0,0 +1,68 @@ +bot->types(); // Typing indicator for the first message + sleep(0.5); // Delay + $this->showMainMenu(); + } + + protected function showMainMenu() + { + $question = Question::create("Please choose") + ->addButtons([ + Button::create("📄 Ecard Download")->value("ecard_download"), + Button::create("🏥 Network Hospital")->value("network_hospital"), + Button::create("💰 Reimbursement Claim Process")->value("reimbursement_claim"), + Button::create("📑 Reimbursement Claim Status")->value("reimbursement_status"), + Button::create("🆕 New Policy")->value("new_policy"), + Button::create("🔄 Renew Policy")->value("renew_policy"), + ]); + + $this->bot->ask($question, function ($answer) { + switch ($answer->getValue()) { + case "ecard_download": + + // $message = ChatbotHelper::get_payload_data(); + // $this->say($message); + // $this->say("📄 Ecard Download Menu:"); + $this->bot->startConversation(new EcardDownloadConversation()); + break; + case "network_hospital": + $this->say("🏥 Network Hospital Menu:");log_message('error','Network Hospital clicked'); + $this->bot->startConversation(new NetworkHospitalConversation()); + break; + case "reimbursement_claim": + // $this->say("Reimbursement Claim Process selected. (Dummy Response)"); + $this->bot->startConversation(new ReimbursementClaimProcessConversation()); + break; + case "reimbursement_status": + $this->say("Reimbursement Claim Status selected. (Dummy Response)"); + $this->bot->startConversation(new ReimbursementClaimStatusConversation()); + + break; + case "new_policy": + $this->bot->startConversation(new policyConversation()); + break; + case "renew_policy": + $this->bot->startConversation(new policyConversation()); + break; + default: + $this->say("Invalid selection. Please choose an option."); + $this->bot->startConversation(new MainMenuConversation()); + break; + } + }); + } + +} diff --git a/app/Controllers/Chatbot/NetworkHospitalConversation.php b/app/Controllers/Chatbot/NetworkHospitalConversation.php new file mode 100644 index 00000000..10bc3b7d --- /dev/null +++ b/app/Controllers/Chatbot/NetworkHospitalConversation.php @@ -0,0 +1,82 @@ +bot->types(); // Typing indicator for the first message + sleep(0.5); // Delay + $this->showHospitalMenu(); + } + + protected function showHospitalMenu() + { + $policy_list = ChatbotHelper::getListOfPolicies(); + $buttons = []; + $question = 'Choose Policy:'; + if(is_array($policy_list) && count($policy_list)) + { + foreach($policy_list as $policy) + { + // $question = Question::create("Choose Policy to Download Ecard:") + // ->addButtons([ + // Button::create("🔹 $policy['policy_name']")->value("$policy['emp_policy_id']"), + // Button::create("◀️ Go Back")->value("go_back"), + // ]); + $buttons[] = Button::create("🔹 {$policy['policy_name']}")->value($policy['emp_policy_id'].'#'.$policy['rand_string']); + } + } + else + { + $question = 'No policy found'; + } + $buttons = array_merge($buttons,[Button::create("◀️ Go Back")->value("go_back")]); + $question = Question::create($question) + ->addButtons($buttons); + + // $this->bot->hears('.*', function ($bot) { + // $this->bot->types(); // Typing indicator for the first message + // sleep(0.5); // Delay + // }); + + $this->bot->ask($question, function ($answer) { + switch ($answer->getValue()) { + case is_string($answer->getValue()) && is_array(explode('#',$answer->getValue())) && count((explode('#',$answer->getValue()))) == 2: + + $client_poilicy_id = explode('#',$answer->getValue())[1]; + $hospital_link = ChatbotHelper::getHospitalLink($client_poilicy_id); + + if($hospital_link) + { + $this->say('Click here for hospital details'); + } + else + { + $this->say('No Data found, please contact support team'); + } + + $this->bot->startConversation(new doYouWantToContinueConversation()); + break; + case "go_back": + $this->bot->startConversation(new MainMenuConversation()); + break; + default: + $this->say("Invalid selection. Please choose an option."); + $this->bot->startConversation(new EcardDownloadConversation()); + break; + } + }); + } + +} diff --git a/app/Controllers/Chatbot/PolicyHandler.php b/app/Controllers/Chatbot/PolicyHandler.php new file mode 100644 index 00000000..9491ef9d --- /dev/null +++ b/app/Controllers/Chatbot/PolicyHandler.php @@ -0,0 +1,36 @@ + "Ecard Download: Here is a dummy response.", + 'network_hospital' => "Network Hospital: Here is a dummy response.", + 'new_policy' => "New Policy: Here is a dummy response.", + 'renew_policy' => "Renew Policy: Here is a dummy response." + ]; + + if (isset($responses[$option])) { + $bot->reply($responses[$option]); + } else { + $bot->reply("Unknown policy option."); + } + + // Send Back Button + self::sendBackButton($bot); + } + + private static function sendBackButton(BotMan $bot) + { + $bot->reply(ButtonTemplate::create("Would you like to return?") + ->addButton(ElementButton::create("Go Back")->type('postback')->payload("main_menu")) + ); + } +} diff --git a/app/Controllers/Chatbot/ReimbursementClaimProcessConversation.php b/app/Controllers/Chatbot/ReimbursementClaimProcessConversation.php new file mode 100644 index 00000000..ca3bf60a --- /dev/null +++ b/app/Controllers/Chatbot/ReimbursementClaimProcessConversation.php @@ -0,0 +1,36 @@ +bot->types(); // Typing indicator for the first message + sleep(0.5); // Delay + $this->claimProcess(); + } + + protected function claimProcess() + { + $res = ChatbotHelper::sendReimbursementProcessOverMail(); + if($res == true) + { + $this->say("Reimbursement process shared over your registered mail...!"); + } + else + { + $this->say("No email found in your profile / Please contact support team"); + } + + $this->bot->startConversation(new doYouWantToContinueConversation()); + + } +} diff --git a/app/Controllers/Chatbot/ReimbursementClaimStatusConversation.php b/app/Controllers/Chatbot/ReimbursementClaimStatusConversation.php new file mode 100644 index 00000000..4c6b58dc --- /dev/null +++ b/app/Controllers/Chatbot/ReimbursementClaimStatusConversation.php @@ -0,0 +1,47 @@ +claimStatus(); + } + + protected function claimStatus() + { + $question = Question::create("Do you Need Anything Else ?") + ->addButtons([ + Button::create("🔹 Yes I need some more Help")->value("yes"), + Button::create("🔹 No, Thank You")->value("no"), + // Button::create("◀️ Go Back")->value("go_back"), + ]); + + $this->bot->ask($question, function ($answer) { + switch ($answer->getValue()) { + case "yes": + + $this->say("Sure, How can I help you "); + $this->bot->startConversation(new MainMenuConversation()); + break; + case "no": + $this->say("Thank you for your time! If you need anything else, feel free to reach out. Goodbye!"); + break; + default: + $this->say("Invalid selection. Please choose an option."); + $this->askQuestion(); + break; + } + }); + } + +} diff --git a/app/Controllers/Chatbot/TypingMiddleware.php b/app/Controllers/Chatbot/TypingMiddleware.php new file mode 100644 index 00000000..047d246b --- /dev/null +++ b/app/Controllers/Chatbot/TypingMiddleware.php @@ -0,0 +1,27 @@ +myLogger = \Config\Services::mylogger(); + $this->myLogger->logme('error', 'MIDDLEWARE'); + + // Simulate typing indicator + $bot->types(); + sleep(0.1); // Cap delay at 5 seconds (convert to microseconds) + // Proceed to the next middleware or response + return $next($bot); + } +} diff --git a/app/Controllers/Chatbot/commonPolicyOptionConversations.php b/app/Controllers/Chatbot/commonPolicyOptionConversations.php new file mode 100644 index 00000000..e32c318b --- /dev/null +++ b/app/Controllers/Chatbot/commonPolicyOptionConversations.php @@ -0,0 +1,50 @@ +policyOptions(); + } + + protected function policyOptions() + { + $question = Question::create("Choose Policy Type:") + ->addButtons([ + Button::create("🔹 Upload Vehicle Details")->value("upload_vehicle_details"), + Button::create("🔹 Talk to our Service Executive")->value("service_executive"), + Button::create("◀️ Go Back")->value("go_back"), + ]); + + $this->bot->ask($question, function ($answer) { + switch ($answer->getValue()) { + case "upload_vehicle_details": + // $cityName = $response->getText(); + $this->bot->startConversation(new vehicleFormConversation()); + break; + case "service_executive": + $this->bot->startConversation(new serviceExecutiveConversation()); + break; + case "go_back": + $this->bot->startConversation(new MainMenuConversation()); + break; + default: + $this->say("Invalid selection. Please choose an option."); + $this->policyOptions(); + break; + } + }); + } + +} diff --git a/app/Controllers/Chatbot/doYouWantToContinueConversation.php b/app/Controllers/Chatbot/doYouWantToContinueConversation.php new file mode 100644 index 00000000..ba5c1864 --- /dev/null +++ b/app/Controllers/Chatbot/doYouWantToContinueConversation.php @@ -0,0 +1,50 @@ +bot->types(); // Typing indicator for the first message + sleep(3); // Delay + $this->askQuestion(); + } + + protected function askQuestion() + { + $question = Question::create("Do you Need Anything Else ?") + ->addButtons([ + Button::create("🔹 Yes I need some more Help")->value("yes"), + Button::create("🔹 No, Thank You")->value("no"), + // Button::create("◀️ Go Back")->value("go_back"), + ]); + + $this->bot->ask($question, function ($answer) { + switch ($answer->getValue()) { + case "yes": + + // $this->say("Sure, How can I help you "); + $this->bot->startConversation(new MainMenuConversation()); + break; + case "no": + $this->say("Thank you for your time! If you need anything else, feel free to reach out. Goodbye!"); + break; + default: + $this->say("Invalid selection. Please choose an option."); + $this->askQuestion(); + break; + } + }); + } + +} diff --git a/app/Controllers/Chatbot/fourWheelerOptionsConversations.php b/app/Controllers/Chatbot/fourWheelerOptionsConversations.php new file mode 100644 index 00000000..6c850c03 --- /dev/null +++ b/app/Controllers/Chatbot/fourWheelerOptionsConversations.php @@ -0,0 +1,50 @@ +show4WOptions(); + } + + protected function show4WOptions() + { + $question = Question::create("Choose Policy Type:") + ->addButtons([ + Button::create("🔹 Comprehensive")->value("comp"), + Button::create("🔹 Third-Party Only")->value("3p"), + Button::create("◀️ Go Back")->value("go_back"), + ]); + + $this->bot->ask($question, function ($answer) { + switch ($answer->getValue()) { + case "3p": + // $cityName = $response->getText(); + $this->bot->startConversation(new commonPolicyOptionConversations()); + break; + case "comp": + $this->bot->startConversation(new commonPolicyOptionConversations()); + break; + case "go_back": + $this->bot->startConversation(new MainMenuConversation()); + break; + default: + $this->say("Invalid selection. Please choose an option."); + $this->showHospitalMenu(); + break; + } + }); + } + +} diff --git a/app/Controllers/Chatbot/hospitalPolicyConversation.php b/app/Controllers/Chatbot/hospitalPolicyConversation.php new file mode 100644 index 00000000..4a29c918 --- /dev/null +++ b/app/Controllers/Chatbot/hospitalPolicyConversation.php @@ -0,0 +1,49 @@ +showMediclaimPolicyOptions(); + } + + protected function showMediclaimPolicyOptions() + { + $question = Question::create("Choose Policy Type:") + ->addButtons([ + Button::create("🔹 Individual")->value("individual"), + Button::create("🔹 Floater")->value("floater"), + Button::create("◀️ Go Back")->value("go_back"), + ]); + + $this->bot->ask($question, function ($answer) { + switch ($answer->getValue()) { + case "individual": + $this->bot->startConversation(new commonPolicyOptionConversations()); + break; + case "floater": + $this->bot->startConversation(new commonPolicyOptionConversations()); + break; + case "go_back": + $this->bot->startConversation(new MainMenuConversation()); + break; + default: + $this->say("Invalid selection. Please choose an option."); + $this->showHospitalMenu(); + break; + } + }); + } + +} diff --git a/app/Controllers/Chatbot/medicalClaimOptionConversations.php b/app/Controllers/Chatbot/medicalClaimOptionConversations.php new file mode 100644 index 00000000..db66cda3 --- /dev/null +++ b/app/Controllers/Chatbot/medicalClaimOptionConversations.php @@ -0,0 +1,50 @@ +showMediclaimOptions(); + } + + protected function showMediclaimOptions() + { + $question = Question::create("Choose Policy Type:") + ->addButtons([ + Button::create("🔹 Individual")->value("individual"), + Button::create("🔹 Floater")->value("floater"), + Button::create("◀️ Go Back")->value("go_back"), + ]); + + $this->bot->ask($question, function ($answer) { + switch ($answer->getValue()) { + case "individual": + // $cityName = $response->getText(); + $this->bot->startConversation(new commonPolicyOptionConversations()); + break; + case "floater": + $this->bot->startConversation(new commonPolicyOptionConversations()); + break; + case "go_back": + $this->bot->startConversation(new MainMenuConversation()); + break; + default: + $this->say("Invalid selection. Please choose an option."); + $this->showHospitalMenu(); + break; + } + }); + } + +} diff --git a/app/Controllers/Chatbot/policyConversation.php b/app/Controllers/Chatbot/policyConversation.php new file mode 100644 index 00000000..9a3c2669 --- /dev/null +++ b/app/Controllers/Chatbot/policyConversation.php @@ -0,0 +1,55 @@ +showNewPolicy(); + } + + protected function showNewPolicy() + { + $question = Question::create("Choose Policy Type:") + ->addButtons([ + Button::create("🏍️ 2 Wheeler")->value("2_wheeler"), + Button::create("🚗 4 Wheeler")->value("4_wheeler"), + Button::create("🩺 Medical Claim")->value("mediclaim"), + Button::create("◀️ Go Back")->value("go_back"), + ]); + + $this->bot->ask($question, function ($answer) { + switch ($answer->getValue()) { + case "2_wheeler": + // $cityName = $response->getText(); + $this->bot->startConversation(new twoWheelerOptionsConversations()); + break; + case "4_wheeler": + $this->bot->startConversation(new fourWheelerOptionsConversations()); + break; + case "mediclaim": + $this->bot->startConversation(new medicalClaimOptionConversations()); + + break; + case "go_back": + $this->bot->startConversation(new MainMenuConversation()); + break; + default: + $this->say("Invalid selection. Please choose an option."); + $this->showHospitalMenu(); + break; + } + }); + } + +} diff --git a/app/Controllers/Chatbot/serviceExecutiveConversation.php b/app/Controllers/Chatbot/serviceExecutiveConversation.php new file mode 100644 index 00000000..64a3e842 --- /dev/null +++ b/app/Controllers/Chatbot/serviceExecutiveConversation.php @@ -0,0 +1,60 @@ +askServiceExecutive(); + } + + protected function askServiceExecutive() + { + $mobile = ChatbotHelper::getPhoneNumber(); // Assuming this fetches the user's phone number + $question = Question::create("Is this Your Mobile Number: $mobile") + ->addButtons([ + Button::create("✅ Yes")->value("yes"), + Button::create("❌ No")->value("no"), + Button::create("◀️ Go Back")->value("go_back"), + ]); + + $this->bot->ask($question, function ($answer) { + switch ($answer->getValue()) { + case "yes": + $this->say("Our executive will call you at the earliest."); + $this->bot->startConversation(new doYouWantToContinueConversation()); + break; + + case "no": + $this->ask('Enter Your Mobile Number?', function ($response) { + $this->mobile_number = $response->getText(); + $this->bot->userStorage()->save([ + 'mobile_number' => $this->mobile_number + ]); + // Use 'use' to bring the class context into the closure + $this->say("Our executive will call you at the earliest."); + $this->bot->startConversation(new doYouWantToContinueConversation()); + }); + break; + + case "go_back": + $this->bot->startConversation(new MainMenuConversation()); + break; + + default: + $this->say("Invalid selection. Please choose an option."); + $this->askServiceExecutive(); + break; + } + }); + } + +} diff --git a/app/Controllers/Chatbot/twoWheelerOptionsConversations.php b/app/Controllers/Chatbot/twoWheelerOptionsConversations.php new file mode 100644 index 00000000..44c1f4da --- /dev/null +++ b/app/Controllers/Chatbot/twoWheelerOptionsConversations.php @@ -0,0 +1,50 @@ +show2WOptions(); + } + + protected function show2WOptions() + { + $question = Question::create("Choose Policy Type:") + ->addButtons([ + Button::create("🔹 Third-Party")->value("3p"), + Button::create("🔹 Comprehensive")->value("comp"), + Button::create("◀️ Go Back")->value("go_back"), + ]); + + $this->bot->ask($question, function ($answer) { + switch ($answer->getValue()) { + case "3p": + // $cityName = $response->getText(); + $this->bot->startConversation(new commonPolicyOptionConversations()); + break; + case "comp": + $this->bot->startConversation(new commonPolicyOptionConversations()); + break; + case "go_back": + $this->bot->startConversation(new MainMenuConversation()); + break; + default: + $this->say("Invalid selection. Please choose an option."); + $this->showHospitalMenu(); + break; + } + }); + } + +} diff --git a/app/Controllers/Chatbot/vehicleFormConversation.php b/app/Controllers/Chatbot/vehicleFormConversation.php new file mode 100644 index 00000000..aa80c550 --- /dev/null +++ b/app/Controllers/Chatbot/vehicleFormConversation.php @@ -0,0 +1,83 @@ +askVehicleName(); + } + + protected function askVehicleName() + { + $this->ask('Enter Vehicle Name ?', function ($response) { + $this->vehicleName = $response->getText(); + if (empty($this->vehicleName)) { + $this->say('Vehicle Name Cannot be Empty'); + return $this->askVehicleName(); // Re-ask if empty + } + $this->askVehicleYOM(); // Ask next question + }); + } + + protected function askVehicleYOM() + { + $this->ask('Enter Vehicle Year of Manufacture ?', function ($response) { + $this->vehicleYOM = $response->getText(); + if (empty($this->vehicleYOM)) { + $this->say('Vehicle Year of Manufacture Cannot be Empty'); + return $this->askVehicleYOM(); // Re-ask if empty + } + $this->askVehicleEngineNo(); // Ask next question + }); + } + + protected function askVehicleEngineNo() + { + $this->ask('Enter Vehicle Engine Number ?', function ($response) { + $this->vehicleEngineNo = $response->getText(); + if (empty($this->vehicleEngineNo)) { + $this->say('Vehicle Engine Number Cannot be Empty'); + return $this->askVehicleEngineNo(); // Re-ask if empty + } + $this->askVehicleInvoiceNo(); // Ask next question + }); + } + + protected function askVehicleInvoiceNo() + { + $this->ask('Enter Vehicle Invoice Number ?', function ($response) { + $this->vehicleInvoiceNo = $response->getText(); + if (empty($this->vehicleInvoiceNo)) { + $this->say('Vehicle Invoice Number Cannot be Empty'); + return $this->askVehicleInvoiceNo(); // Re-ask if empty + } + $this->storeVehicleData(); // Proceed to store the data + }); + } + + protected function storeVehicleData() + { + // Save all collected data to user storage + $this->bot->userStorage()->save([ + 'vehicle_name' => $this->vehicleName, + 'vehicle_yom' => $this->vehicleYOM, + 'vehicle_engine_no' => $this->vehicleEngineNo, + 'vehicle_invoice_no' => $this->vehicleInvoiceNo + ]); + + $this->say('Vehicle Information Saved!'); + $this->bot->startConversation(new doYouWantToContinueConversation()); + + } +} diff --git a/app/Controllers/ChatbotControllerNew.php b/app/Controllers/ChatbotControllerNew.php new file mode 100644 index 00000000..4311a9bb --- /dev/null +++ b/app/Controllers/ChatbotControllerNew.php @@ -0,0 +1,105 @@ +myLogger = \Config\Services::mylogger(); + $this->session = \Config\Services::session(); + + $this->myLogger->logme('error', 'CALLED'); + + // Load BotMan driver + DriverManager::loadDriver(WebDriver::class); + + // Setup BotMan with cache + $cache = new SymfonyCache(new FilesystemAdapter()); + $this->botman = BotManFactory::create([], $cache); + // Create a new instance of BotMan + // $botman = resolve('botman'); + + // Attach the TypingMiddleware + // $this->botman->middleware->received(new TypingMiddleware()); + + + // Retrieve user ID from session or request + $extras = request()->getGet('conf'); + $extras = json_decode($extras); + $router = service('router'); + $method = $router->methodName(); + $this->myLogger->logme('error', $method); + + if (isset($extras) && $method == 'widget') { + $extras = $extras->parameters; + $this->session->set('CHATBOT_USER_ID', $extras->employee_id); + } + + $this->myLogger->logme('error', $this->session->get('CHATBOT_USER_ID')); + + // print_rr(ChatbotHelper::getListOfPolicies());die(); + } + + public function index() + { + + $this->botman->hears('.*', function ($bot) { + $bot->types(); // Typing indicator for the first message + sleep(0.5); // Delay + }); + // Start the Main Menu when user says "hi" or "start" + $this->botman->hears('start|hi|hello', function (BotMan $bot) { + $bot->reply('Hi how can i assit?'); + $bot->startConversation(new MainMenuConversation()); + }); + + + + // $this->botman->hears('main_menu', function (BotMan $bot) { + // BotService::sendMainOptions($bot); + // }); + + // // Register Option Handlers + // $this->registerHandlers(); + + // Listen for Messages + $this->botman->listen(); + } + + private function registerHandlers() + { + // Handling Policy and Claims + $this->botman->hears('group:policy:{option}', [\App\Controllers\Chatbot\PolicyHandler::class, 'handle']); + $this->botman->hears('group:claim:{option}', [\App\Libraries\Chatbot\ClaimHandler::class, 'handle']); + + + } + + public function chatbot() + { + $this->loadLayout('chatbot.php'); + } + + public function widget() + { + echo view('widget.php'); + } +} diff --git a/app/Controllers/ClientController.php b/app/Controllers/ClientController.php index 9e964863..6714a44d 100755 --- a/app/Controllers/ClientController.php +++ b/app/Controllers/ClientController.php @@ -44,8 +44,8 @@ use App\Controllers\EmpDataServiceController; use App\Controllers\GoogleDriveController; use App\Helpers\sendMailNotification; - - +use App\Models\RFQModel; +use App\Models\TicketMasterModel; class ClientController extends AdminController { @@ -183,9 +183,12 @@ class ClientController extends AdminController print_rr($attachments); } + //Function for Testing Member Review and Summery Confirmation Mail public function testingForReviewMail($client_id = 77, $emp_code = 'EMP001-K1', $mail_active = 0) //this function for only tsesting some logics not use for business logic { + // dd($client_id, $emp_code, $mail_active); + $client_policy_ids = $this->employeeModel ->select('employee_polices.client_policy_id') ->join('employee_polices', 'employees.id = employee_polices.employee_id') @@ -213,7 +216,7 @@ class ClientController extends AdminController { $empData = $this->employeeModel->where('emp_code', $emp_code )->where('client_id', $client_id ) ->where('is_active', 1 )->findAll(); - + // dd($empData); $filteredEmpData = array_filter($empData, fn($item) => $item['relationship'] === 'Self'); // dd($filteredEmpData); @@ -258,45 +261,45 @@ class ClientController extends AdminController $this->myLogger->logme("info", $mail_send_return); } - if (isset($wholeData[0])) { + // if (isset($wholeData)) { - $params['common']['mail_type'] = 'account_maneger_summary_mail'; - $account_manager_wholeData =sendMailNotification::sendMailNotification('account_maneger_summary_mail', $params); - // print_r($account_manager_wholeData); die; + // $params['common']['mail_type'] = 'account_maneger_summary_mail'; + // $account_manager_wholeData =sendMailNotification::sendMailNotification('account_maneger_summary_mail', $params); + // // print_r($account_manager_wholeData); die; - if($account_manager_wholeData != null && $account_manager_wholeData != '' && count($account_manager_wholeData)) - { - if($mail_active > 0){ + // if($account_manager_wholeData != null && $account_manager_wholeData != '' && count($account_manager_wholeData)) + // { + // if($mail_active > 0){ - foreach ($account_manager_wholeData as $key => $value) { - $mail_send_return1 = MailHelper::send_email($value); - $this->myLogger->logme("info", $mail_send_return1); - } + // foreach ($account_manager_wholeData as $key => $value) { + // // $mail_send_return1 = MailHelper::send_email($value); + // $this->myLogger->logme("info", $mail_send_return1); + // } - } + // } - }else{ - $this->myLogger->logme("error", 'Account Manager Mail Configuration not Enable for this client'); - } + // }else{ + // $this->myLogger->logme("error", 'Account Manager Mail Configuration not Enable for this client'); + // } - $params['common']['mail_type'] = 'client_hr_summary_mail'; - $client_hr_wholeData =sendMailNotification::sendMailNotification('client_hr_summary_mail', $params); - // print_r($client_hr_wholeData); die; + // $params['common']['mail_type'] = 'client_hr_summary_mail'; + // $client_hr_wholeData =sendMailNotification::sendMailNotification('client_hr_summary_mail', $params); + // // print_r($client_hr_wholeData); die; - if($client_hr_wholeData != null && $client_hr_wholeData != '' &&count($client_hr_wholeData)) - { - if($mail_active > 0){ + // if($client_hr_wholeData != null && $client_hr_wholeData != '' &&count($client_hr_wholeData)) + // { + // if($mail_active > 0){ - foreach ($client_hr_wholeData as $key => $value) { - $mail_send_return2 = MailHelper::send_email($value); - $this->myLogger->logme("info", $mail_send_return2); - } - } + // foreach ($client_hr_wholeData as $key => $value) { + // // $mail_send_return2 = MailHelper::send_email($value); + // $this->myLogger->logme("info", $mail_send_return2); + // } + // } - }else{ - $this->myLogger->logme("error", 'Client HR Mail Configuration not Enable for this client'); - } - } + // }else{ + // $this->myLogger->logme("error", 'Client HR Mail Configuration not Enable for this client'); + // } + // } }else{ $this->myLogger->logme("error", 'Member Review Mail Configuration not Enable for this client'); @@ -317,6 +320,123 @@ class ClientController extends AdminController // return $this->respond(['status' => 'success','code' => 200,'data' => [] ], 200); } + //Function for Send Member Review and Summery Confirmation Mail + public function sendMemberReviewConfirmationMail($client_id = 77, $emp_code = 'EMP001-K1', $mail_active = 0) + { + $client_policy_ids = $this->employeeModel + ->select('employee_polices.client_policy_id') + ->join('employee_polices', 'employees.id = employee_polices.employee_id') + ->where('employees.client_id', $client_id) + ->where('employees.emp_code', $emp_code) + ->where('employee_polices.is_active', 1) + ->where('employees.is_active', 1) + ->findAll(); + + $client_policy_ids2 = array_column($client_policy_ids, 'client_policy_id'); + $client_policy_id = array_unique($client_policy_ids2); + + if (!is_null($client_policy_id) && is_array($client_policy_id)) { + + $empData = $this->employeeModel + ->where('emp_code', $emp_code) + ->where('client_id', $client_id) + ->where('is_active', 1) + ->findAll(); + + $filteredEmpData = array_filter($empData, fn($item) => $item['relationship'] === 'Self'); + + if (empty($filteredEmpData)) { + return $this->respond([ + 'status' => 'error', + 'code' => 404, + 'message' => 'No active employee data found for the given criteria.', + ], 404); + } + + $array_list = []; + foreach ($client_policy_id as $value) { + $find = $this->employeeModel->getEmpFamilybyEmpCode( + client_policy_id: $value, + emp_code: $emp_code, + client_id: $client_id, + emp_status: ['draft', 'enrolled'], + policy_status: ['draft', 'enrolled'] + ); + + if (count($find) > 0) { + $array_list[] = $find; + } + } + + $notification = $this->notificationModel + ->where('client_id', $client_id) + ->where('template_name', 'member_review_and_summary_mail') + ->first(); + + if ($notification && $notification['enabled'] == 1) { + + $params = [ + 'array_list' => $array_list, + 'client_policy_id' => $client_policy_id, + 'emp_code' => $emp_code, + 'client_id' => $client_id, + 'notification' => $notification, + 'common' => [ + 'client_id' => $filteredEmpData[0]['client_id'], + 'client_branch_id' => $filteredEmpData[0]['client_branch_id'], + 'client_policy_id' => null, + 'employee_policy_id' => null, + 'employee_id' => $filteredEmpData[0]['id'], + 'mail_type' => 'member_review_and_summary_mail', + ], + ]; + + $wholeData = sendMailNotification::sendMailNotification('member_review_and_summary_mail', $params); + + if ($mail_active > 0) { + + $mail_send_result = MailHelper::send_email($wholeData[0]); + + if ($mail_send_result['status'] === 'success') { + return $this->respond([ + 'status' => 'success', + 'code' => 200, + 'message' => 'Email sent successfully.', + 'response' => $mail_send_result, + ], 200); + } else { + return $this->respond([ + 'status' => 'error', + 'code' => 500, + 'message' => 'Failed to send email.', + 'details' => $mail_send_result, + ], 500); + } + } + + return $this->respond([ + 'status' => 'success', + 'code' => 200, + 'message' => 'Notification prepared but email not sent as mail_active is 0.', + 'data' => $wholeData, + ], 200); + } + + return $this->respond([ + 'status' => 'error', + 'code' => 400, + 'message' => 'Member Review Mail configuration is not enabled for this client.', + ], 400); + } + + return $this->respond([ + 'status' => 'error', + 'code' => 404, + 'message' => 'No active client policy IDs found.', + ], 404); + } + + //-------------------------------------------------------------------------------------------------------- public function index() @@ -1056,6 +1176,7 @@ class ClientController extends AdminController $data['disclaimer'] = $this->request->getPost('disclaimer'); $data['is_member_modify_allowed'] = $this->request->getPost('is_member_modify_allowed') ? 1 : 0; $data['enrolment_visibility'] = $this->request->getPost('enrolment_visibility') ? 1 : 0; + $data['is_lgbtq'] = $this->request->getPost('is_lgbtq') ? 1 : 0; @@ -1188,6 +1309,7 @@ class ClientController extends AdminController $data['policy_start_date'] = change_date_format($this->request->getPost('policy_start_date'), 'd-m-Y', 'Y-m-d'); $data['policy_end_date'] = change_date_format($this->request->getPost('policy_end_date'), 'd-m-Y', 'Y-m-d'); $data['is_member_modify_allowed'] = $this->request->getPost('is_member_modify_allowed') ? 1 : 0; + $data['is_lgbtq'] = $this->request->getPost('is_lgbtq') ? 1 : 0; if ($data['inception_type'] == 2) { $data['open_date'] = change_date_format($this->request->getPost('open_date'), 'd-m-Y', 'Y-m-d'); $data['close_date'] = change_date_format($this->request->getPost('close_date'), 'd-m-Y', 'Y-m-d'); @@ -3408,7 +3530,10 @@ class ClientController extends AdminController public function getCDAccNoByClientAndInsurer($client, $insurer) { - $cdmData = $this->CDMasterModel->where('client_id', $client)->where('insurer_id', $insurer)->findAll(); + $cdmData = $this->CDMasterModel + ->where('client_id', $client) + ->where('insurer_id', $insurer) + ->findAll(); if ($cdmData) { return $this->respond(['status' => true, 'data' => $cdmData], 200); @@ -3831,24 +3956,27 @@ class ClientController extends AdminController public function sendextraparam() { - $batch_data = [ - 'client_id' => 17, - 'client_policy_id' => 30, - 'client_branch_id' => 18, - 'event_type' => "inception", - ]; - - // $batch_data['insurer_or_tpa'] = 'insurer'; - $batch_data['insurer_or_tpa'] = 'tpa'; + // ---------- EMP SERVICE CONTROLLER -------------------------------------------------------------------------------- - // dd($this->request); - // $employeeRestController = new EmployeeServiceController(); - // $employeeRestController->employeesOnboardPreprocess(['file_id' => 721]); - + $employeeRestController = new EmployeeServiceController(); + // $employeeRestController->excelFileDataValidation(['file_id' => 823]); + // $employeeRestController->employeesOnboardPreprocess(['file_id' => 823]); // $r = Jobs::addJob(['job_name' => 'employeesEnrollmentInsert','payload' => ['file_id' => 721]]); + // ----------EMP DATA SERVICE CONTROLLER-------------------------------------------------------------------------------- + + // $batch_data = [ + // 'client_id' => 17, + // 'client_policy_id' => 30, + // 'client_branch_id' => 18, + // 'event_type' => "inception", + // ]; + + // $batch_data['insurer_or_tpa'] = 'insurer'; + // $batch_data['insurer_or_tpa'] = 'tpa'; + // $dashBoardController = new DashboardController(); // $client_policy_data = $this->clientPolicyModel->getPolicyDetailsForRemainder($client_id=159, $client_branch_id=126); // $dashBoardController->sendRemainderMail($client_policy_data); @@ -3877,33 +4005,91 @@ class ClientController extends AdminController // $EmpDataServiceController = new EmpDataServiceController(); // $EmpDataServiceController->importInceptionFileValidation(['file_id' => 160]); - $EmpDataServiceController = new EmpDataServiceController(); + // $EmpDataServiceController = new EmpDataServiceController(); // $EmpDataServiceController->importInceptionUpdateTPAandUHID(['file_id' => 162]); // $EmpDataServiceController->importInceptionFileValidation(['file_id' => 162]); // $EmpDataServiceController->importDeletionValidation(['file_id' => 171]); // $EmpDataServiceController->importDeletionUpdateEndorsementID(['file_id' => 171]); // $EmpDataServiceController->importCorrectionUpdateEndorsementID(['file_id' => 188]); - $array = [ - "employeeIds" => ["12800", "12798", "12797", "12799"], - "client_id" => "159", - "client_policy_id" => "336", - "client_branch_id" => "126", - "cd_ac_no" => "Apple_123", - "endorsement_no" => "ENDORSEMENT_ID", - "count" => 4, - "event_name" => "deletion", - "policy_name" => "GMC", - "user_id" => "1" - ]; + + // $array = [ + // "employeeIds" => ["12800", "12798", "12797", "12799"], + // "client_id" => "159", + // "client_policy_id" => "336", + // "client_branch_id" => "126", + // "cd_ac_no" => "Apple_123", + // "endorsement_no" => "ENDORSEMENT_ID", + // "count" => 4, + // "event_name" => "deletion", + // "policy_name" => "GMC", + // "user_id" => "1" + // ]; // $EmpDataServiceController->cashDepositCalculationForDeletion($array); - // $employeeRestController = new EmployeeServiceController(); - // $employeeRestController->employeesOnboardPreprocess(['file_id' => 757]); - // $result = $this->employeePolicyModel->getInceptionEmployeeDataForExportExcel($batch_data); // dd(db_connect()->getLastQuery()); + // ------------- LEADS CONTROLLER ---------------------------------------------------------- + + // $LeadsController = new LeadsController(); + // $RFQModel = new RFQModel(); + + // $data = $RFQModel->where('is_active', 1)->where('lead_id', 40)->first(); + // // dd($data); + // $policy_type = 2; + // $proposel_name = "Proposal 2"; + // $insurer_name = "ICICI-P-ICICI002-V1"; + // $jsonArray = json_decode($data['json'], true); + // // dd($jsonArray); + + // $returndata = $LeadsController->convertQCRJsonToPolicyTerms($jsonArray, $policy_type, $proposel_name, $insurer_name); + // dd($returndata); + + // -----------BDS REPORT CONTROLLER--------------------------------------------------------------------------------- + + // $BDSReportController = new BDSReportController(); + + // $data['data'] = $BDSReportController->getBAPInsurerData(); + + // return $this->loadLayout('irda_bap_insurer_report_list', $data); + + // $data['data'] = $BDSReportController->getBAPClientData(); + // return $this->loadLayout('irda_bap_client_report_list', $data); + + // $data['data'] = $BDSReportController->getClientData(1); + // return $this->loadLayout('irda_client_report_list', $data); + + // $BDSReportController->getBAPClientData(); + + //-------------------------------------------------------------------------------------------------------- + + // $email_id = 'venkateshraman786@gmail.com'; + // $common = ['mail_type'=>'test_mail_cli']; + // $bcc = "vitvelz@gmail.com"; + + // $data = db_connect() + // ->table('jobs') + // ->where('id', 2264) + // ->get() + // ->getResultArray(); + + // $data = json_decode($data[0]['payload'], true); + + // // dd($data); + // // Send email and get response + // $result = MailHelper::send_email($data[0]); + // echo json_encode($result); + // log_message('error',json_encode($result)); + + //-------------------------------------------------------------------------------------------------------- + + // $ticketModel = new TicketMasterModel(); + // $reportData['data'] = $ticketModel->getTATReport(1); + // print_rr($reportData); + // $this->loadLayout('tat_report_band_wise_list', $reportData); + // $data = $ticketModel->getTATReport(1); + } // ------------------------------------------------------------------------------------------------------- @@ -3948,4 +4134,191 @@ class ClientController extends AdminController } } + public function getCDAmount() + { + $cd_ac_pk = $this->request->getGet('cd_ac_pk'); + + $cd_amount = $this->clientDepositModel + ->where('is_active', 1) + ->where('cd_ac_pk', $cd_ac_pk) + ->orderBy('id', 'desc') + ->first(); + + if($cd_amount){ + return $this->respond(['status' => true, 'code' => 200, 'data' => $cd_amount], 200); + } else { + return $this->respond(['status' => false, 'code' => 404, 'message' => 'no data found'], 200); + } + } + + // -----------Function for Claim Module-------------------------------------------------------------------------------------------- + + public function getTheEmpDataForClaim($param, $type = null) + { + // Construct the base query + $data = $this->clientPolicyModel + ->select(" + clients.id AS client_id, + clients.client_name, + insurers.id AS insurer_id, + insurers.name AS insurer_name, + tpa.id AS tpa_id, + tpa.name AS tpa_name, + employees.id AS emp_id, + employees.name AS emp_name, + employees.emp_code, + employees.mobile AS emp_mobile, + employees.email_corporate AS emp_email, + employees.relationship AS emp_relationship, + employee_polices.uhid AS policy_no + ") + ->join('clients', 'client_policy.client_id = clients.id', 'left') + ->join('insurers', 'client_policy.insurer_id = insurers.id', 'left') + ->join('tpa', 'client_policy.tpa_id = tpa.id', 'left') + ->join('employees', 'clients.id = employees.client_id', 'left') + ->join('employee_polices', 'employees.id = employee_polices.employee_id', 'left') + ->where('client_policy.is_active', 1) + ->where('insurers.is_active', 1) + ->where('tpa.is_active', 1) + ->where('employees.is_active', 1) + ->where('employees.relationship', "Self") + ->where('employee_polices.is_active', 1) + ->where('client_policy.id', $param) + ->findAll(); + + $dataForClientAndInsurer = $this->clientPolicyModel + ->select(" + clients.id AS client_id, + clients.client_name, + insurers.id AS insurer_id, + insurers.name AS insurer_name, + tpa.id AS tpa_id, + tpa.name AS tpa_name, + ") + ->join('clients', 'client_policy.client_id = clients.id', 'left') + ->join('insurers', 'client_policy.insurer_id = insurers.id', 'left') + ->join('tpa', 'client_policy.tpa_id = tpa.id', 'left') + ->where('client_policy.id', $param) + ->first(); + + $memberData = []; + + // Respond based on the query result + if (!empty($data) || !empty($dataForClientAndInsurer)) { + return $this->respond([ + 'status' => true, + 'code' => 200, + 'message' => 'Data found', + 'data' => $data, + 'param' => $param, + 'type' => $type, + 'dataForClientAndInsurer' => $dataForClientAndInsurer, + 'memberData' => $memberData + ], 200); + } else { + return $this->respond([ + 'status' => false, + 'code' => 404, + 'message' => 'No data found', + 'param' => $param, + 'type' => $type, + 'dataForClientAndInsurer' => $dataForClientAndInsurer, + 'memberData' => $memberData + ], 404); + } + } + + public function getTheEmpDataForClaimSearchByMobile($param, $type = 'mobile') + { + $field_name = 'employees.' . $type; + + // Construct the base query + $data = $this->clientPolicyModel + ->select(" + clients.id AS client_id, + clients.client_name, + insurers.id AS insurer_id, + insurers.name AS insurer_name, + tpa.id AS tpa_id, + tpa.name AS tpa_name, + employees.id AS emp_id, + employees.name AS emp_name, + employees.emp_code, + employees.mobile AS emp_mobile, + employees.email_corporate AS emp_email, + employees.relationship AS emp_relationship, + employee_polices.uhid AS policy_no, + employee_polices.tpa_id AS tpa_no + ") + ->join('clients', 'client_policy.client_id = clients.id', 'left') + ->join('insurers', 'client_policy.insurer_id = insurers.id', 'left') + ->join('tpa', 'client_policy.tpa_id = tpa.id', 'left') + ->join('employees', 'clients.id = employees.client_id', 'left') + ->join('employee_polices', 'employees.id = employee_polices.employee_id', 'left') + ->where('client_policy.is_active', 1) + ->where('insurers.is_active', 1) + ->where('tpa.is_active', 1) + ->where('employees.is_active', 1) + ->where('employees.relationship', "Self") + ->where('employee_polices.is_active', 1) + ->where($field_name, $param) + ->groupBy('employees.id') + ->orderBy('employees.id', 'DESC') + ->first(); + + $memberData = []; + $dataForClientAndInsurer = []; + + $acms = db_connect()->table('user_profiles') + ->select('user_profiles.id, user_profiles.first_name') + ->where('user_profiles.is_active', 1) + ->where('user_profiles.role', 3) + ->get() + ->getResultArray(); + + if(!empty($data) && count($data) > 0){ + + $memberData = $this->employeeModel->getEmployeeByEmployeeCode($data['emp_code']); + + $acms = $this->clientRMModel + ->select('user_profiles.id, user_profiles.first_name') + ->join('clients', 'client_rm.client_id = clients.id', 'left') + ->join('user_profiles', 'client_rm.user_id = user_profiles.id', 'left') + ->where('clients.is_active', 1) + ->where('client_rm.is_active', 1) + ->where('user_profiles.is_active', 1) + ->where('clients.id', $data['client_id']) + ->findAll(); + } + + + + // Respond based on the query result + if (!empty($data)) { + return $this->respond([ + 'status' => true, + 'code' => 200, + 'message' => 'Data found', + 'data' => $data, + 'param' => $param, + 'type' => $type, + 'dataForClientAndInsurer' => $dataForClientAndInsurer, + 'memberData' => $memberData, + 'acms' => $acms, + ], 200); + } else { + return $this->respond([ + 'status' => false, + 'code' => 404, + 'message' => 'No data found', + 'param' => $param, + 'type' => $type, + 'dataForClientAndInsurer' => $dataForClientAndInsurer, + 'memberData' => $memberData, + 'acms' => $acms + ], 200); + } + } + + } diff --git a/app/Controllers/DashboardController.php b/app/Controllers/DashboardController.php index 4df9136a..8ee7765d 100755 --- a/app/Controllers/DashboardController.php +++ b/app/Controllers/DashboardController.php @@ -286,9 +286,11 @@ 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).'"'); + return $this->respond([ 'status' => true, - 'message' => 'updated Policy Enrollment Status', + 'message' => 'updated Open and Close Enrollment successfully', 'open_policy_count' => count($openEnrollment), 'close_policy_count' => count($closeEnrollment), 'open_policy_ids' => $openEnrollment, diff --git a/app/Controllers/EmpDataServiceController.php b/app/Controllers/EmpDataServiceController.php index fa3d4378..b2190254 100755 --- a/app/Controllers/EmpDataServiceController.php +++ b/app/Controllers/EmpDataServiceController.php @@ -152,7 +152,7 @@ class EmpDataServiceController extends BaseController $objects = $this->employeePolicyModel->getInceptionEmployeeDataForExportExcel($export_data); $policy_details = $this->clientPolicyModel->where('id', $export_data['client_policy_id'])->first(); - if ($policy_details['cd_ac_no'] == null) { + if ($policy_details['cd_ac_pk'] == null) { $this->myLogger->logme('error', 'The policy does not have a CD account number.'); return 5; } @@ -649,7 +649,7 @@ class EmpDataServiceController extends BaseController $policy_details = $this->clientPolicyModel->where('id', $export_data['client_policy_id'])->first(); - if ($policy_details['cd_ac_no'] == null) { + if ($policy_details['cd_ac_pk'] == null) { $this->myLogger->logme('error', 'The policy does not have a CD account number.'); return 1; } @@ -959,7 +959,7 @@ class EmpDataServiceController extends BaseController $policy_details = $this->clientPolicyModel->where('id', $export_data['client_policy_id'])->first(); - if ($policy_details['cd_ac_no'] == null) { + if ($policy_details['cd_ac_pk'] == null) { $this->myLogger->logme('error', 'The policy does not have a CD account number.'); return 5; } @@ -1496,7 +1496,9 @@ class EmpDataServiceController extends BaseController } } else { - $tpa_id_all[$current_tpa_id][] = $key; + if($current_tpa_id != "" && $current_tpa_id != null){ + $tpa_id_all[$current_tpa_id][] = $key; + } } //--- TPA ID Duplicate check end --- @@ -4416,7 +4418,7 @@ class EmpDataServiceController extends BaseController employees.email_corporate, employees.name, employees.mobile, - employees.basic_cover_si, + employee_polices.basic_cover_si, cp.policy_type_id, cp.is_addon, @@ -4438,7 +4440,7 @@ class EmpDataServiceController extends BaseController if ($emp_details) { $this->myLogger->logme('error', 'sendMailForDownloadingECard - Processing employee_policy_id: {id}', ['id' => $id]); - if (!empty($emp_details['email_corporate'])) { + if (!empty($emp_details['email_corporate']) && $emp_details['relationship'] === 'Self') { $params = [ 'rand_string' => $emp_details['rand_string'], diff --git a/app/Controllers/EmployeeController.php b/app/Controllers/EmployeeController.php index 56dbc4eb..a613c87b 100755 --- a/app/Controllers/EmployeeController.php +++ b/app/Controllers/EmployeeController.php @@ -97,7 +97,7 @@ class EmployeeController extends AdminController // Convert the status field to an array if it exists in the request data if (isset($filterData['status']) && !empty($filterData['status'])) { - $filterData['status'] = explode(",", $filterData['status']); + // $filterData['status'] = explode(",", $filterData['status']); }else{ $filterData['status'] = []; } @@ -114,6 +114,11 @@ class EmployeeController extends AdminController // log_message('error',json_encode($data['employees'])); // Set getData in $data array with the processed $filterData $data['getData'] = $filterData; + + // return view('employee_list',$data); + $html = view('employee_data_list', $data); + return $this->respond(['status' => true, 'html' => $html], 200); + } // dd($this->employeeModel->getLastQuery()); @@ -1909,6 +1914,7 @@ class EmployeeController extends AdminController } $excel_data = $empDataServiceController->readExcelFileToArray($file_name_with_path); + // dd($excel_data); $excelErrorData['excel_header'] = $excel_data[0]; unset($excel_data[0]); @@ -1971,7 +1977,7 @@ class EmployeeController extends AdminController $excelErrorData['excel_data'] = $finalArray; $excelErrorData['file_id'] = $file_id; - // dd($finalArray); + // dd($excelErrorData); echo view('export_import_error_list', $excelErrorData); } @@ -2171,6 +2177,9 @@ class EmployeeController extends AdminController //get policy details $policy_details = $this->clientPolicyModel->getPolicyDetails($client_id,$policy_id); $policy_terms = (array)$policy_details[0]; + $is_lgbtq = $policy_terms['is_lgbtq']; + + // dd($policy_terms); $policy_terms = json_decode($policy_terms['policy_terms']); $policy_terms = (array) $policy_terms;// convert obj to array @@ -2178,7 +2187,7 @@ class EmployeeController extends AdminController //get file array or construnct dummy file array here $file = ['id' => null,'client_id' => $client_id,'policy_id' => $policy_id,'action' => 'inception','client_branch_id' => $branch_id,'created_by' => 1]; //get familiy details in inception file format array from post method - $result = check_dependent_conflict($family_details, $policy_terms, $file['action']); + $result = check_dependent_conflict($family_details, $policy_terms, $file['action'],$is_lgbtq); return $this->respond(['dataStatus' => true, 'code' => 200, 'data' => ['policy_terms' => $policy_terms['family_floaters'],'result' => $result] ], 200); @@ -2216,13 +2225,14 @@ class EmployeeController extends AdminController } } + //UPDATE EMPLOYEE public function update_emp_data() { $data = $this->request->getPost(); // print_rr($data);die(); // $data['dob'] = date('Y-m-d', strtotime($data['dob'])); if(isset( $data['dob'])){ - $data['dob'] = change_date_format($data['dob'], 'd/m/Y', 'Y-m-d'); + $data['dob'] = change_date_format($data['dob'], null, 'Y-m-d'); } // print_rr($data); die; diff --git a/app/Controllers/EmployeeRestController.php b/app/Controllers/EmployeeRestController.php index ec4f7478..0b26b442 100755 --- a/app/Controllers/EmployeeRestController.php +++ b/app/Controllers/EmployeeRestController.php @@ -29,10 +29,15 @@ use App\Models\FEContentModel; use App\Models\AddImgModel; use App\Models\ClientBranchModel; use App\Models\AuditHistoryModel; +use App\Models\TicketClaimStatusModel; +use App\Models\TicketMasterModel; +use App\Models\TicketMessageModel; + use App\Controllers\Jobs ; use App\Controllers\JobWorker ; +use App\Controllers\TicketController; use PhpOffice\PhpSpreadsheet\Spreadsheet; @@ -73,6 +78,11 @@ class EmployeeRestController extends AdminController protected $addImgModel; protected $clientBranchModel; protected $auditHistoryModel; + protected $claimStatusModel; + protected $ticketMaster; + protected $ticketMessage; + + protected $ticketController; public function __construct() @@ -97,6 +107,11 @@ class EmployeeRestController extends AdminController $this->addImgModel = new AddImgModel(); $this->clientBranchModel = new ClientBranchModel(); $this->auditHistoryModel = new AuditHistoryModel(); + $this->claimStatusModel = new TicketClaimStatusModel(); + $this->ticketMaster = new TicketMasterModel(); + $this->ticketMessage = new TicketMessageModel(); + + $this->ticketController = new TicketController(); } @@ -722,7 +737,7 @@ class EmployeeRestController extends AdminController $jwt = $this->request->getHeaderLine('Authorization'); $jwtParts = explode(' ', $jwt); - $token = $jwtParts[2]; + $token = $jwtParts[1]; $decodedPayload = json_decode(base64_decode(explode('.', $token)[1]), true); @@ -1085,7 +1100,7 @@ class EmployeeRestController extends AdminController $keysToRemove = ["removable_keys"]; // Retrieve employee policy data by passing the employee primary key $empPolicy = $this->employeeModel->getEmployeePolicy($id); - +// dd($empPolicy); // Retrieve employee and dependents data by passing the employee code $employeeData = $this->employeeModel->where('emp_code',$emp_code) ->where('client_id',$client_id) @@ -1123,11 +1138,18 @@ class EmployeeRestController extends AdminController { $si_value = 0; + $si_premium_value = 0; + $si_gst_value = 0; // Filter employee data where the family_floater_key is 'self' $selfData = array_filter($empData, fn($arr) => trim(strtolower($arr['family_floater_key'])) === 'self'); $employee_policy = $this->employeePolicyModel->where('employee_id',$selfData[0]['id'])->where('client_policy_id',$array->ClientPolicyId)->where('is_active', 1 )->get()->getRow(); $si_value = isset($employee_policy->basic_cover_si) ? $employee_policy->basic_cover_si : 0; + if(isset($employee_policy->payable_employee) && $employee_policy->payable_employee == 1) + { + $si_premium_value = $si_premium_value + $employee_policy->rata_premimum; + $si_gst_value = $si_gst_value + $employee_policy->gst; + } $self['is_value_exist'] = true; $self['data']['family_floater_key'] = 'self'; @@ -1142,6 +1164,8 @@ class EmployeeRestController extends AdminController $array->mapped_family_floaters = $self; $array->type = 'GPA'; $array->si_value = $si_value; + $array->si_premium_value = $si_premium_value; + $array->si_gst_value = $si_gst_value; @@ -1201,8 +1225,11 @@ class EmployeeRestController extends AdminController if ($value['family_floater_key'] === $dependent) { $employee_policy = $this->employeePolicyModel->where('employee_id',$value['id'])->where('client_policy_id',$array->ClientPolicyId)->where('is_active', 1 )->get()->getRow(); if(isset($employee_policy->basic_cover_si)){ $dependent_and_si_value = ($dependent_and_si_value == 0) ? $employee_policy->basic_cover_si : $dependent_and_si_value; } - if(isset($employee_policy->rata_premimum)){ $dependent_and_si_premium_value = $dependent_and_si_premium_value + $employee_policy->rata_premimum;} - if(isset($employee_policy->gst)){ $dependent_and_si_gst_value = $dependent_and_si_gst_value + $employee_policy->gst;} + if(isset($employee_policy->payable_employee) && $employee_policy->payable_employee == 1) + { + if(isset($employee_policy->rata_premimum)){ $dependent_and_si_premium_value = $dependent_and_si_premium_value + $employee_policy->rata_premimum;} + if(isset($employee_policy->gst)){ $dependent_and_si_gst_value = $dependent_and_si_gst_value + $employee_policy->gst;} + } $temp['is_value_exist'] = true; $temp['data']['family_floater_key'] = $familyFloatesValue; @@ -1404,8 +1431,11 @@ class EmployeeRestController extends AdminController if ($value['family_floater_key'] === $dependent) { $employee_policy = $this->employeePolicyModel->where('employee_id',$value['id'])->where('client_policy_id',$array->ClientPolicyId)->where('is_active', 1 )->get()->getRow(); if(isset($employee_policy->basic_cover_si)){ $dependent_and_si_value = ($dependent_and_si_value == 0) ? $employee_policy->basic_cover_si : $dependent_and_si_value; } - if(isset($employee_policy->rata_premimum)){ $dependent_and_si_premium_value = $dependent_and_si_premium_value + $employee_policy->rata_premimum;} - if(isset($employee_policy->gst)){ $dependent_and_si_gst_value = $dependent_and_si_gst_value + $employee_policy->gst;} + if(isset($employee_policy->payable_employee) && $employee_policy->payable_employee == 1) + { + if(isset($employee_policy->rata_premimum)){ $dependent_and_si_premium_value = $dependent_and_si_premium_value + $employee_policy->rata_premimum;} + if(isset($employee_policy->gst)){ $dependent_and_si_gst_value = $dependent_and_si_gst_value + $employee_policy->gst;} + } $temp['is_value_exist'] = true; $temp['data']['family_floater_key'] = $familyFloatesValue; @@ -1504,16 +1534,25 @@ class EmployeeRestController extends AdminController $decodedArray = json_decode($array->Policy_Terms); $array->Policy_Terms = $decodedArray; $si_value = 0; + $si_premium_value = 0; + $si_gst_value = 0; // Filter employee data where the family_floater_key is 'self' $selfData = array_filter($empData, fn($arr) => trim(strtolower($arr['family_floater_key'])) === 'self'); $employee_policy = $this->employeePolicyModel->where('employee_id',$selfData[0]['id'])->where('client_policy_id',$array->ClientPolicyId)->where('is_active', 1 )->get()->getRow(); $si_value = isset($employee_policy->basic_cover_si) ? $employee_policy->basic_cover_si : 0; + if(isset($employee_policy->payable_employee) && $employee_policy->payable_employee == 1) + { + $si_premium_value = $si_premium_value + $employee_policy->rata_premimum; + $si_gst_value = $si_gst_value + $employee_policy->gst; + } $policyTypeData = $this->policyTypeModel->where('id',$policy_type)->get()->getRow(); $array->type = $policyTypeData->policy_type; $array->Policy_Name = $policyTypeData->long_name; $array->si_value = $si_value; + $array->si_premium_value = $si_premium_value; + $array->si_gst_value = $si_gst_value; if($employee_policy){ @@ -1672,6 +1711,7 @@ class EmployeeRestController extends AdminController $clientPolicy = $this->clientPolicyModel->where('client_id',$this->request->getGet('client_id')) ->where('client_branch_id',$this->request->getGet('client_branch_id')) ->where('policy_status', 1) + ->where('is_active', 1) ->findAll(); if(count($clientPolicy)) @@ -1808,8 +1848,11 @@ class EmployeeRestController extends AdminController if ($value['family_floater_key'] === $dependent) { $employee_policy = $this->employeePolicyModel->where('employee_id',$value['id'])->where('client_policy_id',$array['id'])->where('is_active', 1 )->get()->getRow(); if(isset($employee_policy->basic_cover_si)){ $dependent_and_si_value = ($dependent_and_si_value == 0) ? $employee_policy->basic_cover_si : $dependent_and_si_value; } - if(isset($employee_policy->rata_premimum)){ $dependent_and_si_premium_value = $dependent_and_si_premium_value + $employee_policy->rata_premimum;} - if(isset($employee_policy->gst)){ $dependent_and_si_gst_value = $dependent_and_si_gst_value + $employee_policy->gst;} + if(isset($employee_policy->payable_employee) && $employee_policy->payable_employee == 1) + { + if(isset($employee_policy->rata_premimum)){ $dependent_and_si_premium_value = $dependent_and_si_premium_value + $employee_policy->rata_premimum;} + if(isset($employee_policy->gst)){ $dependent_and_si_gst_value = $dependent_and_si_gst_value + $employee_policy->gst;} + } $temp['is_value_exist'] = true; $temp['data']['family_floater_key'] = $familyFloatesValue; @@ -1929,8 +1972,11 @@ class EmployeeRestController extends AdminController $employee_policy = $this->employeePolicyModel->where('employee_id',$value['id'])->where('client_policy_id',$array['id'])->where('is_active', 1 )->get()->getRow(); if(isset($employee_policy->basic_cover_si)){ $only_si_value = ($only_si_value == 0) ? $employee_policy->basic_cover_si : $only_si_value; } - if(isset($employee_policy->rata_premimum)){ $only_si_premium_value = $only_si_premium_value + $employee_policy->rata_premimum;} - if(isset($employee_policy->gst)){ $only_si_gst_value = $only_si_gst_value + $employee_policy->gst;} + if(isset($employee_policy->payable_employee) && $employee_policy->payable_employee == 1) + { + if(isset($employee_policy->rata_premimum)){ $only_si_premium_value = $only_si_premium_value + $employee_policy->rata_premimum;} + if(isset($employee_policy->gst)){ $only_si_gst_value = $only_si_gst_value + $employee_policy->gst;} + } $temp3['is_value_exist'] = true; $temp3['data']['employee_id'] = $value['id']; $temp3['data']['relationship'] = $value['relationship']; @@ -1982,8 +2028,11 @@ class EmployeeRestController extends AdminController $employee_policy = $this->employeePolicyModel->where('employee_id',$value['id'])->where('client_policy_id',$array['id'])->where('is_active', 1 )->get()->getRow(); if(isset($employee_policy->basic_cover_si)){ $only_si_value = ($only_si_value == 0) ? $employee_policy->basic_cover_si : $only_si_value; } - if(isset($employee_policy->rata_premimum)){ $only_si_premium_value = $only_si_premium_value + $employee_policy->rata_premimum;} - if(isset($employee_policy->gst)){ $only_si_gst_value = $only_si_gst_value + $employee_policy->gst;} + if(isset($employee_policy->payable_employee) && $employee_policy->payable_employee == 1) + { + if(isset($employee_policy->rata_premimum)){ $only_si_premium_value = $only_si_premium_value + $employee_policy->rata_premimum;} + if(isset($employee_policy->gst)){ $only_si_gst_value = $only_si_gst_value + $employee_policy->gst;} + } $temp3['is_value_exist'] = true; $temp3['data']['employee_id'] = $value['id']; $temp3['data']['relationship'] = $value['relationship']; @@ -3052,10 +3101,90 @@ class EmployeeRestController extends AdminController return false; } - + //Get Data from post for inserting ticket and message + public function initiateClaim() + { + + $received_data = $this->request->getPost(); + $employee_id = $received_data['emp_id']; + $client_policy_id = $received_data['client_policy_id']; + $insured_emp_id = $received_data['insured_emp_id']; + + $sql = "select cp.policy_type_id as ticket_type_id, + cl_rm.user_id as acm_id, + cp.insurer_id as insurer_id, + cp.tpa_id as tpa_id, + emp.client_id , + emp.id as emp_id, + emp_pol.uhid as policy_no, + emp.emp_code, + emp_pol.tpa_id as tpa_no, + emp.name as emp_name, + emp.email_corporate as emp_mail, + emp.mobile as emp_mobile, + empl.id as insured_emp_id, + empl.name as insured_name, + empl.relationship + from employees emp + + left join employees empl on empl.id = $insured_emp_id and empl.is_active = 1 and empl.emp_status = 'active' + left join employee_polices emp_pol on empl.id = emp_pol.employee_id and emp_pol.client_policy_id = $client_policy_id and emp_pol.is_active = 1 + left join client_policy cp on cp.id = emp_pol.client_policy_id and cp.is_active = 1 + left join client_rm cl_rm on cl_rm.client_id = empl.client_id and cl_rm.is_active = 1 and cl_rm.level = 3 + + where emp.id = $employee_id and emp.is_active = 1 and emp.emp_status = 'active' + limit 1 "; + + $fetchData = $this->employeeModel->query($sql)->getResultArray()[0]; + $fetchData['claim_status_id'] = $this->claimStatusModel->select('id')->where('ticket_type', $fetchData['ticket_type_id'])->first()['id']; + $fetchData['priority'] = 1; + $fetchData['mode_of_intimation'] = 1; + $fetchData['hospital_name'] = $received_data['hospital_name']; + + $insert_status = $this->ticketMaster->insert($fetchData); + $ticket_id = $this->ticketMaster->insertID(); + + if ($insert_status && !empty($ticket_id)) { + $mail_sent_status = ($this->ticketController->sendAutoMailTrigger($ticket_id)); + if (gettype($mail_sent_status) == 'array') { + $message = 'Claim Iniated Successfully'; + return $this->respond(['status' => true, 'code' => 200, 'message' => $message], 200); + } else { + $mail_sent_status = 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; + + $message_insert_status = $this->ticketMessage->insert($sent_message_data); + + if ($message_insert_status) { + $message = 'Claim Initiated Successfully'; + return $this->respond(['status' => true, 'code' => 200, 'message' => $message], 200); + } else { + $message = 'Claim Initiated, Mail Sent Successfully'; + $this->myLogger->logme('error', "Claim initiated, Mail sent Successfully, Failed to store message:$ticket_id "); + 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); + } + } } \ No newline at end of file diff --git a/app/Controllers/EmployeeServiceController.php b/app/Controllers/EmployeeServiceController.php index 7eafb908..d7674712 100755 --- a/app/Controllers/EmployeeServiceController.php +++ b/app/Controllers/EmployeeServiceController.php @@ -977,6 +977,9 @@ class EmployeeServiceController extends AdminController // get policy and rack details $policy_terms = $this->clientPolicyModel->getPolicyDetails($file['client_id'],$file['policy_id']); $policy_details = (array)$policy_terms[0]; + $is_lgbtq = $policy_details['is_lgbtq']; + + // dd($this->clientPolicyModel->getLastQuery()); $policy_terms = json_decode($policy_terms[0]->policy_terms); $policy_terms = (array) $policy_terms;// convert obj to array @@ -1071,7 +1074,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']); + $res = check_dependent_conflict($family,$policy_terms,$file['action'],$is_lgbtq); // dd($res); if(!$res['status']) { @@ -1159,7 +1162,6 @@ class EmployeeServiceController extends AdminController } - // calculate data points and premium public function employeesOnboardPreprocess($params) { @@ -1240,8 +1242,9 @@ class EmployeeServiceController extends AdminController // dd($family); } - // Kint::dump($family);die(); + // Kint::dump($family); $data = calculate_premium_new(family_data:$family,policy_terms: $policy_terms,slab_details : $slab_details,fileArr: $file, existing_units:$existing_units); + // dd($data); $employee_data_group_by_family[$emp_id] = $data; $this->employeesOnboardProcess(['familiy_data' => $data,'file' => $file]); } diff --git a/app/Controllers/LeadsController.php b/app/Controllers/LeadsController.php index 6140f45e..0a9c444c 100644 --- a/app/Controllers/LeadsController.php +++ b/app/Controllers/LeadsController.php @@ -461,7 +461,8 @@ class LeadsController extends BaseController $this->loadLayout('view_rfq.php', $data); } - public function createRFQ(){ + public function createRFQ() + { // print_r($this->request->getPost('json')); die(); @@ -1542,7 +1543,8 @@ class LeadsController extends BaseController } } - public function transformProposelData($data, $proposel, $insurer){ + public function transformProposelData($data, $proposel, $insurer) + { // print_r($data['premium_data']['data']); die; @@ -1933,107 +1935,23 @@ class LeadsController extends BaseController return $this->convertQCRJsonToPolicyTerms($converted_json, $data['policy_type_id'], $proposel_data['proposel_name'], $proposel_data['insurer_name']); } - private function convertQCRJsonToPolicyTerms($data, $policy_type, $proposel_name, $insurer_name) - { - $GMC_Keys = [ - "sum_insured", - "family_floater", - "family_floaters", - "age_ratio", - "waiverofpreexistingdiseases", - "maternitycoverage", - "twindelivery", - "preandpostnatal", - "babyday1cover", - "9monthwaitingperiodwaived", - "coverfromthedateofjoining", - "waiverof1,2,3&4thyearexclusions", - "waiverof30dayswaitingperiod", - "prehospitalizationcover", - "congenitaldiseasesinternal", - "copayzonewisecopay", - "bioabsorbablestenttoriclensmultifocallens", - "roomrentlimit", - "proportionatedeductionclause", - "ailmentcapping", - "ambulancecharges", - "airambulance", - "familytransportationbenefit", - "reasonableandcustomarycharges", - "ayudhtreatmentcover", - "congenitaldiseasesexternal", - "optionalparentalcopay", - "posthospitalizationcover", - "corporatebuffer", - "sublimitofcorporatebuffer", - "ayushTreatmentCoverData", - "armdcovered", - "suminsuredenhancement", - "automaticsuminsuredreinstatement", - "additionalsicknessbenefit", - "lasiksurgery", - "midterminclusion", - "capd", - "organdonorexpenses", - "moderntreatmentsasperirdai", - "Wellness", - "days_of_discharge", - "days_from_dod", - "special_condition_label", - "special_condition_input", - "multiple_sum_insured", - "cataract", - "cataractData" - ]; - - $GPA_Keys = [ - "sumInsured2", - "totalSumInsured", - "age_ratio", - "accidentalDeathBenefit", - "permanentTotalDisablement", - "permanentPartialDisablement", - "temporaryTotalDisablementBenefit", - "accidentalHospitalizationExpenses", - "childrenEducationWelfareFund", - "compassionateVisitExpenses", - "compassionateVisitExpensesData", - "brokenBoneExpenses", - "brokenBoneExpensesData", - "ambulanceCharges", - "ambulanceChargesData", - "burnExpenses", - "burnExpensesData", - "carriageOfDeadBody", - "carriageOfDeadBodyData", - "animalSnakeInsectBite", - "terrorism", - "worldwideCover", - "gpa_special_condition_label", - "gpa_special_condition_input", - "multiple_sum_insured" - ]; - - // Select keys based on policy type - $termsKey = $policy_type == 1 ? $GPA_Keys : $GMC_Keys; - - // Initialize terms_array with default empty values - $terms_array = array_fill_keys($termsKey, ""); - $specialKeys = ['special_condition_label', 'special_condition_input', 'gpa_special_condition_label', 'gpa_special_condition_input', 'multiple_sum_insured']; - foreach ($specialKeys as $key) { - $terms_array[$key] = []; - } + //Function for convert the RFQ and QCR Json to Policy Terms Json + public function convertQCRJsonToPolicyTerms($data, $policy_type, $proposel_name, $insurer_name) + { + //transform the data into the currernt proposel and insurere ( get single proposel ) + $data = $this->transformProposelData($data, $proposel_name, $insurer_name); // Initialize age_ratio based on policy type - $terms_array['age_ratio'] = $policy_type == 2 ? [ - "self" => ["min" => "18", "max" => "60"], - "spouse" => ["min" => 0, "max" => 0], - "child" => ["min" => 0, "max" => "25"], - "elders" => ["min" => 0, "max" => 0], - ] : ["self" => ["min" => "18", "max" => "60"]]; + $age_ratio = $policy_type == 2 ? [ + 'self' => ['min' => '18', 'max' => '60'], + 'spouse' => ['min' => 0, 'max' => 0], + 'child' => ['min' => 0, 'max' => '25'], + 'elders' => ['min' => 0, 'max' => 0], + ] : [ + 'self' => ['min' => '18', 'max' => '60'] + ]; foreach ($data['table_data']['data'] as $dataRow) { - $item = $dataRow['items'] ?? ''; foreach ($dataRow['data'] as $cellData) { @@ -2043,45 +1961,52 @@ class LeadsController extends BaseController $value = $cellData['value'] ?? ''; // Skip unwanted keys - if ( - in_array($parentth, ['Sno', 'Item Key', 'Particulars', 'Action']) || - in_array($subth, ['Quote Asked']) - ) { + if (in_array($parentth, ['Sno', 'Item Key', 'Particulars', 'Action']) || in_array($subth, ['Quote Asked'])) { continue; } - // Handle special conditions - if (str_starts_with($item, "special_condition") && $parentth === $proposel_name && $subth === $insurer_name) { + switch (true) { - $parts = explode("-", $input_value); - $question = $parts[0] ?? ''; - $answer = $parts[1] ?? ''; - $labelKey = $policy_type == 1 ? 'gpa_special_condition_label' : 'special_condition_label'; - $inputKey = $policy_type == 1 ? 'gpa_special_condition_input' : 'special_condition_input'; + // CASE 1: Handle special conditions + case str_starts_with($item, 'special_condition') && $parentth === $proposel_name && $subth === $insurer_name: + $parts = explode('-', $input_value); + $labelKey = $policy_type == 1 ? 'gpa_special_condition_label' : 'special_condition_label'; + $inputKey = $policy_type == 1 ? 'gpa_special_condition_input' : 'special_condition_input'; - $terms_array[$labelKey][] = $question; - $terms_array[$inputKey][] = $answer; - continue; + $terms_array[$labelKey][] = $parts[0] ?? ''; + $terms_array[$inputKey][] = $parts[1] ?? ''; + break; + + // CASE 2: Handle sum insured + case in_array($item, ['sum_insured', 'sumInsured2']): + $si_amt = explode(',', $value); + $terms_array[$item] = $si_amt[0] ?? ''; + $terms_array['multiple_sum_insured'] = array_slice($si_amt, 1); + + // Add age_ratio after Sum insured + if ($policy_type == 1) { + $terms_array['age_ratio'] = $age_ratio; + } + + break; + + // CASE 3: Handle family floaters + case $item === 'family_composition': + $terms_array['family_floaters'] = isJsonString($input_value) ? json_decode($input_value, true) : $input_value; + + // Add age_ratio after family floaters + if ($policy_type == 2) { + $terms_array['age_ratio'] = $age_ratio; + } + + break; + + // DEFAULT CASE : + default: + // $terms_array[$item] = isJsonString($input_value) ? (json_decode($input_value, true)['key'] ?? '') : $value; + $terms_array[$item] = $value; + break; } - - // Handle sum insured - if (in_array($item, ['sum_insured', 'sumInsured2'])) { - $si_amt = explode(",", $value); - $terms_array[$item] = $si_amt[0] ?? ""; - $terms_array['multiple_sum_insured'] = array_slice($si_amt, 1); - continue; - } - - // Handle family floaters - if ($item === 'family_composition') { - $terms_array['family_floaters'] = isJsonString($input_value) ? json_decode($input_value, true) : $input_value; - continue; - } - - // Decode JSON if valid - $terms_array[$item] = isJsonString($input_value) ? - (json_decode($input_value, true)['key'] ?? '') : - $input_value; } } diff --git a/app/Controllers/LoginController.php b/app/Controllers/LoginController.php index b3ca2187..f5f31844 100755 --- a/app/Controllers/LoginController.php +++ b/app/Controllers/LoginController.php @@ -20,7 +20,7 @@ class LoginController extends BaseController // $isLoggedIn = check_session(); $isLoggedIn = check_session(); $hasCookie = check_cookie(); - if ($isLoggedIn || $hasCookie) { + if ($isLoggedIn && $hasCookie) { return redirect()->to(base_url('/dashboard/view')); } return view('login'); @@ -91,7 +91,11 @@ class LoginController extends BaseController { $path = getenv('cookie.Path'); session()->destroy(); - setcookie('session_data', '', time() - 3600, $path); + // setcookie('session_data', '', time() - 3600, $path); + $path = getenv('cookie.Path'); + $domain = getenv('cookie.Domain'); + $https = getenv('ccokie.secure'); + setcookie('session_data',null, time() -3600, $path, $domain, $https, true); return redirect()->to(base_url('login')); } diff --git a/app/Controllers/MasterController.php b/app/Controllers/MasterController.php index 4b5c9032..9cf89d53 100755 --- a/app/Controllers/MasterController.php +++ b/app/Controllers/MasterController.php @@ -225,6 +225,7 @@ class MasterController extends AdminController 'New Basic Cover SI' => 'new_basic_cover_si', 'New SI Premium' => 'new_si_premium', 'Date of Coverage' => 'date_of_coverage', + 'Age Band' => 'age_band', ]; @@ -1669,9 +1670,11 @@ class MasterController extends AdminController ["filePath" => ROOTPATH."public/assets/images/login_bg.jpg","fileName" => "login_bg.jpg"] ]; $email_id = 'srinivas.saravanan@venbainfotech.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"; // Send email and get response - $result = MailHelper::send_email(['mail' => $email_id, 'subject' => 'Mail Via CLI', 'message' => $message,'attachments' => $attachments,'common'=>$common]); + $result = MailHelper::send_email(['mail' => $email_id, 'params'=>$params,'subject' => 'Mail Via CLI','message' => $message,'attachments' => $attachments,'common'=>$common]); log_message('error',json_encode($result)); diff --git a/app/Controllers/NotificationController.php b/app/Controllers/NotificationController.php index a3c8efe9..0dd29522 100755 --- a/app/Controllers/NotificationController.php +++ b/app/Controllers/NotificationController.php @@ -52,6 +52,7 @@ class NotificationController extends AdminController $form_data['subject'] = $this->request->getPost('subject'); $form_data['mail_content'] = $this->request->getPost('mailContent'); $form_data['client_id'] = $this->request->getPost('client_id'); + $form_data['mail_content_json'] = $this->request->getPost('mailJson'); $notificationModel = new NotificationModel(); $find_notification = $notificationModel->where('client_id',$form_data['client_id'])->where('template_name',$form_data['template_name'])->first(); diff --git a/app/Controllers/PolicyTransactionController.php b/app/Controllers/PolicyTransactionController.php index 6784c0fd..69852bca 100644 --- a/app/Controllers/PolicyTransactionController.php +++ b/app/Controllers/PolicyTransactionController.php @@ -121,6 +121,7 @@ class PolicyTransactionController extends BaseController 'cancelled' => 'Cancelled', 'instalment_pending' => 'Instalment Pending', 'completed' => 'Completed', + 'lost' => 'Lost', ]; $data['invoice_status_array'] = [ 'yet_to_generate' => 'Pending', @@ -243,34 +244,6 @@ class PolicyTransactionController extends BaseController // print_r($data); die; // var_dump($data); die; - // Format dates - // $data['policy_issue_date'] = change_date_format($this->request->getPost('policy_issue_date'), 'd/m/Y', 'Y-m-d') ?? null; - // $data['policy_start_date'] = change_date_format($this->request->getPost('policy_start_date'), 'd/m/Y', 'Y-m-d') ?? null; - // $data['policy_end_date'] = change_date_format($this->request->getPost('policy_end_date'), 'd/m/Y', 'Y-m-d') ?? null; - // $data['renewal_date'] = change_date_format($this->request->getPost('renewal_date'), 'd/m/Y', 'Y-m-d') ?? null; - // $data['rollover_date'] = change_date_format($this->request->getPost('rollover_date'), 'd/m/Y', 'Y-m-d') ?? 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['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; - - if(empty($data['policy_issue_date'])){ $data['policy_issue_date'] = null; } @@ -291,11 +264,17 @@ class PolicyTransactionController extends BaseController $data['rollover_date'] = null; } + if(empty($data['last_action_date'])){ + $data['last_action_date'] = null; + }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'])){ list($data['insurer_branch_id'], $data['insurer_id']) = explode('-', $data['insurer_id']); - if ($data['tpa']) { + if (isset($data['tpa'])) { list($data['tpa_branch_id'], $data['tpa_id']) = explode('-', $data['tpa']); } } @@ -321,6 +300,12 @@ class PolicyTransactionController extends BaseController $data['same_as_proposer'] = 1; } + if (!isset($data['policy_with_corr'])) { + $data['policy_with_corr'] = 0; + } elseif ($data['policy_with_corr']) { + $data['policy_with_corr'] = 1; + } + if($data['ct_type'] == ""){ $data['ct_type'] = 1; } @@ -343,7 +328,7 @@ class PolicyTransactionController extends BaseController $insert = $this->policyTransactionModel->insert($data); if ($insert) { - $this->insertTransactionStatus($insert, $data['status'], 1); + $this->insertTransactionStatus($insert, $data, 1); $emp_data = $this->processInsertIndividualMemberInEmpTable($data); if(isset($data['follow_insurer_id']) && !empty($data['follow_insurer_id'][0])){ @@ -379,7 +364,7 @@ class PolicyTransactionController extends BaseController { if ($this->policyTransactionModel->update($id, $data)) { - $this->insertTransactionStatus($id, $data['status'], 1); + $this->insertTransactionStatus($id, $data, 1); $emp_data = $this->processInsertIndividualMemberInEmpTable($data); if (isset($data['follow_insurer_id']) && !empty($data['follow_insurer_id'][0])) { @@ -478,7 +463,8 @@ 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, // 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, ]; } @@ -540,11 +526,12 @@ class PolicyTransactionController extends BaseController ]; } - private function insertTransactionStatus($policyTranId, $status, $statusType) + private function insertTransactionStatus($policyTranId, $data, $statusType) { $statusData = [ 'policy_tran_id' => $policyTranId, - 'status' => $status, + 'status' => $data['status'], + 'last_action_date' => $data['last_action_date'], 'status_type' => $statusType, 'created_by' => get_session_userid(), ]; @@ -691,6 +678,15 @@ class PolicyTransactionController extends BaseController client_policy.policy_type_id as master_policy_type_id, client_policy.is_addon, client_policy.base_policy, + ( + select last_action_date + from policy_transaction_status + where policy_tran_id = policy_transaction.id + and status = policy_transaction.status + order by id desc + limit 1 + + ) as last_action_date ') ->join('clients', 'clients.id = policy_transaction.client_id') ->join('client_policy', 'policy_transaction.client_policy_id = client_policy.id', 'left') @@ -756,6 +752,10 @@ class PolicyTransactionController extends BaseController 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'); @@ -803,7 +803,110 @@ class PolicyTransactionController extends BaseController WHERE co_share_stmt_details.co_share_id = pt_co_share_details.id AND co_share_stmt_details.is_active = 1 - ) AS record_count + ) AS record_count, + + ( + SELECT + SUM(actual_bp_amt) + FROM + co_share_stmt_details + WHERE + co_share_id = pt_co_share_details.id + AND is_active = 1 + + ) AS actual_bp_amount, + + ( + SELECT + SUM(actual_tp_amt) + FROM + co_share_stmt_details + WHERE + co_share_id = pt_co_share_details.id + AND is_active = 1 + + ) AS actual_tp_amount, + + ( + SELECT + SUM(actual_tep_amt) + FROM + co_share_stmt_details + WHERE + co_share_id = pt_co_share_details.id + AND is_active = 1 + + ) AS actual_tep_amount, + + ( + SELECT + SUM(actual_bp_per) + FROM + co_share_stmt_details + WHERE + co_share_id = pt_co_share_details.id + AND is_active = 1 + + ) AS actual_bp_percentage, + + ( + SELECT + SUM(actual_tp_per) + FROM + co_share_stmt_details + WHERE + co_share_id = pt_co_share_details.id + AND is_active = 1 + + ) AS actual_tp_percentage, + + ( + SELECT + SUM(actual_tep_per) + FROM + co_share_stmt_details + WHERE + co_share_id = pt_co_share_details.id + AND is_active = 1 + + ) AS actual_tep_percentage, + + + ( + SELECT + SUM(actual_bp_brokerage_amt) + FROM + co_share_stmt_details + WHERE + co_share_id = pt_co_share_details.id + AND is_active = 1 + + ) AS actual_bp_brokerage_amount, + + + ( + SELECT + SUM(actual_tp_brokerage_amt) + FROM + co_share_stmt_details + WHERE + co_share_id = pt_co_share_details.id + AND is_active = 1 + + ) AS actual_tp_brokerage_amount, + + + ( + SELECT + SUM(actual_tep_brokerage_amt) + FROM + co_share_stmt_details + WHERE + co_share_id = pt_co_share_details.id + AND is_active = 1 + + ) AS actual_tep_brokerage_amount + ") ->where('pt_id', $id) ->where('is_active', 1) @@ -965,18 +1068,37 @@ class PolicyTransactionController extends BaseController // $month = '01-'.$data['month']; // $data['month'] = empty($data['month']) ? null : date('Y-m-d', strtotime($month)); + if (!isset($data['policy_with_corr'])) { + $data['policy_with_corr'] = 0; + } elseif ($data['policy_with_corr']) { + $data['policy_with_corr'] = 1; + } - if(!empty($data['data_received_date'])){ + if(empty($data['data_received_date'])){ + $data['data_received_date'] = null; + }else{ $data['data_received_date'] = change_date_format($data['data_received_date'], 'd/m/Y', 'Y-m-d'); } - if(!empty($data['closure_date'])){ - $data['closure_date'] = change_date_format($data['closure_date'], 'd/m/Y', 'Y-m-d'); + if(empty($data['policy_issue_date'])){ + $data['policy_issue_date'] = null; + }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{ $data['endorse_eff_date'] = change_date_format($data['endorse_eff_date'], 'd/m/Y', 'Y-m-d'); + + } + + if(empty($data['install_due_date'])){ + $data['install_due_date'] = null; + }else{ + $data['install_due_date'] = change_date_format($data['install_due_date'], 'd/m/Y', 'Y-m-d'); + } if(!empty($data['month'])){ @@ -984,6 +1106,12 @@ class PolicyTransactionController extends BaseController $data['month'] = change_date_format($month, 'd/M/Y', 'Y-m-d'); } + if(empty($data['last_action_date'])){ + $data['last_action_date'] = null; + }else{ + $data['last_action_date'] = change_date_format($data['last_action_date']); + } + // print_r($data); die; // Separate Insurer and TPA Branch IDs and IDs @@ -1014,11 +1142,11 @@ class PolicyTransactionController extends BaseController 'issuer' => $issue_type['issuer'] ?? null, 'client_type' => $data['client_type'] ?? $issue_type['client_type'] ?? null, 'policy_type_id' => $issue_type['policy_type_id'] ?? null, - 'policy_type_id' => $issue_type['policy_type_id'] ?? null, 'issue_type' => $issue_type['issue_type'] ?? null, 'source_client_policy_id' => $issue_type['source_client_policy_id'] ?? null, - 'cd_ac_no' => $issue_type['issue_type'] ?? null, - 'policy_issue_date' => $issue_type['policy_issue_date'] ?? null, + 'cd_ac_no' => $issue_type['cd_ac_no'] ?? null, + '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, 'revenue_type' => $issue_type['revenue_type'] ?? null, @@ -1061,7 +1189,7 @@ class PolicyTransactionController extends BaseController if ($insert) { - $this->insertTransactionStatus($insert, $data['status'], 1); + $this->insertTransactionStatus($insert, $data, 1); $this->handleCompletedStatus($data, $insert); $this->insertOrUpdateCoShareDetails($data, $insert); @@ -1076,7 +1204,7 @@ class PolicyTransactionController extends BaseController $update = $this->policyTransactionModel->where('id', $id)->set($data)->update(); if ($update) { - $this->insertTransactionStatus($id, $data['status'], 1); + $this->insertTransactionStatus($id, $data, 1); $this->handleCompletedStatus($data, $id); $this->insertOrUpdateCoShareDetails($data, $id); @@ -1122,6 +1250,15 @@ class PolicyTransactionController extends BaseController policy_transaction.*, clients.short_name as client_short_name, clients.client_type, + ( + select last_action_date + from policy_transaction_status + where policy_tran_id = policy_transaction.id + and status = policy_transaction.status + order by id desc + limit 1 + + ) as last_action_date ') ->join('clients', 'clients.id = policy_transaction.client_id') ->join('client_policy', 'policy_transaction.client_policy_id = client_policy.id', 'left') @@ -1152,22 +1289,151 @@ class PolicyTransactionController extends BaseController $data['data_received_date'] = change_date_format($data['data_received_date'], 'Y-m-d', 'd/m/Y'); } - if(!empty($data['closure_date'])){ - $data['closure_date'] = change_date_format($data['closure_date'], 'Y-m-d', 'd/m/Y'); + 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['endorse_eff_date'])){ $data['endorse_eff_date'] = change_date_format($data['endorse_eff_date'], 'Y-m-d', 'd/m/Y'); } + if(!empty($data['install_due_date'])){ + $data['install_due_date'] = change_date_format($data['install_due_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'); } // print_r($data); die; + //get PT Co-Share Details + $data['pt_co_share_details'] = $this->PTCOShareDetailsModel - $data['pt_co_share_details'] = $this->PTCOShareDetailsModel->where('pt_id', $id)->where('is_active', 1)->findAll(); + ->select(" + pt_co_share_details.*, + + ( + SELECT + COUNT(*) + FROM + co_share_stmt_details + WHERE + co_share_stmt_details.co_share_id = pt_co_share_details.id + AND co_share_stmt_details.is_active = 1 + ) AS record_count, + + ( + SELECT + SUM(actual_bp_amt) + FROM + co_share_stmt_details + WHERE + co_share_id = pt_co_share_details.id + AND is_active = 1 + + ) AS actual_bp_amount, + + ( + SELECT + SUM(actual_tp_amt) + FROM + co_share_stmt_details + WHERE + co_share_id = pt_co_share_details.id + AND is_active = 1 + + ) AS actual_tp_amount, + + ( + SELECT + SUM(actual_tep_amt) + FROM + co_share_stmt_details + WHERE + co_share_id = pt_co_share_details.id + AND is_active = 1 + + ) AS actual_tep_amount, + + ( + SELECT + SUM(actual_bp_per) + FROM + co_share_stmt_details + WHERE + co_share_id = pt_co_share_details.id + AND is_active = 1 + + ) AS actual_bp_percentage, + + ( + SELECT + SUM(actual_tp_per) + FROM + co_share_stmt_details + WHERE + co_share_id = pt_co_share_details.id + AND is_active = 1 + + ) AS actual_tp_percentage, + + ( + SELECT + SUM(actual_tep_per) + FROM + co_share_stmt_details + WHERE + co_share_id = pt_co_share_details.id + AND is_active = 1 + + ) AS actual_tep_percentage, + + + ( + SELECT + SUM(actual_bp_brokerage_amt) + FROM + co_share_stmt_details + WHERE + co_share_id = pt_co_share_details.id + AND is_active = 1 + + ) AS actual_bp_brokerage_amount, + + + ( + SELECT + SUM(actual_tp_brokerage_amt) + FROM + co_share_stmt_details + WHERE + co_share_id = pt_co_share_details.id + AND is_active = 1 + + ) AS actual_tp_brokerage_amount, + + + ( + SELECT + SUM(actual_tep_brokerage_amt) + FROM + co_share_stmt_details + WHERE + co_share_id = pt_co_share_details.id + AND is_active = 1 + + ) AS actual_tep_brokerage_amount + + ") + ->where('pt_id', $id) + ->where('is_active', 1) + ->orderBy('id', 'asc') + ->findAll(); // print_r($data['endorse_eff_date']); die; @@ -1295,7 +1561,23 @@ class PolicyTransactionController extends BaseController public function getPTCOShareCount($client_id, $client_policy_id) { $totalCount = $this->PTCOShareDetailsModel - ->select('pt_co_share_details.*') + ->select(" + pt_co_share_details.*, + policy_transaction.bro_payable_by, + ( + select cd_ac_no + from cd_master + where id = policy_transaction.cd_ac_pk + ) as cd_account_no, + ( + select balance + from cash_deposit + where cd_ac_pk = policy_transaction.cd_ac_pk + and is_active = 1 + order by id desc + limit 1 + ) as cd_amount, + ") ->join('policy_transaction', 'policy_transaction.id = pt_co_share_details.pt_id') ->where('policy_transaction.client_id', $client_id) ->where('policy_transaction.client_policy_id', $client_policy_id) @@ -1480,7 +1762,7 @@ class PolicyTransactionController extends BaseController //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); - // dd($data['report_list']); + //!dd($data['report_list']); $this->loadLayout('report_bds_filter', $data); } @@ -1529,6 +1811,7 @@ class PolicyTransactionController extends BaseController $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); } @@ -1660,7 +1943,7 @@ class PolicyTransactionController extends BaseController // dd($this->validateInsurerStatement(['file_id' => 30])); // $data['insurers'] = $this->insurerModel->where('is_active',1)->findAll(); $today = date('Y-m-d'); - $fromday = $from_date = date('Y-m-d', strtotime('-60 days', strtotime($today))); + $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(); @@ -1687,6 +1970,7 @@ class PolicyTransactionController extends BaseController ->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') @@ -1698,6 +1982,48 @@ class PolicyTransactionController extends BaseController $this->loadLayout('insurer_statement_list', $data); } + // public function failedStatementList(){ + // $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(); + + // // dd( $data['insurers']); + // $data['insurer_statement_list'] = $this->insurerStatements + // ->select('insurer_statements.*, + // insurers.name AS insurer_name, + // insurers.short_name, + // user_profiles.first_name, + // insurer_branch.branch_code, + // (SELECT SUM(pt_co_share_details.exp_amt) + // FROM pt_co_share_details + // WHERE pt_co_share_details.is_active = 1 + // AND pt_co_share_details.statement_id = insurer_statements.id + // ) AS exp_inv_amt, + // (SELECT SUM(inv_payment_details.inv_amt) + SUM(inv_payment_details.tds) + SUM(inv_payment_details.gst) + // FROM inv_payment_details + // 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','failed') + // ->where('date(insurer_statements.created_at) >= ', $from_date) + // ->where('date(insurer_statements.created_at) <= ', $today) + // ->orderBy('insurer_statements.id', 'DESC') + // ->findAll(); + // if($data['insurer_statement_list']){ + // return $this->respond(['status' => true, 'code' => 200,'data'=>$data ], 200); + // }else{ + // return $this->respond(['status'=>false,'message'=>'Data Not Fount'],404); + // } + + // } + public function uploadInsurerStatement() { @@ -1768,6 +2094,12 @@ class PolicyTransactionController extends BaseController 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); } @@ -1855,16 +2187,19 @@ class PolicyTransactionController extends BaseController $is_row_empty = check_row_is_empty_or_null($excel_row); 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 - + // Kint::dump($policy_no); foreach ($source_data as $source_key => $source_row) { - $source_endorsement_no = $source_row['endorsement_no'] !== null ? $source_row['endorsement_no'] : ""; + $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']) { $is_source_found = 1; @@ -1946,9 +2281,9 @@ class PolicyTransactionController extends BaseController $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']); - // Kint::dump($source_data);die; + // 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 = []; @@ -1962,13 +2297,14 @@ class PolicyTransactionController extends BaseController $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'] : ""; + $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']) { $is_source_found = 1; diff --git a/app/Controllers/TicketController.php b/app/Controllers/TicketController.php new file mode 100644 index 00000000..e2a9bb42 --- /dev/null +++ b/app/Controllers/TicketController.php @@ -0,0 +1,1138 @@ +myLogger = \Config\Services::mylogger(); + + $this->ticketMasterModel = new TicketMasterModel(); + + $this->ticketType = [1 => "Claim-GMC", 2 => "Claim-GPA", 3 => "EDLI", 4 => "GTLI"]; + $this->priorityType = [ + 1 => "Low", + 2 => "Medium", + 3 => "High", + 4 => "Urgent", + 5 => "Emergency", + 6 => "Critical" + ]; + $this->relationshipType = [ + "self" => "Self", + "spouse" => "Spouse", + "son" => "Son", + "daughter" => "Daughter", + "father" => "Father", + "mother" => "Mother", + "father-in-law" => "Father-in-Law", + "mother-in-law" => "Mother-in-Law" + ]; + $this->modeOFIntimate = [ + 1 => "In Person", + 2 => "Courier", + 3 => "Online Mode - Email", + 4 => "Online Mode - To TPA" + ]; + $this->claimType = [ + 1 => [ + 1 => "Main", + 2 => "OPD", + 3 => "Pre ReOpen", + 4 => "Post ReOpen", + ], + 2 => [ + 1 => "TTD", + 2 => "PTD", + 3 => "PPD", + 4 => "Death", + ] + ]; + $this->triggerType = [ + 1 => "Trigger 1", + 2 => "Trigger 2", + 3 => "Trigger 3", + 4 => "Trigger 4", + 5 => "Trigger 5", + 6 => "Trigger 6", + 7 => "Trigger 7" + ]; + $this->placeHolders = [ + + '((ACM))' => 'acm', + '((ACM_CONTACT))' => 'acm_mobile', + '((EMPLOYEE_NAME))' => 'emp_name', + '((EMPLOYEE_ID))' => 'emp_code', + '((CORPORATE_NAME))' => 'client_name', + '((INSURED_NAME))' => 'insured_name', + '((CLAIM_NO))' => 'claim_number', + '((RELATIONSHIP))' => 'relationship', + '((POLICY_TYPE))' => 'policy_type', + '((AUTO_QUERY_CONTENT))' => 'auto_query_content', + ]; + + $this->ticketMasterModel = new TicketMasterModel(); + $this->claimStatus = new TicketClaimStatusModel(); + $this->clientModel = new ClientModel(); + $this->ticketHistoryModel = new TicketHistoryModel(); + $this->ticketMailTemplateModel = new TicketMailTemplateModel(); + $this->ticketNoteModel = new TicketNoteModel(); + $this->ticketMessageModel = new TicketMessageModel(); + $this->userModel = new UserModel(); + $this->employeeModel = new EmployeeModel(); + } + + public function ticketList() + { + if ($this->request->is('get')) { + $data['page_name'] = "Claims"; + $data['ticket_type'] = $this->ticketType; + $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(); + $data['ticket_data'] = $this->ticketSearch(1); + 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') + ->select([ + 'th.ticket_id', + "CASE + WHEN DATEDIFF( + th.created_at, + COALESCE( + (SELECT MIN(created_at) FROM ticket_history th2 WHERE th2.ticket_id = th.ticket_id), + tm.created_at + ) + ) BETWEEN 0 AND 6 THEN '0-6 Days' + WHEN DATEDIFF( + th.created_at, + COALESCE( + (SELECT MIN(created_at) FROM ticket_history th2 WHERE th2.ticket_id = th.ticket_id), + tm.created_at + ) + ) BETWEEN 7 AND 12 THEN '7-12 Days' + WHEN DATEDIFF( + th.created_at, + COALESCE( + (SELECT MIN(created_at) FROM ticket_history th2 WHERE th2.ticket_id = th.ticket_id), + tm.created_at + ) + ) BETWEEN 13 AND 20 THEN '13-20 Days' + ELSE 'Above 20 Days' + END AS tat" + ]) + ->join('ticket_master tm', 'tm.id = th.ticket_id', 'right') + ->where('tm.is_active', 1) + ->groupBy('th.ticket_id, tm.created_at'); + + //action 1 get last 100 rows, action 2 filter and get all rows related to that + if ($action == 1) { + + $query = $db->table('ticket_master tm') + ->select([ + 'tm.id', + 'tcs.claim_status AS status', + 'tm.claim_number AS claim_no', + 'tm.tpa_id', + 'tm.emp_name', + '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) + ->orderBy('tm.id', 'DESC'); + + $data = $query->get()->getResultArray(); + + // dd(db_connect()->getLastQuery()); + + return $data; + + } else { + $search_data = $this->request->getPost(); + // print_r($search_data); + $where = []; + foreach ($search_data as $search_objects => $key) { + if ($key != null && $key != '' && $key != 0) { + $where[$search_objects] = $key; + } + } + // print_rr($where); + $query = $db->table('ticket_master tm') + ->select([ + 'tm.id', + 'tcs.claim_status AS status', + 'tm.claim_number AS claim_no', + 'tm.tpa_id', + 'tm.emp_name', + '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; + } + } + + public function ticket_form($ticket_type) + { + $data = $this->ticket_form_data($ticket_type); + // dd($data); + return $this->loadLayout('ticket_form_handler', $data); + } + + public function ticket_form_data($ticket_type) + { + $this->myLogger->logme('error', "Fetching ticket form data for Ticket Type: $ticket_type"); + + $data = [ + 'ticket_form' => 1, + 'selected_ticket_type' => $ticket_type, + 'ticket_type' => $this->ticketType, + 'priorityType' => $this->priorityType, + 'relationshipType' => $this->relationshipType, + 'modeOFIntimate' => $this->modeOFIntimate + ]; + + switch ($ticket_type) { + case 2: + $data['ticket_form'] = 'GPA'; + break; + case 3: + $data['ticket_form'] = 'EDLI'; + break; + case 4: + $data['ticket_form'] = 'GTLI'; + break; + } + + // Fetch ACM Users + $db = db_connect(); + $data['acms'] = $db->table('user_profiles') + ->select('id, first_name') + ->where(['is_active' => 1, 'role' => 3]) + ->get() + ->getResultArray(); + + // Fetch Claim Status + $data['claim_status'] = $this->claimStatus + ->select('*') + ->where(['is_active' => 1, 'ticket_type' => $ticket_type]) + ->get() + ->getResultArray(); + + if ($ticket_type == 1) { + $data['claim_type'] = $this->claimType[1]; + } else { + $data['claim_type'] = $this->claimType[2]; + } + + $this->myLogger->logme('error', "Ticket form data fetched successfully for Ticket Type: $ticket_type"); + + return $data; + } + + public function view_ticket($ticket_id) + { + // $ticket_data = $this->ticketMasterModel->where('id', $ticket_id)->where('is_active', 1)->first(); + $ticket_data = $this->ticketMasterModel->getTicketDataByTicketID($ticket_id); + $ticket_data = $this->formatDateForClaim($ticket_data, 'd/m/Y'); + // dd($ticket_data); + $template_data = $this->ticketMasterModel->getTemplateDataByTicketID($ticket_id); + if (!empty($template_data)) { + $template_data['mail_content'] = $this->replacePlaceholders($template_data['mail_content'], $ticket_data); + $template_data['subject'] = $this->replacePlaceholders($template_data['subject'], $ticket_data); + } + $data = $this->ticket_form_data($ticket_data['ticket_type_id']); + $data['ticket_data'] = $ticket_data; + $data['reply_data'] = $template_data; + $data['placeHolders'] = $this->placeHolders; + $data['message_data'] = $this->getTicketMessage($ticket_id); + $data['view_ticket_page'] = []; + $data['member_data'] = $this->employeeModel->getEmployeeByEmployeeCode($ticket_data['emp_code']); + $data['ticket_history'] = $this->ticketHistory($ticket_id); + // dd($data); + + return $this->loadLayout('ticket_edit_onbording', $data); + } + + public function formatDateForClaim($ticket_data, $out_put_format = 'Y-m-d') + { + + if (empty($ticket_data['doa'])) { + $ticket_data['doa'] = null; + } else { + $ticket_data['doa'] = change_date_format($ticket_data['doa'], null, $out_put_format); + } + + if (empty($ticket_data['dod'])) { + $ticket_data['dod'] = null; + } else { + $ticket_data['dod'] = change_date_format($ticket_data['dod'], null, $out_put_format); + } + + if (empty($ticket_data['dob'])) { + $ticket_data['dob'] = null; + } else { + $ticket_data['dob'] = change_date_format($ticket_data['dob'], null, $out_put_format); + } + + if (empty($ticket_data['date_of_join'])) { + $ticket_data['date_of_join'] = null; + } else { + $ticket_data['date_of_join'] = change_date_format($ticket_data['date_of_join'], null, $out_put_format); + } + + if (empty($ticket_data['date_of_incep'])) { + $ticket_data['date_of_incep'] = null; + } else { + $ticket_data['date_of_incep'] = change_date_format($ticket_data['date_of_incep'], null, $out_put_format); + } + + if (empty($ticket_data['date_of_accident'])) { + $ticket_data['date_of_accident'] = null; + } else { + $ticket_data['date_of_accident'] = change_date_format($ticket_data['date_of_accident'], null, $out_put_format); + } + + if (empty($ticket_data['date_of_death'])) { + $ticket_data['date_of_death'] = null; + } else { + $ticket_data['date_of_death'] = change_date_format($ticket_data['date_of_death'], null, $out_put_format); + } + + if (empty($ticket_data['date_of_intimat'])) { + $ticket_data['date_of_intimat'] = null; + } else { + $ticket_data['date_of_intimat'] = change_date_format($ticket_data['date_of_intimat'], null, $out_put_format); + } + + return $ticket_data; + } + + public function createTicket() + { + $ticket_data = $this->request->getPost(); + $ticket_data = $this->formatDateForClaim($ticket_data); + // print_rr($ticket_data); die; + + if ($ticket_data) { + $return_value = $this->ticketMasterModel->insert($ticket_data); + if ($return_value) { + //mail trigger part + $mail_responce = $this->sendAutoMailTrigger($return_value); + return $this->respond(['status' => true, 'ticket_id' => $return_value, 'code' => 200, 'data' => $ticket_data, "message" => "Claim created successfully", 'mail_responce' => $mail_responce], 200); + } else { + return $this->respond(['status' => false, 'code' => 404, 'message' => 'Failed to create claim'], 200); + } + } else { + return $this->respond(['status' => false, 'code' => 404, 'message' => 'claim data not found'], 200); + } + } + + public function updateTicket() + { + $ticket_id = $this->request->getPost('ticket_master_id'); + $ticket_data = $this->request->getPost(); + $ticket_data = $this->formatDateForClaim($ticket_data); + // print_rr($ticket_data); die; + $old_ticket_data = $this->ticketMasterModel->where('id', $ticket_id)->where('is_active', 1)->first(); + + if ($ticket_data) { + $return_value = $this->ticketMasterModel->where('id', $ticket_id)->set($ticket_data)->update(); + if ($return_value) { + + //mail trigger part + $mail_responce = $this->sendAutoMailTrigger($ticket_id); + + return $this->respond(['status' => true, 'code' => 200, 'data' => $ticket_data, "message" => "Claim updated successfully", 'mail_responce' => $mail_responce], 200); + } else { + return $this->respond(['status' => false, 'code' => 404, 'message' => 'Failed to update claim'], 200); + } + } else { + return $this->respond(['status' => false, 'code' => 404, 'message' => 'claim data not found'], 200); + } + } + + public function mailTemplate() + { + $data = []; + $data['trigger_type'] = $this->triggerType; + $data['policy_type'] = $this->ticketType; + $data['placeHolders'] = $this->placeHolders; + $data['ticket_data'] = $this->ticketMailTemplateModel->where('is_active', 1)->findAll(); + $data['ticket_type'] = $this->ticketType; + $data['trigger_type'] = $this->triggerType; + return $this->loadLayout('ticket_mail_template', $data); + } + + public function crudTemplate($action) + { + //action 1 is create. action 2 is edit and action 3 is delete + if ($action == 1) { + $received_data = $this->request->getPost(); + if (isset($received_data['id']) && $received_data['id'] != '') { + $status = $this->ticketMailTemplateModel->save($received_data); + if ($status) { + return $this->respond(['status' => true], 200); + } else { + return $this->respond(['status' => false], 200); + } + } else { + $status = $this->ticketMailTemplateModel->save($received_data); + if ($status) { + return $this->respond(['status' => true], 200); + } else { + return $this->respond(['status' => false], 200); + } + } + } elseif ($action == 2) { + $table_id = (int)$this->request->getPost('id'); + $data = $this->ticketMailTemplateModel->where('id', $table_id)->where('is_active', 1)->first(); + if ($data) { + return $this->respond(['status' => true, 'data' => $data], 200); + } else { + return $this->respond(['status' => false], 404); + } + } elseif ($action == 3) { + $table_id = (int)$this->request->getPost('id'); + + $sql = "update ticket_mail_template set is_active = 0 where id = $table_id "; + $status = $this->ticketMailTemplateModel->query($sql); + if ($status) { + return $this->respond(['status' => true], 200); + } else { + return $this->respond(['status' => false], 404); + } + } + } + + public function crudNote($action) + { + // action = 1 is read, action 2 is insert/update + if ($action == 1) { + $ticket_master_id = $this->request->getPost('id'); + $is_auto_query = $this->request->getPost('is_auto_query'); + // print_rr($is_auto_query); + if (isset($ticket_master_id) && $ticket_master_id != '') { + $data = $this->ticketNoteModel->where('is_active', 1)->where('ticket_id', $ticket_master_id)->where('is_auto_query', $is_auto_query)->first(); + if ($data) { + return $this->respond(['status' => true, 'data' => $data], 200); + } else { + return $this->respond(['status' => false], 200); + } + } + } elseif ($action == 2) { + $data = $this->request->getPost(); + // if (isset($data['id']) && $data['id'] != ''){ + // print_rr($data);die(); + $status = $this->ticketNoteModel->save($data); + $id = isset($data['id']) ? $data['id'] : $this->ticketNoteModel->insertID(); + + // } + if ($status) { + return $this->respond(['status' => true, 'id' => $id], 200); + } else { + return $this->respond(['status' => false], 200); + } + } + } + + public function saveReply() + { + + $received_data = $this->request->getPost(); + // print_r($received_data); die; + $received_data['sender'] = 'staff'; + $status = $this->ticketMessageModel->insert($received_data); + if ($status) { + $return = $this->sendReplyMessage($received_data); + return $this->respond(['status' => true, 'code' => 200, 'return' => $return], 200); + } else { + return $this->respond(['status' => false, 'code' => 404], 404); + } + } + + public function getTicketMessage($ticket_master_id) + { + // log_message('error','Function called');die(); + // $ticket_master_id = $this->request->getPost('id'); + $user_id = get_session_userid(); + $logged_user = $this->userModel->select('first_name,last_name,profile')->where('id', $user_id)->first(); + $dataToSend = []; + $dataToSend['user_name'] = $logged_user['first_name'] . ' ' . $logged_user['last_name']; + $dataToSend['messages'] = $this->ticketMessageModel->where('is_active', 1) + ->where('ticket_id', $ticket_master_id)->orderBy('created_at', 'DESC') + ->findAll(); + foreach ($dataToSend['messages'] as $message) { + $mail_content_converted = $this->convertHtmlToText($message['mail_content']); + $message['mail_content'] = $mail_content_converted; + } + $dataToSend['emp_name'] = $this->ticketMasterModel->select('emp_name') + ->where('id', $ticket_master_id)->where('is_active', 1) + ->first()['emp_name']; + // dd($dataToSend); + if ($dataToSend) { + return $dataToSend; + } else { + $data = []; + return $data; + } + } + + public function convertHtmlToText($html) + { + $dom = new DOMDocument(); + @$dom->loadHTML($html); + return strip_tags($dom->saveHTML()); + } + + //---- Email Trigger Part---------------------------------------------------------------------------------------------- + + public function constructMailContent($ticket_id) + { + $this->myLogger->logme('error', "Constructing mail content for Ticket ID: $ticket_id"); + + try { + // Fetch Ticket Data + $ticket_data = $this->ticketMasterModel->getTicketDataByTicketID($ticket_id); + // print_r($ticket_data); die; + + if (!$ticket_data) { + $this->myLogger->logme('error', "No ticket data found for Ticket ID: $ticket_id"); + return null; + } + + $this->myLogger->logme('error', "Fetched ticket data: " . json_encode($ticket_data)); + + // Fetch Email Template Data + $template_data = $this->ticketMasterModel->getTemplateDataByTicketID($ticket_id); + // print_r($template_data); die; + + if (!$template_data) { + $this->myLogger->logme('error', "No email template found for Claim Status ID: " . $ticket_data['claim_status_id']); + return null; + } + + $this->myLogger->logme('error', "Fetched email template: " . json_encode($template_data)); + + // Generate Email Content + $subject = $this->replacePlaceholders($template_data['subject'], $ticket_data); + $message = $this->replacePlaceholders($template_data['mail_content'], $ticket_data); + + // print_r($subject); + // print_r($message); + // die; + + // Validate Essential Fields + if (empty($ticket_data['emp_mail'])) { + $this->myLogger->logme('error', "Employee email is missing for Ticket ID : '" . $ticket_id . "'"); + return null; + } + + if (empty($subject) || empty($message)) { + $this->myLogger->logme('error', "Generated email content is empty for Ticket ID: '" . $ticket_id . "'"); + return null; + } + + // Construct Mail Data + $mailData = [ + 'mail' => $ticket_data['emp_mail'], + 'subject' => $subject, + 'message' => $message, + 'cc' => $ticket_data['common_mails'] ?? '', + 'attachments' => [] + ]; + + // print_r($mailData); die; + + $this->myLogger->logme('error', "Final Email Data"); + + return $mailData; + } catch (\Exception $e) { + $this->myLogger->logme('error', "Exception in constructMailContent: " . $e->getMessage()); + return null; + } + } + + public function replacePlaceholders($content, $ticket_data) + { + $this->myLogger->logme('error', "Replacing placeholders in content"); + + if (!empty($ticket_data) && !empty($content)) { + foreach ($this->placeHolders as $key => $value) { + + if ($value == "emp_code") { + $replaceData = $ticket_data[$value] ?? ''; + } else if ($value == "policy_type") { + $replaceData = str_replace("Claim-", "", $this->ticketType[$ticket_data['ticket_type_id']] ?? ""); + } else { + $replaceData = strtoupper($ticket_data[$value]) ?? ''; + } + + $content = str_replace($key, $replaceData, $content); + } + } + + $this->myLogger->logme('error', "Final content after placeholder replacement"); + + return $content; + } + + //mail send function + public function sendTrigger($mail_content) + { + $this->myLogger->logme('error', "Sending email with content"); + if (!empty($mail_content)) { + $response = MailHelper::send_email($mail_content); + } else { + $response = ['status' => false, 'code' => 404, 'message' => "Mail not sent, mail data empty"]; + $this->myLogger->logme('error', "Mail not sent, mail data empty"); + } + + $this->myLogger->logme('error', "Email sent response: " . json_encode($response)); + + return $response; + } + + //reply mail part + public function sendReplyMessage($mail_data) + { + $this->myLogger->logme('error', "Preparing reply email for Ticket ID: " . $mail_data['ticket_id']); + + $acm_mails = $this->ticketMasterModel->getTicketDataByTicketID($mail_data['ticket_id']); + + if (!$acm_mails) { + $this->myLogger->logme('error', "No ACM mails found for Ticket ID: " . $mail_data['ticket_id']); + $this->myLogger->logme('error', "Reply mail not send"); + return false; + } + + $ticket_data = $this->ticketMasterModel->getTicketDataByTicketID($mail_data['ticket_id']); + // print_rr($ticket_data);die(); + if (!$ticket_data) { + $this->myLogger->logme('error', "No ticket data found for Ticket ID : " . $mail_data['ticket_id']); + $this->myLogger->logme('error', "Reply mail not send"); + return null; + } + + if (!empty($mail_data)) { + $mail_data['mail_content'] = $this->replacePlaceholders($mail_data['mail_content'], $ticket_data); + $mail_data['mail_subject'] = $this->replacePlaceholders($mail_data['mail_subject'], $ticket_data); + } + + $this->myLogger->logme('error', "Fetched ACM emails"); + + $emailData = [ + 'mail' => $mail_data['emp_mail'], + 'subject' => $mail_data['mail_subject'], + 'message' => $mail_data['mail_content'], + 'common' => [], + 'cc' => $acm_mails['common_mails'], + 'attachments' => [] + ]; + + $this->myLogger->logme('error', "Final Reply Email Data"); + + return $this->sendTrigger($emailData); + } + + //auto mail part + public function sendAutoMailTrigger($ticket_id) + { + $auto_mail_enable = $this->ticketMasterModel->getTemplateDataByTicketID($ticket_id); + // print_rr($auto_mail_enable); + $mail_responce = []; + if (!empty($auto_mail_enable) && $auto_mail_enable['is_auto_mail'] == 1) { + $mail_content = $this->constructMailContent($ticket_id); + // print_r($mail_content); die; + $mail_responce = $this->sendTrigger($mail_content); + } 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 { + $this->myLogger->logme('error', 'Auto Mail Not Sent, Reason: Mail Template Not Created'); + } + + return $mail_responce; + } + + //---- End Email Trigger Part---------------------------------------------------------------------------------------------- + + + public function ticketHistory($ticket_id) + { + $sql = "SELECT + th.id, + th.field_name, + th.display_name, + th.old_value, + th.new_value, + th.created_at, + CONCAT(creator.first_name, ' ', creator.last_name) as modified_by, + -- Claim Status + old_status.claim_status as old_status_value, + new_status.claim_status as new_status_value, + + -- Account Manager + CONCAT(old_account_manager.first_name, ' ', old_account_manager.last_name) as old_account_manager, + CONCAT(new_account_manager.first_name, ' ', new_account_manager.last_name) as new_account_manager, + + -- Insured Employee ID Change + old_insured_emp.name as old_insured_id_name, + new_insured_emp.name as new_insured_id_name, + + ticket_master.ticket_type_id + + FROM + ticket_history th + + -- Join for the user who made the change + LEFT JOIN user_profiles creator + ON th.created_by = creator.id + + -- Status value lookups + LEFT JOIN ticket_claim_status old_status + ON th.field_name = 'claim_status_id' + AND th.old_value = old_status.id + AND old_status.is_active = 1 + + LEFT JOIN ticket_claim_status new_status + ON th.field_name = 'claim_status_id' + AND th.new_value = new_status.id + + LEFT JOIN user_profiles as old_account_manager + ON th.field_name = 'acm_id' + AND th.old_value = old_account_manager.id + + LEFT JOIN user_profiles as new_account_manager + ON th.field_name = 'acm_id' + AND th.new_value = new_account_manager.id + + LEFT JOIN employees as old_insured_emp + ON th.field_name = 'insured_emp_id' + AND th.old_value = old_insured_emp.id + + LEFT JOIN employees as new_insured_emp + ON th.field_name = 'insured_emp_id' + AND th.new_value = new_insured_emp.id + + LEFT JOIN ticket_master as ticket_master + on th.field_name = 'claim_type' + AND th.ticket_id = ticket_master.id + + + + WHERE + th.ticket_id = $ticket_id + AND th.is_active = 1 + ORDER BY + th.created_at DESC"; + $data = $this->ticketHistoryModel->query($sql)->getResultArray(); + $priorityType = $this->priorityType; + $relationshipType = $this->relationshipType; + $modeOFIntimate = $this->modeOFIntimate; + $claim_type = $this->claimType; + foreach ($data as &$row) { + if ($row['field_name'] == 'claim_status_id') { + $new_old_value = isset($row['old_status_value']) ? $row['old_status_value'] : '-'; + $new_new_value = $row['new_status_value']; + $row['old_value'] = $new_old_value; + $row['new_value'] = $new_new_value; + } elseif ($row['field_name'] == 'acm_id') { + $new_old_value = isset($row['old_account_manager']) ? $row['old_account_manager'] : '-'; + $new_new_value = $row['new_account_manager']; + $row['old_value'] = $new_old_value; + $row['new_value'] = $new_new_value; + } elseif ($row['field_name'] == 'insured_emp_id') { + $new_old_value = isset($row['old_insured_id_name']) ? $row['old_insured_id_name'] : '-'; + $new_new_value = $row['new_insured_id_name']; + $row['old_value'] = $new_old_value; + $row['new_value'] = $new_new_value; + } elseif ($row['field_name'] == 'priority') { + $new_old_value = isset($priorityType[$row['old_value']]) ? $priorityType[$row['old_value']] : '-'; + $new_new_value = isset($priorityType[$row['new_value']]) ? $priorityType[$row['new_value']] : '-'; + $row['old_value'] = $new_old_value; + $row['new_value'] = $new_new_value; + } elseif ($row['field_name'] == 'relationship') { + $new_old_value = isset($relationshipType[$row['old_value']]) ? $relationshipType[$row['old_value']] : '-'; + $new_new_value = isset($relationshipType[$row['new_value']]) ? $relationshipType[$row['new_value']] : '-'; + $row['old_value'] = $new_old_value; + $row['new_value'] = $new_new_value; + } elseif ($row['field_name'] == 'mode_of_intimation') { + $new_old_value = isset($modeOFIntimate[$row['old_value']]) ? $modeOFIntimate[$row['old_value']] : "-"; + $new_new_value = isset($modeOFIntimate[$row['old_value']]) ? $modeOFIntimate[$row['old_value']] : "-"; + $row['old_value'] = $new_old_value; + $row['new_value'] = $new_new_value; + } elseif ($row['field_name'] == 'claim_type') { + $new_old_value = isset($claim_type[$row['ticket_type_id']][$row['old_value']]) ? $claim_type[$row['ticket_type_id']][$row['old_value']] : '-'; + $new_new_value = isset($claim_type[$row['ticket_type_id']][$row['new_value']]) ? $claim_type[$row['ticket_type_id']][$row['new_value']] : '-'; + $row['old_value'] = $new_old_value; + $row['new_value'] = $new_new_value; + } elseif ($row['field_name'] == 'claim_type') { + $new_old_value = isset($claim_type[$row['old_value']]) ? $claim_type[$row['old_value']] : '-'; + $new_new_value = isset($claim_type[$row['new_value']]) ? $claim_type[$row['new_value']] : '-'; + $row['old_value'] = $new_old_value; + $row['new_value'] = $new_new_value; + } else { + $new_old_value = isset($row['old_value']) ? $row['old_value'] : '-'; + $new_new_value = isset($row['new_value']) ? $row['new_value'] : '-'; + $row['old_value'] = $new_old_value; + $row['new_value'] = $new_new_value; + } + } + + return ($data); + } + + public function sendMailWithAutoQuery() + { + + $ticket_ids = $this->ticketMessageModel + ->select('ticket_master.id') + ->join('ticket_master', 'ticket_master.id = ticket_messages.ticket_id AND ticket_master.is_active = 1 and ticket_master.claim_status_id in (4,17,27,37)') + ->join('ticket_claim_status AS tcs', 'tcs.id = ticket_messages.claim_status AND (tcs.is_active = 1)') + ->join('ticket_notes', 'ticket_notes.ticket_id = ticket_messages.ticket_id AND ticket_notes.is_auto_query = 1 AND ticket_notes.is_active = 1') + ->where('ticket_messages.is_active', 1) + ->where('ticket_messages.claim_status in (4,17,27,37)') + ->groupBy('ticket_master.id') + ->having('DATEDIFF(CURDATE(), MAX(ticket_messages.created_at)) =', 7) + ->having('count(ticket_messages.id) < ', 6) + ->findAll(); + + + // var_dump($ticket_ids);die(); + foreach ($ticket_ids as $ticket) { + + $ticket_id = $ticket['id']; + $acm_mails = $this->ticketMasterModel->getTicketDataByTicketID($ticket_id); + $ticket_data = $this->ticketMasterModel->getTicketDataByTicketID($ticket_id); + + $template_data = $this->ticketMasterModel->getTemplateDataByTicketID($ticket_id); + + if (!empty($template_data)) { + $template_data['mail_content'] = $this->replacePlaceholders($template_data['mail_content'], $ticket_data); + $template_data['subject'] = $this->replacePlaceholders($template_data['subject'], $ticket_data); + } + $emailData = [ + 'mail' => $template_data['emp_mail'], + 'subject' => $template_data['subject'], + 'message' => $template_data['mail_content'], + 'common' => [], + 'cc' => $acm_mails['common_mails'], + 'attachments' => [] + ]; + + $this->myLogger->logme('error', "Final Reply Email Data"); + // var_dump($emailData); + $this->sendTrigger($emailData); + } + + return 'Ticket id\'s : '.json_encode($ticket_ids); + } + + public function ticketReports() + { + + if ($this->request->is('get')) { + $default_start = new \DateTime(); + $data['default_end'] = $default_start->format('d-m-Y'); + $data['default_start'] = $default_start->modify('-60 days')->format('d-m-Y'); + + $data['policy_type'] = $this->ticketType; + $data['account_manager'] = $this->userModel->select('first_name')->where('is_active', 1)->where('role', 3)->findAll(); + $data['report_type'] = [ + 'acc_manager_wise_status' => 'Account Manger Wise Status Report', + 'tpa_wise_status' => 'TPA Wise Status Report', + 'tat_band_wise' => 'TAT Wise Status Report' + ]; + // + $this->loadLayout('ticket_reports', $data); + } else { + $received_data = $this->request->getPost(); + $from_Date = $received_data['fromDate']; + $to_Date = $received_data['toDate']; + $fromDate = \DateTime::createFromFormat('d-m-Y', $from_Date)->format('Y-m-d'); + $toDate = \DateTime::createFromFormat('d-m-Y', $to_Date)->format('Y-m-d'); + $policy_type = $received_data['policy_type']; + // print_rr($received_data); + 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); + if ($policy_type == 1){ + $viewData['column_order'] = [ + 'ACM_NAME', 'ID NOT GENERATED', 'NON ID', 'CDA', 'INFORMATION REQUIRED', + 'UNDER PROCESS - CLAIM NO. UPDATION', 'UNDER PROCESS - INVESTIGATION STATUS', + 'UNDER PROCESS - QUERY DOCUMENT RECEIVED', 'APPROVED', 'PAYMENT INITIATED', + 'TOTAL' + ]; + $ordered_data = []; + + foreach ($viewData['account_manager_wise_data'] as $tpa_data) { + $temp = []; + foreach ($viewData['column_order'] as $key) { + $temp[$key] = isset($tpa_data[$key]) ? $tpa_data[$key] : 0; // Default to 0 if key is missing + } + $ordered_data[] = $temp; + } + $viewData['tpa_wise_data'] = $ordered_data; + $html = view('claims_report_acc_manager_wise', $viewData); + return $this->respond(['status' => true, 'html' => $html], 200); + }else{ + $viewData['column_order'] = [ + 'ACM_NAME', 'CLAIM INTIMATION', 'INTIMATION TO INSURER', 'CLIENT PENDING', + 'INSURER PENDING','INVESTIGATION','APPROVED','ON HOLD','TOTAL', 'NOT COVERED', + 'CLOSED', 'SETTLED', 'CLEARED_TOTAL' + ]; + $ordered_data = []; + + foreach ($viewData['account_manager_wise_data'] as $tpa_data) { + $temp = []; + foreach ($viewData['column_order'] as $key) { + $temp[$key] = isset($tpa_data[$key]) ? $tpa_data[$key] : 0; // Default to 0 if key is missing + } + $ordered_data[] = $temp; + } + $viewData['tpa_wise_data'] = $ordered_data; + $html = view('claims_report_acc_manager_wise', $viewData); + return $this->respond(['status' => true, 'html' => $html], 200); + } + } elseif ($received_data['report_type'] == 'tpa_wise_status') { + + $viewData['tpa_wise_data'] = $this->ticketMasterModel->tpaWiseReport($policy_type, $fromDate, $toDate); + + $viewData['column_order'] = [ + 'TPA_NAME', 'NON ID', 'ID NOT GENERATED', 'CDA', 'INFORMATION REQUIRED', + 'UNDER PROCESS - CLAIM NO. UPDATION', 'UNDER PROCESS - INVESTIGATION STATUS', + 'UNDER PROCESS - QUERY DOCUMENT RECEIVED', 'APPROVED', 'PAYMENT INITIATED', + 'TOTAL', 'SETTLED', 'CLOSED', 'CANCELLED', 'RETURNED', 'CLEARED_TOTAL' + ]; + + // Reorder data based on column order + $ordered_data = []; + + foreach ($viewData['tpa_wise_data'] as $tpa_data) { + $temp = []; + foreach ($viewData['column_order'] as $key) { + $temp[$key] = isset($tpa_data[$key]) ? $tpa_data[$key] : 0; // Default to 0 if key is missing + } + $ordered_data[] = $temp; + } + $viewData['tpa_wise_data'] = $ordered_data; + // $html = view('claims_report_tpa_wise', $viewData); + + $html = view('claims_report_tpa_wise',$viewData); + return $this->respond(['status' => true, 'html' => $html], 200); + } else if ($received_data['report_type'] == 'tat_band_wise') { + + $viewData['data'] = $this->ticketMasterModel->getTATReport($policy_type, $fromDate, $toDate); + $html = view('tat_report_band_wise_list', $viewData); + return $this->respond(['status' => true, 'html' => $html], 200); + } + } + } + + // public function accountManagerWiseReport($policy_type = null ,$start_date = null, $end_date = null){ + + // if ($policy_type == 1) { + // $sql = "SELECT + // u.first_name AS acc_manager_name, + // COUNT(CASE WHEN tcs.claim_status = 'ID NOT GENERATED' AND master.ticket_type_id = 1 THEN master.id END) AS id_not_generated, + // COUNT(CASE WHEN tcs.claim_status = 'NON ID' AND master.ticket_type_id = 1 THEN master.id END) AS non_id, + // COUNT(CASE WHEN tcs.claim_status = 'CDA' AND master.ticket_type_id = 1 THEN master.id END) AS cda, + // COUNT(CASE WHEN tcs.claim_status = 'INFORMATION REQUIRED' AND master.ticket_type_id = 1 THEN master.id END) AS information_required, + // COUNT(CASE WHEN tcs.claim_status LIKE '%UNDER PROCESS%' AND master.ticket_type_id = 1 THEN master.id END) AS under_process, + // COUNT(CASE WHEN tcs.claim_status = 'APPROVED' AND master.ticket_type_id = 1 THEN master.id END) AS approved, + // COUNT(CASE WHEN tcs.claim_status = 'PAYMENT INITIATED' AND master.ticket_type_id = 1 THEN master.id END) AS payment_initiated, + // ( + // COUNT(CASE WHEN tcs.claim_status = 'ID NOT GENERATED' AND master.ticket_type_id = 1 THEN master.id END) + + // COUNT(CASE WHEN tcs.claim_status = 'NON ID' AND master.ticket_type_id = 1 THEN master.id END) + + // COUNT(CASE WHEN tcs.claim_status = 'CDA' AND master.ticket_type_id = 1 THEN master.id END) + + // COUNT(CASE WHEN tcs.claim_status = 'INFORMATION REQUIRED' AND master.ticket_type_id = 1 THEN master.id END) + + // COUNT(CASE WHEN tcs.claim_status LIKE '%UNDER PROCESS%' AND master.ticket_type_id = 1 THEN master.id END) + + // COUNT(CASE WHEN tcs.claim_status = 'APPROVED' AND master.ticket_type_id = 1 THEN master.id END) + + // COUNT(CASE WHEN tcs.claim_status = 'PAYMENT INITIATED' AND master.ticket_type_id = 1 THEN master.id END) + // ) AS total + // FROM + // ticket_master master + // JOIN + // user_profiles u ON master.acm_id = u.id and u.is_active = 1 + // JOIN + // ticket_claim_status tcs ON tcs.id = master.claim_status_id and tcs.is_active = 1 + // WHERE + // master.created_at <= '$end_date' and master.created_at >= '$start_date' and master.is_active = 1 + // GROUP BY + // u.id; + // "; + // $result = $this->ticketMasterModel->query($sql)->getResultArray(); + // // dd($result); + + // return $result; + + + // }else{ + // $sql = "SELECT u.first_name AS acc_manager_name, + // COUNT(CASE WHEN tcs.claim_status = 'CLAIM INTIMATION' AND master.ticket_type_id = '$policy_type' THEN master.id END) AS claim_intimation, + // COUNT(CASE WHEN tcs.claim_status = 'INTIMATION TO INSURER' AND master.ticket_type_id = '$policy_type' THEN master.id END) AS int_to_insurer, + // COUNT(CASE WHEN tcs.claim_status = 'CLIENT PENDING' AND master.ticket_type_id = '$policy_type' THEN master.id END) AS client_pending, + // COUNT(CASE WHEN tcs.claim_status = 'INSURER PENDING' AND master.ticket_type_id = '$policy_type' THEN master.id END) AS information_required, + // COUNT(CASE WHEN tcs.claim_status = 'INVESTIGATION' AND master.ticket_type_id = '$policy_type' THEN master.id END) AS investigation, + // COUNT(CASE WHEN tcs.claim_status = 'APPROVED' AND master.ticket_type_id = '$policy_type' THEN master.id END) AS approved, + // COUNT(CASE WHEN tcs.claim_status = 'ON HOLD' AND master.ticket_type_id = '$policy_type' THEN master.id END) AS on_hold, + + // ( + // COUNT(CASE WHEN tcs.claim_status = 'CLAIM INTIMATION' AND master.ticket_type_id = '$policy_type' THEN master.id END)+ + // COUNT(CASE WHEN tcs.claim_status = 'INTIMATION TO INSURER' AND master.ticket_type_id = '$policy_type' THEN master.id END)+ + // COUNT(CASE WHEN tcs.claim_status = 'CLIENT PENDING' AND master.ticket_type_id = '$policy_type' THEN master.id END) + + // COUNT(CASE WHEN tcs.claim_status = 'INSURER PENDING' AND master.ticket_type_id = '$policy_type' THEN master.id END) + + // COUNT(CASE WHEN tcs.claim_status = 'INVESTIGATION' AND master.ticket_type_id = '$policy_type' THEN master.id END) + + // COUNT(CASE WHEN tcs.claim_status = 'APPROVED' AND master.ticket_type_id = '$policy_type' THEN master.id END) + + // COUNT(CASE WHEN tcs.claim_status = 'ON HOLD' AND master.ticket_type_id = '$policy_type' THEN master.id END) + // ) AS total1, + // COUNT(CASE WHEN tcs.claim_status = 'NOT COVERED' AND master.ticket_type_id = '$policy_type' THEN master.id END) AS not_covered, + // COUNT(CASE WHEN tcs.claim_status = 'CLOSED' AND master.ticket_type_id = '$policy_type' THEN master.id END) AS closed, + // COUNT(CASE WHEN tcs.claim_status = 'SETTLED' AND master.ticket_type_id = '$policy_type' THEN master.id END) AS settled, + // ( + // COUNT(CASE WHEN tcs.claim_status = 'NOT COVERED' AND master.ticket_type_id = '$policy_type' THEN master.id END) + + // COUNT(CASE WHEN tcs.claim_status = 'CLOSED' AND master.ticket_type_id = '$policy_type' THEN master.id END) + + // COUNT(CASE WHEN tcs.claim_status = 'SETTLED' AND master.ticket_type_id = '$policy_type' THEN master.id END) + // ) AS total2 + // FROM + // ticket_master master + // JOIN + // user_profiles u ON master.acm_id = u.id and u.is_active = 1 + // JOIN + // ticket_claim_status tcs ON tcs.id = master.claim_status_id and tcs.is_active = 1 + // WHERE + // master.created_at <= '$end_date' and master.created_at >= '$start_date' and master.is_active = 1 and master.ticket_type_id = '$policy_type' + // GROUP BY + // u.id; + // "; + // $result = $this->ticketMasterModel->query($sql)->getResultArray(); + + // return $result; + // } + // } + + // public function tpaWiseReport($policy_type = null ,$start_date = null,$end_date = null ){ + // // $policy_type = 1; + // $sql = "SELECT + // tpa.name AS tpa_name, + // COUNT(CASE WHEN tcs.claim_status = 'ID NOT GENERATED' AND master.ticket_type_id = '$policy_type' THEN master.id END) AS id_not_generated, + // COUNT(CASE WHEN tcs.claim_status = 'NON ID' AND master.ticket_type_id = '$policy_type' THEN master.id END) AS non_id, + // COUNT(CASE WHEN tcs.claim_status = 'CDA' AND master.ticket_type_id = '$policy_type' THEN master.id END) AS cda, + // COUNT(CASE WHEN tcs.claim_status = 'INFORMATION REQUIRED' AND master.ticket_type_id = '$policy_type' THEN master.id END) AS information_required, + // COUNT(CASE WHEN tcs.claim_status LIKE '%UNDER PROCESS%' AND master.ticket_type_id = '$policy_type' THEN master.id END) AS under_process, + // COUNT(CASE WHEN tcs.claim_status = 'APPROVED' AND master.ticket_type_id = '$policy_type' THEN master.id END) AS approved, + // COUNT(CASE WHEN tcs.claim_status = 'PAYMENT INITIATED' AND master.ticket_type_id = '$policy_type' THEN master.id END) AS payment_initiated, + // ( + // COUNT(CASE WHEN tcs.claim_status = 'ID NOT GENERATED' AND master.ticket_type_id = '$policy_type' THEN master.id END) + + // COUNT(CASE WHEN tcs.claim_status = 'NON ID' AND master.ticket_type_id = '$policy_type' THEN master.id END) + + // COUNT(CASE WHEN tcs.claim_status = 'CDA' AND master.ticket_type_id = '$policy_type' THEN master.id END) + + // COUNT(CASE WHEN tcs.claim_status = 'INFORMATION REQUIRED' AND master.ticket_type_id = '$policy_type' THEN master.id END) + + // COUNT(CASE WHEN tcs.claim_status LIKE '%UNDER PROCESS%' AND master.ticket_type_id = '$policy_type' THEN master.id END) + + // COUNT(CASE WHEN tcs.claim_status = 'APPROVED' AND master.ticket_type_id = '$policy_type' THEN master.id END) + + // COUNT(CASE WHEN tcs.claim_status = 'PAYMENT INITIATED' AND master.ticket_type_id = '$policy_type' THEN master.id END) + // ) AS total, + // COUNT(CASE WHEN tcs.claim_status = 'CLOSED' AND master.ticket_type_id = '$policy_type' THEN master.id END) AS closed, + // COUNT(CASE WHEN tcs.claim_status = 'SETTLED' AND master.ticket_type_id = '$policy_type' THEN master.id END) AS settled, + // COUNT(CASE WHEN tcs.claim_status = 'RETURNED' AND master.ticket_type_id = '$policy_type' THEN master.id END) AS returned, + // COUNT(CASE WHEN tcs.claim_status = 'REJECTED' AND master.ticket_type_id = '$policy_type' THEN master.id END) AS denied, + // ( + // COUNT(CASE WHEN tcs.claim_status = 'CLOSED' AND master.ticket_type_id = '$policy_type'THEN master.id END) + + // COUNT(CASE WHEN tcs.claim_status = 'SETTLED' AND master.ticket_type_id = '$policy_type' THEN master.id END) + + // COUNT(CASE WHEN tcs.claim_status = 'RETURNED' AND master.ticket_type_id = '$policy_type' THEN master.id END) + + // COUNT(CASE WHEN tcs.claim_status = 'REJECTED' AND master.ticket_type_id = '$policy_type' THEN master.id END) + // ) AS total2 + // FROM + // ticket_master master + // JOIN + // tpa ON master.tpa_id = tpa.id and tpa.is_active = 1 + // JOIN + // ticket_claim_status tcs ON tcs.id = master.claim_status_id and tcs.is_active = 1 + // WHERE + // master.created_at <= '$end_date' and master.created_at >= '$start_date' and master.is_active = 1 + // GROUP BY + // tpa.id; + + + // "; + // $result = $this->ticketMasterModel->query($sql)->getResultArray(); + + // return $result; + // } + +} diff --git a/app/Helpers/ChatbotHelper.php b/app/Helpers/ChatbotHelper.php new file mode 100644 index 00000000..9fc63f25 --- /dev/null +++ b/app/Helpers/ChatbotHelper.php @@ -0,0 +1,209 @@ +getEmpFamilybyEmpCode(emp_code: $emp_code,client_id: $client_id,emp_status: ['draft'],policy_status:['draft'],client_branch_id:[ $client_branch_id ],relationship:[$relationship]); + } + + public static function getHospitalLink($client_policy_id){ + // $client_policy_id = 336; + // $emp_id = 12288; + $EmployeePolicyModel = new EmployeePolicyModel(); + $res = $EmployeePolicyModel->getHospitalLinkByPolicyandEmp($client_policy_id); + + return is_array($res) && count($res) ? $res[0]['network_hospitals'] : null; + } + + public static function getPhoneNumber(){ + $emp_id = 12288; + $EmployeeModel = new EmployeeModel(); + return $EmployeeModel->select('mobile')->where('id',$emp_id)->first()['mobile']; + } + + public static function get_payload_data(string $key = null) + { + // Get the request object using the service helper + $request = service('request'); + + // Get the raw input (JSON or other data) + $rawInput = $request->getBody(); + + // Check if the raw input is valid JSON + $payload = json_decode($rawInput, true); + + if (json_last_error() === JSON_ERROR_NONE) { + // JSON is valid, return the requested key or the entire payload + return $key ? ($payload[$key] ?? null) : $payload; + } else { + // JSON is invalid, fallback to raw input or POST data + $payload = $request->getRawInput() ?: $request->getPost(); + return $key ? ($payload[$key] ?? null) : $payload; + } + } + + public static function sendReimbursementProcessOverMail() + { + $emp_id = 12288; + $emp_code = 'HTL-007'; + $client_id = 159; + $policy_id = 0; + $client_branch_id = 126; + $relationship ='Father'; + $EmployeeModel = new EmployeeModel(); + $data = $EmployeeModel->find($emp_id); + if(isset($data) && isset($data['email_corporate'])) + { + $message = SELF::ReimbursementProcessMailTemplate(); + + $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"] + ]; + + + $common = ['mail_type'=>'reimbursement_mail_process_bot']; + $email_id = $data['email_corporate']; + $res = MailHelper::send_email(['mail' => $email_id, 'subject' => 'Mail Via CLI', 'message' => $message,'attachments' => $attachments,'common'=>$common]); + + $res = json_decode($res); + if($res->status == 'success') + { + return true; + } + else + { + return false; + } + } + else + { + return false; + } + + } + + public static function ReimbursementProcessMailTemplate() + { + $template = ' + + + + + How to Claim Your Insurance Reimbursement + + + + +
+

How to Claim Your Insurance Reimbursement

+

Dear [Customer Name],

+

We are here to assist you in claiming your insurance reimbursement smoothly. Please follow the steps below:

+ +
+
    +
  1. Gather Documents: Collect all required documents such as bills, invoices, and medical reports.
  2. +
  3. Complete the Claim Form: Fill out the insurance claim form accurately.
  4. +
  5. Attach Supporting Documents: Attach all necessary documents to support your claim.
  6. +
  7. Submit Your Claim: Send the completed form and documents via email or through our online portal.
  8. +
  9. Track Your Claim: Use our tracking system to monitor the status of your claim.
  10. +
  11. Receive Reimbursement: Once approved, the reimbursement will be processed to your registered account.
  12. +
+
+ + Submit Your Claim + +

If you have any questions, feel free to contact our support team.

+ + +
+ + + + '; + + return $template; + } + + + +} + +?> diff --git a/app/Helpers/ExcelSanitizeHelper.php b/app/Helpers/ExcelSanitizeHelper.php index b4950b34..5c2836a7 100644 --- a/app/Helpers/ExcelSanitizeHelper.php +++ b/app/Helpers/ExcelSanitizeHelper.php @@ -1,4 +1,5 @@ $value) { if (is_array($value)) { $cleanData[$key] = self::sanitizeArrayData($value); // Recursive call for nested arrays } elseif (is_string($value)) { // Remove non-printable characters and trim whitespace from strings - $cleanData[$key] = trim(str_replace(self::$nonPrintableChars, '', $value)); + $cleanData[$key] = trim(preg_replace(self::$nonPrintablePattern, '', $value)); } else { $cleanData[$key] = $value; // Keep non-string/non-array data as is } } - return $cleanData; } catch (\Exception $e) { // Log the error and the problematic data for debugging diff --git a/app/Helpers/GmailResponseHandler.php b/app/Helpers/GmailResponseHandler.php index 4a45f65c..8ff0ed35 100644 --- a/app/Helpers/GmailResponseHandler.php +++ b/app/Helpers/GmailResponseHandler.php @@ -56,11 +56,12 @@ class GmailResponseHandler{ // 'employee_id' => isset($params['params']['common']['employee_id']) ? $params['params']['common']['employee_id'] : null, // 'mail_type' => isset($params['params']['common']['mail_type']) ? $params['params']['common']['mail_type'] : null, // 'gmail_api_status' => isset($params['gmail_api']['status']) ? $params['gmail_api']['status'] : null, - // 'gmail_api_id' => isset($params['gmail_api']['data']['id']) ? $params['gmail_api']['data']['id'] : null + // 'gmail_api_id' => isset($params['gmail_api']['data']['id']) ? $params['gmail_api']['data']['id'] : null, + // 'received_message' => isset($params['gmail_api']['data']['labelIds'])?json_encode($params['gmail_api']['data']['labelIds']): null // ]; // Initialize data array $data = []; - // print_r($params['params']['common']);die(); + // // print_r($params['params']['common']);die(); if (isset($params['params']['common'])) { foreach ($params['params']['common'] as $key => $value) { $data[$key] = isset($value) ? $value : null; diff --git a/app/Helpers/MailHelper.php b/app/Helpers/MailHelper.php index 91e955b0..99490bde 100755 --- a/app/Helpers/MailHelper.php +++ b/app/Helpers/MailHelper.php @@ -194,6 +194,11 @@ class MailHelper } else { $bcc = ''; } + if(isset($params['cc'])){ + $cc = $params['cc']; + }else{ + $cc = ''; + } $from_address = getenv('email.fromEmail'); @@ -255,7 +260,6 @@ class MailHelper } $apiResponse = json_decode($response, true); - if ($httpCode === 200) { return json_encode(['status' => 'success', 'code' => 200, 'message' => 'Email Sent Successfully...', 'data' => $emaill], 200); } else { @@ -289,116 +293,152 @@ class MailHelper } public static function send_email($params) - { - $myLogger = \Config\Services::mylogger(); +{ + $myLogger = \Config\Services::mylogger(); + + $emaill = $params['mail']; + $subject = $params['subject']; + $message = $params['message']; + $attachments = isset($params['attachments']) ? $params['attachments'] : []; + $common = isset($params['common']) ? $params['common'] : ''; + $bcc = isset($params['bcc']) ? $params['bcc'] : ''; + $cc = isset($params['cc']) ? $params['cc'] : ''; + + $from_address = getenv('email.fromEmail'); + try { + $curl = curl_init(); - $emaill = $params['mail']; - $subject = $params['subject']; - $message = $params['message']; - $attachments = isset($params['attachments']) ? $params['attachments'] : []; - $common = isset($params['common']) ? $params['common'] : ''; - - $from_address = getenv('email.fromEmail'); - try { - $curl = curl_init(); - - $postData = [ - 'from' => [ - 'address' => $from_address - ], - 'to' => [ - [ - 'email_address' => [ - 'address' => $emaill - ] + $postData = [ + 'from' => [ + 'address' => $from_address + ], + 'to' => [ + [ + 'email_address' => [ + 'address' => $emaill ] - ], - 'subject' => $subject, - 'htmlbody' => $message - ]; + ] + ], + 'subject' => $subject, + 'htmlbody' => $message + ]; - // 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, // Add mime_type field - ]; - } + // 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); - // log_message('error','inside mail helper'); - // log_message('error', $response.' error->'.$err);die(); - $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...' . $emaill, - 'data' => $res - ], 404); - } + $mail_result = curl_exec($curl); + $err = curl_error($curl); + curl_close($curl); - // $apiResponse = json_decode($response, true); - - // Check if request_id exists in response (indicates success) - 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; + $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' => 500, - 'data' => $msg - ], 500); + 'code' => 404, + 'message' => 'Email Sent Failed...' . $emaill, + '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...' . $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/excel_util_helper.php b/app/Helpers/excel_util_helper.php index 436ae854..0b6a3a7b 100755 --- a/app/Helpers/excel_util_helper.php +++ b/app/Helpers/excel_util_helper.php @@ -532,8 +532,10 @@ if (!function_exists('name_and_empid_check_in_db')) if (!function_exists('check_dependent_conflict')) { - function check_dependent_conflict($family_data,$policy_terms,$actionArr) - { + function check_dependent_conflict($family_data,$policy_terms,$actionArr,$is_lgbtq) + { + // dd($family_data,$policy_terms,$actionArr,$is_lgbtq); + $result = ['status' => true]; $self_gender = null; @@ -622,10 +624,14 @@ if (!function_exists('check_dependent_conflict')) // print_r(array_values(array_count_values($overall_famility_relationships))); // print_r(in_array(2,array_values(array_count_values($overall_famility_relationships)))); - if($self_gender && $spouse_gender && $self_gender == $spouse_gender) + //check if this policy is allowed LGBTQ + if($is_lgbtq == 0) { - $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])]; + 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])]; + } } if(($allowed_spouse_count < $received_spouse_count) || ($allowed_child_count < $received_child_count) ) @@ -1072,7 +1078,9 @@ if (!function_exists('transform_excel_data_to_db')) if (!function_exists('premium_calculation_manager')) { function premium_calculation_manager($emp_data,$policy_terms,$slab_details,$default_si = null) - { + { + // dd($emp_data,$policy_terms,$slab_details,$default_si); + $myLogger = \Config\Services::mylogger(); // grid type // 1 = premium => si @@ -1238,6 +1246,7 @@ if (!function_exists('premium_calculation_manager')) $emp_data['policy_details']['premium'] = $slab_value['premium']; $emp_data['policy_details']['rata_premimum'] = calculate_pro_rata_premimum($emp_data['policy_details']['premium'],$emp_data['policy_details']['days'],(calculate_days_bw_dates($policy_terms['policy_start_date'],$policy_terms['policy_end_date'])->days + 1)); $emp_data['policy_details']['gst'] = (float) number_format(($emp_data['policy_details']['rata_premimum'] * ($gst/100)),2,'.',''); + $emp_data['policy_details']['age_band'] = $slab_value['age_from'].'-'.$slab_value['age_to']; $is_match_found = true; break; } @@ -1246,12 +1255,12 @@ if (!function_exists('premium_calculation_manager')) case "5": //GMC - Employees Age + SI $employee_received_si = $default_si == null ? $emp_data['policy_details']['basic_cover_si'] : $default_si; - $temp_date = (isset($emp_data['policy_details']['date_coverage']) ? $emp_data['policy_details']['date_coverage'] : $policy_terms['policy_start_date']); - $age = calculate_days_bw_dates(from_date: $emp_data['dob'],to_date: $temp_date)->y; - + $temp_date = (isset($emp_data['policy_details']['date_coverage']) ? $emp_data['policy_details']['date_coverage'] : $policy_terms['policy_start_date']); + $age = calculate_days_bw_dates(from_date: $emp_data['dob'],to_date: $temp_date)->y; + // kint::dump($age); foreach ($temp_slab_rates as $skey => $slab_value) { - + // dd($slab_value); if($slab_value['si'] == $employee_received_si && $slab_value['unit'] == $emp_data['unit'] && ($slab_value['age_from'] <= $age && $slab_value['age_to'] >= $age) && (($slab_value['premium_type'] == 1 && ( strtolower($emp_data['relationship']) == 'self' || $emp_data['temp']['acting_self'] ) ) || ($slab_value['premium_type'] == 2 || $slab_value['premium_type'] == null || $slab_value['premium_type'] == 3 ) )) { $emp_data['policy_details']['basic_cover_si'] = $slab_value['si']; @@ -1261,6 +1270,7 @@ if (!function_exists('premium_calculation_manager')) $emp_data['policy_details']['premium'] = $slab_value['premium']; $emp_data['policy_details']['rata_premimum'] = calculate_pro_rata_premimum($emp_data['policy_details']['premium'],$emp_data['policy_details']['days'],(calculate_days_bw_dates($policy_terms['policy_start_date'],$policy_terms['policy_end_date'])->days + 1)); $emp_data['policy_details']['gst'] = (float) number_format(($emp_data['policy_details']['rata_premimum'] * ($gst/100)),2,'.',''); + $emp_data['policy_details']['age_band'] = $slab_value['age_from'].'-'.$slab_value['age_to']; $is_match_found = true; break; } @@ -1276,7 +1286,7 @@ if (!function_exists('premium_calculation_manager')) if($slab_value['si'] == $employee_received_si && $slab_value['unit'] == $emp_data['unit'] && ($slab_value['age_from'] <= $age && $slab_value['age_to'] >= $age) && (($slab_value['premium_type'] == 1 && ( strtolower($emp_data['relationship']) == 'self' || $emp_data['temp']['acting_self'] ) ) || ($slab_value['premium_type'] == 2 || $slab_value['premium_type'] == null || $slab_value['premium_type'] == 3) )) { - // echo $emp_data['name']; + // echo $emp_data['name']; die; $emp_data['policy_details']['basic_cover_si'] = $slab_value['si']; $emp_data['policy_details']['date_coverage'] = (isset($emp_data['policy_details']['date_coverage']) ? $emp_data['policy_details']['date_coverage'] : $policy_terms['policy_start_date']); $emp_data['policy_details']['policy_end_date'] = $policy_terms['policy_end_date']; @@ -1284,6 +1294,7 @@ if (!function_exists('premium_calculation_manager')) $emp_data['policy_details']['premium'] = $slab_value['premium']; $emp_data['policy_details']['rata_premimum'] = calculate_pro_rata_premimum($emp_data['policy_details']['premium'],$emp_data['policy_details']['days'],(calculate_days_bw_dates($policy_terms['policy_start_date'],$policy_terms['policy_end_date'])->days + 1)); $emp_data['policy_details']['gst'] = (float) number_format(($emp_data['policy_details']['rata_premimum'] * ($gst/100)),2,'.',''); + $emp_data['policy_details']['age_band'] = $slab_value['age_from'].'-'.$slab_value['age_to']; $is_match_found = true; break; } @@ -1307,6 +1318,7 @@ if (!function_exists('premium_calculation_manager')) $emp_data['policy_details']['premium'] = $slab_value['premium']; $emp_data['policy_details']['rata_premimum'] = calculate_pro_rata_premimum($emp_data['policy_details']['premium'],$emp_data['policy_details']['days'],(calculate_days_bw_dates($policy_terms['policy_start_date'],$policy_terms['policy_end_date'])->days + 1)); $emp_data['policy_details']['gst'] = (float) number_format(($emp_data['policy_details']['rata_premimum'] * ($gst/100)),2,'.',''); + $emp_data['policy_details']['age_band'] = $slab_value['age_from'].'-'.$slab_value['age_to']; $is_match_found = true; break; @@ -1378,6 +1390,8 @@ if (!function_exists('premium_calculation_manager')) $emp_data['policy_details']['premium'] = $slab_value['premium']; $emp_data['policy_details']['rata_premimum'] = calculate_pro_rata_premimum($emp_data['policy_details']['premium'],$emp_data['policy_details']['days'],(calculate_days_bw_dates($policy_terms['policy_start_date'],$policy_terms['policy_end_date'])->days + 1)); $emp_data['policy_details']['gst'] = ((float) number_format(($emp_data['policy_details']['rata_premimum'] * ($gst/100)),2,'.','')); + $emp_data['policy_details']['age_band'] = $slab_value['age_from'].'-'.$slab_value['age_to']; + $is_match_found = true; break; } @@ -1459,6 +1473,7 @@ if (!function_exists('premium_calculation_manager')) $emp_data['policy_details']['premium'] = $slab_value['premium']; $emp_data['policy_details']['rata_premimum'] = calculate_pro_rata_premimum($emp_data['policy_details']['premium'],$emp_data['policy_details']['days'],calculate_days_bw_dates($policy_terms['policy_start_date'],$policy_terms['policy_end_date'])->days); $emp_data['policy_details']['gst'] = ((float) number_format(($emp_data['policy_details']['rata_premimum'] * ($gst/100)),2,'.','')); + $emp_data['policy_details']['age_band'] = $slab_value['age_from'].'-'.$slab_value['age_to']; $is_match_found = true; break; } diff --git a/app/Helpers/sendMailNotification.php b/app/Helpers/sendMailNotification.php index 2615b1fc..3ecb7932 100755 --- a/app/Helpers/sendMailNotification.php +++ b/app/Helpers/sendMailNotification.php @@ -113,7 +113,7 @@ class sendMailNotification $subject = $cleanedText; - $link = generate_download_link($rand_string); + $link = generate_download_link($rand_string).'/1'; $app_link = $_ENV['App_Url']; $name = $get_emp_email_and_other_details['name']; @@ -189,7 +189,7 @@ class sendMailNotification $emp_code = ''; // echo '
';
-                // print_r($array_list); die;
+                // dd($array_list); die;
 
                
 
@@ -204,6 +204,7 @@ class sendMailNotification
                         $policy_name = '';
                         $is_addon = '';
                         $rowspan = count($item) ?? 2;
+                        $is_si_set = 0;
                         
                         foreach ($item as $inner_item) {
 
@@ -262,7 +263,23 @@ class sendMailNotification
                             if($policy_premium_data['premium_type'] == 2){
                                 $temp_data .= '' . $si . '';
                             }else{
-                                $temp_data .= (($si != 0 && count($item) != 1) ? ('' . $si . '') : ($si == 0 ? "" : '' . $si . '') );
+                                // $temp_data .= (($si != 0 && count($item) != 1) ? ('' . $si . '') : ($si == 0 ? "" : '' . $si . '') );
+                                
+                                if ($si != 0 && count($item) != 1 && $is_si_set == 0) {
+                                    
+                                    $temp_data .= '' . $si . '';
+                                    $is_si_set = 1;
+
+                                } else {
+
+                                    if ($is_si_set == 1) {
+                                        $temp_data .= '';
+                                    } else {
+                                        $temp_data .= '' . $si . '';
+                                    }
+                                }     
+                                
+
                             }
                                             
                             // Only Display SI Topup and Dependent Addon 
@@ -1209,6 +1226,20 @@ class sendMailNotification
             $notification = $params['notification_data'];
             $client_data = $params['client_data'];
             $mail = $params['test_mail'];
+            $mailAttachmentModel = new MailAttachmentModel();
+            $attachment_data = $mailAttachmentModel
+                                ->select('file_path, file_name')
+                                ->where('notification_id', $notification['id'])
+                                ->where('is_active', 1)
+                                ->findAll();
+            
+            $attachments = [];
+            foreach ($attachment_data as $data) {
+                $attachments[] = [
+                    "filePath" => WRITEPATH . $data['file_path'],
+                    "fileName" => $data['file_name']
+                ];
+            }
 
             $mail_content = $notification['mail_content'];
             $subject = $notification['subject'];
@@ -1235,7 +1266,7 @@ class sendMailNotification
             $mail_content = str_replace("[[ecard_download_link]]", "Download Insurance Card", $mail_content);
             $mail_content = str_replace("[[client_name]]", $client_data['client_name'], $mail_content);
 
-            $wholeData =  ['mail' => $mail, 'subject' => $subject,'message'=> $mail_content,'bcc'=> $client_data['common_mails'], 'reply_to' => $client_data['reply_to']];
+            $wholeData =  ['mail' => $mail, 'subject' => $subject,'message'=> $mail_content,'bcc'=> $client_data['common_mails'],'attachments' => $attachments, 'reply_to' => $client_data['reply_to']];
 
             return $wholeData;
 
diff --git a/app/Helpers/utility_helper.php b/app/Helpers/utility_helper.php
index 79523f60..2e932ab7 100755
--- a/app/Helpers/utility_helper.php
+++ b/app/Helpers/utility_helper.php
@@ -235,7 +235,7 @@ if (!function_exists('get_username')) {
 if (!function_exists('get_role_id')) {
     function get_role_id() {
 
-        $role_id = get_session_userdata()->role;
+        $role_id = isset(get_session_userdata()->role) ? get_session_userdata()->role : null;
         return $role_id;
     }
 }
@@ -544,6 +544,10 @@ if (!function_exists('change_date_format')) {
             'Y/m/d',     // 2024/12/01
             'Y.m.d',     // 2024.12.01
             'Y,m,d',     // 2024,12,01
+
+            'd/m/Y',     // 01/01/2025
+            'd-m-Y',     // 01-01-2025
+
         ];
 
         try {
diff --git a/app/Models/ClientPolicyModel.php b/app/Models/ClientPolicyModel.php
index 6e9cc897..3f0d7a43 100755
--- a/app/Models/ClientPolicyModel.php
+++ b/app/Models/ClientPolicyModel.php
@@ -52,7 +52,8 @@ class ClientPolicyModel extends Model
         "disclaimer",
         "is_active",
         "is_member_modify_allowed",
-        "cd_ac_pk"
+        "cd_ac_pk",
+        "is_lgbtq",
     ];
 
     // Callbacks
diff --git a/app/Models/EmployeeModel.php b/app/Models/EmployeeModel.php
index 73caca1e..d8fd4894 100755
--- a/app/Models/EmployeeModel.php
+++ b/app/Models/EmployeeModel.php
@@ -106,7 +106,7 @@ class EmployeeModel extends Model
 
     public function getEmpFamilybyEmpCode(string $client_policy_id = null,string $emp_code = null,string $client_id = null,array $emp_status = [],array $policy_status = [],array $relationship = [],array $client_branch_id = [])
     {
-        $result =  $this->select(['employees.id as emp_id', 'employees.client_id','employees.client_branch_id', 'employees.relationship', 'employees.relationship_code', 'employees.change_event', 'employees.emp_code', 'employees.name', 'employees.email_personal', 'employees.email_corporate', 'employees.mobile', 'employees.gender', 'employees.dob', 'employees.doj', 'employees.basic_pay', 'employees.band', 'employees.designation', 'employees.emp_status','employees.unit','employees.file_id','employee_polices.id as emp_policy_id', 'employee_polices.employee_id', 'employee_polices.client_policy_id', 'employee_polices.tpa_id', 'employee_polices.uhid', 'employee_polices.batch_code', 'employee_polices.status', 'employee_polices.pre_existing_alignments', 'employee_polices.basic_cover_si', 'employee_polices.date_coverage', 'employee_polices.policy_end_date', 'employee_polices.days', 'employee_polices.premium', 'employee_polices.rata_premimum', 'employee_polices.gst', 'employee_polices.date_of_exit', 'employee_polices.reason_for_exit','policy_type.long_name as policy_name','client_policy.is_addon', 'employee_polices.payable_employee'])
+        $result =  $this->select(['employees.id as emp_id', 'employees.client_id','employees.client_branch_id', 'employees.relationship', 'employees.relationship_code', 'employees.change_event', 'employees.emp_code', 'employees.name', 'employees.email_personal', 'employees.email_corporate', 'employees.mobile', 'employees.gender', 'employees.dob', 'employees.doj', 'employees.basic_pay', 'employees.band', 'employees.designation', 'employees.emp_status','employees.unit','employees.file_id','employee_polices.id as emp_policy_id', 'employee_polices.employee_id', 'employee_polices.client_policy_id', 'employee_polices.tpa_id', 'employee_polices.uhid', 'employee_polices.batch_code', 'employee_polices.status', 'employee_polices.pre_existing_alignments', 'employee_polices.basic_cover_si', 'employee_polices.date_coverage', 'employee_polices.policy_end_date', 'employee_polices.days', 'employee_polices.premium', 'employee_polices.rata_premimum', 'employee_polices.gst', 'employee_polices.date_of_exit', 'employee_polices.reason_for_exit','policy_type.long_name as policy_name','client_policy.is_addon', 'employee_polices.payable_employee','employee_polices.rand_string','employee_polices.claim_status'])
                         ->join('employee_polices', 'employee_polices.employee_id = employees.id')
                         ->join('client_policy', 'client_policy.id = employee_polices.client_policy_id')
                         ->join('policy_type', 'policy_type.id = client_policy.policy_type_id','left')
@@ -240,4 +240,25 @@ class EmployeeModel extends Model
         return $results;
     }
 
+    public function getEmployeeByEmployeeCode($emp_code)
+    {
+        return $this->select("
+            employees.id AS emp_id,
+            employees.name AS emp_name,
+            employees.emp_code,
+            employees.mobile AS emp_mobile,
+            employees.email_corporate AS emp_email,
+            employees.relationship AS emp_relationship,
+            employee_polices.uhid AS policy_no,
+            employee_polices.tpa_id AS tpa_no
+        ")
+        ->join('employee_polices', 'employees.id = employee_polices.employee_id', 'left')
+        ->where('employees.is_active', 1)
+        ->where('employee_polices.is_active', 1)
+        ->where('employees.emp_code', $emp_code)    
+        ->groupBy('employees.id')
+        ->findAll();
+    }
+
 }
+
diff --git a/app/Models/EmployeePolicyModel.php b/app/Models/EmployeePolicyModel.php
index c7dce21a..d23b315e 100755
--- a/app/Models/EmployeePolicyModel.php
+++ b/app/Models/EmployeePolicyModel.php
@@ -35,7 +35,8 @@ class EmployeePolicyModel extends Model
         "claim_status",
         'ecard_sent_status',
         'payable_employee',
-        'file_id'
+        'file_id',
+        "age_band",
     ];
 
     // Callbacks
@@ -286,7 +287,10 @@ class EmployeePolicyModel extends Model
                 employee_polices.premium,
                 employee_polices.rata_premimum as pro_rata_premium,
                 employee_polices.gst,
+                employee_polices.age_band,
                 (employee_polices.rata_premimum + employee_polices.gst) AS total, 
+
+
                 batch_data.emp_policy_id, 
                 batch_data.bl AS batch_list_batch_code, 
                 batch_data.bf AS batch_files_batch_code,
@@ -486,10 +490,13 @@ class EmployeePolicyModel extends Model
                         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,                
+                        employee_polices.rata_premimum as old_si_premium,  
+                        employee_polices.age_band,
+              
                         batch_data.emp_policy_id,
                         batch_data.bl AS batch_list_batch_code,
                         batch_data.bf AS batch_files_batch_code,
+
                         sidata.new_basic_cover_si, 
                         sidata.new_si_premium,
                         sidata.date_of_coverage,
@@ -818,6 +825,9 @@ class EmployeePolicyModel extends Model
                 employee_polices.uhid as uhid, 
                 employee_polices.rata_premimum as premium, 
                 employee_polices.claim_status,
+                employee_polices.age_band,
+                employee_polices.tpa_id,
+
                 
                 batch_data.emp_policy_id AS emp_policy_id,
                 batch_data.bl AS batch_list_batch_code,
@@ -1126,7 +1136,7 @@ class EmployeePolicyModel extends Model
 
     public function getEmployeePolicyForFileList($client_id, $policy_id)
     {
-         $result =  $this->select(['employee_polices.*','pt.policy_type','im.short_name as insurer_short_name','ib.branch_name as insurer_branch_name','ib.branch_code as insurer_branch_code','tpam.name as tpa_name','tpam.short_name as tpa_short_name','tpab.branch_code as tpa_branch_code','cm.client_name','cm.short_name as client_short_name','emp.relationship','emp.relationship_code','emp.change_event','emp.emp_code','emp.name','emp.email_corporate','emp.dob','emp.gender','emp.emp_status','emp.is_active as emp_is_active','emp.mobile as mobile'])
+         $result =  $this->select(['employee_polices.*','pt.policy_type','im.short_name as insurer_short_name','ib.branch_name as insurer_branch_name','ib.branch_code as insurer_branch_code','tpam.name as tpa_name','tpam.short_name as tpa_short_name','tpab.branch_code as tpa_branch_code','cm.client_name','cm.short_name as client_short_name','emp.relationship','emp.relationship_code','emp.change_event','emp.emp_code','emp.name','emp.email_corporate','emp.dob','emp.gender','emp.emp_status','emp.is_active as emp_is_active','emp.mobile as mobile','cp.policy_type_id'])
                          ->join('employees emp', 'employee_polices.employee_id = emp.id') 
                          ->join('client_policy cp', 'employee_polices.client_policy_id = cp.id') //cp - client policy
                          ->join('policy_type pt', 'cp.policy_type_id = pt.id') //pm - policy master
@@ -1722,7 +1732,7 @@ class EmployeePolicyModel extends Model
                 employee_polices ep
             WHERE 
                 ep.file_id = $file_id
-                AND ep.uhid IS NOT NULL'
+                AND ep.uhid IS NOT NULL
                 AND ep.status != 'truncated'
                 AND ep.status != 'truncated'
                 AND ep.is_active = 1;
@@ -1735,4 +1745,17 @@ class EmployeePolicyModel extends Model
 
         return $result[0];
     }
+
+    public function getHospitalLinkByPolicyandEmp($client_policy_id){
+        $data =  $this->db->table('employee_polices')
+        ->select('tpa.network_hospitals')
+        ->where('client_policy_id', $client_policy_id)
+        ->where('employee_polices.is_active', 1)
+        ->join('tpa', 'tpa.id = employee_polices.tpa_id AND tpa.is_active = 1')
+        // ->join('employees', 'employees.id = employee_polices.employee_id AND employees.id = ' . (int) $emp_id)        
+        ->get()->getResultArray();
+        
+        // var_dump($this->db->getLastQuery());
+        return $data;
+    }
 }
\ No newline at end of file
diff --git a/app/Models/NotificationModel.php b/app/Models/NotificationModel.php
index d78d2a69..edc3069d 100755
--- a/app/Models/NotificationModel.php
+++ b/app/Models/NotificationModel.php
@@ -4,9 +4,9 @@ namespace App\Models;
 
 use CodeIgniter\Model;
 
-class NotificationModel extends Model
+class NotificationModel extends Model       
 {
     protected $table            = 'notifications';
     protected $primaryKey       = 'id';
-    protected $allowedFields    = ["id","client_id","template_name","subject","mail_content","enabled","created_by","updated_by","is_active",];
+    protected $allowedFields    = ["id","client_id","template_name","subject","mail_content","enabled","created_by","updated_by","is_active",'mail_content_json'];
 }
\ No newline at end of file
diff --git a/app/Models/PTCOShareDetailsModel.php b/app/Models/PTCOShareDetailsModel.php
index bb2eb359..dc6b2cec 100644
--- a/app/Models/PTCOShareDetailsModel.php
+++ b/app/Models/PTCOShareDetailsModel.php
@@ -65,6 +65,7 @@ class PTCOShareDetailsModel extends Model
         'cop_amt',
         'statement_id',
         'follower_policy_no',
+        'non_comm_per_amt',
     ];
 
     public function getNonReconcileredPolicyTransactions(string $insurer_id,string $insurer_branch_id)
diff --git a/app/Models/PolicyTransactionModel.php b/app/Models/PolicyTransactionModel.php
index 0364fd17..246609cd 100644
--- a/app/Models/PolicyTransactionModel.php
+++ b/app/Models/PolicyTransactionModel.php
@@ -76,7 +76,9 @@ class PolicyTransactionModel extends Model
         'ct_tran_id',
         'remarks',
         'month',
-        'cd_ac_pk'
+        'cd_ac_pk',
+        'install_due_date',
+        'policy_with_corr',
     ];
     
 
@@ -363,7 +365,6 @@ class PolicyTransactionModel extends Model
                 vehicle.vehicle_no,
                 tpa.name as tpa_name,
                 pt_co_share_details.remark as remarks,
-                pt_co_share_details.reward,
                 pt_co_share_details.bp_amt,
                 pt_co_share_details.exp_amt,
                 pt_co_share_details.id as pt_id,
@@ -383,7 +384,6 @@ class PolicyTransactionModel extends Model
                 (pt_co_share_details.agreed_tp_per + pt_co_share_details.agreed_tep_per) AS agreed_tp_or_ter_per,
 
                 pt_co_share_details.agreed_bp_per,
-
                 ROUND(
                 (
                     SELECT
@@ -405,6 +405,24 @@ class PolicyTransactionModel extends Model
                 ),
                 2
                 ) AS total_irda_amt,
+                ROUND(
+                (
+                    SELECT
+                    (
+                        SUM(co_share_stmt_details.reward) 
+
+                    ) AS reward
+                    FROM
+                    co_share_stmt_details
+                    JOIN insurer_statements ON co_share_stmt_details.statement_id = insurer_statements.id
+                    WHERE
+                    co_share_stmt_details.co_share_id = pt_co_share_details.id
+                    AND co_share_stmt_details.is_active = 1
+                    AND insurer_statements.is_active = 1
+                    $date_condition
+                ),
+                2
+                ) AS reward,
 
                 ROUND(
                 (
@@ -424,7 +442,7 @@ class PolicyTransactionModel extends Model
                     AND co_share_stmt_details.is_active = 1
                     AND pt_table.is_active = 1
                     AND insurer_statements.is_active = 1
-                    AND insurer_statements.invoice_no IS NOT NULL
+                    AND insurer_statements.invoice_status IS NOT NULL
                     $date_condition
                    
                 ),
@@ -467,7 +485,7 @@ class PolicyTransactionModel extends Model
                             AND co_share_stmt_details.is_active = 1
                             AND pt_table.is_active = 1
                             AND insurer_statements.is_active = 1
-                            AND insurer_statements.invoice_no IS NULL
+                            AND insurer_statements.invoice_status IS NULL
                             $date_condition
                     )
                 ), 
@@ -476,7 +494,7 @@ class PolicyTransactionModel extends Model
 
             ")
             ->join('pt_co_share_details', 'policy_transaction.id = pt_co_share_details.pt_id', 'left')
-            ->join('insurer_statements', 'pt_co_share_details.statement_id = insurer_statements.id', 'left')
+            // ->join('insurer_statements', 'pt_co_share_details.statement_id = insurer_statements.id', 'left')
             ->join('clients', 'clients.id = policy_transaction.client_id')
             ->join('client_branch', 'policy_transaction.client_branch_id = client_branch.id', 'left')
             ->join('client_policy', 'policy_transaction.client_policy_id = client_policy.id', 'left')
@@ -501,19 +519,27 @@ class PolicyTransactionModel extends Model
             $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);
         }
 
-        if($date_type == 'statement_month' && $start_date != 0 && $end_date != 0){
+        // if($date_type == 'statement_month' && $start_date != 0 && $end_date != 0){
 
-            $builder->where('policy_transaction.month >=', $startDate)
-            ->where('policy_transaction.month <=', $endDate);
+        //     $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.month >=', $startDate)
+        //     ->where('policy_transaction.month <=', $endDate);
+        // }
+
+        // Conditionally join insurer_statements if $date_type == 'statement_month'
+        if ($date_type == 'statement_month'  && $start_date != 0 && $end_date != 0) {
+            $startDate = date('Y-m-d', strtotime($start_date));
+            $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');
         }
 
         if ($client_id != 0) {
@@ -735,16 +761,55 @@ class PolicyTransactionModel extends Model
 
                 pt_co_share_details.exp_amt,
                 pt_co_share_details.variance,
+                ROUND ( (pt_co_share_details.bp_amt + pt_co_share_details.tp_amt + pt_co_share_details.tep_amt),2) as original_premium,
+                ROUND(
+                (
+                    SELECT
+                    (
+                        SUM(co_share_stmt_details.actual_bp_amt) + SUM(co_share_stmt_details.actual_tp_amt) + SUM(co_share_stmt_details.actual_tep_amt)
+                    ) AS total_stmt_amt
+                    FROM
+                    co_share_stmt_details
+                    JOIN insurer_statements ON co_share_stmt_details.statement_id = insurer_statements.id and insurer_statements.is_active = 1
+                    WHERE
+                    co_share_stmt_details.co_share_id = pt_co_share_details.id
+                    AND co_share_stmt_details.is_active = 1
+                ),
+                2
+                ) AS statement_premium,
+
+                               COALESCE(
+                    (pt_co_share_details.bp_amt + pt_co_share_details.tp_amt + pt_co_share_details.tep_amt), 0
+                ) - 
+                COALESCE(
+                    (
+                        SELECT 
+                            SUM(co_share_stmt_details.actual_bp_amt) + 
+                            SUM(co_share_stmt_details.actual_tp_amt) + 
+                            SUM(co_share_stmt_details.actual_tep_amt)
+                        FROM 
+                            co_share_stmt_details
+                        JOIN 
+                            insurer_statements 
+                        ON 
+                            co_share_stmt_details.statement_id = insurer_statements.id 
+                            AND insurer_statements.is_active = 1
+                        WHERE 
+                            co_share_stmt_details.co_share_id = pt_co_share_details.id
+                            AND co_share_stmt_details.is_active = 1
+                    ), 0
+                ) AS premium_variance_amt,
+
 
                 ROUND(
                 (
                     SELECT
                     (
-                        SUM(co_share_stmt_details.actual_bp_brokerage_amt) + SUM(co_share_stmt_details.actual_tp_brokerage_amt) + SUM(co_share_stmt_details.actual_tep_brokerage_amt)
+                        SUM(co_share_stmt_details.actual_bp_brokerage_amt) + SUM(co_share_stmt_details.actual_tp_brokerage_amt) + SUM(co_share_stmt_details.actual_tep_brokerage_amt) + SUM(co_share_stmt_details.reward)
                     ) AS total_irda_amt
                     FROM
                     co_share_stmt_details
-                    JOIN insurer_statements ON co_share_stmt_details.statement_id = insurer_statements.id
+                    JOIN insurer_statements ON co_share_stmt_details.statement_id = insurer_statements.id and insurer_statements.is_active = 1
                     WHERE
                     co_share_stmt_details.co_share_id = pt_co_share_details.id
                     AND co_share_stmt_details.is_active = 1
@@ -759,11 +824,11 @@ class PolicyTransactionModel extends Model
                             (
                                 SUM(co_share_stmt_details.actual_bp_brokerage_amt) +
                                 SUM(co_share_stmt_details.actual_tp_brokerage_amt) +
-                                SUM(co_share_stmt_details.actual_tep_brokerage_amt)
+                                SUM(co_share_stmt_details.actual_tep_brokerage_amt) + SUM(co_share_stmt_details.reward)
                             ) 
                         FROM co_share_stmt_details
                         JOIN insurer_statements 
-                            ON co_share_stmt_details.statement_id = insurer_statements.id
+                            ON co_share_stmt_details.statement_id = insurer_statements.id and insurer_statements.is_active = 1
                         WHERE 
                             co_share_stmt_details.co_share_id = pt_co_share_details.id
                             AND co_share_stmt_details.is_active = 1
@@ -783,7 +848,18 @@ class PolicyTransactionModel extends Model
             ->join('policy_type', 'policy_transaction.policy_type_id = policy_type.id', 'left')
             ->where('policy_transaction.is_active', 1)
             ->where('pt_co_share_details.is_active', 1)
-            ->having('variance_amt IS NOT NULL');
+            // ->where('insurer_statements.is_active',1);
+            // ->having('variance_amt IS NOT NULL')
+            // ->having('variance_amt !=',0)
+            // ->having('premium_variance_amt IS NOT NULL')
+            // ->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);
@@ -1125,5 +1201,62 @@ class PolicyTransactionModel extends Model
     
         return $builder->get()->getResultArray();
     }
+
+
+    //function for fetch renewal report data
+    public function getRenewalReportData($start_date = null, $end_date = null, $client_type = null, $client = null, $issuer = null)
+    {
+        $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.*, 
+                c.client_name, 
+                c.short_name AS client_short_name, 
+                c.client_type,
+                policy_type.policy_type,
+                i.name as insurer_name,
+                ib.branch_name as insurer_branch_name,
+                vehicle.vehicle_no,
+                leads.status as lead_status
+            ')
+            ->join('clients c', 'pt.client_id = c.id', 'left')
+            ->join('pt_co_share_details pt_co', 'pt.id = pt_co.pt_id and pt_co.co_share_type = 1', 'left')
+            ->join('insurers i', 'pt_co.insurer_id = i.id', 'left')
+            ->join('insurer_branch ib', 'pt_co.insurer_branch_id = ib.id', 'left')
+            ->join('policy_type', 'pt.policy_type_id = policy_type.id', 'left')
+            ->join('vehicle', 'pt.vehicle_id = vehicle.id and vehicle.is_active = 1', 'left')
+            ->join('leads', 'pt.client_policy_id = leads.source_policy_id and leads.source_policy_id != 0 and leads.is_active = 1', 'left')
+            ->where('pt.policy_end_date >=', $fromDate)
+            ->where('pt.policy_end_date <=', $toDate)
+            ->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);
+        }
+        if (!empty($client)) {
+            $query->where('pt.client_id', $client);
+        }
+        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
+        $results = $query->get()->getResultArray();
+        // print($this->db->getLastQuery()); die;
+        return $results;
+    }
+    
     
 }
diff --git a/app/Models/PolicyTransactionStatusModel.php b/app/Models/PolicyTransactionStatusModel.php
index 712fa8e0..718a417e 100644
--- a/app/Models/PolicyTransactionStatusModel.php
+++ b/app/Models/PolicyTransactionStatusModel.php
@@ -20,6 +20,7 @@ class PolicyTransactionStatusModel extends Model
         'created_at',
         'created_by',
         'is_active',
+        'last_action_date',
     ];
 
     // Callbacks
diff --git a/app/Models/PolicyTypeModel.php b/app/Models/PolicyTypeModel.php
index 3edd01f1..90aa1758 100755
--- a/app/Models/PolicyTypeModel.php
+++ b/app/Models/PolicyTypeModel.php
@@ -22,6 +22,6 @@ class PolicyTypeModel extends Model
         "etp",
         "iep",
         "itp",
-        "question_json",
+        "question_json",'itep','etep', 'policy_category',
     ];
 }
diff --git a/app/Models/TicketClaimStatusModel.php b/app/Models/TicketClaimStatusModel.php
new file mode 100644
index 00000000..99078a03
--- /dev/null
+++ b/app/Models/TicketClaimStatusModel.php
@@ -0,0 +1,51 @@
+table('ticket_claim_status')
+            ->select('ticket_mail_template.*')
+            ->join('ticket_mail_template', 'ticket_mail_template.trigger_type = ticket_claim_status.trigger_type')
+            ->where('ticket_mail_template.is_active', 1)
+            ->where('ticket_claim_status.is_active', 1)
+            ->where('ticket_claim_status.id', $claim_status_id)
+            ->get()
+            ->getResultArray();
+
+        return $template_data;
+    }
+
+    public function getTemplateDataByTicketID($ticket_id)
+    {
+        $template_data = $this
+        ->select("ticket_mail_template.*, ticket_master.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', '
+                    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')
+        ->where('ticket_master.id', $ticket_id)
+        ->where('ticket_master.is_active', 1)
+        ->first();
+
+        return $template_data;
+    }
+
+    public function getTicketDataByTicketID($ticket_id)
+    {
+        $ticket_data = $this->select("
+                ticket_master.*,
+
+                user_profiles.first_name as acm,
+                user_profiles.mobile as acm_mobile,
+                user_profiles.email as acm_email,
+
+                clients.common_mails,
+                clients.client_name,
+
+                insurers.name as insurer_name,
+                tpa.name as tpa_name,
+                ticket_notes.note as auto_query_content
+            ")
+            ->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('user_profiles', 'ticket_master.acm_id = user_profiles.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)
+    // {   
+    //     //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 =  "AND 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,
+    //             tcs.claim_status,
+    //             tcs.id AS status_id,
+    //             CASE
+    //                 WHEN DATEDIFF(
+    //                     COALESCE(th.created_at, tm.created_at),
+    //                     COALESCE(
+    //                         (SELECT MIN(created_at) FROM ticket_history th2 WHERE th2.ticket_id = tm.id),
+    //                         tm.created_at
+    //                     )
+    //                 ) BETWEEN 0 AND 6 THEN '0-6 Days'
+    //                 WHEN DATEDIFF(
+    //                     COALESCE(th.created_at, tm.created_at),
+    //                     COALESCE(
+    //                         (SELECT MIN(created_at) FROM ticket_history th2 WHERE th2.ticket_id = tm.id),
+    //                         tm.created_at
+    //                     )
+    //                 ) BETWEEN 7 AND 12 THEN '7-12 Days'
+    //                 WHEN DATEDIFF(
+    //                     COALESCE(th.created_at, tm.created_at),
+    //                     COALESCE(
+    //                         (SELECT MIN(created_at) FROM ticket_history th2 WHERE th2.ticket_id = tm.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
+    //         WHERE
+    //             tm.ticket_type_id = 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;
+    // }
+
+    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
+                    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;
+    }
+
+    public function tpaWiseReport($policy_type = null ,$start_date = null, $end_date = null){
+            $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'], ['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
+            // $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', 'RETURNED', 'REJECTED'])) {
+                $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, ' +');
+        $dynamicClosedTotal = rtrim($dynamicClosedTotal, ' +');
+        // print_rr($dynamicSelect);
+        // Construct the final SQL query
+        $sql = "
+            SELECT 
+                tpa.name AS TPA_NAME,
+                $dynamicSelect,
+                ($dynamicTotal) AS TOTAL,
+                ($dynamicClosedTotal) AS CLEARED_TOTAL
+            FROM 
+                ticket_master master
+            JOIN 
+                tpa ON master.tpa_id = tpa.id AND tpa.is_active = 1
+            WHERE 
+                master.created_at BETWEEN '$start_date' AND '$end_date'
+                AND master.is_active = 1
+                $ticket_type_data_2
+            GROUP BY 
+                tpa.id;
+        ";
+
+        // Execute the query
+        $result = $this->db->query($sql)->getResultArray();
+
+        // print_rr($result);die();
+        return $result;
+
+    }
+
+    public function accountManagerWiseReport($policy_type = null ,$start_date = null, $end_date = null){
+
+        if ($policy_type == 1) {
+            $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 = '';
+
+        // 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 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 = "
+            SELECT 
+                user_profiles.first_name AS ACM_NAME,
+                $dynamicSelect,
+                ($dynamicTotal) AS TOTAL
+            FROM 
+                ticket_master master
+            JOIN 
+                user_profiles ON master.acm_id = user_profiles.id AND user_profiles.is_active = 1
+            WHERE 
+                master.created_at BETWEEN '$start_date' AND '$end_date'
+                AND master.is_active = 1
+                $ticket_type_data_2
+            GROUP BY 
+                user_profiles.id;
+        ";
+
+            $result = $this->db->query($sql)->getResultArray();
+            // dd($result);
+
+            return $result;
+        
+
+        }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'])) {
+                    $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, ' +');
+            $dynamicClosedTotal = rtrim($dynamicClosedTotal, ' +');
+            // print_rr($dynamicSelect);
+            // Construct the final SQL query
+            $sql = "
+                SELECT 
+                    user_profiles.first_name AS ACM_NAME,
+                    $dynamicSelect,
+                    ($dynamicTotal) AS TOTAL,
+                    ($dynamicClosedTotal) AS CLEARED_TOTAL
+                FROM 
+                    ticket_master master
+                JOIN 
+                    user_profiles ON master.acm_id = user_profiles.id AND user_profiles.is_active = 1
+                WHERE 
+                    master.created_at BETWEEN '$start_date' AND '$end_date'
+                    AND master.is_active = 1
+                    $ticket_type_data_2
+                GROUP BY 
+                    user_profiles.id;
+            ";
+    
+            // Execute the query
+            $result = $this->db->query($sql)->getResultArray();
+    
+            // print_rr($result);die();
+            return $result;
+        }
+    }
+    
+}
diff --git a/app/Models/TicketMessageModel.php b/app/Models/TicketMessageModel.php
new file mode 100644
index 00000000..88926fff
--- /dev/null
+++ b/app/Models/TicketMessageModel.php
@@ -0,0 +1,50 @@
+
+.table th,
+.table td {
+    padding: 8px;
+}
+
+table.dataTable tbody td {
+    padding: 4px 4px !important;
+}
+
+
+
+
+
+
+
+
+

Renewal Policy List

+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + $row) { ?> + + + + + + + + + + + + + + + + + + +
+
S.No.
+
+
Renewal Month
+
+
Issuer
+
+
Policy No
+
+
Policy
+
+
Insurer Name
+
+
Insurer Branch
+
+
Insured
+
+
Client Type
+
+
Business Type
+
+
Date of Issue
+
+
Policy Start Date
+
+
Policy Expiry Date
+
+
Vehicle No
+
+
Lead Status
+
+ + + +
+
+
+
+
+
+
+ + \ No newline at end of file diff --git a/app/Views/bds_report_Insurer_wise_Data.php b/app/Views/bds_report_Insurer_wise_Data.php new file mode 100644 index 00000000..d97e6f18 --- /dev/null +++ b/app/Views/bds_report_Insurer_wise_Data.php @@ -0,0 +1,131 @@ + + +
+
+
+
+
+

Insurer List

+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
InsurerPoliciesPremiumRevenue
Grand Total
+
+
+
+
+ + diff --git a/app/Views/bds_report_bap_wise_data.php b/app/Views/bds_report_bap_wise_data.php new file mode 100644 index 00000000..391e6526 --- /dev/null +++ b/app/Views/bds_report_bap_wise_data.php @@ -0,0 +1,131 @@ + + +
+
+
+
+
+

BAP Report List

+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
InsurerPoliciesPremiumRevenue
Grand Total
+
+
+
+
+ + \ No newline at end of file diff --git a/app/Views/chatbot.php b/app/Views/chatbot.php new file mode 100644 index 00000000..359b4ce0 --- /dev/null +++ b/app/Views/chatbot.php @@ -0,0 +1,83 @@ + + + + + + Insurance ChatBot + + + + +

Welcome to Insurance ChatBot

+ + + + + + + + + + diff --git a/app/Views/claims_report_acc_manager_wise.php b/app/Views/claims_report_acc_manager_wise.php new file mode 100644 index 00000000..a629a01c --- /dev/null +++ b/app/Views/claims_report_acc_manager_wise.php @@ -0,0 +1,103 @@ + + +
+
+
+
+
+

Account Manger Claim Status List

+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + {$totals[$col_name]}"; + } + } + ?> + + +
OPENCLEARED
Grand Total
+
+
+
+
+ + diff --git a/app/Views/claims_report_tpa_wise.php b/app/Views/claims_report_tpa_wise.php new file mode 100644 index 00000000..0a3fc65a --- /dev/null +++ b/app/Views/claims_report_tpa_wise.php @@ -0,0 +1,101 @@ + + +
+
+
+
+
+

TPA Claim Status List

+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + {$totals[$col_name]}"; + } + } + ?> + + +
OPENCLEARED
Grand Total
+
+
+
+
+ + diff --git a/app/Views/client_policy.php b/app/Views/client_policy.php index cf219b6c..cbe4f817 100755 --- a/app/Views/client_policy.php +++ b/app/Views/client_policy.php @@ -175,14 +175,14 @@ - + +
@@ -755,7 +755,7 @@ dataType: 'json', success: function(res) { - console.log('client_policy_res', res); + console.log('client_policy_res by btnPolicyEdit', res); var gst = (res.data.gst == 0.00) ? 18 : res.data.gst; @@ -825,6 +825,13 @@ $('#policy_visibility').prop('checked', false); } + if (res.data.is_lgbtq == 1) { + $('#is_lgbtq').prop('checked', true); + } else { + $('#is_lgbtq').prop('checked', false); + } + + // Member Modify Data Enable or Disable // if (res.data.is_member_modify_allowed == 1) { // $('#is_member_modify_allowed').prop('checked', true); @@ -937,7 +944,7 @@ }, 1000); setTimeout(function(){ - appendCDACNO(res.cd_data, res.data.cd_ac_no) // append and select the current CD Account Number + appendCDACNO(res.cd_data, res.data.cd_ac_pk) // append and select the current CD Account Number appendBasePolicyList(res.client_policy_list, res.data.base_policy, res.data.client_branch_id); // append and select the Base palicy }, 2000) @@ -1653,7 +1660,7 @@ text: item.cd_ac_no }); - if (select === item.cd_ac_no) { + if (select === item.id) { //console.log('selected'); option.attr('selected', true); } @@ -1886,6 +1893,19 @@ $('#policy_visibility').prop('checked', false); } + console.log('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!') + + console.log(res.data.is_lgbtq) + + if (res.data.is_lgbtq == 1) { + $('#is_lgbtq').prop('checked', true); + } else { + $('#is_lgbtq').prop('checked', false); + } + + console.log('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!') + + if (res.data.policy_type_id == '4' || res.data.policy_type_id == '5') { @@ -1970,7 +1990,7 @@ }, 1000); setTimeout(function(){ - appendCDACNO(res.cd_data, res.data.cd_ac_no) // append and select the current CD Account Number + appendCDACNO(res.cd_data, res.data.cd_ac_pk) // append and select the current CD Account Number appendBasePolicyList(res.client_policy_list, res.data.base_policy, res.data.client_branch_id); // append and select the Base palicy }, 2000) diff --git a/app/Views/employee_data_list.php b/app/Views/employee_data_list.php index 5e555ef2..9543fa85 100755 --- a/app/Views/employee_data_list.php +++ b/app/Views/employee_data_list.php @@ -147,13 +147,12 @@