Merge remote-tracking branch 'origin/dev' into dev
This commit is contained in:
commit
927a96b9ea
@ -94,12 +94,12 @@ define('EVENT_PRIORITY_NORMAL', 100);
|
||||
define('EVENT_PRIORITY_HIGH', 10);
|
||||
|
||||
/**
|
||||
* @User Role Constant
|
||||
* @User Teams Constant
|
||||
*/
|
||||
|
||||
define('ENROLLMENT_TEAM_ID', '1');
|
||||
define('CLAIMS_TEAM_ID', '2');
|
||||
define('BUSINESS_TEAM_ID', '3');
|
||||
// define('BUSINESS_TEAM_ID', '3'); // old don't delete it
|
||||
define('BUSINESS_TEAM_ID', '4'); // 25th OCT 2025 changed
|
||||
define('FINANCE_TEAM_ID', '4');
|
||||
define('SALES_TEAM_ID', '5');
|
||||
define('MANAGEMENT_TEAM_ID', '6');
|
||||
@ -107,9 +107,8 @@ define('BUSINESS_SUPPORT_TEAM_ID', '7');
|
||||
define('POS_TEAM_ID', '8');
|
||||
|
||||
/**
|
||||
* @User Teams Constant
|
||||
* @User Role Constant
|
||||
*/
|
||||
|
||||
define('ADMIN_ROLE_ID', 1);
|
||||
define('MANAGER_ROLE_ID', 2);
|
||||
define('ACCOUNT_MANAGER_ROLE_ID', 3);
|
||||
|
||||
@ -399,8 +399,8 @@ $routes->group("/util", ["filter" => "authMVC"], function ($routes) {
|
||||
$routes->match(['get', 'post', 'delete'], 'nhanceBranchMaster', 'MasterController::nhanceBranchMaster');
|
||||
$routes->match(['get', 'post', 'delete'], 'vehicleTypeMaster', 'MasterController::vehicleTypeMaster');
|
||||
$routes->match(['get', 'post', 'delete'], 'rtoMaster', 'MasterController::rtoMaster');
|
||||
|
||||
|
||||
$routes->get('checkDuplicateCdAccount', 'MasterController::checkDuplicateCdAccount');
|
||||
$routes->get('proceedExcelFileDataValidation', 'EmployeeController::proceedExcelFileDataValidation');
|
||||
});
|
||||
|
||||
$routes->post("policy_tranction/sendInstallmentRemainderMail","PolicyTransactionController::sendInstallmentRemainderMail");
|
||||
@ -427,7 +427,7 @@ $routes->group("policy_tranction", ["filter" => "authMVC"], function ($routes) {
|
||||
});
|
||||
|
||||
$routes->group("report", ["filter" => "authMVC"], function ($routes) {
|
||||
$routes->match(['get', 'post'],"list", "PolicyTransactionController::reportBDS");
|
||||
$routes->match(['get', 'post'],"list", "PolicyTransactionController::reportBDSNew");
|
||||
$routes->match(['get', 'post'],"listNew", "PolicyTransactionController::reportBDSNew");
|
||||
$routes->get("report-varience-list", "PolicyTransactionController::reportVarience");
|
||||
$routes->get("report-business-list", "PolicyTransactionController::reportBusinessList");
|
||||
@ -719,6 +719,7 @@ $routes->group('test', function($routes) {
|
||||
$routes->get('membervalidation', 'TestingController::membervalidation');
|
||||
$routes->get('generateExcel', 'TestingController::generateExcel');
|
||||
$routes->get('logo_renaming','TestingController::logo_renaming');
|
||||
// $routes->get('createDefaultMailTempalteInDB','TestingController::createDefaultMailTempalteInDB');
|
||||
});
|
||||
$routes->cli('cli/testcli', 'TestingController::testcli');
|
||||
|
||||
|
||||
@ -869,6 +869,12 @@ class ClientController extends AdminController
|
||||
|
||||
if ($insert) {
|
||||
$client_data = $this->clientModel->where(['id' => $insert, 'is_active' => 1])->first();
|
||||
|
||||
$client_id = $insert;
|
||||
$default_template_creation = $this->createDefaultMailTemplate($client_id , $client_data);
|
||||
if($default_template_creation == false){
|
||||
$this->myLogger->logme('error', 'Default Mail Template Creation Failed for Client ID: {data}', ['data' => $client_id]);
|
||||
}
|
||||
return $this->respond(['status' => true, 'code' => 200, 'data' => $client_data], 200);
|
||||
} else {
|
||||
return $this->respond(['status' => false, 'code' => 404, 'message' => 'no data found'], 200);
|
||||
@ -5640,11 +5646,11 @@ class ClientController extends AdminController
|
||||
|
||||
public function sendextraparam()
|
||||
{
|
||||
// $data = db_connect()->table('jobs')->where('id', 1677)->get()->getRowArray();
|
||||
// // dd($data);
|
||||
// $return = $this->updatePolicyTransactionDataWhileClinetPolicyUpdate(json_decode($data['payload'], true));
|
||||
// dd($return);
|
||||
// die;
|
||||
// $data = db_connect()->table('jobs')->where('id', 1677)->get()->getRowArray();
|
||||
// // dd($data);
|
||||
// $return = $this->updatePolicyTransactionDataWhileClinetPolicyUpdate(json_decode($data['payload'], true));
|
||||
// dd($return);
|
||||
// die;
|
||||
|
||||
// $employeeController = new EmployeeController();
|
||||
// $employeeController->truncateFileData('633');
|
||||
@ -5662,15 +5668,16 @@ class ClientController extends AdminController
|
||||
// ---------- EMP SERVICE CONTROLLER --------------------------------------------------------------------------------
|
||||
|
||||
$empServiceController = new EmployeeServiceController();
|
||||
$res = $empServiceController->excelFileFormatValidation(['file_id' => '2055']);
|
||||
// $res = $empServiceController->excelFileFormatValidation(['file_id' => '1126']);
|
||||
// $res = $empServiceController->excelFileDataValidation(['file_id' => '865']);
|
||||
// $res = $empServiceController->employeesOnboardPreprocess(['file_id' => 726]);
|
||||
// $res = $empServiceController->employeesOnboardProcess(['file_id' => 835]);
|
||||
// $res = $empServiceController->employeesEnrollmentInsert(['file_id' => 836]);
|
||||
// $res = $empServiceController->employeesSIEnhanceProcess(['file_id' => '978']);
|
||||
// $res = $empServiceController->employeesSIEnhanceProcess(['file_id' => '1131']);
|
||||
// $res = $empServiceController->employeeDisembark(['file_id' => '1681']);
|
||||
// $res = $empServiceController->employeesCorrectionProcess(['file_id' => '2033']);
|
||||
dd($res);
|
||||
// $res = $empServiceController->employeesCorrectionProcess(['file_id' => '2033']);
|
||||
// $res = $empServiceController->compareMemberDataAndInceptionData(['file_id' => '1126']);
|
||||
// dd($res);
|
||||
|
||||
$EmployeeMultiEventServiceController = new EmployeeMultiEventServiceController();
|
||||
// $res = $EmployeeMultiEventServiceController->constructMultiEventData(['file_id' => '1069']);
|
||||
@ -5730,8 +5737,8 @@ class ClientController extends AdminController
|
||||
// $res = $EmpDataServiceController->generateExcelForCorrection($batch_data);
|
||||
// $res = $EmpDataServiceController->importInceptionFileValidation(['file_id' => 1932]); die;
|
||||
// $res = $EmpDataServiceController->importDeletionValidation(['file_id' => 304]); //for live
|
||||
// $res = $EmpDataServiceController->importSIEnhancementUpdateEndorsementID(['file_id' => 1199]); //for live
|
||||
// $res = $EmpDataServiceController->importSIEnhancementValidation(['file_id' => 2496]); //for live
|
||||
// $res = $EmpDataServiceController->importSIEnhancementUpdateEndorsementID(['file_id' => 387]); //for live
|
||||
// $res = $EmpDataServiceController->importSIEnhancementValidation(['file_id' => 387]); //for live
|
||||
// $res = $EmpDataServiceController->importInceptionUpdateTPAandUHID(['file_id' => 214]); //for live
|
||||
// $res = $EmpDataServiceController->importInceptionUpdateTPAandUHID(['file_id' => 310]); dd($res);//for live
|
||||
// $res = $EmpDataServiceController->getInceptionBasePremium(["13332","13333","13334","13335","13336"]); dd($res);//for live
|
||||
@ -7731,9 +7738,76 @@ class ClientController extends AdminController
|
||||
return true;
|
||||
}
|
||||
|
||||
public function createDefaultMailTemplate($client_id , $client_data){
|
||||
|
||||
$member_welcome_mail_template = $this->notificationModel->where('client_id',NULL)->where('template_name','member_welcome_mail')->get()->getResultArray()[0]??[];
|
||||
|
||||
$member_remainder_mail_template = $this->notificationModel->where('client_id',NULL)->where('template_name','member_reminder_mail')->get()->getResultArray()[0]??[];
|
||||
|
||||
$member_review_and_summary_mail_template = $this->notificationModel->where('client_id',NULL)->where('template_name','member_review_and_summary_mail')->get()->getResultArray()[0]??[];
|
||||
|
||||
$default_member_welcome_mail_template = [
|
||||
'client_id' => $client_id,
|
||||
'template_name' => 'member_welcome_mail',
|
||||
'subject' => $member_welcome_mail_template['subject']??'',
|
||||
'mail_content' => $member_welcome_mail_template['mail_content']??'',
|
||||
'mail_content_json'=> $member_welcome_mail_template['mail_content_json']??'',
|
||||
|
||||
'created_by' => get_session_userid(),
|
||||
'created_at' => date('Y-m-d H:i:s'),
|
||||
'updated_by' => null,
|
||||
'updated_at' => date('Y-m-d H:i:s'),
|
||||
'mail_content_copy'=> null
|
||||
];
|
||||
|
||||
$default_member_remainder_mail_template = [
|
||||
'client_id' => $client_id,
|
||||
'template_name' => 'member_reminder_mail',
|
||||
'subject' => $member_remainder_mail_template['subject']??'',
|
||||
'mail_content' => $member_remainder_mail_template['mail_content']??'',
|
||||
'mail_content_json'=> $member_remainder_mail_template['mail_content_json']??'',
|
||||
|
||||
'created_by' => get_session_userid(),
|
||||
'created_at' => date('Y-m-d H:i:s'),
|
||||
'updated_by' => null,
|
||||
'updated_at' => date('Y-m-d H:i:s'),
|
||||
'mail_content_copy'=> null
|
||||
];
|
||||
|
||||
$default_member_review_and_summary_mail_template = [
|
||||
'client_id' => $client_id,
|
||||
'template_name' => 'member_review_and_summary_mail',
|
||||
'subject' => $member_review_and_summary_mail_template['subject']??'',
|
||||
'mail_content' => $member_review_and_summary_mail_template['mail_content']??'',
|
||||
'mail_content_json'=> $member_review_and_summary_mail_template['mail_content_json']??'',
|
||||
|
||||
'created_by' => get_session_userid(),
|
||||
'created_at' => date('Y-m-d H:i:s'),
|
||||
'updated_by' => null,
|
||||
'updated_at' => date('Y-m-d H:i:s'),
|
||||
'mail_content_copy'=> null
|
||||
];
|
||||
|
||||
$this->myLogger->logme('error', 'Default Mail Template Data ' . json_encode([
|
||||
$default_member_welcome_mail_template,
|
||||
$default_member_remainder_mail_template,
|
||||
$default_member_review_and_summary_mail_template
|
||||
], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES));
|
||||
|
||||
|
||||
|
||||
$default_templates_inserted = $this->notificationModel->insertBatch([
|
||||
$default_member_welcome_mail_template,
|
||||
$default_member_remainder_mail_template,
|
||||
$default_member_review_and_summary_mail_template
|
||||
]);
|
||||
|
||||
|
||||
return $default_templates_inserted ? true : false;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -1457,6 +1457,47 @@ class EmpDataServiceController extends BaseController
|
||||
//get the employee data for excel file validation
|
||||
$employee_data = $this->employeePolicyModel->getInceptionEmployeeDataForExportExcel($ref_data, 1);
|
||||
|
||||
// ----------------- CD BALANCE CHECK ---------------------------------------------------------------------------
|
||||
|
||||
$cash_balance = $this->clientDepositModel
|
||||
->where('cd_ac_pk', $client_policy_data['cd_ac_pk'])
|
||||
->where('is_active', 1)
|
||||
->orderBy('id', 'DESC')
|
||||
->first();
|
||||
|
||||
if ($cash_balance == null) {
|
||||
$balance = $this->CDMasterModel
|
||||
->where('client_id', $file['client_id'])
|
||||
->where('insurer_id', $client_policy_data['insurer_id'])
|
||||
->where('id', $client_policy_data['cd_ac_pk'])
|
||||
->first();
|
||||
|
||||
$cash_balance['balance'] = $balance['opening_bal'];
|
||||
}
|
||||
|
||||
// Calculate the total amount from the objects
|
||||
$totals = 0;
|
||||
foreach ($employee_data as $item) {
|
||||
$totals = $totals + $item['total'];
|
||||
}
|
||||
|
||||
$totals = round($totals, 2);
|
||||
|
||||
//check CD amt insufficient only insurer, not tpa
|
||||
if($file['insurer_or_tpa'] == 'insurer')
|
||||
{
|
||||
if (!empty($cash_balance)) {
|
||||
if ((int) $cash_balance['balance'] < (int) $totals) {
|
||||
$this->myLogger->logme('error', 'Inception export failed due to insufficient deposit amount. CASH BALANCE : {balance} and TOTAL AMOUNT : {total}', ['balance' => $cash_balance['balance'], 'total' => $totals]);
|
||||
$this->batchFileModel->where('id', $file_id)->set(['status' => 'failed-7', 'error_data' => 'Insufficient deposit balance. Available CD Balance: ' . $cash_balance['balance'] . ', Excel Total Amount: ' . $totals])->update();
|
||||
return ['status' => 'error', 'message' => 'Insufficient deposit balance. Available CD Balance: ' . $cash_balance['balance'] . ', Required Amount: ' . $totals];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ---------------- END CD BALANCE CHECK ----------------------------------------------------------------------------
|
||||
|
||||
|
||||
if ($employee_data == null || empty($employee_data)) {
|
||||
|
||||
if ($insurer_or_tpa == 'tpa') {
|
||||
@ -2569,6 +2610,7 @@ class EmpDataServiceController extends BaseController
|
||||
'event_type' => $file['event_type'],
|
||||
];
|
||||
|
||||
$client_policy_data = $this->clientPolicyModel->where('id', $client_policy_id)->first();
|
||||
|
||||
$file_name_with_path = WRITEPATH . "/uploads/import_excel/" . $file['file_name'];
|
||||
|
||||
@ -2691,6 +2733,47 @@ class EmpDataServiceController extends BaseController
|
||||
|
||||
// dd($endorsement_data, $excel_data);
|
||||
|
||||
// ----------------- CD BALANCE CHECK ---------------------------------------------------------------------------
|
||||
|
||||
$cash_balance = $this->clientDepositModel
|
||||
->where('cd_ac_pk', $client_policy_data['cd_ac_pk'])
|
||||
->where('is_active', 1)
|
||||
->orderBy('id', 'DESC')
|
||||
->first();
|
||||
|
||||
if ($cash_balance == null) {
|
||||
$balance = $this->CDMasterModel
|
||||
->where('client_id', $file['client_id'])
|
||||
->where('insurer_id', $client_policy_data['insurer_id'])
|
||||
->where('id', $client_policy_data['cd_ac_pk'])
|
||||
->first();
|
||||
|
||||
$cash_balance['balance'] = $balance['opening_bal'];
|
||||
}
|
||||
|
||||
// Calculate the total amount from the objects
|
||||
$totals = 0;
|
||||
foreach ($endorsement_data as $item) {
|
||||
$totals = $totals + $item['total'];
|
||||
}
|
||||
|
||||
$totals = round($totals, 2);
|
||||
|
||||
//check CD amt insufficient only insurer, not tpa
|
||||
if($file['insurer_or_tpa'] == 'insurer')
|
||||
{
|
||||
if (!empty($cash_balance)) {
|
||||
if ((int) $cash_balance['balance'] < (int) $totals) {
|
||||
$this->myLogger->logme('error', 'Inception export failed due to insufficient deposit amount. CASH BALANCE : {balance} and TOTAL AMOUNT : {total}', ['balance' => $cash_balance['balance'], 'total' => $totals]);
|
||||
$this->batchFileModel->where('id', $file_id)->set(['status' => 'failed-7', 'error_data' => 'Insufficient deposit balance. Available CD Balance: ' . $cash_balance['balance'] . ', Excel Total Amount: ' . $totals])->update();
|
||||
return ['status' => 'error', 'message' => 'Insufficient deposit balance. Available CD Balance: ' . $cash_balance['balance'] . ', Required Amount: ' . $totals];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ---------------- END CD BALANCE CHECK ----------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
if ($endorsement_data == null || empty($endorsement_data)) {
|
||||
|
||||
@ -3119,6 +3202,7 @@ class EmpDataServiceController extends BaseController
|
||||
$empData['rata_premimum'] = $value[16];
|
||||
$empData['gst'] = $value[17];
|
||||
$empData['created_by'] = $user_id;
|
||||
$empData['old_basic_cover_si'] = $value[9];
|
||||
|
||||
$emp_details[] = $empData;
|
||||
}
|
||||
@ -3139,11 +3223,41 @@ class EmpDataServiceController extends BaseController
|
||||
// $insertedIds[] = $startId + $i;
|
||||
// }
|
||||
|
||||
// $insertedIds = [];
|
||||
// foreach ($emp_details as $emp) {
|
||||
|
||||
// $old_si_value = $emp['old_basic_cover_si'];
|
||||
// $new_si_value = $emp['basic_cover_si'];
|
||||
|
||||
// if($old_si_value < $new_si_value){
|
||||
// $insertedIds['si_adjustment'] = 2;
|
||||
// }else{
|
||||
// $insertedIds['si_adjustment'] = 1;
|
||||
// }
|
||||
|
||||
// unset($emp['old_basic_cover_si']);
|
||||
// $insertedIds['pk'] = $this->employeePolicyModel->insert($emp);
|
||||
// }
|
||||
|
||||
$insertedIds = [];
|
||||
foreach ($emp_details as $emp) {
|
||||
$insertedIds[] = $this->employeePolicyModel->insert($emp);
|
||||
}
|
||||
|
||||
$old_si_value = $emp['old_basic_cover_si'];
|
||||
$new_si_value = $emp['basic_cover_si'];
|
||||
|
||||
// Determine SI adjustment type
|
||||
$si_adjustment = ($old_si_value < $new_si_value) ? 1 : 2;
|
||||
|
||||
unset($emp['old_basic_cover_si']);
|
||||
|
||||
// Insert and store PK with adjustment info
|
||||
$pk = $this->employeePolicyModel->insert($emp);
|
||||
|
||||
$insertedIds[] = [
|
||||
'pk' => $pk,
|
||||
'si_adjustment' => $si_adjustment
|
||||
];
|
||||
}
|
||||
// dd($insertedIds);
|
||||
|
||||
$this->employeePolicyModel->bulkUpdateForEndorsement($endorsement_details);
|
||||
@ -3158,7 +3272,6 @@ class EmpDataServiceController extends BaseController
|
||||
'amount' => $rounded_totals,
|
||||
]);
|
||||
|
||||
|
||||
$this->myLogger->logme('error', 'SI Enhancement Update Endorsement ID -- Employee count : {data}', ['data' => $emp_count]);
|
||||
$this->myLogger->logme('error', 'SI Enhancement Update Endorsement ID -- Batch File status : {data}', ['data' => $status_val]);
|
||||
|
||||
@ -4195,60 +4308,164 @@ class EmpDataServiceController extends BaseController
|
||||
}
|
||||
|
||||
|
||||
public function cashDepositCalculationForSIEnhancement($arrayData)
|
||||
{
|
||||
// return $arrayData;
|
||||
// public function cashDepositCalculationForSIEnhancement($arrayData)
|
||||
// {
|
||||
// // return $arrayData;
|
||||
|
||||
// if (!empty($arrayData)) {
|
||||
|
||||
// $client_branch_data = $this->clientBranchModel->where('id', $arrayData['client_branch_id'])->first();
|
||||
// $units = json_decode($client_branch_data['units']);
|
||||
|
||||
// foreach($units as $unit)
|
||||
// {
|
||||
|
||||
// $amount = $this->employeePolicyModel->query("
|
||||
// SELECT SUM(rata_premimum + gst) AS total_sum
|
||||
// FROM employee_polices
|
||||
// JOIN employees ON employees.id = employee_polices.employee_id
|
||||
// WHERE employees.unit = '$unit'
|
||||
// AND employee_polices.id IN (" . implode(',', $arrayData['employeeIds']) . ")
|
||||
// ")->getRow();
|
||||
|
||||
// if($amount){
|
||||
|
||||
// $insurer_id = $this->clientPolicyModel->where('id', $arrayData['client_policy_id'])->first();
|
||||
// $description = 'The following amount of ' . round($amount->total_sum, 2) . ' has been credited for the ' . $arrayData['count'] . ' employees at ' . remove_underscore_capitalize_first_letter($arrayData['event_name']) . ' to ' . remove_underscore_capitalize_first_letter($arrayData['policy_name']) . '.';
|
||||
|
||||
// $data = [
|
||||
|
||||
// 'amount' => $amount->total_sum,
|
||||
// 'sub_type_id' => 4,
|
||||
// 'client_id' => $arrayData['client_id'],
|
||||
// 'client_policy_id' => $arrayData['client_policy_id'],
|
||||
// 'endorsement_no' => $arrayData['endorsement_no'] ?? null,
|
||||
// 'cd_ac_no' => $arrayData['cd_ac_no'] ?? null,
|
||||
// 'insurer_id' => $insurer_id['insurer_id'],
|
||||
// 'unit' => $unit,
|
||||
// 'description' => $description,
|
||||
// 'transaction_type' => 'Debit',
|
||||
// 'updated_by' => $arrayData['user_id'],
|
||||
// 'event_name' => $arrayData['event_name'],
|
||||
// 'is_active' => 1,
|
||||
// 'cd_ac_pk' => $insurer_id['cd_ac_pk']
|
||||
// ];
|
||||
|
||||
// $response = DepositHelper::saveDeposit($data, $arrayData['user_id']);
|
||||
// }
|
||||
// }
|
||||
|
||||
// $msg = "SI Enhancement Cash Deposite Updated Successfully ";
|
||||
// return [$msg];
|
||||
|
||||
// // print_r($response);
|
||||
// // $query = $this->employeePolicyModel->getLastQuery();
|
||||
// // echo $query . "<br>";
|
||||
|
||||
// } else {
|
||||
// return 0;
|
||||
// }
|
||||
// }
|
||||
|
||||
public function cashDepositCalculationForSIEnhancement($arrayData)
|
||||
{
|
||||
if (!empty($arrayData)) {
|
||||
|
||||
$client_branch_data = $this->clientBranchModel->where('id', $arrayData['client_branch_id'])->first();
|
||||
$units = json_decode($client_branch_data['units']);
|
||||
|
||||
foreach($units as $unit)
|
||||
{
|
||||
foreach ($units as $unit) {
|
||||
|
||||
$amount = $this->employeePolicyModel->query("
|
||||
SELECT SUM(rata_premimum + gst) AS total_sum
|
||||
FROM employee_polices
|
||||
JOIN employees ON employees.id = employee_polices.employee_id
|
||||
WHERE employees.unit = '$unit'
|
||||
AND employee_polices.id IN (" . implode(',', $arrayData['employeeIds']) . ")
|
||||
")->getRow();
|
||||
$si_enhance_amt = 0;
|
||||
$si_decrease_amt = 0;
|
||||
|
||||
if($amount){
|
||||
foreach ($arrayData['employeeIds'] as $value) {
|
||||
|
||||
$insurer_id = $this->clientPolicyModel->where('id', $arrayData['client_policy_id'])->first();
|
||||
$description = 'The following amount of ' . round($amount->total_sum, 2) . ' has been credited for the ' . $arrayData['count'] . ' employees at ' . remove_underscore_capitalize_first_letter($arrayData['event_name']) . ' to ' . remove_underscore_capitalize_first_letter($arrayData['policy_name']) . '.';
|
||||
// If $value is an array, get its elements; otherwise, assign defaults
|
||||
$pk = is_array($value) ? ($value['pk'] ?? null) : $value;
|
||||
$si_adjustment = is_array($value) ? ($value['si_adjustment'] ?? null) : $value;
|
||||
|
||||
$query = "
|
||||
SELECT SUM(rata_premimum + gst) AS total_sum
|
||||
FROM employee_polices
|
||||
JOIN employees ON employees.id = employee_polices.employee_id
|
||||
WHERE employees.unit = '{$unit}'
|
||||
AND employee_polices.id = '{$pk}'
|
||||
";
|
||||
|
||||
$amount = $this->employeePolicyModel->query($query)->getRow();
|
||||
|
||||
if ($amount && $amount->total_sum > 0) {
|
||||
if ($si_adjustment == 2) {
|
||||
$si_decrease_amt += $amount->total_sum;
|
||||
} else {
|
||||
$si_enhance_amt += $amount->total_sum;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Save Enhancement amount
|
||||
if ($si_enhance_amt > 0) {
|
||||
$policy_data = $this->clientPolicyModel->where('id', $arrayData['client_policy_id'])->first();
|
||||
|
||||
$description = 'An amount of ' . round($si_enhance_amt, 2) .
|
||||
' has been debited for ' . $arrayData['count'] . ' employees under ' .
|
||||
remove_underscore_capitalize_first_letter($arrayData['event_name']) .
|
||||
' in ' . remove_underscore_capitalize_first_letter($arrayData['policy_name']) . '.';
|
||||
|
||||
$data = [
|
||||
|
||||
'amount' => $amount->total_sum,
|
||||
'amount' => round($si_enhance_amt, 2),
|
||||
'sub_type_id' => 4,
|
||||
'client_id' => $arrayData['client_id'],
|
||||
'client_policy_id' => $arrayData['client_policy_id'],
|
||||
'endorsement_no' => $arrayData['endorsement_no'] ?? null,
|
||||
'cd_ac_no' => $arrayData['cd_ac_no'] ?? null,
|
||||
'insurer_id' => $insurer_id['insurer_id'],
|
||||
'insurer_id' => $policy_data['insurer_id'],
|
||||
'unit' => $unit,
|
||||
'description' => $description,
|
||||
'transaction_type' => 'Debit',
|
||||
'updated_by' => $arrayData['user_id'],
|
||||
'event_name' => $arrayData['event_name'],
|
||||
'is_active' => 1,
|
||||
'cd_ac_pk' => $insurer_id['cd_ac_pk']
|
||||
'cd_ac_pk' => $policy_data['cd_ac_pk']
|
||||
];
|
||||
|
||||
$response = DepositHelper::saveDeposit($data, $arrayData['user_id']);
|
||||
DepositHelper::saveDeposit($data, $arrayData['user_id']);
|
||||
}
|
||||
|
||||
// Save Decrease amount
|
||||
if ($si_decrease_amt > 0) {
|
||||
|
||||
$policy_data = $this->clientPolicyModel->where('id', $arrayData['client_policy_id'])->first();
|
||||
|
||||
$description = 'An amount of ' . round($si_decrease_amt, 2) .
|
||||
' has been credited for ' . $arrayData['count'] . ' employees due to a decrease in Sum Insured (SI) under ' .
|
||||
remove_underscore_capitalize_first_letter($arrayData['event_name']) .
|
||||
' in ' . remove_underscore_capitalize_first_letter($arrayData['policy_name']) . '.';
|
||||
|
||||
$data = [
|
||||
'amount' => round($si_decrease_amt, 2),
|
||||
'sub_type_id' => 4,
|
||||
'client_id' => $arrayData['client_id'],
|
||||
'client_policy_id' => $arrayData['client_policy_id'],
|
||||
'endorsement_no' => $arrayData['endorsement_no'] ?? null,
|
||||
'cd_ac_no' => $arrayData['cd_ac_no'] ?? null,
|
||||
'insurer_id' => $policy_data['insurer_id'],
|
||||
'unit' => $unit,
|
||||
'description' => $description,
|
||||
'transaction_type' => 'Credit',
|
||||
'updated_by' => $arrayData['user_id'],
|
||||
'event_name' => $arrayData['event_name'],
|
||||
'is_active' => 1,
|
||||
'cd_ac_pk' => $policy_data['cd_ac_pk']
|
||||
];
|
||||
|
||||
DepositHelper::saveDeposit($data, $arrayData['user_id']);
|
||||
}
|
||||
}
|
||||
|
||||
$msg = "SI Enhancement Cash Deposite Updated Successfully ";
|
||||
$msg = "SI Adjustment Cash Deposit Updated Successfully.";
|
||||
return [$msg];
|
||||
|
||||
// print_r($response);
|
||||
// $query = $this->employeePolicyModel->getLastQuery();
|
||||
// echo $query . "<br>";
|
||||
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -171,7 +171,7 @@ class EmployeeController extends AdminController
|
||||
return $this->respond(['dataStatus' => false, 'code' => 404, 'message' => 'no data found'], 200);
|
||||
} else {
|
||||
|
||||
return $this->respond(['dataStatus' => true, 'code' => 200, 'data' => $file['reason']], 200);
|
||||
return $this->respond(['dataStatus' => true, 'code' => 200, 'data' => $file['reason'], 'is_comparison_skipped' => $file['is_comparison_skipped']], 200);
|
||||
}
|
||||
}
|
||||
|
||||
@ -388,13 +388,11 @@ class EmployeeController extends AdminController
|
||||
batch_files.client_branch_id,
|
||||
|
||||
CASE
|
||||
WHEN batch_files.status = 'partially success' OR batch_files.status = 'in-progress-partially' THEN
|
||||
batch_files.error_data
|
||||
ELSE
|
||||
NULL
|
||||
WHEN batch_files.status IN ('partially success', 'in-progress-partially', 'failed-7')
|
||||
THEN batch_files.error_data
|
||||
ELSE NULL
|
||||
END AS error_data,
|
||||
|
||||
|
||||
clients.short_name as client_short_name,
|
||||
client_branch.branch_name,
|
||||
client_policy.policy_no,
|
||||
@ -1193,7 +1191,7 @@ class EmployeeController extends AdminController
|
||||
|
||||
// --------------- For E-Card Download -----------------------------------------------------------------------------------------------------
|
||||
|
||||
//E-CARD DOWNLOAD FUNCTION USING HTML PRINT
|
||||
//E-CARD DOWNLOAD FUNCTION USING HTML PRINT ( Not in use ) do not delete
|
||||
public function generateIDCardForEmployeeUsingHtml($rand_string, $people = 0)
|
||||
{
|
||||
// dd($rand_string, $people);
|
||||
@ -1418,7 +1416,7 @@ class EmployeeController extends AdminController
|
||||
echo $htmlContent;
|
||||
}
|
||||
|
||||
//E-CARD DOWNLOAD FUNCTION USING DOM PDF ( CURRENTLY USING THIS )
|
||||
//E-CARD DOWNLOAD FUNCTION USING DOM PDF ( CURRENTLY USING THIS ) Dompdf
|
||||
public function generateIDCardForEmployee($rand_string, $people = 0, $mode = 0)
|
||||
{
|
||||
// dd($rand_string, $people);
|
||||
@ -1470,8 +1468,8 @@ class EmployeeController extends AdminController
|
||||
// Step 3: Prepare template path
|
||||
$template_data_path = WRITEPATH . 'e_card_template/';
|
||||
// $tpa_short_name = strtolower(str_replace(' ', '_', $get_emp_code_and_client_policy_id['short_name'])) . '.html';
|
||||
$tpa_short_name = 'common.html';
|
||||
// $tpa_short_name = 'new_ecard.html';
|
||||
// $tpa_short_name = 'common.html';
|
||||
$tpa_short_name = 'new_ecard.html';
|
||||
$final_path = $template_data_path . $tpa_short_name;
|
||||
|
||||
$this->myLogger->logme('error', 'Checking if template file exists at: ' . $final_path);
|
||||
@ -1495,6 +1493,7 @@ class EmployeeController extends AdminController
|
||||
$value['back_card'] = "Nhance_Ecard_working_1_Back.png";
|
||||
|
||||
$placeholders = [
|
||||
|
||||
'{CLIENT_NAME}' => $value['client_name'],
|
||||
'{TPA_ID}' => $value['tpa_id'],
|
||||
'{NAME}' => $value['name'],
|
||||
@ -1506,9 +1505,6 @@ class EmployeeController extends AdminController
|
||||
'{POLICY_START_DATE}' => date('d-M-Y', strtotime($value['policy_start_date'])),
|
||||
'{POLICY_NO}' => $value['policy_no'],
|
||||
'{INSURER_NAME}' => strtoupper($value['insurer_name']),
|
||||
'{INSURER_LOGO}' => base_url() . 'public/uploads/logo/' . $value['insurer_logo'],
|
||||
'{FRONT_CARD}' => base_url() . 'public/uploads/template_bg/' . $value['front_card'],
|
||||
'{BACK_CARD}' => base_url() . 'public/uploads/template_bg/' . $value['back_card'],
|
||||
'{EMP_ID}' => $value['emp_code'],
|
||||
'{SI_AMT}' => $value['basic_cover_si'],
|
||||
'{CORPORATE_NAME}' => $value['client_name'],
|
||||
@ -1516,15 +1512,33 @@ class EmployeeController extends AdminController
|
||||
'{TPA_NAME}' => $value['tpa_name'],
|
||||
'{INSURER_BRANCH}' => $value['insurer_branch_city'],
|
||||
'{RELATION}' => $value['relationship'],
|
||||
'{TPA_LOGO}' => base_url() . 'public/uploads/logo/' . $value['tpa_logo'],
|
||||
'{MEDI_USER}' => base_url() . 'public/e_card_imgs/medi_uesr.jpg',
|
||||
'{MEDI_INSURER}' => base_url() . 'public/e_card_imgs/Magma.png',
|
||||
'{MEDI_BARCODE}' => base_url() . 'public/e_card_imgs/borcode.jpeg',
|
||||
'{QR_ANDROID}' => base_url() . 'public/e_card_imgs/android.png',
|
||||
'{QR_IOS}' => base_url() . 'public/e_card_imgs/ios.png',
|
||||
'{QR_ANDROID_2}' => base_url() . 'public/e_card_imgs/play_store.png',
|
||||
'{QR_IOS_2}' => base_url() . 'public/e_card_imgs/appstore.png',
|
||||
'{NHANCE_N_LOGO}' => base_url() . 'public/assets/images/Nhance_Favi.png',
|
||||
|
||||
'{TPA_LOGO}' => getFileIfExists('uploads/logo/' . $value['tpa_logo']),
|
||||
'{MEDI_USER}' => getFileIfExists('e_card_imgs/medi_uesr.jpg'),
|
||||
'{MEDI_INSURER}' => getFileIfExists('e_card_imgs/Magma.png'),
|
||||
'{MEDI_BARCODE}' => getFileIfExists('e_card_imgs/borcode.jpeg'),
|
||||
'{QR_ANDROID}' => getFileIfExists('e_card_imgs/android.png'),
|
||||
'{QR_IOS}' => getFileIfExists('e_card_imgs/ios.png'),
|
||||
'{QR_ANDROID_2}' => getFileIfExists('e_card_imgs/play_store.png'),
|
||||
'{QR_IOS_2}' => getFileIfExists('e_card_imgs/appstore.png'),
|
||||
'{NHANCE_N_LOGO}' => getFileIfExists('assets/images/Nhance_Favi.png'),
|
||||
'{INSURER_LOGO}' => getFileIfExists('uploads/logo/' . $value['insurer_logo']),
|
||||
'{FRONT_CARD}' => getFileIfExists('uploads/template_bg/' . $value['front_card']),
|
||||
'{BACK_CARD}' => getFileIfExists('uploads/template_bg/' . $value['back_card']),
|
||||
|
||||
// '{TPA_LOGO}' => base_url() . 'public/uploads/logo/' . $value['tpa_logo'],
|
||||
// '{MEDI_USER}' => base_url() . 'public/e_card_imgs/medi_uesr.jpg',
|
||||
// '{MEDI_INSURER}' => base_url() . 'public/e_card_imgs/Magma.png',
|
||||
// '{MEDI_BARCODE}' => base_url() . 'public/e_card_imgs/borcode.jpeg',
|
||||
// '{QR_ANDROID}' => base_url() . 'public/e_card_imgs/android.png',
|
||||
// '{QR_IOS}' => base_url() . 'public/e_card_imgs/ios.png',
|
||||
// '{QR_ANDROID_2}' => base_url() . 'public/e_card_imgs/play_store.png',
|
||||
// '{QR_IOS_2}' => base_url() . 'public/e_card_imgs/appstore.png',
|
||||
// '{NHANCE_N_LOGO}' => base_url() . 'public/assets/images/Nhance_Favi.png',
|
||||
// '{INSURER_LOGO}' => base_url() . 'public/uploads/logo/' . $value['insurer_logo'],
|
||||
// '{FRONT_CARD}' => base_url() . 'public/uploads/template_bg/' . $value['front_card'],
|
||||
// '{BACK_CARD}' => base_url() . 'public/uploads/template_bg/' . $value['back_card'],
|
||||
|
||||
];
|
||||
|
||||
$placeholders['{LEVELS}'] = $this->generateAcmAndMForEcard($client_id);
|
||||
@ -3132,5 +3146,31 @@ class EmployeeController extends AdminController
|
||||
}
|
||||
}
|
||||
|
||||
// function for skip the Inception and Member data validation
|
||||
public function proceedExcelFileDataValidation()
|
||||
{
|
||||
$file_id = $this->request->getGet('file_id');
|
||||
$not_skiped = $this->request->getGet('not_skiped') ?? null;
|
||||
|
||||
if(!empty($not_skiped)){
|
||||
$file_model = new FileModel();
|
||||
$file_model->where('id', $file_id)->set(['is_comparison_skipped' => 0])->update();
|
||||
$message = "Inception and Member data comparision continuted by the user id : " . get_session_userid();
|
||||
$this->myLogger->logme('error', $message);
|
||||
return $this->respond(['status' => true, 'code' => 200, 'message' => 'Inception and Member data comparision continued'], 200);
|
||||
}
|
||||
|
||||
if(!empty($file_id)){
|
||||
$r = Jobs::addJob(['job_name' => 'excelFileDataValidation','payload' => ['file_id' => $file_id]]);
|
||||
$message = "Inception and Member data comparision skiped successfully by the user id : " . get_session_userid();
|
||||
$this->myLogger->logme('error', $message);
|
||||
$file_model = new FileModel();
|
||||
$file_model->where('id', $file_id)->set(['is_comparison_skipped' => 1])->update();
|
||||
return $this->respond(['status' => true, 'code' => 200, 'message' => 'Inception and Member data comparision skiped successfully!'], 200);
|
||||
}else{
|
||||
return $this->respond(['status' => false, 'code' => 500, 'message' => 'Failed to skip the comparison!'], 200);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -26,6 +26,7 @@ use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
use Kint\Kint;
|
||||
|
||||
use App\Helpers\ExcelSanitizeHelper;
|
||||
use App\Models\LeadsModel;
|
||||
|
||||
class EmployeeMultiEventServiceController extends BaseController
|
||||
{
|
||||
@ -140,7 +141,7 @@ class EmployeeMultiEventServiceController extends BaseController
|
||||
'is_mandatory' => ['I', 'A', 'DA'],
|
||||
'data_type' => 'str',
|
||||
'format' => null,
|
||||
'allowed_values' => ['M', 'F']
|
||||
'allowed_values' => ['M', 'F', 'Male', 'Female', 'male', 'female']
|
||||
],
|
||||
'relationship' => [
|
||||
'col_idx' => 5,
|
||||
@ -524,7 +525,7 @@ class EmployeeMultiEventServiceController extends BaseController
|
||||
'is_mandatory' => ['I', 'A', 'DA', 'E'],
|
||||
'data_type' => 'str',
|
||||
'format' => null,
|
||||
'allowed_values' => ['M', 'F']
|
||||
'allowed_values' => ['M', 'F', 'Male', 'Female', 'male', 'female']
|
||||
],
|
||||
'relationship' => [
|
||||
'col_idx' => 5,
|
||||
@ -889,8 +890,108 @@ class EmployeeMultiEventServiceController extends BaseController
|
||||
]
|
||||
];
|
||||
|
||||
|
||||
|
||||
protected $member_data_excel_columns = [
|
||||
'sno' => [
|
||||
'col_idx' => 0,
|
||||
'col_cell_name' => 'A',
|
||||
'col_name' => 'Sl no',
|
||||
'is_mandatory' => false,
|
||||
'data_type' => 'str',
|
||||
'format' => null,
|
||||
'allowed_values' => null
|
||||
],
|
||||
'emp_code' => [
|
||||
'col_idx' => 1,
|
||||
'col_cell_name' => 'B',
|
||||
'col_name' => 'Emp Code',
|
||||
'is_mandatory' => true,
|
||||
'data_type' => 'str',
|
||||
'format' => null,
|
||||
'allowed_values' => null
|
||||
],
|
||||
'name' => [
|
||||
'col_idx' => 2,
|
||||
'col_cell_name' => 'C',
|
||||
'col_name' => 'Name',
|
||||
'is_mandatory' => true,
|
||||
'data_type' => 'str',
|
||||
'format' => null,
|
||||
'allowed_values' => null
|
||||
],
|
||||
'relationship' => [
|
||||
'col_idx' => 3,
|
||||
'col_cell_name' => 'D',
|
||||
'col_name' => 'Relationship',
|
||||
'is_mandatory' => true,
|
||||
'data_type' => 'str',
|
||||
'format' => null,
|
||||
'allowed_values' => [
|
||||
'Self', 'Spouse', 'Son', 'Daughter', 'Father', 'Mother',
|
||||
'Father-in-law', 'Mother-in-law',
|
||||
'self', 'spouse', 'son', 'daughter', 'father', 'mother',
|
||||
'father-in-law', 'mother-in-law'
|
||||
],
|
||||
'custom' => 'check_relationship_for_member_data',
|
||||
'params' => ['row', 'relationship', 'columns_to_check']
|
||||
],
|
||||
'gender' => [
|
||||
'col_idx' => 4,
|
||||
'col_cell_name' => 'E',
|
||||
'col_name' => 'Gender',
|
||||
'is_mandatory' => true,
|
||||
'data_type' => 'str',
|
||||
'format' => null,
|
||||
'allowed_values' => ['M', 'F', 'Male', 'Female', 'male', 'female']
|
||||
],
|
||||
'dob' => [
|
||||
'col_idx' => 5,
|
||||
'col_cell_name' => 'F',
|
||||
'col_name' => 'DOB',
|
||||
'is_mandatory' => true,
|
||||
'data_type' => 'str',
|
||||
'format' => 'd-M-Y',
|
||||
'allowed_values' => null,
|
||||
'age_validation' => true,
|
||||
// 'custom' => 'check_dob_diff',
|
||||
// 'params' => ['row', 'relationship', 'default_age_ratio', 'policy_details']
|
||||
],
|
||||
'age' => [
|
||||
'col_idx' => 6,
|
||||
'col_cell_name' => 'G',
|
||||
'col_name' => 'Age',
|
||||
'is_mandatory' => true,
|
||||
'data_type' => 'int',
|
||||
'format' => null,
|
||||
'allowed_values' => null
|
||||
],
|
||||
'email' => [
|
||||
'col_idx' => 7,
|
||||
'col_cell_name' => 'H',
|
||||
'col_name' => 'Email',
|
||||
'is_mandatory' => false,
|
||||
'data_type' => 'str',
|
||||
'format' => null,
|
||||
'allowed_values' => null
|
||||
],
|
||||
'mobile' => [
|
||||
'col_idx' => 8,
|
||||
'col_cell_name' => 'I',
|
||||
'col_name' => 'Mobile',
|
||||
'is_mandatory' => false,
|
||||
'data_type' => 'str',
|
||||
'format' => null,
|
||||
'allowed_values' => null
|
||||
],
|
||||
'si' => [
|
||||
'col_idx' => 9,
|
||||
'col_cell_name' => 'J',
|
||||
'col_name' => 'SI',
|
||||
'is_mandatory' => false,
|
||||
'data_type' => 'int',
|
||||
'format' => null,
|
||||
'allowed_values' => null,
|
||||
]
|
||||
];
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
@ -991,6 +1092,9 @@ class EmployeeMultiEventServiceController extends BaseController
|
||||
$params["action"] = "inception";
|
||||
$params["file_path"] = $file_paths['inception'];
|
||||
$error[] = $this->excelFileFormatValidation($params);
|
||||
if (isset($error['error_data']) && count($error['error_data']) == 0) {
|
||||
$error[] = $this->compareMemberDataAndInceptionData($params);
|
||||
}
|
||||
}
|
||||
|
||||
//addition
|
||||
@ -1357,6 +1461,13 @@ class EmployeeMultiEventServiceController extends BaseController
|
||||
$enrollment_keys = array_keys($enrollment_columns_to_check);
|
||||
}
|
||||
|
||||
// for this condition to avoid 5,00,000 to 500000
|
||||
if($current_column_action == 'SI'){
|
||||
$row[3] = removeNumberFormatting($row[3]);
|
||||
}else if(in_array($current_column_action, ['I','DA', 'MI', 'A'])){
|
||||
$row[6] = removeNumberFormatting($row[6]);
|
||||
}
|
||||
|
||||
//iterate each row for columns validations
|
||||
foreach ($row as $col_key => $col) {
|
||||
$is_mandatory = $columns_to_check[$keys[$col_key]]['is_mandatory'];
|
||||
@ -1495,6 +1606,16 @@ class EmployeeMultiEventServiceController extends BaseController
|
||||
$columns_to_check = $this->inception_excel_columns;
|
||||
}
|
||||
|
||||
$current_column_action = null;
|
||||
if($file['action'] == 'inception'){ $current_column_action = 'I'; }
|
||||
else if($file['action'] == 'addition'){ $current_column_action = 'A'; }
|
||||
else if($file['action'] == 'dependent_addition'){ $current_column_action = 'DA'; }
|
||||
else if($file['action'] == 'deletion'){ $current_column_action = 'D'; }
|
||||
else if($file['action'] == 'correction'){ $current_column_action = 'C'; }
|
||||
else if($file['action'] == 'si_enhancement'){ $current_column_action = 'SI'; }
|
||||
else if($file['action'] == 'enrollment'){ $current_column_action = 'I'; }
|
||||
else if($file['action'] == 'missed_inception'){ $current_column_action = 'MI'; }
|
||||
|
||||
$columns_to_check = $this->syncColIndex($this->multievent_excel_columns, $columns_to_check);
|
||||
// print_rr($columns_to_check);
|
||||
|
||||
@ -1522,7 +1643,7 @@ class EmployeeMultiEventServiceController extends BaseController
|
||||
|
||||
if (in_array($file['action'], ['inception', 'missed_inception', 'addition', 'dependent_addition', 'deletion', 'correction', 'si_enhancement', 'enrollment'])) // the below funcitons are only for I,DA,A
|
||||
{
|
||||
$employee_data_group_by_family = data_group_by_family($excel_data, 'excel', ($file['action'] == 'enrollment' ? 'enrollment' : ''));
|
||||
$employee_data_group_by_family = data_group_by_family($excel_data, 'excel', ($file['action'] == 'enrollment' ? 'enrollment' : ''), $current_column_action);
|
||||
// dd($employee_data_group_by_family);
|
||||
$is_self_available_in_policy_terms = false;
|
||||
if ($policy_details['policy_type_id'] == 3) // GMC parents
|
||||
@ -1694,6 +1815,16 @@ class EmployeeMultiEventServiceController extends BaseController
|
||||
$columns_to_check = $this->inception_excel_columns;
|
||||
}
|
||||
|
||||
$current_column_action = null;
|
||||
if($file['action'] == 'inception'){ $current_column_action = 'I'; }
|
||||
else if($file['action'] == 'addition'){ $current_column_action = 'A'; }
|
||||
else if($file['action'] == 'dependent_addition'){ $current_column_action = 'DA'; }
|
||||
else if($file['action'] == 'deletion'){ $current_column_action = 'D'; }
|
||||
else if($file['action'] == 'correction'){ $current_column_action = 'C'; }
|
||||
else if($file['action'] == 'si_enhancement'){ $current_column_action = 'SI'; }
|
||||
else if($file['action'] == 'enrollment'){ $current_column_action = 'I'; }
|
||||
else if($file['action'] == 'missed_inception'){ $current_column_action = 'MI'; }
|
||||
|
||||
// get policy and rack details
|
||||
$policy_terms = $this->clientPolicyModel->getPolicyDetails($file['client_id'], $file['policy_id']);
|
||||
$policy_terms = (array) $policy_terms[0]; // convert obj to array
|
||||
@ -1717,7 +1848,7 @@ class EmployeeMultiEventServiceController extends BaseController
|
||||
//get existing units in the current branch
|
||||
$existing_units = $this->clientBranchModel->getExisitingUnits(client_id: $file['client_id'], client_branch_id: $file['client_branch_id']);
|
||||
|
||||
$employee_data_group_by_family = data_group_by_family($excel_data);
|
||||
$employee_data_group_by_family = data_group_by_family($excel_data, 'excel', '', $current_column_action);
|
||||
// dd($employee_data_group_by_family);
|
||||
foreach ($employee_data_group_by_family as $emp_id => $family) {
|
||||
|
||||
@ -2029,6 +2160,9 @@ class EmployeeMultiEventServiceController extends BaseController
|
||||
if (check_row_is_empty_or_null($row)) {
|
||||
break;
|
||||
}
|
||||
|
||||
$row[3] = removeNumberFormatting($row[3]);
|
||||
|
||||
// echo '<br>START- ' . $row[2];
|
||||
$employee = $this->employeeModel
|
||||
->where('emp_code', $row[1])
|
||||
@ -2038,6 +2172,7 @@ class EmployeeMultiEventServiceController extends BaseController
|
||||
->where('emp_status', 'active')
|
||||
->where('is_active', 1)
|
||||
->first();
|
||||
|
||||
$employee_policy = $this->employeePolicyModel
|
||||
->where('employee_id', $employee['id'])
|
||||
->where('client_policy_id', $file['policy_id'])
|
||||
@ -2052,8 +2187,11 @@ class EmployeeMultiEventServiceController extends BaseController
|
||||
->where('emp_code', $employee['emp_code'])
|
||||
->where('name', $employee['name'])
|
||||
->where('field_name', 'basic_cover_si')
|
||||
->where('is_active', 1)
|
||||
->where('status !=', 'truncated')
|
||||
->findAll();
|
||||
// dd($existing_endorsements);
|
||||
|
||||
//make entry in endorsement table
|
||||
if (!count($existing_endorsements)) {
|
||||
//transform data to send
|
||||
@ -2101,6 +2239,8 @@ class EmployeeMultiEventServiceController extends BaseController
|
||||
$this->empEndorsementModel->save(['pk' => (int)$employee_policy['id'], 'emp_code' => $employee['emp_code'], 'table_name' => 'employee_polices', 'actions' => 'si', 'name' => $employee['name'], 'field_name' => 'basic_cover_si', 'old_value' => $employee_policy['basic_cover_si'], 'new_value' => $row[3], 'created_by' => $file['created_by'], 'remarks' => 'general si enhancement', 'group_key' => $group_key, 'file_id' => $file['id'], 'status' => 'pending']);
|
||||
$this->empEndorsementModel->save(['pk' => (int)$employee_policy['id'], 'emp_code' => $employee['emp_code'], 'table_name' => 'employee_polices', 'actions' => 'si', 'name' => $employee['name'], 'field_name' => 'premium', 'old_value' => $employee_policy['premium'], 'new_value' => $calculated_data['policy_details']['premium'], 'created_by' => $file['created_by'], 'remarks' => 'general si enhancement', 'group_key' => $group_key, 'file_id' => $file['id'], 'status' => 'pending']);
|
||||
$this->empEndorsementModel->save(['pk' => (int)$employee_policy['id'], 'emp_code' => $employee['emp_code'], 'table_name' => 'employee_polices', 'actions' => 'si', 'name' => $employee['name'], 'field_name' => 'si_enhancement_date', 'old_value' => null, 'new_value' => change_date_format($row[4], 'd-M-Y', 'Y-m-d'), 'created_by' => $file['created_by'], 'remarks' => 'general si enhancement', 'group_key' => $group_key, 'file_id' => $file['id'], 'status' => 'pending']);
|
||||
}else {
|
||||
$this->myLogger->logme("error", 'Endorsement already exists for this employee ' . json_encode(['file_id' => $file_id, 'emp_code' => $employee['emp_code'], 'emp_name' => $employee['name']]));
|
||||
}
|
||||
}
|
||||
|
||||
@ -2125,10 +2265,9 @@ class EmployeeMultiEventServiceController extends BaseController
|
||||
foreach ($familiy_data as $fkey => $value) {
|
||||
if (is_array($value)) {
|
||||
|
||||
|
||||
if (isset($value['gender'])) { $value['gender'] = normalizeGender($value['gender'] );}
|
||||
if ($file['id'] == null || $value['temp']['source'] == 'excel' || (($file['action'] == 'dependent_addition' && ($value['temp']['premium_type'] == 1 && strtolower($value['relationship']) == 'self') || ($value['temp']['premium_type'] == 2 || $value['temp']['premium_type'] == null)))) //insert data come from excel and from db i.e. ( $file['id'] == null for enrollment data)
|
||||
{
|
||||
|
||||
$employee = $this->employeeModel->checkExistingEmp($value, $file['client_branch_id']);
|
||||
$policy_data = $value['policy_details'];
|
||||
$temp = $value['temp'];
|
||||
@ -2881,6 +3020,135 @@ class EmployeeMultiEventServiceController extends BaseController
|
||||
return $temp;
|
||||
}
|
||||
|
||||
// --------- MEMBER DATA AND INCEPTION DATA COMPARISION ------------------------------------------------------------------------
|
||||
|
||||
public function compareMemberDataAndInceptionData($params)
|
||||
{
|
||||
$file_id = $params['file_id'] ?? null;
|
||||
if (empty($file_id)) {
|
||||
return ['status' => false, 'msg' => 'File ID is missing'];
|
||||
}
|
||||
|
||||
// ✅ Get File Data
|
||||
$file = $this->fileModel->where(['is_active' => 1, 'id' => $file_id])->first();
|
||||
if (empty($file)) {
|
||||
return ['status' => false, 'msg' => 'File not found in DB'];
|
||||
}
|
||||
|
||||
// ✅ Get Client Policy Data
|
||||
$client_policy_data = $this->clientPolicyModel->where(['is_active' => 1, 'id' => $file['policy_id']])->first();
|
||||
if (empty($client_policy_data)) {
|
||||
return ['status' => false, 'msg' => 'Client policy data not found in DB (policy_id: ' . $file['policy_id'] . ')'];
|
||||
}
|
||||
|
||||
// ✅ Get Lead Data
|
||||
$leadModel = new LeadsModel();
|
||||
$lead_data = $leadModel->where(['is_active' => 1, 'id' => $client_policy_data['is_from_lead']])->first();
|
||||
if (empty($lead_data)) {
|
||||
return ['status' => false, 'msg' => 'Lead data not found in DB (lead_id: ' . $client_policy_data['is_from_lead'] . ')'];
|
||||
}
|
||||
|
||||
// ✅ Define File Paths
|
||||
// $inception_file_path = !empty($file['file_name']) ? WRITEPATH . "uploads/excel/" . $file['file_name'] : '';
|
||||
$member_file_path = !empty($lead_data['file_name']) ? WRITEPATH . "uploads/lead_files/" . $lead_data['file_name'] : '';
|
||||
|
||||
// ✅ Check Inception File
|
||||
// if (empty($file['file_name']) || !file_exists($inception_file_path)) {
|
||||
// $message = empty($file['file_name']) ? "Inception file name is missing" : "Inception physical file not found";
|
||||
// $this->myLogger->logme('error', "$message for file id $file_id");
|
||||
// $this->fileModel->update($file_id, [
|
||||
// 'status' => 'failed',
|
||||
// 'reason' => json_encode(['error_summary' => [5], 'error_data' => $message])
|
||||
// ]);
|
||||
// return ['error_summary' => [5], 'error_data' => $message];
|
||||
// }
|
||||
|
||||
// ✅ Check Member File
|
||||
if (empty($lead_data['file_name']) || !file_exists($member_file_path)) {
|
||||
$message = empty($lead_data['file_name']) ? "Member file name is missing" : "Member data physical file not found";
|
||||
$this->myLogger->logme('error', "$message for lead id {$lead_data['id']}");
|
||||
$this->fileModel->update($file_id, [
|
||||
'status' => 'failed',
|
||||
'reason' => json_encode(['error_summary' => [5], 'error_data' => $message])
|
||||
]);
|
||||
return ['error_summary' => [5], 'error_data' => $message];
|
||||
}
|
||||
|
||||
|
||||
// ✅ Read Inception Excel
|
||||
$inception_columns = $this->inception_excel_columns;
|
||||
$inception_data = json_decode(file_get_contents($params['file_path'] ?? []), true);
|
||||
// $spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($inception_file_path);
|
||||
// $sheet = $spreadsheet->getActiveSheet();
|
||||
// $highestRow = $sheet->getHighestDataRow();
|
||||
// $allowedColumn = end($inception_columns)['col_cell_name'];
|
||||
// $inception_data = $sheet->rangeToArray("A1:{$allowedColumn}{$highestRow}");
|
||||
// $inception_data = ExcelSanitizeHelper::sanitizeArrayData($inception_data);
|
||||
|
||||
// ✅ Read Member Excel
|
||||
$member_columns = $this->member_data_excel_columns;
|
||||
$spreadsheet2 = \PhpOffice\PhpSpreadsheet\IOFactory::load($member_file_path);
|
||||
$sheet2 = $spreadsheet2->getSheet(0);
|
||||
$highestRow2 = $sheet2->getHighestDataRow();
|
||||
$allowedColumn2 = end($member_columns)['col_cell_name'];
|
||||
$member_data = $sheet2->rangeToArray("A1:{$allowedColumn2}{$highestRow2}");
|
||||
$member_data = ExcelSanitizeHelper::sanitizeArrayData($member_data);
|
||||
|
||||
// dd($inception_data, $member_data);
|
||||
|
||||
// ✅ Compare Inception Data with Member Data
|
||||
$result = ['error_type' => 2, 'error_summary' => [], 'error_data' => []];
|
||||
|
||||
$inception_data_count = count($inception_data);
|
||||
$member_data_count = count($member_data);
|
||||
|
||||
if ($inception_data_count !== $member_data_count) {
|
||||
$result['error_summary'][] = 15;
|
||||
$result['error_message'] = "
|
||||
<strong>Inception Data Count:</strong>
|
||||
<span class='badge badge-danger'>{$inception_data_count}</span>
|
||||
<strong>Member Data Count:</strong>
|
||||
<span class='badge badge-danger'>{$member_data_count}</span>";
|
||||
}
|
||||
|
||||
foreach ($inception_data as $inception_key => $inception_row) {
|
||||
|
||||
// 🔹 If inception row is empty → stop all further processing
|
||||
if (check_row_is_empty_or_null($inception_row)) {
|
||||
break;
|
||||
}
|
||||
|
||||
$match_found = false;
|
||||
|
||||
foreach ($member_data as $member_row) {
|
||||
if (
|
||||
$inception_row[1] == $member_row[1] && // emp_id / emp_code
|
||||
$inception_row[2] == $member_row[2] && // name_of_emp_dep / name
|
||||
$inception_row[5] == $member_row[3] && // relationship
|
||||
normalizeGender($inception_row[4]) == normalizeGender($member_row[4]) && // gender
|
||||
$inception_row[3] == $member_row[5] && // dob
|
||||
$inception_row[13] == $member_row[7] && // email
|
||||
$inception_row[12] == $member_row[8] // phone / mobile
|
||||
) {
|
||||
$match_found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!$match_found) {
|
||||
array_push($result['error_summary'], 14);
|
||||
$result['error_data'][$inception_key]['sno']['error'][] = "This inception row was not found in the member data list.";
|
||||
}
|
||||
}
|
||||
|
||||
// ✅ Handle Result
|
||||
if (!empty($result['error_summary'])) {
|
||||
$result['error_summary'] = array_count_values($result['error_summary']);
|
||||
$this->myLogger->logme('error', "File ID $file_id comparison failed");
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -53,6 +53,8 @@ use Illuminate\Http\Request;
|
||||
|
||||
use App\Controllers\EmployeeServiceController;
|
||||
use App\Models\ClaimFilesModel;
|
||||
use App\Models\TicketMailTemplateModel;
|
||||
use Composer\Pcre\Preg;
|
||||
use Kreait\Firebase\Factory;
|
||||
use Kreait\Firebase\Messaging\CloudMessage;
|
||||
use Kreait\Firebase\Messaging\Notification;
|
||||
@ -90,6 +92,7 @@ class EmployeeRestController extends AdminController
|
||||
protected $hrAccessControlModel;
|
||||
protected $insurerModel;
|
||||
protected $hrFileUploadModel;
|
||||
protected $ticketMailTemplateModel;
|
||||
|
||||
|
||||
public function __construct()
|
||||
@ -122,6 +125,7 @@ class EmployeeRestController extends AdminController
|
||||
$this->hrAccessControlModel = new HRAccessControlModel();
|
||||
$this->insurerModel = new InsurerModel();
|
||||
$this->hrFileUploadModel = new HrFileUploadModel();
|
||||
$this->ticketMailTemplateModel = new TicketMailTemplateModel();
|
||||
|
||||
}
|
||||
|
||||
@ -4174,7 +4178,11 @@ class EmployeeRestController extends AdminController
|
||||
];
|
||||
|
||||
// Save into DB
|
||||
$this->hrFileUploadModel->insert($data);
|
||||
$result = $this->hrFileUploadModel->insert($data);
|
||||
|
||||
if($result){
|
||||
$this->giveNotificationToClientsAccountManager($data);
|
||||
}
|
||||
|
||||
return $this->respondCreated([
|
||||
'status' => true,
|
||||
@ -4188,6 +4196,45 @@ class EmployeeRestController extends AdminController
|
||||
|
||||
}
|
||||
|
||||
private function giveNotificationToClientsAccountManager($data){
|
||||
|
||||
$client_name = $this->clientModel->where('id',$data['client_id'])->findAll()[0]['client_name'] ?? [] ;
|
||||
|
||||
$account_manager_email = $this->clientRMModel->findAccountManagerEmail($data['client_id']);
|
||||
|
||||
$templateName = "hr_endorsement_template";
|
||||
|
||||
$mailTemplate = $this->ticketMailTemplateModel->where('template_name', $templateName)->findAll()[0] ?? [];
|
||||
|
||||
if(empty($mailTemplate)){
|
||||
//empty mail template please update the template in database or create one..!!
|
||||
log_message("error","Empty mail template for inception_addition please update the template in database or create one..!!");
|
||||
return ;
|
||||
}
|
||||
|
||||
$data['file_action'] = ucwords(preg_replace("/_/", " ", $data['file_action']));
|
||||
|
||||
$mailTemplate['mail_content'] = str_replace('%file_action%', $data['file_action'] ?? '', $mailTemplate['mail_content']);
|
||||
$mailTemplate['mail_content'] = str_replace('%client_name%', $client_name ?? '', $mailTemplate['mail_content']);
|
||||
$mailTemplate['mail_content'] = str_replace('%policy_no%', $data['policy_no'] ?? '', $mailTemplate['mail_content']);
|
||||
|
||||
$mailTemplate['subject'] = str_replace('%subject%',$data['file_action']??'',$mailTemplate['subject']);
|
||||
$mailTemplate['subject'] = str_replace('%client_name%',$client_name??'',$mailTemplate['subject']);
|
||||
|
||||
$from_mail = "";
|
||||
$to_mail = $account_manager_email;
|
||||
$subject = $mailTemplate['subject'];
|
||||
$message = $mailTemplate['mail_content'];
|
||||
$cc_string = "";
|
||||
$attachments = "";
|
||||
$reply_to = "";
|
||||
$bcc_string = "";
|
||||
|
||||
|
||||
MailHelper::send_email(['from_mail' => $from_mail, 'mail' => $to_mail, 'cc' => $cc_string, 'subject' => $subject, 'message' => $message, 'attachments' => $attachments, 'reply_to' => $reply_to, 'bcc' => $bcc_string]);
|
||||
|
||||
}
|
||||
|
||||
public function updateHrFileUploadData()
|
||||
{
|
||||
try {
|
||||
|
||||
@ -29,7 +29,7 @@ use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
use Kint\Kint;
|
||||
|
||||
use App\Helpers\ExcelSanitizeHelper;
|
||||
|
||||
use App\Models\LeadsModel;
|
||||
|
||||
class EmployeeServiceController extends AdminController
|
||||
{
|
||||
@ -144,7 +144,7 @@ class EmployeeServiceController extends AdminController
|
||||
'is_mandatory' => ['I', 'A', 'DA'],
|
||||
'data_type' => 'str',
|
||||
'format' => null,
|
||||
'allowed_values' => ['M', 'F']
|
||||
'allowed_values' => ['M', 'F', 'Male', 'Female', 'male', 'female', 'MALE', 'FEMALE']
|
||||
],
|
||||
'relationship' => [
|
||||
'col_idx' => 5,
|
||||
@ -529,7 +529,8 @@ class EmployeeServiceController extends AdminController
|
||||
'is_mandatory' => ['I', 'A', 'DA','E'],
|
||||
'data_type' => 'str',
|
||||
'format' => null,
|
||||
'allowed_values' => ['M', 'F']
|
||||
'allowed_values' => ['M', 'F', 'Male', 'Female', 'male', 'female', 'MALE', 'FEMALE']
|
||||
|
||||
],
|
||||
'relationship' => [
|
||||
'col_idx' => 5,
|
||||
@ -643,21 +644,121 @@ class EmployeeServiceController extends AdminController
|
||||
];
|
||||
|
||||
protected $enrollment_to_inception_mapping = [
|
||||
0 => 0, // enrollment: sno (Sno) -> inception: sno (S.No)
|
||||
1 => 1, // enrollment: emp_code (Emp_Code) -> inception: emp_id (EMP ID)
|
||||
2 => 2, // enrollment: name (NAME OF EMP/DEP) -> inception: name_of_emp_dep (NAME OF EMP/DEP)
|
||||
3 => 8, // enrollment: doj (DOJ) -> inception: doj (DOJ)
|
||||
4 => 4, // enrollment: gender (Gender) -> inception: gender (Gender)
|
||||
5 => 5, // enrollment: relationship (Relation) -> inception: relationship (RELATIONSHIP)
|
||||
6 => 3, // enrollment: dob (DOB) -> inception: dob (DOB)
|
||||
7 => 13, // enrollment: email (Email) -> inception: email (Email)
|
||||
8 => 12, // enrollment: phone (Mobile) -> inception: phone (Phone)
|
||||
9 => 6, // enrollment: basic_cover_si (SI) -> inception: basic_cover_si (BASIC COVER SI)
|
||||
10 => 10, // enrollment: band_grade (Grade) -> inception: band_grade (Band/Grade)
|
||||
11 => 9 // enrollment: basic_pay (Basic Pay) -> inception: basic_pay (Basic Pay)
|
||||
];
|
||||
|
||||
|
||||
0 => 0, // enrollment: sno (Sno) -> inception: sno (S.No)
|
||||
1 => 1, // enrollment: emp_code (Emp_Code) -> inception: emp_id (EMP ID)
|
||||
2 => 2, // enrollment: name (NAME OF EMP/DEP) -> inception: name_of_emp_dep (NAME OF EMP/DEP)
|
||||
3 => 8, // enrollment: doj (DOJ) -> inception: doj (DOJ)
|
||||
4 => 4, // enrollment: gender (Gender) -> inception: gender (Gender)
|
||||
5 => 5, // enrollment: relationship (Relation) -> inception: relationship (RELATIONSHIP)
|
||||
6 => 3, // enrollment: dob (DOB) -> inception: dob (DOB)
|
||||
7 => 13, // enrollment: email (Email) -> inception: email (Email)
|
||||
8 => 12, // enrollment: phone (Mobile) -> inception: phone (Phone)
|
||||
9 => 6, // enrollment: basic_cover_si (SI) -> inception: basic_cover_si (BASIC COVER SI)
|
||||
10 => 10, // enrollment: band_grade (Grade) -> inception: band_grade (Band/Grade)
|
||||
11 => 9 // enrollment: basic_pay (Basic Pay) -> inception: basic_pay (Basic Pay)
|
||||
];
|
||||
protected $member_data_excel_columns = [
|
||||
'sno' => [
|
||||
'col_idx' => 0,
|
||||
'col_cell_name' => 'A',
|
||||
'col_name' => 'Sl no',
|
||||
'is_mandatory' => false,
|
||||
'data_type' => 'str',
|
||||
'format' => null,
|
||||
'allowed_values' => null
|
||||
],
|
||||
'emp_code' => [
|
||||
'col_idx' => 1,
|
||||
'col_cell_name' => 'B',
|
||||
'col_name' => 'Emp Code',
|
||||
'is_mandatory' => true,
|
||||
'data_type' => 'str',
|
||||
'format' => null,
|
||||
'allowed_values' => null
|
||||
],
|
||||
'name' => [
|
||||
'col_idx' => 2,
|
||||
'col_cell_name' => 'C',
|
||||
'col_name' => 'Name',
|
||||
'is_mandatory' => true,
|
||||
'data_type' => 'str',
|
||||
'format' => null,
|
||||
'allowed_values' => null
|
||||
],
|
||||
'relationship' => [
|
||||
'col_idx' => 3,
|
||||
'col_cell_name' => 'D',
|
||||
'col_name' => 'Relationship',
|
||||
'is_mandatory' => true,
|
||||
'data_type' => 'str',
|
||||
'format' => null,
|
||||
'allowed_values' => [
|
||||
'Self', 'Spouse', 'Son', 'Daughter', 'Father', 'Mother',
|
||||
'Father-in-law', 'Mother-in-law',
|
||||
'self', 'spouse', 'son', 'daughter', 'father', 'mother',
|
||||
'father-in-law', 'mother-in-law'
|
||||
],
|
||||
'custom' => 'check_relationship_for_member_data',
|
||||
'params' => ['row', 'relationship', 'columns_to_check']
|
||||
],
|
||||
'gender' => [
|
||||
'col_idx' => 4,
|
||||
'col_cell_name' => 'E',
|
||||
'col_name' => 'Gender',
|
||||
'is_mandatory' => true,
|
||||
'data_type' => 'str',
|
||||
'format' => null,
|
||||
'allowed_values' => ['M', 'F', 'Male', 'Female', 'male', 'female', 'MALE', 'FEMALE']
|
||||
],
|
||||
'dob' => [
|
||||
'col_idx' => 5,
|
||||
'col_cell_name' => 'F',
|
||||
'col_name' => 'DOB',
|
||||
'is_mandatory' => true,
|
||||
'data_type' => 'str',
|
||||
'format' => 'd-M-Y',
|
||||
'allowed_values' => null,
|
||||
'age_validation' => true,
|
||||
// 'custom' => 'check_dob_diff',
|
||||
// 'params' => ['row', 'relationship', 'default_age_ratio', 'policy_details']
|
||||
],
|
||||
'age' => [
|
||||
'col_idx' => 6,
|
||||
'col_cell_name' => 'G',
|
||||
'col_name' => 'Age',
|
||||
'is_mandatory' => true,
|
||||
'data_type' => 'int',
|
||||
'format' => null,
|
||||
'allowed_values' => null
|
||||
],
|
||||
'email' => [
|
||||
'col_idx' => 7,
|
||||
'col_cell_name' => 'H',
|
||||
'col_name' => 'Email',
|
||||
'is_mandatory' => false,
|
||||
'data_type' => 'str',
|
||||
'format' => null,
|
||||
'allowed_values' => null
|
||||
],
|
||||
'mobile' => [
|
||||
'col_idx' => 8,
|
||||
'col_cell_name' => 'I',
|
||||
'col_name' => 'Mobile',
|
||||
'is_mandatory' => false,
|
||||
'data_type' => 'str',
|
||||
'format' => null,
|
||||
'allowed_values' => null
|
||||
],
|
||||
'si' => [
|
||||
'col_idx' => 9,
|
||||
'col_cell_name' => 'J',
|
||||
'col_name' => 'SI',
|
||||
'is_mandatory' => false,
|
||||
'data_type' => 'int',
|
||||
'format' => null,
|
||||
'allowed_values' => null,
|
||||
]
|
||||
];
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
@ -809,6 +910,13 @@ class EmployeeServiceController extends AdminController
|
||||
$enrollment_columns_to_check = $this->enrollment_excel_columns;
|
||||
$enrollment_keys = array_keys($enrollment_columns_to_check);
|
||||
}
|
||||
|
||||
// for this condition to avoid 5,00,000 to 500000
|
||||
if($current_column_action == 'SI'){
|
||||
$row[3] = removeNumberFormatting($row[3]);
|
||||
}else if(in_array($current_column_action, ['I','DA', 'MI', 'A'])){
|
||||
$row[6] = removeNumberFormatting($row[6]);
|
||||
}
|
||||
|
||||
//iterate each row for columns validations
|
||||
foreach ($row as $col_key => $col)
|
||||
@ -923,7 +1031,14 @@ class EmployeeServiceController extends AdminController
|
||||
|
||||
}
|
||||
else //trigger next data validation via job queue server
|
||||
{
|
||||
{
|
||||
// check the condition if the policy from the Leads and check the lead id exist in the client policy table
|
||||
if($file['action'] == 'inception' && $policy_details[0]->policy_entry_from == 3 && !empty($policy_details[0]->is_from_lead)){
|
||||
$r = Jobs::addJob(['job_name' => 'compareMemberDataAndInceptionData','payload' => ['file_id' => $file_id]]);
|
||||
$this->myLogger->logme("error",'compareMemberDataAndInceptionData job pushed');
|
||||
return $result;
|
||||
}
|
||||
|
||||
if($file['action'] == 'enrollment' && $file['uploaded_by'] != 1) // if current action is enrollment and uploaded by HR (0 or NULL) call next validation and return result
|
||||
{
|
||||
// dd();
|
||||
@ -978,6 +1093,16 @@ class EmployeeServiceController extends AdminController
|
||||
if($file['action'] == 'enrollment'){ $columns_to_check = $this->enrollment_excel_columns; }
|
||||
if($file['action'] == 'missed_inception'){ $columns_to_check = $this->inception_excel_columns; }
|
||||
|
||||
$current_column_action = null;
|
||||
if($file['action'] == 'inception'){ $current_column_action = 'I'; }
|
||||
else if($file['action'] == 'addition'){ $current_column_action = 'A'; }
|
||||
else if($file['action'] == 'dependent_addition'){ $current_column_action = 'DA'; }
|
||||
else if($file['action'] == 'deletion'){ $current_column_action = 'D'; }
|
||||
else if($file['action'] == 'correction'){ $current_column_action = 'C'; }
|
||||
else if($file['action'] == 'si_enhancement'){ $current_column_action = 'SI'; }
|
||||
else if($file['action'] == 'enrollment'){ $current_column_action = 'I'; }
|
||||
else if($file['action'] == 'missed_inception'){ $current_column_action = 'MI'; }
|
||||
|
||||
// get policy and rack details
|
||||
$policy_terms = $this->clientPolicyModel->getPolicyDetails($file['client_id'],$file['policy_id']);
|
||||
$policy_details = (array)$policy_terms[0];
|
||||
@ -1008,7 +1133,7 @@ class EmployeeServiceController extends AdminController
|
||||
|
||||
if(in_array($file['action'],['inception','missed_inception','addition','dependent_addition','deletion','correction','si_enhancement','enrollment']))// the below funcitons are only for I,DA,A
|
||||
{
|
||||
$employee_data_group_by_family = data_group_by_family($excel_data,'excel',($file['action'] == 'enrollment' ? 'enrollment' : ''));
|
||||
$employee_data_group_by_family = data_group_by_family($excel_data,'excel',($file['action'] == 'enrollment' ? 'enrollment' : ''), $current_column_action);
|
||||
// dd($employee_data_group_by_family);
|
||||
$is_self_available_in_policy_terms = false;
|
||||
if($policy_details['policy_type_id'] == 3) // GMC parents
|
||||
@ -1213,6 +1338,16 @@ class EmployeeServiceController extends AdminController
|
||||
if($file['action'] == 'si_enhancement'){ $columns_to_check = $this->si_enhance_excel_columns; }
|
||||
if($file['action'] == 'missed_inception'){ $columns_to_check = $this->inception_excel_columns; }
|
||||
|
||||
$current_column_action = null;
|
||||
if($file['action'] == 'inception'){ $current_column_action = 'I'; }
|
||||
else if($file['action'] == 'addition'){ $current_column_action = 'A'; }
|
||||
else if($file['action'] == 'dependent_addition'){ $current_column_action = 'DA'; }
|
||||
else if($file['action'] == 'deletion'){ $current_column_action = 'D'; }
|
||||
else if($file['action'] == 'correction'){ $current_column_action = 'C'; }
|
||||
else if($file['action'] == 'si_enhancement'){ $current_column_action = 'SI'; }
|
||||
else if($file['action'] == 'enrollment'){ $current_column_action = 'I'; }
|
||||
else if($file['action'] == 'missed_inception'){ $current_column_action = 'MI'; }
|
||||
|
||||
// get policy and rack details
|
||||
$policy_terms = $this->clientPolicyModel->getPolicyDetails($file['client_id'],$file['policy_id']);
|
||||
$policy_terms = (array) $policy_terms[0];// convert obj to array
|
||||
@ -1236,7 +1371,7 @@ class EmployeeServiceController extends AdminController
|
||||
//get existing units in the current branch
|
||||
$existing_units = $this->clientBranchModel->getExisitingUnits(client_id: $file['client_id'],client_branch_id: $file['client_branch_id']);
|
||||
|
||||
$employee_data_group_by_family = data_group_by_family($excel_data);
|
||||
$employee_data_group_by_family = data_group_by_family($excel_data, 'excel', '', $current_column_action);
|
||||
// dd($employee_data_group_by_family);
|
||||
foreach ($employee_data_group_by_family as $emp_id => $family)
|
||||
{
|
||||
@ -1542,76 +1677,78 @@ class EmployeeServiceController extends AdminController
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
//enhance of emp
|
||||
//enhance of emp
|
||||
public function employeesSIEnhanceProcess($params)
|
||||
{
|
||||
helper('excel_util_helper');
|
||||
helper('excel_util_helper');
|
||||
//get file name
|
||||
$file_id = $params['file_id'];
|
||||
$file = $this->fileModel->find($file_id);
|
||||
// dd($file);
|
||||
|
||||
$file_name_with_path = WRITEPATH."/uploads/excel/".$file['file_name'];
|
||||
$file_name_with_path = WRITEPATH . "/uploads/excel/" . $file['file_name'];
|
||||
|
||||
$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($file_name_with_path);
|
||||
$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($file_name_with_path);
|
||||
$sheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
|
||||
$highestRowAndColumn = $sheet->getHighestRowAndColumn();
|
||||
$allowedHighestColumn = end($this->si_enhance_excel_columns);
|
||||
$excel_data = $sheet->rangeToArray('A1:' . $allowedHighestColumn['col_cell_name'] . $highestRowAndColumn['row']);
|
||||
// $excel_data = $sheet->rangeToArray('A1:' . $highestRowAndColumn['column'] . $highestRowAndColumn['row']);
|
||||
|
||||
|
||||
unset($excel_data[0]);
|
||||
// dd($excel_data);
|
||||
|
||||
//get policy slab rates
|
||||
$slab_details = $this->policiesModel->getPolicySlabRatesForEmpOnboard($file['policy_id'],$file['client_id']);
|
||||
$slab_details = $this->policiesModel->getPolicySlabRatesForEmpOnboard($file['policy_id'], $file['client_id']);
|
||||
//iterate each row
|
||||
// dd($slab_details);
|
||||
foreach ($excel_data as $col_key => $row)
|
||||
{
|
||||
if(check_row_is_empty_or_null($row))
|
||||
{
|
||||
break;
|
||||
foreach ($excel_data as $col_key => $row) {
|
||||
if (check_row_is_empty_or_null($row)) {
|
||||
break;
|
||||
}
|
||||
|
||||
$row[3] = removeNumberFormatting($row[3]);
|
||||
|
||||
// echo '<br>START- ' . $row[2];
|
||||
$employee = $this->employeeModel
|
||||
->where('emp_code', $row[1])
|
||||
->where('name',$row[2])
|
||||
->where('client_id',$file['client_id'])
|
||||
->where('client_branch_id',$file['client_branch_id'])
|
||||
->where('emp_status', 'active')
|
||||
->where('is_active', 1)
|
||||
->first();
|
||||
->where('emp_code', $row[1])
|
||||
->where('name', $row[2])
|
||||
->where('client_id', $file['client_id'])
|
||||
->where('client_branch_id', $file['client_branch_id'])
|
||||
->where('emp_status', 'active')
|
||||
->where('is_active', 1)
|
||||
->first();
|
||||
|
||||
$employee_policy = $this->employeePolicyModel
|
||||
->where('employee_id',$employee['id'])
|
||||
->where('client_policy_id',$file['policy_id'])
|
||||
->where('employee_id', $employee['id'])
|
||||
->where('client_policy_id', $file['policy_id'])
|
||||
->where('status', 'active')
|
||||
->where('is_active', 1)
|
||||
->first();
|
||||
// dd($employee, $employee_policy);
|
||||
|
||||
$existing_endorsements = $this->empEndorsementModel->where('actions','si')
|
||||
->where('table_name','employee_polices')
|
||||
->where('endorsement_id is null')
|
||||
->where('emp_code',$employee['emp_code'])
|
||||
->where('name',$employee['name'])
|
||||
->where('field_name','basic_cover_si')
|
||||
->findAll();
|
||||
// dd($existing_endorsements);
|
||||
//make entry in endorsement table
|
||||
if(!count($existing_endorsements))
|
||||
{
|
||||
$existing_endorsements = $this->empEndorsementModel->where('actions', 'si')
|
||||
->where('table_name', 'employee_polices')
|
||||
->where('endorsement_id is null')
|
||||
->where('emp_code', $employee['emp_code'])
|
||||
->where('name', $employee['name'])
|
||||
->where('field_name', 'basic_cover_si')
|
||||
->where('is_active', 1)
|
||||
->where('status !=', 'truncated')
|
||||
->findAll();
|
||||
// dd($existing_endorsements);
|
||||
|
||||
//make entry in endorsement table
|
||||
if (!count($existing_endorsements)) {
|
||||
//transform data to send
|
||||
|
||||
//get applicable slab rate for current member relation
|
||||
$pre_rack_rate_name = '';
|
||||
$applicable_rack_rate_name = '';
|
||||
$applicable_rack_rate_master = [];
|
||||
foreach ($slab_details['slab_rates'] as $skey => $slab_value)
|
||||
{
|
||||
if($pre_rack_rate_name != $slab_value['rack_rate_name'])
|
||||
{
|
||||
foreach ($slab_details['slab_rates'] as $skey => $slab_value) {
|
||||
if ($pre_rack_rate_name != $slab_value['rack_rate_name']) {
|
||||
$pre_rack_rate_name = $slab_value['rack_rate_name'];
|
||||
$rack_rate_json = json_decode($slab_value['additional_relationship'], true);
|
||||
$relationship_array_key = strtolower(trim($employee['relationship']));
|
||||
@ -1624,51 +1761,46 @@ class EmployeeServiceController extends AdminController
|
||||
$relationship_array_key = 'parents-in-law';
|
||||
}
|
||||
|
||||
if(array_key_exists($relationship_array_key, $rack_rate_json) && $rack_rate_json[$relationship_array_key] != 0 && $rack_rate_json[$relationship_array_key] != 'NA')
|
||||
{
|
||||
if (array_key_exists($relationship_array_key, $rack_rate_json) && $rack_rate_json[$relationship_array_key] != 0 && $rack_rate_json[$relationship_array_key] != 'NA') {
|
||||
$applicable_rack_rate_name = $slab_value['rack_rate_name'];
|
||||
$applicable_rack_rate_master = $slab_value['grid_master'];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//get max age,max count of the familiy
|
||||
$max_age_and_max_count_of_current_member = $this->employeeModel->getFamiliyCountAndMaxage($employee['emp_code']);
|
||||
//transform SI excel row data as inception excel OR premium calculateable fomart
|
||||
|
||||
$data = transform_si_excel_row_to_calculatable_format(employee: $employee,employee_policy: $employee_policy,maxage_and_maxcount: $max_age_and_max_count_of_current_member,slab_details: $slab_details,applicable_slab_name: $applicable_rack_rate_name,augmented_si: $row[3],grid_master: $applicable_rack_rate_master);
|
||||
$policy_terms = $this->clientPolicyModel->getPolicyDetails($file['client_id'],$file['policy_id']);
|
||||
$data = transform_si_excel_row_to_calculatable_format(employee: $employee, employee_policy: $employee_policy, maxage_and_maxcount: $max_age_and_max_count_of_current_member, slab_details: $slab_details, applicable_slab_name: $applicable_rack_rate_name, augmented_si: $row[3], grid_master: $applicable_rack_rate_master);
|
||||
$policy_terms = $this->clientPolicyModel->getPolicyDetails($file['client_id'], $file['policy_id']);
|
||||
$policy_terms = (array) $policy_terms[0];
|
||||
// dd($policy_terms);
|
||||
//grouping slab details by rack rate name
|
||||
$temp_slab_rates = group_slab_rates_basedon_name($slab_details);
|
||||
|
||||
$calculated_data = premium_calculation_manager($data,$policy_terms,$temp_slab_rates,$row[3]);
|
||||
$calculated_data = premium_calculation_manager($data, $policy_terms, $temp_slab_rates, $row[3]);
|
||||
|
||||
$group_key = rand(100000, 999999);
|
||||
$this->empEndorsementModel->save(['pk' => (int)$employee_policy['id'],'emp_code' => $employee['emp_code'],'table_name' => 'employee_polices','actions' => 'si','name' => $employee['name'],'field_name' => 'basic_cover_si','old_value' => $employee_policy['basic_cover_si'],'new_value' => $row[3],'created_by' => $file['created_by'],'remarks' => 'general si enhancement','group_key' => $group_key,'file_id' => $file['id'],'status' => 'pending']);
|
||||
$this->empEndorsementModel->save(['pk' => (int)$employee_policy['id'],'emp_code' => $employee['emp_code'],'table_name' => 'employee_polices','actions' => 'si','name' => $employee['name'],'field_name' => 'premium','old_value' => $employee_policy['premium'],'new_value' => $calculated_data['policy_details']['premium'],'created_by' => $file['created_by'],'remarks' => 'general si enhancement','group_key' => $group_key,'file_id' => $file['id'],'status' => 'pending']);
|
||||
$this->empEndorsementModel->save(['pk' => (int)$employee_policy['id'],'emp_code' => $employee['emp_code'],'table_name' => 'employee_polices','actions' => 'si','name' => $employee['name'],'field_name' => 'si_enhancement_date','old_value' => null,'new_value' => change_date_format($row[4],'d-M-Y','Y-m-d'),'created_by' => $file['created_by'],'remarks' => 'general si enhancement','group_key' => $group_key,'file_id' => $file['id'],'status' => 'pending']);
|
||||
|
||||
|
||||
$group_key = rand(100000, 999999);
|
||||
$this->empEndorsementModel->save(['pk' => (int)$employee_policy['id'], 'emp_code' => $employee['emp_code'], 'table_name' => 'employee_polices', 'actions' => 'si', 'name' => $employee['name'], 'field_name' => 'basic_cover_si', 'old_value' => $employee_policy['basic_cover_si'], 'new_value' => $row[3], 'created_by' => $file['created_by'], 'remarks' => 'general si enhancement', 'group_key' => $group_key, 'file_id' => $file['id'], 'status' => 'pending']);
|
||||
$this->empEndorsementModel->save(['pk' => (int)$employee_policy['id'], 'emp_code' => $employee['emp_code'], 'table_name' => 'employee_polices', 'actions' => 'si', 'name' => $employee['name'], 'field_name' => 'premium', 'old_value' => $employee_policy['premium'], 'new_value' => $calculated_data['policy_details']['premium'], 'created_by' => $file['created_by'], 'remarks' => 'general si enhancement', 'group_key' => $group_key, 'file_id' => $file['id'], 'status' => 'pending']);
|
||||
$this->empEndorsementModel->save(['pk' => (int)$employee_policy['id'], 'emp_code' => $employee['emp_code'], 'table_name' => 'employee_polices', 'actions' => 'si', 'name' => $employee['name'], 'field_name' => 'si_enhancement_date', 'old_value' => null, 'new_value' => change_date_format($row[4], 'd-M-Y', 'Y-m-d'), 'created_by' => $file['created_by'], 'remarks' => 'general si enhancement', 'group_key' => $group_key, 'file_id' => $file['id'], 'status' => 'pending']);
|
||||
} else {
|
||||
$this->myLogger->logme("error", 'Endorsement already exists for this employee ' . json_encode(['file_id' => $file_id, 'emp_code' => $employee['emp_code'], 'emp_name' => $employee['name']]));
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
$this->fileModel->where('id', $file_id)->set(['status' => 'success','reason' => ''])->update();
|
||||
$this->myLogger->logme("error",'{file_id} uploaded success',['file_id' => $file_id]);
|
||||
$this->fileModel->where('id', $file_id)->set(['status' => 'success', 'reason' => ''])->update();
|
||||
$this->myLogger->logme("error", '{file_id} uploaded success', ['file_id' => $file_id]);
|
||||
|
||||
//set success msg to pull notifications
|
||||
$this->setPullNotification($this->getFileMetaDataByFileId($file_id,'success'));
|
||||
return true;
|
||||
$this->setPullNotification($this->getFileMetaDataByFileId($file_id, 'success'));
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
// insert or update in db for inception addition depent addition
|
||||
public function employeesOnboardProcess($params)
|
||||
public function employeesOnboardProcess($params)
|
||||
{
|
||||
// dd($params);
|
||||
|
||||
@ -1683,7 +1815,7 @@ class EmployeeServiceController extends AdminController
|
||||
if(is_array($value))
|
||||
{
|
||||
|
||||
|
||||
if (isset($value['gender'])) { $value['gender'] = normalizeGender($value['gender'] );}
|
||||
if($file['id'] == null || $value['temp']['source'] == 'excel' || (($file['action'] == 'dependent_addition' && ($value['temp']['premium_type'] == 1 && strtolower($value['relationship']) == 'self') || ($value['temp']['premium_type'] == 2 || $value['temp']['premium_type'] == null)))) //insert data come from excel and from db i.e. ( $file['id'] == null for enrollment data)
|
||||
{
|
||||
|
||||
@ -1723,7 +1855,7 @@ class EmployeeServiceController extends AdminController
|
||||
$value['updated_by'] = $file['created_by'];
|
||||
$value['id'] = $employee[0]['id'];
|
||||
$value['emp_status'] = 'active';
|
||||
$value['family_floater_key'] = generate_family_floater_key($value['relationship']);
|
||||
$value['family_floater_key'] = generate_family_floater_key($value['relationship']);
|
||||
$value['client_branch_id'] = $file['client_branch_id'];
|
||||
$value['file_id'] = isset($employee[0]['file_id']) && $employee[0]['file_id'] != '' ? $employee[0]['file_id'] : $file['id'] ;
|
||||
$log_message = 'Update Employee - '.$employee[0]['name'].'('.$employee[0]['emp_code'].') with PK '.$employee[0]['id'];
|
||||
@ -1872,127 +2004,125 @@ class EmployeeServiceController extends AdminController
|
||||
|
||||
|
||||
}
|
||||
// ---------------------------------------------------------------------------------
|
||||
|
||||
// ---------------------------------------------------------------------------------
|
||||
|
||||
public function getExcelErrorData($file_id){
|
||||
public function getExcelErrorData($file_id)
|
||||
{
|
||||
|
||||
try {
|
||||
$file = $this->fileModel->find($file_id);
|
||||
$error_data = json_decode($file['reason']);
|
||||
// dd($error_data);
|
||||
// return $error_data;
|
||||
try {
|
||||
$file = $this->fileModel->find($file_id);
|
||||
$error_data = json_decode($file['reason']);
|
||||
// dd($error_data);
|
||||
// return $error_data;
|
||||
|
||||
$file_name_with_path = WRITEPATH."/uploads/excel/".$file['file_name'];
|
||||
$file_name_with_path = WRITEPATH."/uploads/excel/".$file['file_name'];
|
||||
|
||||
//check the file exist or not
|
||||
if(!file_exists($file_name_with_path))
|
||||
{
|
||||
$error_message = "File not found";
|
||||
$this->myLogger->logme('error',($error_message . ' for file id ' . $file_id));
|
||||
return 0;
|
||||
}
|
||||
|
||||
$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($file_name_with_path);
|
||||
$sheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
$highestRowAndColumn = $sheet->getHighestRowAndColumn();
|
||||
$excel_data = $sheet->rangeToArray('A1:' . $highestRowAndColumn['column'] . $highestRowAndColumn['row']);
|
||||
$excelErrorData['excel_header'] = $excel_data[0];
|
||||
unset($excel_data[0]);
|
||||
// echo '<pre>';
|
||||
// Kint::dump($excel_data);
|
||||
if($error_data->error_type == 1){
|
||||
|
||||
$finalArray = [];
|
||||
foreach ($error_data->error_data as $key => $value) {
|
||||
|
||||
foreach ($value as $key2 => $value2) {
|
||||
$error_data = $value2->error;
|
||||
$data = ['value' => $excel_data[$key][$value2->col_idx], 'error'=>$error_data,];
|
||||
$excel_data[$key][$value2->col_idx] = $data;
|
||||
|
||||
}
|
||||
array_push($finalArray, $excel_data[$key]);
|
||||
//check the file exist or not
|
||||
if(!file_exists($file_name_with_path))
|
||||
{
|
||||
$error_message = "File not found";
|
||||
$this->myLogger->logme('error',($error_message . ' for file id ' . $file_id));
|
||||
return 0;
|
||||
}
|
||||
|
||||
foreach ($finalArray as $fkey => $value){
|
||||
foreach ($value as $vkey => $arrayData){
|
||||
if(!is_array($arrayData)){
|
||||
$data = ['value' => $arrayData];
|
||||
$finalArray[$fkey][$vkey] = $data;
|
||||
|
||||
$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($file_name_with_path);
|
||||
$sheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
$highestRowAndColumn = $sheet->getHighestRowAndColumn();
|
||||
$excel_data = $sheet->rangeToArray('A1:' . $highestRowAndColumn['column'] . $highestRowAndColumn['row']);
|
||||
$excelErrorData['excel_header'] = $excel_data[0];
|
||||
unset($excel_data[0]);
|
||||
// echo '<pre>';
|
||||
// Kint::dump($excel_data);
|
||||
if($error_data->error_type == 1){
|
||||
|
||||
$finalArray = [];
|
||||
foreach ($error_data->error_data as $key => $value) {
|
||||
|
||||
foreach ($value as $key2 => $value2) {
|
||||
$error_data = $value2->error;
|
||||
$data = ['value' => $excel_data[$key][$value2->col_idx], 'error'=>$error_data,];
|
||||
$excel_data[$key][$value2->col_idx] = $data;
|
||||
|
||||
}
|
||||
array_push($finalArray, $excel_data[$key]);
|
||||
}
|
||||
|
||||
foreach ($finalArray as $fkey => $value){
|
||||
foreach ($value as $vkey => $arrayData){
|
||||
if(!is_array($arrayData)){
|
||||
$data = ['value' => $arrayData];
|
||||
$finalArray[$fkey][$vkey] = $data;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$excelErrorData['excel_data'] = $finalArray;
|
||||
return $excelErrorData;
|
||||
|
||||
$excelErrorData['excel_data'] = $finalArray;
|
||||
return $excelErrorData;
|
||||
|
||||
}else if($error_data->error_type == 2){
|
||||
}else if($error_data->error_type == 2){
|
||||
|
||||
|
||||
$allErrors = [];
|
||||
$typeTowArray = [];
|
||||
$allErrors = [];
|
||||
$typeTowArray = [];
|
||||
|
||||
foreach ($error_data->error_data as $index => $item) {
|
||||
foreach ($error_data->error_data as $index => $item) {
|
||||
|
||||
foreach ($item as $field) {
|
||||
if (!isset($allErrors[$index])) {
|
||||
$allErrors[$index] = [];
|
||||
foreach ($item as $field) {
|
||||
if (!isset($allErrors[$index])) {
|
||||
$allErrors[$index] = [];
|
||||
}
|
||||
$allErrors[$index] = array_merge($allErrors[$index], $field->error);
|
||||
}
|
||||
$allErrors[$index] = array_merge($allErrors[$index], $field->error);
|
||||
}
|
||||
}
|
||||
|
||||
// dd(array_keys($allErrors));
|
||||
foreach ($allErrors as $key => $value){
|
||||
// echo $key;
|
||||
// print_r($value);
|
||||
foreach($excel_data as $excel_data_index => $excel_data_value)
|
||||
{
|
||||
if($excel_data_value[0] == $key)
|
||||
// dd(array_keys($allErrors));
|
||||
foreach ($allErrors as $key => $value){
|
||||
// echo $key;
|
||||
// print_r($value);
|
||||
foreach($excel_data as $excel_data_index => $excel_data_value)
|
||||
{
|
||||
$data = ['value' => $excel_data[$excel_data_index][1], 'error'=>$value,];
|
||||
$excel_data[$excel_data_index][1] = $data;
|
||||
array_push($typeTowArray, $excel_data[$excel_data_index]);
|
||||
break;
|
||||
if($excel_data_value[0] == $key)
|
||||
{
|
||||
$data = ['value' => $excel_data[$excel_data_index][1], 'error'=>$value,];
|
||||
$excel_data[$excel_data_index][1] = $data;
|
||||
array_push($typeTowArray, $excel_data[$excel_data_index]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
// dd($data);
|
||||
foreach ($typeTowArray as $fkey => $value){
|
||||
foreach ($value as $vkey => $arrayData){
|
||||
if(!is_array($arrayData)){
|
||||
$data = ['value' => $arrayData];
|
||||
$typeTowArray[$fkey][$vkey] = $data;
|
||||
|
||||
}
|
||||
// dd($data);
|
||||
foreach ($typeTowArray as $fkey => $value){
|
||||
foreach ($value as $vkey => $arrayData){
|
||||
if(!is_array($arrayData)){
|
||||
$data = ['value' => $arrayData];
|
||||
$typeTowArray[$fkey][$vkey] = $data;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$excelErrorData['excel_data'] = $typeTowArray;
|
||||
return $excelErrorData;
|
||||
|
||||
}
|
||||
|
||||
$excelErrorData['excel_data'] = $typeTowArray;
|
||||
return $excelErrorData;
|
||||
}catch (\Exception $e) {
|
||||
// Handle any exceptions
|
||||
$errorMessage = $e->getMessage();//die();
|
||||
$this->myLogger->logme('error', $errorMessage);
|
||||
return false; // You can return an error response here
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
// ---------------------------------------------------------------------------------
|
||||
|
||||
}catch (\Exception $e) {
|
||||
// Handle any exceptions
|
||||
$errorMessage = $e->getMessage();//die();
|
||||
$this->myLogger->logme('error', $errorMessage);
|
||||
return false; // You can return an error response here
|
||||
}
|
||||
public function getFileMetaDataByFileId($file_id, $status = 'success')
|
||||
{
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
// ---------------------------------------------------------------------------------
|
||||
|
||||
public function getFileMetaDataByFileId($file_id, $status = 'success'){
|
||||
|
||||
$data = $this->fileModel
|
||||
$data = $this->fileModel
|
||||
->select('files.*, clients.client_name, clients.short_name, policy_type.policy_type as policy_name,client_branch.branch_code')
|
||||
->join('clients', 'clients.id = files.client_id')
|
||||
->join('client_policy', 'client_policy.id = files.policy_id')
|
||||
@ -2016,11 +2146,9 @@ public function getFileMetaDataByFileId($file_id, $status = 'success'){
|
||||
|
||||
return ['msg_txt' => $msg_txt, 'user_id' => $user_id, 'url' => $url, 'status' => $status, 'title' => $msg_title];
|
||||
}
|
||||
|
||||
|
||||
public function setPullNotification($data){
|
||||
|
||||
|
||||
|
||||
public function setPullNotification($data)
|
||||
{
|
||||
$array = ['message_text' => $data['msg_txt'], 'action_url' => $data['url'], 'msg_status' => $data['status'], 'msg_title' => $data['title']];
|
||||
$jsonEncodeData = json_encode($array);
|
||||
|
||||
@ -2031,17 +2159,14 @@ public function getFileMetaDataByFileId($file_id, $status = 'success'){
|
||||
'role_id' => NULL,
|
||||
'team_id' => NULL,
|
||||
'message_type' => '1to1',
|
||||
];
|
||||
];
|
||||
|
||||
|
||||
$this->messageModel->insert($msg_data);
|
||||
|
||||
|
||||
}
|
||||
$this->messageModel->insert($msg_data);
|
||||
}
|
||||
|
||||
public function employeesEnrollmentInsert($params)
|
||||
{
|
||||
// dd($this->request);
|
||||
// dd($this->request);
|
||||
helper('excel_util_helper');
|
||||
//get file name
|
||||
$file_id = $params['file_id'];
|
||||
@ -2059,10 +2184,10 @@ public function getFileMetaDataByFileId($file_id, $status = 'success'){
|
||||
if(!file_exists($file_name_with_path))
|
||||
{
|
||||
//file not found update status and reason
|
||||
$message = "Physical file not found";
|
||||
$message = "Physical file not found";
|
||||
// echo $message;
|
||||
$this->myLogger->logme('error',($message . ' for file id ' . $file_id));
|
||||
$this->fileModel->where('id', $file_id)->set(['status' => 'failed','reason' => json_encode(['error_summary' => array_count_values([5]),'error_data' => $message])])->update();
|
||||
$this->fileModel->where('id', $file_id)->set(['status' => 'failed','reason' => json_encode(['error_summary' => array_count_values([5]),'error_data' => $message])])->update();
|
||||
return array('error_summary' => [5], 'error_data' => $message);
|
||||
}
|
||||
|
||||
@ -2077,7 +2202,8 @@ public function getFileMetaDataByFileId($file_id, $status = 'success'){
|
||||
$allowedHighestColumn = end($columns_to_check);
|
||||
$excel_data = $sheet->rangeToArray('A1:' . $allowedHighestColumn['col_cell_name'] . $highestRowAndColumn['row']);
|
||||
// print_r($keys);die();
|
||||
//get existing units in the current branch
|
||||
|
||||
//get existing units in the current branch
|
||||
$existing_units = $this->clientBranchModel->getExisitingUnits(client_id: $file['client_id'],client_branch_id: $file['client_branch_id']);
|
||||
//remove header
|
||||
unset($excel_data[0]);
|
||||
@ -2109,11 +2235,11 @@ public function getFileMetaDataByFileId($file_id, $status = 'success'){
|
||||
{
|
||||
$temp_unit = $existing_units[0];
|
||||
}
|
||||
|
||||
|
||||
$value['emp_code'] = $row[1];
|
||||
$value['name'] = $row[2];
|
||||
$value['doj'] = (!empty($row[3]) ? change_date_format($row[3],'d-M-Y','Y-m-d') : null );
|
||||
$value['gender'] = $row[4];
|
||||
$value['gender'] = normalizeGender($row[4]);
|
||||
$value['relationship'] = ucfirst(trim($row[5]));
|
||||
$value['dob'] = change_date_format($row[6],'d-M-Y','Y-m-d');
|
||||
$value['email_corporate'] = $row[7];
|
||||
@ -2149,10 +2275,10 @@ public function getFileMetaDataByFileId($file_id, $status = 'success'){
|
||||
$policy_data['date_coverage'] = $row[13] != "" && $row[13] != null ? change_date_format($row[13],'d-M-Y','Y-m-d') : null;
|
||||
$policy_data['client_policy_id'] = $file['policy_id'];
|
||||
|
||||
$employee = $this->employeeModel->checkExistingEmployee($value,$file['client_branch_id']);
|
||||
unset($value['temp']);
|
||||
$employee = $this->employeeModel->checkExistingEmployee($value,$file['client_branch_id']);
|
||||
unset($value['temp']);
|
||||
//save employee table
|
||||
// dd($employee['id']);
|
||||
// dd($employee['id']);
|
||||
if($employee !== null)
|
||||
{
|
||||
$value['updated_by'] = $file['created_by'];
|
||||
@ -2170,11 +2296,11 @@ public function getFileMetaDataByFileId($file_id, $status = 'success'){
|
||||
|
||||
$value = ExcelSanitizeHelper::sanitizeArrayData($value);
|
||||
$this->employeeModel->save($value);
|
||||
if (isset($value['id']))
|
||||
{ $emp_id = $value['id']; }
|
||||
else { $emp_id = $this->employeeModel->getInsertID();
|
||||
if (isset($value['id']))
|
||||
{ $emp_id = $value['id']; }
|
||||
else { $emp_id = $this->employeeModel->getInsertID();
|
||||
$log_message .= $emp_id;
|
||||
}
|
||||
}
|
||||
|
||||
// $emp_id = $this->employeeModel->getInsertID();
|
||||
// if($emp_id != 0){ $log_message .= $emp_id; }
|
||||
@ -2232,8 +2358,8 @@ public function getFileMetaDataByFileId($file_id, $status = 'success'){
|
||||
'employee_id' => $emp_id,
|
||||
'mail_type' => 'member_welcome_mail',
|
||||
];
|
||||
//store email and mail content via helper to send notification
|
||||
$emp_emails[] = sendMailNotification::sendMailNotification('member_welcome_mail', $params);
|
||||
//store email and mail content via helper to send notification
|
||||
$emp_emails[] = sendMailNotification::sendMailNotification('member_welcome_mail', $params);
|
||||
}
|
||||
}
|
||||
}// endof if row is empty check
|
||||
@ -2241,7 +2367,7 @@ public function getFileMetaDataByFileId($file_id, $status = 'success'){
|
||||
|
||||
// dd($emp_emails);
|
||||
|
||||
// for bulk mail queue job push
|
||||
// for bulk mail queue job push
|
||||
if (!empty($emp_emails) && count($emp_emails) > 0) {
|
||||
|
||||
$emp_emails = array_chunk($emp_emails, 20);
|
||||
@ -2259,6 +2385,140 @@ public function getFileMetaDataByFileId($file_id, $status = 'success'){
|
||||
|
||||
|
||||
return true;
|
||||
}//end of employeesEnrollmentInsert
|
||||
} //end of employeesEnrollmentInsert
|
||||
|
||||
// --------- MEMBER DATA AND INCEPTION DATA COMPARISION ------------------------------------------------------------------------
|
||||
|
||||
public function compareMemberDataAndInceptionData($params)
|
||||
{
|
||||
$file_id = $params['file_id'] ?? null;
|
||||
if (empty($file_id)) {
|
||||
return ['status' => false, 'msg' => 'File ID is missing'];
|
||||
}
|
||||
|
||||
// ✅ Get File Data
|
||||
$file = $this->fileModel->where(['is_active' => 1, 'id' => $file_id])->first();
|
||||
if (empty($file)) {
|
||||
return ['status' => false, 'msg' => 'File not found in DB'];
|
||||
}
|
||||
|
||||
// ✅ Get Client Policy Data
|
||||
$client_policy_data = $this->clientPolicyModel->where(['is_active' => 1, 'id' => $file['policy_id']])->first();
|
||||
if (empty($client_policy_data)) {
|
||||
return ['status' => false, 'msg' => 'Client policy data not found in DB (policy_id: ' . $file['policy_id'] . ')'];
|
||||
}
|
||||
|
||||
// ✅ Get Lead Data
|
||||
$leadModel = new LeadsModel();
|
||||
$lead_data = $leadModel->where(['is_active' => 1, 'id' => $client_policy_data['is_from_lead']])->first();
|
||||
if (empty($lead_data)) {
|
||||
return ['status' => false, 'msg' => 'Lead data not found in DB (lead_id: ' . $client_policy_data['is_from_lead'] . ')'];
|
||||
}
|
||||
|
||||
// ✅ Define File Paths
|
||||
$inception_file_path = !empty($file['file_name']) ? WRITEPATH . "uploads/excel/" . $file['file_name'] : '';
|
||||
$member_file_path = !empty($lead_data['file_name']) ? WRITEPATH . "uploads/lead_files/" . $lead_data['file_name'] : '';
|
||||
|
||||
// ✅ Check Inception File
|
||||
if (empty($file['file_name']) || !file_exists($inception_file_path)) {
|
||||
$message = empty($file['file_name']) ? "Inception file name is missing" : "Inception physical file not found";
|
||||
$this->myLogger->logme('error', "$message for file id $file_id");
|
||||
$this->fileModel->update($file_id, [
|
||||
'status' => 'failed',
|
||||
'reason' => json_encode(['error_summary' => [5], 'error_data' => $message])
|
||||
]);
|
||||
return ['error_summary' => [5], 'error_data' => $message];
|
||||
}
|
||||
|
||||
// ✅ Check Member File
|
||||
if (empty($lead_data['file_name']) || !file_exists($member_file_path)) {
|
||||
$message = empty($lead_data['file_name']) ? "Member file name is missing" : "Member data physical file not found";
|
||||
$this->myLogger->logme('error', "$message for lead id {$lead_data['id']}");
|
||||
$this->fileModel->update($file_id, [
|
||||
'status' => 'failed',
|
||||
'reason' => json_encode(['error_summary' => [5], 'error_data' => $message])
|
||||
]);
|
||||
return ['error_summary' => [5], 'error_data' => $message];
|
||||
}
|
||||
|
||||
|
||||
// ✅ Read Inception Excel
|
||||
$inception_columns = $this->inception_excel_columns;
|
||||
$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($inception_file_path);
|
||||
$sheet = $spreadsheet->getActiveSheet();
|
||||
$highestRow = $sheet->getHighestDataRow();
|
||||
$allowedColumn = end($inception_columns)['col_cell_name'];
|
||||
$inception_data = $sheet->rangeToArray("A1:{$allowedColumn}{$highestRow}");
|
||||
$inception_data = ExcelSanitizeHelper::sanitizeArrayData($inception_data);
|
||||
|
||||
// ✅ Read Member Excel
|
||||
$member_columns = $this->member_data_excel_columns;
|
||||
$spreadsheet2 = \PhpOffice\PhpSpreadsheet\IOFactory::load($member_file_path);
|
||||
$sheet2 = $spreadsheet2->getSheet(0);
|
||||
$highestRow2 = $sheet2->getHighestDataRow();
|
||||
$allowedColumn2 = end($member_columns)['col_cell_name'];
|
||||
$member_data = $sheet2->rangeToArray("A1:{$allowedColumn2}{$highestRow2}");
|
||||
$member_data = ExcelSanitizeHelper::sanitizeArrayData($member_data);
|
||||
|
||||
// dd($inception_data, $member_data);
|
||||
|
||||
// ✅ Compare Inception Data with Member Data
|
||||
$result = ['error_type' => 2, 'error_summary' => [], 'error_data' => []];
|
||||
|
||||
$inception_data_count = count($inception_data);
|
||||
$member_data_count = count($member_data);
|
||||
|
||||
if ($inception_data_count !== $member_data_count) {
|
||||
$result['error_summary'][] = 15;
|
||||
$result['error_message'] = "
|
||||
<strong>Inception Data Count:</strong>
|
||||
<span class='badge badge-danger'>{$inception_data_count}</span>
|
||||
<strong>Member Data Count:</strong>
|
||||
<span class='badge badge-danger'>{$member_data_count}</span>";
|
||||
}
|
||||
|
||||
foreach ($inception_data as $inception_key => $inception_row) {
|
||||
|
||||
// 🔹 If inception row is empty → stop all further processing
|
||||
if (check_row_is_empty_or_null($inception_row)) {
|
||||
break;
|
||||
}
|
||||
|
||||
$match_found = false;
|
||||
|
||||
foreach ($member_data as $member_row) {
|
||||
if (
|
||||
$inception_row[1] == $member_row[1] && // emp_id / emp_code
|
||||
$inception_row[2] == $member_row[2] && // name_of_emp_dep / name
|
||||
$inception_row[5] == $member_row[3] && // relationship
|
||||
normalizeGender($inception_row[4]) == normalizeGender($member_row[4]) && // gender
|
||||
$inception_row[3] == $member_row[5] && // dob
|
||||
$inception_row[13] == $member_row[7] && // email
|
||||
$inception_row[12] == $member_row[8] // phone / mobile
|
||||
) {
|
||||
$match_found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!$match_found) {
|
||||
array_push($result['error_summary'], 14);
|
||||
$result['error_data'][$inception_key]['sno']['error'][] = "This inception row was not found in the member data list.";
|
||||
}
|
||||
}
|
||||
|
||||
// ✅ Handle Result
|
||||
if (!empty($result['error_summary'])) {
|
||||
$result['error_summary'] = array_count_values($result['error_summary']);
|
||||
$this->fileModel->update($file_id, [
|
||||
'status' => 'failed',
|
||||
'reason' => json_encode($result)
|
||||
]);
|
||||
$this->myLogger->logme('error', "File ID $file_id comparison failed");
|
||||
} else {
|
||||
Jobs::addJob(['job_name' => 'excelFileDataValidation', 'payload' => ['file_id' => $file_id]]);
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
@ -171,6 +171,10 @@ class JobWorker extends AdminController
|
||||
'type' => 'CC', // Handler Category
|
||||
'handler' => 'App\Controllers\LeadsController',
|
||||
],
|
||||
'compareMemberDataAndInceptionData' => [
|
||||
'type' => 'CC', // Handler Category
|
||||
'handler' => 'App\Controllers\EmployeeServiceController',
|
||||
],
|
||||
];
|
||||
|
||||
|
||||
|
||||
@ -665,7 +665,10 @@ class LeadsController extends BaseController
|
||||
if ($value['lead_form_type'] == 1) {
|
||||
//for this push the job to the calculateMembersDemography() function
|
||||
$job_details = new Jobs();
|
||||
$r = Jobs::addJob(['job_name' => 'memberDataListExcelFileFormatValidation', 'payload' => [
|
||||
// $r = Jobs::addJob(['job_name' => 'memberDataListExcelFileFormatValidation', 'payload' => [
|
||||
// 'lead_id' => $insert,
|
||||
// ]]);
|
||||
$r = Jobs::addJob(['job_name' => 'calculateMembersDemography', 'payload' => [
|
||||
'lead_id' => $insert,
|
||||
]]);
|
||||
}
|
||||
@ -773,7 +776,7 @@ class LeadsController extends BaseController
|
||||
|
||||
$multi_file_data = [];
|
||||
foreach ($files as $index => $value) {
|
||||
$file_name = file_Upload($value, $uploadFilePath);
|
||||
$file_name = file_Upload_for_lead($value, $uploadFilePath);
|
||||
$multi_file_data[] = [
|
||||
'file_name' => $file_name,
|
||||
'docs_name' => $docs_names[$index],
|
||||
@ -809,7 +812,10 @@ class LeadsController extends BaseController
|
||||
if (!empty($lead_form_type) && $lead_form_type == 1 && $key == 0) {
|
||||
//for this push the job to the calculateMembersDemography() function
|
||||
$job_details = new Jobs();
|
||||
$r = Jobs::addJob(['job_name' => 'memberDataListExcelFileFormatValidation', 'payload' => [
|
||||
// $r = Jobs::addJob(['job_name' => 'memberDataListExcelFileFormatValidation', 'payload' => [
|
||||
// 'lead_id' => $lead_id,
|
||||
// ]]);
|
||||
$r = Jobs::addJob(['job_name' => 'calculateMembersDemography', 'payload' => [
|
||||
'lead_id' => $lead_id,
|
||||
]]);
|
||||
log_message('info', "calculateMembersDemography JOB PUSHED");
|
||||
@ -1024,14 +1030,7 @@ class LeadsController extends BaseController
|
||||
// 3. Optimize lead data query with specific field selection
|
||||
$lead_data = $this->leadsModel
|
||||
->select('
|
||||
leads.id,
|
||||
leads.policy_type_id,
|
||||
leads.lead_type,
|
||||
leads.source_policy_id,
|
||||
leads.policy_end_date,
|
||||
leads.lead_form_type,
|
||||
leads.created_by,
|
||||
leads.client_name,
|
||||
leads.*,
|
||||
lead_files.status as demography_file_status,
|
||||
policy_type.question_json,
|
||||
policy_type.policy_type,
|
||||
@ -1090,6 +1089,7 @@ class LeadsController extends BaseController
|
||||
|
||||
// 7. Define mail templates as constants or config
|
||||
$mail_content = $this->getMailTemplate();
|
||||
$placement_mail_content = $this->getMailTemplate('placement');
|
||||
$subject = $this->getSubjectTemplate($lead_data);
|
||||
|
||||
// 8. Pre-calculate sum assured only for GPA
|
||||
@ -1098,7 +1098,7 @@ class LeadsController extends BaseController
|
||||
// 9. Transform mail content once
|
||||
$data['mail_content'] = $this->transformMailContent($lead_data, $mail_content, $data['page_name']);
|
||||
$data['subject'] = $this->transformMailContent($lead_data, $subject, $data['page_name']);
|
||||
$data['placement_mail_content'] = $this->transformMailContent($lead_data, $mail_content, 'Placement');
|
||||
$data['placement_mail_content'] = $this->transformMailContent($lead_data, $placement_mail_content, 'Placement');
|
||||
$data['placement_subject'] = $this->transformMailContent($lead_data, $subject, 'Placement');
|
||||
|
||||
// 10. Combine related queries
|
||||
@ -1151,24 +1151,43 @@ class LeadsController extends BaseController
|
||||
}
|
||||
|
||||
// 13. Extract mail template to separate method for reusability
|
||||
private function getMailTemplate()
|
||||
{
|
||||
return '
|
||||
<p>Dear Sir,</p>
|
||||
<p>Greetings From Nhance India!</p>
|
||||
<p>Please find attached the {{RFQ_OR_QCR}} for <strong>{{POLICY_TYPE}}</strong> policy pertaining to <strong>{{CLIENT_NAME}}</strong>.</p>
|
||||
<p>Kindly request you to share the competitive quotes at the earliest.</p>
|
||||
<p>In case of any query, please feel free to contact us.</p>
|
||||
<p>Thank You!</p><br>
|
||||
<p>Best regards,</p>
|
||||
private function getMailTemplate( $template_type = "" )
|
||||
{
|
||||
if($template_type == 'placement'){
|
||||
return '
|
||||
<p>Dear Sir,</p>
|
||||
<p>Greetings From Nhance India!</p>
|
||||
<p>Please find attached the {{RFQ_OR_QCR}} for <strong>{{POLICY_TYPE}}</strong> policy pertaining to <strong>{{CLIENT_NAME}}</strong>.</p>
|
||||
<p>Kindly request you to issue the policy at the earliest.</p>
|
||||
<p>In case of any query, please feel free to contact us.</p>
|
||||
<p>Thank You!</p><br>
|
||||
<p>Best regards,</p>
|
||||
|
||||
<div style="margin: 0; padding: 0; line-height: 1.2;">
|
||||
<div>{{LOGGED_USER_NAME}}</div>
|
||||
<div>Mobile: {{LOGGED_USER_MOBILE}}</div>
|
||||
</div>
|
||||
|
||||
<div style="margin: 0; padding: 0; line-height: 1.2;">
|
||||
<div>{{LOGGED_USER_NAME}}</div>
|
||||
<div>Mobile: {{LOGGED_USER_MOBILE}}</div>
|
||||
</div>
|
||||
|
||||
<img src="{{LOGO_PATH}}" alt="Nhance Logo" width="100" style="margin-top:10px;">
|
||||
';
|
||||
<img src="{{LOGO_PATH}}" alt="Nhance Logo" width="100" style="margin-top:10px;">
|
||||
';
|
||||
}else{
|
||||
return '
|
||||
<p>Dear Sir,</p>
|
||||
<p>Greetings From Nhance India!</p>
|
||||
<p>Please find attached the {{RFQ_OR_QCR}} for <strong>{{POLICY_TYPE}}</strong> policy pertaining to <strong>{{CLIENT_NAME}}</strong>.</p>
|
||||
<p>Kindly request you to share the competitive quotes at the earliest.</p>
|
||||
<p>In case of any query, please feel free to contact us.</p>
|
||||
<p>Thank You!</p><br>
|
||||
<p>Best regards,</p>
|
||||
|
||||
<div style="margin: 0; padding: 0; line-height: 1.2;">
|
||||
<div>{{LOGGED_USER_NAME}}</div>
|
||||
<div>Mobile: {{LOGGED_USER_MOBILE}}</div>
|
||||
</div>
|
||||
|
||||
<img src="{{LOGO_PATH}}" alt="Nhance Logo" width="100" style="margin-top:10px;">
|
||||
';
|
||||
}
|
||||
}
|
||||
|
||||
// 14. Extract subject template to separate method
|
||||
@ -3680,7 +3699,7 @@ class LeadsController extends BaseController
|
||||
private function prepareClientData($data)
|
||||
{
|
||||
return [
|
||||
'client_type' => $data['client_type'] ?? null,
|
||||
'client_type' => 1,
|
||||
'entity_type_id' => $data['entity_type_id'] ?? null,
|
||||
'client_code' => $data['client_code'] ?? null,
|
||||
'client_name' => $data['client_name'] ?? null,
|
||||
@ -3730,6 +3749,8 @@ class LeadsController extends BaseController
|
||||
'policy_start_date' => $data['policy_start_date'],
|
||||
'policy_end_date' => $data['policy_end_date'],
|
||||
'policy_status' => 1,
|
||||
'policy_entry_from' => 3,
|
||||
'is_from_lead' => $data['id'],
|
||||
];
|
||||
|
||||
$policy_type_id = $data['policy_type_id'];
|
||||
@ -5273,10 +5294,10 @@ class LeadsController extends BaseController
|
||||
'filePath' => $fullPath
|
||||
];
|
||||
} else {
|
||||
log_message('warning', 'File name is empty for ID: ' . $id);
|
||||
log_message('error', 'File name is empty for ID: ' . $id);
|
||||
}
|
||||
} else {
|
||||
log_message('warning', 'File does not exist at path: ' . $fullPath);
|
||||
log_message('error', 'File does not exist at path: ' . $fullPath);
|
||||
}
|
||||
} else {
|
||||
log_message('warning', 'No active lead file found for ID: ' . $id . ' and lead_id: ' . $lead_id);
|
||||
|
||||
@ -1350,6 +1350,16 @@ class MasterController extends AdminController
|
||||
// === INSERT ===
|
||||
if (empty($id)) {
|
||||
|
||||
$cd_acc_count = $this->CDMasterModel->where('is_active', 1)
|
||||
->where('client_id', $data['client_id'])
|
||||
->where('insurer_id', $data['insurer_id'])
|
||||
->where('insurer_branch_id', $data['insurer_branch_id'])
|
||||
->countAllResults();
|
||||
|
||||
if($cd_acc_count > 0){
|
||||
return $this->respond(['status' => false, 'message' => 'A CD account has already been created for this client, insurer, and insurer branch combination.'], 200);
|
||||
}
|
||||
|
||||
$this->myLogger->logme("error", 'Performing INSERT operation.');
|
||||
$insert = $this->CDMasterModel->insert($data);
|
||||
$this->myLogger->logme("error", 'Insert result: ' . json_encode($insert));
|
||||
@ -1574,6 +1584,15 @@ class MasterController extends AdminController
|
||||
|
||||
$data['insurer_branch_id'] = $insurer_branch_id;
|
||||
|
||||
$cd_acc_count = $this->CDMasterModel->where('is_active', 1)
|
||||
->where('client_id', $data['client_id'])
|
||||
->where('insurer_id', $data['insurer_id'])
|
||||
->where('insurer_branch_id', $data['insurer_branch_id'])
|
||||
->countAllResults();
|
||||
|
||||
if($cd_acc_count > 0){
|
||||
return $this->respond(['status' => false, 'message' => 'A CD account has already been created for this client, insurer, and insurer branch combination.'], 200);
|
||||
}
|
||||
|
||||
// array with data for CD Traction table
|
||||
$cd_tranction_data = [
|
||||
@ -1617,6 +1636,24 @@ class MasterController extends AdminController
|
||||
}
|
||||
}
|
||||
|
||||
public function checkDuplicateCdAccount()
|
||||
{
|
||||
$data = $this->request->getGet();
|
||||
|
||||
$cd_acc_count = $this->CDMasterModel
|
||||
->where('is_active', 1)
|
||||
->where('client_id', $data['client_id'])
|
||||
->where('insurer_id', $data['insurer_id'])
|
||||
->where('insurer_branch_id', $data['insurer_branch_id'])
|
||||
->countAllResults();
|
||||
|
||||
if($cd_acc_count > 0){
|
||||
return $this->respond(['status' => false, 'message' => 'A CD account has already been created for this client, insurer, and insurer branch combination.'], 200);
|
||||
}else{
|
||||
return $this->respond(['status' => true], 200);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//Vehicle Master data Function
|
||||
|
||||
|
||||
@ -1271,9 +1271,10 @@ class PolicyTransactionController extends BaseController
|
||||
|
||||
$data['tsi'] = generate_tsi_code($issue_type['issue_type'] ?? 1);
|
||||
|
||||
$client_branch_id = $data['client_branch_id'];
|
||||
if ($data['client_branch_id'] == "") {
|
||||
if (!isset($data['client_branch_id']) || $data['client_branch_id'] == "") {
|
||||
$client_branch_id = $issue_type['client_branch_id'];
|
||||
}else{
|
||||
$client_branch_id = $data['client_branch_id'];
|
||||
}
|
||||
|
||||
$data['is_cd_reduce_from_bds'] = (isset($issue_type['policy_type_id']) && $issue_type['policy_type_id'] > 7 && $data['client_type'] == 1) ? 1 : 0;
|
||||
@ -1431,7 +1432,11 @@ class PolicyTransactionController extends BaseController
|
||||
$pt_id = null;
|
||||
|
||||
if(!empty($data)){
|
||||
$inception_data = $this->policyTransactionModel->where('policy_no', $data['policy_no'])->where('client_id', $data['client_id'])->first();
|
||||
$inception_data = $this->policyTransactionModel
|
||||
->where('policy_no', $data['policy_no'])
|
||||
->where('client_id', $data['client_id'])
|
||||
->where('action_type', 'inception')
|
||||
->first();
|
||||
$pt_id = $inception_data['id'];
|
||||
}
|
||||
|
||||
@ -2404,8 +2409,8 @@ class PolicyTransactionController extends BaseController
|
||||
|
||||
// $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
|
||||
$endorsement_no = preg_replace( '/[\x{200B}\x{200C}\x{200D}\x{FEFF}\x{00A0}\x{200E}\x{200F}\x{202A}-\x{202E}]/u', '', $excel_row[2]); //policy_end_date from excel
|
||||
$endorsement_no = preg_replace('/^\p{Z}+|\p{Z}+$/u', '', $excel_row[2]??''); //policy_end_date from excel
|
||||
$endorsement_no = preg_replace( '/[\x{200B}\x{200C}\x{200D}\x{FEFF}\x{00A0}\x{200E}\x{200F}\x{202A}-\x{202E}]/u', '', $excel_row[2]??''); //policy_end_date from excel
|
||||
|
||||
// Kint::dump($excel_key,$policy_no,$endorsement_no,$policy_start_date,$policy_end_date);//die();
|
||||
foreach ($source_data as $source_key => $source_row) {
|
||||
|
||||
@ -362,18 +362,18 @@ class TestingController extends BaseController
|
||||
|
||||
$pre_clients_list = $this->getNonDuplicatePreClients();
|
||||
|
||||
$log_post_clients_list = $post_clients_list ;
|
||||
$log_post_clients_list = $post_clients_list;
|
||||
|
||||
$log_pre_clients_list = $pre_clients_list ;
|
||||
$log_pre_clients_list = $pre_clients_list;
|
||||
|
||||
log_message('error', 'Post Clients to be processed: ' . count($log_post_clients_list));
|
||||
log_message('error', 'Pre Clients to be processed: ' . count($log_pre_clients_list));
|
||||
|
||||
|
||||
|
||||
$matched_Count = 0 ;
|
||||
$matched_Count = 0;
|
||||
$expected_match_count = min(count($post_clients_list), count($pre_clients_list));
|
||||
|
||||
|
||||
|
||||
if (
|
||||
!empty($pre_clients_list) &&
|
||||
@ -444,31 +444,27 @@ class TestingController extends BaseController
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
log_message('error', 'Expected Match Count : ' . $expected_match_count);
|
||||
log_message('error', 'Total Matched Count: ' . $matched_Count);
|
||||
log_message('error', 'Total UnMatched Count: ' . $expected_match_count - $matched_Count);
|
||||
|
||||
|
||||
log_message('error','unmatched_reocrds');
|
||||
|
||||
|
||||
log_message('error', 'unmatched_reocrds');
|
||||
|
||||
$log_post_clients_list = array_values($log_post_clients_list);
|
||||
$log_pre_clients_list = array_values($log_pre_clients_list);
|
||||
|
||||
if( (count($log_pre_clients_list) < count($log_post_clients_list))){
|
||||
log_message('error',"unmatched records count from pre- ". count($log_pre_clients_list));
|
||||
log_message('error',print_r($log_pre_clients_list,true));
|
||||
if ((count($log_pre_clients_list) < count($log_post_clients_list))) {
|
||||
log_message('error', "unmatched records count from pre- " . count($log_pre_clients_list));
|
||||
log_message('error', print_r($log_pre_clients_list, true));
|
||||
} else {
|
||||
log_message('error',"unmatched records count from post - ".count($log_post_clients_list));
|
||||
log_message('error',print_r($log_post_clients_list,true));
|
||||
log_message('error', "unmatched records count from post - " . count($log_post_clients_list));
|
||||
log_message('error', print_r($log_post_clients_list, true));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return $this->response->setJSON(['status' => 'success', 'message' => 'Client and Branch mapping completed.'])->setStatusCode(200);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -535,7 +531,7 @@ class TestingController extends BaseController
|
||||
return $results;
|
||||
}
|
||||
public function membervalidation($lead_id = 329)
|
||||
{
|
||||
{
|
||||
$lead_controll = new LeadsController();
|
||||
// $lead_controll->getMemberDataExcelFileErrors();
|
||||
$res = $lead_controll->memberDataListExcelFileFormatValidation(['lead_id' => $lead_id]);
|
||||
@ -543,18 +539,81 @@ class TestingController extends BaseController
|
||||
}
|
||||
|
||||
private $firstNames = [
|
||||
'Rajesh', 'Priya', 'Amit', 'Sneha', 'Vikram', 'Anjali', 'Rahul', 'Deepika',
|
||||
'Sanjay', 'Kavita', 'Arun', 'Pooja', 'Manoj', 'Nisha', 'Suresh', 'Meera',
|
||||
'Karthik', 'Divya', 'Ravi', 'Lakshmi', 'Anand', 'Swathi', 'Vijay', 'Rekha',
|
||||
'Ashok', 'Sangeetha', 'Prakash', 'Uma', 'Ramesh', 'Vani', 'Kumar', 'Radha',
|
||||
'Dinesh', 'Shanti', 'Ganesh', 'Parvati', 'Mohan', 'Sita', 'Arjun', 'Geetha'
|
||||
'Rajesh',
|
||||
'Priya',
|
||||
'Amit',
|
||||
'Sneha',
|
||||
'Vikram',
|
||||
'Anjali',
|
||||
'Rahul',
|
||||
'Deepika',
|
||||
'Sanjay',
|
||||
'Kavita',
|
||||
'Arun',
|
||||
'Pooja',
|
||||
'Manoj',
|
||||
'Nisha',
|
||||
'Suresh',
|
||||
'Meera',
|
||||
'Karthik',
|
||||
'Divya',
|
||||
'Ravi',
|
||||
'Lakshmi',
|
||||
'Anand',
|
||||
'Swathi',
|
||||
'Vijay',
|
||||
'Rekha',
|
||||
'Ashok',
|
||||
'Sangeetha',
|
||||
'Prakash',
|
||||
'Uma',
|
||||
'Ramesh',
|
||||
'Vani',
|
||||
'Kumar',
|
||||
'Radha',
|
||||
'Dinesh',
|
||||
'Shanti',
|
||||
'Ganesh',
|
||||
'Parvati',
|
||||
'Mohan',
|
||||
'Sita',
|
||||
'Arjun',
|
||||
'Geetha'
|
||||
];
|
||||
|
||||
private $lastNames = [
|
||||
'Kumar', 'Sharma', 'Singh', 'Patel', 'Reddy', 'Nair', 'Iyer', 'Krishnan',
|
||||
'Rao', 'Gupta', 'Verma', 'Agarwal', 'Joshi', 'Mehta', 'Desai', 'Pillai',
|
||||
'Menon', 'Bhat', 'Naidu', 'Varma', 'Malhotra', 'Kapoor', 'Chopra', 'Saxena',
|
||||
'Pandey', 'Mishra', 'Tiwari', 'Dubey', 'Sinha', 'Jain', 'Shah', 'Thakur'
|
||||
'Kumar',
|
||||
'Sharma',
|
||||
'Singh',
|
||||
'Patel',
|
||||
'Reddy',
|
||||
'Nair',
|
||||
'Iyer',
|
||||
'Krishnan',
|
||||
'Rao',
|
||||
'Gupta',
|
||||
'Verma',
|
||||
'Agarwal',
|
||||
'Joshi',
|
||||
'Mehta',
|
||||
'Desai',
|
||||
'Pillai',
|
||||
'Menon',
|
||||
'Bhat',
|
||||
'Naidu',
|
||||
'Varma',
|
||||
'Malhotra',
|
||||
'Kapoor',
|
||||
'Chopra',
|
||||
'Saxena',
|
||||
'Pandey',
|
||||
'Mishra',
|
||||
'Tiwari',
|
||||
'Dubey',
|
||||
'Sinha',
|
||||
'Jain',
|
||||
'Shah',
|
||||
'Thakur'
|
||||
];
|
||||
|
||||
private $relationships = ['Self', 'Spouse', 'Son', 'Daughter', 'Father', 'Mother'];
|
||||
@ -611,9 +670,9 @@ class TestingController extends BaseController
|
||||
|
||||
for ($i = 1; $i <= $totalRecords; $i++) {
|
||||
$row = $i + 1; // Start from row 2 (row 1 is header)
|
||||
|
||||
|
||||
$record = $this->generateSampleRecord($i);
|
||||
|
||||
|
||||
$sheet->setCellValue('A' . $row, $record['sl_no']);
|
||||
$sheet->setCellValue('B' . $row, $record['emp_code']);
|
||||
$sheet->setCellValue('C' . $row, $record['name']);
|
||||
@ -664,33 +723,33 @@ class TestingController extends BaseController
|
||||
$firstName = $this->firstNames[array_rand($this->firstNames)];
|
||||
$lastName = $this->lastNames[array_rand($this->lastNames)];
|
||||
$name = $firstName . ' ' . $lastName;
|
||||
|
||||
|
||||
$relationship = $this->relationships[array_rand($this->relationships)];
|
||||
$gender = $this->genders[array_rand($this->genders)];
|
||||
|
||||
|
||||
// Generate random age between 18 and 65
|
||||
$age = rand(18, 65);
|
||||
|
||||
|
||||
// Calculate DOB based on age
|
||||
$year = date('Y') - $age;
|
||||
$month = str_pad(rand(1, 12), 2, '0', STR_PAD_LEFT);
|
||||
$day = str_pad(rand(1, 28), 2, '0', STR_PAD_LEFT);
|
||||
$dob = "{$day}-{$month}-{$year}";
|
||||
|
||||
|
||||
// Generate employee code
|
||||
$empCode = 'EMP' . str_pad($index, 6, '0', STR_PAD_LEFT);
|
||||
|
||||
|
||||
// Generate email
|
||||
$email = strtolower($firstName . '.' . $lastName . $index) . '@' . $this->domains[array_rand($this->domains)];
|
||||
|
||||
|
||||
// Generate mobile number (Indian format)
|
||||
$mobile = '+91' . rand(7000000000, 9999999999);
|
||||
|
||||
|
||||
// Generate insurance amounts
|
||||
$siOptions = [100000, 200000, 300000, 500000, 1000000];
|
||||
$si = $siOptions[array_rand($siOptions)];
|
||||
$si_enhancement = rand(0, 1) ? rand(50000, 200000) : 0;
|
||||
|
||||
|
||||
$proposed_si_1 = $si + rand(100000, 500000);
|
||||
$proposed_si_2 = $proposed_si_1 + rand(100000, 500000);
|
||||
$proposed_si_3 = $proposed_si_2 + rand(100000, 500000);
|
||||
@ -716,64 +775,67 @@ class TestingController extends BaseController
|
||||
}
|
||||
|
||||
|
||||
public function logo_renaming(){
|
||||
|
||||
$directory = ROOTPATH . 'public/uploads/logo/';
|
||||
public function logo_renaming()
|
||||
{
|
||||
|
||||
if (!is_dir($directory)) {
|
||||
die("Directory not found: $directory");
|
||||
$directory = ROOTPATH . 'public/uploads/logo/';
|
||||
|
||||
if (!is_dir($directory)) {
|
||||
die("Directory not found: $directory");
|
||||
}
|
||||
|
||||
$files = scandir($directory);
|
||||
|
||||
$client_logo_files = $this->get_client_logo_files();
|
||||
|
||||
$rename_files = "";
|
||||
$failed_rename_files = "";
|
||||
|
||||
foreach ($files as $file) {
|
||||
// Skip system entries
|
||||
if ($file === '.' || $file === '..') {
|
||||
continue;
|
||||
}
|
||||
|
||||
$files = scandir($directory);
|
||||
|
||||
$client_logo_files = $this->get_client_logo_files();
|
||||
$oldPath = $directory . $file;
|
||||
|
||||
$rename_files = "";
|
||||
$failed_rename_files = "";
|
||||
if (is_file($oldPath) && in_array(trim($file), $client_logo_files)) {
|
||||
|
||||
foreach ($files as $file) {
|
||||
// Skip system entries
|
||||
if ($file === '.' || $file === '..' ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Remove all spaces from filename
|
||||
$newFileName = preg_replace('/\s+|\x{00A0}|\x{200B}|\x{200C}|\x{200D}|\x{FEFF}/u', '', $file);
|
||||
|
||||
$oldPath = $directory . $file;
|
||||
$newPath = $directory . $newFileName;
|
||||
|
||||
if (is_file($oldPath) && in_array(trim($file) , $client_logo_files)) {
|
||||
|
||||
// Remove all spaces from filename
|
||||
$newFileName = preg_replace('/\s+|\x{00A0}|\x{200B}|\x{200C}|\x{200D}|\x{FEFF}/u', '', $file);
|
||||
|
||||
$newPath = $directory . $newFileName;
|
||||
|
||||
// Only rename if the name changed
|
||||
if ($oldPath !== $newPath) {
|
||||
if (rename($oldPath, $newPath)) {
|
||||
$rename_files .= "\n Renamed: $file → $newFileName \n";
|
||||
} else {
|
||||
$failed_rename_files .= "\n Failed file: $file \n";
|
||||
}
|
||||
// Only rename if the name changed
|
||||
if ($oldPath !== $newPath) {
|
||||
if (rename($oldPath, $newPath)) {
|
||||
$rename_files .= "\n Renamed: $file → $newFileName \n";
|
||||
} else {
|
||||
$failed_rename_files .= "\n Failed file: $file \n";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$dbUpdated = $this->update_client_logo_files();
|
||||
$dbUpdated = $this->update_client_logo_files();
|
||||
|
||||
log_message('error', 'Renamed Files: ' . $rename_files);
|
||||
log_message('error', 'Failed Renames: ' . $failed_rename_files);
|
||||
log_message('error', 'Database Update Status: ' . ($dbUpdated ? 'Success' : 'No changes made'));
|
||||
log_message('error', 'Renamed Files: ' . $rename_files);
|
||||
log_message('error', 'Failed Renames: ' . $failed_rename_files);
|
||||
log_message('error', 'Database Update Status: ' . ($dbUpdated ? 'Success' : 'No changes made'));
|
||||
|
||||
return $this->response->setJSON(['status' => 'success',
|
||||
return $this->response->setJSON([
|
||||
'status' => 'success',
|
||||
'message' => 'Logo renaming completed. kindly check backend logs for details',
|
||||
'data' => [
|
||||
'renamed_files' => $rename_files,
|
||||
'failed_renames' => $failed_rename_files
|
||||
]
|
||||
])->setStatusCode(200);
|
||||
])->setStatusCode(200);
|
||||
}
|
||||
|
||||
public function get_client_logo_files(){
|
||||
public function get_client_logo_files()
|
||||
{
|
||||
|
||||
$db = \Config\Database::connect();
|
||||
|
||||
@ -783,14 +845,15 @@ class TestingController extends BaseController
|
||||
|
||||
$results = $query->getResultArray() ?? [];
|
||||
|
||||
$files = array_map(function($item) {
|
||||
$files = array_map(function ($item) {
|
||||
return trim($item['client_logo']);
|
||||
}, $results);
|
||||
|
||||
return $files;
|
||||
}
|
||||
|
||||
public function update_client_logo_files(){
|
||||
public function update_client_logo_files()
|
||||
{
|
||||
|
||||
$db = \Config\Database::connect();
|
||||
|
||||
@ -803,9 +866,63 @@ class TestingController extends BaseController
|
||||
$query = $db->query($sql);
|
||||
|
||||
return $db->affectedRows() > 0;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
public function createDefaultMailTempalteInDB()
|
||||
{
|
||||
$postDB = \Config\Database::connect(); // target DB
|
||||
$preDB = \Config\Database::connect('preDB'); // source DB
|
||||
|
||||
// Templates to copy
|
||||
$templateNames = [
|
||||
'member_welcome_mail',
|
||||
'member_reminder_mail',
|
||||
'member_review_and_summary_mail'
|
||||
];
|
||||
|
||||
|
||||
|
||||
|
||||
foreach ($templateNames as $template) {
|
||||
|
||||
$exists = $postDB->table('notifications')
|
||||
->where('client_id', NULL)
|
||||
->where('template_name', $template)
|
||||
->countAllResults();
|
||||
|
||||
if ($exists > 0) {
|
||||
continue; // Skip if already inserted
|
||||
}
|
||||
|
||||
// Fetch template from preDB
|
||||
$templateData = $preDB->table('notifications')
|
||||
->where('client_id', NULL)
|
||||
->where('template_name', $template)
|
||||
->get()
|
||||
->getRowArray();
|
||||
|
||||
if (!empty($templateData)) {
|
||||
|
||||
// Remove ID to avoid duplicate primary key issues
|
||||
unset($templateData['id']);
|
||||
|
||||
// Set created_by and timestamps if needed
|
||||
$templateData['client_id'] = NULL;
|
||||
$templateData['created_by'] = 1;
|
||||
$templateData['cretaed_at'] = date('Y-m-d H:i:s');
|
||||
$templateData['updated_by'] = NULL;
|
||||
$templateData['updated_at'] = NULL;
|
||||
|
||||
// Insert into postDB
|
||||
$postDB->table('notifications')->insert($templateData);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return $this->response->setJSON(['message'=>"Created Default Mail Tempalte In DB "])->setStatusCode(200);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -62,7 +62,7 @@ class UserController extends AdminController
|
||||
// echo '<pre>';
|
||||
// print_r($data); die;
|
||||
$data['roleData'] = $this->roleModel->select('id, role')->findAll();
|
||||
$data['teamData'] = $this->teamModel->select('id, name')->findAll();
|
||||
$data['teamData'] = $this->teamModel->select('id, name')->where('is_active',1)->findAll();
|
||||
$this->loadLayout('UserList', $data);
|
||||
}
|
||||
|
||||
@ -156,9 +156,11 @@ class UserController extends AdminController
|
||||
public function edit()
|
||||
{
|
||||
|
||||
// echo ":/ in 159";
|
||||
if (!$this->request->getPost()) {
|
||||
return redirect()->to(base_url('/user/list'));
|
||||
} else {
|
||||
// echo ":/ in 163";
|
||||
$id = $this->request->getPost('PrimaryKey');
|
||||
$teams = $this->request->getPost('team');
|
||||
$userData = $this->request->getPost();
|
||||
@ -166,6 +168,7 @@ class UserController extends AdminController
|
||||
unset($userData['PrimaryKey']);
|
||||
|
||||
$existingData = $this->userModel->where('id',$id)->first();;
|
||||
// dd($existingData);die;
|
||||
|
||||
// Update data in the 'users' table based on the $id
|
||||
$userData['updated_by'] = get_session_userid();
|
||||
|
||||
@ -109,7 +109,8 @@ if (!function_exists('check_relationship')) {
|
||||
|
||||
$family_floaters = isset($policy_terms['family_floaters']);
|
||||
if ($family_floaters) {
|
||||
if (isset($relationship[$col]) && $relationship[$col]['gender'] != $row[4]) {
|
||||
$relation_gender = normalizeGender($row[4]);
|
||||
if (isset($relationship[$col]) && $relationship[$col]['gender'] != $relation_gender) {
|
||||
$error = "Gender relationship conflict: Expected " . $relationship[$col]['gender'] . ", received $row[4]";
|
||||
return array('status' => false, 'error' => $error);
|
||||
}
|
||||
@ -369,13 +370,24 @@ if (!function_exists('check_dob_diff')) {
|
||||
}
|
||||
|
||||
if (!function_exists('data_group_by_family')) {
|
||||
function data_group_by_family($emp_data, $data_source = 'excel', $action = '')
|
||||
function data_group_by_family($emp_data, $data_source = 'excel', $action = '', $current_column_action = null)
|
||||
{
|
||||
$result = [];
|
||||
// Kint::dump($emp_data);
|
||||
foreach ($emp_data as $rkey => $row) {
|
||||
|
||||
|
||||
|
||||
if ($data_source == 'excel') {
|
||||
if (!check_row_is_empty_or_null($row)) {
|
||||
|
||||
// for this condition to avoid 5,00,000 to 500000
|
||||
if($current_column_action == 'SI'){
|
||||
$row[3] = removeNumberFormatting($row[3]);
|
||||
}else if(in_array($current_column_action, ['I','DA', 'MI', 'A'])){
|
||||
$row[6] = removeNumberFormatting($row[6]);
|
||||
}
|
||||
|
||||
if ($action == 'enrollment') //if action is enrollment transform current row into inception row, becoz we treat enrollment as inception
|
||||
{
|
||||
$row = transform_enrollment_row_to_inception_row($row);
|
||||
@ -637,12 +649,19 @@ if (!function_exists('check_dependent_conflict')) {
|
||||
if (!function_exists('generate_relationship_code')) {
|
||||
function generate_relationship_code($arr)
|
||||
{
|
||||
$gender = ['M' => 1, 'F' => 2];
|
||||
$gender = [
|
||||
'M' => 1,
|
||||
'Male' => 1,
|
||||
'male' => 1,
|
||||
'F' => 2,
|
||||
'Female' => 2,
|
||||
'female' => 2,
|
||||
];
|
||||
$relationship = ['self' => 1, 'spouse' => 2, 'son' => 3, 'daughter' => 4, 'father' => 5, 'mother' => 6, 'father-in-law' => 7, 'mother-in-law' => 8];
|
||||
$slug = \Config\Services::slug();
|
||||
$relationship_code = $slug->slugify($arr['relationship']);
|
||||
$emp_type_code = ($relationship_code == 'self' ? 'EMP_TYP_01' : 'EMP_TYP_03');
|
||||
$relationship_code = $gender[trim($arr['gender'])] . $relationship[trim($relationship_code)];
|
||||
$relationship_code = $gender[trim($arr['gender'])] ?? "" . $relationship[trim($relationship_code)] ?? "";
|
||||
return ['relationship_code' => $relationship_code, 'emp_type_code' => $emp_type_code];
|
||||
}
|
||||
}
|
||||
@ -2041,6 +2060,22 @@ if (!function_exists('formatIndianCurrency')) {
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('normalizeGender')) {
|
||||
function normalizeGender($gender)
|
||||
{
|
||||
$gender = strtoupper(trim($gender));
|
||||
|
||||
if (in_array($gender, ['M', 'MALE'])) {
|
||||
return 'M';
|
||||
} elseif (in_array($gender, ['F', 'FEMALE'])) {
|
||||
return 'F';
|
||||
}
|
||||
|
||||
// Optional: return null or original if not recognized
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
// ------------- FUNCTION FOR LEAD MEMBER DATA LIST VALIDATIONS --------------------------------------
|
||||
|
||||
if (!function_exists('check_columns_name_exist')) {
|
||||
@ -2291,8 +2326,8 @@ if (!function_exists('validateFamily')) {
|
||||
// Validation 3: Validate spouse gender if spouse exists
|
||||
if ($spouseMember !== null) {
|
||||
|
||||
$selfGender = strtoupper(trim($selfMember[4])); // Gender field
|
||||
$spouseGender = strtoupper(trim($spouseMember[4]));
|
||||
$selfGender = normalizeGender(trim($selfMember[4])); // Gender field
|
||||
$spouseGender = normalizeGender(trim($spouseMember[4]));
|
||||
$selfName = $selfMember[2]; // Name field
|
||||
$spouseName = $spouseMember[2];
|
||||
|
||||
|
||||
@ -57,6 +57,13 @@ class sendMailNotification
|
||||
|
||||
$mail_content = str_replace(["[[app_link]]", "{{app_link}}"], "<a href='$app_link'>Review Details</a>", $mail_content);
|
||||
if ($dataToInsert['relationship'] == 'Self' && $mail != null || $mail != '') {
|
||||
|
||||
$mail_content = preg_replace('/<p[^>]*>( |\s)*<\/p>/i', '', $mail_content);
|
||||
|
||||
$data['params'] = $params;$data['client_logo'] = $client_logo;
|
||||
$data['mail_content'] = $mail_content;
|
||||
$mail_content = view('mail_template', $data);
|
||||
|
||||
$wholeData = ['mail' => $mail, 'subject' => $subject,'message'=> $mail_content,'bcc'=> $client_data['common_mails'], 'reply_to' => $client_data['reply_to'], 'attachments' => $attachments, 'common' => $common];
|
||||
}
|
||||
|
||||
@ -89,6 +96,12 @@ class sendMailNotification
|
||||
$mail_content = str_replace(["[[member_mobile]]", "{{member_mobile}}"], $employee_mobile_no, $mail_content);
|
||||
$mail = $emp_data['email_corporate'];
|
||||
|
||||
$mail_content = preg_replace('/<p[^>]*>( |\s)*<\/p>/i', '', $mail_content);
|
||||
|
||||
$data['params'] = $params;$data['client_logo'] = $client_logo;
|
||||
$data['mail_content'] = $mail_content;
|
||||
$mail_content = view('mail_template', $data);
|
||||
|
||||
$wholeData = ['mail' => $mail, 'subject' => $subject,'message'=> $mail_content, 'bcc'=> $client_data['common_mails'], 'reply_to' => $client_data['reply_to'], 'common' => $common];
|
||||
|
||||
return $wholeData;
|
||||
@ -139,6 +152,13 @@ class sendMailNotification
|
||||
$mail_content = str_replace(["[[ecard_download_link]]", "{{ecard_download_link}}"], "<a href='$link/1'>Download Insurance Card</a>", $mail_content);
|
||||
$mail_content = str_replace(["[[client_name]]", "{{client_name}}"], $client_data['client_name'], $mail_content);
|
||||
|
||||
$mail_content = preg_replace('/<p[^>]*>( |\s)*<\/p>/i', '', $mail_content);
|
||||
|
||||
$data['params'] = $params;$data['client_logo'] = $client_logo;
|
||||
$data['mail_content'] = $mail_content;
|
||||
$mail_content = view('mail_template', $data);
|
||||
|
||||
|
||||
$wholeData = ['mail' => $mail, 'subject' => $subject,'message'=> $mail_content,'bcc'=> $client_data['common_mails'], 'reply_to' => $client_data['reply_to'], 'common' => $common];
|
||||
|
||||
return $wholeData;
|
||||
@ -523,6 +543,13 @@ class sendMailNotification
|
||||
$mail_content = str_replace(["[[member_mobile]]", "{{member_mobile}}"], $employee_mobile_no, $mail_content);
|
||||
$mail_content = str_replace(["[[member_summary]]", "{{member_summary}}"], $table_content , $mail_content);
|
||||
|
||||
$mail_content = preg_replace('/<p[^>]*>( |\s)*<\/p>/i', '', $mail_content);
|
||||
|
||||
$data['params'] = $params;$data['client_logo'] = $client_logo;
|
||||
$data['mail_content'] = $mail_content;
|
||||
$mail_content = view('mail_template', $data);
|
||||
|
||||
|
||||
// print_r($mail_content); die;
|
||||
|
||||
// $mail = "aadhavanvalli@gmail.com";
|
||||
@ -825,6 +852,13 @@ class sendMailNotification
|
||||
$full_name = $value['first_name'] .' ' .$value['last_name'];
|
||||
$mail_content = str_replace(["[[member_name]]", "{{member_name}}"], $full_name , $mail_content);
|
||||
|
||||
$mail_content = preg_replace('/<p[^>]*>( |\s)*<\/p>/i', '', $mail_content);
|
||||
|
||||
$data['params'] = $params;$data['client_logo'] = $client_logo;
|
||||
$data['mail_content'] = $mail_content;
|
||||
$mail_content = view('mail_template', $data);
|
||||
|
||||
|
||||
$wholeData[] = ['mail' => $value['email'], 'subject' => $subject,'message'=> $mail_content, 'reply_to' => $client_data['reply_to'], 'common' => $common];
|
||||
// $wholeData[] = ['mail' => $value['email'], 'subject' => $subject,'message'=> $mail_content, 'bcc'=> $client_data['common_mails'}};
|
||||
}
|
||||
@ -1118,6 +1152,11 @@ class sendMailNotification
|
||||
|
||||
$mail_content = str_replace(["[[member_summary]]", "{{member_summary}}"], $table_content , $mail_content);
|
||||
|
||||
$mail_content = preg_replace('/<p[^>]*>( |\s)*<\/p>/i', '', $mail_content);
|
||||
|
||||
$data['params'] = $params;$data['client_logo'] = $client_logo;
|
||||
$data['mail_content'] = $mail_content;
|
||||
$mail_content = view('mail_template', $data);
|
||||
|
||||
$hr_mails = $client_data['hr_mails'];
|
||||
$mail_array = explode(',', $hr_mails);
|
||||
@ -1182,7 +1221,14 @@ class sendMailNotification
|
||||
|
||||
$mail_content = str_replace(["[[app_link]]", "{{app_link}}"], "<a href='$app_link'>Review Details</a>", $mail_content);
|
||||
|
||||
if ($mail != null || $mail != '') {
|
||||
if ( isset($mail) && !empty($mail) ) {
|
||||
|
||||
$mail_content = preg_replace('/<p[^>]*>( |\s)*<\/p>/i', '', $mail_content);
|
||||
|
||||
$data['params'] = $params;$data['client_logo'] = $client_logo;
|
||||
$data['mail_content'] = $mail_content;
|
||||
$mail_content = view('mail_template', $data);
|
||||
|
||||
$wholeData = ['mail' => $mail, 'subject' => $subject,'message'=> $mail_content,'bcc'=> $client_data['common_mails'], 'reply_to' => $client_data['reply_to'], 'attachments' => $attachments];
|
||||
}
|
||||
|
||||
@ -1215,6 +1261,13 @@ class sendMailNotification
|
||||
if ((isset($notification_data) && $notification_data['enabled'] == 1)) {
|
||||
|
||||
if (isset($mail) && !empty($mail)) {
|
||||
|
||||
$mail_content = preg_replace('/<p[^>]*>( |\s)*<\/p>/i', '', $mail_content);
|
||||
|
||||
$data['params'] = $params;$data['client_logo'] = $client_logo;
|
||||
$data['mail_content'] = $mail_content;
|
||||
$mail_content = view('mail_template', $data);
|
||||
|
||||
$wholeData = ['mail' => $mail, 'subject' => $subject,'message'=> $mail_content, 'bcc'=> $client_data['common_mails'], 'reply_to' => $client_data['reply_to']];
|
||||
}
|
||||
|
||||
@ -1268,6 +1321,12 @@ class sendMailNotification
|
||||
$mail_content = str_replace(["[[ecard_download_link]]", "{{ecard_download_link}}"], "<a href='$link/1'>Download Insurance Card</a>", $mail_content);
|
||||
$mail_content = str_replace(["[[client_name]]", "{{client_name}}"], $client_data['client_name'], $mail_content);
|
||||
|
||||
$mail_content = preg_replace('/<p[^>]*>( |\s)*<\/p>/i', '', $mail_content);
|
||||
|
||||
$data['params'] = $params;$data['client_logo'] = $client_logo;
|
||||
$data['mail_content'] = $mail_content;
|
||||
$mail_content = view('mail_template', $data);
|
||||
|
||||
$wholeData = ['mail' => $mail, 'subject' => $subject,'message'=> $mail_content,'bcc'=> $client_data['common_mails'],'attachments' => $attachments, 'reply_to' => $client_data['reply_to']];
|
||||
|
||||
return $wholeData;
|
||||
@ -1419,6 +1478,11 @@ class sendMailNotification
|
||||
$mail_content = str_replace(["[[member_mobile]]", "{{member_mobile}}"], $mobile, $mail_content);
|
||||
$mail_content = str_replace(["[[member_summary]]", "{{member_summary}}"], $table_content , $mail_content);
|
||||
|
||||
$mail_content = preg_replace('/<p[^>]*>( |\s)*<\/p>/i', '', $mail_content);
|
||||
|
||||
$data['params'] = $params;$data['client_logo'] = $client_logo;
|
||||
$data['mail_content'] = $mail_content;
|
||||
$mail_content = view('mail_template', $data);
|
||||
|
||||
$wholeData = ['mail' => $mail, 'subject' => $subject,'message'=> $mail_content, 'bcc'=> $client_data['common_mails'], 'reply_to' => $client_data['reply_to']];
|
||||
|
||||
@ -1568,6 +1632,13 @@ class sendMailNotification
|
||||
$mail_content = str_replace(["[[member_name]]", "{{member_name}}"], $name . ' (' . $emp_code . ')' , $mail_content);
|
||||
$mail_content = str_replace(["[[member_summary]]", "{{member_summary}}"], $table_content , $mail_content);
|
||||
|
||||
|
||||
$mail_content = preg_replace('/<p[^>]*>( |\s)*<\/p>/i', '', $mail_content);
|
||||
|
||||
$data['params'] = $params;$data['client_logo'] = $client_logo;
|
||||
$data['mail_content'] = $mail_content;
|
||||
$mail_content = view('mail_template', $data);
|
||||
|
||||
$wholeData = ['mail' => $mail, 'subject' => $subject,'message'=> $mail_content, 'reply_to' => $client_data['reply_to']];
|
||||
|
||||
return $wholeData;
|
||||
@ -1717,6 +1788,11 @@ class sendMailNotification
|
||||
$mail_content = str_replace(["[[member_name]]", "{{member_name}}"], $name . ' (' . $emp_code . ')' , $mail_content);
|
||||
$mail_content = str_replace(["[[member_summary]]", "{{member_summary}}"], $table_content , $mail_content);
|
||||
|
||||
$mail_content = preg_replace('/<p[^>]*>( |\s)*<\/p>/i', '', $mail_content);
|
||||
|
||||
$data['params'] = $params;$data['client_logo'] = $client_logo;
|
||||
$data['mail_content'] = $mail_content;
|
||||
$mail_content = view('mail_template', $data);
|
||||
|
||||
$wholeData = ['mail' => $mail, 'subject' => $subject,'message'=> $mail_content, 'reply_to' => $client_data['reply_to']];
|
||||
|
||||
|
||||
@ -65,6 +65,19 @@ if (!function_exists('file_Upload')) {
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('file_Upload_for_lead')) {
|
||||
function file_Upload_for_lead($fileToUpload, $filepath)
|
||||
{
|
||||
if ($fileToUpload !== null && $fileToUpload->isValid() && !$fileToUpload->hasMoved()) {
|
||||
$fileToUpload->move($filepath);
|
||||
$fileName = $fileToUpload->getName();
|
||||
return $fileName;
|
||||
} else {
|
||||
return "";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// if (!function_exists('multi_file_Upload')) {
|
||||
// function multi_file_Upload($fileToUpload, $filepath)
|
||||
// {
|
||||
@ -859,3 +872,17 @@ if (!function_exists('expected_amount_calc')) {
|
||||
return round($expectedAmount, 2); // Optional: round to 2 decimal places
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('getFileIfExists')) {
|
||||
function getFileIfExists($path)
|
||||
{
|
||||
return file_exists(FCPATH . $path) ? base_url($path) : '';
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('removeNumberFormatting')) {
|
||||
function removeNumberFormatting($number)
|
||||
{
|
||||
return (float) str_replace(',', '', trim($number));
|
||||
}
|
||||
}
|
||||
|
||||
@ -56,6 +56,7 @@ class ClientPolicyModel extends Model
|
||||
"is_lgbtq",
|
||||
"placement_json",
|
||||
"policy_entry_from",
|
||||
"is_from_lead",
|
||||
];
|
||||
|
||||
// Callbacks
|
||||
|
||||
@ -611,6 +611,36 @@ class EmployeePolicyModel extends Model
|
||||
$subquery_endorsement_condition = "{$insurer_or_tpa}" === 'tpa' ? "WHERE (endorsement_id IS NOT NULL OR endorsement_id != '')" : "WHERE (endorsement_id IS NULL OR endorsement_id = '')";
|
||||
|
||||
|
||||
/*
|
||||
ROUND(sidata.new_si_premium - sidata.old_si_premium, 2) AS difference_premium,
|
||||
ROUND(
|
||||
(sidata.new_si_premium - sidata.old_si_premium) *
|
||||
(DATEDIFF(employee_polices.policy_end_date, sidata.date_of_coverage) + 1) / 365,
|
||||
2
|
||||
) AS pro_rata_premium,
|
||||
ROUND(
|
||||
(
|
||||
(sidata.new_si_premium - sidata.old_si_premium) *
|
||||
(DATEDIFF(employee_polices.policy_end_date, sidata.date_of_coverage) + 1) / 365
|
||||
) * 0.18,
|
||||
2
|
||||
) AS gst,
|
||||
ROUND(
|
||||
(
|
||||
(sidata.new_si_premium - sidata.old_si_premium) *
|
||||
(DATEDIFF(employee_polices.policy_end_date, sidata.date_of_coverage) + 1) / 365
|
||||
) +
|
||||
ROUND(
|
||||
(
|
||||
(sidata.new_si_premium - sidata.old_si_premium) *
|
||||
(DATEDIFF(employee_polices.policy_end_date, sidata.date_of_coverage) + 1) / 365
|
||||
) * 0.18,
|
||||
2
|
||||
),
|
||||
2
|
||||
) AS total
|
||||
*/
|
||||
|
||||
$query = $this->db->query("
|
||||
SELECT
|
||||
a.id AS endorsement_primarykey,
|
||||
@ -643,33 +673,40 @@ class EmployeePolicyModel extends Model
|
||||
sidata.old_si_premium,
|
||||
sidata.date_of_coverage,
|
||||
DATEDIFF(employee_polices.policy_end_date, sidata.date_of_coverage) + 1 AS no_of_days,
|
||||
ROUND(sidata.new_si_premium - sidata.old_si_premium, 2) AS difference_premium,
|
||||
|
||||
ROUND(ABS(sidata.new_si_premium - sidata.old_si_premium), 2) AS difference_premium,
|
||||
ROUND(
|
||||
(sidata.new_si_premium - sidata.old_si_premium) *
|
||||
(DATEDIFF(employee_polices.policy_end_date, sidata.date_of_coverage) + 1) / 365,
|
||||
ABS(
|
||||
(sidata.new_si_premium - sidata.old_si_premium) *
|
||||
(DATEDIFF(employee_polices.policy_end_date, sidata.date_of_coverage) + 1) / 365
|
||||
),
|
||||
2
|
||||
) AS pro_rata_premium,
|
||||
ROUND(
|
||||
(
|
||||
(sidata.new_si_premium - sidata.old_si_premium) *
|
||||
(DATEDIFF(employee_polices.policy_end_date, sidata.date_of_coverage) + 1) / 365
|
||||
) * 0.18,
|
||||
ABS(
|
||||
(
|
||||
(sidata.new_si_premium - sidata.old_si_premium) *
|
||||
(DATEDIFF(employee_polices.policy_end_date, sidata.date_of_coverage) + 1) / 365
|
||||
) * 0.18
|
||||
),
|
||||
2
|
||||
) AS gst,
|
||||
ROUND(
|
||||
(
|
||||
(sidata.new_si_premium - sidata.old_si_premium) *
|
||||
(DATEDIFF(employee_polices.policy_end_date, sidata.date_of_coverage) + 1) / 365
|
||||
) +
|
||||
ROUND(
|
||||
(
|
||||
(sidata.new_si_premium - sidata.old_si_premium) *
|
||||
(DATEDIFF(employee_polices.policy_end_date, sidata.date_of_coverage) + 1) / 365
|
||||
) * 0.18,
|
||||
2
|
||||
ABS(
|
||||
(
|
||||
(sidata.new_si_premium - sidata.old_si_premium) *
|
||||
(DATEDIFF(employee_polices.policy_end_date, sidata.date_of_coverage) + 1) / 365
|
||||
) +
|
||||
(
|
||||
(
|
||||
(sidata.new_si_premium - sidata.old_si_premium) *
|
||||
(DATEDIFF(employee_polices.policy_end_date, sidata.date_of_coverage) + 1) / 365
|
||||
) * 0.18
|
||||
)
|
||||
),
|
||||
2
|
||||
) AS total
|
||||
|
||||
FROM
|
||||
emp_endorsement a
|
||||
LEFT JOIN employees ON employees.emp_code = a.emp_code
|
||||
@ -1532,8 +1569,15 @@ class EmployeePolicyModel extends Model
|
||||
e.doj,
|
||||
e.band,
|
||||
TIMESTAMPDIFF(YEAR, e.dob, CURDATE()) AS emp_age,
|
||||
(SELECT name FROM employees WHERE relationship = "Self" and emp_code = ' . $this->db->escape($emp_code) . ' and client_id = '.$client_id.' LIMIT 1) AS self,
|
||||
|
||||
(
|
||||
SELECT name FROM employees
|
||||
WHERE relationship = "Self"
|
||||
and emp_code = ' . $this->db->escape($emp_code) . '
|
||||
and client_id = '.$client_id.'
|
||||
and is_active = 1
|
||||
and emp_status = "active"
|
||||
LIMIT 1
|
||||
) AS self,
|
||||
|
||||
ep.tpa_id,
|
||||
ep.uhid,
|
||||
|
||||
@ -22,6 +22,7 @@ class FileModel extends Model
|
||||
"uploaded_by",
|
||||
"updated_by",
|
||||
"hr_file_id",
|
||||
"is_comparison_skipped",
|
||||
];
|
||||
|
||||
|
||||
|
||||
@ -1829,24 +1829,35 @@ class PolicyTransactionModel extends Model
|
||||
// ==============================
|
||||
if ($date_type == 'statement_month' && $start_date != 0 && $end_date != 0) {
|
||||
$date_condition = "
|
||||
AND insurer_statements.month >= '{$start_date}'
|
||||
AND insurer_statements.month <= '{$end_date}'
|
||||
AND insurer_statements_oq.month >= '{$start_date}'
|
||||
AND insurer_statements_oq.month <= '{$end_date}'
|
||||
";
|
||||
}
|
||||
|
||||
// ==============================
|
||||
// BASE QUERY
|
||||
// ==============================
|
||||
$builder = $this->db->table('policy_transaction')
|
||||
|
||||
|
||||
// ==============================
|
||||
// Without Statement Upload
|
||||
// ==============================
|
||||
|
||||
|
||||
$builder2 = $this->db->table('policy_transaction')
|
||||
->select("
|
||||
policy_transaction.*,
|
||||
policy_transaction.id AS id,
|
||||
policy_transaction.endorsement_no AS endorsement_no,
|
||||
policy_transaction.ref AS ref,
|
||||
DATE_FORMAT(policy_transaction.policy_issue_date, '%d %b %Y') AS policy_issue_date,
|
||||
DATE_FORMAT(
|
||||
IF(policy_transaction.month IS NULL,
|
||||
policy_transaction.policy_issue_date,
|
||||
policy_transaction.month
|
||||
), '%b %Y'
|
||||
) AS policy_issue_month,
|
||||
|
||||
DATE_FORMAT( policy_transaction.policy_issue_date,, '%b %Y') AS policy_issue_month,
|
||||
|
||||
CASE
|
||||
WHEN 1 = 1 THEN 'no statement uploaded'
|
||||
ELSE 'statement uploaded'
|
||||
END AS statement_uploaded ,
|
||||
|
||||
|
||||
CASE
|
||||
WHEN clients.client_type = 1 THEN 'Group'
|
||||
@ -1898,89 +1909,15 @@ class PolicyTransactionModel extends Model
|
||||
|
||||
-- ==============================
|
||||
-- SUBQUERY: Total IRDA Amount
|
||||
-- Alias Agreed Amount ...!!
|
||||
-- ==============================
|
||||
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.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 total_irda_amt,
|
||||
ROUND(pt_co_share_details.exp_amt, 2) AS total_irda_amt,
|
||||
|
||||
-- Reward Only
|
||||
ROUND((
|
||||
SELECT SUM(co_share_stmt_details.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(0, 2) AS reward,
|
||||
|
||||
-- Billed Amount
|
||||
ROUND((
|
||||
SELECT SUM(
|
||||
COALESCE(co_share_stmt_details.actual_bp_brokerage_amt, 0) +
|
||||
COALESCE(co_share_stmt_details.actual_tp_brokerage_amt, 0) +
|
||||
COALESCE(co_share_stmt_details.actual_tep_brokerage_amt, 0) +
|
||||
COALESCE(co_share_stmt_details.reward, 0)
|
||||
)
|
||||
FROM co_share_stmt_details
|
||||
JOIN pt_co_share_details AS pt_table ON co_share_stmt_details.co_share_id = pt_table.id
|
||||
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 pt_table.is_active = 1
|
||||
AND insurer_statements.is_active = 1
|
||||
AND insurer_statements.invoice_status IS NOT NULL
|
||||
{$date_condition}
|
||||
), 2) AS billed_amt,
|
||||
|
||||
-- Unbilled Amount
|
||||
ROUND(
|
||||
(
|
||||
(
|
||||
SELECT
|
||||
SUM(
|
||||
COALESCE(co_share_stmt_details.actual_bp_brokerage_amt, 0) +
|
||||
COALESCE(co_share_stmt_details.actual_tp_brokerage_amt, 0) +
|
||||
COALESCE(co_share_stmt_details.actual_tep_brokerage_amt, 0) +
|
||||
COALESCE(co_share_stmt_details.reward, 0)
|
||||
)
|
||||
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
|
||||
{$date_condition}
|
||||
)
|
||||
-
|
||||
(
|
||||
SELECT
|
||||
SUM(
|
||||
COALESCE(co_share_stmt_details.actual_bp_brokerage_amt, 0) +
|
||||
COALESCE(co_share_stmt_details.actual_tp_brokerage_amt, 0) +
|
||||
COALESCE(co_share_stmt_details.actual_tep_brokerage_amt, 0) +
|
||||
COALESCE(co_share_stmt_details.reward, 0)
|
||||
)
|
||||
FROM co_share_stmt_details
|
||||
JOIN pt_co_share_details AS pt_table ON co_share_stmt_details.co_share_id = pt_table.id
|
||||
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 pt_table.is_active = 1
|
||||
AND insurer_statements.is_active = 1
|
||||
AND insurer_statements.invoice_status IS NULL
|
||||
{$date_condition}
|
||||
)
|
||||
), 2) AS unbilled_amt,
|
||||
ROUND(0, 2) AS billed_amt,
|
||||
|
||||
created_user.first_name AS user_name,
|
||||
|
||||
@ -2012,9 +1949,255 @@ class PolicyTransactionModel extends Model
|
||||
->join('tpa_branch', 'policy_transaction.tpa_branch_id = tpa_branch.id', 'left')
|
||||
->join('user_profiles AS sales_user', 'policy_transaction.sales_generated_by = sales_user.id', 'left')
|
||||
->join('user_profiles AS service_user', 'policy_transaction.serviced_by = service_user.id', 'left')
|
||||
->join('user_profiles AS created_user', 'policy_transaction.created_by = created_user.id', 'left')
|
||||
->join('user_profiles AS created_user', 'policy_transaction.created_by = created_user.id', 'left')
|
||||
|
||||
->where('policy_transaction.is_active', 1)
|
||||
->where('pt_co_share_details.is_active', 1);
|
||||
->where('pt_co_share_details.is_active', 1)
|
||||
|
||||
// ========================================================
|
||||
// GROUP BY Insurer Statement Months
|
||||
// =======================================================
|
||||
->groupBy('policy_transaction.policy_no , pt_co_share_details.insurer_id ');
|
||||
|
||||
// ==============================
|
||||
// ROLE-BASED FILTERS
|
||||
// ==============================
|
||||
if (
|
||||
(!in_array(get_role_id(), [1, 5])) &&
|
||||
!(
|
||||
in_array(MANAGEMENT_TEAM_ID, user_team()) ||
|
||||
in_array(FINANCE_TEAM_ID, user_team()) ||
|
||||
in_array(BUSINESS_TEAM_ID, user_team())
|
||||
)
|
||||
) {
|
||||
if (get_role_id() == 4 && in_array(POS_TEAM_ID, user_team())) {
|
||||
$builder2->where('policy_transaction.created_by', get_session_userid());
|
||||
}
|
||||
}
|
||||
|
||||
// ==============================
|
||||
// ADDITIONAL FILTERS
|
||||
// ==============================
|
||||
if (!empty($where)) {
|
||||
log_message('info', 'Where condition: ' . json_encode($where));
|
||||
$builder2->where($where);
|
||||
}
|
||||
|
||||
if ($start_date != 0 && $end_date != 0 && $date_type != 0 && $date_type != 'statement_month') {
|
||||
$startDate = date('Y-m-d 00:00:00', strtotime($start_date));
|
||||
$endDate = date('Y-m-d 23:59:59', strtotime($end_date));
|
||||
|
||||
$builder2->where("policy_transaction.{$date_type} >=", $startDate)
|
||||
->where("policy_transaction.{$date_type} <=", $endDate);
|
||||
}
|
||||
|
||||
|
||||
// ==============================
|
||||
// FILTER BY IDs
|
||||
// ==============================
|
||||
if ($client_id != 0) $builder2->where('policy_transaction.client_id', $client_id);
|
||||
if ($insurer_id != 0) $builder2->where('policy_transaction.insurer_id', $insurer_id);
|
||||
if ($client_branch_id != 0) $builder2->where('policy_transaction.client_branch_id', $client_branch_id);
|
||||
if ($insurer_branch_id != 0) $builder2->where('policy_transaction.insurer_branch_id', $insurer_branch_id);
|
||||
if ($client_policy_id != 0) $builder2->where('policy_transaction.client_policy_id', $client_policy_id);
|
||||
if ($user_id != 0) $builder2->where('policy_transaction.created_by', $user_id);
|
||||
if ($policy_type_id != 0) $builder2->where('client_policy.policy_type_id', $policy_type_id);
|
||||
if ($issuer != 0) $builder2->where('policy_transaction.issuer', $issuer);
|
||||
|
||||
// ==============================
|
||||
// DEFAULT 90-DAY FILTER
|
||||
// ==============================
|
||||
if (
|
||||
$client_id == 0 &&
|
||||
$insurer_id == 0 &&
|
||||
$policy_type_id == 0 &&
|
||||
$date_type == 0 &&
|
||||
$issuer == 0
|
||||
) {
|
||||
$fromDate = date('Y-m-d', strtotime('-90 days'));
|
||||
$toDate = date('Y-m-d 23:59:59');
|
||||
|
||||
if (empty($where)) {
|
||||
$builder2->where('policy_transaction.created_at >=', $fromDate)
|
||||
->where('policy_transaction.created_at <=', $toDate);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// ==============================
|
||||
// With Statement Upload
|
||||
// ==============================
|
||||
|
||||
$builder = $this->db->table('policy_transaction')
|
||||
->select("
|
||||
policy_transaction.id AS id,
|
||||
policy_transaction.endorsement_no AS endorsement_no,
|
||||
policy_transaction.ref AS ref,
|
||||
DATE_FORMAT(policy_transaction.policy_issue_date, '%d %b %Y') AS policy_issue_date,
|
||||
DATE_FORMAT(
|
||||
IF(insurer_statements_oq.month IS NULL,
|
||||
policy_transaction.policy_issue_date,
|
||||
insurer_statements_oq.month
|
||||
), '%b %Y'
|
||||
) AS policy_issue_month,
|
||||
|
||||
CASE
|
||||
WHEN insurer_statements_oq.month IS NULL THEN 'no statement uploaded'
|
||||
ELSE 'statement uploaded'
|
||||
END AS statement_uploaded ,
|
||||
|
||||
|
||||
CASE
|
||||
WHEN clients.client_type = 1 THEN 'Group'
|
||||
WHEN clients.client_type = 2 THEN 'Retail'
|
||||
ELSE '-'
|
||||
END AS client_type,
|
||||
|
||||
CASE
|
||||
WHEN policy_transaction.revenue_type = 'NA' THEN 'Fresh'
|
||||
ELSE 'Renewal'
|
||||
END AS revenue_type,
|
||||
|
||||
CASE
|
||||
WHEN policy_transaction.action_type = 'inception' THEN 'Policy'
|
||||
ELSE 'Endorsement'
|
||||
END AS action_type,
|
||||
|
||||
clients.client_name AS client_name,
|
||||
clients.short_name AS client_short_name,
|
||||
client_branch.branch_name AS client_branch_name,
|
||||
client_branch.address1 AS client_address,
|
||||
policy_type.policy_type,
|
||||
policy_type.bap,
|
||||
insurers.name AS insurer_name,
|
||||
insurers.short_name AS insurer_short_name,
|
||||
insurer_branch.branch_name AS insurer_branch_name,
|
||||
insurer_branch.branch_code AS insurer_branch_code,
|
||||
user_profiles.first_name AS user_name,
|
||||
vehicle.vehicle_no,
|
||||
tpa.name AS tpa_name,
|
||||
pt_co_share_details.remark AS remarks,
|
||||
pt_co_share_details.cop_amt AS bp_amt,
|
||||
pt_co_share_details.exp_amt,
|
||||
pt_co_share_details.id AS pt_id,
|
||||
sales_user.first_name AS salse_person_name,
|
||||
service_user.first_name AS service_person_name,
|
||||
|
||||
ROUND(pt_co_share_details.cop_amt + pt_co_share_details.cotp_amt + pt_co_share_details.cotep_amt, 2) AS premium_wo_gst,
|
||||
ROUND((ROUND(pt_co_share_details.cop_amt + pt_co_share_details.cotp_amt + pt_co_share_details.cotep_amt, 2) * 18 / 100), 2) AS gst_amount,
|
||||
ROUND(
|
||||
ROUND(pt_co_share_details.cop_amt + pt_co_share_details.cotp_amt + pt_co_share_details.cotep_amt, 2) +
|
||||
ROUND((ROUND(pt_co_share_details.cop_amt + pt_co_share_details.cotp_amt + pt_co_share_details.cotep_amt, 2) * 18 / 100), 2),
|
||||
2) AS total_premium,
|
||||
|
||||
ROUND(pt_co_share_details.cotp_amt + pt_co_share_details.cotep_amt, 2) AS tp_or_ter,
|
||||
DATEDIFF(policy_transaction.policy_end_date, CURDATE()) AS days,
|
||||
(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,
|
||||
|
||||
-- ==============================
|
||||
-- SUBQUERY: Total IRDA Amount
|
||||
-- Alias Agreed Amount ...!!
|
||||
-- ==============================
|
||||
ROUND(pt_co_share_details.exp_amt, 2) AS total_irda_amt,
|
||||
-- Reward Only
|
||||
ROUND((
|
||||
SELECT SUM(co_share_stmt_details.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
|
||||
AND insurer_statements.month = insurer_statements_oq.month
|
||||
{$date_condition}
|
||||
GROUP BY('policy_transaction.policy_no , insurer_statements.month , pt_co_share_details.insurer_id')
|
||||
), 2) AS reward,
|
||||
|
||||
-- Billed Amount
|
||||
ROUND((
|
||||
SELECT SUM(
|
||||
COALESCE(co_share_stmt_details.actual_bp_brokerage_amt, 0) +
|
||||
COALESCE(co_share_stmt_details.actual_tp_brokerage_amt, 0) +
|
||||
COALESCE(co_share_stmt_details.actual_tep_brokerage_amt, 0) +
|
||||
COALESCE(co_share_stmt_details.reward, 0)
|
||||
)
|
||||
FROM co_share_stmt_details
|
||||
JOIN pt_co_share_details AS pt_table ON co_share_stmt_details.co_share_id = pt_table.id
|
||||
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 pt_table.is_active = 1
|
||||
AND insurer_statements.is_active = 1
|
||||
AND insurer_statements.invoice_status IS NOT NULL
|
||||
AND insurer_statements.month = insurer_statements_oq.month
|
||||
{$date_condition}
|
||||
GROUP BY('policy_transaction.policy_no , insurer_statements.month , pt_co_share_details.insurer_id')
|
||||
), 2) AS billed_amt,
|
||||
|
||||
created_user.first_name AS user_name,
|
||||
|
||||
CASE
|
||||
WHEN pt_co_share_details.co_share_type IN (0, 1) THEN policy_transaction.policy_no
|
||||
WHEN pt_co_share_details.co_share_type > 1 THEN
|
||||
CASE
|
||||
WHEN pt_co_share_details.follower_policy_no IS NULL OR pt_co_share_details.follower_policy_no = ''
|
||||
THEN policy_transaction.policy_no
|
||||
ELSE pt_co_share_details.follower_policy_no
|
||||
END
|
||||
ELSE policy_transaction.policy_no
|
||||
END AS policy_no
|
||||
")
|
||||
|
||||
// ==============================
|
||||
// JOINS
|
||||
// ==============================
|
||||
->join('pt_co_share_details', 'policy_transaction.id = pt_co_share_details.pt_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')
|
||||
->join('user_profiles', 'policy_transaction.created_by = user_profiles.id', 'left')
|
||||
->join('vehicle', 'policy_transaction.vehicle_id = vehicle.id', 'left')
|
||||
->join('policy_type', 'policy_transaction.policy_type_id = policy_type.id', 'left')
|
||||
->join('insurers', 'pt_co_share_details.insurer_id = insurers.id', 'left')
|
||||
->join('insurer_branch', 'pt_co_share_details.insurer_branch_id = insurer_branch.id', 'left')
|
||||
->join('tpa', 'policy_transaction.tpa_id = tpa.id', 'left')
|
||||
->join('tpa_branch', 'policy_transaction.tpa_branch_id = tpa_branch.id', 'left')
|
||||
->join('user_profiles AS sales_user', 'policy_transaction.sales_generated_by = sales_user.id', 'left')
|
||||
->join('user_profiles AS service_user', 'policy_transaction.serviced_by = service_user.id', 'left')
|
||||
->join('user_profiles AS created_user', 'policy_transaction.created_by = created_user.id', 'left')
|
||||
|
||||
|
||||
->join('co_share_stmt_details', 'pt_co_share_details.id = co_share_stmt_details.co_share_id','left')
|
||||
->join('insurer_statements insurer_statements_oq','insurer_statements_oq.id = co_share_stmt_details.statement_id','left')
|
||||
|
||||
->where('policy_transaction.is_active', 1)
|
||||
->where('pt_co_share_details.is_active', 1)
|
||||
->where('insurer_statements_oq.id IS NOT NULL')
|
||||
|
||||
|
||||
// ========================================================
|
||||
// GROUP BY Insurer Statement Months
|
||||
// =======================================================
|
||||
->groupBy('policy_transaction.policy_no , pt_co_share_details.insurer_id ,insurer_statements_oq.month');
|
||||
|
||||
// ==============================
|
||||
// ROLE-BASED FILTERS
|
||||
@ -2053,12 +2236,12 @@ class PolicyTransactionModel extends Model
|
||||
$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')
|
||||
$builder->join('co_share_stmt_details cssdfilter', 'pt_co_share_details.id = cssdfilter.co_share_id', 'left')
|
||||
->join('insurer_statements', 'cssdfilter.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');
|
||||
->groupBy('cssdfilter.co_share_id');
|
||||
}
|
||||
|
||||
// ==============================
|
||||
@ -2092,17 +2275,22 @@ class PolicyTransactionModel extends Model
|
||||
}
|
||||
}
|
||||
|
||||
// ==============================
|
||||
// ORDER & EXECUTION
|
||||
// ==============================
|
||||
$builder->orderBy('policy_transaction.id', 'desc');
|
||||
|
||||
$result = $builder->get()->getResultArray();
|
||||
|
||||
// Uncomment if you need to debug SQL
|
||||
// dd($this->db->getLastQuery());
|
||||
|
||||
|
||||
$sql1 = $builder2->getCompiledSelect();
|
||||
$sql2 = $builder->getCompiledSelect();
|
||||
|
||||
$finalSql = "($sql1) UNION ALL ($sql2)
|
||||
ORDER BY policy_no DESC, insurer_branch_name ASC, statement_uploaded ASC,
|
||||
STR_TO_DATE(policy_issue_month, '%b %Y') ASC";
|
||||
|
||||
|
||||
$result = $this->db->query($finalSql)->getResultArray();
|
||||
|
||||
return $result;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -342,6 +342,13 @@ table.dataTable tbody td {
|
||||
|
||||
</style>
|
||||
|
||||
<?php
|
||||
|
||||
$session = \Config\Services::session();
|
||||
$currentLogInRole = $session->get()['userData']->role;
|
||||
|
||||
|
||||
?>
|
||||
|
||||
<!-- End ADD and EDIT Page HTML -->
|
||||
<div class="row" id="List-page">
|
||||
@ -511,7 +518,17 @@ table.dataTable tbody td {
|
||||
</label>
|
||||
<select class="form-control" id="role" name="role" required>
|
||||
<option value="">Select Role</option>
|
||||
<?php foreach($roleData as $value) { ?>
|
||||
|
||||
<?php foreach($roleData as $value) {
|
||||
|
||||
// $headRoleValue = $value['id']??"";
|
||||
|
||||
// // we are showing head role only to head's who logged in
|
||||
// if($headRoleValue == "5" && $currentLogInRole != "5" ){
|
||||
// continue;
|
||||
// }
|
||||
|
||||
?>
|
||||
<option value="<?= $value['id'] ?>"><?= $value['role'] ?></option>
|
||||
<?php } ?>
|
||||
</select>
|
||||
@ -522,7 +539,16 @@ table.dataTable tbody td {
|
||||
<span class="tooltip-trigger mdi mdi-information-outline" id="accessMatrixTrigger"></span>
|
||||
</label>
|
||||
<select hidden class="form-control" id="team" name="team[]" multiple required>
|
||||
<?php foreach($teamData as $value) { ?>
|
||||
<?php foreach($teamData as $value) {
|
||||
|
||||
$teamValue = $value['id']??"";
|
||||
|
||||
// we are showing head role only to head's who logged in
|
||||
if( ($teamValue == "4" || $teamValue =="6" ) && $currentLogInRole != "5" ){
|
||||
continue;
|
||||
}
|
||||
|
||||
?>
|
||||
<option value="<?= $value['id'] ?>"><?= $value['name'] ?></option>
|
||||
<?php } ?>
|
||||
</select>
|
||||
@ -673,7 +699,34 @@ table.dataTable tbody td {
|
||||
<td>BDS - All access</td>
|
||||
<td>All access</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="team-cell" rowspan="6">Accounts</td>
|
||||
<td>BDS - Policy Transaction</td>
|
||||
<td>Policy | Endorsement | Statement Upload</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>BDS - Report</td>
|
||||
<td>TAT wise | ACM Status wise | ACM TAT wise</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>BDS - Policy Report</td>
|
||||
<td>BDS | Variance | Outstanding | IRDA | Renewal | TAT Band </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>BDS - Pending Actions</td>
|
||||
<td>Finance Team</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>BDS - Masters</td>
|
||||
<td>Vehicle | CD | Insurer</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>BDS - Documents</td>
|
||||
<td>✓</td>
|
||||
</tr>
|
||||
<!-- Temporary please don't delete (start's) -->
|
||||
<!--
|
||||
<tr>
|
||||
<td class="team-cell" rowspan="5">Finance</td>
|
||||
<td>BDS - Policy Transaction</td>
|
||||
<td>Policy | Endorsement | Statement Upload</td>
|
||||
@ -715,6 +768,8 @@ table.dataTable tbody td {
|
||||
<td>BDS - Documents</td>
|
||||
<td>✓</td>
|
||||
</tr>
|
||||
-->
|
||||
<!-- Temporary please don't delete (ends) -->
|
||||
<tr>
|
||||
<td class="team-cell" rowspan="2">POS</td>
|
||||
<td>BDS - Policy Transaction</td>
|
||||
|
||||
@ -82,14 +82,15 @@
|
||||
|
||||
<?php } else if ($file['status'] == 'partially success') { ?>
|
||||
|
||||
<?php echo $file['status']; ?>
|
||||
<?php if ($file['error_data'] != 0) { ?>
|
||||
<?php echo $file['status']; ?>
|
||||
|
||||
<a class="fe-alert-circle" style="color: #000;" data-toggle="tooltip"
|
||||
data-placement="top" title="<?= $file['error_data'] ?>"></a>
|
||||
|
||||
<?php if ($file['error_data'] != 0) { ?>
|
||||
|
||||
<?php } ?>
|
||||
<a class="fe-alert-circle" style="color: #000;" data-toggle="tooltip"
|
||||
data-placement="top" title="<?= $file['error_data'] ?>"></a>
|
||||
|
||||
|
||||
<?php } ?>
|
||||
|
||||
<?php } else if ($file['status'] == 'in-progress-partially') { ?>
|
||||
|
||||
@ -98,7 +99,6 @@
|
||||
<a class="fe-alert-circle" style="color: #000;" data-toggle="tooltip"
|
||||
data-placement="top" title="<?= $file['error_data'] ?>"></a>
|
||||
|
||||
|
||||
<?php } ?>
|
||||
|
||||
<?php } else if ($file['status'] == 'failed-1') { ?>
|
||||
@ -135,6 +135,11 @@
|
||||
failed <a class="fe-alert-circle" style="color: #000;" data-toggle="tooltip"
|
||||
data-placement="top" title="There is no data to update"></a>
|
||||
|
||||
<?php } else if ($file['status'] == 'failed-7') { ?>
|
||||
|
||||
failed <a class="fe-alert-circle" style="color: #000;" data-toggle="tooltip"
|
||||
data-placement="top" title="<?= $file['error_data'] ?>"></a>
|
||||
|
||||
<?php } else { ?>
|
||||
|
||||
<?php echo $file['status']; ?>
|
||||
|
||||
@ -46,7 +46,7 @@
|
||||
<div class="form-row">
|
||||
<div class="form-group col-md-6">
|
||||
<label for="insurer_branch_id">Insurer Branch<span class="text-danger">*</span></label>
|
||||
<select class="form-control <?= !isset($CD_Master_Data) ? 'readonly-select' : '' ?>" id="insurer_branch_id" name="insurer_branch_id" required>
|
||||
<select class="form-control <?= !isset($CD_Master_Data) ? 'readonly-select' : '' ?>" id="insurer_branch_id" name="insurer_branch_id" onchange="checkDuplicateCdAccount(this)" required>
|
||||
<option value="">Select Insurer Branch</option>
|
||||
<?php if(isset($insurer_branch) && !empty($insurer_branch))
|
||||
{ foreach($insurer_branch as $branch) { ?>
|
||||
@ -229,11 +229,11 @@
|
||||
$('#opening_bal').prop("disabled", false);
|
||||
|
||||
if(isCdMasterPage == true){
|
||||
$('#client_id').val('').change();
|
||||
$('#insurer_id_for_cd').val('').change();
|
||||
$('#insurer_branch_id').val('').change();
|
||||
$('#cd_client_id').val('').select2();
|
||||
$('#insurer_id_for_cd').val('').select2();
|
||||
$('#insurer_branch_id').val('').select2();
|
||||
|
||||
$('#client_id').prop("disabled", false);
|
||||
$('#cd_client_id').prop("disabled", false);
|
||||
$('#insurer_id_for_cd').prop("disabled", false);
|
||||
$('#insurer_branch_id').prop("disabled", false);
|
||||
|
||||
@ -266,7 +266,7 @@
|
||||
);
|
||||
});
|
||||
|
||||
$branchSelect.val('').trigger('change.select2');
|
||||
$branchSelect.val('').select2();
|
||||
}
|
||||
|
||||
function showCdMasterAddModal(){
|
||||
@ -301,5 +301,43 @@
|
||||
$('#cd_ac_no_for_cd_master').append(option);
|
||||
}
|
||||
|
||||
function checkDuplicateCdAccount(){
|
||||
|
||||
let url = '<?= base_url('util/checkDuplicateCdAccount') ?>';
|
||||
let client_id = $('#cd_client_id').val();
|
||||
let insurer_id = $('#insurer_id_for_cd').val();
|
||||
let insurer_branch_id = $('#insurer_branch_id').val();
|
||||
console.log({client_id, insurer_id, insurer_branch_id});
|
||||
|
||||
// Data to send in the AJAX request
|
||||
let requestData = {
|
||||
client_id: client_id,
|
||||
insurer_id: insurer_id,
|
||||
insurer_branch_id: insurer_branch_id,
|
||||
};
|
||||
|
||||
if(client_id != "" && insurer_id != "" && insurer_branch_id != ""){
|
||||
// Send AJAX request
|
||||
sendAjaxRequestForGlobal(url, 'GET', requestData, function(response) {
|
||||
|
||||
console.log('Data fetched successfully:', response);
|
||||
|
||||
if (response.status == true) {
|
||||
console.log('No dublicate found');
|
||||
} else {
|
||||
|
||||
$('#cd_client_id').val('').select2();
|
||||
$('#insurer_id_for_cd').val('').select2();
|
||||
$('#insurer_branch_id').val('').select2();
|
||||
toastr.warning(response.message, 'WARNING');
|
||||
}
|
||||
|
||||
}, function(xhr, status, error) {
|
||||
console.error('Error fetching data:', error);
|
||||
console.error(xhr.responseText);
|
||||
toastr.error('An error occurred while checking the CD amount.', 'ERROR');
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
</script>
|
||||
@ -323,7 +323,7 @@ table.dataTable thead th {
|
||||
$('#cd_client_id').prop("disabled", true);
|
||||
$('#insurer_id_for_cd').val(res.data.insurer_id).change();
|
||||
$('#insurer_id_for_cd').prop("disabled", true);
|
||||
$('#insurer_branch_id').val(res.data.insurer_id).change();
|
||||
$('#insurer_branch_id').val(res.data.insurer_branch_id).select2();
|
||||
$('#insurer_branch_id').prop("disabled", true);
|
||||
$('#opening_date').val(res.data.opening_date);
|
||||
$('#cd_ac_no_for_cd_master').val(res.data.cd_ac_no);
|
||||
|
||||
@ -46,33 +46,40 @@
|
||||
height: 0;
|
||||
}
|
||||
|
||||
.slider {
|
||||
position: relative;
|
||||
width: 50px;
|
||||
height: 25px;
|
||||
background-color: #fff;
|
||||
border-radius: 25px;
|
||||
box-shadow: 0 0 5px rgba(0,0,0,0.2);
|
||||
transition: 0.3s;
|
||||
.slider,
|
||||
.slider_blue {
|
||||
position: relative;
|
||||
width: 50px;
|
||||
height: 25px;
|
||||
background-color: #fff;
|
||||
border-radius: 25px;
|
||||
box-shadow: 0 0 5px rgba(0,0,0,0.2);
|
||||
transition: 0.3s;
|
||||
}
|
||||
|
||||
.slider::before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
height: 19px;
|
||||
width: 19px;
|
||||
left: 3px;
|
||||
top: 3px;
|
||||
background-color: #ccc;
|
||||
border-radius: 50%;
|
||||
transition: 0.3s;
|
||||
.slider::before ,
|
||||
.slider_blue::before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
height: 19px;
|
||||
width: 19px;
|
||||
left: 3px;
|
||||
top: 3px;
|
||||
background-color: #ccc;
|
||||
border-radius: 50%;
|
||||
transition: 0.3s;
|
||||
}
|
||||
|
||||
input:checked + .slider {
|
||||
background-color: #ff4d4d; /* red when ON */
|
||||
}
|
||||
|
||||
input:checked + .slider::before {
|
||||
input:checked + .slider_blue {
|
||||
background-color: #268ef5ff; /* blue when ON */
|
||||
}
|
||||
|
||||
input:checked + .slider::before ,
|
||||
input:checked + .slider_blue::before {
|
||||
transform: translateX(25px);
|
||||
background-color: #fff;
|
||||
}
|
||||
@ -269,23 +276,18 @@ input:checked + .slider::before {
|
||||
<textarea class="form-control" placeholder="Enter Disclaimer" name="disclaimer" id="disclaimer" ></textarea>
|
||||
</div>
|
||||
|
||||
<div class="form-group col-md-4 EB">
|
||||
<label class="switch" style="position: relative;top: 43px;left: 20px;">
|
||||
<div class="form-group col-md-12 EB mt-3 ">
|
||||
<label class="switch-label">
|
||||
<input id="policy_visibility" type="checkbox" name="enrolment_visibility" checked>
|
||||
<span class="slider round" style="height: 27px;"></span>
|
||||
<span class="slider_blue"></span>
|
||||
<span class="switch-text">Policy Visibilty in Employee App</span>
|
||||
</label>
|
||||
|
||||
<!-- <label for="policy_visibility" style="position: relative;bottom: 5px;left: 85px;">Policy Visibilty in Enrollment App</label> -->
|
||||
<label for="policy_visibility" style="position: relative;bottom: 5px;left: 85px;">Policy Visibilty in Employee App</label>
|
||||
</div>
|
||||
|
||||
<div class="form-group col-md-4 EB">
|
||||
<label class="switch" style="position: relative;top: 43px;left: 20px;">
|
||||
|
||||
<label class="switch-label" >
|
||||
<input id="is_lgbtq" type="checkbox" name="is_lgbtq">
|
||||
<span class="slider round" style="height: 27px;"></span>
|
||||
<span class="slider_blue"></span>
|
||||
<span class="switch-text">Is LGBTQ Enable</span>
|
||||
</label>
|
||||
|
||||
<label for="is_lgbtq" style="position: relative;bottom: 5px;left: 85px;"> Is LGBTQ Enable</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -842,6 +844,17 @@ input:checked + .slider::before {
|
||||
|
||||
if(response.status == false && response.insurer_id != 'undefined'){
|
||||
toastr.warning('The CD Account Number not found.', 'Warning');
|
||||
|
||||
$('#cd_ac_no').empty();
|
||||
$('#cd_ac_no').append($('<option>', {
|
||||
value: '',
|
||||
text: 'Select CD Account Number'
|
||||
}));
|
||||
$('#cd_ac_no').append($('<option>', {
|
||||
value: 'add_cd',
|
||||
text: '+ Add New CD'
|
||||
}));
|
||||
|
||||
return;
|
||||
}
|
||||
appendCDACNO(response.data)
|
||||
@ -1806,15 +1819,18 @@ input:checked + .slider::before {
|
||||
//console.log('appendCDACNO', select);
|
||||
|
||||
$('#cd_ac_no').empty();
|
||||
|
||||
$('#cd_ac_no').append($('<option>', {
|
||||
value: '',
|
||||
text: 'Select CD Account Number'
|
||||
}));
|
||||
|
||||
$('#cd_ac_no').append($('<option>', {
|
||||
value: 'add_cd',
|
||||
text: '+ Add New CD'
|
||||
}));
|
||||
if(data.length == 0){
|
||||
$('#cd_ac_no').append($('<option>', {
|
||||
value: 'add_cd',
|
||||
text: '+ Add New CD'
|
||||
}));
|
||||
}
|
||||
|
||||
$.each(data, function(index, item) {
|
||||
const option = $('<option>', {
|
||||
@ -2381,140 +2397,135 @@ input:checked + .slider::before {
|
||||
|
||||
</script>
|
||||
|
||||
|
||||
<script>
|
||||
$(document).ready(function () {
|
||||
$('#chk-show-expired').on('change', function () {
|
||||
|
||||
$('#chk-show-expired').on('change', function () {
|
||||
const showExpired = $(this).is(':checked');
|
||||
|
||||
const showExpired = $(this).is(':checked');
|
||||
let policyTable = '';
|
||||
let data = <?= isset($client_policy) ? json_encode($client_policy) : '[]' ?>;
|
||||
let role = data.role
|
||||
delete data.role;
|
||||
|
||||
let policyTable = '';
|
||||
let data = <?= isset($client_policy) ? json_encode($client_policy) : '[]' ?>;
|
||||
let role = data.role
|
||||
delete data.role;
|
||||
console.log("checkbox working");
|
||||
|
||||
console.log("checkbox working");
|
||||
$.each(data, function(index, item) {
|
||||
// console.log('step 1');
|
||||
let patternGMC = /gmc/i; // Case insensitive pattern for 'gmc'
|
||||
let patternGPA = /gpa/i; // Case insensitive pattern for 'gpa'
|
||||
let subject = item.policy_type_name;
|
||||
|
||||
$.each(data, function(index, item) {
|
||||
// console.log('step 1');
|
||||
let patternGMC = /gmc/i; // Case insensitive pattern for 'gmc'
|
||||
let patternGPA = /gpa/i; // Case insensitive pattern for 'gpa'
|
||||
let subject = item.policy_type_name;
|
||||
//console.log('search terms subject', subject);
|
||||
|
||||
//console.log('search terms subject', subject);
|
||||
if (patternGMC.test(subject)) {
|
||||
search_term = 'GMC';
|
||||
} else if (patternGPA.test(subject)) {
|
||||
search_term = 'GPA';
|
||||
} else {
|
||||
search_term = subject; // Set default value if neither 'GMC' nor 'GPA' exists
|
||||
}
|
||||
|
||||
if (patternGMC.test(subject)) {
|
||||
search_term = 'GMC';
|
||||
} else if (patternGPA.test(subject)) {
|
||||
search_term = 'GPA';
|
||||
} else {
|
||||
search_term = subject; // Set default value if neither 'GMC' nor 'GPA' exists
|
||||
}
|
||||
|
||||
let tpaValue = 'TPA Unavailable';
|
||||
let tpaValue = 'TPA Unavailable';
|
||||
|
||||
if (item.tpa_short && item.tpa_branch_code) {
|
||||
tpaValue = item.tpa_short + '-' + item.tpa_branch_code;
|
||||
if (item.tpa_short && item.tpa_branch_code) {
|
||||
tpaValue = item.tpa_short + '-' + item.tpa_branch_code;
|
||||
}
|
||||
|
||||
let policy_name_data = `${item.policy_type_name ?? ''}` + ' - ' + `${item.policy_no ?? ''}`;
|
||||
|
||||
if(showExpired == true && checkDateStatus(item.policy_end_date) == 'Expired'){
|
||||
|
||||
|
||||
policyTable += `
|
||||
<tr>
|
||||
<td>${item.insurer_short} - ${item.insurer_branch_name}</td>
|
||||
<td>${policy_name_data}</td>
|
||||
<td>${item.branch_name ? item.branch_name : ' - '}</td>
|
||||
<td>${tpaValue}</td>
|
||||
<td>${(item.policy_start_date)} / ${(item.policy_end_date)}</td>
|
||||
|
||||
<td>${checkDateStatus(item.policy_end_date, 1)}</td>
|
||||
<td>
|
||||
<div class="btn-group dropdown">
|
||||
<a href="javascript: void(0);" class="dropdown-toggle arrow-none btn btn-light btn-sm" data-toggle="dropdown"aria-expanded="false"><i class="mdi mdi-dots-horizontal"></i></a>
|
||||
<div class="dropdown-menu dropdown-menu-right">
|
||||
<a href="#" data-id="${item.id}" id="${item.policy_id}" class="dropdown-item btnPolicyEdit"><i class="mdi mdi-lead-pencil mr-2 text-muted font-18 vertical-middle"></i>Edit</a>
|
||||
<a href="#" data-id="${item.id}" id="${search_term}" data-typeid="${item.policy_type_id}" class="dropdown-item btnPolicyMaster" ><i class="mdi mdi-wrench mr-2 text-muted font-18 vertical-middle"></i>Terms</a>
|
||||
<a href="#" data-id="${item.id}" id="${search_term}" data-typeid="${item.policy_type_id}" class="dropdown-item btnPolicyModel" data-toggle="modal" data-target="#bs-example-modal-lg"><i class="mdi mdi-book-open mr-2 text-muted font-18 vertical-middle"></i>Rack Rate</a>`;
|
||||
|
||||
// Conditionally render the delete option based on the role
|
||||
if (role != 3 && role != 4) {
|
||||
policyTable += `
|
||||
<a href="#" data-id="${item.id}" id="${search_term}" data-typeid="${item.policy_type_id}" class="dropdown-item" onclick="removepolicy(this)"><i class="mdi mdi-delete mr-2 text-muted font-18 vertical-middle"></i>Delete</a>`;
|
||||
}
|
||||
|
||||
policyTable += `
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
`;
|
||||
|
||||
|
||||
}
|
||||
|
||||
let policy_name_data = `${item.policy_type_name ?? ''}` + ' - ' + `${item.policy_no ?? ''}`;
|
||||
|
||||
if(showExpired == true && checkDateStatus(item.policy_end_date) == 'Expired'){
|
||||
|
||||
|
||||
policyTable += `
|
||||
<tr>
|
||||
<td>${item.insurer_short} - ${item.insurer_branch_name}</td>
|
||||
<td>${policy_name_data}</td>
|
||||
<td>${item.branch_name ? item.branch_name : ' - '}</td>
|
||||
<td>${tpaValue}</td>
|
||||
<td>${(item.policy_start_date)} / ${(item.policy_end_date)}</td>
|
||||
|
||||
<td>${checkDateStatus(item.policy_end_date, 1)}</td>
|
||||
<td>
|
||||
<div class="btn-group dropdown">
|
||||
<a href="javascript: void(0);" class="dropdown-toggle arrow-none btn btn-light btn-sm" data-toggle="dropdown"aria-expanded="false"><i class="mdi mdi-dots-horizontal"></i></a>
|
||||
<div class="dropdown-menu dropdown-menu-right">
|
||||
<a href="#" data-id="${item.id}" id="${item.policy_id}" class="dropdown-item btnPolicyEdit"><i class="mdi mdi-lead-pencil mr-2 text-muted font-18 vertical-middle"></i>Edit</a>
|
||||
<a href="#" data-id="${item.id}" id="${search_term}" data-typeid="${item.policy_type_id}" class="dropdown-item btnPolicyMaster" ><i class="mdi mdi-wrench mr-2 text-muted font-18 vertical-middle"></i>Terms</a>
|
||||
<a href="#" data-id="${item.id}" id="${search_term}" data-typeid="${item.policy_type_id}" class="dropdown-item btnPolicyModel" data-toggle="modal" data-target="#bs-example-modal-lg"><i class="mdi mdi-book-open mr-2 text-muted font-18 vertical-middle"></i>Rack Rate</a>`;
|
||||
|
||||
// Conditionally render the delete option based on the role
|
||||
if (role != 3 && role != 4) {
|
||||
policyTable += `
|
||||
<a href="#" data-id="${item.id}" id="${search_term}" data-typeid="${item.policy_type_id}" class="dropdown-item" onclick="removepolicy(this)"><i class="mdi mdi-delete mr-2 text-muted font-18 vertical-middle"></i>Delete</a>`;
|
||||
}
|
||||
|
||||
policyTable += `
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
`;
|
||||
|
||||
if(showExpired == false && checkDateStatus(item.policy_end_date) != 'Expired'){
|
||||
|
||||
}
|
||||
|
||||
if(showExpired == false && checkDateStatus(item.policy_end_date) != 'Expired'){
|
||||
|
||||
policyTable += `
|
||||
<tr>
|
||||
<td>${item.insurer_short} - ${item.insurer_branch_name}</td>
|
||||
<td>${policy_name_data}</td>
|
||||
<td>${item.branch_name ? item.branch_name : ' - '}</td>
|
||||
<td>${tpaValue}</td>
|
||||
<td>${(item.policy_start_date)} / ${(item.policy_end_date)}</td>
|
||||
|
||||
<td>${checkDateStatus(item.policy_end_date, 1)}</td>
|
||||
<td>
|
||||
<div class="btn-group dropdown">
|
||||
<a href="javascript: void(0);" class="dropdown-toggle arrow-none btn btn-light btn-sm" data-toggle="dropdown"aria-expanded="false"><i class="mdi mdi-dots-horizontal"></i></a>
|
||||
<div class="dropdown-menu dropdown-menu-right">
|
||||
<a href="#" data-id="${item.id}" id="${item.policy_id}" class="dropdown-item btnPolicyEdit"><i class="mdi mdi-lead-pencil mr-2 text-muted font-18 vertical-middle"></i>Edit</a>
|
||||
<a href="#" data-id="${item.id}" id="${search_term}" data-typeid="${item.policy_type_id}" class="dropdown-item btnPolicyMaster" ><i class="mdi mdi-wrench mr-2 text-muted font-18 vertical-middle"></i>Terms</a>
|
||||
<a href="#" data-id="${item.id}" id="${search_term}" data-typeid="${item.policy_type_id}" class="dropdown-item btnPolicyModel" data-toggle="modal" data-target="#bs-example-modal-lg"><i class="mdi mdi-book-open mr-2 text-muted font-18 vertical-middle"></i>Rack Rate</a>`;
|
||||
|
||||
policyTable += `
|
||||
<tr>
|
||||
<td>${item.insurer_short} - ${item.insurer_branch_name}</td>
|
||||
<td>${policy_name_data}</td>
|
||||
<td>${item.branch_name ? item.branch_name : ' - '}</td>
|
||||
<td>${tpaValue}</td>
|
||||
<td>${(item.policy_start_date)} / ${(item.policy_end_date)}</td>
|
||||
|
||||
<td>${checkDateStatus(item.policy_end_date, 1)}</td>
|
||||
<td>
|
||||
<div class="btn-group dropdown">
|
||||
<a href="javascript: void(0);" class="dropdown-toggle arrow-none btn btn-light btn-sm" data-toggle="dropdown"aria-expanded="false"><i class="mdi mdi-dots-horizontal"></i></a>
|
||||
<div class="dropdown-menu dropdown-menu-right">
|
||||
<a href="#" data-id="${item.id}" id="${item.policy_id}" class="dropdown-item btnPolicyEdit"><i class="mdi mdi-lead-pencil mr-2 text-muted font-18 vertical-middle"></i>Edit</a>
|
||||
<a href="#" data-id="${item.id}" id="${search_term}" data-typeid="${item.policy_type_id}" class="dropdown-item btnPolicyMaster" ><i class="mdi mdi-wrench mr-2 text-muted font-18 vertical-middle"></i>Terms</a>
|
||||
<a href="#" data-id="${item.id}" id="${search_term}" data-typeid="${item.policy_type_id}" class="dropdown-item btnPolicyModel" data-toggle="modal" data-target="#bs-example-modal-lg"><i class="mdi mdi-book-open mr-2 text-muted font-18 vertical-middle"></i>Rack Rate</a>`;
|
||||
// Conditionally render the delete option based on the role
|
||||
if (role != 3 && role != 4) {
|
||||
policyTable += `
|
||||
<a href="#" data-id="${item.id}" id="${search_term}" data-typeid="${item.policy_type_id}" class="dropdown-item" onclick="removepolicy(this)"><i class="mdi mdi-delete mr-2 text-muted font-18 vertical-middle"></i>Delete</a>`;
|
||||
}
|
||||
|
||||
// Conditionally render the delete option based on the role
|
||||
if (role != 3 && role != 4) {
|
||||
policyTable += `
|
||||
<a href="#" data-id="${item.id}" id="${search_term}" data-typeid="${item.policy_type_id}" class="dropdown-item" onclick="removepolicy(this)"><i class="mdi mdi-delete mr-2 text-muted font-18 vertical-middle"></i>Delete</a>`;
|
||||
}
|
||||
|
||||
policyTable += `
|
||||
</div>
|
||||
policyTable += `
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
`;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
});
|
||||
|
||||
const table = $('#table-client-policy').DataTable();
|
||||
table.clear().destroy();
|
||||
|
||||
$('#table-client-policy tbody').html(policyTable); // replace tbody content
|
||||
|
||||
$('#table-client-policy').DataTable({
|
||||
paging: true,
|
||||
searching: true,
|
||||
autoWidth: false,
|
||||
responsive: true,
|
||||
});
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
`;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
});
|
||||
|
||||
const table = $('#table-client-policy').DataTable();
|
||||
table.clear().destroy();
|
||||
|
||||
$('#table-client-policy tbody').html(policyTable); // replace tbody content
|
||||
|
||||
$('#table-client-policy').DataTable({
|
||||
paging: true,
|
||||
searching: true,
|
||||
autoWidth: false,
|
||||
responsive: true,
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
@ -465,15 +465,22 @@ function fetchFileError(file_id) {
|
||||
|
||||
$(this).find(".modal-body").html("");
|
||||
if (response.code === 200 && response.dataStatus === true && response.data !== "") {
|
||||
|
||||
try {
|
||||
// console.log((JSON.parse(response.data)));
|
||||
var file_error_data = (JSON.parse(response.data));
|
||||
var file_error_html = "";
|
||||
let hasError14 = false;
|
||||
let hasError15 = false;
|
||||
let buttonAdded = false;
|
||||
let error_code = 0;
|
||||
let is_comparison_skipped = response.is_comparison_skipped ?? null;
|
||||
|
||||
for (var key in file_error_data['error_summary']) {
|
||||
// console.log(key);
|
||||
var err_id = parseInt(key);
|
||||
var err_count = file_error_data['error_summary'][key];
|
||||
|
||||
switch (err_id) {
|
||||
case 0:
|
||||
file_error_html +=
|
||||
@ -538,6 +545,20 @@ function fetchFileError(file_id) {
|
||||
"<strong>Rule conflict: Twofold relationship found within family</strong> <span class='badge badge-danger float-right'>" +
|
||||
err_count + "</span>";
|
||||
break;
|
||||
case 14:
|
||||
hasError14 = true;
|
||||
error_code = 14;
|
||||
file_error_html +=
|
||||
"<strong>This inception row was not found in the member data list.</strong> <span class='badge badge-danger float-right'>" +
|
||||
err_count + "</span>";
|
||||
break;
|
||||
case 15:
|
||||
hasError15 = true;
|
||||
error_code = 15;
|
||||
file_error_html +=
|
||||
"<strong>Inception–member data count mismatch.</strong> <span class='badge badge-danger float-right'>" + err_count + "</span> <br>"
|
||||
+ file_error_data['error_message'] ?? "" ;
|
||||
break;
|
||||
|
||||
default:
|
||||
file_error_html += "";
|
||||
@ -565,13 +586,37 @@ function fetchFileError(file_id) {
|
||||
// console.log('file_error_html_2', file_error_html)
|
||||
|
||||
}
|
||||
|
||||
// ✅ Decide when to add buttons
|
||||
if (!buttonAdded && is_comparison_skipped != 1 && is_comparison_skipped != 0) {
|
||||
if (hasError15 && error_code == 15) {
|
||||
// Add after 15 (preferred if both exist)
|
||||
file_error_html +=
|
||||
"<div id='confirmationdiv' class='mt-2 text-center'>" +
|
||||
"<p class='mb-2'>Do you want to skip the comparison?</p>" +
|
||||
"<button id='confirmYes' class='btn btn-success btn-sm mx-1' data-id="+file_id+">Yes</button>" +
|
||||
"<button id='confirmNo' class='btn btn-danger btn-sm mx-1' data-id="+file_id+">No</button>" +
|
||||
"</div>";
|
||||
buttonAdded = true;
|
||||
} else if (hasError14 && !hasError15 && error_code == 14) {
|
||||
// Add after 14 if 15 doesn't exist
|
||||
file_error_html +=
|
||||
"<div id='confirmationdiv' class='mt-2 text-center'>" +
|
||||
"<p class='mb-2'>Do you want to skip the comparison?</p>" +
|
||||
"<button id='confirmYes' class='btn btn-success btn-sm mx-1' data-id="+file_id+">Yes</button>" +
|
||||
"<button id='confirmNo' class='btn btn-danger btn-sm mx-1' data-id="+file_id+">No</button>" +
|
||||
"</div>";
|
||||
buttonAdded = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (err_id != 5 && err_id != 6 && err_id != 0) {
|
||||
file_error_html += (file_error_html != "" ?
|
||||
"<a href ='<?php echo base_url()?>" +
|
||||
"employee/excel_error/" + file_id +
|
||||
"' target=_blank>click here to more details...</a>" : "");
|
||||
"' target=_blank class='text-center'>click here to more details...</a>" : "");
|
||||
}
|
||||
|
||||
|
||||
// console.log(file_error_html);
|
||||
$('#file-err-modal').find(".modal-body").html(file_error_html);
|
||||
return file_error_html;
|
||||
@ -1043,5 +1088,101 @@ function checkValues() {
|
||||
// return true;
|
||||
}
|
||||
|
||||
$(document).on('click', '#confirmYes', function() {
|
||||
let file_id = $(this).data('id');
|
||||
|
||||
Swal.fire({
|
||||
title: "Are you sure?",
|
||||
text: "If you proceed, the comparison of the Inception and Member data list will be skipped, and the Inception file data validation process will start.",
|
||||
icon: "warning",
|
||||
showCancelButton: true,
|
||||
confirmButtonText: "Yes, proceed",
|
||||
cancelButtonText: "No, cancel",
|
||||
confirmButtonColor: "#28a745",
|
||||
cancelButtonColor: "#dc3545",
|
||||
reverseButtons: true
|
||||
}).then((result) => {
|
||||
if (result.isConfirmed) {
|
||||
|
||||
$('.loader').fadeIn();
|
||||
$('.loader-mask').fadeIn();
|
||||
|
||||
$.ajax({
|
||||
url: '<?= base_url("util/proceedExcelFileDataValidation") ?>', // replace with actual API URL
|
||||
type: 'GET',
|
||||
data: { file_id: file_id },
|
||||
success: function(response) {
|
||||
console.log('API response:', response);
|
||||
|
||||
if (response.status === true) {
|
||||
toastr.success(response.message, 'SUCCESS');
|
||||
} else {
|
||||
toastr.warning(response.message, 'WARNING');
|
||||
}
|
||||
|
||||
$('.loader').fadeOut();
|
||||
$('.loader-mask').delay(350).fadeOut('slow');
|
||||
window.location.reload();
|
||||
},
|
||||
error: function(xhr) {
|
||||
toastr.error('Failed to complete the action.');
|
||||
console.error('API error:', xhr.responseText);
|
||||
$('.loader').fadeOut();
|
||||
$('.loader-mask').delay(350).fadeOut('slow');
|
||||
window.location.reload();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
$(document).on('click', '#confirmNo', function() {
|
||||
let file_id = $(this).data('id');
|
||||
|
||||
Swal.fire({
|
||||
title: "Are you sure?",
|
||||
text: "If you proceed, the comparison between the Inception and Member data list will continue without skipping, and the validation process will not start until the comparison is completed.",
|
||||
icon: "warning",
|
||||
showCancelButton: true,
|
||||
confirmButtonText: "Yes, proceed",
|
||||
cancelButtonText: "No, cancel",
|
||||
confirmButtonColor: "#28a745",
|
||||
cancelButtonColor: "#dc3545",
|
||||
reverseButtons: true
|
||||
}).then((result) => {
|
||||
if (result.isConfirmed) {
|
||||
|
||||
$('.loader').fadeIn();
|
||||
$('.loader-mask').fadeIn();
|
||||
|
||||
$.ajax({
|
||||
url: '<?= base_url("util/proceedExcelFileDataValidation") ?>', // replace with actual API URL
|
||||
type: 'GET',
|
||||
data: { file_id: file_id, not_skiped : true },
|
||||
success: function(response) {
|
||||
console.log('API response:', response);
|
||||
|
||||
if (response.status === true) {
|
||||
toastr.success(response.message, 'SUCCESS');
|
||||
} else {
|
||||
toastr.warning(response.message, 'WARNING');
|
||||
}
|
||||
|
||||
$('.loader').fadeOut();
|
||||
$('.loader-mask').delay(350).fadeOut('slow');
|
||||
window.location.reload();
|
||||
},
|
||||
error: function(xhr) {
|
||||
toastr.error('Failed to complete the action.');
|
||||
console.error('API error:', xhr.responseText);
|
||||
$('.loader').fadeOut();
|
||||
$('.loader-mask').delay(350).fadeOut('slow');
|
||||
window.location.reload();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------
|
||||
</script>
|
||||
@ -1737,9 +1737,9 @@
|
||||
<li>
|
||||
<a href="<?= base_url('/employee/endorsement-list') ?>">View Endorsement</a>
|
||||
</li>
|
||||
<li>
|
||||
<!-- <li>
|
||||
<a href="<?= base_url('/employee/enrollment-list') ?>">View Enrolment</a>
|
||||
</li>
|
||||
</li> -->
|
||||
<li>
|
||||
<a href="<?= base_url('/employee/test_members_list') ?>">Test Members List</a>
|
||||
</li>
|
||||
@ -1752,7 +1752,7 @@
|
||||
<?php } ?>
|
||||
|
||||
<!-- Masters -->
|
||||
<?php if (get_role_id() == 1 || get_role_id() == 5 || get_role_id() == 4) { ?>
|
||||
<?php if (get_role_id() == 1 || get_role_id() == 5 || ( get_role_id() == 4 && (in_array(BUSINESS_SUPPORT_TEAM_ID, user_team()) || in_array(SALES_TEAM_ID, user_team())))) { ?>
|
||||
|
||||
<li class="li-seperate" id="masters-li">
|
||||
<a href="#sidebarPolicies" data-toggle="collapse" class=" img-inactive">
|
||||
@ -1881,7 +1881,7 @@
|
||||
</li>
|
||||
<?php } ?>
|
||||
<!-- BDS -->
|
||||
<?php if ((get_role_id() == 1 || get_role_id() == 5) || (in_array(MANAGEMENT_TEAM_ID, user_team()) || in_array(FINANCE_TEAM_ID, user_team()) || in_array(BUSINESS_TEAM_ID, user_team()) || in_array(POS_TEAM_ID, user_team()))) { ?>
|
||||
<?php if ((get_role_id() == 1 || get_role_id() == 5 || get_role_id() == 4) || (in_array(MANAGEMENT_TEAM_ID, user_team()) || in_array(FINANCE_TEAM_ID, user_team()) || in_array(BUSINESS_TEAM_ID, user_team()) || in_array(POS_TEAM_ID, user_team()))) { ?>
|
||||
<li class="li-seperate" id="policy-transactions-li">
|
||||
<a href="#policyTransactions" data-toggle="collapse" class="waves-effect img-inactive">
|
||||
<img
|
||||
@ -1916,9 +1916,9 @@
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<?php if ((get_role_id() == 1 || get_role_id() == 5) || (in_array(MANAGEMENT_TEAM_ID, user_team()) || in_array(FINANCE_TEAM_ID, user_team()) || in_array(BUSINESS_TEAM_ID, user_team()) || in_array(POS_TEAM_ID, user_team()))) { ?>
|
||||
<?php if ((get_role_id() == 1 || get_role_id() == 5) ||(get_role_id() == 4 && in_array(FINANCE_TEAM_ID, user_team())) || (in_array(MANAGEMENT_TEAM_ID, user_team()) || in_array(FINANCE_TEAM_ID, user_team()) || in_array(BUSINESS_TEAM_ID, user_team()) || in_array(POS_TEAM_ID, user_team()))) { ?>
|
||||
|
||||
<?php if (in_array(get_role_id(), [1, 5]) || in_array(MANAGEMENT_TEAM_ID, user_team()) || in_array(POS_TEAM_ID, user_team())) { ?>
|
||||
<?php if (in_array(get_role_id(), [1, 5]) ||(get_role_id() == 4 && in_array(FINANCE_TEAM_ID, user_team())) || in_array(MANAGEMENT_TEAM_ID, user_team()) || in_array(POS_TEAM_ID, user_team())) { ?>
|
||||
<li>
|
||||
<a href="#policyReports" data-toggle="collapse" class="waves-effect">
|
||||
<i class="ri-file-chart-fill"></i>
|
||||
@ -1929,7 +1929,7 @@
|
||||
<li>
|
||||
<a href="<?= base_url('/policy_tranction/report/list') ?>">BDS</a>
|
||||
</li>
|
||||
<?php if (in_array(get_role_id(), [1, 5]) || in_array(MANAGEMENT_TEAM_ID, user_team())) { ?>
|
||||
<?php if (in_array(get_role_id(), [1, 5]) || (get_role_id() == 4 && in_array(FINANCE_TEAM_ID, user_team())) || in_array(MANAGEMENT_TEAM_ID, user_team())) { ?>
|
||||
<li>
|
||||
<a href="<?= base_url('/policy_tranction/report/report-varience-list') ?>">Variance</a>
|
||||
</li>
|
||||
@ -2009,6 +2009,11 @@
|
||||
<li>
|
||||
<a href="<?= base_url('/master/vehicle/list') ?>">Vehicle Master</a>
|
||||
</li>
|
||||
<?php if ((get_role_id() === 4 && in_array(FINANCE_TEAM_ID, user_team())) || in_array(BUSINESS_TEAM_ID, user_team())) { ?>
|
||||
<li>
|
||||
<a href="<?= base_url('/master/insurer/list') ?>">Insurer Master</a>
|
||||
</li>
|
||||
<?php } ?>
|
||||
</ul>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
@ -164,7 +164,7 @@ table.dataTable tbody td {
|
||||
|
||||
<thead class="bg-light">
|
||||
<tr>
|
||||
<th><div class="column-header">S.No </div></th>
|
||||
<th><div class="column-header">S.No </div></th>
|
||||
<th><div class="column-header">Lead Type </div></th>
|
||||
<th><div class="column-header">Issuer </div></th>
|
||||
<th><div class="column-header">Client Type </div></th>
|
||||
@ -209,8 +209,10 @@ table.dataTable tbody td {
|
||||
<td><?php echo $lead_status[$row['status']] ?? '-'; ?></td>
|
||||
<td>
|
||||
<div class="btn-group dropdown">
|
||||
<a href="javascript:void(0);" class="dropdown-toggle arrow-none btn btn-light btn-sm" data-toggle="dropdown" aria-expanded="false">
|
||||
<i class="mdi mdi-dots-horizontal"></i>
|
||||
<a href="javascript:void(0);" class="dropdown-toggle arrow-none btn btn-light btn-sm"
|
||||
data-toggle="dropdown"
|
||||
aria-expanded="false"
|
||||
data-boundary="window"> <i class="mdi mdi-dots-horizontal"></i>
|
||||
</a>
|
||||
<div class="dropdown-menu dropdown-menu-right">
|
||||
<a class="dropdown-item btnEdit" data-id="<?= $row['id']; ?>" data-ft="<?= $row['lead_form_type']; ?>" onclick="getLeadsDataForEdit('<?= htmlspecialchars($row['id'], ENT_QUOTES) ?>', '<?= htmlspecialchars($row['lead_form_type'], ENT_QUOTES) ?>')">
|
||||
@ -300,126 +302,154 @@ table.dataTable tbody td {
|
||||
|
||||
<script>
|
||||
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
const table = document.getElementById("tickets-table");
|
||||
|
||||
function createCustomDropdown(row) {
|
||||
const originalDropdown = row.querySelector('.dropdown-menu');
|
||||
if (!originalDropdown) return null;
|
||||
// New menu
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
const table = document.getElementById("tickets-table");
|
||||
|
||||
const customDropdown = document.createElement('div');
|
||||
customDropdown.className = 'custom-dropdown-menu';
|
||||
|
||||
// Clone the items but remove their original click handlers
|
||||
const items = originalDropdown.querySelectorAll('.dropdown-item');
|
||||
items.forEach(item => {
|
||||
const newItem = item.cloneNode(true);
|
||||
// Preserve the attributes but remove the onclick
|
||||
newItem.removeAttribute('onclick');
|
||||
customDropdown.appendChild(newItem);
|
||||
});
|
||||
|
||||
return customDropdown;
|
||||
}
|
||||
function createCustomDropdown(row) {
|
||||
const originalDropdown = row.querySelector('.dropdown-menu');
|
||||
if (!originalDropdown) return null;
|
||||
|
||||
const customDropdown = document.createElement('div');
|
||||
customDropdown.className = 'custom-dropdown-menu';
|
||||
|
||||
// Clone the items but remove their original click handlers
|
||||
const items = originalDropdown.querySelectorAll('.dropdown-item');
|
||||
items.forEach(item => {
|
||||
const newItem = item.cloneNode(true);
|
||||
// Preserve the attributes but remove the onclick
|
||||
newItem.removeAttribute('onclick');
|
||||
customDropdown.appendChild(newItem);
|
||||
});
|
||||
|
||||
return customDropdown;
|
||||
}
|
||||
|
||||
let activeDropdown = null;
|
||||
let activeDropdown = null;
|
||||
|
||||
table.querySelectorAll("tbody tr").forEach(row => {
|
||||
const customDropdown = createCustomDropdown(row);
|
||||
if (!customDropdown) return;
|
||||
|
||||
document.body.appendChild(customDropdown);
|
||||
table.querySelectorAll("tbody tr").forEach(row => {
|
||||
const customDropdown = createCustomDropdown(row);
|
||||
if (!customDropdown) return;
|
||||
|
||||
document.body.appendChild(customDropdown);
|
||||
|
||||
row.addEventListener("click", function(event) {
|
||||
// Ignore clicks on the action column
|
||||
if (event.target.closest('td:last-child')) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (activeDropdown) {
|
||||
activeDropdown.style.display = 'none';
|
||||
}
|
||||
|
||||
const rect = event.target.getBoundingClientRect();
|
||||
|
||||
customDropdown.style.display = 'block';
|
||||
customDropdown.style.position = 'fixed';
|
||||
customDropdown.style.left = `${rect.left}px`;
|
||||
customDropdown.style.top = `${rect.bottom + 5}px`;
|
||||
|
||||
activeDropdown = customDropdown;
|
||||
|
||||
// 1. CRITICAL CHECK: Stop propagation if the click came from the dropdown toggle itself.
|
||||
if (event.target.closest('.dropdown-toggle')) {
|
||||
event.stopPropagation();
|
||||
});
|
||||
|
||||
// Handle clicks on dropdown items
|
||||
customDropdown.querySelectorAll('.dropdown-item').forEach(item => {
|
||||
item.addEventListener('click', function(e) {
|
||||
console.log("##############");
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
|
||||
// Get the data-id and other attributes from the original button
|
||||
const originalItem = row.querySelector(`.dropdown-item[data-id="${this.getAttribute('data-id')}"]`);
|
||||
|
||||
// **IMPORTANT:** Since you're using a custom script, you need to
|
||||
// manually trigger the logic for your custom detached dropdown here.
|
||||
// The code below should run when the dropdown toggle is clicked:
|
||||
const originalDropdown = event.target.closest('.btn-group').querySelector('.dropdown-menu');
|
||||
if (originalDropdown) {
|
||||
|
||||
// For edit functionality
|
||||
if (this.classList.contains('btnEdit')) {
|
||||
const id = this.getAttribute('data-id');
|
||||
const lead_form_type = this.getAttribute('data-ft');
|
||||
console.log('second drop lead_form_type', lead_form_type)
|
||||
if (id) {
|
||||
getLeadsDataForEdit(id, lead_form_type);
|
||||
}
|
||||
}else if (this.classList.contains('btnHistory')) {
|
||||
let lead_id = this.getAttribute('data-id');
|
||||
if(lead_id){ console.log("******** Clicked from td lead_id-", lead_id); getLeadsDataForMailHistory(lead_id); }
|
||||
else{ console.log("******** Clicked from td but i don`t have lead_id"); }
|
||||
|
||||
}
|
||||
else{
|
||||
const onclickAttr = this.getAttribute('onclick');
|
||||
if (onclickAttr) {
|
||||
eval(onclickAttr);
|
||||
}
|
||||
}
|
||||
|
||||
// For RFQ links
|
||||
const href = this.getAttribute('href');
|
||||
if (href && href !== '#' && !this.classList.contains('btnEdit')) {
|
||||
window.location.href = href;
|
||||
}
|
||||
|
||||
// Close the dropdown
|
||||
// This is the code that opens your custom dropdown
|
||||
if (activeDropdown) {
|
||||
activeDropdown.style.display = 'none';
|
||||
activeDropdown = null;
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
// Close dropdown when clicking outside
|
||||
document.addEventListener("click", function() {
|
||||
const rect = event.target.getBoundingClientRect();
|
||||
|
||||
customDropdown.style.display = 'block';
|
||||
customDropdown.style.position = 'fixed';
|
||||
customDropdown.style.left = `${rect.left}px`;
|
||||
customDropdown.style.top = `${rect.bottom + 5}px`;
|
||||
|
||||
activeDropdown = customDropdown;
|
||||
}
|
||||
|
||||
return; // Exit the row listener early
|
||||
}
|
||||
|
||||
// 2. Ignore clicks on the entire action column (your existing, good check)
|
||||
if (event.target.closest('td:last-child')) {
|
||||
return;
|
||||
}
|
||||
|
||||
// ... rest of your row logic for general row clicks ...
|
||||
|
||||
if (activeDropdown) {
|
||||
activeDropdown.style.display = 'none';
|
||||
activeDropdown = null;
|
||||
}
|
||||
|
||||
const rect = event.target.getBoundingClientRect();
|
||||
|
||||
customDropdown.style.display = 'block';
|
||||
customDropdown.style.position = 'fixed';
|
||||
customDropdown.style.left = `${rect.left}px`;
|
||||
customDropdown.style.top = `${rect.bottom + 5}px`;
|
||||
|
||||
activeDropdown = customDropdown;
|
||||
event.stopPropagation(); // Only needed if there is a parent handler
|
||||
});
|
||||
|
||||
document.addEventListener("click", function(e) {
|
||||
if (e.target.closest(".btnHistory")) {
|
||||
let lead_id = e.target.closest(".btnHistory").dataset.id;
|
||||
console.log("******** in triple dot id available - " + lead_id);
|
||||
getLeadsDataForMailHistory(lead_id);
|
||||
}
|
||||
else{ console.log("******** in triple dot but id not available"); }
|
||||
// Handle clicks on dropdown items
|
||||
customDropdown.querySelectorAll('.dropdown-item').forEach(item => {
|
||||
item.addEventListener('click', function(e) {
|
||||
console.log("##############");
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
|
||||
// Get the data-id and other attributes from the original button
|
||||
const originalItem = row.querySelector(`.dropdown-item[data-id="${this.getAttribute('data-id')}"]`);
|
||||
|
||||
// For edit functionality
|
||||
if (this.classList.contains('btnEdit')) {
|
||||
const id = this.getAttribute('data-id');
|
||||
const lead_form_type = this.getAttribute('data-ft');
|
||||
console.log('second drop lead_form_type', lead_form_type)
|
||||
if (id) {
|
||||
getLeadsDataForEdit(id, lead_form_type);
|
||||
}
|
||||
}else if (this.classList.contains('btnHistory')) {
|
||||
let lead_id = this.getAttribute('data-id');
|
||||
if(lead_id){ console.log("******** Clicked from td lead_id-", lead_id); getLeadsDataForMailHistory(lead_id); }
|
||||
else{ console.log("******** Clicked from td but i don`t have lead_id"); }
|
||||
|
||||
}
|
||||
else{
|
||||
const onclickAttr = this.getAttribute('onclick');
|
||||
if (onclickAttr) {
|
||||
eval(onclickAttr);
|
||||
}
|
||||
}
|
||||
|
||||
// For RFQ links
|
||||
const href = this.getAttribute('href');
|
||||
if (href && href !== '#' && !this.classList.contains('btnEdit')) {
|
||||
window.location.href = href;
|
||||
}
|
||||
|
||||
// Close the dropdown
|
||||
if (activeDropdown) {
|
||||
activeDropdown.style.display = 'none';
|
||||
activeDropdown = null;
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
// Close dropdown when clicking outside
|
||||
document.addEventListener("click", function() {
|
||||
if (activeDropdown) {
|
||||
activeDropdown.style.display = 'none';
|
||||
activeDropdown = null;
|
||||
}
|
||||
});
|
||||
|
||||
document.addEventListener("click", function(e) {
|
||||
if (e.target.closest(".btnHistory")) {
|
||||
let lead_id = e.target.closest(".btnHistory").dataset.id;
|
||||
console.log("******** in triple dot id available - " + lead_id);
|
||||
getLeadsDataForMailHistory(lead_id);
|
||||
}
|
||||
else{ console.log("******** in triple dot but id not available"); }
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
</script>
|
||||
|
||||
<script>
|
||||
|
||||
// Datatable document ready
|
||||
$(document).ready(function() {
|
||||
|
||||
@ -504,141 +534,143 @@ document.addEventListener("DOMContentLoaded", function () {
|
||||
|
||||
function getLeadsDataForMailHistory(lead_id){
|
||||
|
||||
console.log("******** Inside Fnz :", lead_id);
|
||||
let url = '<?= base_url('/util/getLeadEmailHistory/') ?>' + lead_id;
|
||||
console.log("******** Fetching:", url);
|
||||
console.log("******** Inside Fnz :", lead_id);
|
||||
let url = '<?= base_url('/util/getLeadEmailHistory/') ?>' + lead_id;
|
||||
console.log("******** Fetching:", url);
|
||||
|
||||
fetch(url, {
|
||||
method: "GET",
|
||||
headers: { "Accept": "application/json" }
|
||||
})
|
||||
.then(response => response.json())
|
||||
.then(response => {
|
||||
let container = document.querySelector(".history-container");
|
||||
container.innerHTML = "";
|
||||
if (response.status === "success" && response.data.length > 0) {
|
||||
console.log("******** 1" + response.status);
|
||||
let table = `
|
||||
<div class="table-responsive">
|
||||
<table data-custom-table-css="table" id="historytable" class="table table-striped mb-0 nowrap" cellspacing="0" id="tickets-table">
|
||||
fetch(url, {
|
||||
method: "GET",
|
||||
headers: { "Accept": "application/json" }
|
||||
})
|
||||
.then(response => response.json())
|
||||
.then(response => {
|
||||
let container = document.querySelector(".history-container");
|
||||
container.innerHTML = "";
|
||||
if (response.status === "success" && response.data.length > 0) {
|
||||
console.log("******** 1" + response.status);
|
||||
let table = `
|
||||
<div class="table-responsive">
|
||||
<table data-custom-table-css="table" id="historytable" class="table table-striped mb-0 nowrap" cellspacing="0" id="tickets-table">
|
||||
|
||||
<thead class="bg-light">
|
||||
<tr>
|
||||
<th><div class="column-header">S.No </div></th>
|
||||
<th><div class="column-header">From Mail </div></th>
|
||||
<th><div class="column-header">To Mail </div></th>
|
||||
<th><div class="column-header">BCC </div></th>
|
||||
<th><div class="column-header">CC </div></th>
|
||||
<th><div class="column-header">Type </div></th>
|
||||
<th><div class="column-header">Status </div></th>
|
||||
<th><div class="column-header">Date/Time </div></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
`;
|
||||
<thead class="bg-light">
|
||||
<tr>
|
||||
<th><div class="column-header">S.No </div></th>
|
||||
<th><div class="column-header">From Mail </div></th>
|
||||
<th><div class="column-header">To Mail </div></th>
|
||||
<th><div class="column-header">BCC </div></th>
|
||||
<th><div class="column-header">CC </div></th>
|
||||
<th><div class="column-header">Type </div></th>
|
||||
<th><div class="column-header">Status </div></th>
|
||||
<th><div class="column-header">Date/Time </div></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
`;
|
||||
|
||||
response.data.forEach((row, index) => {
|
||||
let formattedDate = "-";
|
||||
let statusValue = "-";
|
||||
if (row.received_message) {
|
||||
if (row.received_message.toLowerCase().includes("error")) {
|
||||
statusValue = "Failed";
|
||||
} else {
|
||||
statusValue = "Success";
|
||||
}
|
||||
}
|
||||
if (row.created_at) {
|
||||
let dt = new Date(row.created_at);
|
||||
let dateStr = dt.toLocaleDateString("en-GB", {
|
||||
day: "2-digit",
|
||||
month: "long",
|
||||
year: "numeric"
|
||||
});
|
||||
let timeStr = dt.toLocaleTimeString("en-US", {
|
||||
hour: "2-digit",
|
||||
minute: "2-digit",
|
||||
hour12: true
|
||||
}).toLowerCase();
|
||||
formattedDate = `${dateStr} ${timeStr}`;
|
||||
}
|
||||
let fromMails = "-";
|
||||
if (row.from_mail) {
|
||||
fromMails = row.from_mail
|
||||
.split(",") // split by comma
|
||||
.map(m => m.trim().replace(/^"|"$/g, "")) // trim + remove quotes at start/end
|
||||
.filter(m => m !== "") // remo
|
||||
.join("<br>"); // join with line break
|
||||
}
|
||||
let toMails = "-";
|
||||
if (row.mail) {
|
||||
toMails = row.mail
|
||||
.split(",")
|
||||
.map(m => m.trim().replace(/^"|"$/g, ""))
|
||||
.filter(m => m !== "")
|
||||
.join("<br>");
|
||||
}
|
||||
let ccMails = "-";
|
||||
if (row.cc && row.cc.trim() !== "") {
|
||||
ccMails = row.cc
|
||||
.split(",")
|
||||
.map(m => m.trim().replace(/^"|"$/g, ""))
|
||||
.filter(m => m !== "")
|
||||
.join("<br>");
|
||||
}
|
||||
let bccMails = "-";
|
||||
if (row.bcc && row.bcc.trim() !== "") {
|
||||
bccMails = row.bcc
|
||||
.split(",")
|
||||
.map(m => m.trim().replace(/^"|"$/g, ""))
|
||||
.filter(m => m !== "")
|
||||
.join("<br>");
|
||||
}
|
||||
response.data.forEach((row, index) => {
|
||||
let formattedDate = "-";
|
||||
let statusValue = "-";
|
||||
if (row.received_message) {
|
||||
if (row.received_message.toLowerCase().includes("error")) {
|
||||
statusValue = "Failed";
|
||||
} else {
|
||||
statusValue = "Success";
|
||||
}
|
||||
}
|
||||
if (row.created_at) {
|
||||
let dt = new Date(row.created_at);
|
||||
let dateStr = dt.toLocaleDateString("en-GB", {
|
||||
day: "2-digit",
|
||||
month: "long",
|
||||
year: "numeric"
|
||||
});
|
||||
let timeStr = dt.toLocaleTimeString("en-US", {
|
||||
hour: "2-digit",
|
||||
minute: "2-digit",
|
||||
hour12: true
|
||||
}).toLowerCase();
|
||||
formattedDate = `${dateStr} ${timeStr}`;
|
||||
}
|
||||
let fromMails = "-";
|
||||
if (row.from_mail) {
|
||||
fromMails = row.from_mail
|
||||
.split(",") // split by comma
|
||||
.map(m => m.trim().replace(/^"|"$/g, "")) // trim + remove quotes at start/end
|
||||
.filter(m => m !== "") // remo
|
||||
.join("<br>"); // join with line break
|
||||
}
|
||||
let toMails = "-";
|
||||
if (row.mail) {
|
||||
toMails = row.mail
|
||||
.split(",")
|
||||
.map(m => m.trim().replace(/^"|"$/g, ""))
|
||||
.filter(m => m !== "")
|
||||
.join("<br>");
|
||||
}
|
||||
let ccMails = "-";
|
||||
if (row.cc && row.cc.trim() !== "") {
|
||||
ccMails = row.cc
|
||||
.split(",")
|
||||
.map(m => m.trim().replace(/^"|"$/g, ""))
|
||||
.filter(m => m !== "")
|
||||
.join("<br>");
|
||||
}
|
||||
let bccMails = "-";
|
||||
if (row.bcc && row.bcc.trim() !== "") {
|
||||
bccMails = row.bcc
|
||||
.split(",")
|
||||
.map(m => m.trim().replace(/^"|"$/g, ""))
|
||||
.filter(m => m !== "")
|
||||
.join("<br>");
|
||||
}
|
||||
|
||||
|
||||
table += `
|
||||
<tr>
|
||||
<td style="white-space: nowrap !important;">${index + 1}</td>
|
||||
<td style="white-space: nowrap !important;">${fromMails}</td>
|
||||
<td style="white-space: nowrap !important;">${toMails}</td>
|
||||
<td style="white-space: nowrap !important;">${bccMails ? bccMails : '-'}</td>
|
||||
<td style="white-space: nowrap !important;">${ccMails ? ccMails : '-'}</td>
|
||||
<td style="white-space: nowrap !important;">${row.mail_type ? row.mail_type.toUpperCase() : '-'}</td>
|
||||
<td style="white-space: nowrap !important;">${statusValue ? statusValue.toUpperCase() : '-'}</td>
|
||||
<td style="white-space: nowrap !important;">${formattedDate}</td>
|
||||
</tr>
|
||||
`;
|
||||
});
|
||||
|
||||
table += `</tbody></table>`;
|
||||
container.innerHTML = table;
|
||||
// show modal (if using Bootstrap 5)
|
||||
} else {
|
||||
|
||||
container.innerHTML = `
|
||||
<div class="d-flex justify-content-center align-items-center" style="height: 50vh; width:100%;">
|
||||
<p class="text-center font-color-black"><i>${response.message ?? "No History Available"}</i></p>
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
// Show modal always
|
||||
new bootstrap.Modal(document.getElementById("EmailModal")).show();
|
||||
|
||||
})
|
||||
.catch(error => {
|
||||
console.log("******** 3" + error);
|
||||
document.querySelector(".history-container").innerHTML = `
|
||||
<div class="d-flex justify-content-center align-items-center" style="height: 50vh; width:100%;">
|
||||
<p class="text-center font-color-black"><i>No Data Found</i></p>
|
||||
</div>
|
||||
`;
|
||||
let EmailModal = new bootstrap.Modal(document.getElementById("EmailModal"));
|
||||
EmailModal.show();
|
||||
console.error(error);
|
||||
table += `
|
||||
<tr>
|
||||
<td style="white-space: nowrap !important;">${index + 1}</td>
|
||||
<td style="white-space: nowrap !important;">${fromMails}</td>
|
||||
<td style="white-space: nowrap !important;">${toMails}</td>
|
||||
<td style="white-space: nowrap !important;">${bccMails ? bccMails : '-'}</td>
|
||||
<td style="white-space: nowrap !important;">${ccMails ? ccMails : '-'}</td>
|
||||
<td style="white-space: nowrap !important;">${row.mail_type ? row.mail_type.toUpperCase() : '-'}</td>
|
||||
<td style="white-space: nowrap !important;">${statusValue ? statusValue.toUpperCase() : '-'}</td>
|
||||
<td style="white-space: nowrap !important;">${formattedDate}</td>
|
||||
</tr>
|
||||
`;
|
||||
});
|
||||
}
|
||||
|
||||
table += `</tbody></table>`;
|
||||
container.innerHTML = table;
|
||||
// show modal (if using Bootstrap 5)
|
||||
} else {
|
||||
|
||||
container.innerHTML = `
|
||||
<div class="d-flex justify-content-center align-items-center" style="height: 50vh; width:100%;">
|
||||
<p class="text-center font-color-black"><i>${response.message ?? "No History Available"}</i></p>
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
// Show modal always
|
||||
new bootstrap.Modal(document.getElementById("EmailModal")).show();
|
||||
|
||||
})
|
||||
.catch(error => {
|
||||
console.log("******** 3" + error);
|
||||
document.querySelector(".history-container").innerHTML = `
|
||||
<div class="d-flex justify-content-center align-items-center" style="height: 50vh; width:100%;">
|
||||
<p class="text-center font-color-black"><i>No Data Found</i></p>
|
||||
</div>
|
||||
`;
|
||||
let EmailModal = new bootstrap.Modal(document.getElementById("EmailModal"));
|
||||
EmailModal.show();
|
||||
console.error(error);
|
||||
});
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<script>
|
||||
|
||||
function selectOption(element, radioId) {
|
||||
// Remove selected class from all options
|
||||
document.querySelectorAll('.radio-option').forEach(option => {
|
||||
|
||||
98
app/Views/mail_template.php
Normal file
98
app/Views/mail_template.php
Normal file
@ -0,0 +1,98 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Email Notification</title>
|
||||
</head>
|
||||
|
||||
<style>
|
||||
|
||||
.mail-template-header {
|
||||
max-width: 500px;
|
||||
background-color: #ffffff !important;
|
||||
border-bottom: 1px solid #00999E;
|
||||
width: 100%; /* default: allow full width */
|
||||
}
|
||||
|
||||
/* On screens smaller than 600px → force 100% */
|
||||
@media screen and (max-width: 600px) {
|
||||
.mail-template-header {
|
||||
background-color: #ffffff !important;
|
||||
max-width: 100% !important;
|
||||
width: 100% !important;
|
||||
}
|
||||
}
|
||||
|
||||
.mail-template-footer {
|
||||
max-width: 500px;
|
||||
background-color: #ffffff !important;
|
||||
border-top: 1px solid #00999E;
|
||||
width: 100%; /* default: allow full width */
|
||||
}
|
||||
|
||||
/* On screens smaller than 600px → force 100% */
|
||||
@media screen and (max-width: 600px) {
|
||||
.mail-template-footer {
|
||||
background-color: #ffffff !important;
|
||||
max-width: 100% !important;
|
||||
width: 100% !important;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
</style>
|
||||
|
||||
|
||||
|
||||
<body>
|
||||
<!-- header -->
|
||||
<div align="center">
|
||||
<table width="100%" border="0" cellspacing="0" cellpadding="0" class="mail-template-header">
|
||||
<tr style="height:90px; background-color: #ffffff !important;">
|
||||
<td align="left" valign="middle" style="padding:20px;" width="50%">
|
||||
<img src="<?= $client_logo?>"
|
||||
alt="Client Logo"
|
||||
style="max-height:80px; max-width: 160px;">
|
||||
</td>
|
||||
<td align="right" valign="middle" style="padding:20px;" width="50%">
|
||||
<img src="<?= base_url('/public/assets/images/Nhance-Logo-Final.png'); ?>"
|
||||
alt="Default Logo"
|
||||
style="height:auto; max-width: 120px;">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- mail content -->
|
||||
|
||||
<?php
|
||||
echo $mail_content;
|
||||
?>
|
||||
|
||||
|
||||
|
||||
<!-- footer -->
|
||||
<div align="center">
|
||||
<table width="100%" border="0" cellspacing="0" cellpadding="0" class="mail-template-footer">
|
||||
<tr style="background-color: #ffffff !important;">
|
||||
<td align="center" valign="middle" style="padding-top:5px;">
|
||||
<img src="<?= base_url('/public/assets/images/Nhance-Logo-Final.png'); ?>"
|
||||
alt="Default Logo"
|
||||
style="height:auto; max-width: 120px;padding-top:5px;">
|
||||
<p>
|
||||
© <?= date('Y'); ?> Nhance India Insurance Broking Pvt Ltd
|
||||
</p>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
||||
|
||||
@ -868,7 +868,6 @@
|
||||
$('.branchdiv').show();
|
||||
$('#table_tr_34').show();
|
||||
$('#table_tr_37').show();
|
||||
|
||||
}
|
||||
|
||||
console.log('selectedClientType', selectedClientType);
|
||||
@ -895,10 +894,12 @@
|
||||
|
||||
}
|
||||
|
||||
$('#client_policy_id').empty().append($('<option>', {
|
||||
value: '',
|
||||
text: 'Select Policy'
|
||||
}))
|
||||
if(selectedClientType == 1){
|
||||
$('#client_policy_id').empty().append($('<option>', {
|
||||
value: '',
|
||||
text: 'Select Policy'
|
||||
}));
|
||||
}
|
||||
|
||||
// Initialize or refresh Select2 for both dropdowns
|
||||
$('#client_id').select2();
|
||||
@ -975,8 +976,8 @@
|
||||
}
|
||||
|
||||
$('#policy_tranction_primarykey').val(res.data.id);
|
||||
$('#client_type').val(res.data.client_type).trigger('change');
|
||||
$('#client_id').val(res.data.client_id).change();
|
||||
$('#client_type').val(res.data.client_type);
|
||||
$('#base_cd_amount').val(res.data.base_cd_amount);
|
||||
|
||||
var tpaValue = '';
|
||||
@ -985,16 +986,26 @@
|
||||
}
|
||||
$('#tpa').val(tpaValue).change();
|
||||
|
||||
|
||||
setTimeout(function(){
|
||||
$('.loader').fadeOut();
|
||||
$('.loader-mask').delay(350).fadeOut('slow');
|
||||
$('#client_branch_id').val(res.data.client_branch_id).change();
|
||||
$('#client_policy_id').val(res.pt_id).select2();
|
||||
$('#client_branch_id').val(res.data.client_branch_id).select2();
|
||||
// $('#client_policy_id').val(res.pt_id).select2();
|
||||
}, 1000)
|
||||
|
||||
if(res.data.client_type == 2){
|
||||
let data1 = policyListByClient[res.data.client_id];
|
||||
appendPolicies(data1, res.pt_id);
|
||||
}else{
|
||||
let data2 = policy_list[res.data.client_branch_id];
|
||||
appendPolicies(data2, res.pt_id);
|
||||
}
|
||||
|
||||
setTimeout(function(){
|
||||
$('#policy_start_date').val(res.data.policy_start_date);
|
||||
$('#policy_end_date').val(res.data.policy_end_date);
|
||||
$('#insurer_id').val(res.data.insurer_branch_id + '-' + res.data.insurer_id);
|
||||
}, 1500)
|
||||
|
||||
$('#policy_no').val(res.data.policy_no);
|
||||
@ -1042,6 +1053,16 @@
|
||||
addInsurerColumn();
|
||||
}
|
||||
|
||||
if (res.data.client_type == 2) {
|
||||
$('.branchdiv').hide();
|
||||
$('#table_tr_34').hide();
|
||||
$('#table_tr_37').hide();
|
||||
} else {
|
||||
$('.branchdiv').show();
|
||||
$('#table_tr_34').show();
|
||||
$('#table_tr_37').show();
|
||||
}
|
||||
|
||||
// if(res.data.policy_type_id == 1 || res.data.policy_type_id == 2 || res.data.policy_type_id == 3 || res.data.policy_type_id == 4 || res.data.policy_type_id == 5 || res.data.policy_type_id == 6 || res.data.policy_type_id == 7){
|
||||
// $('#is_cd_reduce_from_bds').prop('disabled',true).prop('checked', false);
|
||||
// }else{
|
||||
@ -1327,15 +1348,39 @@
|
||||
// $('#co_ter_premium_' + input).val(cotep.toFixed(2));
|
||||
// }
|
||||
|
||||
function checkAndDistributeTax(input)
|
||||
{
|
||||
function checkAndDistributeTax(input){
|
||||
|
||||
const event = window.event;
|
||||
console.log("Event id:", event.target.id);
|
||||
|
||||
let policy_type_id = $('#client_policy_id').find('option:selected').attr('data-ptid');
|
||||
policy_type_id = parseInt(policy_type_id);
|
||||
console.log('policy_type_id', policy_type_id);
|
||||
|
||||
let cgst = parseFloat($('#cgst_' + input).val());
|
||||
let sgst = parseFloat($('#sgst_' + input).val());
|
||||
let igst = parseFloat($('#igst_' + input).val());
|
||||
|
||||
// ✅ Allow 0 only for policy types 2, 5, 7
|
||||
const allowZero = [1,2,3,4,5,6,7,38,39,40].includes(policy_type_id);
|
||||
console.log("allowZero", allowZero);
|
||||
|
||||
// 🔒 Validation: Disallow 0 or negative values for other policy types
|
||||
if (!allowZero) {
|
||||
if ((cgst <= 0 && (event.target.id).startsWith('cgst')) ||
|
||||
(sgst <= 0 && (event.target.id).startsWith('sgst')) ||
|
||||
(igst <= 0 && (event.target.id).startsWith('igst'))) {
|
||||
|
||||
toastr.warning('Tax value must be greater than 0 for this policy type.');
|
||||
$('#'+ event.target.id).val('');
|
||||
$('#igst_' + input).val('');
|
||||
$('#cgst_' + input).val('');
|
||||
$('#sgst_' + input).val('');
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (((event.target.id).startsWith('cgst'))) {
|
||||
|
||||
if (!isFinite(cgst) || isNaN(cgst) || cgst === undefined) {
|
||||
|
||||
@ -692,7 +692,7 @@ table.dataTable thead th {
|
||||
});
|
||||
}
|
||||
|
||||
function appendPolicies(data) {
|
||||
function appendPolicies(data, policy_id=null) {
|
||||
if (!data) {
|
||||
|
||||
toastr.warning("There are no policies in Inception for the selected client and branch.");
|
||||
@ -724,6 +724,11 @@ table.dataTable thead th {
|
||||
'data-tpa': item.tpa_branch_id + '-' + item.tpa_id,
|
||||
'data-ptid': item.policy_type_id,
|
||||
});
|
||||
|
||||
if (policy_id == item.id) {
|
||||
option.attr('selected', true);
|
||||
}
|
||||
|
||||
$('#client_policy_id').append(option);
|
||||
});
|
||||
}
|
||||
|
||||
@ -2322,13 +2322,37 @@
|
||||
// }
|
||||
|
||||
function checkAndDistributeTax(input){
|
||||
|
||||
const event = window.event;
|
||||
console.log("Event id:", event.target.id);
|
||||
|
||||
let policy_type_id = parseInt($('#policy_type_id').val());
|
||||
console.log('policy_type_id', policy_type_id);
|
||||
|
||||
let cgst = parseFloat($('#cgst_' + input).val());
|
||||
let sgst = parseFloat($('#sgst_' + input).val());
|
||||
let igst = parseFloat($('#igst_' + input).val());
|
||||
|
||||
// ✅ Allow 0 only for policy types 2, 5, 7
|
||||
const allowZero = [1,2,3,4,5,6,7,38,39,40].includes(policy_type_id);
|
||||
console.log("allowZero", allowZero);
|
||||
|
||||
// 🔒 Validation: Disallow 0 or negative values for other policy types
|
||||
if (!allowZero) {
|
||||
if ((cgst <= 0 && (event.target.id).startsWith('cgst')) ||
|
||||
(sgst <= 0 && (event.target.id).startsWith('sgst')) ||
|
||||
(igst <= 0 && (event.target.id).startsWith('igst'))) {
|
||||
|
||||
toastr.warning('Tax value must be greater than 0 for this policy type.');
|
||||
$('#'+ event.target.id).val('');
|
||||
$('#igst_' + input).val('');
|
||||
$('#cgst_' + input).val('');
|
||||
$('#sgst_' + input).val('');
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (((event.target.id).startsWith('cgst'))) {
|
||||
|
||||
if (!isFinite(cgst) || isNaN(cgst) || cgst === undefined) {
|
||||
@ -3398,10 +3422,12 @@
|
||||
text: 'Select CD No',
|
||||
}));
|
||||
|
||||
$('#cd_ac_no_'+unique_id).append($('<option>', {
|
||||
value: 'add_cd',
|
||||
text: '+ Add CD'
|
||||
}));
|
||||
if(data.length == 0){
|
||||
$('#cd_ac_no_'+unique_id).append($('<option>', {
|
||||
value: 'add_cd',
|
||||
text: '+ Add CD'
|
||||
}));
|
||||
}
|
||||
|
||||
$.each(data, function(index, item) {
|
||||
var option = $('<option>', {
|
||||
|
||||
@ -79,8 +79,9 @@ table.dataTable tbody td {
|
||||
<thead class="bg-light">
|
||||
<tr>
|
||||
<th>S. No</th>
|
||||
<th style="display: none;">User</th>
|
||||
<th>User</th>
|
||||
<th>Month</th>
|
||||
<th style="display: none;">statement upload</th>
|
||||
<!-- <th style="display: none;">Business Type</th> -->
|
||||
<th style="display: none;">Client Type</th>
|
||||
<th>Insured Name</th>
|
||||
@ -92,12 +93,17 @@ table.dataTable tbody td {
|
||||
<th>Endorsement No</th>
|
||||
<!-- <th style="display: none;">Insurer Name</th> -->
|
||||
<th>Insurer Branch</th>
|
||||
|
||||
|
||||
<!-- <th style="display: none;">TPA</th> -->
|
||||
<th style="display: none;">Endorsement <br> Effective Date</th>
|
||||
<th style="display: none;">Policy <br> Effective Date</th>
|
||||
<th style="display: none;">Policy <br> Expiry Date</th>
|
||||
<th style="display: none;">Reference</th>
|
||||
<th style="display: none;">Remarks</th>
|
||||
|
||||
|
||||
|
||||
<th>BP Premium</th>
|
||||
<th>TP/Ter Premium</th>
|
||||
<th style="display: none;">Premium <br> (without GST)</th>
|
||||
@ -105,7 +111,7 @@ table.dataTable tbody td {
|
||||
<th>Total Premium</th>
|
||||
<th>BP %</th>
|
||||
<th>TP/Ter %</th>
|
||||
<th style="display: none;">Rewards</th>
|
||||
<th>Rewards</th>
|
||||
<th>Agreed Amount</th>
|
||||
<th>Invoiced Amount</th>
|
||||
<th>Outstanding Amount</th>
|
||||
@ -113,8 +119,91 @@ table.dataTable tbody td {
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php if (isset($report_list)) { ?>
|
||||
<?php foreach($report_list as $index => $row){ ?>
|
||||
<?php if (isset($report_list)) {
|
||||
|
||||
// empty array to initialize for policies per insurer per month
|
||||
|
||||
$uniquePoliciesReport = [];
|
||||
|
||||
// irrespective of months or multiple months
|
||||
$uniqueAgreedAmountList = [];
|
||||
|
||||
|
||||
|
||||
?>
|
||||
|
||||
|
||||
|
||||
<?php
|
||||
|
||||
foreach($report_list as $index => $row){
|
||||
|
||||
$policy_no = $row['policy_no'];
|
||||
|
||||
$policy_updated_month = $row['policy_issue_month'];
|
||||
|
||||
$policy_type = $row['policy_type'];
|
||||
|
||||
$statement_status = $row['statement_uploaded'];
|
||||
|
||||
$client_name = $row['client_name'];
|
||||
|
||||
$insurer_branch_name = $row['insurer_branch_name'];
|
||||
|
||||
|
||||
|
||||
$uniqueRecord = "$policy_no-$policy_updated_month-$policy_type-$client_name-$insurer_branch_name" ;
|
||||
|
||||
// irrespective of months or multiple months
|
||||
$uniqueAgreedAmountPerInsurer = "$policy_no-$policy_type-$client_name-$insurer_branch_name" ;
|
||||
|
||||
|
||||
|
||||
if(isset($uniquePoliciesReport[$uniqueRecord]) && $statement_status == "no statement uploaded" ){
|
||||
continue ;
|
||||
}
|
||||
else if(isset($uniquePoliciesReport[$uniqueRecord]) && $statement_status == "statement uploaded" ){
|
||||
unset($uniquePoliciesReport[$uniqueRecord]);
|
||||
}else{
|
||||
|
||||
if(isset($uniqueAgreedAmountList[$uniqueAgreedAmountPerInsurer]) ){
|
||||
$uniqueAgreedAmountList[$uniqueAgreedAmountPerInsurer] -= $row['billed_amt'];
|
||||
$row['total_irda_amt'] = 0;
|
||||
$row['outstanding_amt'] = $uniqueAgreedAmountList[$uniqueAgreedAmountPerInsurer];
|
||||
$row['multiple_months'] = true;
|
||||
}
|
||||
else{
|
||||
$row['outstanding_amt'] = $row['total_irda_amt'] - $row['billed_amt'];
|
||||
$uniqueAgreedAmountList[$uniqueAgreedAmountPerInsurer] = $row['total_irda_amt'] ;
|
||||
$row['multiple_months'] = false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
$uniquePoliciesReport[$uniqueRecord] = $row;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
$report_list = array_values($uniquePoliciesReport);
|
||||
|
||||
?>
|
||||
|
||||
|
||||
|
||||
<?php foreach($report_list as $index => $row){
|
||||
|
||||
?>
|
||||
<tr>
|
||||
<td><?= $index + 1 ?> <a href="<?php
|
||||
if($row['action_type'] == "inception"){
|
||||
@ -123,8 +212,9 @@ table.dataTable tbody td {
|
||||
echo base_url('policy_tranction/endorsement/list') . '?pt_id=' . $row['id'] ;
|
||||
}
|
||||
?>" class="mdi mdi-pencil" ></a> </td>
|
||||
<td style="display: none;"><?php echo $row['user_name'] ?: 'N/A'; ?></td>
|
||||
<td ><?php echo $row['statement_uploaded'] == 'statement uploaded' && $row['multiple_months'] == true ? 'rewards': $row['user_name']??'N/A' ; ?></td>
|
||||
<td><?php echo $row['policy_issue_month'] ?: 'N/A'; ?></td>
|
||||
<td style="display: none;"><?php echo $row['statement_uploaded'] ?: 'N/A'; ?></td>
|
||||
<!-- <td style="display: none;"><?php echo $row['revenue_type'] ?: 'N/A'; ?></td> -->
|
||||
<td style="display: none;"><?php echo $row['client_type'] ?: 'N/A'; ?></td>
|
||||
<td><?php echo $row['client_name'] ?: 'N/A'; ?></td>
|
||||
@ -137,11 +227,16 @@ table.dataTable tbody td {
|
||||
<!-- <td style="display: none;"><?php echo $row['insurer_name'] ?: 'N/A'; ?> </td> -->
|
||||
<td><?php echo $row['insurer_branch_name'] ?: 'N/A'; ?></td>
|
||||
<!-- <td style="display: none;"><?php echo $row['tpa_name']; ?></td> -->
|
||||
|
||||
|
||||
<td style="display: none;"><?php echo empty($row['endorse_eff_date']) ? 'N/A' : date('d/m/Y', strtotime($row['endorse_eff_date'])) ?></td>
|
||||
<td style="display: none;"><?php echo empty($row['policy_start_date']) ? 'N/A' : date('d/m/Y', strtotime($row['policy_start_date'])); ?></td>
|
||||
<td style="display: none;"><?php echo empty($row['policy_end_date']) ? 'N/A' : date('d/m/Y', strtotime($row['policy_end_date'])); ?></td>
|
||||
<td style="display: none;"><?php echo $row['ref'] ?: 'N/A'; ?></td>
|
||||
<td style="display: none;"><?php echo $row['remarks'] ?: 'N/A'; ?></td>
|
||||
|
||||
|
||||
|
||||
<td class="right-align-input"><?php echo $row['bp_amt']; ?></td>
|
||||
<td class="right-align-input"><?php echo $row['tp_or_ter']; ?></td>
|
||||
<td class="right-align-input" style="display: none;"><?php echo $row['premium_wo_gst']; ?></td>
|
||||
@ -149,17 +244,13 @@ table.dataTable tbody td {
|
||||
<td class="right-align-input"><?php echo $row['total_premium']; ?></td>
|
||||
<td class="right-align-input"><?php echo $row['agreed_bp_per']; ?> %</td>
|
||||
<td class="right-align-input"><?php echo $row['agreed_tp_or_ter_per'];?> %</td>
|
||||
<td class="right-align-input" style="display: none;"><?php echo isset($row['reward']) ? $row['reward'] : '0.00'; ?></td>
|
||||
|
||||
<?php $total_irda_amt = empty($row['total_irda_amt']) ? $row['exp_amt'] : $row['total_irda_amt']; ?>
|
||||
<td class="right-align-input" onclick="showCoShareStatementDetails(this)" data-id="<?= $row['pt_id'] ?>"><?php echo $total_irda_amt; ?></td>
|
||||
<td class="right-align-input" ><?php echo isset($row['reward']) ? $row['reward'] : '0.00'; ?></td>
|
||||
<!-- Agreed Amount as total_irda_amt -->
|
||||
<td class="right-align-input" onclick="showCoShareStatementDetails(this)" data-id="<?= $row['pt_id'] ?>"><?php echo $row['total_irda_amt']; ?></td>
|
||||
<!-- invoiced amount as billed_amt -->
|
||||
<td class="right-align-input"><?php echo empty($row['billed_amt']) ? '0.00' : $row['billed_amt'] ?></td>
|
||||
<!-- <td class="right-align-input"><?php echo empty($row['unbilled_amt']) ? '0.00' : $row['unbilled_amt']?></td> -->
|
||||
<?php
|
||||
$unbilled_amt = $row['total_irda_amt'] - $row['billed_amt'];
|
||||
$unbilled_amt = $unbilled_amt == 0 && $row['billed_amt'] == 0 ? $total_irda_amt : $unbilled_amt ;
|
||||
?>
|
||||
<td class="right-align-input"><?php echo number_format((float)$unbilled_amt,2, '.', '')?></td>
|
||||
<!-- Outstanding Amount (Agreed amount - invoice amount) -->
|
||||
<td class="right-align-input"><?php echo number_format((float)$row['outstanding_amt'],2, '.', '')?></td>
|
||||
</tr>
|
||||
<?php } ?>
|
||||
<?php } ?>
|
||||
@ -394,7 +485,8 @@ $(document).ready(function() {
|
||||
$(sheet).find('sheetData').append(totalRow);
|
||||
},
|
||||
exportOptions: {
|
||||
orthogonal: 'sort'
|
||||
orthogonal: 'sort' ,
|
||||
columns: ':not(:eq(3))' // skip the same 4th column
|
||||
},
|
||||
customizeData: function (data) {
|
||||
for (var i = 0; i < data.body.length; i++) {
|
||||
|
||||
100
test.http
100
test.http
@ -1,100 +0,0 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
POST https://testtips.vidalhealthtpa.com:7443/mobilerest/vidalbrokerservices/submitClaim
|
||||
Authorization: Basic dmlkYWxicm9rZXJsb2dpbjp2aWRhbHN0YWdlQDEyMw==
|
||||
Cookie: JSESSIONID=678ofNbsfB8svK1lyV6rON3w.worker1
|
||||
Content-Type: multipart/form-data; boundary=WebApiBoundary
|
||||
|
||||
--WebApiBoundary
|
||||
Content-Disposition: form-data; name="username"
|
||||
|
||||
Web_api
|
||||
--WebApiBoundary
|
||||
Content-Disposition: form-data; name="password"
|
||||
|
||||
Web@api
|
||||
--WebApiBoundary
|
||||
Content-Disposition: form-data; name="policyNo"
|
||||
|
||||
CI/TEST/POLICY/123456
|
||||
--WebApiBoundary
|
||||
Content-Disposition: form-data; name="enrollmentId"
|
||||
|
||||
BLR-RG-H0351-043-0000002-A
|
||||
--WebApiBoundary
|
||||
Content-Disposition: form-data; name="typeOfClaim"
|
||||
|
||||
Main hospitalization claim
|
||||
--WebApiBoundary
|
||||
Content-Disposition: form-data; name="claimSubType"
|
||||
|
||||
Hospitalization
|
||||
--WebApiBoundary
|
||||
Content-Disposition: form-data; name="requestedAmount"
|
||||
|
||||
4500
|
||||
--WebApiBoundary
|
||||
Content-Disposition: form-data; name="ailmentType"
|
||||
|
||||
Non covid
|
||||
--WebApiBoundary
|
||||
Content-Disposition: form-data; name="admissionDate"
|
||||
|
||||
20-03-2025
|
||||
--WebApiBoundary
|
||||
Content-Disposition: form-data; name="dischargeDate"
|
||||
|
||||
23-03-2025
|
||||
--WebApiBoundary
|
||||
Content-Disposition: form-data; name="hospitalName"
|
||||
|
||||
A G HOSPITAL NEW
|
||||
--WebApiBoundary
|
||||
Content-Disposition: form-data; name="empanelmentNo"
|
||||
|
||||
HOS-PON-010427
|
||||
--WebApiBoundary
|
||||
Content-Disposition: form-data; name="documentType"
|
||||
|
||||
Claim
|
||||
--WebApiBoundary
|
||||
Content-Disposition: form-data; name="ailmentName"
|
||||
|
||||
Cold
|
||||
--WebApiBoundary
|
||||
Content-Disposition: form-data; name="hospitalAddress"
|
||||
|
||||
abc
|
||||
--WebApiBoundary
|
||||
Content-Disposition: form-data; name="hospitalState"
|
||||
|
||||
karnataka
|
||||
--WebApiBoundary
|
||||
Content-Disposition: form-data; name="hospitalCity"
|
||||
|
||||
bangalore
|
||||
--WebApiBoundary
|
||||
Content-Disposition: form-data; name="hospitalPinCode"
|
||||
|
||||
560036
|
||||
--WebApiBoundary
|
||||
Content-Disposition: form-data; name="hospitalPhoneNo"
|
||||
|
||||
7656879899
|
||||
--WebApiBoundary
|
||||
Content-Disposition: form-data; name="File"; filename="tracker.pdf"
|
||||
Content-Type: application/pdf
|
||||
|
||||
< ./C:\Users\jvadi\Downloads\Tickets - Business Show_ Chennai (India) (06_11_2025 14_00_00) - vadivel.pdf
|
||||
--WebApiBoundary--
|
||||
|
||||
|
||||
// claim
|
||||
|
||||
@ -24,6 +24,7 @@
|
||||
margin: 0 auto;
|
||||
table-layout: fixed;
|
||||
border-spacing: 5px 0;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.card {
|
||||
@ -49,7 +50,7 @@
|
||||
}
|
||||
|
||||
.logo-left img {
|
||||
width: 32px;
|
||||
width: 48px;
|
||||
height: 32px;
|
||||
}
|
||||
|
||||
@ -61,7 +62,7 @@
|
||||
|
||||
.logo-right img {
|
||||
width: 65px;
|
||||
height: auto;
|
||||
height: 32px;
|
||||
}
|
||||
|
||||
.card-body {
|
||||
@ -159,6 +160,14 @@
|
||||
font-size: 8px;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.card-header img[src=""],
|
||||
.card-header img:not([src]) {
|
||||
opacity: 0;
|
||||
visibility: hidden;
|
||||
display: none;
|
||||
}
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
@ -167,16 +176,16 @@
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<div class="logo-left">
|
||||
<img src="{INSURER_LOGO}" alt="Insurer logo">
|
||||
<img src="{INSURER_LOGO}" alt=" " onerror="this.style.visibility='hidden';">
|
||||
</div>
|
||||
<div class="logo-right">
|
||||
<img src="{TPA_LOGO}" alt="TPA logo">
|
||||
<img src="{TPA_LOGO}" alt=" " onerror="this.style.visibility='hidden';">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card-body">
|
||||
<div class="n-logo">
|
||||
<img src="{NHANCE_N_LOGO}" alt="N Logo">
|
||||
<img src="{NHANCE_N_LOGO}" alt=" " onerror="this.style.visibility='hidden';">
|
||||
</div>
|
||||
|
||||
<div class="details">
|
||||
@ -185,47 +194,47 @@
|
||||
<tr>
|
||||
<td class="detail-label">Policy Holder</td>
|
||||
<td class="detail-separator">:</td>
|
||||
<td class="detail-value">AMERICAN MEGATRENDS INTERNATIONAL INDIA PVT LTD</td>
|
||||
<td class="detail-value">{CLIENT_NAME}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="detail-label">Insurer</td>
|
||||
<td class="detail-separator">:</td>
|
||||
<td class="detail-value">The New India Assurance</td>
|
||||
<td class="detail-value">{INSURER_NAME}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="detail-label">TPA</td>
|
||||
<td class="detail-separator">:</td>
|
||||
<td class="detail-value">Mediassit</td>
|
||||
<td class="detail-value">{TPA_NAME}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="detail-label">Primary Insured</td>
|
||||
<td class="detail-separator">:</td>
|
||||
<td class="detail-value">Suganya A</td>
|
||||
<td class="detail-value">{SELF_NAME}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="detail-label">Beneficiary Name</td>
|
||||
<td class="detail-separator">:</td>
|
||||
<td class="detail-value">Suganya A</td>
|
||||
<td class="detail-value">{NAME}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="detail-label">Member ID</td>
|
||||
<td class="detail-separator">:</td>
|
||||
<td class="detail-value">4060881280</td>
|
||||
<td class="detail-value">{TPA_ID}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="detail-label">Employee Code</td>
|
||||
<td class="detail-separator">:</td>
|
||||
<td class="detail-value">9332</td>
|
||||
<td class="detail-value">{EMP_ID}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="detail-label">Relation</td>
|
||||
<td class="detail-separator">:</td>
|
||||
<td class="detail-value">Self</td>
|
||||
<td class="detail-value">{RELATION}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="detail-label">Policy Period</td>
|
||||
<td class="detail-separator">:</td>
|
||||
<td class="detail-value">1-Apr-2025 to 31-Mar-2026</td>
|
||||
<td class="detail-value">{POLICY_START_DATE} to {POLICY_DATE}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@ -237,16 +246,16 @@
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<div class="logo-left">
|
||||
<img src="{INSURER_LOGO}" alt="Insurer logo">
|
||||
<img src="{INSURER_LOGO}" alt=" " onerror="this.style.visibility='hidden';">
|
||||
</div>
|
||||
<div class="logo-right">
|
||||
<img src="{TPA_LOGO}" alt="TPA logo">
|
||||
<img src="{TPA_LOGO}" alt=" " onerror="this.style.visibility='hidden';">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card-body">
|
||||
<div class="n-logo">
|
||||
<img src="{NHANCE_N_LOGO}" alt="N Logo">
|
||||
<img src="{NHANCE_N_LOGO}" alt=" " onerror="this.style.visibility='hidden';">
|
||||
</div>
|
||||
|
||||
<div class="details">
|
||||
|
||||
Loading…
Reference in New Issue
Block a user