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:
+
+
+
+ Gather Documents: Collect all required documents such as bills, invoices, and medical reports.
+ Complete the Claim Form: Fill out the insurance claim form accurately.
+ Attach Supporting Documents: Attach all necessary documents to support your claim.
+ Submit Your Claim: Send the completed form and documents via email or through our online portal.
+ Track Your Claim: Use our tracking system to monitor the status of your claim.
+ Receive Reimbursement: Once approved, the reimbursement will be processed to your registered account.
+
+
+
+
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
+
+
+
+
+
+
+
+
+
\ 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 @@
+
+
+
+
+
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 @@
+
+
+
+
+
\ 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
+
+
+
+
+
+
+
+
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
+
+
+
+
+
+
+
+
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 @@
Policy Visibilty in Enrollment App
-
+ Is LGBTQ Enable
+
@@ -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 @@