GWM : API rate filter added
This commit is contained in:
commit
f96f180e37
@ -120,3 +120,4 @@ FHPL_USER_NAME =
|
|||||||
FHPL_PASSWORD =
|
FHPL_PASSWORD =
|
||||||
FHPL_GRANT_TYPE =
|
FHPL_GRANT_TYPE =
|
||||||
|
|
||||||
|
METABASE_SECRET_KEY=
|
||||||
@ -22,6 +22,7 @@ $routes->get('/swagger', 'SwaggerController::index', ['filter' => 'authMVC']);
|
|||||||
$routes->get('/fedeploy', 'DeployController::fedeploy_view', ['filter' => 'authMVC']);
|
$routes->get('/fedeploy', 'DeployController::fedeploy_view', ['filter' => 'authMVC']);
|
||||||
$routes->post('/fedeploy', 'DeployController::fedeploy', ['filter' => 'authMVC']);
|
$routes->post('/fedeploy', 'DeployController::fedeploy', ['filter' => 'authMVC']);
|
||||||
$routes->get('/visitOffBoardCheck', 'EmployeeController::visitOffBoardCheck');
|
$routes->get('/visitOffBoardCheck', 'EmployeeController::visitOffBoardCheck');
|
||||||
|
$routes->get('/metaDashboardDemo', 'TestingController::metaDashboardDemo');
|
||||||
|
|
||||||
// Reminder Mail Notification
|
// Reminder Mail Notification
|
||||||
|
|
||||||
@ -36,7 +37,6 @@ $routes->get("view", "EmployeeController::viewECard/$1");
|
|||||||
$routes->get("checkWellnessOnboardStatus/(:any)", "EmployeeController::checkWellnessOnboardStatus/$1");
|
$routes->get("checkWellnessOnboardStatus/(:any)", "EmployeeController::checkWellnessOnboardStatus/$1");
|
||||||
$routes->get("initiateWellnessOnboard/(:any)", "EmployeeController::initiateWellnessOnboard/$1");
|
$routes->get("initiateWellnessOnboard/(:any)", "EmployeeController::initiateWellnessOnboard/$1");
|
||||||
$routes->get("exportQCRandRFQ/(:any)", "LeadsController::exportQCRandRFQ/$1");
|
$routes->get("exportQCRandRFQ/(:any)", "LeadsController::exportQCRandRFQ/$1");
|
||||||
$routes->get("smapletest", "ClientController::smapletest");
|
|
||||||
$routes->get("testMailAttachments", "ClientController::testMailAttachments");
|
$routes->get("testMailAttachments", "ClientController::testMailAttachments");
|
||||||
$routes->get("updatePolicyTermsKey", "ClientController::updatePolicyTermsKey");
|
$routes->get("updatePolicyTermsKey", "ClientController::updatePolicyTermsKey");
|
||||||
$routes->get("updateRemainderDate", "ClientController::updateRemainderDate");
|
$routes->get("updateRemainderDate", "ClientController::updateRemainderDate");
|
||||||
@ -216,6 +216,9 @@ $routes->group("/employee", ["filter" => "authMVC"], function ($routes) {
|
|||||||
$routes->post("retail-endorsement-save", "EmployeeController::retailendorsementsave");
|
$routes->post("retail-endorsement-save", "EmployeeController::retailendorsementsave");
|
||||||
$routes->get("getTPADataVariationReport/(:num)", "EmployeeController::getTPADataVariationReport/$1");
|
$routes->get("getTPADataVariationReport/(:num)", "EmployeeController::getTPADataVariationReport/$1");
|
||||||
$routes->get("bulkGenerateEcardAndStoreinS3", "EmployeeController::bulkGenerateEcardAndStoreinS3");
|
$routes->get("bulkGenerateEcardAndStoreinS3", "EmployeeController::bulkGenerateEcardAndStoreinS3");
|
||||||
|
$routes->get('clearCdSession', 'EmployeeController::clearCdSession');
|
||||||
|
$routes->get('checkSessionStatus', 'EmployeeController::checkSessionStatus');
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
@ -556,6 +559,10 @@ $routes->group("/api", ["filter" => [ 'ratelimit' , 'authJWT']], function ($rout
|
|||||||
|
|
||||||
$routes->get("getSSORedirectUrl", "ApiServiceController::getSSORedirectUrl");
|
$routes->get("getSSORedirectUrl", "ApiServiceController::getSSORedirectUrl");
|
||||||
$routes->get("getEmployeePolicy", "EmployeeRestController::getEmployeePolicy");
|
$routes->get("getEmployeePolicy", "EmployeeRestController::getEmployeePolicy");
|
||||||
|
$routes->get("downloadCdSplitUpFile", "EmployeeRestController::downloadCdSplitUpFile");
|
||||||
|
$routes->get("downloadFileTableFile/(:any)", "EmployeeController::downloadFileList/$1");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
$routes->group("employeeRest", ['filter' => ['ratelimit' , 'appSignature'] ], function ($routes) {
|
$routes->group("employeeRest", ['filter' => ['ratelimit' , 'appSignature'] ], function ($routes) {
|
||||||
|
|
||||||
@ -600,7 +607,7 @@ $routes->group("employeeRest", ['filter' => ['ratelimit' , 'appSignature'] ], fu
|
|||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
$routes->group("employeeRest", ["filter" => [ 'ratelimit' , 'appSignature' , 'authJWT']], function ($routes) {
|
$routes->group("employeeRest", ["filter" => ['GlobalPostFileUploadGuard', 'ratelimit' , 'appSignature', 'authJWT']], function ($routes) {
|
||||||
|
|
||||||
$routes->post('logout', 'RestAuthenticationController::logout');
|
$routes->post('logout', 'RestAuthenticationController::logout');
|
||||||
|
|
||||||
@ -652,6 +659,7 @@ $routes->group("employeeRest", ["filter" => [ 'ratelimit' , 'appSignature' , 'au
|
|||||||
$routes->get("hrFileDownload", "EmployeeRestController::hrFileDownload");
|
$routes->get("hrFileDownload", "EmployeeRestController::hrFileDownload");
|
||||||
$routes->post("hrFileUpload", "EmployeeRestController::hrFileUpload");
|
$routes->post("hrFileUpload", "EmployeeRestController::hrFileUpload");
|
||||||
$routes->post("updateHrFileUploadData", "EmployeeRestController::updateHrFileUploadData");
|
$routes->post("updateHrFileUploadData", "EmployeeRestController::updateHrFileUploadData");
|
||||||
|
$routes->post("getHrDashboad", "EmployeeRestController::getHrDashboad");
|
||||||
|
|
||||||
|
|
||||||
//thz_master's
|
//thz_master's
|
||||||
@ -682,7 +690,10 @@ $routes->group("employeeRest", ["filter" => [ 'ratelimit' , 'appSignature' , 'au
|
|||||||
|
|
||||||
// get insurer and policy type
|
// get insurer and policy type
|
||||||
$routes->get("getPolicyTypeAndInsurer", "EmployeeRestController::getPolicyTypeAndInsurer");
|
$routes->get("getPolicyTypeAndInsurer", "EmployeeRestController::getPolicyTypeAndInsurer");
|
||||||
|
$routes->get("getExcelFileErrors/(:any)", "EmployeeController::getExcelFileErrors/$1");
|
||||||
|
$routes->get("getPolicyAndEndorsementFiles", "EmployeeRestController::getPolicyAndEndorsementFiles");
|
||||||
|
$routes->get("downloadPolicyFiles", "EmployeeRestController::downloadPolicyFiles");
|
||||||
|
$routes->post("bulkEcardDownloadAsZip", "EmployeeRestController::bulkEcardDownloadAsZip");
|
||||||
});
|
});
|
||||||
|
|
||||||
$routes->get("hrFileDownload", "EmployeeRestController::hrFileDownload");
|
$routes->get("hrFileDownload", "EmployeeRestController::hrFileDownload");
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -209,24 +209,23 @@ class EmpDataServiceController extends BaseController
|
|||||||
//check CD amt insufficient only insurer, not tpa // DO NOT REMOVE THIS
|
//check CD amt insufficient only insurer, not tpa // DO NOT REMOVE THIS
|
||||||
if($export_data['insurer_or_tpa'] == 'insurer')
|
if($export_data['insurer_or_tpa'] == 'insurer')
|
||||||
{
|
{
|
||||||
if (!empty($cash_balance)) {
|
if ((int) $cash_balance['balance'] < (int) $totals) {
|
||||||
clear_cd_balance_session();
|
clear_cd_balance_session(); // Clear old junk first
|
||||||
if ((int) $cash_balance['balance'] == (int) $totals) {
|
|
||||||
$this->myLogger->logme('error', 'Inception export failed due to insufficient deposit amount.');
|
$cd_session_data = json_encode([
|
||||||
$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]);
|
'cd_balance' => false,
|
||||||
|
'cd_amount' => $cash_balance['balance'],
|
||||||
|
'excel_file_amt' => $totals
|
||||||
|
]);
|
||||||
|
|
||||||
$cd_session_data = json_encode(['cd_balance' => false, 'cd_amount' => $cash_balance['balance'], 'excel_file_amt' => $totals]);
|
|
||||||
session()->set('cd_balance_info', $cd_session_data);
|
session()->set('cd_balance_info', $cd_session_data);
|
||||||
session()->set('cd_balance', false);
|
session()->set('cd_balance', 'insufficient'); // Use a string status for clarity
|
||||||
|
|
||||||
$hr_data = $this->getHrdataForInsufficientMailSend($export_data['client_branch_id']);
|
$hr_data = $this->getHrdataForInsufficientMailSend($export_data['client_branch_id']);
|
||||||
$session_data = json_encode(['client_id' => $export_data['client_id'], 'hr_data' => $hr_data]);
|
session()->set('hr_data', json_encode(['client_id' => $export_data['client_id'], 'hr_data' => $hr_data]));
|
||||||
session()->set('hr_data', $session_data);
|
|
||||||
|
|
||||||
}else{
|
}else{
|
||||||
session()->set('cd_balance', true);
|
session()->set('cd_balance', 'sufficient'); // Use a string status for clarity
|
||||||
|
session()->set('cd_balance_info', null);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -735,17 +734,23 @@ class EmpDataServiceController extends BaseController
|
|||||||
if($export_data['insurer_or_tpa'] == 'insurer')
|
if($export_data['insurer_or_tpa'] == 'insurer')
|
||||||
{
|
{
|
||||||
if (!empty($cash_balance)) {
|
if (!empty($cash_balance)) {
|
||||||
if ((int) $cash_balance['balance'] < (int) $rounded_totals) {
|
if ((int) $cash_balance['balance'] < (int) $totals) {
|
||||||
$this->myLogger->logme('error', 'Inception export failed due to insufficient deposit amount.');
|
clear_cd_balance_session(); // Clear old junk first
|
||||||
$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]);
|
|
||||||
session()->set('cd_balance', false);
|
|
||||||
session()->set('cd_amount', $cash_balance['balance']);
|
|
||||||
session()->set('excel_file_amt', $rounded_totals);
|
|
||||||
}else{
|
|
||||||
session()->set('cd_balance', true);
|
|
||||||
session()->set('cd_amount', $cash_balance['balance']);
|
|
||||||
session()->set('excel_file_amt', $rounded_totals);
|
|
||||||
|
|
||||||
|
$cd_session_data = json_encode([
|
||||||
|
'cd_balance' => false,
|
||||||
|
'cd_amount' => $cash_balance['balance'],
|
||||||
|
'excel_file_amt' => $totals
|
||||||
|
]);
|
||||||
|
|
||||||
|
session()->set('cd_balance_info', $cd_session_data);
|
||||||
|
session()->set('cd_balance', 'insufficient'); // Use a string status for clarity
|
||||||
|
|
||||||
|
$hr_data = $this->getHrdataForInsufficientMailSend($export_data['client_branch_id']);
|
||||||
|
session()->set('hr_data', json_encode(['client_id' => $export_data['client_id'], 'hr_data' => $hr_data]));
|
||||||
|
}else{
|
||||||
|
session()->set('cd_balance', 'sufficient'); // Use a string status for clarity
|
||||||
|
session()->set('cd_balance_info', null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1067,16 +1072,22 @@ class EmpDataServiceController extends BaseController
|
|||||||
{
|
{
|
||||||
if (!empty($cash_balance)) {
|
if (!empty($cash_balance)) {
|
||||||
if ((int) $cash_balance['balance'] < (int) $totals) {
|
if ((int) $cash_balance['balance'] < (int) $totals) {
|
||||||
$this->myLogger->logme('error', 'Inception export failed due to insufficient deposit amount.');
|
clear_cd_balance_session(); // Clear old junk first
|
||||||
$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]);
|
|
||||||
session()->set('cd_balance', false);
|
|
||||||
session()->set('cd_amount', $cash_balance['balance']);
|
|
||||||
session()->set('excel_file_amt', $totals);
|
|
||||||
}else{
|
|
||||||
session()->set('cd_balance', true);
|
|
||||||
session()->set('cd_amount', $cash_balance['balance']);
|
|
||||||
session()->set('excel_file_amt', $totals);
|
|
||||||
|
|
||||||
|
$cd_session_data = json_encode([
|
||||||
|
'cd_balance' => false,
|
||||||
|
'cd_amount' => $cash_balance['balance'],
|
||||||
|
'excel_file_amt' => $totals
|
||||||
|
]);
|
||||||
|
|
||||||
|
session()->set('cd_balance_info', $cd_session_data);
|
||||||
|
session()->set('cd_balance', 'insufficient'); // Use a string status for clarity
|
||||||
|
|
||||||
|
$hr_data = $this->getHrdataForInsufficientMailSend($export_data['client_branch_id']);
|
||||||
|
session()->set('hr_data', json_encode(['client_id' => $export_data['client_id'], 'hr_data' => $hr_data]));
|
||||||
|
}else{
|
||||||
|
session()->set('cd_balance', 'sufficient'); // Use a string status for clarity
|
||||||
|
session()->set('cd_balance_info', null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2195,6 +2206,7 @@ class EmpDataServiceController extends BaseController
|
|||||||
'event_name' => $file['event_type'],
|
'event_name' => $file['event_type'],
|
||||||
'policy_name' => $policy_name['policy_name'],
|
'policy_name' => $policy_name['policy_name'],
|
||||||
'user_id' => $user_id,
|
'user_id' => $user_id,
|
||||||
|
'file_id' => $file_id,
|
||||||
]]);
|
]]);
|
||||||
|
|
||||||
$r = Jobs::addJob(['job_name' => 'makeEntryForBDSPolicyTransaction', 'payload' => [
|
$r = Jobs::addJob(['job_name' => 'makeEntryForBDSPolicyTransaction', 'payload' => [
|
||||||
@ -2218,7 +2230,7 @@ class EmpDataServiceController extends BaseController
|
|||||||
//send ecard mail if the event is tpa only
|
//send ecard mail if the event is tpa only
|
||||||
if ($file['insurer_or_tpa'] == 'tpa') {
|
if ($file['insurer_or_tpa'] == 'tpa') {
|
||||||
|
|
||||||
if ($get_policy_type['policy_type_id'] != 1) {
|
if (in_array($get_policy_type['policy_type_id'], [2, 3])) {
|
||||||
|
|
||||||
// generate e-card and store S3
|
// generate e-card and store S3
|
||||||
$r = Jobs::addJob(['job_name' => 'bulkGenerateEcardAndStoreinS3', 'payload' => ['client_policy_id' => $client_policy_id]]);
|
$r = Jobs::addJob(['job_name' => 'bulkGenerateEcardAndStoreinS3', 'payload' => ['client_policy_id' => $client_policy_id]]);
|
||||||
@ -2634,7 +2646,7 @@ class EmpDataServiceController extends BaseController
|
|||||||
'status' => $status_val,
|
'status' => $status_val,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
if($client_policy_data['policy_type_id'] != 1){
|
if(in_array($client_policy_data['policy_type_id'], [2, 3])){
|
||||||
// re-generate e-card and store S3
|
// re-generate e-card and store S3
|
||||||
$r = Jobs::addJob(['job_name' => 'bulkGenerateEcardAndStoreinS3', 'payload' => ['client_policy_id' => $client_policy_id]]);
|
$r = Jobs::addJob(['job_name' => 'bulkGenerateEcardAndStoreinS3', 'payload' => ['client_policy_id' => $client_policy_id]]);
|
||||||
}
|
}
|
||||||
@ -3378,6 +3390,7 @@ class EmpDataServiceController extends BaseController
|
|||||||
'event_name' => $file['event_type'],
|
'event_name' => $file['event_type'],
|
||||||
'policy_name' => $policy_name['policy_name'],
|
'policy_name' => $policy_name['policy_name'],
|
||||||
'user_id' => $user_id,
|
'user_id' => $user_id,
|
||||||
|
'file_id' => $file_id,
|
||||||
]]);
|
]]);
|
||||||
|
|
||||||
$r = Jobs::addJob(['job_name' => 'makeEntryForBDSPolicyTransaction', 'payload' => [
|
$r = Jobs::addJob(['job_name' => 'makeEntryForBDSPolicyTransaction', 'payload' => [
|
||||||
@ -3889,6 +3902,7 @@ class EmpDataServiceController extends BaseController
|
|||||||
'event_name' => $file['event_type'],
|
'event_name' => $file['event_type'],
|
||||||
'policy_name' => $policy_name['policy_name'],
|
'policy_name' => $policy_name['policy_name'],
|
||||||
'user_id' => $user_id,
|
'user_id' => $user_id,
|
||||||
|
'file_id' => $file_id,
|
||||||
]]);
|
]]);
|
||||||
|
|
||||||
$r = Jobs::addJob(['job_name' => 'makeEntryForBDSPolicyTransaction', 'payload' => [
|
$r = Jobs::addJob(['job_name' => 'makeEntryForBDSPolicyTransaction', 'payload' => [
|
||||||
@ -4373,7 +4387,8 @@ class EmpDataServiceController extends BaseController
|
|||||||
'updated_by' => $arrayData['user_id'],
|
'updated_by' => $arrayData['user_id'],
|
||||||
'event_name' => $arrayData['event_name'],
|
'event_name' => $arrayData['event_name'],
|
||||||
'is_active' => 1,
|
'is_active' => 1,
|
||||||
'cd_ac_pk' => $cd_ac_pk['cd_ac_pk']
|
'cd_ac_pk' => $cd_ac_pk['cd_ac_pk'],
|
||||||
|
'file_id' => $arrayData['file_id'],
|
||||||
];
|
];
|
||||||
|
|
||||||
$response = DepositHelper::saveDeposit($data, $arrayData['user_id']);
|
$response = DepositHelper::saveDeposit($data, $arrayData['user_id']);
|
||||||
@ -4510,7 +4525,8 @@ class EmpDataServiceController extends BaseController
|
|||||||
'updated_by' => $arrayData['user_id'],
|
'updated_by' => $arrayData['user_id'],
|
||||||
'event_name' => $arrayData['event_name'],
|
'event_name' => $arrayData['event_name'],
|
||||||
'is_active' => 1,
|
'is_active' => 1,
|
||||||
'cd_ac_pk' => $policy_data['cd_ac_pk']
|
'cd_ac_pk' => $policy_data['cd_ac_pk'],
|
||||||
|
'file_id' => $arrayData['file_id'],
|
||||||
];
|
];
|
||||||
|
|
||||||
DepositHelper::saveDeposit($data, $arrayData['user_id']);
|
DepositHelper::saveDeposit($data, $arrayData['user_id']);
|
||||||
@ -4540,7 +4556,8 @@ class EmpDataServiceController extends BaseController
|
|||||||
'updated_by' => $arrayData['user_id'],
|
'updated_by' => $arrayData['user_id'],
|
||||||
'event_name' => $arrayData['event_name'],
|
'event_name' => $arrayData['event_name'],
|
||||||
'is_active' => 1,
|
'is_active' => 1,
|
||||||
'cd_ac_pk' => $policy_data['cd_ac_pk']
|
'cd_ac_pk' => $policy_data['cd_ac_pk'],
|
||||||
|
'file_id' => $arrayData['file_id'],
|
||||||
];
|
];
|
||||||
|
|
||||||
DepositHelper::saveDeposit($data, $arrayData['user_id']);
|
DepositHelper::saveDeposit($data, $arrayData['user_id']);
|
||||||
@ -4652,7 +4669,8 @@ class EmpDataServiceController extends BaseController
|
|||||||
'updated_by' => $arrayData['user_id'],
|
'updated_by' => $arrayData['user_id'],
|
||||||
'event_name' => $arrayData['event_name'],
|
'event_name' => $arrayData['event_name'],
|
||||||
'is_active' => 1,
|
'is_active' => 1,
|
||||||
'cd_ac_pk' => $insurer_id['cd_ac_pk']
|
'cd_ac_pk' => $insurer_id['cd_ac_pk'],
|
||||||
|
'file_id' => $arrayData['file_id'],
|
||||||
];
|
];
|
||||||
|
|
||||||
$response = DepositHelper::saveDeposit($data, $arrayData['user_id']);
|
$response = DepositHelper::saveDeposit($data, $arrayData['user_id']);
|
||||||
@ -5418,7 +5436,7 @@ class EmpDataServiceController extends BaseController
|
|||||||
$this->myLogger->logme("error", "Policy transaction inserted successfully: " . json_encode(['insert_id' => $insert_id]));
|
$this->myLogger->logme("error", "Policy transaction inserted successfully: " . json_encode(['insert_id' => $insert_id]));
|
||||||
|
|
||||||
//do not remove this commented item
|
//do not remove this commented item
|
||||||
$coShareDetails = $this->ConstructPTShareData($policy_data, $insert_id, $params, $lead_data);
|
$coShareDetails = $this->ConstructPTShareData($policy_data, $insert_id, $params, $lead_data, $params['action_type']);
|
||||||
$pt_co_share_id = $this->PTCOShareDetailsModel->insert($coShareDetails);
|
$pt_co_share_id = $this->PTCOShareDetailsModel->insert($coShareDetails);
|
||||||
$this->myLogger->logme("error", "PT Co share data inserted successfully: " . json_encode(['pt_co_share_id' => $pt_co_share_id]));
|
$this->myLogger->logme("error", "PT Co share data inserted successfully: " . json_encode(['pt_co_share_id' => $pt_co_share_id]));
|
||||||
|
|
||||||
@ -5550,7 +5568,46 @@ class EmpDataServiceController extends BaseController
|
|||||||
return $policyTransactionData;
|
return $policyTransactionData;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function ConstructPTShareData($policy_data, $pt_id, $params, $lead_data)
|
private function ConstructPTShareData($policy_data, $pt_id, $params, $lead_data, $action_type)
|
||||||
|
{
|
||||||
|
$policyTypeModel = new PolicyTypeModel();
|
||||||
|
$policy_type_data = $policyTypeModel->where('is_active', 1)->where('id', $policy_data['policy_type_id'])->first();
|
||||||
|
|
||||||
|
// Determine if we should negate the values
|
||||||
|
$multiplier = (strtolower($action_type) === 'deletion') ? -1 : 1;
|
||||||
|
|
||||||
|
$coShareData = [
|
||||||
|
'pt_id' => $pt_id,
|
||||||
|
'insurer_id' => $policy_data['insurer_id'],
|
||||||
|
'insurer_branch_id' => $policy_data['insurer_branch_id'],
|
||||||
|
'bp_amt' => ($params['base_premium'] ?? 0) * $multiplier,
|
||||||
|
'cop_amt' => ($params['base_premium'] ?? 0) * $multiplier,
|
||||||
|
'bp_gst_amt' => ($params['gst'] ?? 0) * $multiplier,
|
||||||
|
'bp_sgst' => 9, // Usually tax percentages remain positive, but multiply if this is an amount
|
||||||
|
'bp_cgst' => 9,
|
||||||
|
'co_share_type' => 1,
|
||||||
|
'co_share_per' => 100,
|
||||||
|
'standerd_bp_per' => $policy_type_data['ebp'],
|
||||||
|
'pt_policy_issue_date' => $params['policy_issue_date'] ?? null,
|
||||||
|
'amount' => (($params['base_premium'] ?? 0) + ($params['gst'] ?? 0)) * $multiplier,
|
||||||
|
];
|
||||||
|
|
||||||
|
if(isset($policy_data['gst']) && $policy_data['gst'] != null){
|
||||||
|
$coShareData['bp_igst'] = $policy_data['gst'] ?? 0;
|
||||||
|
$coShareData['bp_sgst'] = 0;
|
||||||
|
$coShareData['bp_cgst'] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Calculate exp_amt logic
|
||||||
|
$agreed_per = $lead_data['agreed_percentage'] ?? $policy_type_data['ebp'] ?? 0;
|
||||||
|
$coShareData['exp_amt'] = ((($params['base_premium'] ?? 0) * $agreed_per) / 100) * $multiplier;
|
||||||
|
|
||||||
|
$this->myLogger->logme("error", "Constructed PT co-share data: " . json_encode($coShareData));
|
||||||
|
|
||||||
|
return $coShareData;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function ConstructPTShareDataOld($policy_data, $pt_id, $params, $lead_data, $action_type = null)
|
||||||
{
|
{
|
||||||
$policyTypeModel = new PolicyTypeModel();
|
$policyTypeModel = new PolicyTypeModel();
|
||||||
$policy_type_data = $policyTypeModel->where('is_active', 1)->where('id', $policy_data['policy_type_id'])->first();
|
$policy_type_data = $policyTypeModel->where('is_active', 1)->where('id', $policy_data['policy_type_id'])->first();
|
||||||
|
|||||||
@ -31,6 +31,7 @@ use App\Models\UserModel;
|
|||||||
use App\Models\PartnerEndorsementRequestModel;
|
use App\Models\PartnerEndorsementRequestModel;
|
||||||
use App\Models\TpaApiDataModel;
|
use App\Models\TpaApiDataModel;
|
||||||
use App\Models\LevelContactModel;
|
use App\Models\LevelContactModel;
|
||||||
|
use App\Models\NotificationModel;
|
||||||
|
|
||||||
|
|
||||||
use App\Controllers\Jobs;
|
use App\Controllers\Jobs;
|
||||||
@ -335,7 +336,7 @@ class EmployeeController extends AdminController
|
|||||||
//endof validation process
|
//endof validation process
|
||||||
if (isset($result['error_summary']) && count($result['error_summary'])) {
|
if (isset($result['error_summary']) && count($result['error_summary'])) {
|
||||||
if(!empty($post_data)){
|
if(!empty($post_data)){
|
||||||
return ['status' => true, 'message' => 'file rejected with errors', 'file_id' => $file_id];
|
return ['status' => false, 'message' => 'file rejected with errors', 'file_id' => $file_id];
|
||||||
}else{
|
}else{
|
||||||
return $this->respond(['dataStatus' => false, 'code' => 404, 'message' => 'file rejected with errors'], 200);
|
return $this->respond(['dataStatus' => false, 'code' => 404, 'message' => 'file rejected with errors'], 200);
|
||||||
}
|
}
|
||||||
@ -445,6 +446,7 @@ class EmployeeController extends AdminController
|
|||||||
batch_files.amount,
|
batch_files.amount,
|
||||||
batch_files.status,
|
batch_files.status,
|
||||||
batch_files.client_branch_id,
|
batch_files.client_branch_id,
|
||||||
|
DATE_FORMAT(batch_files.policy_issue_date, '%d/%m/%Y') AS policy_issue_date,
|
||||||
|
|
||||||
CASE
|
CASE
|
||||||
WHEN batch_files.status IN ('partially success', 'in-progress-partially', 'failed-7')
|
WHEN batch_files.status IN ('partially success', 'in-progress-partially', 'failed-7')
|
||||||
@ -484,6 +486,34 @@ class EmployeeController extends AdminController
|
|||||||
|
|
||||||
public function getExcelFileErrors($file_id, $retun_type = null)
|
public function getExcelFileErrors($file_id, $retun_type = null)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
$file_data = $this->fileModel->where('id', $file_id)->first();
|
||||||
|
$error = json_decode($file_data['reason'] ?? '{}', true);
|
||||||
|
if(!empty($error) && $retun_type == 'api'){
|
||||||
|
$send = isset($error['error_summary'][5]) || isset($error['error_summary'][6]) ? true : false;
|
||||||
|
if($send){
|
||||||
|
|
||||||
|
|
||||||
|
$string = $error['error_data'] ?? 'System error';
|
||||||
|
|
||||||
|
$errorMap = [
|
||||||
|
"Column order conflict" => "Invalid file format. Please use the sample file.",
|
||||||
|
];
|
||||||
|
|
||||||
|
$message = $string; // Default to the original error
|
||||||
|
|
||||||
|
foreach ($errorMap as $keyword => $friendlyMessage) {
|
||||||
|
if (strpos($string, $keyword) !== false) {
|
||||||
|
$message = $friendlyMessage;
|
||||||
|
break; // Stop looking once we find a match
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return $this->respond(['status' => false, 'code' => 404, 'message' => $message, 'data' => []], 200);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// $file_id = $this->request->uri->getSegment(3);
|
// $file_id = $this->request->uri->getSegment(3);
|
||||||
$empServiceController = new EmployeeServiceController();
|
$empServiceController = new EmployeeServiceController();
|
||||||
|
|
||||||
@ -4434,7 +4464,7 @@ class EmployeeController extends AdminController
|
|||||||
* 4. SEQUENTIAL RE-QUEUE (SAFE)
|
* 4. SEQUENTIAL RE-QUEUE (SAFE)
|
||||||
* --------------------------------------------------------- */
|
* --------------------------------------------------------- */
|
||||||
if ($execution_mode === 'sequential' && $rowCount === $batch_size) {
|
if ($execution_mode === 'sequential' && $rowCount === $batch_size) {
|
||||||
$this->myLogger->logme('info', "$log_search_context"."Re-queueing next batch - " . json_encode([
|
$this->myLogger->logme('error', "$log_search_context"."Re-queueing next batch - " . json_encode([
|
||||||
'next_batch' => $batch_no + 1,
|
'next_batch' => $batch_no + 1,
|
||||||
'last_emp_id' => $new_last_emp_id
|
'last_emp_id' => $new_last_emp_id
|
||||||
]));
|
]));
|
||||||
@ -4543,7 +4573,6 @@ class EmployeeController extends AdminController
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public function insufficientCdBalanceHrMailSend()
|
public function insufficientCdBalanceHrMailSend()
|
||||||
{
|
{
|
||||||
$post_data = $this->request->getJson(true);
|
$post_data = $this->request->getJson(true);
|
||||||
@ -4554,29 +4583,38 @@ class EmployeeController extends AdminController
|
|||||||
|
|
||||||
$client_data = $this->clientModel->where('is_active', 1)->where('id', $post_data['client_id'])->first();
|
$client_data = $this->clientModel->where('is_active', 1)->where('id', $post_data['client_id'])->first();
|
||||||
|
|
||||||
$common['mail_type'] = "insufficient_cd_balance_by_hr";
|
if(empty($client_data)){
|
||||||
|
return $this->respond(['status' => false, 'code' => 404, 'message' => 'No client found'], 200);
|
||||||
|
}
|
||||||
|
|
||||||
|
$notificationModal = new NotificationModel();
|
||||||
|
$notification_data = $notificationModal
|
||||||
|
->where('client_id', $post_data['client_id'])
|
||||||
|
->where('template_name', 'hr_cd_insufficient_balance_mail')
|
||||||
|
->first();
|
||||||
|
|
||||||
|
if(empty($notification_data)){
|
||||||
|
return $this->respond(['status' => false, 'code' => 404, 'message' => 'No template found'], 200);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(empty($notification_data['subject']) || empty($notification_data['mail_content'])){
|
||||||
|
return $this->respond(['status' => false, 'code' => 404, 'message' => 'Template subject or mail content is empty'], 200);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(empty($notification_data['enabled']) || $notification_data['enabled'] != 1){
|
||||||
|
return $this->respond(['status' => false, 'code' => 404, 'message' => 'Template is disabled'], 200);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
$common['mail_type'] = "hr_cd_insufficient_balance_mail";
|
||||||
$common['client_id'] = $post_data['client_id'];
|
$common['client_id'] = $post_data['client_id'];
|
||||||
$subject = 'Insufficient CD Balance Notification';
|
$subject = $notification_data['subject'];
|
||||||
$mail_content = '
|
$mail_content = $notification_data['mail_content'];
|
||||||
Dear {{HR_NAME}},
|
|
||||||
|
|
||||||
Greetings from Nhance.
|
|
||||||
|
|
||||||
We would like to inform you that the CD balance for {{CLIENT_NAME}} is currently low / insufficient, which may impact further processing of insurance-related activities.
|
|
||||||
|
|
||||||
Kindly request you to credit the required amount at the earliest to avoid any service disruption.
|
|
||||||
|
|
||||||
Please let us know once the amount is credited, or if you need any clarification from our end.
|
|
||||||
|
|
||||||
Thank you for your support and cooperation.
|
|
||||||
';
|
|
||||||
|
|
||||||
|
|
||||||
foreach ($post_data['mails'] as $hr_id => $hr_data) {
|
foreach ($post_data['mails'] as $hr_id => $hr_data) {
|
||||||
|
|
||||||
$mail_content = str_ireplace('{{HR_NAME}}', $hr_data['name'], $mail_content);
|
$mail_content = str_ireplace('{{hr_name}}', $hr_data['name'], $mail_content);
|
||||||
$mail_content = str_ireplace('{{CLIENT_NAME}}', $client_data['client_name'], $mail_content);
|
$mail_content = str_ireplace('{{client_name}}', $client_data['client_name'], $mail_content);
|
||||||
|
|
||||||
$res = MailHelper::send_email(['mail' => $hr_data['mail'], 'subject' => $subject, 'message' => $mail_content, 'common' => $common]);
|
$res = MailHelper::send_email(['mail' => $hr_data['mail'], 'subject' => $subject, 'message' => $mail_content, 'common' => $common]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4584,6 +4622,217 @@ class EmployeeController extends AdminController
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function clearCdSession()
|
||||||
|
{
|
||||||
|
clear_cd_balance_session();
|
||||||
|
return $this->response->setJSON(['status' => 'cleared']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function checkSessionStatus()
|
||||||
|
{
|
||||||
|
// Uses your existing get_cd_balance() helper
|
||||||
|
$data = get_cd_balance();
|
||||||
|
|
||||||
|
// Return as JSON so JavaScript can read it
|
||||||
|
return $this->response->setJSON($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function bulkEcardDownloadAsZipFromS3($params)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
$limit = $params['limit'] ?? 100;
|
||||||
|
$batch_no = $params['batch_no'] ?? 1;
|
||||||
|
$last_id = $params['last_emp_policy_id'] ?? 0;
|
||||||
|
|
||||||
|
// Fetch batch data
|
||||||
|
$employee_data = $this->employeePolicyModel->getEmployeeDataWithPolicyUsingClientPolicyIdOrEmployeePolicyIds($params, $limit, $last_id);
|
||||||
|
|
||||||
|
if (empty($employee_data)) {
|
||||||
|
|
||||||
|
if(!empty($last_id)){
|
||||||
|
$this->myLogger->logme('error', "bulkEcardDownloadAsZipFromS3 - No more records after last_emp_policy_id: {$last_id}");
|
||||||
|
$this->myLogger->logme('error', "getEmployeeEcardFromTmpFolderAndZipToS3 - Queuing ZIP creation for folder: " . ($params['folder_name'] ?? 'N/A'));
|
||||||
|
$r = Jobs::addJob(['job_name' => 'getEmployeeEcardFromTmpFolderAndZipToS3', 'payload' => $params]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ['status' => true, 'message' => 'Proceeding to Zip'];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Use a consistent folder name across batches (passed in params)
|
||||||
|
$folderName = $params['folder_name'] ?? 'bulk_ecards_' . $employee_data[0]['policy_no'] . '_' . date('Y-m-d_H-i-s');
|
||||||
|
$tempPath = FCPATH . 'tmp/' . $folderName . '/';
|
||||||
|
|
||||||
|
if (!is_dir($tempPath)) {
|
||||||
|
mkdir($tempPath, 0777, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
$s3 = \Config\Services::getS3Service();
|
||||||
|
$pdf_count = 0;
|
||||||
|
$current_last_id = end($employee_data)['emp_policy_id'];
|
||||||
|
|
||||||
|
foreach ($employee_data as $emp_value) {
|
||||||
|
// Track the last ID in this batch
|
||||||
|
$current_last_id = $emp_value['emp_policy_id'];
|
||||||
|
|
||||||
|
$s3_key = 'ecard_' . $emp_value['name'] . '(' . $emp_value['emp_code'] . ')' . '_' . $emp_value['tpa_id'] . '.pdf';
|
||||||
|
$s3_key = $this->sanitizeFilePart($s3_key);
|
||||||
|
|
||||||
|
if ($s3->exists($s3_key)) {
|
||||||
|
$s3_url = $s3->getPresignedUrl($s3_key);
|
||||||
|
$pdf_content = file_get_contents($s3_url['url']);
|
||||||
|
|
||||||
|
if ($pdf_content !== false) {
|
||||||
|
file_put_contents($tempPath . $s3_key, $pdf_content);
|
||||||
|
$pdf_count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$hasMore = count($employee_data) == $limit;
|
||||||
|
|
||||||
|
$payload = [
|
||||||
|
'batch_no' => $batch_no + 1,
|
||||||
|
'last_emp_policy_id' => $current_last_id,
|
||||||
|
'folder_name' => $folderName,
|
||||||
|
'processed_in_this_batch_data_count' => count($employee_data),
|
||||||
|
'pdf_count' => $pdf_count,
|
||||||
|
'hr_id' => $params['hr_id'] ?? null
|
||||||
|
];
|
||||||
|
|
||||||
|
if ($hasMore) {
|
||||||
|
$this->myLogger->logme('error', "bulkEcardDownloadAsZipFromS3 - Queuing next batch: " . json_encode($payload));
|
||||||
|
$r = Jobs::addJob(['job_name' => 'bulkEcardDownloadAsZipFromS3', 'payload' => $payload]);
|
||||||
|
$message = "Queuing next batch";
|
||||||
|
} else {
|
||||||
|
$this->myLogger->logme('error', "bulkEcardDownloadAsZipFromS3 - No more records after this batch. Next proceeding with getEmployeeEcardFromTmpFolderAndZipToS3");
|
||||||
|
$r = Jobs::addJob(['job_name' => 'getEmployeeEcardFromTmpFolderAndZipToS3', 'payload' => $payload]);
|
||||||
|
$message = "All batch completed. Next proceeding with getEmployeeEcardFromTmpFolderAndZipToS3";
|
||||||
|
}
|
||||||
|
|
||||||
|
return ['status' => true, 'message' => $message];
|
||||||
|
|
||||||
|
} catch (\Throwable $e) {
|
||||||
|
|
||||||
|
$mail_response = $this->sendMailToHrWithZipAttachments($params);
|
||||||
|
|
||||||
|
$context = [
|
||||||
|
'error_message' => $e->getMessage(),
|
||||||
|
'exception_class' => get_class($e),
|
||||||
|
'file' => $e->getFile(),
|
||||||
|
'line' => $e->getLine(),
|
||||||
|
'trace' => $e->getTraceAsString(),
|
||||||
|
'mail_response' => $mail_response,
|
||||||
|
'params' => $params,
|
||||||
|
];
|
||||||
|
|
||||||
|
// Log detailed context for debugging
|
||||||
|
$this->myLogger->logme('error', 'bulkEcardDownloadAsZipFromS3 - Exception' . json_encode($context, JSON_PRETTY_PRINT));
|
||||||
|
|
||||||
|
// Return a detailed, structured error response
|
||||||
|
return [
|
||||||
|
'status' => false,
|
||||||
|
'message' => 'Exception occurred during bulk e-card download and ZIP creation.',
|
||||||
|
'error' => $context,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getEmployeeEcardFromTmpFolderAndZipToS3($params)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
|
||||||
|
$zipService = new \App\Libraries\ZipService();
|
||||||
|
|
||||||
|
$source = FCPATH . 'tmp/' . $params['folder_name'];
|
||||||
|
$destination = '/';
|
||||||
|
$zipName = $params['folder_name'] . '.zip' ?? '';
|
||||||
|
|
||||||
|
$result = $zipService->zipAndUploadS3($source, $destination, $zipName);
|
||||||
|
|
||||||
|
if($result['status'] === false){
|
||||||
|
$this->myLogger->logme('error', "getEmployeeEcardFromTmpFolderAndZipToS3 - ZIP creation/upload failed: " . json_encode($result));
|
||||||
|
$params['url'] = null; // Indicate failure
|
||||||
|
}else{
|
||||||
|
$params['url'] = $result['presigned_url']['url'] ?? null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$mail_response = $this->sendMailToHrWithZipAttachments($params);
|
||||||
|
|
||||||
|
return ['zip_responce' => $result, 'mail_response' => $mail_response];
|
||||||
|
|
||||||
|
} catch (\Throwable $e) {
|
||||||
|
|
||||||
|
$mail_response = $this->sendMailToHrWithZipAttachments($params);
|
||||||
|
|
||||||
|
$context = [
|
||||||
|
'error_message' => $e->getMessage(),
|
||||||
|
'exception_class' => get_class($e),
|
||||||
|
'file' => $e->getFile(),
|
||||||
|
'line' => $e->getLine(),
|
||||||
|
'trace' => $e->getTraceAsString(),
|
||||||
|
'mail_response' => $mail_response,
|
||||||
|
'params' => $params,
|
||||||
|
];
|
||||||
|
|
||||||
|
// Log detailed context for debugging
|
||||||
|
$this->myLogger->logme('error', 'getEmployeeEcardFromTmpFolderAndZipToS3 - Exception' . json_encode($context, JSON_PRETTY_PRINT));
|
||||||
|
|
||||||
|
// Return a detailed, structured error response
|
||||||
|
return [
|
||||||
|
'status' => false,
|
||||||
|
'message' => 'Exception occurred during bulk e-card download and ZIP creation.',
|
||||||
|
'error' => $context,
|
||||||
|
];
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function sendMailToHrWithZipAttachments($params)
|
||||||
|
{
|
||||||
|
$hr_id = $params['hr_id'] ?? null;
|
||||||
|
$url = $params['url'] ?? null;
|
||||||
|
|
||||||
|
if (empty($hr_id)) {
|
||||||
|
$this->myLogger->logme('error', "sendMailToHrWithZipAttachments - No HR ID provided.");
|
||||||
|
return ['status' => false, 'message' => 'No HR ID provided.'];
|
||||||
|
}
|
||||||
|
|
||||||
|
$hr_data = $this->LevelContactModel->where('id', $hr_id)->where('is_active', 1)->first();
|
||||||
|
|
||||||
|
if (empty($hr_data) || empty($hr_data['email'])) {
|
||||||
|
$this->myLogger->logme('error', "sendMailToHrWithZipAttachments - No valid HR data found for ID: {$hr_id}");
|
||||||
|
return ['status' => false, 'message' => 'No valid HR data found for ID: ' . $hr_id];
|
||||||
|
}
|
||||||
|
|
||||||
|
if(empty($url)){
|
||||||
|
$subject = "Employee Bulk E-Card Download Failed";
|
||||||
|
$message = "Dear {$hr_data['name']},<br><br>We were unable to generate the bulk e-card ZIP file. Please re-initialize the process or contact support to retry.";
|
||||||
|
}else{
|
||||||
|
$subject = "Employee Bulk E-Cards Download";
|
||||||
|
$message = "Dear {$hr_data['name']},<br><br>Please find the employee e-cards attached below.<br><br>Download Link: <a href='{$url}'>Download E-Cards</a><br><br>Note : This link valid for 2 days only.";
|
||||||
|
}
|
||||||
|
|
||||||
|
$bbc = 'venkateshraman786@gmail.com';
|
||||||
|
|
||||||
|
$mail_response = MailHelper::send_email([
|
||||||
|
'mail' => $hr_data['email'],
|
||||||
|
'subject' => $subject,
|
||||||
|
'message' => $message,
|
||||||
|
'bcc' => $bbc,
|
||||||
|
'common' => [
|
||||||
|
'mail_type' => 'employee_bulk_ecard_download_by_hr',
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->myLogger->logme('error', "sendMailToHrWithZipAttachments - Email sent to HR ID: {$hr_id}, Email Response: " . json_encode($mail_response));
|
||||||
|
return $mail_response;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function downloadZip(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -40,6 +40,9 @@ use App\Models\HRAccessControlModel;
|
|||||||
use App\Models\InsurerModel;
|
use App\Models\InsurerModel;
|
||||||
use App\Models\HrFileUploadModel;
|
use App\Models\HrFileUploadModel;
|
||||||
use App\Models\EmployeeRetailPolicy;
|
use App\Models\EmployeeRetailPolicy;
|
||||||
|
use App\Models\BatchFileModel;
|
||||||
|
use App\Models\ClientDepositModel;
|
||||||
|
use App\Models\PTFileModel;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -66,6 +69,8 @@ use Kreait\Firebase\Messaging\CloudMessage;
|
|||||||
use Kreait\Firebase\Messaging\Notification;
|
use Kreait\Firebase\Messaging\Notification;
|
||||||
use Kreait\Firebase\Exception\MessagingException;
|
use Kreait\Firebase\Exception\MessagingException;
|
||||||
|
|
||||||
|
use Firebase\JWT\JWT;
|
||||||
|
|
||||||
|
|
||||||
class EmployeeRestController extends AdminController
|
class EmployeeRestController extends AdminController
|
||||||
{
|
{
|
||||||
@ -100,6 +105,7 @@ class EmployeeRestController extends AdminController
|
|||||||
protected $hrFileUploadModel;
|
protected $hrFileUploadModel;
|
||||||
protected $ticketMailTemplateModel;
|
protected $ticketMailTemplateModel;
|
||||||
protected $employeeRetailPolicy;
|
protected $employeeRetailPolicy;
|
||||||
|
protected $batchFileModel;
|
||||||
|
|
||||||
|
|
||||||
public function __construct()
|
public function __construct()
|
||||||
@ -134,6 +140,7 @@ class EmployeeRestController extends AdminController
|
|||||||
$this->insurerModel = new InsurerModel();
|
$this->insurerModel = new InsurerModel();
|
||||||
$this->hrFileUploadModel = new HrFileUploadModel();
|
$this->hrFileUploadModel = new HrFileUploadModel();
|
||||||
$this->ticketMailTemplateModel = new TicketMailTemplateModel();
|
$this->ticketMailTemplateModel = new TicketMailTemplateModel();
|
||||||
|
$this->batchFileModel = new BatchFileModel();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -599,6 +606,7 @@ class EmployeeRestController extends AdminController
|
|||||||
public function getEmployeeAndDependenceByClientId()
|
public function getEmployeeAndDependenceByClientId()
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
|
|
||||||
$empData = $this->employeePolicyModel->getEmployeePolicy(client_id: $this->request->getGet('client_id'), policy_id: $this->request->getGet('client_policy_id'), status: 0, branch_id: $this->request->getGet('client_branch_id'));
|
$empData = $this->employeePolicyModel->getEmployeePolicy(client_id: $this->request->getGet('client_id'), policy_id: $this->request->getGet('client_policy_id'), status: 0, branch_id: $this->request->getGet('client_branch_id'));
|
||||||
|
|
||||||
if ($empData) {
|
if ($empData) {
|
||||||
@ -2369,6 +2377,8 @@ class EmployeeRestController extends AdminController
|
|||||||
$value['totalMembersCount'] = count($employeeDetails);
|
$value['totalMembersCount'] = count($employeeDetails);
|
||||||
$value['membersCountOfActive'] = $activeCount;
|
$value['membersCountOfActive'] = $activeCount;
|
||||||
$value['membersCountOfInactive'] = $inactiveCount;
|
$value['membersCountOfInactive'] = $inactiveCount;
|
||||||
|
$value['is_ecard_bulk_download'] = 0;
|
||||||
|
$value['is_ecard_bulk_download_for_employee'] = 0;
|
||||||
|
|
||||||
|
|
||||||
array_push($result, $value);
|
array_push($result, $value);
|
||||||
@ -2494,11 +2504,12 @@ class EmployeeRestController extends AdminController
|
|||||||
$client_id = isset($search_data['client_id']) ? (int) $search_data['client_id'] : 0;
|
$client_id = isset($search_data['client_id']) ? (int) $search_data['client_id'] : 0;
|
||||||
unset($search_data['client_id']);
|
unset($search_data['client_id']);
|
||||||
unset($search_data['client_branch_id']);
|
unset($search_data['client_branch_id']);
|
||||||
|
$policy_number = isset($search_data['policy_no']) ? $search_data['policy_no'] : null;
|
||||||
|
|
||||||
$from_date = isset($search_data['from_date']) ? $search_data['from_date'] : null;
|
$from_date = isset($search_data['from_date']) ? $search_data['from_date'] : null;
|
||||||
$to_date = isset($search_data['to_date']) ? $search_data['to_date'] : null;
|
$to_date = isset($search_data['to_date']) ? $search_data['to_date'] : null;
|
||||||
$claim_status_id = isset($search_data['claim_status_id']) ? $search_data['claim_status_id'] : null;
|
$claim_status_id = isset($search_data['claim_status_id']) ? $search_data['claim_status_id'] : null;
|
||||||
unset($search_data['from_date'], $search_data['to_date'], $search_data['claim_status_id']);
|
unset($search_data['from_date'], $search_data['to_date'], $search_data['claim_status_id'], $search_data['policy_no']);
|
||||||
|
|
||||||
$where = [];
|
$where = [];
|
||||||
|
|
||||||
@ -2618,6 +2629,10 @@ class EmployeeRestController extends AdminController
|
|||||||
$builder->whereIn('claim_status_id', $claim_status_ids);
|
$builder->whereIn('claim_status_id', $claim_status_ids);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!empty($policy_number)) {
|
||||||
|
$builder->where('cp.policy_no', $policy_number);
|
||||||
|
}
|
||||||
|
|
||||||
$builder->orderBy('tm.id', 'DESC');
|
$builder->orderBy('tm.id', 'DESC');
|
||||||
|
|
||||||
$data = $builder->get()->getResultArray();
|
$data = $builder->get()->getResultArray();
|
||||||
@ -3622,6 +3637,12 @@ class EmployeeRestController extends AdminController
|
|||||||
$get_docs_name = $this->request->getPost('claim_doc_names') ?? [];
|
$get_docs_name = $this->request->getPost('claim_doc_names') ?? [];
|
||||||
$policy_transaction_id = $this->request->getPost('policy_transaction_id') ?? null;
|
$policy_transaction_id = $this->request->getPost('policy_transaction_id') ?? null;
|
||||||
|
|
||||||
|
|
||||||
|
if (is_string($received_data['client_id']) && preg_match('/^[a-f0-9]{32}$/i', $received_data['client_id'])) {
|
||||||
|
$client_data = $this->clientModel->where('MD5(id)', $received_data['client_id'])->first();
|
||||||
|
$received_data['client_id'] = $client_data['id'] ?? null;
|
||||||
|
}
|
||||||
|
|
||||||
$client_policy_data = $this->clientPolicyModel->where('id', $received_data['client_policy_id'] ?? null)->first();
|
$client_policy_data = $this->clientPolicyModel->where('id', $received_data['client_policy_id'] ?? null)->first();
|
||||||
|
|
||||||
$isduplicate = checkDuplicateClaim([
|
$isduplicate = checkDuplicateClaim([
|
||||||
@ -3909,10 +3930,14 @@ class EmployeeRestController extends AdminController
|
|||||||
log_message('error', 'Ticket validation | Ticket ID: ' . $ticket_id . ' | Matching active tickets with NULL TPA reference: ' . $count);
|
log_message('error', 'Ticket validation | Ticket ID: ' . $ticket_id . ' | Matching active tickets with NULL TPA reference: ' . $count);
|
||||||
|
|
||||||
if ($count > 0 && $pdf_exist_in_the_file && $tpa_claim_push == true) {
|
if ($count > 0 && $pdf_exist_in_the_file && $tpa_claim_push == true) {
|
||||||
|
try {
|
||||||
// this call for TPA integration
|
// this call for TPA integration
|
||||||
$apiServiceController = new ApiServiceController();
|
$apiServiceController = new ApiServiceController();
|
||||||
$apiServiceController->pushClaims($ticket_id);
|
$apiServiceController->pushClaims($ticket_id);
|
||||||
log_message('error', "pushClaims function called with Ticket ID: {$ticket_id}, In Employee Rest Controller");
|
log_message('error', "pushClaims function called with Ticket ID: {$ticket_id}, In Employee Rest Controller");
|
||||||
|
} catch (\Throwable $e) {
|
||||||
|
log_message('error', "Error in TPA Claim Push via Benifits or HR : ApiServiceController pushClaims function call for Ticket ID: {$ticket_id}. Error: " . $e->getMessage() . " Trace: " . $e->getTraceAsString());
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if($tpa_claim_push == false){
|
if($tpa_claim_push == false){
|
||||||
log_message('error', 'Skip the TPA claim push for IR DOCUMENTS');
|
log_message('error', 'Skip the TPA claim push for IR DOCUMENTS');
|
||||||
@ -4506,11 +4531,12 @@ class EmployeeRestController extends AdminController
|
|||||||
|
|
||||||
$post_data = [
|
$post_data = [
|
||||||
'client_id' => $this->request->getPost('client_id') ?? null,
|
'client_id' => $this->request->getPost('client_id') ?? null,
|
||||||
'client_branch_id' => $this->request->getPost('client_branch_id'),
|
'client_branch_id' => $this->request->getPost('client_branch_id') ?? null,
|
||||||
'policy_id' => $this->request->getPost('policy_id'),
|
'policy_id' => $this->request->getPost('policy_id') ?? null,
|
||||||
'file_action' => $this->request->getPost('file_action'),
|
'file_action' => $this->request->getPost('file_action') ?? null,
|
||||||
'created_by' => $this->request->getPost('created_by'),
|
'created_by' => $this->request->getPost('created_by') ?? null,
|
||||||
'file_name' => $this->request->getFile('file_name')
|
'file_name' => $this->request->getFile('file_name') ?? null,
|
||||||
|
'policy_no' => $this->request->getPost('policy_no') ?? null,
|
||||||
];
|
];
|
||||||
// print_r($post_data); die;
|
// print_r($post_data); die;
|
||||||
|
|
||||||
@ -4521,6 +4547,7 @@ class EmployeeRestController extends AdminController
|
|||||||
// Handle raw client_id vs MD5
|
// Handle raw client_id vs MD5
|
||||||
if (is_string($post_data['client_id']) && preg_match('/^[a-f0-9]{32}$/i', $post_data['client_id'])) {
|
if (is_string($post_data['client_id']) && preg_match('/^[a-f0-9]{32}$/i', $post_data['client_id'])) {
|
||||||
$client_data = $this->clientModel->where('MD5(id)', $post_data['client_id'])->first();
|
$client_data = $this->clientModel->where('MD5(id)', $post_data['client_id'])->first();
|
||||||
|
$post_data['client_id'] = $client_data['id'];
|
||||||
} else {
|
} else {
|
||||||
$client_data = $this->clientModel->where('id', $post_data['client_id'])->first();
|
$client_data = $this->clientModel->where('id', $post_data['client_id'])->first();
|
||||||
}
|
}
|
||||||
@ -4529,10 +4556,6 @@ class EmployeeRestController extends AdminController
|
|||||||
return $this->respondCreated(['status' => false, 'message' => 'Invalid Client Id', 'data' => []]);
|
return $this->respondCreated(['status' => false, 'message' => 'Invalid Client Id', 'data' => []]);
|
||||||
}
|
}
|
||||||
|
|
||||||
$post_data['client_id'] = $client_data['id'];
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// print_r($client_data); die;
|
// print_r($client_data); die;
|
||||||
|
|
||||||
if($client_data['hr_file_processed_by'] == 1){
|
if($client_data['hr_file_processed_by'] == 1){
|
||||||
@ -4578,15 +4601,15 @@ class EmployeeRestController extends AdminController
|
|||||||
|
|
||||||
// Prepare data
|
// Prepare data
|
||||||
$data = [
|
$data = [
|
||||||
'client_id' => $this->request->getPost('client_id'),
|
'client_id' => $post_data['client_id'],
|
||||||
'client_branch_id' => $this->request->getPost('client_branch_id'),
|
'client_branch_id' => $post_data['client_branch_id'],
|
||||||
'policy_id' => $this->request->getPost('policy_id'),
|
'policy_id' => $post_data['policy_id'],
|
||||||
'policy_no' => $this->request->getPost('policy_no'),
|
'policy_no' => $post_data['policy_no'],
|
||||||
'file_name' => $newFileName,
|
'file_name' => $newFileName,
|
||||||
'file_action' => $this->request->getPost('file_action'),
|
'file_action' => $post_data['file_action'],
|
||||||
'status' => 'Yet to start',
|
'status' => 'Yet to start',
|
||||||
'created_by' => $this->request->getPost('created_by'),
|
'created_by' => $post_data['created_by'],
|
||||||
'updated_by' => $this->request->getPost('created_by'),
|
'updated_by' => $post_data['created_by'],
|
||||||
];
|
];
|
||||||
|
|
||||||
// Save into DB
|
// Save into DB
|
||||||
@ -4609,14 +4632,16 @@ class EmployeeRestController extends AdminController
|
|||||||
$responce = $employeeController->employeesUplodWithEvents($post_data);
|
$responce = $employeeController->employeesUplodWithEvents($post_data);
|
||||||
// print_r($responce); die;
|
// print_r($responce); die;
|
||||||
|
|
||||||
if($responce['status']){
|
|
||||||
$file_data = $this->getDataFromHrFilesTable(['file_id' => $responce['file_id']]);
|
|
||||||
$responce['data'] = $file_data;
|
|
||||||
return $responce;
|
return $responce;
|
||||||
}else{
|
|
||||||
$responce['data'] = [];
|
// if(isset($responce['file_id'])){
|
||||||
return $responce;
|
// $file_data = $this->getDataFromHrFilesTable(['hr_id' => $responce['created_by']]);
|
||||||
}
|
// $responce['data'] = $file_data;
|
||||||
|
// return $responce;
|
||||||
|
// }else{
|
||||||
|
// $responce['data'] = [];
|
||||||
|
// return $responce;
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
private function giveNotificationToClientsAccountManager($data)
|
private function giveNotificationToClientsAccountManager($data)
|
||||||
@ -4703,28 +4728,40 @@ class EmployeeRestController extends AdminController
|
|||||||
try {
|
try {
|
||||||
|
|
||||||
$file_id = $this->request->getGet('id') ?? $id;
|
$file_id = $this->request->getGet('id') ?? $id;
|
||||||
|
$client_id = $this->request->getGet('cliend_id') ?? null;
|
||||||
|
|
||||||
|
$client_data = [];
|
||||||
|
if(!empty($client_id)){
|
||||||
|
if (is_string($client_id) && preg_match('/^[a-f0-9]{32}$/i', $client_id)) {
|
||||||
|
$client_data = $this->clientModel->where('MD5(id)', $client_id)->first();
|
||||||
|
} else {
|
||||||
|
$client_data = $this->clientModel->where('id', $client_id)->first();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Find record
|
// Find record
|
||||||
|
if($client_data && $client_data['hr_file_processed_by'] == 1){
|
||||||
|
$record = $this->fileModel->where('id', (int)$file_id)->find();
|
||||||
|
$uploadPath = WRITEPATH . 'uploads/excel/';
|
||||||
|
}else{
|
||||||
$record = $this->hrFileUploadModel->where('id', (int)$file_id)->find();
|
$record = $this->hrFileUploadModel->where('id', (int)$file_id)->find();
|
||||||
|
$uploadPath = WRITEPATH . 'uploads/hr_files/';
|
||||||
// print_rr( $record);die;
|
}
|
||||||
|
|
||||||
if (!$record) {
|
if (!$record) {
|
||||||
return $this->failNotFound("File record not found");
|
return $this->failNotFound("File record not found");
|
||||||
}
|
}
|
||||||
|
|
||||||
$uploadPath = WRITEPATH . 'uploads/hr_files/';
|
|
||||||
$filePath = $uploadPath . $record[0]['file_name'];
|
$filePath = $uploadPath . $record[0]['file_name'];
|
||||||
|
|
||||||
if (!file_exists($filePath)) {
|
if (!file_exists($filePath)) {
|
||||||
// return $this->failNotFound("File not found on server");
|
return $this->failNotFound("File not found on server");
|
||||||
$data['message'] = 'The Physical File Not Found';
|
|
||||||
return view('errors/404', $data);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Force file download
|
// Force file download
|
||||||
return $this->response->download($filePath, null)
|
return $this->response->download($filePath, null)
|
||||||
->setFileName($record[0]['file_name']);
|
->setFileName($record[0]['file_name']);
|
||||||
|
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
return $this->failServerError($e->getMessage());
|
return $this->failServerError($e->getMessage());
|
||||||
}
|
}
|
||||||
@ -4783,13 +4820,21 @@ class EmployeeRestController extends AdminController
|
|||||||
$data = $this->getDataFromHrFileUploadTable($search_data);
|
$data = $this->getDataFromHrFileUploadTable($search_data);
|
||||||
$table = "hr_file_upload";
|
$table = "hr_file_upload";
|
||||||
}else{
|
}else{
|
||||||
|
|
||||||
|
if (is_string($search_data['client_id']) && preg_match('/^[a-f0-9]{32}$/i', $search_data['client_id'])) {
|
||||||
|
$client_data = $this->clientModel->where('MD5(id)', $search_data['client_id'])->first();
|
||||||
|
$search_data['client_id'] = $client_data['id'];
|
||||||
|
} else {
|
||||||
$client_data = $this->clientModel->where('id', $search_data['client_id'])->first();
|
$client_data = $this->clientModel->where('id', $search_data['client_id'])->first();
|
||||||
|
}
|
||||||
|
|
||||||
if($client_data['hr_file_processed_by'] == 1){
|
if($client_data['hr_file_processed_by'] == 1){
|
||||||
$data = $this->getDataFromHrFileUploadTable($search_data);
|
|
||||||
$table = "hr_file_upload 2";
|
|
||||||
}else{
|
|
||||||
$data = $this->getDataFromHrFilesTable($search_data);
|
$data = $this->getDataFromHrFilesTable($search_data);
|
||||||
$table = "files";
|
$table = "files";
|
||||||
|
}else{
|
||||||
|
$data = $this->getDataFromHrFileUploadTable($search_data);
|
||||||
|
$table = "hr_file_upload 2";
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4800,8 +4845,20 @@ class EmployeeRestController extends AdminController
|
|||||||
'table' => $table
|
'table' => $table
|
||||||
]);
|
]);
|
||||||
|
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $th) {
|
||||||
return $this->failServerError($e->getMessage());
|
|
||||||
|
$errorData = [
|
||||||
|
'message' => $th->getMessage(),
|
||||||
|
'file' => $th->getFile(),
|
||||||
|
'line' => $th->getLine(),
|
||||||
|
'code' => $th->getCode(),
|
||||||
|
'trace' => $th->getTraceAsString(),
|
||||||
|
'trace_array' => $th->getTrace(), // full array version (optional)
|
||||||
|
'function' => $th->getTrace()[0]['function'] ?? null,
|
||||||
|
'class' => $th->getTrace()[0]['class'] ?? null,
|
||||||
|
];
|
||||||
|
|
||||||
|
return $this->failServerError($th->getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4835,7 +4892,8 @@ class EmployeeRestController extends AdminController
|
|||||||
THEN hr_file_upload.status
|
THEN hr_file_upload.status
|
||||||
ELSE CONCAT(UCASE(LEFT(f.status, 1)), LCASE(SUBSTRING(f.status, 2)))
|
ELSE CONCAT(UCASE(LEFT(f.status, 1)), LCASE(SUBSTRING(f.status, 2)))
|
||||||
END AS status,
|
END AS status,
|
||||||
'1' as file_error_status
|
'0' as file_error_status,
|
||||||
|
'' as file_error_status
|
||||||
", false)
|
", false)
|
||||||
->join('clients c', 'c.id = hr_file_upload.client_id AND c.is_active = 1', 'left')
|
->join('clients c', 'c.id = hr_file_upload.client_id AND c.is_active = 1', 'left')
|
||||||
->join('client_branch cb', 'cb.id = hr_file_upload.client_branch_id AND cb.is_active = 1', 'left')
|
->join('client_branch cb', 'cb.id = hr_file_upload.client_branch_id AND cb.is_active = 1', 'left')
|
||||||
@ -4870,6 +4928,7 @@ class EmployeeRestController extends AdminController
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Execute query
|
// Execute query
|
||||||
|
$builder->orderBy('hr_file_upload.id', 'DESC');
|
||||||
$data = $builder->get()->getResultArray();
|
$data = $builder->get()->getResultArray();
|
||||||
|
|
||||||
if(!empty($data)){
|
if(!empty($data)){
|
||||||
@ -4881,7 +4940,7 @@ class EmployeeRestController extends AdminController
|
|||||||
|
|
||||||
public function getDataFromHrFilesTable($search_data)
|
public function getDataFromHrFilesTable($search_data)
|
||||||
{
|
{
|
||||||
$file_download_base = base_url('util/download-file-list/');
|
$file_download_base = base_url('downloadFileTableFile/');
|
||||||
$builder = $this->fileModel
|
$builder = $this->fileModel
|
||||||
->select("
|
->select("
|
||||||
files.id,
|
files.id,
|
||||||
@ -4890,7 +4949,7 @@ class EmployeeRestController extends AdminController
|
|||||||
files.policy_id,
|
files.policy_id,
|
||||||
cp.policy_no,
|
cp.policy_no,
|
||||||
files.file_name,
|
files.file_name,
|
||||||
files.action,
|
files.action as file_action,
|
||||||
files.created_at,
|
files.created_at,
|
||||||
files.created_by,
|
files.created_by,
|
||||||
files.updated_at,
|
files.updated_at,
|
||||||
@ -4924,8 +4983,12 @@ class EmployeeRestController extends AdminController
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (isset($search_data['client_id']) && !empty($search_data['client_id'])) {
|
if (isset($search_data['client_id']) && !empty($search_data['client_id'])) {
|
||||||
|
if (is_string($search_data['client_id']) && preg_match('/^[a-f0-9]{32}$/i', $search_data['client_id'])) {
|
||||||
|
$builder->where("MD5(files.client_id)", $search_data['client_id']);
|
||||||
|
} else {
|
||||||
$builder->where("files.client_id", $search_data['client_id']);
|
$builder->where("files.client_id", $search_data['client_id']);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (isset($search_data['file_id']) && !empty($search_data['file_id'])) {
|
if (isset($search_data['file_id']) && !empty($search_data['file_id'])) {
|
||||||
$builder->where("files.id", $search_data['file_id']);
|
$builder->where("files.id", $search_data['file_id']);
|
||||||
@ -4933,6 +4996,7 @@ class EmployeeRestController extends AdminController
|
|||||||
|
|
||||||
|
|
||||||
// Execute query
|
// Execute query
|
||||||
|
$builder->orderBy('files.id', 'DESC');
|
||||||
$data = $builder->get()->getResultArray();
|
$data = $builder->get()->getResultArray();
|
||||||
|
|
||||||
if (!empty($data)) {
|
if (!empty($data)) {
|
||||||
@ -5369,6 +5433,195 @@ class EmployeeRestController extends AdminController
|
|||||||
return $claim_status_data_id;
|
return $claim_status_data_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function downloadCdSplitUpFile()
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
|
||||||
|
$file_id = $this->request->getGet('id');
|
||||||
|
|
||||||
|
// Find record
|
||||||
|
$record = $this->batchFileModel->where('id', $file_id)->first();;
|
||||||
|
if (!$record) {
|
||||||
|
$data['message'] = 'File record not found';
|
||||||
|
return view('errors/404', $data);
|
||||||
|
}
|
||||||
|
|
||||||
|
$uploadPath = WRITEPATH . 'uploads/import_excel/';
|
||||||
|
$filePath = $uploadPath . $record['file_name'];
|
||||||
|
|
||||||
|
if (!file_exists($filePath)) {
|
||||||
|
// return $this->failNotFound("File not found on server");
|
||||||
|
$data['message'] = 'The Physical File Not Found';
|
||||||
|
return view('errors/404', $data);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Force file download
|
||||||
|
return $this->response->download($filePath, null)->setFileName($record['file_name']);
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
$data['message'] = 'File record not found';
|
||||||
|
return view('errors/404', $data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public function getHrDashboad()
|
||||||
|
{
|
||||||
|
// $dashboard_id = $this->request->getGet('dashboard_id') ?? null;
|
||||||
|
$client_id = $this->request->getPost('client_id') ?? null;
|
||||||
|
$client_policy_id = $this->request->getPost('client_policy_id') ?? null;
|
||||||
|
$received_data = $this->request->getJSON(true) ?? null;
|
||||||
|
// 🔐 Move this to .env in real projects
|
||||||
|
$METABASE_SECRET_KEY = getenv('METABASE_SECRET_KEY');
|
||||||
|
|
||||||
|
$payload = [
|
||||||
|
'resource' => [
|
||||||
|
// 'dashboard' => 1
|
||||||
|
'dashboard' => 2
|
||||||
|
],
|
||||||
|
'params' => (object)['client_policy' => $received_data['client_policy_id']], // MUST be object for Metabase
|
||||||
|
'exp' => time() + (10 * 60) // 10 minutes
|
||||||
|
];
|
||||||
|
|
||||||
|
$token = JWT::encode($payload, $METABASE_SECRET_KEY, 'HS256');
|
||||||
|
|
||||||
|
// // You can either return token only
|
||||||
|
// return $this->response->setJSON([
|
||||||
|
// 'token' => $token,
|
||||||
|
// 'iframe_url' => "https://your-metabase-domain/embed/dashboard/{$token}#bordered=true&titled=true"
|
||||||
|
// ]);
|
||||||
|
// if($this->request->getGet('api') == 1)
|
||||||
|
// {
|
||||||
|
return $this->respond([
|
||||||
|
'status' => 'success',
|
||||||
|
'message' => 'Form data received successfully!',
|
||||||
|
'data' => [
|
||||||
|
'metabaseToken' => $token,
|
||||||
|
'metabaseUrl' => 'https://nsights.nhanceindia.in']
|
||||||
|
]);
|
||||||
|
// }
|
||||||
|
|
||||||
|
return view('meta_dashboard_demo_one', [
|
||||||
|
'metabaseToken' => $token,
|
||||||
|
'metabaseUrl' => 'https://nsights.nhanceindia.in',
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// get policy files
|
||||||
|
public function getPolicyAndEndorsementFiles()
|
||||||
|
{
|
||||||
|
$cd_ac_pk = $this->request->getGet('cd_ac_pk') ?? null;
|
||||||
|
|
||||||
|
$cdModel = new ClientDepositModel();
|
||||||
|
$cd_data = $cdModel->where('id', $cd_ac_pk)
|
||||||
|
->where('is_active', 1)
|
||||||
|
->where('client_policy_id IS NOT NULL')
|
||||||
|
->first();
|
||||||
|
|
||||||
|
if(empty($cd_data)){
|
||||||
|
$this->myLogger->logme('error', 'getPolicyAndEndorsementFiles: No Client Deposit data found for cd_ac_pk=' . $cd_ac_pk);
|
||||||
|
return $this->respond(['status' => false, 'code' => 404, 'message' => 'No file found', 'data' => []], 200);
|
||||||
|
}
|
||||||
|
|
||||||
|
$client_policy_data = $this->clientPolicyModel
|
||||||
|
->where('id', $cd_data['client_policy_id'])
|
||||||
|
->where('is_active', 1)
|
||||||
|
->first();
|
||||||
|
|
||||||
|
if(empty($client_policy_data)){
|
||||||
|
$this->myLogger->logme('error', 'getPolicyAndEndorsementFiles: No Client Policy data found for client_policy_id=' . $cd_data['client_policy_id']);
|
||||||
|
return $this->respond(['status' => false, 'code' => 404, 'message' => 'No file found', 'data' => []], 200);
|
||||||
|
}
|
||||||
|
|
||||||
|
$policyTransactionModel = new PolicyTransactionModel();
|
||||||
|
$builder = $policyTransactionModel
|
||||||
|
->where('is_active', 1)
|
||||||
|
->where('policy_no', $client_policy_data['policy_no'])
|
||||||
|
->where('action_type', $cd_data['event_name']);
|
||||||
|
|
||||||
|
if (!empty($cd_data['endorsement_no']) && $cd_data['event_name'] != 'inception') {
|
||||||
|
$builder->where('endorsement_no', $cd_data['endorsement_no']);
|
||||||
|
}
|
||||||
|
|
||||||
|
$policy_transaction_data = $builder->findAll();
|
||||||
|
|
||||||
|
if(empty($policy_transaction_data)){
|
||||||
|
$this->myLogger->logme('error', 'getPolicyAndEndorsementFiles: No Policy Transaction data found for policy_no=' . $client_policy_data['policy_no']);
|
||||||
|
return $this->respond(['status' => false, 'code' => 404, 'message' => 'No file found', 'data' => []], 200);
|
||||||
|
}
|
||||||
|
|
||||||
|
$policy_transaction_ids = array_column($policy_transaction_data, 'id');
|
||||||
|
|
||||||
|
|
||||||
|
$ptFilesModel = new PTFileModel();
|
||||||
|
$pt_files_data = $ptFilesModel->where('is_active', 1)->whereIn('pt_id', $policy_transaction_ids)->findAll();
|
||||||
|
|
||||||
|
if(empty($pt_files_data)){
|
||||||
|
$this->myLogger->logme('error', 'getPolicyAndEndorsementFiles: No PT Files data found for pt_ids=' . implode(',', $policy_transaction_ids));
|
||||||
|
return $this->respond(['status' => false, 'code' => 404, 'message' => 'No file found', 'data' => []], 200);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return $this->respond(['status' => true, 'code' => 200, 'message' => 'Files found', 'data' => $pt_files_data], 200);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// download policy file
|
||||||
|
public function downloadPolicyFiles()
|
||||||
|
{
|
||||||
|
$pt_file_id = $this->request->getGet('file_id') ?? null;
|
||||||
|
|
||||||
|
if(empty($pt_file_id)){
|
||||||
|
return $this->respond(['status' => false, 'code' => 404, 'message' => 'File ID is required'], 200);
|
||||||
|
}
|
||||||
|
|
||||||
|
$uploadFilePath = WRITEPATH . 'uploads/client_kyc_documents';
|
||||||
|
|
||||||
|
$ptFilesModel = new PTFileModel();
|
||||||
|
$pt_files_data = $ptFilesModel->where('is_active', 1)->where('id', $pt_file_id)->first();
|
||||||
|
|
||||||
|
if(empty($pt_files_data)){
|
||||||
|
return $this->respond(['status' => false, 'code' => 404, 'message' => 'The Physical File Not Found in server'], 200);
|
||||||
|
}
|
||||||
|
|
||||||
|
$filePath = $uploadFilePath . '/' . $pt_files_data['file_name'];
|
||||||
|
|
||||||
|
if (!file_exists($filePath)) {
|
||||||
|
return $this->respond(['status' => false, 'code' => 404, 'message' => 'The Physical File Not Found in server'], 200);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Force file download
|
||||||
|
return $this->response->download($filePath, null)->setFileName($pt_files_data['file_name']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function bulkEcardDownloadAsZip()
|
||||||
|
{
|
||||||
|
$received_data = $this->request->getJSON(true) ?? null;
|
||||||
|
$this->myLogger->logme('error', 'bulkEcardDownloadAsZip: Received payload = ' . json_encode($received_data ?? []));
|
||||||
|
|
||||||
|
if(empty($received_data['client_policy_id']) && empty($received_data['emp_policy_ids'])){
|
||||||
|
return $this->respond(['status' => false, 'code' => 404, 'message' => 'client_policy_id or employee_policy_ids is required'], 200);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(empty($received_data['hr_id'])){
|
||||||
|
return $this->respond(['status' => false, 'code' => 404, 'message' => 'hr_id is required'], 200);
|
||||||
|
}
|
||||||
|
|
||||||
|
$employee_data = $this->employeePolicyModel->getEmployeeDataWithPolicyUsingClientPolicyIdOrEmployeePolicyIds($received_data);
|
||||||
|
|
||||||
|
if(empty($employee_data)){
|
||||||
|
return $this->respond(['status' => false, 'code' => 404, 'message' => 'No employee data found for the policy'], 200);
|
||||||
|
}
|
||||||
|
|
||||||
|
$received_data['folder_name'] = 'bulk_ecards_' . $employee_data[0]['policy_no'] . '_' . date('Y-m-d_H-i-s');
|
||||||
|
|
||||||
|
// Dispatch background job to process the bulk e-card download
|
||||||
|
$r = Jobs::addJob(['job_name' => 'bulkEcardDownloadAsZipFromS3', 'payload' => $received_data]);
|
||||||
|
$this->myLogger->logme('error', 'bulkEcardDownloadAsZip: Job dispatched with result = ' . json_encode($r ?? []));
|
||||||
|
|
||||||
|
return $this->respond(['status' => true, 'code' => 200, 'message' => 'Bulk E-card download process started. Link share your mail'], 200);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -866,6 +866,14 @@ class EmployeeServiceController extends AdminController
|
|||||||
|
|
||||||
// get policy and rack details
|
// get policy and rack details
|
||||||
$policy_details = $this->clientPolicyModel->getPolicyDetails($file['client_id'],$file['policy_id']);
|
$policy_details = $this->clientPolicyModel->getPolicyDetails($file['client_id'],$file['policy_id']);
|
||||||
|
|
||||||
|
if(empty($policy_details)){
|
||||||
|
$message = "Policy configuration is incomplete. Cannot proceed.";
|
||||||
|
$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();
|
||||||
|
return array('error_summary' => [5], 'error_data' => $message);
|
||||||
|
}
|
||||||
|
|
||||||
$policy_terms = json_decode($policy_details[0]->policy_terms);
|
$policy_terms = json_decode($policy_details[0]->policy_terms);
|
||||||
$policy_terms = (array) $policy_terms;// convert obj to array
|
$policy_terms = (array) $policy_terms;// convert obj to array
|
||||||
$default_age_ratio = isset($policy_terms['age_ratio']) ? json_decode(json_encode($policy_terms['age_ratio']),true) : [];
|
$default_age_ratio = isset($policy_terms['age_ratio']) ? json_decode(json_encode($policy_terms['age_ratio']),true) : [];
|
||||||
@ -876,6 +884,13 @@ class EmployeeServiceController extends AdminController
|
|||||||
$slab_details = $this->policiesModel->getPolicySlabRatesForEmpOnboard($file['policy_id'],$file['client_id']);
|
$slab_details = $this->policiesModel->getPolicySlabRatesForEmpOnboard($file['policy_id'],$file['client_id']);
|
||||||
// dd($slab_details);
|
// dd($slab_details);
|
||||||
|
|
||||||
|
if(empty($slab_details) || (isset($slab_details['slab_rates']) && empty($slab_details['slab_rates']))){
|
||||||
|
$message = "Policy configuration is incomplete. Cannot proceed.";
|
||||||
|
$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();
|
||||||
|
return array('error_summary' => [5], 'error_data' => $message);
|
||||||
|
}
|
||||||
|
|
||||||
//remove header
|
//remove header
|
||||||
unset($excel_data[0]);
|
unset($excel_data[0]);
|
||||||
$relationship = $this->general_relationships;
|
$relationship = $this->general_relationships;
|
||||||
|
|||||||
@ -213,6 +213,14 @@ class JobWorker extends AdminController
|
|||||||
'bulkGenerateEcardAndStoreinS3' => [
|
'bulkGenerateEcardAndStoreinS3' => [
|
||||||
'type' => 'CC', // Handler Category
|
'type' => 'CC', // Handler Category
|
||||||
'handler' => 'App\Controllers\EmployeeController',
|
'handler' => 'App\Controllers\EmployeeController',
|
||||||
|
],
|
||||||
|
'bulkEcardDownloadAsZipFromS3' => [
|
||||||
|
'type' => 'CC', // Handler Category
|
||||||
|
'handler' => 'App\Controllers\EmployeeController',
|
||||||
|
],
|
||||||
|
'getEmployeeEcardFromTmpFolderAndZipToS3' => [
|
||||||
|
'type' => 'CC', // Handler Category
|
||||||
|
'handler' => 'App\Controllers\EmployeeController',
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|||||||
@ -497,6 +497,9 @@ class MasterController extends AdminController
|
|||||||
{
|
{
|
||||||
|
|
||||||
$this->myLogger->logme('error','Edit Insurer general info function called');
|
$this->myLogger->logme('error','Edit Insurer general info function called');
|
||||||
|
$postData = $this->request->getPost();
|
||||||
|
$logoFile = $this->request->getFile('insurer_logo');
|
||||||
|
|
||||||
$rules = [
|
$rules = [
|
||||||
'name' => [
|
'name' => [
|
||||||
'rules' => 'required',
|
'rules' => 'required',
|
||||||
@ -513,19 +516,27 @@ class MasterController extends AdminController
|
|||||||
]
|
]
|
||||||
],
|
],
|
||||||
'insurer_logo' => [
|
'insurer_logo' => [
|
||||||
'rules' => 'if_exist|is_image[insurer_logo]|max_size[insurer_logo,200]|ext_in[insurer_logo,jpg,jpeg,png]',
|
'rules' => 'permit_empty|is_image[insurer_logo]|max_size[insurer_logo,200]|ext_in[insurer_logo,jpg,jpeg,png]',
|
||||||
'errors' => [
|
'errors' => [
|
||||||
'is_image' => 'The uploaded file must be an image',
|
'is_image' => 'The uploaded file must be an image',
|
||||||
'max_size' => 'File size should not exceed 200 KB',
|
'max_size' => 'File size should not exceed 200 KB',
|
||||||
'ext_in' => 'Allowed file types: jpg, jpeg, png',
|
'ext_in' => 'Only JPG, JPEG, and PNG files are allowed.',
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|
||||||
if (!$this->validate($rules)) {
|
if (!$this->validateData($postData, $rules)) {
|
||||||
|
$errors = $this->validator->getErrors();
|
||||||
|
|
||||||
|
$mainMessage = 'Input validation failed';
|
||||||
|
|
||||||
|
if (isset($errors['insurer_logo']) && (strpos($errors['insurer_logo'], 'Security') !== false || strpos($errors['insurer_logo'], 'Forbidden') !== false)) {
|
||||||
|
$mainMessage = 'File upload rejected: Security policy violation.';
|
||||||
|
}
|
||||||
|
|
||||||
return $this->response->setStatusCode(400)->setJSON([
|
return $this->response->setStatusCode(400)->setJSON([
|
||||||
'status' => false,
|
'status' => false,
|
||||||
'message' => 'Input validation failed',
|
'message' => $mainMessage, // This will change based on the error
|
||||||
'code' => 400,
|
'code' => 400,
|
||||||
'errors' => $this->validator->getErrors()
|
'errors' => $this->validator->getErrors()
|
||||||
]);
|
]);
|
||||||
@ -2967,6 +2978,7 @@ class MasterController extends AdminController
|
|||||||
'files' => WRITEPATH . 'uploads/commission/files',
|
'files' => WRITEPATH . 'uploads/commission/files',
|
||||||
'rules' => WRITEPATH . 'uploads/commission/rules',
|
'rules' => WRITEPATH . 'uploads/commission/rules',
|
||||||
'claim_sample_forms' => ROOTPATH . 'public/claim_sample_forms/',
|
'claim_sample_forms' => ROOTPATH . 'public/claim_sample_forms/',
|
||||||
|
'tmp' => ROOTPATH . 'public/tmp/',
|
||||||
'bds_dump_excel' => WRITEPATH . 'uploads/bds_dump_excel/',
|
'bds_dump_excel' => WRITEPATH . 'uploads/bds_dump_excel/',
|
||||||
'claims_mis' => WRITEPATH . 'uploads/claims_mis/',
|
'claims_mis' => WRITEPATH . 'uploads/claims_mis/',
|
||||||
];
|
];
|
||||||
|
|||||||
@ -94,7 +94,8 @@ class NotificationController extends AdminController
|
|||||||
'member_ecard_mail_btn',
|
'member_ecard_mail_btn',
|
||||||
'member_review_and_summary_mail_btn',
|
'member_review_and_summary_mail_btn',
|
||||||
'account_maneger_summary_mail_btn',
|
'account_maneger_summary_mail_btn',
|
||||||
'client_hr_summary_mail_btn'
|
'client_hr_summary_mail_btn',
|
||||||
|
'hr_cd_insufficient_balance_mail_btn',
|
||||||
];
|
];
|
||||||
$data = [];
|
$data = [];
|
||||||
$emptyTemplate = [];
|
$emptyTemplate = [];
|
||||||
|
|||||||
@ -2273,6 +2273,9 @@
|
|||||||
// print_r($data);
|
// print_r($data);
|
||||||
// die;
|
// die;
|
||||||
|
|
||||||
|
$file_data = $this->request->getFiles() ?? null;
|
||||||
|
$data['file_data'] = $file_data ?? null;
|
||||||
|
|
||||||
if (!isset($data['policy_with_corr'])) {
|
if (!isset($data['policy_with_corr'])) {
|
||||||
$data['policy_with_corr'] = 0;
|
$data['policy_with_corr'] = 0;
|
||||||
} elseif ($data['policy_with_corr']) {
|
} elseif ($data['policy_with_corr']) {
|
||||||
@ -2416,6 +2419,11 @@
|
|||||||
$this->handleCompletedStatus($data, $insert);
|
$this->handleCompletedStatus($data, $insert);
|
||||||
$this->insertOrUpdateCoShareDetails($data, $insert);
|
$this->insertOrUpdateCoShareDetails($data, $insert);
|
||||||
|
|
||||||
|
// policy file upload
|
||||||
|
if(isset($data['doc_name']) && isset($data['file_data']) && !empty($data['doc_name']) && !empty($data['file_data'])){
|
||||||
|
$this->uploadFile($data['doc_name'], $data['file_data'], $insert);
|
||||||
|
}
|
||||||
|
|
||||||
return $this->respond(['status' => true, 'message' => 'Endorsement transaction created successfully'], 200);
|
return $this->respond(['status' => true, 'message' => 'Endorsement transaction created successfully'], 200);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2688,6 +2696,20 @@
|
|||||||
// dd(db_connect()->getLastQuery() ,$pt_bp_amt);
|
// dd(db_connect()->getLastQuery() ,$pt_bp_amt);
|
||||||
$data['base_cd_amount'] = $pt_bp_amt['amount'] ?? null;
|
$data['base_cd_amount'] = $pt_bp_amt['amount'] ?? null;
|
||||||
|
|
||||||
|
$ptFileQuery = $this->PTFileModel
|
||||||
|
->join('policy_transaction', 'pt_files.pt_id = policy_transaction.id')
|
||||||
|
->where('pt_files.pt_id', $id)
|
||||||
|
->where('pt_files.is_active', 1);
|
||||||
|
|
||||||
|
if (!in_array(get_role_id(), [1, 5]) && empty(array_intersect(user_team(), [MANAGEMENT_TEAM_ID, FINANCE_TEAM_ID, BUSINESS_TEAM_ID]))) {
|
||||||
|
|
||||||
|
if (get_role_id() == 4 && in_array(POS_TEAM_ID, user_team())) {
|
||||||
|
$ptFileQuery->where('pt_files.created_by', get_session_userid());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$data['pt_files'] = $ptFileQuery->findAll();
|
||||||
|
|
||||||
if ($data) {
|
if ($data) {
|
||||||
return $this->respond(['status' => true, 'data' => $data, 'pt_id' => $pt_id], 200);
|
return $this->respond(['status' => true, 'data' => $data, 'pt_id' => $pt_id], 200);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@ -776,7 +776,7 @@ class RestAuthenticationController extends AdminController
|
|||||||
|
|
||||||
}else {
|
}else {
|
||||||
|
|
||||||
return $this->respond(['status' => 'failed','code' => 404,'data' => "" , 'message' => 'User not found' ],200);
|
return $this->respond(['status' => 'failed','code' => 404,'data' => "" , 'message' => 'Invalid OTP' ],200);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -786,7 +786,7 @@ class RestAuthenticationController extends AdminController
|
|||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
return $this->respond(['status' => 'failed','code' => 404,'data' => "" , 'message' => 'User not found' ],200);
|
return $this->respond(['status' => 'failed','code' => 404,'data' => "" , 'message' => 'Invalid OTP' ],200);
|
||||||
}
|
}
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
return $this->respond(['status' => 'failed','code' => 500,'data' => $e->getMessage()],500);
|
return $this->respond(['status' => 'failed','code' => 500,'data' => $e->getMessage()],500);
|
||||||
|
|||||||
@ -17,6 +17,8 @@ use PhpOffice\PhpSpreadsheet\Style\Alignment;
|
|||||||
use PhpOffice\PhpSpreadsheet\Style\Fill;
|
use PhpOffice\PhpSpreadsheet\Style\Fill;
|
||||||
use PhpOffice\PhpSpreadsheet\Style\Border;
|
use PhpOffice\PhpSpreadsheet\Style\Border;
|
||||||
|
|
||||||
|
use Firebase\JWT\JWT;
|
||||||
|
|
||||||
class TestingController extends BaseController
|
class TestingController extends BaseController
|
||||||
{
|
{
|
||||||
use ResponseTrait;
|
use ResponseTrait;
|
||||||
@ -983,5 +985,46 @@ class TestingController extends BaseController
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public function metaDashboardDemo()
|
||||||
|
{
|
||||||
|
|
||||||
|
// 🔐 Move this to .env in real projects
|
||||||
|
$METABASE_SECRET_KEY = getenv('METABASE_SECRET_KEY');
|
||||||
|
$policy_id = $this->request->getGet('client_policy');
|
||||||
|
$policy_id = $policy_id ? $policy_id : 4687;
|
||||||
|
$payload = [
|
||||||
|
'resource' => [
|
||||||
|
// 'dashboard' => 1
|
||||||
|
'dashboard' => 2
|
||||||
|
],
|
||||||
|
'params' => (object)['client_policy' => $policy_id], // MUST be object for Metabase
|
||||||
|
'exp' => time() + (10 * 60) // 10 minutes
|
||||||
|
];
|
||||||
|
// dd($payload);
|
||||||
|
$token = JWT::encode($payload, $METABASE_SECRET_KEY, 'HS256');
|
||||||
|
|
||||||
|
// // You can either return token only
|
||||||
|
// return $this->response->setJSON([
|
||||||
|
// 'token' => $token,
|
||||||
|
// 'iframe_url' => "https://your-metabase-domain/embed/dashboard/{$token}#bordered=true&titled=true"
|
||||||
|
// ]);
|
||||||
|
if($this->request->getGet('api') == 1)
|
||||||
|
{
|
||||||
|
return $this->respond([
|
||||||
|
'status' => 'success',
|
||||||
|
'message' => 'Form data received successfully!',
|
||||||
|
'data' => [
|
||||||
|
'metabaseToken' => $token,
|
||||||
|
'metabaseUrl' => 'https://nsights.nhanceindia.in']
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return view('meta_dashboard_demo_one', [
|
||||||
|
'metabaseToken' => $token,
|
||||||
|
'metabaseUrl' => 'https://nsights.nhanceindia.in',
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1151,9 +1151,9 @@ class TicketController extends BaseController
|
|||||||
'errors' => ['required' => 'Employee Email is required']
|
'errors' => ['required' => 'Employee Email is required']
|
||||||
],
|
],
|
||||||
|
|
||||||
'client_name' => [
|
'client_id' => [
|
||||||
'rules' => 'required',
|
'rules' => 'required',
|
||||||
'errors' => ['required' => 'Client Name is required']
|
'errors' => ['required' => 'Client ID is required']
|
||||||
],
|
],
|
||||||
|
|
||||||
'insurer_id' => [
|
'insurer_id' => [
|
||||||
@ -1335,9 +1335,9 @@ class TicketController extends BaseController
|
|||||||
'errors' => ['required' => 'Employee Email is required']
|
'errors' => ['required' => 'Employee Email is required']
|
||||||
],
|
],
|
||||||
|
|
||||||
'client_name' => [
|
'client_id' => [
|
||||||
'rules' => 'required',
|
'rules' => 'required',
|
||||||
'errors' => ['required' => 'Client Name is required']
|
'errors' => ['required' => 'Client ID is required']
|
||||||
],
|
],
|
||||||
|
|
||||||
'insurer_id' => [
|
'insurer_id' => [
|
||||||
|
|||||||
@ -9,6 +9,11 @@ use PhpOffice\PhpSpreadsheet\Cell\Coordinate;
|
|||||||
use Kint\Kint;
|
use Kint\Kint;
|
||||||
use App\Libraries\TpaClaimsImportFactory;
|
use App\Libraries\TpaClaimsImportFactory;
|
||||||
use App\Libraries\TPAClaimsImportServices\FhplClaimImportService;
|
use App\Libraries\TPAClaimsImportServices\FhplClaimImportService;
|
||||||
|
use App\Libraries\TPAClaimsImportServices\MediAssistClaimImportService;
|
||||||
|
use App\Libraries\TPAClaimsImportServices\AbhiClaimImportService;
|
||||||
|
use App\Libraries\TPAClaimsImportServices\RcareClaimImportService;
|
||||||
|
use App\Libraries\TPAClaimsImportServices\VidalClaimImportService;
|
||||||
|
use App\Libraries\TPAClaimsImportServices\IciciClaimImportService;
|
||||||
use App\Libraries\TPAClaimsImportServices\BaseTpaClaimImportService;
|
use App\Libraries\TPAClaimsImportServices\BaseTpaClaimImportService;
|
||||||
|
|
||||||
use App\Models\ClaimDumpFileModel;
|
use App\Models\ClaimDumpFileModel;
|
||||||
@ -1858,23 +1863,21 @@ class TicketServiceController extends BaseController
|
|||||||
|
|
||||||
public function tpaClaimDumpImporter($params)
|
public function tpaClaimDumpImporter($params)
|
||||||
{
|
{
|
||||||
try {
|
$file_id = $params['file_id'] ?? null; // Move outside try to ensure catch can see it
|
||||||
|
|
||||||
$file_id = $params['file_id'] ?? null;
|
try {
|
||||||
$file_path = WRITEPATH . 'uploads/claim_dump_excel/';
|
$file_path = WRITEPATH . 'uploads' . DIRECTORY_SEPARATOR . 'claim_dump_excel' . DIRECTORY_SEPARATOR;
|
||||||
|
|
||||||
if (!$file_id) {
|
if (!$file_id) {
|
||||||
return ['status' => false, 'message' => 'File ID is missing'];
|
return ['status' => false, 'message' => 'File ID is missing'];
|
||||||
}
|
}
|
||||||
|
|
||||||
$fileData = $this->claimDumpFileModel->where('id', $file_id)->first();
|
$fileData = $this->claimDumpFileModel->find((int)$file_id);
|
||||||
|
|
||||||
if (!$fileData) {
|
if (!$fileData) {
|
||||||
return ['status' => false, 'message' => 'Invalid file ID. No file data found'];
|
return ['status' => false, 'message' => 'Invalid file ID. No file data found'];
|
||||||
}
|
}
|
||||||
|
|
||||||
$file_full_path = $file_path . $fileData['file_name'];
|
$file_full_path = $file_path . $fileData['file_name'];
|
||||||
|
|
||||||
if (!is_file($file_full_path)) {
|
if (!is_file($file_full_path)) {
|
||||||
return ['status' => false, 'message' => 'Claim dump file not found'];
|
return ['status' => false, 'message' => 'Claim dump file not found'];
|
||||||
}
|
}
|
||||||
@ -1882,106 +1885,97 @@ class TicketServiceController extends BaseController
|
|||||||
$handler = TpaClaimsImportFactory::make($fileData['tpa_id'] ?? 0);
|
$handler = TpaClaimsImportFactory::make($fileData['tpa_id'] ?? 0);
|
||||||
$result = $handler->runTpaClaimDumpInsert($file_full_path, $file_id);
|
$result = $handler->runTpaClaimDumpInsert($file_full_path, $file_id);
|
||||||
|
|
||||||
// ---------- Prepare update data ----------
|
|
||||||
$data = [];
|
|
||||||
|
|
||||||
if (!empty($result['status']) && $result['status'] === true) {
|
if (!empty($result['status']) && $result['status'] === true) {
|
||||||
$data['status'] = 'success';
|
Jobs::addJob(['job_name' => 'tpaClaimDumpToTicketMasterImporters', 'payload' => ['file_id' => $file_id]]);
|
||||||
$data['reason'] = null;
|
|
||||||
} else {
|
} else {
|
||||||
$data['status'] = 'failed';
|
// FORCE FAIL LOGIC
|
||||||
|
$this->markAsFailed($file_id, $result['message'] ?? 'System error contact admin', $fileData['created_by'] ?? null);
|
||||||
$errorMessage = $result['message'] ?? 'Unknown import error';
|
|
||||||
|
|
||||||
$reason = [
|
|
||||||
'error_summary' => array_count_values([5]),
|
|
||||||
'error_data' => $errorMessage
|
|
||||||
];
|
|
||||||
|
|
||||||
$data['reason'] = json_encode($reason, JSON_UNESCAPED_UNICODE);
|
|
||||||
}
|
|
||||||
|
|
||||||
// dd($data);
|
|
||||||
// ---------- Update DB ----------
|
|
||||||
$sql = "UPDATE claim_dump_files SET status = ?, reason = ? WHERE id = ?";
|
|
||||||
|
|
||||||
$updated = db_connect()->query(
|
|
||||||
$sql,
|
|
||||||
[
|
|
||||||
$data['status'] ?? null,
|
|
||||||
$data['reason'] ?? null,
|
|
||||||
$file_id
|
|
||||||
]
|
|
||||||
);
|
|
||||||
|
|
||||||
if (!$updated) {
|
|
||||||
$this->myLogger->logme('error', 'Claim dump file update failed for file_id: ' . $file_id);
|
|
||||||
}
|
|
||||||
|
|
||||||
dd(db_connect()->getLastQuery()->getQuery());
|
|
||||||
|
|
||||||
if(!empty($result['status']) && $result['status'] === true){
|
|
||||||
$r = Jobs::addJob(['job_name' => 'tpaClaimDumpToTicketMasterImporters', 'payload' => ['file_id' => $file_id]]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return $result;
|
return $result;
|
||||||
|
|
||||||
} catch (\Throwable $th) {
|
} catch (\Throwable $th) {
|
||||||
|
$this->myLogger->logme("error", 'TPA_CLAIM_IMPORTER_JOB : ' . $th->getMessage());
|
||||||
|
|
||||||
$this->myLogger->logme(
|
if (!empty($file_id)) {
|
||||||
"error",
|
$this->markAsFailed($file_id, 'System error contact admin');
|
||||||
'TPA_CLAIM_IMPORTER_JOB : ' .
|
}
|
||||||
$th->getMessage() . ' | Line: ' . $th->getLine()
|
|
||||||
);
|
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'status' => false,
|
'status' => false,
|
||||||
'message' => 'TPA Claim dump import failed',
|
'message' => 'TPA Claim dump import failed',
|
||||||
'error_data' => [
|
'error_data' => $th->getMessage()
|
||||||
'message' => $th->getMessage(),
|
|
||||||
'file' => $th->getFile(),
|
|
||||||
'line' => $th->getLine(),
|
|
||||||
'trace' => $th->getTraceAsString()
|
|
||||||
]
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function markAsFailed($file_id, $message, $user_id = null)
|
||||||
|
{
|
||||||
|
$reason = json_encode([
|
||||||
|
'error_summary' => [5 => 1],
|
||||||
|
'error_data' => $message
|
||||||
|
], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
|
||||||
|
|
||||||
|
$data = [
|
||||||
|
'status' => 'failed',
|
||||||
|
'reason' => $reason,
|
||||||
|
'updated_by' => $user_id
|
||||||
|
];
|
||||||
|
|
||||||
|
// Using the direct update(id, data) method is often more reliable inside try/catch
|
||||||
|
return $this->claimDumpFileModel->update($file_id, $data);
|
||||||
|
}
|
||||||
|
|
||||||
public function tpaClaimDumpToTicketMasterImporters($params)
|
public function tpaClaimDumpToTicketMasterImporters($params)
|
||||||
{
|
{
|
||||||
try {
|
|
||||||
|
|
||||||
$file_id = $params['file_id'] ?? null;
|
$file_id = $params['file_id'] ?? null;
|
||||||
|
$fileData = null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
if (!$file_id) {
|
||||||
|
return ['status' => false, 'message' => 'File ID is missing'];
|
||||||
|
}
|
||||||
|
|
||||||
$fileData = $this->claimDumpFileModel->where('id', $file_id)->first();
|
$fileData = $this->claimDumpFileModel->where('id', $file_id)->first();
|
||||||
|
|
||||||
if (!$fileData) {
|
if (!$fileData) {
|
||||||
return ['status' => false, 'message' => 'Invalid file ID No file data found to import'];
|
return ['status' => false, 'message' => 'Invalid file ID. No file data found to import'];
|
||||||
}
|
}
|
||||||
|
|
||||||
$handler = TpaClaimsImportFactory::make($fileData['tpa_id'] ?? 0);
|
$handler = TpaClaimsImportFactory::make($fileData['tpa_id'] ?? 0);
|
||||||
$result = $handler->runTicketMasterInsert($params);
|
$result = $handler->runTicketMasterInsert($params);
|
||||||
|
|
||||||
|
if (!empty($result['status']) && $result['status'] === true) {
|
||||||
|
// Success: Update the status to success
|
||||||
|
$this->claimDumpFileModel->update($file_id, [
|
||||||
|
'status' => 'success',
|
||||||
|
'reason' => null
|
||||||
|
]);
|
||||||
|
} else {
|
||||||
|
// Logic failure: The runTicketMasterInsert returned status false
|
||||||
|
$this->markAsFailed(
|
||||||
|
$file_id,
|
||||||
|
$result['message'] ?? 'System error contact admin',
|
||||||
|
$fileData['created_by'] ?? null
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
return $result;
|
return $result;
|
||||||
|
|
||||||
} catch (\Throwable $th) {
|
} catch (\Throwable $th) {
|
||||||
|
// Log the full error
|
||||||
|
$this->myLogger->logme("error", 'TICKET_MASTER_CLAIM_IMPORTER_JOB :' . $th->getMessage() . ' at line ' . $th->getLine());
|
||||||
|
|
||||||
$this->myLogger->logme("error", 'TICKET_MASTER_CLAIM_IMPORTER_JOB :' .($th->getMessage() . ' --- ' . $th->getLine() . '----' . $th->getTraceAsString()));
|
// CRITICAL: Even if the code crashes, try to mark the file as failed
|
||||||
|
if ($file_id) {
|
||||||
$errorData = [
|
$this->markAsFailed($file_id, 'Fatal Crash: ' . $th->getMessage(), $fileData['created_by'] ?? null);
|
||||||
'message' => $th->getMessage(),
|
}
|
||||||
'file' => $th->getFile(),
|
|
||||||
'line' => $th->getLine(),
|
|
||||||
'code' => $th->getCode(),
|
|
||||||
'trace' => $th->getTraceAsString(),
|
|
||||||
'trace_array' => $th->getTrace(), // full array version (optional)
|
|
||||||
'function' => $th->getTrace()[0]['function'] ?? null,
|
|
||||||
'class' => $th->getTrace()[0]['class'] ?? null,
|
|
||||||
];
|
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'status' => false,
|
'status' => false,
|
||||||
'message' => $th->getMessage(),
|
'message' => $th->getMessage(),
|
||||||
'error_data' => json_encode($errorData, JSON_PRETTY_PRINT)
|
'error_data' => [
|
||||||
|
'line' => $th->getLine(),
|
||||||
|
'file' => $th->getFile()
|
||||||
|
]
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -114,13 +114,11 @@ class UserController extends AdminController
|
|||||||
// Employee Code
|
// Employee Code
|
||||||
// ======================
|
// ======================
|
||||||
'emp_code' => [
|
'emp_code' => [
|
||||||
'rules' => 'required|alpha_numeric|min_length[3]|max_length[20]|is_unique[user_profiles.emp_code,id,{PrimaryKey}]',
|
'rules' => 'required|min_length[3]|max_length[15]',
|
||||||
'errors' => [
|
'errors' => [
|
||||||
'required' => 'Employee Code is required',
|
'required' => 'Employee Code is required',
|
||||||
'alpha_numeric' => 'Employee Code must be alphanumeric',
|
|
||||||
'min_length' => 'Employee Code must be at least 3 characters',
|
'min_length' => 'Employee Code must be at least 3 characters',
|
||||||
'max_length' => 'Employee Code cannot exceed 20 characters',
|
'max_length' => 'Employee Code cannot exceed 15 characters',
|
||||||
'is_unique' => 'Employee Code already exists'
|
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
|
||||||
@ -141,11 +139,10 @@ class UserController extends AdminController
|
|||||||
// Email
|
// Email
|
||||||
// ======================
|
// ======================
|
||||||
'email' => [
|
'email' => [
|
||||||
'rules' => 'required|valid_email|is_unique[user_profiles.email,id,{PrimaryKey}]',
|
'rules' => 'required|valid_email',
|
||||||
'errors' => [
|
'errors' => [
|
||||||
'required' => 'Email is required',
|
'required' => 'Email is required',
|
||||||
'valid_email' => 'Please enter a valid email address',
|
'valid_email' => 'Please enter a valid email address',
|
||||||
'is_unique' => 'Email already exists'
|
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
|
||||||
@ -153,11 +150,10 @@ class UserController extends AdminController
|
|||||||
// Mobile
|
// Mobile
|
||||||
// ======================
|
// ======================
|
||||||
'mobile' => [
|
'mobile' => [
|
||||||
'rules' => 'required|regex_match[/^[6-9][0-9]{9}$/]|is_unique[user_profiles.mobile,id,{PrimaryKey}]',
|
'rules' => 'required|regex_match[/^[6-9][0-9]{9}$/]',
|
||||||
'errors' => [
|
'errors' => [
|
||||||
'required' => 'Mobile number is required',
|
'required' => 'Mobile number is required',
|
||||||
'regex_match' => 'Enter a valid 10-digit mobile number starting with 6, 7, 8, or 9',
|
'regex_match' => 'Enter a valid 10-digit mobile number starting with 6, 7, 8, or 9',
|
||||||
'is_unique' => 'Mobile number already exists'
|
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
|
||||||
@ -302,13 +298,11 @@ class UserController extends AdminController
|
|||||||
// Employee Code
|
// Employee Code
|
||||||
// ======================
|
// ======================
|
||||||
'emp_code' => [
|
'emp_code' => [
|
||||||
'rules' => 'required|alpha_numeric|min_length[3]|max_length[20]|is_unique[user_profiles.emp_code,id,{PrimaryKey}]',
|
'rules' => 'required|min_length[3]|max_length[15]',
|
||||||
'errors' => [
|
'errors' => [
|
||||||
'required' => 'Employee Code is required',
|
'required' => 'Employee Code is required',
|
||||||
'alpha_numeric' => 'Employee Code must be alphanumeric',
|
|
||||||
'min_length' => 'Employee Code must be at least 3 characters',
|
'min_length' => 'Employee Code must be at least 3 characters',
|
||||||
'max_length' => 'Employee Code cannot exceed 20 characters',
|
'max_length' => 'Employee Code cannot exceed 15 characters',
|
||||||
'is_unique' => 'Employee Code already exists'
|
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
|
||||||
@ -329,11 +323,10 @@ class UserController extends AdminController
|
|||||||
// Email
|
// Email
|
||||||
// ======================
|
// ======================
|
||||||
'email' => [
|
'email' => [
|
||||||
'rules' => 'required|valid_email|is_unique[user_profiles.email,id,{PrimaryKey}]',
|
'rules' => 'required|valid_email',
|
||||||
'errors' => [
|
'errors' => [
|
||||||
'required' => 'Email is required',
|
'required' => 'Email is required',
|
||||||
'valid_email' => 'Please enter a valid email address',
|
'valid_email' => 'Please enter a valid email address',
|
||||||
'is_unique' => 'Email already exists'
|
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
|
||||||
@ -341,11 +334,10 @@ class UserController extends AdminController
|
|||||||
// Mobile
|
// Mobile
|
||||||
// ======================
|
// ======================
|
||||||
'mobile' => [
|
'mobile' => [
|
||||||
'rules' => 'required|regex_match[/^[6-9][0-9]{9}$/]|is_unique[user_profiles.mobile,id,{PrimaryKey}]',
|
'rules' => 'required|regex_match[/^[6-9][0-9]{9}$/]',
|
||||||
'errors' => [
|
'errors' => [
|
||||||
'required' => 'Mobile number is required',
|
'required' => 'Mobile number is required',
|
||||||
'regex_match' => 'Enter a valid 10-digit mobile number starting with 6, 7, 8, or 9',
|
'regex_match' => 'Enter a valid 10-digit mobile number starting with 6, 7, 8, or 9',
|
||||||
'is_unique' => 'Mobile number already exists'
|
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
|
||||||
|
|||||||
@ -39,7 +39,7 @@ class GlobalPostFileUploadGuard implements FilterInterface
|
|||||||
];
|
];
|
||||||
|
|
||||||
protected array $blockedExtensions = [
|
protected array $blockedExtensions = [
|
||||||
'php', 'phtml', 'pht', 'phar', 'php3', 'php4', 'php5', 'php7', 'php8', 'phps',
|
'php', 'phtml', 'html', 'pht', 'phar', 'php3', 'php4', 'php5', 'php7', 'php8', 'phps',
|
||||||
'cgi', 'fcgi', 'pl', 'py', 'rb', 'lua', 'tcl', 'go', 'rs', 'jar', 'class',
|
'cgi', 'fcgi', 'pl', 'py', 'rb', 'lua', 'tcl', 'go', 'rs', 'jar', 'class',
|
||||||
'exe', 'dll', 'com', 'bat', 'cmd', 'msi', 'vbs', 'ps1', 'scr',
|
'exe', 'dll', 'com', 'bat', 'cmd', 'msi', 'vbs', 'ps1', 'scr',
|
||||||
'sh', 'bash', 'zsh', 'apk', 'app', 'deb', 'rpm', 'bin', 'run',
|
'sh', 'bash', 'zsh', 'apk', 'app', 'deb', 'rpm', 'bin', 'run',
|
||||||
@ -100,7 +100,7 @@ class GlobalPostFileUploadGuard implements FilterInterface
|
|||||||
}
|
}
|
||||||
|
|
||||||
// --- 2. Double Extension Attack Check ---
|
// --- 2. Double Extension Attack Check ---
|
||||||
if (preg_match('/\.(php|phtml|phar|exe|sh|bat|cmd|js|jsp|asp|aspx|py|pl)\./i', $originalName)) {
|
if (preg_match('/\.(php|html|phtml|phar|exe|sh|bat|cmd|js|jsp|asp|aspx|py|pl)\./i', $originalName)) {
|
||||||
$this->block("Double extension attack", $clientIp, $uri, $inputName, $originalName, $mime, $extension, $size);
|
$this->block("Double extension attack", $clientIp, $uri, $inputName, $originalName, $mime, $extension, $size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -67,7 +67,8 @@ class DepositHelper
|
|||||||
'balance' => $newBalance, // Include the new balance in the data array
|
'balance' => $newBalance, // Include the new balance in the data array
|
||||||
'cd_ac_pk'=> isset($data['cd_ac_pk'])?$data['cd_ac_pk']:null,
|
'cd_ac_pk'=> isset($data['cd_ac_pk'])?$data['cd_ac_pk']:null,
|
||||||
'record_date' => $data['record_date'] ?? null,
|
'record_date' => $data['record_date'] ?? null,
|
||||||
'policy_transaction_id' => $data['pt_id'] ?? null
|
'policy_transaction_id' => $data['pt_id'] ?? null,
|
||||||
|
'file_id' => $data['file_id'] ?? null,
|
||||||
];
|
];
|
||||||
|
|
||||||
// Insert data and get the insert ID
|
// Insert data and get the insert ID
|
||||||
|
|||||||
@ -947,22 +947,38 @@ if (!function_exists('validateExcelFile')) {
|
|||||||
|
|
||||||
function validateExcelFile($file)
|
function validateExcelFile($file)
|
||||||
{
|
{
|
||||||
$allowed = [
|
// 1. Check if the file was uploaded without errors
|
||||||
|
if (! $file->isValid() || $file->hasMoved()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2. Size check (16MB)
|
||||||
|
if ($file->getSizeByUnit('mb') > 16) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 3. Define allowed types
|
||||||
|
$allowedMimes = [
|
||||||
'application/vnd.ms-excel',
|
'application/vnd.ms-excel',
|
||||||
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
|
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
|
||||||
'application/vnd.oasis.opendocument.spreadsheet'
|
'application/vnd.oasis.opendocument.spreadsheet',
|
||||||
|
'application/zip',
|
||||||
|
'application/octet-stream'
|
||||||
];
|
];
|
||||||
|
|
||||||
// if ($file->getError() !== UPLOAD_ERR_OK) return 'Upload error';
|
$allowedExtensions = ['xls', 'xlsx', 'ods', 'xlsm'];
|
||||||
// if ($file->getSize() > (16 * 1024 * 1024)) return 'File too large';
|
|
||||||
// if (!in_array($file->getClientMimeType(), $allowed, true)) return 'Invalid file type';
|
|
||||||
|
|
||||||
if ($file->getError() !== UPLOAD_ERR_OK) return false;
|
// Get the actual values using CI4 methods
|
||||||
if ($file->getSize() > (16 * 1024 * 1024)) return false;
|
$mime = $file->getClientMimeType();
|
||||||
if (!in_array($file->getClientMimeType(), $allowed, true)) return false;
|
$extension = $file->getExtension(); // This is the CI4 method
|
||||||
|
|
||||||
|
// 4. Validate
|
||||||
|
if (in_array($mime, $allowedMimes) || in_array($extension, $allowedExtensions)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!function_exists('generate_ecard_download_link_based_on_tpa')) {
|
if (!function_exists('generate_ecard_download_link_based_on_tpa')) {
|
||||||
@ -1108,6 +1124,7 @@ if (!function_exists('get_cd_balance')) {
|
|||||||
|
|
||||||
return [
|
return [
|
||||||
'has_cd_balance' => $session->has('cd_balance'),
|
'has_cd_balance' => $session->has('cd_balance'),
|
||||||
|
'cd_balance' => $session->get('cd_balance') ?? null,
|
||||||
'hr_data' => $session->get('hr_data') ?? [],
|
'hr_data' => $session->get('hr_data') ?? [],
|
||||||
'cd_balance_info' => $session->get('cd_balance_info') ?? [],
|
'cd_balance_info' => $session->get('cd_balance_info') ?? [],
|
||||||
];
|
];
|
||||||
|
|||||||
@ -86,10 +86,6 @@ class AbhiClaimImportService extends BaseTpaClaimImportService
|
|||||||
|
|
||||||
// Employee / Member details
|
// Employee / Member details
|
||||||
'member_code' => 'emp_code',
|
'member_code' => 'emp_code',
|
||||||
'relation' => 'relationship',
|
|
||||||
|
|
||||||
// Policy / Claim identifiers
|
|
||||||
'policy_number' => 'policy_no',
|
|
||||||
'abhi_claim_no' => 'claim_number',
|
'abhi_claim_no' => 'claim_number',
|
||||||
|
|
||||||
// Dates
|
// Dates
|
||||||
@ -114,6 +110,8 @@ class AbhiClaimImportService extends BaseTpaClaimImportService
|
|||||||
// Misc
|
// Misc
|
||||||
'diagnosis' => 'claim_description',
|
'diagnosis' => 'claim_description',
|
||||||
'healthcard_id' => 'tpa_no',
|
'healthcard_id' => 'tpa_no',
|
||||||
|
'claim_type' => 'tpa_claim_type',
|
||||||
|
|
||||||
];
|
];
|
||||||
|
|
||||||
protected $statusMapping = [
|
protected $statusMapping = [
|
||||||
@ -174,9 +172,7 @@ class AbhiClaimImportService extends BaseTpaClaimImportService
|
|||||||
}
|
}
|
||||||
|
|
||||||
$ticketMasterModel = new TicketMasterModel();
|
$ticketMasterModel = new TicketMasterModel();
|
||||||
$ticketMasterModel->insertBatch($data);
|
return $ticketMasterModel->insertBatch($data);
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -187,9 +183,7 @@ class AbhiClaimImportService extends BaseTpaClaimImportService
|
|||||||
}
|
}
|
||||||
|
|
||||||
$builder = $this->db->table('claims_dump_abhi');
|
$builder = $this->db->table('claims_dump_abhi');
|
||||||
$builder->insertBatch($data);
|
return $builder->updateBatch($data, 'id');
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -200,9 +194,7 @@ class AbhiClaimImportService extends BaseTpaClaimImportService
|
|||||||
}
|
}
|
||||||
|
|
||||||
$builder = $this->db->table('claims_dump_abhi');
|
$builder = $this->db->table('claims_dump_abhi');
|
||||||
$builder->insertBatch($data);
|
return $builder->updateBatch($data, 'id');
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -307,7 +299,7 @@ class AbhiClaimImportService extends BaseTpaClaimImportService
|
|||||||
|
|
||||||
if ($isduplicate) {
|
if ($isduplicate) {
|
||||||
$reason = "This claim already exists in our system.";
|
$reason = "This claim already exists in our system.";
|
||||||
$rejecetd_reason[$row['id']] = ["ticket_master_insert_reject_reason" => $reason];
|
$rejecetd_reason[] = ["id" => $row['id'], "master_reject_reason" => $reason];
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -326,23 +318,15 @@ class AbhiClaimImportService extends BaseTpaClaimImportService
|
|||||||
if (!empty($employee_data)) {
|
if (!empty($employee_data)) {
|
||||||
$item['emp_id'] = $employee_data['id'] ?? null;
|
$item['emp_id'] = $employee_data['id'] ?? null;
|
||||||
$item['emp_name'] = $employee_data['name'] ?? null;
|
$item['emp_name'] = $employee_data['name'] ?? null;
|
||||||
|
$item['emp_code'] = $employee_data['emp_code'] ?? null;
|
||||||
$item['emp_mail'] = $employee_data['email_corporate'] ?? null;
|
$item['emp_mail'] = $employee_data['email_corporate'] ?? null;
|
||||||
$item['emp_mobile'] = $employee_data['mobile'] ?? null;
|
$item['emp_mobile'] = $employee_data['mobile'] ?? null;
|
||||||
$item['insured_emp_id'] = $employee_data['insured_emp_id'] ?? null;
|
$item['insured_emp_id'] = $employee_data['insured_emp_id'] ?? null;
|
||||||
$item['insured_name'] = $employee_data['insured_name'] ?? null;
|
$item['insured_name'] = $employee_data['insured_name'] ?? null;
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
$reason = sprintf(
|
$reason = 'This employee not exist in our system.';
|
||||||
'The policy number "%s" does not exist in our system. ' .
|
$rejecetd_reason[] = ["id" => $row['id'], "master_reject_reason" => $reason];
|
||||||
'Details - Client ID: %s, Client Policy ID: %s, Employee Number: %s, Relationship: %s',
|
|
||||||
$row['insurer_policy_number'],
|
|
||||||
$file_data['client_id'],
|
|
||||||
$file_data['client_policy_id'],
|
|
||||||
$row['employee_number'],
|
|
||||||
$item['relationship']
|
|
||||||
);
|
|
||||||
|
|
||||||
$rejecetd_reason[$row['id']] = ["ticket_master_insert_reject_reason" => $reason];
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -440,41 +424,31 @@ class AbhiClaimImportService extends BaseTpaClaimImportService
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
$relation = strtolower($relation);
|
// trim removes whitespace, strtolower handles case sensitivity
|
||||||
|
$relation = strtolower(trim($relation));
|
||||||
|
|
||||||
if (str_contains($relation, 'self')) {
|
// Mapping specific keywords to standardized outputs
|
||||||
return 'self';
|
// ORDER MATTERS: Specific phrases (in-law) must come before general ones (father)
|
||||||
|
$map = [
|
||||||
|
'father-in-law' => ['father in law', 'father-in-law', 'fil'],
|
||||||
|
'mother-in-law' => ['mother in law', 'mother-in-law', 'mil'],
|
||||||
|
'father' => ['father', 'papa', 'dad'],
|
||||||
|
'mother' => ['mother', 'mom', 'mummy'],
|
||||||
|
'spouse' => ['spouse', 'wife', 'husband', 'hubby'],
|
||||||
|
'daughter' => ['daughter', 'daug'],
|
||||||
|
'son' => ['son'],
|
||||||
|
'self' => ['self', 'employee', 'main'],
|
||||||
|
];
|
||||||
|
|
||||||
|
foreach ($map as $standard => $keywords) {
|
||||||
|
foreach ($keywords as $keyword) {
|
||||||
|
if (str_contains($relation, $keyword)) {
|
||||||
|
return $standard;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (str_contains($relation, 'spouse') || str_contains($relation, 'wife') || str_contains($relation, 'husband')) {
|
return null;
|
||||||
return 'spouse';
|
|
||||||
}
|
|
||||||
|
|
||||||
if (str_contains($relation, 'daughter')) {
|
|
||||||
return 'daughter';
|
|
||||||
}
|
|
||||||
|
|
||||||
if (str_contains($relation, 'son')) {
|
|
||||||
return 'son';
|
|
||||||
}
|
|
||||||
|
|
||||||
if (str_contains($relation, 'father in law') || str_contains($relation, 'father-in-law')) {
|
|
||||||
return 'father-in-law';
|
|
||||||
}
|
|
||||||
|
|
||||||
if (str_contains($relation, 'mother in law') || str_contains($relation, 'mother-in-law')) {
|
|
||||||
return 'mother-in-law';
|
|
||||||
}
|
|
||||||
|
|
||||||
if (str_contains($relation, 'father')) {
|
|
||||||
return 'father';
|
|
||||||
}
|
|
||||||
|
|
||||||
if (str_contains($relation, 'mother')) {
|
|
||||||
return 'mother';
|
|
||||||
}
|
|
||||||
|
|
||||||
return null; // unmatched case
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -27,79 +27,49 @@ abstract class BaseTpaClaimImportService
|
|||||||
*/
|
*/
|
||||||
public function runTpaClaimDumpInsert(string $filePath, int $fileId): array
|
public function runTpaClaimDumpInsert(string $filePath, int $fileId): array
|
||||||
{
|
{
|
||||||
$this->db->transStart();
|
// 1. Start Transaction
|
||||||
|
$this->db->transBegin();
|
||||||
|
|
||||||
|
try {
|
||||||
$fileData = $this->claimDumpFileModel->where('id', $fileId)->first();
|
$fileData = $this->claimDumpFileModel->where('id', $fileId)->first();
|
||||||
|
|
||||||
|
// Determine sheet name logic...
|
||||||
if (env('FHPL_PRIMARY_KEY_CONSTANT') == $fileData['tpa_id']) {
|
if (env('FHPL_PRIMARY_KEY_CONSTANT') == $fileData['tpa_id']) {
|
||||||
$rows = $this->readExcelBySheetName($filePath, 'Claims&Preauth');
|
$rows = $this->readExcelBySheetName($filePath, 'Claims&Preauth');
|
||||||
} else if (env('R_CARE_PRIMARY_KEY_CONSTANT') == $fileData['tpa_id']) {
|
} else if (env('R_CARE_PRIMARY_KEY_CONSTANT') == $fileData['tpa_id']) {
|
||||||
$rows = $this->readExcelBySheetName($filePath, 'CL');
|
$rows = $this->readExcelBySheetName($filePath, 'CL');
|
||||||
// $AL = $this->readExcelBySheetName($filePath, 'AL');
|
|
||||||
// $rows = array_merge($CL, $AL);
|
|
||||||
} else {
|
} else {
|
||||||
$rows = $this->readExcel($filePath);
|
$rows = $this->readExcel($filePath);
|
||||||
}
|
}
|
||||||
// dd($rows);
|
|
||||||
|
|
||||||
if (empty($rows)) {
|
if (empty($rows)) {
|
||||||
|
$this->db->transRollback(); // ROLLBACK BEFORE RETURN
|
||||||
return ['status' => false, 'message' => 'Excel file contains no data or wrong file upload'];
|
return ['status' => false, 'message' => 'Excel file contains no data or wrong file upload'];
|
||||||
}
|
}
|
||||||
|
|
||||||
$tpaInsertData = $this->mapTPAData($rows, $fileId);
|
$tpaInsertData = $this->mapTPAData($rows, $fileId);
|
||||||
// dd($tpaInsertData);
|
|
||||||
|
|
||||||
if (empty($tpaInsertData)) {
|
if (empty($tpaInsertData)) {
|
||||||
|
$this->db->transRollback(); // ROLLBACK BEFORE RETURN
|
||||||
return ['status' => false, 'message' => 'These records already exist in the system.'];
|
return ['status' => false, 'message' => 'These records already exist in the system.'];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (env('FHPL_PRIMARY_KEY_CONSTANT') == $fileData['tpa_id']) {
|
|
||||||
$ClaimsDumpFhplModel = $this->db->table('claims_dump_fhpl');
|
|
||||||
$return_res = $ClaimsDumpFhplModel->insertBatch($tpaInsertData);
|
|
||||||
} else if (env('R_CARE_PRIMARY_KEY_CONSTANT') == $fileData['tpa_id']) {
|
|
||||||
$ClaimsDumpIciciModel = $this->db->table('claims_dump_reliance');
|
|
||||||
$return_res = $ClaimsDumpIciciModel->insertBatch($tpaInsertData);
|
|
||||||
} else if (env('ICICI_PRIMARY_KEY_CONSTANT') == $fileData['tpa_id']) {
|
|
||||||
$ClaimsDumpIciciModel = $this->db->table('claims_dump_icici');
|
|
||||||
$return_res = $ClaimsDumpIciciModel->insertBatch($tpaInsertData);
|
|
||||||
} else if (env('ABHI_PRIMARY_KEY_CONSTANT') == $fileData['tpa_id']) {
|
|
||||||
// $ClaimsDumpAbhiModel = $this->db->table('claims_dump_abhi');
|
|
||||||
// $return_res = $ClaimsDumpAbhiModel->insertBatch($tpaInsertData);
|
|
||||||
$return_res = $this->bulkInsertTPATable($tpaInsertData);
|
$return_res = $this->bulkInsertTPATable($tpaInsertData);
|
||||||
} else if (env('VIDAL_PRIMARY_KEY_CONSTANT') == $fileData['tpa_id']) {
|
|
||||||
$ClaimsDumpVidalModel = $this->db->table('claims_dump_vidal');
|
|
||||||
$return_res = $ClaimsDumpVidalModel->insertBatch($tpaInsertData);
|
|
||||||
} else if (env('MEDI_ASSIST_PRIMARY_KEY_CONSTANT') == $fileData['tpa_id']) {
|
|
||||||
$ClaimsDumpMediAssistModel = $this->db->table('claims_dump_medi_assist');
|
|
||||||
$return_res = $ClaimsDumpMediAssistModel->insertBatch($tpaInsertData);
|
|
||||||
} else{
|
|
||||||
|
|
||||||
}
|
if ($return_res !== true) {
|
||||||
|
$this->db->transRollback(); // ROLLBACK BEFORE RETURN
|
||||||
// $return_res = $this->bulkInsertTPATable($tpaInsertData);
|
|
||||||
|
|
||||||
if (!$return_res) {
|
|
||||||
return ['status' => false, 'message' => 'TPA Import bulk insert failed'];
|
return ['status' => false, 'message' => 'TPA Import bulk insert failed'];
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->db->transComplete();
|
// 2. Commit if everything is fine
|
||||||
|
$this->db->transCommit();
|
||||||
|
return ['status' => true, 'message' => 'File uploaded successfully', 'record_count' => count($tpaInsertData)];
|
||||||
|
|
||||||
if ($this->db->transStatus() === false) {
|
} catch (\Throwable $e) {
|
||||||
|
// 3. Rollback on any crash/exception
|
||||||
$error = $this->db->error();
|
$this->db->transRollback();
|
||||||
|
return ['status' => false, 'message' => 'System error : ' . $e->getMessage()];
|
||||||
$error_data = [
|
|
||||||
'message' => $error['message'] ?: 'Unknown DB error',
|
|
||||||
'code' => $error['code'] ?? null,
|
|
||||||
'last_query' => (string) $this->db->getLastQuery()
|
|
||||||
];
|
|
||||||
|
|
||||||
// dd($error_data);
|
|
||||||
// unset($error_data['last_query']);
|
|
||||||
return ['status' => false, 'message' => 'TPA Import transaction failed', 'error_data' => $error_data];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return ['status' => true, 'message' => 'File uploaded successfully', 'record_count' => count($tpaInsertData ?? [])];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -107,34 +77,65 @@ abstract class BaseTpaClaimImportService
|
|||||||
*/
|
*/
|
||||||
public function runTicketMasterInsert(array $params): array
|
public function runTicketMasterInsert(array $params): array
|
||||||
{
|
{
|
||||||
$this->db->transStart();
|
// 1. Start manual transaction
|
||||||
|
$this->db->transBegin();
|
||||||
|
|
||||||
|
try {
|
||||||
$file_id = $params['file_id'];
|
$file_id = $params['file_id'];
|
||||||
|
|
||||||
$ticketMasterData = $this->mapClaimMasterData($file_id);
|
$ticketMasterData = $this->mapClaimMasterData($file_id);
|
||||||
|
|
||||||
|
// Check if mapping failed
|
||||||
if (!$ticketMasterData['status']) {
|
if (!$ticketMasterData['status']) {
|
||||||
|
$this->db->transRollback(); // ALWAYS rollback before early return
|
||||||
return $ticketMasterData;
|
return $ticketMasterData;
|
||||||
}
|
}
|
||||||
|
|
||||||
$return_res = $this->importClaimMaster($ticketMasterData['mapped_array']);
|
$message = '';
|
||||||
|
$hasExecutedTask = false;
|
||||||
|
|
||||||
if(!$return_res){
|
// Process Mapped Data
|
||||||
|
if (!empty($ticketMasterData['mapped_array'])) {
|
||||||
|
$insert_res = $this->importClaimMaster($ticketMasterData['mapped_array']);
|
||||||
|
if (!$insert_res) {
|
||||||
|
$this->db->transRollback();
|
||||||
return ['status' => false, 'message' => 'Ticket Master Claim bulk insert failed'];
|
return ['status' => false, 'message' => 'Ticket Master Claim bulk insert failed'];
|
||||||
}
|
}
|
||||||
|
$message .= 'Ticket Master Claim bulk insert success. ';
|
||||||
$this->updateTicketMasterRejectedReasonInTPATable($ticketMasterData['rejected_reason_array']);
|
$hasExecutedTask = true;
|
||||||
|
|
||||||
$this->db->transComplete();
|
|
||||||
|
|
||||||
if ($this->db->transStatus() === false) {
|
|
||||||
return ['status' => false, 'message' => 'Ticket Master Claim bulk insert failed'];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Process Rejected Reasons
|
||||||
|
if (!empty($ticketMasterData['rejected_reason_array'])) {
|
||||||
|
$update_res = $this->updateTicketMasterRejectedReasonInTPATable($ticketMasterData['rejected_reason_array']);
|
||||||
|
if (!$update_res) {
|
||||||
|
$this->db->transRollback();
|
||||||
|
return ['status' => false, 'message' => 'Updating rejected reasons failed'];
|
||||||
|
}
|
||||||
|
|
||||||
|
$message .= empty($ticketMasterData['mapped_array'])
|
||||||
|
? 'Those employees not in our system. '
|
||||||
|
: 'Ticket Master Claim rejected reason updated successfully. ';
|
||||||
|
$hasExecutedTask = true;
|
||||||
|
}
|
||||||
|
|
||||||
return ['status' => true, 'message' => 'Ticket Master Claim inserted successfully'];
|
// If nothing was processed but no error occurred
|
||||||
|
if (!$hasExecutedTask) {
|
||||||
|
$this->db->transRollback();
|
||||||
|
return ['status' => false, 'message' => 'No data found to process.'];
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2. Commit the transaction
|
||||||
|
$this->db->transCommit();
|
||||||
|
return ['status' => true, 'message' => trim($message)];
|
||||||
|
|
||||||
|
} catch (\Throwable $th) {
|
||||||
|
// 3. Rollback on crash
|
||||||
|
$this->db->transRollback();
|
||||||
|
return [
|
||||||
|
'status' => false,
|
||||||
|
'message' => 'System error during Ticket Master Insert: ' . $th->getMessage()
|
||||||
|
];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -273,27 +274,14 @@ abstract class BaseTpaClaimImportService
|
|||||||
*/
|
*/
|
||||||
protected function getTpaClaimDumpData(string $table, array $params): array
|
protected function getTpaClaimDumpData(string $table, array $params): array
|
||||||
{
|
{
|
||||||
$tpaClaimDumpDataCount = $this->db
|
|
||||||
->table($table)
|
|
||||||
->where('is_active', 1)
|
|
||||||
->where('file_id', $params['file_id'])
|
|
||||||
->where('ticket_id IS NULL')
|
|
||||||
->countAllResults();
|
|
||||||
|
|
||||||
$batch_size = 100;
|
|
||||||
$total_batch = (int) ceil($tpaClaimDumpDataCount / $batch_size);
|
|
||||||
$batch_no = isset($params['batch_no']) ? (int) $params['batch_no'] : null;
|
|
||||||
$last_emp_id = (int) ($params['last_emp_id'] ?? 0);
|
|
||||||
|
|
||||||
|
|
||||||
return $this->db
|
return $this->db
|
||||||
->table($table)
|
->table($table)
|
||||||
->where('is_active', 1)
|
->where('is_active', 1)
|
||||||
->where('file_id', $params['file_id'])
|
->where('file_id', $params['file_id'])
|
||||||
->where('ticket_id IS NULL')
|
->where('ticket_id IS NULL')
|
||||||
|
->where('master_reject_reason IS NULL')
|
||||||
->get()
|
->get()
|
||||||
->getResultArray();
|
->getResultArray();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -304,10 +292,11 @@ abstract class BaseTpaClaimImportService
|
|||||||
$EmployeeModel = new EmployeeModel();
|
$EmployeeModel = new EmployeeModel();
|
||||||
$employeeData = $EmployeeModel
|
$employeeData = $EmployeeModel
|
||||||
->select([
|
->select([
|
||||||
'employees.id AS emp_id',
|
'employees.id AS id',
|
||||||
'employees.email_corporate AS emp_mail',
|
'employees.email_corporate AS emp_mail',
|
||||||
'employees.mobile AS emp_mobile',
|
'employees.mobile AS emp_mobile',
|
||||||
'employees.name AS emp_name',
|
'employees.name AS name',
|
||||||
|
'employees.emp_code AS emp_code',
|
||||||
|
|
||||||
// insured employee
|
// insured employee
|
||||||
'insured.id AS insured_emp_id',
|
'insured.id AS insured_emp_id',
|
||||||
|
|||||||
@ -141,12 +141,8 @@ class FhplClaimImportService extends BaseTpaClaimImportService
|
|||||||
// Claim / Reference
|
// Claim / Reference
|
||||||
'claim_id' => 'claim_number',
|
'claim_id' => 'claim_number',
|
||||||
|
|
||||||
// Policy
|
|
||||||
'policy_no' => 'policy_no',
|
|
||||||
|
|
||||||
// Employee / Member
|
// Employee / Member
|
||||||
'employee_id' => 'emp_code',
|
'employee_id' => 'emp_code',
|
||||||
'relationship' => 'relationship',
|
|
||||||
|
|
||||||
// Claim Dates
|
// Claim Dates
|
||||||
'admission_date' => 'doa',
|
'admission_date' => 'doa',
|
||||||
@ -177,10 +173,7 @@ class FhplClaimImportService extends BaseTpaClaimImportService
|
|||||||
// Payment
|
// Payment
|
||||||
'cheque_no' => 'utr_details',
|
'cheque_no' => 'utr_details',
|
||||||
'uhid_no' => 'tpa_no',
|
'uhid_no' => 'tpa_no',
|
||||||
|
'claim_type' => 'tpa_claim_type',
|
||||||
'priority' => 1,
|
|
||||||
'mode_of_intimation' => 5,
|
|
||||||
'ticket_type_id' => 1,
|
|
||||||
];
|
];
|
||||||
|
|
||||||
protected $statusMapping = [
|
protected $statusMapping = [
|
||||||
@ -239,9 +232,7 @@ class FhplClaimImportService extends BaseTpaClaimImportService
|
|||||||
}
|
}
|
||||||
|
|
||||||
$ticketMasterModel = new TicketMasterModel();
|
$ticketMasterModel = new TicketMasterModel();
|
||||||
$ticketMasterModel->insertBatch($data);
|
return $ticketMasterModel->insertBatch($data);
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -252,9 +243,7 @@ class FhplClaimImportService extends BaseTpaClaimImportService
|
|||||||
}
|
}
|
||||||
|
|
||||||
$builder = $this->db->table('claims_dump_fhpl');
|
$builder = $this->db->table('claims_dump_fhpl');
|
||||||
$builder->insertBatch($data);
|
return $builder->updateBatch($data, 'id');
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -265,9 +254,7 @@ class FhplClaimImportService extends BaseTpaClaimImportService
|
|||||||
}
|
}
|
||||||
|
|
||||||
$builder = $this->db->table('claims_dump_fhpl');
|
$builder = $this->db->table('claims_dump_fhpl');
|
||||||
$builder->insertBatch($data);
|
return $builder->updateBatch($data, 'id');
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -372,7 +359,7 @@ class FhplClaimImportService extends BaseTpaClaimImportService
|
|||||||
|
|
||||||
if ($isduplicate) {
|
if ($isduplicate) {
|
||||||
$reason = "This claim already exists in our system.";
|
$reason = "This claim already exists in our system.";
|
||||||
$rejecetd_reason[$row['id']] = ["ticket_master_insert_reject_reason" => $reason];
|
$rejecetd_reason[] = ["id" => $row['id'], "master_reject_reason" => $reason];
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -391,23 +378,15 @@ class FhplClaimImportService extends BaseTpaClaimImportService
|
|||||||
if (!empty($employee_data)) {
|
if (!empty($employee_data)) {
|
||||||
$item['emp_id'] = $employee_data['id'] ?? null;
|
$item['emp_id'] = $employee_data['id'] ?? null;
|
||||||
$item['emp_name'] = $employee_data['name'] ?? null;
|
$item['emp_name'] = $employee_data['name'] ?? null;
|
||||||
|
$item['emp_code'] = $employee_data['emp_code'] ?? null;
|
||||||
$item['emp_mail'] = $employee_data['email_corporate'] ?? null;
|
$item['emp_mail'] = $employee_data['email_corporate'] ?? null;
|
||||||
$item['emp_mobile'] = $employee_data['mobile'] ?? null;
|
$item['emp_mobile'] = $employee_data['mobile'] ?? null;
|
||||||
$item['insured_emp_id'] = $employee_data['insured_emp_id'] ?? null;
|
$item['insured_emp_id'] = $employee_data['insured_emp_id'] ?? null;
|
||||||
$item['insured_name'] = $employee_data['insured_name'] ?? null;
|
$item['insured_name'] = $employee_data['insured_name'] ?? null;
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
$reason = sprintf(
|
$reason = 'This employee not exist in our system.';
|
||||||
'The policy number "%s" does not exist in our system. ' .
|
$rejecetd_reason[] = ["id" => $row['id'], "master_reject_reason" => $reason];
|
||||||
'Details - Client ID: %s, Client Policy ID: %s, Employee Number: %s, Relationship: %s',
|
|
||||||
$row['insurer_policy_number'],
|
|
||||||
$file_data['client_id'],
|
|
||||||
$file_data['client_policy_id'],
|
|
||||||
$row['employee_number'],
|
|
||||||
$item['relationship']
|
|
||||||
);
|
|
||||||
|
|
||||||
$rejecetd_reason[$row['id']] = ["ticket_master_insert_reject_reason" => $reason];
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -81,7 +81,6 @@ class IciciClaimImportService extends BaseTpaClaimImportService
|
|||||||
|
|
||||||
// Employee / Member
|
// Employee / Member
|
||||||
'employee_member_id' => 'emp_code',
|
'employee_member_id' => 'emp_code',
|
||||||
'relation_group' => 'relationship',
|
|
||||||
|
|
||||||
// Claim
|
// Claim
|
||||||
'claim_number' => 'claim_number',
|
'claim_number' => 'claim_number',
|
||||||
@ -101,6 +100,7 @@ class IciciClaimImportService extends BaseTpaClaimImportService
|
|||||||
'cheque_number' => 'utr_details',
|
'cheque_number' => 'utr_details',
|
||||||
'uhid' => 'tpa_no',
|
'uhid' => 'tpa_no',
|
||||||
'rejected_query_desc' => 'claim_description',
|
'rejected_query_desc' => 'claim_description',
|
||||||
|
'type_of_claim' => 'tpa_claim_type',
|
||||||
];
|
];
|
||||||
|
|
||||||
protected $statusMapping = [
|
protected $statusMapping = [
|
||||||
@ -168,9 +168,7 @@ class IciciClaimImportService extends BaseTpaClaimImportService
|
|||||||
}
|
}
|
||||||
|
|
||||||
$ticketMasterModel = new TicketMasterModel();
|
$ticketMasterModel = new TicketMasterModel();
|
||||||
$ticketMasterModel->insertBatch($data);
|
return $ticketMasterModel->insertBatch($data);
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -181,9 +179,7 @@ class IciciClaimImportService extends BaseTpaClaimImportService
|
|||||||
}
|
}
|
||||||
|
|
||||||
$builder = $this->db->table('claims_dump_icici');
|
$builder = $this->db->table('claims_dump_icici');
|
||||||
$builder->insertBatch($data);
|
return $builder->upsertBatch($data, 'id');
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -194,9 +190,7 @@ class IciciClaimImportService extends BaseTpaClaimImportService
|
|||||||
}
|
}
|
||||||
|
|
||||||
$builder = $this->db->table('claims_dump_icici');
|
$builder = $this->db->table('claims_dump_icici');
|
||||||
$builder->insertBatch($data);
|
return $builder->updateBatch($data, 'id');
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -301,7 +295,7 @@ class IciciClaimImportService extends BaseTpaClaimImportService
|
|||||||
|
|
||||||
if ($isduplicate) {
|
if ($isduplicate) {
|
||||||
$reason = "This claim already exists in our system.";
|
$reason = "This claim already exists in our system.";
|
||||||
$rejecetd_reason[$row['id']] = ["ticket_master_insert_reject_reason" => $reason];
|
$rejecetd_reason[] = ["id" => $row['id'], "master_reject_reason" => $reason];
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -320,23 +314,15 @@ class IciciClaimImportService extends BaseTpaClaimImportService
|
|||||||
if (!empty($employee_data)) {
|
if (!empty($employee_data)) {
|
||||||
$item['emp_id'] = $employee_data['id'] ?? null;
|
$item['emp_id'] = $employee_data['id'] ?? null;
|
||||||
$item['emp_name'] = $employee_data['name'] ?? null;
|
$item['emp_name'] = $employee_data['name'] ?? null;
|
||||||
|
$item['emp_code'] = $employee_data['emp_code'] ?? null;
|
||||||
$item['emp_mail'] = $employee_data['email_corporate'] ?? null;
|
$item['emp_mail'] = $employee_data['email_corporate'] ?? null;
|
||||||
$item['emp_mobile'] = $employee_data['mobile'] ?? null;
|
$item['emp_mobile'] = $employee_data['mobile'] ?? null;
|
||||||
$item['insured_emp_id'] = $employee_data['insured_emp_id'] ?? null;
|
$item['insured_emp_id'] = $employee_data['insured_emp_id'] ?? null;
|
||||||
$item['insured_name'] = $employee_data['insured_name'] ?? null;
|
$item['insured_name'] = $employee_data['insured_name'] ?? null;
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
$reason = sprintf(
|
$reason = 'This employee not exist in our system.';
|
||||||
'The policy number "%s" does not exist in our system. ' .
|
$rejecetd_reason[] = ["id" => $row['id'], "master_reject_reason" => $reason];
|
||||||
'Details - Client ID: %s, Client Policy ID: %s, Employee Number: %s, Relationship: %s',
|
|
||||||
$row['insurer_policy_number'],
|
|
||||||
$file_data['client_id'],
|
|
||||||
$file_data['client_policy_id'],
|
|
||||||
$row['employee_number'],
|
|
||||||
$item['relationship']
|
|
||||||
);
|
|
||||||
|
|
||||||
$rejecetd_reason[$row['id']] = ["ticket_master_insert_reject_reason" => $reason];
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -49,7 +49,7 @@ class MediAssistClaimImportService extends BaseTpaClaimImportService
|
|||||||
["excel_column" => ["col_name" => "intimation_id", "col_index" => 30], "db_column" => "intimation_id"],
|
["excel_column" => ["col_name" => "intimation_id", "col_index" => 30], "db_column" => "intimation_id"],
|
||||||
["excel_column" => ["col_name" => "intimation_date", "col_index" => 31], "db_column" => "intimation_date"],
|
["excel_column" => ["col_name" => "intimation_date", "col_index" => 31], "db_column" => "intimation_date"],
|
||||||
["excel_column" => ["col_name" => "settled_date", "col_index" => 32], "db_column" => "settled_date"],
|
["excel_column" => ["col_name" => "settled_date", "col_index" => 32], "db_column" => "settled_date"],
|
||||||
["excel_column" => ["col_name" => "ClaimSource", "col_index" => 33], "db_column" => "claim_source"],
|
["excel_column" => ["col_name" => "ClaimSource", "col_index" => 33], "db_column" => "ClaimSource"],
|
||||||
["excel_column" => ["col_name" => "claim_mode_of_rcpt", "col_index" => 34], "db_column" => "claim_mode_of_rcpt"],
|
["excel_column" => ["col_name" => "claim_mode_of_rcpt", "col_index" => 34], "db_column" => "claim_mode_of_rcpt"],
|
||||||
["excel_column" => ["col_name" => "claim_type", "col_index" => 35], "db_column" => "claim_type"],
|
["excel_column" => ["col_name" => "claim_type", "col_index" => 35], "db_column" => "claim_type"],
|
||||||
["excel_column" => ["col_name" => "claim_sub_type", "col_index" => 36], "db_column" => "claim_sub_type"],
|
["excel_column" => ["col_name" => "claim_sub_type", "col_index" => 36], "db_column" => "claim_sub_type"],
|
||||||
@ -72,16 +72,16 @@ class MediAssistClaimImportService extends BaseTpaClaimImportService
|
|||||||
["excel_column" => ["col_name" => "hospital_state", "col_index" => 53], "db_column" => "hospital_state"],
|
["excel_column" => ["col_name" => "hospital_state", "col_index" => 53], "db_column" => "hospital_state"],
|
||||||
["excel_column" => ["col_name" => "hospital_pincode", "col_index" => 54], "db_column" => "hospital_pincode"],
|
["excel_column" => ["col_name" => "hospital_pincode", "col_index" => 54], "db_column" => "hospital_pincode"],
|
||||||
["excel_column" => ["col_name" => "hospital_address", "col_index" => 55], "db_column" => "hospital_address"],
|
["excel_column" => ["col_name" => "hospital_address", "col_index" => 55], "db_column" => "hospital_address"],
|
||||||
["excel_column" => ["col_name" => "Clinic_DoctorName_Hospital", "col_index" => 56], "db_column" => "clinic_doctorname_hospital"],
|
["excel_column" => ["col_name" => "Clinic_DoctorName_Hospital", "col_index" => 56], "db_column" => "Clinic_DoctorName_Hospital"],
|
||||||
["excel_column" => ["col_name" => "OPD_pincode", "col_index" => 57], "db_column" => "opd_pincode"],
|
["excel_column" => ["col_name" => "OPD_pincode", "col_index" => 57], "db_column" => "OPD_pincode"],
|
||||||
["excel_column" => ["col_name" => "payable_amount_OPD_Consultation", "col_index" => 58], "db_column" => "payable_amount_opd_consultation"],
|
["excel_column" => ["col_name" => "payable_amount_OPD_Consultation", "col_index" => 58], "db_column" => "payable_amount_OPD_Consultation"],
|
||||||
["excel_column" => ["col_name" => "payable_amount_Dental", "col_index" => 59], "db_column" => "payable_amount_dental"],
|
["excel_column" => ["col_name" => "payable_amount_Dental", "col_index" => 59], "db_column" => "payable_amount_Dental"],
|
||||||
["excel_column" => ["col_name" => "payable_amount_Diagnostics", "col_index" => 60], "db_column" => "payable_amount_diagnostics"],
|
["excel_column" => ["col_name" => "payable_amount_Diagnostics", "col_index" => 60], "db_column" => "payable_amount_Diagnostics"],
|
||||||
["excel_column" => ["col_name" => "payable_amount_Other", "col_index" => 61], "db_column" => "payable_amount_other"],
|
["excel_column" => ["col_name" => "payable_amount_Other", "col_index" => 61], "db_column" => "payable_amount_Other"],
|
||||||
["excel_column" => ["col_name" => "payable_amount_Pharmacy", "col_index" => 62], "db_column" => "payable_amount_pharmacy"],
|
["excel_column" => ["col_name" => "payable_amount_Pharmacy", "col_index" => 62], "db_column" => "payable_amount_Pharmacy"],
|
||||||
["excel_column" => ["col_name" => "payable_amount_Vaccination", "col_index" => 63], "db_column" => "payable_amount_vaccination"],
|
["excel_column" => ["col_name" => "payable_amount_Vaccination", "col_index" => 63], "db_column" => "payable_amount_Vaccination"],
|
||||||
["excel_column" => ["col_name" => "payable_amount_Miscellaneous_Charges", "col_index" => 64], "db_column" => "payable_amount_miscellaneous_charges"],
|
["excel_column" => ["col_name" => "payable_amount_Miscellaneous_Charges", "col_index" => 64], "db_column" => "payable_amount_Miscellaneous_Charges"],
|
||||||
["excel_column" => ["col_name" => "payable_amount_Health_Checkup", "col_index" => 65], "db_column" => "payable_amount_health_checkup"],
|
["excel_column" => ["col_name" => "payable_amount_Health_Checkup", "col_index" => 65], "db_column" => "payable_amount_Health_Checkup"],
|
||||||
["excel_column" => ["col_name" => "deduction_amount_copay", "col_index" => 66], "db_column" => "deduction_amount_copay"],
|
["excel_column" => ["col_name" => "deduction_amount_copay", "col_index" => 66], "db_column" => "deduction_amount_copay"],
|
||||||
["excel_column" => ["col_name" => "deduction_amount_excess_ailment", "col_index" => 67], "db_column" => "deduction_amount_excess_ailment"],
|
["excel_column" => ["col_name" => "deduction_amount_excess_ailment", "col_index" => 67], "db_column" => "deduction_amount_excess_ailment"],
|
||||||
["excel_column" => ["col_name" => "deduction_amount_excess_policy", "col_index" => 68], "db_column" => "deduction_amount_excess_policy"],
|
["excel_column" => ["col_name" => "deduction_amount_excess_policy", "col_index" => 68], "db_column" => "deduction_amount_excess_policy"],
|
||||||
@ -116,10 +116,8 @@ class MediAssistClaimImportService extends BaseTpaClaimImportService
|
|||||||
|
|
||||||
// Employee / Beneficiary details
|
// Employee / Beneficiary details
|
||||||
'pribenef_employee_code' => 'emp_code',
|
'pribenef_employee_code' => 'emp_code',
|
||||||
'benef_relation' => 'relationship',
|
|
||||||
|
|
||||||
// Policy / Claim identifiers
|
// Policy / Claim identifiers
|
||||||
'policy_no' => 'policy_no',
|
|
||||||
'claim_id' => 'claim_number',
|
'claim_id' => 'claim_number',
|
||||||
'event_id' => 'tpa_no',
|
'event_id' => 'tpa_no',
|
||||||
'claim_pre_auths' => 'tpa_claim_push_reference_no',
|
'claim_pre_auths' => 'tpa_claim_push_reference_no',
|
||||||
@ -153,6 +151,7 @@ class MediAssistClaimImportService extends BaseTpaClaimImportService
|
|||||||
|
|
||||||
// Payment
|
// Payment
|
||||||
'utr_no' => 'utr_details',
|
'utr_no' => 'utr_details',
|
||||||
|
'claim_type' => 'tpa_claim_type',
|
||||||
];
|
];
|
||||||
|
|
||||||
protected $statusMapping = [
|
protected $statusMapping = [
|
||||||
@ -166,7 +165,6 @@ class MediAssistClaimImportService extends BaseTpaClaimImportService
|
|||||||
'Cashless Document Awaited' => 3,
|
'Cashless Document Awaited' => 3,
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ABSTRACT FUNCTIONs
|
* ABSTRACT FUNCTIONs
|
||||||
*/
|
*/
|
||||||
@ -177,9 +175,8 @@ class MediAssistClaimImportService extends BaseTpaClaimImportService
|
|||||||
}
|
}
|
||||||
|
|
||||||
$builder = $this->db->table('claims_dump_medi_assist');
|
$builder = $this->db->table('claims_dump_medi_assist');
|
||||||
$builder->insertBatch($data);
|
return $builder->insertBatch($data);
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -190,9 +187,7 @@ class MediAssistClaimImportService extends BaseTpaClaimImportService
|
|||||||
}
|
}
|
||||||
|
|
||||||
$ticketMasterModel = new TicketMasterModel();
|
$ticketMasterModel = new TicketMasterModel();
|
||||||
$ticketMasterModel->insertBatch($data);
|
return $ticketMasterModel->insertBatch($data);
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -216,9 +211,7 @@ class MediAssistClaimImportService extends BaseTpaClaimImportService
|
|||||||
}
|
}
|
||||||
|
|
||||||
$builder = $this->db->table('claims_dump_medi_assist');
|
$builder = $this->db->table('claims_dump_medi_assist');
|
||||||
$builder->insertBatch($data);
|
return $builder->updateBatch($data, 'id');
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -319,7 +312,7 @@ class MediAssistClaimImportService extends BaseTpaClaimImportService
|
|||||||
|
|
||||||
if ($isduplicate) {
|
if ($isduplicate) {
|
||||||
$reason = "This claim already exists in our system.";
|
$reason = "This claim already exists in our system.";
|
||||||
$rejecetd_reason[$row['id']] = ["ticket_master_insert_reject_reason" => $reason];
|
$rejecetd_reason[] = ["id" => $row['id'], "master_reject_reason" => $reason];
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -338,23 +331,15 @@ class MediAssistClaimImportService extends BaseTpaClaimImportService
|
|||||||
if (!empty($employee_data)) {
|
if (!empty($employee_data)) {
|
||||||
$item['emp_id'] = $employee_data['id'] ?? null;
|
$item['emp_id'] = $employee_data['id'] ?? null;
|
||||||
$item['emp_name'] = $employee_data['name'] ?? null;
|
$item['emp_name'] = $employee_data['name'] ?? null;
|
||||||
|
$item['emp_code'] = $employee_data['emp_code'] ?? null;
|
||||||
$item['emp_mail'] = $employee_data['email_corporate'] ?? null;
|
$item['emp_mail'] = $employee_data['email_corporate'] ?? null;
|
||||||
$item['emp_mobile'] = $employee_data['mobile'] ?? null;
|
$item['emp_mobile'] = $employee_data['mobile'] ?? null;
|
||||||
$item['insured_emp_id'] = $employee_data['insured_emp_id'] ?? null;
|
$item['insured_emp_id'] = $employee_data['insured_emp_id'] ?? null;
|
||||||
$item['insured_name'] = $employee_data['insured_name'] ?? null;
|
$item['insured_name'] = $employee_data['insured_name'] ?? null;
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
$reason = sprintf(
|
$reason = 'This employee not exist in our system.';
|
||||||
'The policy number "%s" does not exist in our system. ' .
|
$rejecetd_reason[] = ["id" => $row['id'], "master_reject_reason" => $reason];
|
||||||
'Details - Client ID: %s, Client Policy ID: %s, Employee Number: %s, Relationship: %s',
|
|
||||||
$row['insurer_policy_number'],
|
|
||||||
$file_data['client_id'],
|
|
||||||
$file_data['client_policy_id'],
|
|
||||||
$row['employee_number'],
|
|
||||||
$item['relationship']
|
|
||||||
);
|
|
||||||
|
|
||||||
$rejecetd_reason[$row['id']] = ["ticket_master_insert_reject_reason" => $reason];
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -60,10 +60,8 @@ class RcareClaimImportService extends BaseTpaClaimImportService
|
|||||||
|
|
||||||
// Employee / Member
|
// Employee / Member
|
||||||
'employee_member_id' => 'emp_code',
|
'employee_member_id' => 'emp_code',
|
||||||
'relation' => 'relationship',
|
|
||||||
|
|
||||||
// Policy
|
// Policy
|
||||||
'policy_number' => 'policy_no',
|
|
||||||
'policy_start_date' => 'date_of_incep',
|
'policy_start_date' => 'date_of_incep',
|
||||||
|
|
||||||
// Claim Dates
|
// Claim Dates
|
||||||
@ -159,9 +157,7 @@ class RcareClaimImportService extends BaseTpaClaimImportService
|
|||||||
}
|
}
|
||||||
|
|
||||||
$ticketMasterModel = new TicketMasterModel();
|
$ticketMasterModel = new TicketMasterModel();
|
||||||
$ticketMasterModel->insertBatch($data);
|
return $ticketMasterModel->insertBatch($data);
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -172,9 +168,7 @@ class RcareClaimImportService extends BaseTpaClaimImportService
|
|||||||
}
|
}
|
||||||
|
|
||||||
$builder = $this->db->table('claims_dump_reliance');
|
$builder = $this->db->table('claims_dump_reliance');
|
||||||
$builder->insertBatch($data);
|
return $builder->updateBatch($data, 'id');
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -185,9 +179,7 @@ class RcareClaimImportService extends BaseTpaClaimImportService
|
|||||||
}
|
}
|
||||||
|
|
||||||
$builder = $this->db->table('claims_dump_reliance');
|
$builder = $this->db->table('claims_dump_reliance');
|
||||||
$builder->insertBatch($data);
|
return $builder->updateBatch($data, 'id');
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -291,7 +283,7 @@ class RcareClaimImportService extends BaseTpaClaimImportService
|
|||||||
|
|
||||||
if ($isduplicate) {
|
if ($isduplicate) {
|
||||||
$reason = "This claim already exists in our system.";
|
$reason = "This claim already exists in our system.";
|
||||||
$rejecetd_reason[$row['id']] = ["ticket_master_insert_reject_reason" => $reason];
|
$rejecetd_reason[] = ["id" => $row['id'], "master_reject_reason" => $reason];
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -310,23 +302,15 @@ class RcareClaimImportService extends BaseTpaClaimImportService
|
|||||||
if (!empty($employee_data)) {
|
if (!empty($employee_data)) {
|
||||||
$item['emp_id'] = $employee_data['id'] ?? null;
|
$item['emp_id'] = $employee_data['id'] ?? null;
|
||||||
$item['emp_name'] = $employee_data['name'] ?? null;
|
$item['emp_name'] = $employee_data['name'] ?? null;
|
||||||
|
$item['emp_code'] = $employee_data['emp_code'] ?? null;
|
||||||
$item['emp_mail'] = $employee_data['email_corporate'] ?? null;
|
$item['emp_mail'] = $employee_data['email_corporate'] ?? null;
|
||||||
$item['emp_mobile'] = $employee_data['mobile'] ?? null;
|
$item['emp_mobile'] = $employee_data['mobile'] ?? null;
|
||||||
$item['insured_emp_id'] = $employee_data['insured_emp_id'] ?? null;
|
$item['insured_emp_id'] = $employee_data['insured_emp_id'] ?? null;
|
||||||
$item['insured_name'] = $employee_data['insured_name'] ?? null;
|
$item['insured_name'] = $employee_data['insured_name'] ?? null;
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
$reason = sprintf(
|
$reason = 'This employee not exist in our system.';
|
||||||
'The policy number "%s" does not exist in our system. ' .
|
$rejecetd_reason[] = ["id" => $row['id'], "master_reject_reason" => $reason];
|
||||||
'Details - Client ID: %s, Client Policy ID: %s, Employee Number: %s, Relationship: %s',
|
|
||||||
$row['insurer_policy_number'],
|
|
||||||
$file_data['client_id'],
|
|
||||||
$file_data['client_policy_id'],
|
|
||||||
$row['employee_number'],
|
|
||||||
$item['relationship']
|
|
||||||
);
|
|
||||||
|
|
||||||
$rejecetd_reason[$row['id']] = ["ticket_master_insert_reject_reason" => $reason];
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -163,7 +163,6 @@ class VidalClaimImportService extends BaseTpaClaimImportService
|
|||||||
["excel_column" => "Last Document Received date", "db_column" => "last_document_received_date"],
|
["excel_column" => "Last Document Received date", "db_column" => "last_document_received_date"],
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
||||||
protected $mapping = [
|
protected $mapping = [
|
||||||
|
|
||||||
["excel_column" => ["col_name" => "TPA Policy Number", "col_index" => 0], "db_column" => "tpa_policy_number"],
|
["excel_column" => ["col_name" => "TPA Policy Number", "col_index" => 0], "db_column" => "tpa_policy_number"],
|
||||||
@ -312,11 +311,9 @@ class VidalClaimImportService extends BaseTpaClaimImportService
|
|||||||
["excel_column" => ["col_name" => "Last Document Received date", "col_index" => 113], "db_column" => "last_document_received_date"],
|
["excel_column" => ["col_name" => "Last Document Received date", "col_index" => 113], "db_column" => "last_document_received_date"],
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
||||||
protected $ticketMasterMapping = [
|
protected $ticketMasterMapping = [
|
||||||
|
|
||||||
// Policy / Claim identifiers
|
// Policy / Claim identifiers
|
||||||
'insurer_policy_number' => 'policy_no',
|
|
||||||
'insurer_claim_number' => 'claim_number',
|
'insurer_claim_number' => 'claim_number',
|
||||||
'tpa_claim_number' => 'tpa_claim_id',
|
'tpa_claim_number' => 'tpa_claim_id',
|
||||||
|
|
||||||
@ -346,9 +343,9 @@ class VidalClaimImportService extends BaseTpaClaimImportService
|
|||||||
|
|
||||||
// Meta
|
// Meta
|
||||||
'file_id' => 'file_id',
|
'file_id' => 'file_id',
|
||||||
|
'type_of_claim' => 'tpa_claim_type',
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
||||||
protected $statusMapping = [
|
protected $statusMapping = [
|
||||||
'CL Paid with Settlement Letter' => 11,
|
'CL Paid with Settlement Letter' => 11,
|
||||||
'CL Rejected' => 8,
|
'CL Rejected' => 8,
|
||||||
@ -380,9 +377,7 @@ class VidalClaimImportService extends BaseTpaClaimImportService
|
|||||||
}
|
}
|
||||||
|
|
||||||
$ticketMasterModel = new TicketMasterModel();
|
$ticketMasterModel = new TicketMasterModel();
|
||||||
$ticketMasterModel->insertBatch($data);
|
return $ticketMasterModel->insertBatch($data);
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -393,9 +388,7 @@ class VidalClaimImportService extends BaseTpaClaimImportService
|
|||||||
}
|
}
|
||||||
|
|
||||||
$builder = $this->db->table('claims_dump_vidal');
|
$builder = $this->db->table('claims_dump_vidal');
|
||||||
$builder->insertBatch($data);
|
return $builder->updateBatch($data, 'id');
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -406,9 +399,7 @@ class VidalClaimImportService extends BaseTpaClaimImportService
|
|||||||
}
|
}
|
||||||
|
|
||||||
$builder = $this->db->table('claims_dump_vidal');
|
$builder = $this->db->table('claims_dump_vidal');
|
||||||
$builder->insertBatch($data);
|
return $builder->updateBatch($data, 'id');
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -514,7 +505,7 @@ class VidalClaimImportService extends BaseTpaClaimImportService
|
|||||||
|
|
||||||
if ($isduplicate) {
|
if ($isduplicate) {
|
||||||
$reason = "This claim already exists in our system.";
|
$reason = "This claim already exists in our system.";
|
||||||
$rejecetd_reason[$row['id']] = ["ticket_master_insert_reject_reason" => $reason];
|
$rejecetd_reason[] = ["id" => $row['id'], "master_reject_reason" => $reason];
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -534,22 +525,14 @@ class VidalClaimImportService extends BaseTpaClaimImportService
|
|||||||
$item['emp_id'] = $employee_data['id'] ?? null;
|
$item['emp_id'] = $employee_data['id'] ?? null;
|
||||||
$item['emp_name'] = $employee_data['name'] ?? null;
|
$item['emp_name'] = $employee_data['name'] ?? null;
|
||||||
$item['emp_mail'] = $employee_data['email_corporate'] ?? null;
|
$item['emp_mail'] = $employee_data['email_corporate'] ?? null;
|
||||||
|
$item['emp_code'] = $employee_data['emp_code'] ?? null;
|
||||||
$item['emp_mobile'] = $employee_data['mobile'] ?? null;
|
$item['emp_mobile'] = $employee_data['mobile'] ?? null;
|
||||||
$item['insured_emp_id'] = $employee_data['insured_emp_id'] ?? null;
|
$item['insured_emp_id'] = $employee_data['insured_emp_id'] ?? null;
|
||||||
$item['insured_name'] = $employee_data['insured_name'] ?? null;
|
$item['insured_name'] = $employee_data['insured_name'] ?? null;
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
$reason = sprintf(
|
$reason = 'This employee not exist in our system.';
|
||||||
'The policy number "%s" does not exist in our system. ' .
|
$rejecetd_reason[] = ["id" => $row['id'], "master_reject_reason" => $reason];
|
||||||
'Details - Client ID: %s, Client Policy ID: %s, Employee Number: %s, Relationship: %s',
|
|
||||||
$row['insurer_policy_number'],
|
|
||||||
$file_data['client_id'],
|
|
||||||
$file_data['client_policy_id'],
|
|
||||||
$row['employee_number'],
|
|
||||||
$item['relationship']
|
|
||||||
);
|
|
||||||
|
|
||||||
$rejecetd_reason[$row['id']] = ["ticket_master_insert_reject_reason" => $reason];
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
179
app/Libraries/ZipService.php
Normal file
179
app/Libraries/ZipService.php
Normal file
@ -0,0 +1,179 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Libraries;
|
||||||
|
|
||||||
|
use ZipArchive;
|
||||||
|
|
||||||
|
class ZipService
|
||||||
|
{
|
||||||
|
protected $s3Service;
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->s3Service = new S3Service();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Zips a local folder and uploads it to S3
|
||||||
|
*/
|
||||||
|
public function zipAndUploadS3(string $localFolderPath, string $s3Folder = '', string $zipName = ''): array
|
||||||
|
{
|
||||||
|
// dd($localFolderPath, $s3Folder, $zipName);
|
||||||
|
if (!is_dir($localFolderPath)) {
|
||||||
|
return ['status' => false, 'message' => 'Local directory does not exist'];
|
||||||
|
}
|
||||||
|
|
||||||
|
// 1. Prepare naming
|
||||||
|
$folderName = basename($localFolderPath);
|
||||||
|
$zipName = $zipName ?: $folderName . '_' . time() . '.zip';
|
||||||
|
$tempZipPath = FCPATH . 'tmp/' . $zipName;
|
||||||
|
|
||||||
|
// 2. Create the Local Zip
|
||||||
|
$zipResult = $this->createLocalZip($localFolderPath, $tempZipPath);
|
||||||
|
|
||||||
|
if (!$zipResult['status']) {
|
||||||
|
return $zipResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
// 3. Upload to S3
|
||||||
|
$uploadResult = $this->s3Service->upload($tempZipPath, $s3Folder, $zipName);
|
||||||
|
// dd($uploadResult);
|
||||||
|
|
||||||
|
// 4. Cleanup
|
||||||
|
if (file_exists($tempZipPath)) {
|
||||||
|
unlink($tempZipPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
$get_presinged_url = $this->s3Service->getPresignedUrl($uploadResult['key'], 2,880);
|
||||||
|
|
||||||
|
// To delete the original temprory folder after zipping and uploading
|
||||||
|
// $this->deleteDirectory($localFolderPath);
|
||||||
|
|
||||||
|
return ['status' => true, 'data' => $uploadResult, 'presigned_url' => $get_presinged_url];
|
||||||
|
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
log_message('error', 'Zip/Upload Error: ' . $e->getMessage());
|
||||||
|
return ['status' => false, 'message' => $e->getMessage()];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Zips a local folder using native ZipArchive
|
||||||
|
*/
|
||||||
|
|
||||||
|
public function createLocalZip(string $localFolderPath, string $destinationPath): array
|
||||||
|
{
|
||||||
|
// 1. Validate Source Directory
|
||||||
|
if (!is_dir($localFolderPath)) {
|
||||||
|
return ['status' => false, 'message' => 'Source directory does not exist'];
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2. Check if folder is empty (ignoring hidden files)
|
||||||
|
$filesInFolder = array_diff(scandir($localFolderPath), array('.', '..'));
|
||||||
|
if (empty($filesInFolder)) {
|
||||||
|
return ['status' => false, 'message' => 'No records found to compress'];
|
||||||
|
}
|
||||||
|
|
||||||
|
// 3. Ensure the destination directory exists and is writable
|
||||||
|
$destDir = dirname($destinationPath);
|
||||||
|
if (!is_dir($destDir)) {
|
||||||
|
mkdir($destDir, 0777, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
$zip = new ZipArchive();
|
||||||
|
|
||||||
|
// 4. Open the zip file
|
||||||
|
$openZip = $zip->open($destinationPath, ZipArchive::CREATE | ZipArchive::OVERWRITE);
|
||||||
|
if ($openZip !== true) {
|
||||||
|
return ['status' => false, 'message' => "Could not open Zip. Error code: " . $openZip];
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
$files = new \RecursiveIteratorIterator(
|
||||||
|
new \RecursiveDirectoryIterator($localFolderPath, \RecursiveDirectoryIterator::SKIP_DOTS),
|
||||||
|
\RecursiveIteratorIterator::LEAVES_ONLY
|
||||||
|
);
|
||||||
|
|
||||||
|
$fileCount = 0;
|
||||||
|
$sourcePath = realpath($localFolderPath);
|
||||||
|
|
||||||
|
foreach ($files as $file) {
|
||||||
|
if (!$file->isDir()) {
|
||||||
|
$filePath = $file->getRealPath();
|
||||||
|
|
||||||
|
// Calculate relative path correctly
|
||||||
|
$relativePath = ltrim(substr($filePath, strlen($sourcePath)), DIRECTORY_SEPARATOR);
|
||||||
|
|
||||||
|
// Add to zip
|
||||||
|
if ($zip->addFile($filePath, $relativePath)) {
|
||||||
|
$fileCount++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 5. Finalize
|
||||||
|
if ($fileCount > 0) {
|
||||||
|
if (!$zip->close()) {
|
||||||
|
return ['status' => false, 'message' => 'Failed to write ZIP file to disk (Check permissions/space)'];
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$zip->close();
|
||||||
|
return ['status' => false, 'message' => 'No files were added to the archive'];
|
||||||
|
}
|
||||||
|
|
||||||
|
return [
|
||||||
|
'status' => true,
|
||||||
|
'path' => $destinationPath,
|
||||||
|
'count' => $fileCount,
|
||||||
|
'message' => 'Zip created successfully'
|
||||||
|
];
|
||||||
|
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
// Only attempt to close if the zip object was successfully opened
|
||||||
|
if (isset($zip->status) && $zip->status !== ZipArchive::ER_OK) {
|
||||||
|
@$zip->close();
|
||||||
|
}
|
||||||
|
log_message('error', 'Local Zip Error: ' . $e->getMessage());
|
||||||
|
return ['status' => false, 'message' => 'from catch Exception: ' . $e->getMessage()];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function deleteDirectory($dir)
|
||||||
|
{
|
||||||
|
if (!file_exists($dir)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!is_dir($dir)) {
|
||||||
|
// Use @ to suppress warnings if the file is already gone or locked
|
||||||
|
// return @unlink($dir);
|
||||||
|
return unlink($dir);
|
||||||
|
}
|
||||||
|
|
||||||
|
// scandir can return false if the directory isn't readable
|
||||||
|
$items = scandir($dir);
|
||||||
|
if ($items === false) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($items as $item) {
|
||||||
|
if ($item == '.' || $item == '..') {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Recursively call the function
|
||||||
|
if (!$this->deleteDirectory($dir . DIRECTORY_SEPARATOR . $item)) {
|
||||||
|
// If a child cannot be deleted, attempt to change its permissions and try once more
|
||||||
|
@chmod($dir . DIRECTORY_SEPARATOR . $item, 0777);
|
||||||
|
if (!$this->deleteDirectory($dir . DIRECTORY_SEPARATOR . $item)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Finally, remove the empty directory
|
||||||
|
return @rmdir($dir);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -30,6 +30,7 @@ class ClientDepositModel extends Model
|
|||||||
"cd_ac_pk",
|
"cd_ac_pk",
|
||||||
"record_date",
|
"record_date",
|
||||||
"policy_transaction_id",
|
"policy_transaction_id",
|
||||||
|
"file_id",
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -303,6 +303,8 @@ class ClientPolicyModel extends Model
|
|||||||
$caseSql = "";
|
$caseSql = "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$url = base_url('downloadCdSplitUpFile?id=');
|
||||||
|
|
||||||
// Fetch the deposit data based on client and insurer IDs
|
// Fetch the deposit data based on client and insurer IDs
|
||||||
$query = $this->db->table('cash_deposit')
|
$query = $this->db->table('cash_deposit')
|
||||||
->select('cash_deposit.*')
|
->select('cash_deposit.*')
|
||||||
@ -312,6 +314,12 @@ class ClientPolicyModel extends Model
|
|||||||
// ->select('policies.name as policy_name')
|
// ->select('policies.name as policy_name')
|
||||||
->select('policy_type.policy_type')
|
->select('policy_type.policy_type')
|
||||||
->select('user_profiles.first_name as username')
|
->select('user_profiles.first_name as username')
|
||||||
|
->select("CASE
|
||||||
|
WHEN cash_deposit.file_id IS NOT NULL AND cash_deposit.file_id != ''
|
||||||
|
THEN CONCAT(" . $this->db->escape($url) . ", cash_deposit.file_id)
|
||||||
|
ELSE NULL
|
||||||
|
END AS split_up_url",
|
||||||
|
false)
|
||||||
->select($caseSql)
|
->select($caseSql)
|
||||||
->join('user_profiles', 'user_profiles.id = cash_deposit.created_by', 'left')
|
->join('user_profiles', 'user_profiles.id = cash_deposit.created_by', 'left')
|
||||||
->join('insurers', 'insurers.id = cash_deposit.insurer_id', 'left')
|
->join('insurers', 'insurers.id = cash_deposit.insurer_id', 'left')
|
||||||
@ -337,7 +345,9 @@ class ClientPolicyModel extends Model
|
|||||||
}
|
}
|
||||||
$query->orderBy('cash_deposit.id', 'DESC');
|
$query->orderBy('cash_deposit.id', 'DESC');
|
||||||
|
|
||||||
return $query->get()->getResult();
|
$data = $query->get()->getResult();
|
||||||
|
|
||||||
|
return $data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -280,6 +280,14 @@ class EmployeePolicyModel extends Model
|
|||||||
'cp.policy_no',
|
'cp.policy_no',
|
||||||
'cp.policy_type_id',
|
'cp.policy_type_id',
|
||||||
'cp.is_addon',
|
'cp.is_addon',
|
||||||
|
'(
|
||||||
|
select id from employees
|
||||||
|
where emp_code = emp.emp_code
|
||||||
|
and client_id = emp.client_id
|
||||||
|
and lower(relationship) = "self"
|
||||||
|
and is_active = 1
|
||||||
|
limit 1
|
||||||
|
) as self_employee_id',
|
||||||
$ecard_download_link
|
$ecard_download_link
|
||||||
])
|
])
|
||||||
->join('employees emp', 'employee_polices.employee_id = emp.id')
|
->join('employees emp', 'employee_polices.employee_id = emp.id')
|
||||||
@ -391,8 +399,8 @@ class EmployeePolicyModel extends Model
|
|||||||
->where('is_active',1)
|
->where('is_active',1)
|
||||||
->find();
|
->find();
|
||||||
}
|
}
|
||||||
//-------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
|
//-------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
public function getInceptionEmployeeDataForExportExcel($ref_data, $return_type = 0)
|
public function getInceptionEmployeeDataForExportExcel($ref_data, $return_type = 0)
|
||||||
{
|
{
|
||||||
@ -2218,5 +2226,70 @@ class EmployeePolicyModel extends Model
|
|||||||
// return $result;
|
// return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// for this function using bulk e-card download as a zip
|
||||||
|
public function getEmployeeDataWithPolicyUsingClientPolicyIdOrEmployeePolicyIds($params, $limit = 100, $last_id = 0)
|
||||||
|
{
|
||||||
|
$client_policy_id = $params['client_policy_id'] ?? null;
|
||||||
|
$emp_policy_ids = $params['emp_policy_ids'] ?? null;
|
||||||
|
|
||||||
|
if (empty($client_policy_id) && empty($emp_policy_ids)) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
$builder = $this->db->table('employee_polices');
|
||||||
|
$builder->select('
|
||||||
|
employee_polices.id as emp_policy_id,
|
||||||
|
employee_polices.client_policy_id,
|
||||||
|
employees.name,
|
||||||
|
employees.emp_code,
|
||||||
|
employees.id as emp_id,
|
||||||
|
tpa.short_name,
|
||||||
|
employee_polices.tpa_id,
|
||||||
|
client_policy.policy_no
|
||||||
|
')
|
||||||
|
->join('client_policy', 'client_policy.id = employee_polices.client_policy_id')
|
||||||
|
->join('employees', 'employees.id = employee_polices.employee_id')
|
||||||
|
->join('tpa', 'tpa.id = client_policy.tpa_id')
|
||||||
|
->where([
|
||||||
|
'employees.emp_status' => 'active',
|
||||||
|
'employees.is_active' => '1',
|
||||||
|
'employee_polices.status' => 'active',
|
||||||
|
'employee_polices.is_active' => '1',
|
||||||
|
])
|
||||||
|
->where("employee_polices.tpa_id IS NOT NULL AND employee_polices.tpa_id <> ''");
|
||||||
|
|
||||||
|
// BATCHING LOGIC: Only get records greater than the last processed ID
|
||||||
|
if ($last_id > 0) {
|
||||||
|
$builder->where('employee_polices.id >', $last_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($client_policy_id) $builder->where('employee_polices.client_policy_id', $client_policy_id);
|
||||||
|
if ($emp_policy_ids) $builder->whereIn('employee_polices.id', $emp_policy_ids);
|
||||||
|
|
||||||
|
$builder->orderBy('employee_polices.id', 'ASC'); // Critical for keyset pagination
|
||||||
|
$builder->limit($limit);
|
||||||
|
|
||||||
|
return $builder->get()->getResultArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getClientPolicyDetailsByClientPolicyIdOrEmployeePolicyId($params)
|
||||||
|
{
|
||||||
|
$client_policy_id = $params['client_policy_id'] ?? null;
|
||||||
|
$emp_policy_id = $params['emp_policy_id'] ?? null;
|
||||||
|
|
||||||
|
if (empty($client_policy_id) && empty($emp_policy_id)) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
$builder = $this->db->table('client_policy');
|
||||||
|
$builder->select('client_policy.*')
|
||||||
|
->join('employee_polices ep', 'ep.client_policy_id = client_policy.id', 'left');
|
||||||
|
|
||||||
|
if ($client_policy_id) $builder->where('employee_polices.client_policy_id', $client_policy_id);
|
||||||
|
if ($emp_policy_id) $builder->where('employee_polices.id', $emp_policy_id);
|
||||||
|
|
||||||
|
return $builder->get()->getResultArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -2540,6 +2540,9 @@
|
|||||||
pt.ref,
|
pt.ref,
|
||||||
|
|
||||||
pt.data_received_date,
|
pt.data_received_date,
|
||||||
|
pt.endorse_eff_date,
|
||||||
|
pt.policy_start_date,
|
||||||
|
pt.policy_end_date,
|
||||||
pt.renewal_date,
|
pt.renewal_date,
|
||||||
pt.installment,
|
pt.installment,
|
||||||
nhance_branch.branch_name as nhance_branch,
|
nhance_branch.branch_name as nhance_branch,
|
||||||
@ -2699,6 +2702,9 @@
|
|||||||
pt.ref,
|
pt.ref,
|
||||||
|
|
||||||
pt.data_received_date,
|
pt.data_received_date,
|
||||||
|
pt.endorse_eff_date,
|
||||||
|
pt.policy_start_date,
|
||||||
|
pt.policy_end_date,
|
||||||
pt.renewal_date,
|
pt.renewal_date,
|
||||||
pt.installment,
|
pt.installment,
|
||||||
nhance_branch.branch_name as nhance_branch,
|
nhance_branch.branch_name as nhance_branch,
|
||||||
@ -3143,6 +3149,9 @@
|
|||||||
pt.ref,
|
pt.ref,
|
||||||
|
|
||||||
pt.data_received_date,
|
pt.data_received_date,
|
||||||
|
pt.endorse_eff_date,
|
||||||
|
pt.policy_start_date,
|
||||||
|
pt.policy_end_date,
|
||||||
pt.renewal_date,
|
pt.renewal_date,
|
||||||
pt.installment,
|
pt.installment,
|
||||||
nhance_branch.branch_name as nhance_branch,
|
nhance_branch.branch_name as nhance_branch,
|
||||||
@ -3303,6 +3312,9 @@
|
|||||||
pt.ref,
|
pt.ref,
|
||||||
|
|
||||||
pt.data_received_date,
|
pt.data_received_date,
|
||||||
|
pt.endorse_eff_date,
|
||||||
|
pt.policy_start_date,
|
||||||
|
pt.policy_end_date,
|
||||||
pt.renewal_date,
|
pt.renewal_date,
|
||||||
pt.installment,
|
pt.installment,
|
||||||
nhance_branch.branch_name as nhance_branch,
|
nhance_branch.branch_name as nhance_branch,
|
||||||
@ -3490,6 +3502,9 @@
|
|||||||
pt.ref,
|
pt.ref,
|
||||||
|
|
||||||
pt.data_received_date,
|
pt.data_received_date,
|
||||||
|
pt.endorse_eff_date,
|
||||||
|
pt.policy_start_date,
|
||||||
|
pt.policy_end_date,
|
||||||
pt.renewal_date,
|
pt.renewal_date,
|
||||||
pt.installment,
|
pt.installment,
|
||||||
nhance_branch.branch_name as nhance_branch,
|
nhance_branch.branch_name as nhance_branch,
|
||||||
@ -3676,7 +3691,7 @@
|
|||||||
$result = $query->getResultArray();
|
$result = $query->getResultArray();
|
||||||
// $countofalldata = count($result);
|
// $countofalldata = count($result);
|
||||||
// dd($result);
|
// dd($result);
|
||||||
dd($this->db->getLastQuery()->getQuery());
|
// dd($this->db->getLastQuery()->getQuery());
|
||||||
|
|
||||||
$keys = [];
|
$keys = [];
|
||||||
$filtered = [];
|
$filtered = [];
|
||||||
|
|||||||
@ -93,6 +93,9 @@ class TicketMasterModel extends Model
|
|||||||
'required_docs',
|
'required_docs',
|
||||||
'policy_transaction_id',
|
'policy_transaction_id',
|
||||||
'tpa_claim_type',
|
'tpa_claim_type',
|
||||||
|
'tpa_ailments',
|
||||||
|
'claim_dump_ref_id',
|
||||||
|
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -581,7 +581,7 @@ table.dataTable tbody td {
|
|||||||
|
|
||||||
<div class="form-group text-right m-b-0">
|
<div class="form-group text-right m-b-0">
|
||||||
<button class="btn app-btn-outline-secondary mr-2 " type="button" data-dismiss="modal" aria-hidden="true">Cancel</button>
|
<button class="btn app-btn-outline-secondary mr-2 " type="button" data-dismiss="modal" aria-hidden="true">Cancel</button>
|
||||||
<button class="btn app-btn-secondary waves-effect waves-light" id="btnSubmit">Submit</button>
|
<button type="submit" class="btn app-btn-secondary waves-effect waves-light" id="btnSubmit">Submit</button>
|
||||||
<!-- <button type="button" class="btn btn-secondry waves-effect waves-light mr-1" data-dismiss="modal" aria-hidden="true">Close</button> -->
|
<!-- <button type="button" class="btn btn-secondry waves-effect waves-light mr-1" data-dismiss="modal" aria-hidden="true">Close</button> -->
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
@ -884,7 +884,20 @@ table.dataTable tbody td {
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<?php if (session()->getFlashdata('error')) : ?>
|
||||||
|
<?php foreach (session()->getFlashdata('error') as $error) : ?>
|
||||||
|
<script>
|
||||||
|
toastr.error("<?= esc($error) ?>", "Validation Error");
|
||||||
|
</script>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
var errorModal = new bootstrap.Modal(
|
||||||
|
document.getElementById('con-close-modal')
|
||||||
|
);
|
||||||
|
errorModal.show();
|
||||||
|
</script>
|
||||||
|
<?php endif; ?>
|
||||||
<script>
|
<script>
|
||||||
var table;
|
var table;
|
||||||
$(document).ready(function () {
|
$(document).ready(function () {
|
||||||
@ -1899,19 +1912,36 @@ table.dataTable tbody td {
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
$(document).on('click', '#btnAdd', function(){
|
$(document).on('click', '#btnAdd', function() {
|
||||||
$('#first_name').val('');
|
// Reset the form
|
||||||
$('#last_name').val('');
|
$('#UserForm')[0].reset();
|
||||||
$('#email').val('');
|
$('#UserId').val('');
|
||||||
$('#mobile').val('');
|
|
||||||
$('#emp_code').val('');
|
|
||||||
$('#nhance_branch_id').val('0');
|
|
||||||
$('#rm_id').val('0');
|
|
||||||
$('#UserForm').attr('action', '<?php echo base_url('/user/create');?>');
|
|
||||||
let myModal = new bootstrap.Modal(document.getElementById('con-close-modal'));
|
|
||||||
myModal.show(); // open modal
|
|
||||||
|
|
||||||
|
// Specifically reset Select2 if you are using it
|
||||||
|
$('#nhance_branch_id').val('').trigger('change');
|
||||||
|
$('#rm_id').val('').trigger('change');
|
||||||
|
|
||||||
|
// Update Modal Title and Action
|
||||||
|
$('.modal-title').text('Add User');
|
||||||
|
$('#btnSubmit').text('Submit');
|
||||||
|
$('#UserForm').attr('action', '<?php echo base_url('/user/create');?>');
|
||||||
|
|
||||||
|
var myModal = new bootstrap.Modal(document.getElementById('con-close-modal'));
|
||||||
|
myModal.show();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// $(document).on('click', '#btnAdd', function(){
|
||||||
|
// $('#first_name').val('');
|
||||||
|
// $('#last_name').val('');
|
||||||
|
// $('#email').val('');
|
||||||
|
// $('#mobile').val('');
|
||||||
|
// $('#emp_code').val('');
|
||||||
|
// $('#nhance_branch_id').val('0');
|
||||||
|
// $('#rm_id').val('0');
|
||||||
|
// $('#UserForm').attr('action', '<?php echo base_url('/user/create');?>');
|
||||||
|
// let myModal = new bootstrap.Modal(document.getElementById('con-close-modal'));
|
||||||
|
// myModal.show(); // open modal
|
||||||
|
// });
|
||||||
$(document).on('click', '#btnNhancePartnerAdd', function(){
|
$(document).on('click', '#btnNhancePartnerAdd', function(){
|
||||||
$('#partner_name').val('');
|
$('#partner_name').val('');
|
||||||
$('#email_addr').val('');
|
$('#email_addr').val('');
|
||||||
|
|||||||
@ -168,6 +168,7 @@
|
|||||||
data-event_type="<?= $file['event_type'] ?>"
|
data-event_type="<?= $file['event_type'] ?>"
|
||||||
data-actions="<?= $file['actions'] ?>"
|
data-actions="<?= $file['actions'] ?>"
|
||||||
data-client_branch_id="<?= $file['client_branch_id'] ?>"
|
data-client_branch_id="<?= $file['client_branch_id'] ?>"
|
||||||
|
data-issue_date="<?= $file['policy_issue_date'] ?>"
|
||||||
|
|
||||||
onclick="getBatchFileData(this)" class="dropdown-item upload_button" ><i class="mdi mdi-upload mr-2 text-muted font-18 vertical-middle"></i>Re-Upload</a>
|
onclick="getBatchFileData(this)" class="dropdown-item upload_button" ><i class="mdi mdi-upload mr-2 text-muted font-18 vertical-middle"></i>Re-Upload</a>
|
||||||
<?php } ?>
|
<?php } ?>
|
||||||
@ -215,6 +216,7 @@
|
|||||||
<input type="hidden" id="batch_file_insurer_or_tpa" name="insurer_or_tpa">
|
<input type="hidden" id="batch_file_insurer_or_tpa" name="insurer_or_tpa">
|
||||||
<input type="hidden" id="batch_file_action_type" name="action_type">
|
<input type="hidden" id="batch_file_action_type" name="action_type">
|
||||||
<input type="hidden" id="batch_file_event_type" name="event_type">
|
<input type="hidden" id="batch_file_event_type" name="event_type">
|
||||||
|
<input type="hidden" id="batch_file_issue_date" name="policy_issue_date">
|
||||||
<input type="file" id="import_file_data" name="import_file_data" required
|
<input type="file" id="import_file_data" name="import_file_data" required
|
||||||
accept=" application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel,application/vnd.oasis.opendocument.spreadsheet">
|
accept=" application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel,application/vnd.oasis.opendocument.spreadsheet">
|
||||||
|
|
||||||
@ -329,6 +331,7 @@
|
|||||||
let insurer_or_tpa = $(input).data('insurer_or_tpa')
|
let insurer_or_tpa = $(input).data('insurer_or_tpa')
|
||||||
let event_type = $(input).data('event_type')
|
let event_type = $(input).data('event_type')
|
||||||
let actions = $(input).data('actions')
|
let actions = $(input).data('actions')
|
||||||
|
let issue_date = $(input).data('issue_date')
|
||||||
|
|
||||||
console.log('client_id', client_id);
|
console.log('client_id', client_id);
|
||||||
console.log('client_policy_id', client_policy_id);
|
console.log('client_policy_id', client_policy_id);
|
||||||
@ -336,6 +339,7 @@
|
|||||||
console.log('insurer_or_tpa', insurer_or_tpa);
|
console.log('insurer_or_tpa', insurer_or_tpa);
|
||||||
console.log('event_type', event_type);
|
console.log('event_type', event_type);
|
||||||
console.log('actions', actions);
|
console.log('actions', actions);
|
||||||
|
console.log('issue_date', issue_date);
|
||||||
|
|
||||||
$('#batch_file_client_id').val(client_id);
|
$('#batch_file_client_id').val(client_id);
|
||||||
$('#batch_file_policy_id').val(client_policy_id);
|
$('#batch_file_policy_id').val(client_policy_id);
|
||||||
@ -343,6 +347,7 @@
|
|||||||
$('#batch_file_insurer_or_tpa').val(insurer_or_tpa);
|
$('#batch_file_insurer_or_tpa').val(insurer_or_tpa);
|
||||||
$('#batch_file_action_type').val(actions);
|
$('#batch_file_action_type').val(actions);
|
||||||
$('#batch_file_event_type').val(event_type);
|
$('#batch_file_event_type').val(event_type);
|
||||||
|
$('#batch_file_issue_date').val(issue_date);
|
||||||
|
|
||||||
|
|
||||||
var myModal = new bootstrap.Modal(document.getElementById('batch_file_upload_modal'));
|
var myModal = new bootstrap.Modal(document.getElementById('batch_file_upload_modal'));
|
||||||
|
|||||||
@ -1,54 +1,90 @@
|
|||||||
<form action="<?= base_url('fedeploy'); ?>" method="post" enctype="multipart/form-data">
|
<div class="container-fluid-min">
|
||||||
|
<div class="card mb-1">
|
||||||
|
<!---- new ----->
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-12">
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="custom-form">
|
||||||
|
<form role="form" class="parsley-examples" action="<?= base_url('fedeploy'); ?>" method="post" enctype="multipart/form-data">
|
||||||
<!-- Single zip upload -->
|
<!-- Single zip upload -->
|
||||||
<div>
|
<div class="form-group row">
|
||||||
<label for="zip_file">Zip File</label>
|
<label for="zip_file" class="col-md-4 col-form-label">Zip File</label>
|
||||||
<input type="file" name="zip_file" id="zip_file" required>
|
<div class="col-md-5">
|
||||||
|
<div class="input-icon">
|
||||||
|
<input type="file" class="form-control" id="zip_file" name="zip_file" >
|
||||||
|
<i class="mdi mdi-upload additional-icon"></i>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<!-- Zip Folder-->
|
||||||
<label for="zip_folder">Zip Folder (inside zip to deploy)</label>
|
<div class="form-group row">
|
||||||
<select name="zip_folder" id="zip_folder">
|
<label for="zip_folder" class="col-md-4 col-form-label">Zip Folder (inside zip to deploy)</label>
|
||||||
|
<div class="col-md-5">
|
||||||
|
<select name="zip_folder" id="zip_folder" class="form-control">
|
||||||
<option value="web/">web/</option>
|
<option value="web/">web/</option>
|
||||||
<!-- <option value="dist/">dist/</option> -->
|
<!-- <option value="dist/">dist/</option> -->
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div>
|
<div class="form-group row">
|
||||||
<label for="s3_bucket">S3 Bucket</label>
|
<label class="col-md-4 col-form-label" for="s3_bucket">S3 Bucket</label>
|
||||||
<select name="s3_bucket" id="s3_bucket">
|
<div class="col-md-5">
|
||||||
|
<select name="s3_bucket" id="s3_bucket" class="form-control">
|
||||||
<option value="uat-benefits-app-bucket">UAT Benefits</option>
|
<option value="uat-benefits-app-bucket">UAT Benefits</option>
|
||||||
<option value="uat-hr-app-bucket">UAT HR</option>
|
<option value="uat-hr-app-bucket">UAT HR</option>
|
||||||
<option value="benefits-app-bucket">Live Benefits</option>
|
<option value="benefits-app-bucket">Live Benefits</option>
|
||||||
<option value="live-hr-app-bucket">Live HR</option>
|
<option value="live-hr-app-bucket">Live HR</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
|
||||||
<label for="s3_prefix">S3 Prefix</label>
|
|
||||||
<input type="text" name="s3_prefix" id="s3_prefix" value="/*">
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<!-- S3 Prefix -->
|
||||||
<label for="cf_distribution_id">CloudFront Distribution ID (optional)</label>
|
<div class="form-group row">
|
||||||
<!-- <input type="text" name="cf_distribution_id" id="cf_distribution_id" value="E1MKRK4U5MZ3BD"> -->
|
<label class="col-md-4 col-form-label" for="s3_prefix">S3 Prefix</label>
|
||||||
<select name="cf_distribution_id" id="cf_distribution_id">
|
<div class="col-md-5">
|
||||||
|
<input type="text" name="s3_prefix" id="s3_prefix" value="/*" class="form-control">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- CloudFront Distribution -->
|
||||||
|
<div class="form-group row">
|
||||||
|
<label for="cf_distribution_id" class="col-md-4 col-form-label">CloudFront Distribution ID (optional)</label>
|
||||||
|
<div class="col-md-5">
|
||||||
|
<select name="cf_distribution_id" id="cf_distribution_id" class="form-control">
|
||||||
<option value="EUBZ8CDSV9KZZ">UAT Benefits</option>
|
<option value="EUBZ8CDSV9KZZ">UAT Benefits</option>
|
||||||
<option value="E9TNPRI9ITM1M">UAT HR</option>
|
<option value="E9TNPRI9ITM1M">UAT HR</option>
|
||||||
<option value="E1MKRK4U5MZ3BD">Live Benefits</option>
|
<option value="E1MKRK4U5MZ3BD">Live Benefits</option>
|
||||||
<option value="E3TE01DPKHTD8B">Live HR</option>
|
<option value="E3TE01DPKHTD8B">Live HR</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
|
||||||
<label for="cf_paths">
|
|
||||||
CloudFront Invalidation Paths (comma or newline separated, e.g. <code>/hr/*,/hr/special/*</code>)
|
|
||||||
</label>
|
|
||||||
<input type="text" name="cf_paths" id="cf_paths" value="/*">
|
|
||||||
<!-- If you prefer multi-line, use <textarea> instead of <input> -->
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<button type="submit">Deploy</button>
|
<!-- CloudFront Invalidation -->
|
||||||
</form>
|
<div class="form-group row">
|
||||||
|
<label class="col-md-4 col-form-label" for="cf_paths"> CloudFront Invalidation Paths (comma or newline separated, e.g. <code>/hr/*,/hr/special/*</code>) </label>
|
||||||
|
<div class="col-md-5 d-flex align-items-center">
|
||||||
|
<input type="text" name="cf_paths" id="cf_paths" value="/*" class="form-control">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Buttons -->
|
||||||
|
<div class="form-group row">
|
||||||
|
<div class="col-md-12 text-right">
|
||||||
|
<button type="submit" class="btn btn-primary waves-effect waves-light mr-1" id="btnSubmit">Deploy</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div> <!-- end col-->
|
||||||
|
</div>
|
||||||
|
<!---- ends ------>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
document.addEventListener('DOMContentLoaded', function () {
|
document.addEventListener('DOMContentLoaded', function () {
|
||||||
const bucketToDistributionMap = {
|
const bucketToDistributionMap = {
|
||||||
|
|||||||
@ -191,18 +191,29 @@ input:checked + .slider:before {
|
|||||||
<script>
|
<script>
|
||||||
$(document).ready(function() {
|
$(document).ready(function() {
|
||||||
|
|
||||||
|
$('#insurer_logo').on('change', function() {
|
||||||
|
PreviewImage();
|
||||||
|
});
|
||||||
|
|
||||||
$("#insurer_general_form").submit(function(events) {
|
$("#insurer_general_form").submit(function(events) {
|
||||||
|
|
||||||
events.preventDefault();
|
events.preventDefault();
|
||||||
|
|
||||||
var isValid = $('#insurer_General_PrimaryKey').parsley().validate();
|
// var isValid = $('#insurer_General_PrimaryKey').parsley().validate();
|
||||||
|
var isValid = $('#insurer_general_form').parsley().validate();
|
||||||
|
var PrimaryKey = $('#insurer_General_PrimaryKey').val();
|
||||||
if (!isValid) {
|
if (!isValid) {
|
||||||
console.log('Form is Empty', 'Warning');
|
console.log('Form is Empty', 'Warning');
|
||||||
return ;
|
return ;
|
||||||
}
|
}
|
||||||
|
|
||||||
var PrimaryKey = $('#insurer_General_PrimaryKey').val();
|
var formElement = $('#insurer_general_form')[0];
|
||||||
var form_action = '';
|
var formData = new FormData(formElement);
|
||||||
|
|
||||||
|
// DEBUG: Log formData to see if it's empty
|
||||||
|
for (var pair of formData.entries()) {
|
||||||
|
console.log(pair[0]+ ', ' + pair[1]);
|
||||||
|
}
|
||||||
if (isValid) {
|
if (isValid) {
|
||||||
|
|
||||||
if (PrimaryKey === '') {
|
if (PrimaryKey === '') {
|
||||||
@ -300,16 +311,46 @@ input:checked + .slider:before {
|
|||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
function PreviewImage()
|
function PreviewImage() {
|
||||||
{
|
var fileInput = document.getElementById("insurer_logo");
|
||||||
|
var preview = document.getElementById("uploadPreview");
|
||||||
|
var defaultAvatar = '<?= base_url() . "public/assets/images/avatar_2x.png" ?>';
|
||||||
|
|
||||||
|
// If no file is selected (or cleared by validation), reset preview and stop
|
||||||
|
if (!fileInput.files || !fileInput.files[0]) {
|
||||||
|
preview.src = defaultAvatar;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var file = fileInput.files[0];
|
||||||
|
var fileName = file.name.toLowerCase();
|
||||||
|
var parts = fileName.split('.');
|
||||||
|
|
||||||
|
// VALIDATION: Extensions and Double Extensions (e.g. .php.jpeg)
|
||||||
|
var allowedExtensions = /(\.jpg|\.jpeg|\.png)$/i;
|
||||||
|
|
||||||
|
if (!allowedExtensions.exec(fileName) || parts.length > 2) {
|
||||||
|
toastr.error("Security violation: Invalid format or double extension.", "Blocked");
|
||||||
|
fileInput.value = ""; // Clear the field
|
||||||
|
preview.src = defaultAvatar; // RESET PREVIEW
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// VALIDATION: Size (200KB)
|
||||||
|
if ((file.size / 1024) > 200) {
|
||||||
|
toastr.warning("File size exceeds 200 KB limit.", "Warning");
|
||||||
|
fileInput.value = ""; // Clear the field
|
||||||
|
preview.src = defaultAvatar; // RESET PREVIEW
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// SUCCESS: Read and Preview
|
||||||
var oFReader = new FileReader();
|
var oFReader = new FileReader();
|
||||||
oFReader.readAsDataURL(document.getElementById("insurer_logo").files[0]);
|
oFReader.readAsDataURL(file);
|
||||||
|
|
||||||
oFReader.onload = function(oFREvent) {
|
oFReader.onload = function(oFREvent) {
|
||||||
document.getElementById("uploadPreview").src = oFREvent.target.result;
|
preview.src = oFREvent.target.result;
|
||||||
};
|
};
|
||||||
};
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -1163,68 +1163,50 @@
|
|||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
}
|
}
|
||||||
|
|
||||||
function checkCDBalance() {
|
async function checkCDBalance() {
|
||||||
|
try {
|
||||||
|
// 1. Fetch the LATEST session data from the server
|
||||||
|
const response = await fetch('checkSessionStatus');
|
||||||
|
const cdData = await response.json();
|
||||||
|
|
||||||
const cdData = <?= json_encode(get_cd_balance()) ?>;
|
console.log('Current Session Data:', cdData);
|
||||||
console.log(cdData, typeof cdData);
|
|
||||||
|
|
||||||
// cdData itself null / undefined safety
|
// 2. Check if cd_balance_info exists and isn't empty
|
||||||
if (!cdData || typeof cdData !== 'object') {
|
if (cdData.has_cd_balance && cdData.cd_balance_info) {
|
||||||
console.log('CD data not available');
|
|
||||||
|
if(cdData.cd_balance === 'sufficient'){
|
||||||
|
stopInterval(); // Stop checking once we find the error
|
||||||
|
console.log("CD Balance is sufficient");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
let cd_balance_info = cdData.cd_balance_info
|
let cd_balance_info = JSON.parse(cdData.cd_balance_info) ?? null;
|
||||||
console.log('cd_balance_info', cd_balance_info);
|
let hr_info = cdData.hr_data ? JSON.parse(cdData.hr_data) : null;
|
||||||
cd_balance_info = JSON.parse(cd_balance_info);
|
|
||||||
console.log('cd_balance_info', cd_balance_info);
|
|
||||||
|
|
||||||
let hr_data = cdData.hr_data
|
// If balance is marked as false (insufficient)
|
||||||
console.log('hr_data', hr_data);
|
if (cd_balance_info.cd_balance === false) {
|
||||||
hr_data = JSON.parse(hr_data);
|
|
||||||
console.log('hr_data', hr_data);
|
|
||||||
|
|
||||||
|
stopInterval(); // Stop checking once we find the error
|
||||||
|
|
||||||
let cd_balance = cd_balance_info.cd_balance;
|
toastr.warning(
|
||||||
let cd_amount = cd_balance_info.cd_amount;
|
`Insufficient CD Balance.<br>Balance: ₹${cd_balance_info.cd_amount}`,
|
||||||
let excel_file_amt = cd_balance_info.excel_file_amt;
|
'WARNING',
|
||||||
|
{ allowHtml: true }
|
||||||
|
);
|
||||||
|
|
||||||
console.log(cd_balance ,cd_amount ,excel_file_amt);
|
if(hr_info) {
|
||||||
|
$('#client_id_for_hr_mail_send').val(hr_info.client_id);
|
||||||
|
window.hr_data = hr_info.hr_data;
|
||||||
|
}
|
||||||
|
|
||||||
window.hr_data = hr_data.hr_data;
|
|
||||||
$('#client_id_for_hr_mail_send').val(hr_data.client_id)
|
|
||||||
|
|
||||||
console.log(cd_balance, typeof cd_balance);
|
|
||||||
|
|
||||||
if (cd_balance === false && messageShown === false) {
|
|
||||||
|
|
||||||
const message1 =
|
|
||||||
'Insufficient CD Balance deducted. Please wait the file will be downloaded<br>' +
|
|
||||||
'<strong>CD Amount:</strong> ₹' + cd_amount + '<br>' +
|
|
||||||
'<strong>Total Amount:</strong> ₹' + excel_file_amt;
|
|
||||||
|
|
||||||
toastr.warning(message1, 'WARNING', {
|
|
||||||
allowHtml: true,
|
|
||||||
timeOut: 10000,
|
|
||||||
extendedTimeOut: 3000
|
|
||||||
});
|
|
||||||
|
|
||||||
messageShown = true;
|
|
||||||
stopInterval();
|
|
||||||
openModal();
|
openModal();
|
||||||
|
|
||||||
<?php clear_cd_balance_session(); ?>
|
// 3. Clear the session now that we've handled it
|
||||||
|
fetch('clearCdSession');
|
||||||
}
|
}
|
||||||
else if (cd_balance === true) {
|
|
||||||
|
|
||||||
console.log('CD Balance is sufficient');
|
|
||||||
stopInterval();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
else {
|
} catch (error) {
|
||||||
|
console.error('Error checking CD balance:', error);
|
||||||
console.log('CD balance info not available');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1234,7 +1216,7 @@
|
|||||||
messageShown = false; // Reset message flag
|
messageShown = false; // Reset message flag
|
||||||
submitInterval = setInterval(function() {
|
submitInterval = setInterval(function() {
|
||||||
checkCDBalance();
|
checkCDBalance();
|
||||||
}, 10000);
|
}, 2000);
|
||||||
console.log("Checking CD balance started...");
|
console.log("Checking CD balance started...");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
33
app/Views/meta_dashboard_demo_one.php
Normal file
33
app/Views/meta_dashboard_demo_one.php
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>Metabase Dashboard</title>
|
||||||
|
|
||||||
|
<!-- Metabase embed script -->
|
||||||
|
<script defer src="<?= esc($metabaseUrl) ?>/app/embed.js"></script>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
function defineMetabaseConfig(config) {
|
||||||
|
window.metabaseConfig = config;
|
||||||
|
}
|
||||||
|
|
||||||
|
defineMetabaseConfig({
|
||||||
|
theme: {
|
||||||
|
preset: "light"
|
||||||
|
},
|
||||||
|
isGuest: true,
|
||||||
|
instanceUrl: "<?= esc($metabaseUrl) ?>"
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<metabase-dashboard
|
||||||
|
token="<?= esc($metabaseToken) ?>"
|
||||||
|
with-title="true"
|
||||||
|
with-downloads="true">
|
||||||
|
</metabase-dashboard>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@ -131,6 +131,8 @@
|
|||||||
$member_review_and_summary_mail = 0;
|
$member_review_and_summary_mail = 0;
|
||||||
$account_maneger_summary_mail = 0;
|
$account_maneger_summary_mail = 0;
|
||||||
$client_hr_summary_mail = 0;
|
$client_hr_summary_mail = 0;
|
||||||
|
$hr_cd_insufficient_balance_mail = 0;
|
||||||
|
|
||||||
if (isset($notification)) {
|
if (isset($notification)) {
|
||||||
foreach ($notification as $value) {
|
foreach ($notification as $value) {
|
||||||
|
|
||||||
@ -161,6 +163,10 @@
|
|||||||
if ($value['template_name'] == 'client_hr_summary_mail') {
|
if ($value['template_name'] == 'client_hr_summary_mail') {
|
||||||
$client_hr_summary_mail = $value['enabled'];
|
$client_hr_summary_mail = $value['enabled'];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($value['template_name'] == 'hr_cd_insufficient_balance_mail') {
|
||||||
|
$hr_cd_insufficient_balance_mail = $value['enabled'];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
?></p>
|
?></p>
|
||||||
@ -265,6 +271,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- member review and summary mail -->
|
<!-- member review and summary mail -->
|
||||||
<div class="form-group col-md-6 mail-row">
|
<div class="form-group col-md-6 mail-row">
|
||||||
<div class="mail-section">
|
<div class="mail-section">
|
||||||
@ -283,6 +290,26 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Hr cd insifficient mail -->
|
||||||
|
<div class="form-group col-md-6 mail-row">
|
||||||
|
<div class="mail-section">
|
||||||
|
<div class="left">
|
||||||
|
<label class="switch">
|
||||||
|
<input id="hr_cd_insufficient_balance_mail_btn" type="checkbox" name="hr_cd_insufficient_balance_mail_btn" <?= $hr_cd_insufficient_balance_mail == 1 ? 'checked' : '' ?>>
|
||||||
|
<span class="slider round"></span>
|
||||||
|
</label>
|
||||||
|
<span class="ml-2"> HR CD Insufficient Balance Mail</span>
|
||||||
|
</div>
|
||||||
|
<div class="right">
|
||||||
|
<a href="" data-toggle="modal" id="hr_cd_insufficient_balance_mail" onclick="getMailTemplateData(this)" data-target="#hr_cd_insufficient_balance_mail_modal">
|
||||||
|
<i class="mdi mdi-pencil"></i>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -988,6 +1015,89 @@
|
|||||||
</div> <!-- /.modal-dialog -->
|
</div> <!-- /.modal-dialog -->
|
||||||
</div> <!-- /.modal -->
|
</div> <!-- /.modal -->
|
||||||
|
|
||||||
|
<!-- 7 Modal content for the Large example => CD balance insufficent HR mail sent -->
|
||||||
|
<div class="modal fade" id="hr_cd_insufficient_balance_mail_modal" tabindex="-1" role="dialog" aria-labelledby="myLargeModalLabel"
|
||||||
|
aria-hidden="true" aria-modal="true" data-backdrop="static">
|
||||||
|
<div class="modal-dialog modal-full-width">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<h4 class="modal-title" id="myLargeModalLabel"> HR CD Insufficient Balance Mail <span id="nameOfThePolicy"></span></h4>
|
||||||
|
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
|
||||||
|
<div class="text-center" id="no_data"></div>
|
||||||
|
|
||||||
|
<form role="form" class="parsley-examples" method="post" id="hr_cd_insufficient_balance_mail_form" enctype="multipart/form-data">
|
||||||
|
<div class="form-group">
|
||||||
|
|
||||||
|
<div class="form-row" id="rac_rate_dropdown">
|
||||||
|
<div class="form-group col-md-2">
|
||||||
|
<label for="template_name">Template Name</label>
|
||||||
|
</div>
|
||||||
|
<div class="form-group col-md-5">
|
||||||
|
<input type="text" id="template_name" name="template_name" value="HR CD Insufficient Balance Mail" readonly class="form-control" placeholder="Template Name">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-row" id="rac_rate_dropdown">
|
||||||
|
<div class="form-group col-md-2">
|
||||||
|
<label for="subject">Subject</label>
|
||||||
|
</div>
|
||||||
|
<div class="form-group col-md-5">
|
||||||
|
<input type="text" id="subject" name="subject" class="form-control" placeholder="Subject">
|
||||||
|
</div>
|
||||||
|
<div class="form-group col-md-5 testmail" style="display: none;">
|
||||||
|
<a class="btn btn-primary waves-effect waves-light mr-1 setid" onclick="testMailSend(this,'send')">Test Mail</a>
|
||||||
|
<a class="btn btn-primary waves-effect waves-light mr-1 setid" onclick="PreviewTheMail(this,'preview','client_hr_summary_mail')">Preview Mail</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="hr_cd_insufficient_balance_mail_section">
|
||||||
|
<div class="form-row" id="rac_rate_dropdown">
|
||||||
|
<div class="form-group col-md-12">
|
||||||
|
<select id="hr_cd_insufficient_balance_mail_customButton" class="form-control" style="border:none; right:6px; width:auto; position:absolute; z-index:1; top:17px; height:32px; float:right;" onchange="copyToClipboard(this)">
|
||||||
|
<option value="">PlaceHolders</option>
|
||||||
|
<?php foreach ($placeHolders as $value): ?>
|
||||||
|
<?php if (in_array($value, ['hr_name', 'client_name'])): ?>
|
||||||
|
<?php $valueChange = ucwords(str_replace('_',' ',$value)); ?>
|
||||||
|
<option value="{{<?php echo $value; ?>}}"><?php echo $valueChange; ?></option>
|
||||||
|
<?php endif; ?>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
</select>
|
||||||
|
<span id="copy-feedback" style="display: none; position: absolute; top:50px; right:10px; color:green; font-size:12px;">Copied to clipboard!</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<hr>
|
||||||
|
<!-- Unlayer editor -->
|
||||||
|
<div class="form-row" id="rac_rate_dropdown">
|
||||||
|
<div class="form-group col-md-12">
|
||||||
|
<div id="hr_cd_insufficient_balance_mail_editor_container" style="height:600px;"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="editor"></div>
|
||||||
|
<input type="file" id="Question_title_fileInput" style="display:none;">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div> <!-- /.form-group -->
|
||||||
|
|
||||||
|
|
||||||
|
<div class="form-group text-right m-b-0 hr_cd_insufficient_balance_mail_action">
|
||||||
|
<button type="button" class="btn btn-primary waves-effect waves-light mr-1 preview_button">Preview</button>
|
||||||
|
<button type="submit" class="btn btn-primary waves-effect waves-light mr-1" id="btnGridSubmit_2">Submit</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="hr_cd_insufficient_balance_mail_preview"></div>
|
||||||
|
|
||||||
|
</form>
|
||||||
|
|
||||||
|
</div> <!-- /.modal-body -->
|
||||||
|
</div> <!-- /.modal-content -->
|
||||||
|
</div> <!-- /.modal-dialog -->
|
||||||
|
</div> <!-- /.modal -->
|
||||||
|
|
||||||
<div class="modal fade" id="preview_modal" tabindex="-1" role="dialog" aria-hidden="false" aria-modal="true" data-backdrop="static">
|
<div class="modal fade" id="preview_modal" tabindex="-1" role="dialog" aria-hidden="false" aria-modal="true" data-backdrop="static">
|
||||||
<div class="modal-dialog modal-dialog-centered">
|
<div class="modal-dialog modal-dialog-centered">
|
||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
@ -1841,7 +1951,14 @@
|
|||||||
function getMailTemplateData(element) {
|
function getMailTemplateData(element) {
|
||||||
template_name = element.id;
|
template_name = element.id;
|
||||||
const validTemplates = [
|
const validTemplates = [
|
||||||
"account_maneger_summary_mail", "member_reminder_mail","member_common_mail", "member_ecard_mail", "member_welcome_mail", "member_review_and_summary_mail", "client_hr_summary_mail"
|
"account_maneger_summary_mail",
|
||||||
|
"member_reminder_mail",
|
||||||
|
"member_common_mail",
|
||||||
|
"member_ecard_mail",
|
||||||
|
"member_welcome_mail",
|
||||||
|
"member_review_and_summary_mail",
|
||||||
|
"client_hr_summary_mail",
|
||||||
|
"hr_cd_insufficient_balance_mail"
|
||||||
];
|
];
|
||||||
console.log(`:) getMailTemplateData function called for ${template_name}`); // REF : PS
|
console.log(`:) getMailTemplateData function called for ${template_name}`); // REF : PS
|
||||||
if (!validTemplates.includes(template_name)) {
|
if (!validTemplates.includes(template_name)) {
|
||||||
@ -2347,6 +2464,61 @@
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$('#hr_cd_insufficient_balance_mail_form').submit(function(event) {
|
||||||
|
event.preventDefault();
|
||||||
|
|
||||||
|
// Check if editor instance exists
|
||||||
|
if (!editor) {
|
||||||
|
console.error("Editor not initialized");
|
||||||
|
toastr.error("Editor not ready. Please try again.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Use the editor instance instead of unlayer directly
|
||||||
|
editor.exportHtml(function(data) {
|
||||||
|
|
||||||
|
var formData = new FormData($('#hr_cd_insufficient_balance_mail_form')[0]);
|
||||||
|
|
||||||
|
// Append Unlayer data
|
||||||
|
formData.append('mailContent', data.html);
|
||||||
|
formData.append('client_id', $('#general_PrimaryKey').val());
|
||||||
|
formData.append('mailJson', JSON.stringify(data.design));
|
||||||
|
|
||||||
|
console.log([...formData.entries()]);
|
||||||
|
|
||||||
|
|
||||||
|
// Show loading indicators
|
||||||
|
$('.loader').fadeIn();
|
||||||
|
$('.loader-mask').fadeIn();
|
||||||
|
|
||||||
|
var form_action = '<?= base_url("client/notification/create") ?>';
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
url: form_action,
|
||||||
|
type: "POST",
|
||||||
|
data: formData,
|
||||||
|
dataType: 'json',
|
||||||
|
processData: false,
|
||||||
|
contentType: false,
|
||||||
|
success: function(res) {
|
||||||
|
$('#client_hr_summary_mail_modal').find('.close').click();
|
||||||
|
toastr.success('Template saved successfully');
|
||||||
|
$('.loader').fadeOut();
|
||||||
|
$('.loader-mask').delay(350).fadeOut('slow');
|
||||||
|
},
|
||||||
|
error: function(xhr, status, error) {
|
||||||
|
console.error(xhr.responseText);
|
||||||
|
console.error(status, error);
|
||||||
|
setTimeout(function() {
|
||||||
|
$('.loader').fadeOut();
|
||||||
|
$('.loader-mask').delay(350).fadeOut('slow');
|
||||||
|
toastr.warning('Something Went Wrong!', 'warning');
|
||||||
|
}, 1000);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
function hideBranding() {
|
function hideBranding() {
|
||||||
$('iframe').on('load', function() {
|
$('iframe').on('load', function() {
|
||||||
console.log('Iframe loaded.');
|
console.log('Iframe loaded.');
|
||||||
@ -2445,6 +2617,10 @@
|
|||||||
name: 'client_hr_summary_mail_btn',
|
name: 'client_hr_summary_mail_btn',
|
||||||
value: $('#client_hr_summary_mail_btn').prop('checked')
|
value: $('#client_hr_summary_mail_btn').prop('checked')
|
||||||
});
|
});
|
||||||
|
formData.push({
|
||||||
|
name: 'hr_cd_insufficient_balance_mail_btn',
|
||||||
|
value: $('#hr_cd_insufficient_balance_mail_btn').prop('checked')
|
||||||
|
});
|
||||||
|
|
||||||
var form_action = '<?= base_url("client/notification/update_enable") ?>';
|
var form_action = '<?= base_url("client/notification/update_enable") ?>';
|
||||||
$('.loader').fadeIn();
|
$('.loader').fadeIn();
|
||||||
|
|||||||
@ -151,7 +151,8 @@
|
|||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<div class="row" id="endorsement_form" style="display: none;">
|
<div class="tab-pane fade active show" id="form">
|
||||||
|
<div class="row" id="endorsement_form">
|
||||||
<div class="col-12">
|
<div class="col-12">
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
@ -386,6 +387,27 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- Policy Docs Row -->
|
||||||
|
<div class="row" id="policy_docs" style="display: none;">
|
||||||
|
<div class="col-md-12">
|
||||||
|
<div id="accordion_23" class="mb-0">
|
||||||
|
<label id="policyAccordion" class="m-1 d-flex justify-content-between align-items-center">
|
||||||
|
<span class="font-color-black">Policy Docs</span>
|
||||||
|
<a id="toggleIcon" class="text-dark float-right" data-toggle="collapse" href="#collapseTwentyTwo"
|
||||||
|
aria-expanded="true">
|
||||||
|
<i id="icon" class="mdi mdi-chevron-up mr-1 text-primary" style="font-size: 28px;"></i>
|
||||||
|
</a>
|
||||||
|
</label>
|
||||||
|
<div class="card mb-1">
|
||||||
|
<div id="collapseTwentyTwo" class="collapse show" aria-labelledby="headingOne" data-parent="#accordion_23">
|
||||||
|
<div class="card-body" id="policy_docs_div" style="background-color: #F5FFFF !important; border-radius: 10px; box-shadow: 4px 4px 4px 4px #00000040;">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<!-- Premium Details -->
|
<!-- Premium Details -->
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
@ -575,6 +597,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- end form row -->
|
<!-- end form row -->
|
||||||
|
|
||||||
@ -1017,6 +1040,8 @@
|
|||||||
$('#cop_yes').val(0);
|
$('#cop_yes').val(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$('#policy_tranction_primarykey_for_file_upload').val(res.data.id);
|
||||||
|
$('#client_policy_id_for_file_upload').val(res.data.client_policy_id);
|
||||||
$('#policy_tranction_primarykey').val(res.data.id);
|
$('#policy_tranction_primarykey').val(res.data.id);
|
||||||
$('#client_type').val(res.data.client_type).trigger('change');
|
$('#client_type').val(res.data.client_type).trigger('change');
|
||||||
$('#client_id').val(res.data.client_id).change();
|
$('#client_id').val(res.data.client_id).change();
|
||||||
@ -1048,6 +1073,10 @@
|
|||||||
$('#policy_start_date').val(res.data.policy_start_date);
|
$('#policy_start_date').val(res.data.policy_start_date);
|
||||||
$('#policy_end_date').val(res.data.policy_end_date);
|
$('#policy_end_date').val(res.data.policy_end_date);
|
||||||
$('#insurer_id').val(res.data.insurer_branch_id + '-' + res.data.insurer_id);
|
$('#insurer_id').val(res.data.insurer_branch_id + '-' + res.data.insurer_id);
|
||||||
|
$('#client_type').addClass('readonly-select ');
|
||||||
|
$('#client_id').addClass('readonly-select ').select2('destroy');
|
||||||
|
$('#client_branch_id').addClass('readonly-select ').select2('destroy');
|
||||||
|
$('#client_policy_id').addClass('readonly-select ').select2('destroy');
|
||||||
}, 1500)
|
}, 1500)
|
||||||
|
|
||||||
$('#policy_no').val(res.data.policy_no);
|
$('#policy_no').val(res.data.policy_no);
|
||||||
@ -1067,12 +1096,16 @@
|
|||||||
$('#cd_ac_no').val(res.data.cd_ac_no);
|
$('#cd_ac_no').val(res.data.cd_ac_no);
|
||||||
$('#ct_type').val(res.data.ct_type);
|
$('#ct_type').val(res.data.ct_type);
|
||||||
|
|
||||||
|
$('#hide_file_upload').show()
|
||||||
|
|
||||||
if (res.data.policy_with_corr == 1) {
|
if (res.data.policy_with_corr == 1) {
|
||||||
$('#policy_with_corr').prop('checked', true);
|
$('#policy_with_corr').prop('checked', true);
|
||||||
} else {
|
} else {
|
||||||
$('#policy_with_corr').prop('checked', false);
|
$('#policy_with_corr').prop('checked', false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
appendFileTableBody(res.data.pt_files);
|
||||||
|
|
||||||
// if (res.data.is_cd_reduce_from_bds == 1) {
|
// if (res.data.is_cd_reduce_from_bds == 1) {
|
||||||
// $('#is_cd_reduce_from_bds').prop('checked', true).prop('checked', false);
|
// $('#is_cd_reduce_from_bds').prop('checked', true).prop('checked', false);
|
||||||
// } else {
|
// } else {
|
||||||
|
|||||||
@ -363,10 +363,9 @@ table.dataTable thead th {
|
|||||||
</div><!-- end col -->
|
</div><!-- end col -->
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<!-- end table row -->
|
<!-- end table row -->
|
||||||
|
<?php include('pt_endorsement_form_file_upload_tab.php'); ?>
|
||||||
|
|
||||||
<?php include('policy_transaction_endorsement_form.php'); ?>
|
|
||||||
<script>
|
<script>
|
||||||
document.addEventListener("DOMContentLoaded", function() {
|
document.addEventListener("DOMContentLoaded", function() {
|
||||||
const table = document.getElementById("tickets-table");
|
const table = document.getElementById("tickets-table");
|
||||||
@ -448,6 +447,7 @@ table.dataTable thead th {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
var client_list = '';
|
var client_list = '';
|
||||||
var branch_list = '';
|
var branch_list = '';
|
||||||
@ -461,6 +461,7 @@ table.dataTable thead th {
|
|||||||
$(document).ready(function() {
|
$(document).ready(function() {
|
||||||
|
|
||||||
getClientAndBranchAndPolicy()
|
getClientAndBranchAndPolicy()
|
||||||
|
addHTMLInput();
|
||||||
|
|
||||||
<?php if (session()->has('create_failed')) : ?>
|
<?php if (session()->has('create_failed')) : ?>
|
||||||
toastr.error('<?= session()->getFlashdata('create_failed') ?>', 'Failed');
|
toastr.error('<?= session()->getFlashdata('create_failed') ?>', 'Failed');
|
||||||
@ -506,6 +507,8 @@ table.dataTable thead th {
|
|||||||
className: 'btn app-btn-primary mr-2',
|
className: 'btn app-btn-primary mr-2',
|
||||||
action: function (e, dt, node, config) {
|
action: function (e, dt, node, config) {
|
||||||
hide_list_show_add();
|
hide_list_show_add();
|
||||||
|
addHTMLInput(null, 'policy_docs_div');
|
||||||
|
$('#policy_docs').show()
|
||||||
},
|
},
|
||||||
attr: { id: 'btnAdd' }
|
attr: { id: 'btnAdd' }
|
||||||
},
|
},
|
||||||
@ -614,15 +617,16 @@ table.dataTable thead th {
|
|||||||
$('#endorsement_form_id')[0].reset();
|
$('#endorsement_form_id')[0].reset();
|
||||||
$('#client_id').val('').change();
|
$('#client_id').val('').change();
|
||||||
$('#client_policy_id').val('').change();
|
$('#client_policy_id').val('').change();
|
||||||
$('#endorsement_form').show();
|
|
||||||
$('#endorsement_list').hide();
|
|
||||||
$('#endorsement_filter').hide();
|
|
||||||
$('#invoice_no_div').hide();
|
$('#invoice_no_div').hide();
|
||||||
$('#invoice_no').attr('required', false)
|
$('#invoice_no').attr('required', false)
|
||||||
|
|
||||||
|
$('#pt_onboarding').show();
|
||||||
|
$('#endorsement_list').hide();
|
||||||
|
$('#endorsement_filter').hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
function show_list_hide_add() {
|
function show_list_hide_add() {
|
||||||
$('#endorsement_form').hide()
|
$('#pt_onboarding').hide()
|
||||||
$('#endorsement_list').show()
|
$('#endorsement_list').show()
|
||||||
$('#endorsement_filter').show()
|
$('#endorsement_filter').show()
|
||||||
|
|
||||||
@ -836,7 +840,6 @@ table.dataTable thead th {
|
|||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
$(document).ready(function() {
|
$(document).ready(function() {
|
||||||
getURLParams()
|
getURLParams()
|
||||||
@ -1034,4 +1037,87 @@ table.dataTable thead th {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function addHTMLInput(data = null, container_id = 'dynamic-form-container')
|
||||||
|
{
|
||||||
|
console.log('container_id', container_id);
|
||||||
|
const container = document.getElementById(container_id);
|
||||||
|
|
||||||
|
let required = ''
|
||||||
|
let required_star = ''
|
||||||
|
if(container_id == 'dynamic-form-container'){
|
||||||
|
required = 'required';
|
||||||
|
required_star = '*';
|
||||||
|
}
|
||||||
|
console.log('container', container);
|
||||||
|
|
||||||
|
const newRow = document.createElement('div');
|
||||||
|
newRow.className = 'form-row dynamic-form-row';
|
||||||
|
newRow.innerHTML = `
|
||||||
|
<div class="form-group col-md-5">
|
||||||
|
<label for="file_name">Document Name<span class="text-danger">${required_star}</span></label>
|
||||||
|
<input type="text" class="form-control" id="docs_name" name="doc_name[]" placeholder="Enter file name" ${required}>
|
||||||
|
</div>
|
||||||
|
<div class="form-group col-md-5">
|
||||||
|
<label for="file">Upload File<span class="text-danger">${required_star}</span></label>
|
||||||
|
<input type="file" class="form-control" id="file_name" name="file[]" ${required} accept=".pdf,.jpg,.jpeg,.png">
|
||||||
|
</div>
|
||||||
|
<div class="form-group col-md-2" style="position: relative;top: 28px;">
|
||||||
|
<a class="btn btn-danger waves-effect waves-light" onclick="removeHTMLInput(this, '${container_id}')">x</a>
|
||||||
|
<a class="btn btn-primary waves-effect waves-light mr-1" onclick="addHTMLInput(null, '${container_id}')">+</a>
|
||||||
|
</div>
|
||||||
|
`;
|
||||||
|
container.appendChild(newRow);
|
||||||
|
|
||||||
|
if (data !== null && data.db_column_name !== undefined) {
|
||||||
|
const selectElement = newRow.querySelector('.db-column-name-select');
|
||||||
|
selectElement.value = data.db_column_name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function removeHTMLInput(element, container_id)
|
||||||
|
{
|
||||||
|
const container = document.getElementById(container_id);
|
||||||
|
const rows = container.querySelectorAll('.dynamic-form-row');
|
||||||
|
|
||||||
|
if (rows.length > 1) {
|
||||||
|
const row = element.closest('.dynamic-form-row');
|
||||||
|
row.remove();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function appendFileTableBody(data)
|
||||||
|
{
|
||||||
|
console.log(data);
|
||||||
|
|
||||||
|
$('#table_bd').empty();
|
||||||
|
|
||||||
|
$.each(data, function(index, item) {
|
||||||
|
var row = $('<tr>');
|
||||||
|
|
||||||
|
row.append($('<td>').text(index+1));
|
||||||
|
row.append($('<td>').text(item.doc_name));
|
||||||
|
row.append($('<td>').text(item.file_name));
|
||||||
|
|
||||||
|
// var url = "<?= base_url('/downloadGdriveFile'); ?>" +
|
||||||
|
// "?client_id=" + item.client_id +
|
||||||
|
// "&file_type=policy" +
|
||||||
|
// "&file_name=" + item.file_name +
|
||||||
|
// "&client_policy_id=" + item.client_policy_id;
|
||||||
|
|
||||||
|
var url = '<?= base_url('download-kyc-docs/') ?>' + item.file_name;
|
||||||
|
|
||||||
|
|
||||||
|
var link = $('<a>')
|
||||||
|
.attr('href', url)
|
||||||
|
.attr('target', '_blank') // Open in a new tab
|
||||||
|
.attr('style', 'font-size:18px;')
|
||||||
|
.attr('data-id', item.id)
|
||||||
|
.addClass('mdi mdi-download')
|
||||||
|
|
||||||
|
|
||||||
|
// Append the <a> tag inside the <td>
|
||||||
|
row.append($('<td>').append(link));
|
||||||
|
$('#table_bd').append(row);
|
||||||
|
});
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
@ -2384,6 +2384,9 @@
|
|||||||
$('#table_tr_37').hide();
|
$('#table_tr_37').hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$('#client_id').addClass('readonly-select ').select2('destroy');
|
||||||
|
$('#client_branch_id').addClass('readonly-select ').select2('destroy');
|
||||||
|
|
||||||
}, 4000)
|
}, 4000)
|
||||||
|
|
||||||
// Set additional fields
|
// Set additional fields
|
||||||
@ -2485,7 +2488,7 @@
|
|||||||
// } else {
|
// } else {
|
||||||
// $('#bro_payable_by').prop('checked', false);
|
// $('#bro_payable_by').prop('checked', false);
|
||||||
// }
|
// }
|
||||||
$('#bro_payable_by').val(res.data.bro_payable_by);
|
$('#bro_payable_by').val(res.data.bro_payable_by ?? 1);
|
||||||
|
|
||||||
// Policy transaction status handling
|
// Policy transaction status handling
|
||||||
if (res.data.status == "completed") {
|
if (res.data.status == "completed") {
|
||||||
|
|||||||
@ -316,7 +316,7 @@ table.dataTable tbody td {
|
|||||||
<?php foreach($inception_data_list as $index => $row){ ?>
|
<?php foreach($inception_data_list as $index => $row){ ?>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="text-center"><?php echo $index+1; ?></td>
|
<td class="text-center"><?php echo $index+1; ?></td>
|
||||||
<td><?php echo $issuer[$row['issuer']]; ?></td>
|
<td><?php echo $issuer[$row['issuer']] ?? 'Nhance'; ?></td>
|
||||||
<td><?php echo $issuing_type[$row['issue_type']] ?? 'N/A'; ?></td>
|
<td><?php echo $issuing_type[$row['issue_type']] ?? 'N/A'; ?></td>
|
||||||
<td><?php echo $client_type[$row['client_type']] ?? 'N/A'; ?></td>
|
<td><?php echo $client_type[$row['client_type']] ?? 'N/A'; ?></td>
|
||||||
<td><?php echo $row['client_type'] == 2 ? $row['client_name'] . " - " . (!empty($row['pan']) ? $row['pan'] : 'N/A') : $row['client_short_name'] . ' - ' . $row['client_branch_name']; ?></td>
|
<td><?php echo $row['client_type'] == 2 ? $row['client_name'] . " - " . (!empty($row['pan']) ? $row['pan'] : 'N/A') : $row['client_short_name'] . ' - ' . $row['client_branch_name']; ?></td>
|
||||||
|
|||||||
34
app/Views/pt_endorsement_form_file_upload_tab.php
Normal file
34
app/Views/pt_endorsement_form_file_upload_tab.php
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
<div class="row" id="pt_onboarding" style="position: relative; bottom: 25px; display:none;">
|
||||||
|
<div class="col-xl-12">
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="tab-wrapper position-relative">
|
||||||
|
<ul class="nav nav-pills navtab-bg" id="myTab">
|
||||||
|
<li class="nav-item d-flex justify-content-center align-items-center">
|
||||||
|
<button class="scroll-btn left-btn" type="button">◀</button>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item">
|
||||||
|
<a href="#form" data-toggle="tab" aria-expanded="false" class="nav-link px-3 py-2 active-tab active" id="general_tab">
|
||||||
|
<span class="mr-1"><i class="mdi mdi-contacts"></i></span>
|
||||||
|
<span class="d-none d-sm-inline-block">Policy</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item" id="hide_file_upload" style="display: none;">
|
||||||
|
<a href="#fileupload" data-toggle="tab" aria-expanded="true" class="nav-link px-3 py-2" id="kyc_tab">
|
||||||
|
<span class="mr-1"><i class="mdi mdi-file"></i></span>
|
||||||
|
<span class="d-none d-sm-inline-block">Policy Docs</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item d-flex justify-content-center align-items-center">
|
||||||
|
<!-- Right Arrow -->
|
||||||
|
<button class="scroll-btn right-btn" type="button">▶</button>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="tab-content">
|
||||||
|
<?php include('policy_transaction_endorsement_form.php'); ?>
|
||||||
|
<?php include('drive_file_upload.php'); ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@ -184,9 +184,9 @@ table.dataTable tbody td {
|
|||||||
<!-- <td style="display: none;"><?php echo $row['insurer_name'] ?: 'N/A'; ?> </td> -->
|
<!-- <td style="display: none;"><?php echo $row['insurer_name'] ?: 'N/A'; ?> </td> -->
|
||||||
<td><?php echo $row['insurer_branch_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 $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['endorse_eff_date']) ? 'N/A' : change_date_format($row['endorse_eff_date'], 'Y-m-d', 'd/m/Y') ?></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_start_date']) ? 'N/A' : change_date_format($row['policy_start_date'], 'Y-m-d', 'd/m/Y'); ?></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 empty($row['policy_end_date']) ? 'N/A' : change_date_format($row['policy_end_date'], 'Y-m-d', 'd/m/Y'); ?></td>
|
||||||
<td style="display: none;"><?php echo $row['ref'] ?: 'N/A'; ?></td>
|
<td style="display: none;"><?php echo $row['ref'] ?: 'N/A'; ?></td>
|
||||||
<td style="display: none;"><?php echo $row['remarks'] ?: 'N/A'; ?></td>
|
<td style="display: none;"><?php echo $row['remarks'] ?: 'N/A'; ?></td>
|
||||||
|
|
||||||
@ -241,8 +241,8 @@ table.dataTable tbody td {
|
|||||||
<td style="display: none;"><?php echo $row['service_person_name'] ?: 'N/A'; ?></td>
|
<td style="display: none;"><?php echo $row['service_person_name'] ?: 'N/A'; ?></td>
|
||||||
<td style="display: none;"><?php echo $row['nhance_branch'] ?: 'N/A'; ?></td>
|
<td style="display: none;"><?php echo $row['nhance_branch'] ?: 'N/A'; ?></td>
|
||||||
<td style="display: none;"><?php echo $row['installment'] ?: 'N/A'; ?></td>
|
<td style="display: none;"><?php echo $row['installment'] ?: 'N/A'; ?></td>
|
||||||
<td style="display: none;"><?php echo empty($row['data_received_date']) ? 'N/A' : date('d/m/Y', strtotime($row['data_received_date'])) ?></td>
|
<td style="display: none;"><?php echo empty($row['data_received_date']) ? 'N/A' : change_date_format($row['data_received_date'], 'Y-m-d', 'd/m/Y') ?></td>
|
||||||
<td style="display: none;"><?php echo empty($row['renewal_date']) ? 'N/A' : date('d/m/Y', strtotime($row['renewal_date'])) ?></td>
|
<td style="display: none;"><?php echo empty($row['renewal_date']) ? 'N/A' : change_date_format($row['renewal_date'], 'Y-m-d', 'd/m/Y') ?></td>
|
||||||
|
|
||||||
<td style="display:none;"><?php echo $row['co_share'] ?? 'No'; ?></td>
|
<td style="display:none;"><?php echo $row['co_share'] ?? 'No'; ?></td>
|
||||||
<td style="display:none;"><?php echo $row['bro_payable_by'] ?? 'No'; ?></td>
|
<td style="display:none;"><?php echo $row['bro_payable_by'] ?? 'No'; ?></td>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user