Merge branch 'dev' of bitbucket.org:jubilian/nhance into dev

This commit is contained in:
VENKATESHWARAN 2025-01-20 10:45:43 +05:30
commit c72ad51b81
9 changed files with 172 additions and 386 deletions

View File

@ -313,14 +313,8 @@ class EmployeeController extends AdminController
'c.short_name', 'c.short_name',
'cb.branch_name', 'cb.branch_name',
'cp.id as client_policy_id', 'cp.id as client_policy_id',
'(SELECT COUNT(*) '"0" as employee_count',
FROM employees e '"0" as total',
JOIN employee_polices ep ON e.id = ep.employee_id
WHERE e.file_id = files.id AND ep.client_policy_id = files.policy_id) as employee_count',
'(SELECT SUM(ep.rata_premimum) + SUM(ep.gst)
FROM employees e
JOIN employee_polices ep ON e.id = ep.employee_id
WHERE e.file_id = files.id AND ep.client_policy_id = files.policy_id) as total',
'policy_type.policy_type' , 'policy_type.policy_type' ,
'cp.policy_no' , 'cp.policy_no' ,
]) ])

View File

@ -194,6 +194,11 @@ class MailHelper
} else { } else {
$bcc = ''; $bcc = '';
} }
if(isset($params['cc'])){
$cc = $params['cc'];
}else{
$cc = '';
}
$from_address = getenv('email.fromEmail'); $from_address = getenv('email.fromEmail');
@ -255,7 +260,6 @@ class MailHelper
} }
$apiResponse = json_decode($response, true); $apiResponse = json_decode($response, true);
if ($httpCode === 200) { if ($httpCode === 200) {
return json_encode(['status' => 'success', 'code' => 200, 'message' => 'Email Sent Successfully...', 'data' => $emaill], 200); return json_encode(['status' => 'success', 'code' => 200, 'message' => 'Email Sent Successfully...', 'data' => $emaill], 200);
} else { } else {
@ -289,116 +293,141 @@ class MailHelper
} }
public static function send_email($params) public static function send_email($params)
{ {
$myLogger = \Config\Services::mylogger(); $myLogger = \Config\Services::mylogger();
$emaill = $params['mail']; $emaill = $params['mail'];
$subject = $params['subject']; $subject = $params['subject'];
$message = $params['message']; $message = $params['message'];
$attachments = isset($params['attachments']) ? $params['attachments'] : []; $attachments = isset($params['attachments']) ? $params['attachments'] : [];
$common = isset($params['common']) ? $params['common'] : ''; $common = isset($params['common']) ? $params['common'] : '';
$bcc = isset($params['bcc']) ? $params['bcc'] : '';
$cc = isset($params['cc']) ? $params['cc'] : '';
$from_address = getenv('email.fromEmail'); $from_address = getenv('email.fromEmail');
try { try {
$curl = curl_init(); $curl = curl_init();
$postData = [ $postData = [
'from' => [ 'from' => [
'address' => $from_address 'address' => $from_address
], ],
'to' => [ 'to' => [
[ [
'email_address' => [ 'email_address' => [
'address' => $emaill 'address' => $emaill
]
] ]
], ]
'subject' => $subject, ],
'htmlbody' => $message 'subject' => $subject,
]; 'htmlbody' => $message
];
// Handle attachments // Add CC recipients if provided
if (!empty($attachments)) { if (!empty($cc)) {
$postData['attachments'] = []; $postData['cc'] = [];
foreach ($attachments as $attachment) { // Handle both string and array inputs for CC
if (isset($attachment['filePath']) && file_exists($attachment['filePath'])) { $ccEmails = is_array($cc) ? $cc : [$cc];
// Determine MIME type dynamically foreach ($ccEmails as $ccEmail) {
$fileMimeType = mime_content_type($attachment['filePath']); $postData['cc'][] = [
'email_address' => [
'address' => $ccEmail
]
];
}
}
$postData['attachments'][] = [ // Add BCC recipients if provided
'content' => base64_encode(file_get_contents($attachment['filePath'])), if (!empty($bcc)) {
'name' => $attachment['fileName'], $postData['bcc'] = [];
'mime_type' => $fileMimeType, // Add mime_type field // Handle both string and array inputs for BCC
]; $bccEmails = is_array($bcc) ? $bcc : [$bcc];
} foreach ($bccEmails as $bccEmail) {
$postData['bcc'][] = [
'email_address' => [
'address' => $bccEmail
]
];
}
}
// Handle attachments
if (!empty($attachments)) {
$postData['attachments'] = [];
foreach ($attachments as $attachment) {
if (isset($attachment['filePath']) && file_exists($attachment['filePath'])) {
// Determine MIME type dynamically
$fileMimeType = mime_content_type($attachment['filePath']);
$postData['attachments'][] = [
'content' => base64_encode(file_get_contents($attachment['filePath'])),
'name' => $attachment['fileName'],
'mime_type' => $fileMimeType,
];
} }
} }
}
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.zeptomail.in/v1.1/email",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode($postData),
CURLOPT_HTTPHEADER => [
"accept: application/json",
"authorization: Zoho-enczapikey " . getenv('ZEPTO_API_KEY'),
"cache-control: no-cache",
"content-type: application/json",
],
]);
curl_setopt_array($curl, [ $mail_result = curl_exec($curl);
CURLOPT_URL => "https://api.zeptomail.in/v1.1/email", $err = curl_error($curl);
CURLOPT_RETURNTRANSFER => true, curl_close($curl);
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode($postData),
CURLOPT_HTTPHEADER => [
"accept: application/json",
"authorization: Zoho-enczapikey " . getenv('ZEPTO_API_KEY'),
"cache-control: no-cache",
"content-type: application/json",
],
]);
$mail_result = curl_exec($curl); $res['params'] = $params;
$err = curl_error($curl); $MailDataHelper = new GmailResponseHandler();
curl_close($curl); $apiResponse = json_decode($mail_result, true);
// log_message('error','inside mail helper'); $res['zepto_api'] = $apiResponse;
// log_message('error', $response.' error->'.$err);die();
$res['params'] = $params;
$MailDataHelper = new GmailResponseHandler();
$apiResponse = json_decode($mail_result, true);
$res['zepto_api'] = $apiResponse;
if (isset($apiResponse['error'])) {
$response = $res;
$MailDataHelper->receive_and_distribute_param_to_functions($response);
return json_encode([
'status' => 'failed',
'code' => 404,
'message' => 'Email Sent Failed...' . $emaill,
'data' => $res
], 404);
}
// $apiResponse = json_decode($response, true); if (isset($apiResponse['error'])) {
// Check if request_id exists in response (indicates success)
if (isset($apiResponse['data'])) {
$response = $res;
$MailDataHelper->receive_and_distribute_param_to_functions($response);
return json_encode([
'status' => 'success',
'code' => 200,
'message' => 'Email Sent Successfully...' . $emaill,
'data' => $res
], 200);
}
} catch (\Exception $e) {
$msg['error'] = $e->getMessage();
$msg['params'] = $params;
$response = $res; $response = $res;
$MailDataHelper->receive_and_distribute_param_to_functions($response); $MailDataHelper->receive_and_distribute_param_to_functions($response);
return json_encode([ return json_encode([
'status' => 'failed', 'status' => 'failed',
'code' => 500, 'code' => 404,
'data' => $msg 'message' => 'Email Sent Failed...' . $emaill,
], 500); 'data' => $res
], 404);
} }
}
if (isset($apiResponse['data'])) {
$response = $res;
$MailDataHelper->receive_and_distribute_param_to_functions($response);
return json_encode([
'status' => 'success',
'code' => 200,
'message' => 'Email Sent Successfully...' . $emaill,
'data' => $res
], 200);
}
} catch (\Exception $e) {
$msg['error'] = $e->getMessage();
$msg['params'] = $params;
$response = $res;
$MailDataHelper->receive_and_distribute_param_to_functions($response);
return json_encode([
'status' => 'failed',
'code' => 500,
'data' => $msg
], 500);
}
}
public static function bulk_mail(array $mails = []) public static function bulk_mail(array $mails = [])
{ {
$model = new JobModel(); $model = new JobModel();

View File

@ -226,6 +226,7 @@ class EmployeePolicyModel extends Model
public function getInceptionEmployeeDataForExportExcel($ref_data, $return_type = 0) public function getInceptionEmployeeDataForExportExcel($ref_data, $return_type = 0)
{ {
$client_id = $ref_data['client_id'];
$client_policy_id = $ref_data['client_policy_id']; $client_policy_id = $ref_data['client_policy_id'];
$client_branch_id = $ref_data['client_branch_id']; $client_branch_id = $ref_data['client_branch_id'];
$insurer_or_tpa = $ref_data['insurer_or_tpa']; $insurer_or_tpa = $ref_data['insurer_or_tpa'];
@ -318,6 +319,9 @@ class EmployeePolicyModel extends Model
WHERE batch_files.event_type = '{$event}' WHERE batch_files.event_type = '{$event}'
AND batch_files.actions = 'export' AND batch_files.actions = 'export'
AND batch_files.insurer_or_tpa = '{$insurer_or_tpa}' AND batch_files.insurer_or_tpa = '{$insurer_or_tpa}'
AND batch_files.client_policy_id = '{$client_policy_id}'
AND batch_files.client_policy_id = '{$client_id}'
) as batch_data ON employee_polices.id = batch_data.emp_policy_id ) as batch_data ON employee_polices.id = batch_data.emp_policy_id
WHERE employee_polices.client_policy_id = '{$client_policy_id}' WHERE employee_polices.client_policy_id = '{$client_policy_id}'
AND (employee_polices.{$id} IS NULL OR employee_polices.{$id} = '') AND (employee_polices.{$id} IS NULL OR employee_polices.{$id} = '')

View File

@ -1,29 +1,24 @@
<style> <style>
custom-dropdown-menu {
.custom-dropdown-menu {
display: none; display: none;
position: fixed; position: absolute;
background-color: #ffffff !important; background-color: #ffffff !important;
border: 1px solid rgba(0,0,0,.15); border: 1px solid rgba(0, 0, 0, 0.15);
border-radius: 0.25rem; border-radius: 0.25rem;
padding: 0.5rem 0; padding: 0.5rem 0;
min-width: 10rem; min-width: 10rem;
z-index: 9999; z-index: 9999;
box-shadow: 0 0 10px rgba(0,0,0,0.1); box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
} }
.custom-dropdown-menu .dropdown-item { .custom-dropdown-menu .dropdown-item {
display: block !important; display: block !important;
width: 100% !important; width: 100% !important;
padding: 0.5rem 1rem !important; padding: 0.5rem 1rem !important;
clear: both !important;
font-weight: 400 !important;
color: #212529 !important; color: #212529 !important;
text-align: inherit !important;
white-space: nowrap !important;
background-color: transparent !important;
border: 0 !important;
text-decoration: none !important; text-decoration: none !important;
position: relative !important; background-color: transparent !important;
} }
.custom-dropdown-menu .dropdown-item:hover { .custom-dropdown-menu .dropdown-item:hover {
@ -31,40 +26,6 @@ custom-dropdown-menu {
color: #16181b !important; color: #16181b !important;
cursor: pointer !important; cursor: pointer !important;
} }
.custom-dropdown-menu .dropdown-item i {
margin-right: 8px !important;
vertical-align: middle !important;
}
.table tbody tr {
cursor: pointer;
}
/* Ensure the dropdown menu has a solid background */
.custom-dropdown-menu::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: #ffffff;
z-index: -1;
}
/* Add a subtle backdrop effect */
.custom-dropdown-menu::after {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0,0,0,0.05);
z-index: -2;
pointer-events: none;
}
</style> </style>
<div class="row" id="insurer_list"> <div class="row" id="insurer_list">
<div class="col-12"> <div class="col-12">

View File

@ -108,31 +108,25 @@ table.dataTable tbody td {
color: gray; color: gray;
} }
custom-dropdown-menu { .custom-dropdown-menu {
display: none; display: none;
position: fixed; position: absolute;
background-color: #ffffff !important; background-color: #ffffff !important;
border: 1px solid rgba(0,0,0,.15); border: 1px solid rgba(0, 0, 0, 0.15);
border-radius: 0.25rem; border-radius: 0.25rem;
padding: 0.5rem 0; padding: 0.5rem 0;
min-width: 10rem; min-width: 10rem;
z-index: 9999; z-index: 9999;
box-shadow: 0 0 10px rgba(0,0,0,0.1); box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
} }
.custom-dropdown-menu .dropdown-item { .custom-dropdown-menu .dropdown-item {
display: block !important; display: block !important;
width: 100% !important; width: 100% !important;
padding: 0.5rem 1rem !important; padding: 0.5rem 1rem !important;
clear: both !important;
font-weight: 400 !important;
color: #212529 !important; color: #212529 !important;
text-align: inherit !important;
white-space: nowrap !important;
background-color: transparent !important;
border: 0 !important;
text-decoration: none !important; text-decoration: none !important;
position: relative !important; background-color: transparent !important;
} }
.custom-dropdown-menu .dropdown-item:hover { .custom-dropdown-menu .dropdown-item:hover {
@ -140,43 +134,6 @@ custom-dropdown-menu {
color: #16181b !important; color: #16181b !important;
cursor: pointer !important; cursor: pointer !important;
} }
.custom-dropdown-menu .dropdown-item i {
margin-right: 8px !important;
vertical-align: middle !important;
}
.table tbody tr {
cursor: pointer;
}
/* Ensure the dropdown menu has a solid background */
.custom-dropdown-menu::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: #ffffff;
z-index: -1;
}
/* Add a subtle backdrop effect */
.custom-dropdown-menu::after {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0,0,0,0.05);
z-index: -2;
pointer-events: none;
}
</style> </style>
<div class="row" id="inception_list"> <div class="row" id="inception_list">

View File

@ -1,29 +1,24 @@
<style> <style>
custom-dropdown-menu {
.custom-dropdown-menu {
display: none; display: none;
position: fixed; position: absolute;
background-color: #ffffff !important; background-color: #ffffff !important;
border: 1px solid rgba(0,0,0,.15); border: 1px solid rgba(0, 0, 0, 0.15);
border-radius: 0.25rem; border-radius: 0.25rem;
padding: 0.5rem 0; padding: 0.5rem 0;
min-width: 10rem; min-width: 10rem;
z-index: 9999; z-index: 9999;
box-shadow: 0 0 10px rgba(0,0,0,0.1); box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
} }
.custom-dropdown-menu .dropdown-item { .custom-dropdown-menu .dropdown-item {
display: block !important; display: block !important;
width: 100% !important; width: 100% !important;
padding: 0.5rem 1rem !important; padding: 0.5rem 1rem !important;
clear: both !important;
font-weight: 400 !important;
color: #212529 !important; color: #212529 !important;
text-align: inherit !important;
white-space: nowrap !important;
background-color: transparent !important;
border: 0 !important;
text-decoration: none !important; text-decoration: none !important;
position: relative !important; background-color: transparent !important;
} }
.custom-dropdown-menu .dropdown-item:hover { .custom-dropdown-menu .dropdown-item:hover {
@ -31,40 +26,6 @@
color: #16181b !important; color: #16181b !important;
cursor: pointer !important; cursor: pointer !important;
} }
.custom-dropdown-menu .dropdown-item i {
margin-right: 8px !important;
vertical-align: middle !important;
}
.table tbody tr {
cursor: pointer;
}
/* Ensure the dropdown menu has a solid background */
.custom-dropdown-menu::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: #ffffff;
z-index: -1;
}
/* Add a subtle backdrop effect */
.custom-dropdown-menu::after {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0,0,0,0.05);
z-index: -2;
pointer-events: none;
}
</style> </style>
<div class="row" id="kyc_list"> <div class="row" id="kyc_list">
<div class="col-12"> <div class="col-12">

View File

@ -37,31 +37,26 @@ table.dataTable tbody td {
margin-bottom: 10px; margin-bottom: 10px;
} }
custom-dropdown-menu {
.custom-dropdown-menu {
display: none; display: none;
position: fixed; position: absolute;
background-color: #ffffff !important; background-color: #ffffff !important;
border: 1px solid rgba(0,0,0,.15); border: 1px solid rgba(0, 0, 0, 0.15);
border-radius: 0.25rem; border-radius: 0.25rem;
padding: 0.5rem 0; padding: 0.5rem 0;
min-width: 10rem; min-width: 10rem;
z-index: 9999; z-index: 9999;
box-shadow: 0 0 10px rgba(0,0,0,0.1); box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
} }
.custom-dropdown-menu .dropdown-item { .custom-dropdown-menu .dropdown-item {
display: block !important; display: block !important;
width: 100% !important; width: 100% !important;
padding: 0.5rem 1rem !important; padding: 0.5rem 1rem !important;
clear: both !important;
font-weight: 400 !important;
color: #212529 !important; color: #212529 !important;
text-align: inherit !important;
white-space: nowrap !important;
background-color: transparent !important;
border: 0 !important;
text-decoration: none !important; text-decoration: none !important;
position: relative !important; background-color: transparent !important;
} }
.custom-dropdown-menu .dropdown-item:hover { .custom-dropdown-menu .dropdown-item:hover {
@ -69,40 +64,6 @@ custom-dropdown-menu {
color: #16181b !important; color: #16181b !important;
cursor: pointer !important; cursor: pointer !important;
} }
.custom-dropdown-menu .dropdown-item i {
margin-right: 8px !important;
vertical-align: middle !important;
}
.table tbody tr {
cursor: pointer;
}
/* Ensure the dropdown menu has a solid background */
.custom-dropdown-menu::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: #ffffff;
z-index: -1;
}
/* Add a subtle backdrop effect */
.custom-dropdown-menu::after {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0,0,0,0.05);
z-index: -2;
pointer-events: none;
}
</style> </style>

View File

@ -45,31 +45,25 @@ table.dataTable tbody td {
.addbtnStyle{ .addbtnStyle{
margin-left: 20px !important; margin-left: 20px !important;
} }
custom-dropdown-menu { .custom-dropdown-menu {
display: none; display: none;
position: fixed; position: absolute;
background-color: #ffffff !important; background-color: #ffffff !important;
border: 1px solid rgba(0,0,0,.15); border: 1px solid rgba(0, 0, 0, 0.15);
border-radius: 0.25rem; border-radius: 0.25rem;
padding: 0.5rem 0; padding: 0.5rem 0;
min-width: 10rem; min-width: 10rem;
z-index: 9999; z-index: 9999;
box-shadow: 0 0 10px rgba(0,0,0,0.1); box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
} }
.custom-dropdown-menu .dropdown-item { .custom-dropdown-menu .dropdown-item {
display: block !important; display: block !important;
width: 100% !important; width: 100% !important;
padding: 0.5rem 1rem !important; padding: 0.5rem 1rem !important;
clear: both !important;
font-weight: 400 !important;
color: #212529 !important; color: #212529 !important;
text-align: inherit !important;
white-space: nowrap !important;
background-color: transparent !important;
border: 0 !important;
text-decoration: none !important; text-decoration: none !important;
position: relative !important; background-color: transparent !important;
} }
.custom-dropdown-menu .dropdown-item:hover { .custom-dropdown-menu .dropdown-item:hover {
@ -77,41 +71,6 @@ custom-dropdown-menu {
color: #16181b !important; color: #16181b !important;
cursor: pointer !important; cursor: pointer !important;
} }
.custom-dropdown-menu .dropdown-item i {
margin-right: 8px !important;
vertical-align: middle !important;
}
.table tbody tr {
cursor: pointer;
}
/* Ensure the dropdown menu has a solid background */
.custom-dropdown-menu::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: #ffffff;
z-index: -1;
}
/* Add a subtle backdrop effect */
.custom-dropdown-menu::after {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0,0,0,0.05);
z-index: -2;
pointer-events: none;
}
</style> </style>
<style> <style>

View File

@ -1,71 +1,31 @@
<style> <style>
custom-dropdown-menu {
.custom-dropdown-menu {
display: none; display: none;
position: fixed; position: absolute;
background-color: #ffffff !important; background-color: #ffffff !important;
border: 1px solid rgba(0,0,0,.15); border: 1px solid rgba(0, 0, 0, 0.15);
border-radius: 0.25rem; border-radius: 0.25rem;
padding: 0.5rem 0; padding: 0.5rem 0;
min-width: 10rem; min-width: 10rem;
z-index: 9999; z-index: 9999;
box-shadow: 0 0 10px rgba(0,0,0,0.1); box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
} }
.custom-dropdown-menu .dropdown-item { .custom-dropdown-menu .dropdown-item {
display: block !important; display: block !important;
width: 100% !important; width: 100% !important;
padding: 0.5rem 1rem !important; padding: 0.5rem 1rem !important;
clear: both !important;
font-weight: 400 !important;
color: #212529 !important; color: #212529 !important;
text-align: inherit !important;
white-space: nowrap !important;
background-color: transparent !important;
border: 0 !important;
text-decoration: none !important; text-decoration: none !important;
position: relative !important; background-color: transparent !important;
} }
.custom-dropdown-menu .dropdown-item:hover { .custom-dropdown-menu .dropdown-item:hover {
background-color: #f8f9fa !important; background-color: #f8f9fa !important;
color: #16181b !important; color: #16181b !important;
cursor: pointer !important; cursor: pointer !important;
} } </style>
.custom-dropdown-menu .dropdown-item i {
margin-right: 8px !important;
vertical-align: middle !important;
}
.table tbody tr {
cursor: pointer;
}
/* Ensure the dropdown menu has a solid background */
.custom-dropdown-menu::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: #ffffff;
z-index: -1;
}
/* Add a subtle backdrop effect */
.custom-dropdown-menu::after {
content: '';
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0,0,0,0.05);
z-index: -2;
pointer-events: none;
}
</style>
<div class="row" id="tpa_list"> <div class="row" id="tpa_list">
<div class="col-12"> <div class="col-12">
<div class="card"> <div class="card">