From 179ec2811872c3cf9021616fefdf1c882a172cf0 Mon Sep 17 00:00:00 2001 From: "venkatesh.r" Date: Mon, 11 Nov 2024 15:49:59 +0530 Subject: [PATCH 1/3] CHANGE_RFQ_AND TESTING_VIEW_MEMBERS_STATUS_TO_CHANGE_MULTISELCT : RV --- app/Controllers/EmployeeController.php | 29 ++-- app/Controllers/LeadsController.php | 43 ++++-- app/Models/EmployeePolicyModel.php | 39 +++-- app/Views/employee_list.php | 47 ++++++- app/Views/view_rfq.php | 188 +++++++++++++++---------- 5 files changed, 241 insertions(+), 105 deletions(-) diff --git a/app/Controllers/EmployeeController.php b/app/Controllers/EmployeeController.php index e5c6a9ab..2770ea29 100755 --- a/app/Controllers/EmployeeController.php +++ b/app/Controllers/EmployeeController.php @@ -87,22 +87,31 @@ class EmployeeController extends AdminController { // $model = new UserModel(); $data = []; - $data['status'] = ['draft' => 'Draft', 'active' => 'Active', 'inactive' => 'In-Active', 'pending' => 'Pending']; + $data['status'] = ['draft' => 'Draft', 'enrolled' => 'Enrolled', 'active' => 'Active', 'inactive' => 'In-Active', 'pending' => 'Pending']; + if (count($this->request->getGet())) { $filterData = $this->request->getGet(); + + // Convert the status field to an array if it exists in the request data + if (isset($filterData['status'])) { + $filterData['status'] = explode(",", $filterData['status']); + } + + // Fetch employees with the modified $filterData array $data['employees'] = $this->employeePolicyModel->getEmployeePolicy( - client_id: $filterData['client_id'], - policy_id: $filterData['policy_id'], - branch_id: $filterData['branch_id'], - emp_code : $filterData['emp_code'], - emp_name : $filterData['emp_name'], - status : $filterData['status'], + client_id: $filterData['client_id'] ?? null, + policy_id: $filterData['policy_id'] ?? null, + branch_id: $filterData['branch_id'] ?? null, + emp_code : $filterData['emp_code'] ?? null, + emp_name : $filterData['emp_name'] ?? null, + status : $filterData['status'] ?? [], ); - // dd($this->employeePolicyModel->getLastQuery()); - + + // Set getData in $data array with the processed $filterData $data['getData'] = $filterData; } - + + // dd($this->employeeModel->getLastQuery()); // dd( $data['getData']); // dd($this->request->getGet()); diff --git a/app/Controllers/LeadsController.php b/app/Controllers/LeadsController.php index 2d4a68ef..9d2c246c 100644 --- a/app/Controllers/LeadsController.php +++ b/app/Controllers/LeadsController.php @@ -500,26 +500,31 @@ class LeadsController extends BaseController $rowNumber++; } - + // Leave two blank rows $rowNumber += 2; - + // Set headers and subheaders starting from current row $headers = $data['table_data']['headers']; $subHeaderRow = $rowNumber + 1; $columnLetter = 'A'; - - // Add headers in the first row and subheaders in the second row + + // Set column width and apply word wrap to headers and subheaders foreach ($headers as $header) { if ($header['parentHeader'] === 'Item Key' || $header['parentHeader'] == 'Action') { continue; // Skip "Item Key" and "Action" columns } - - if($header['parentHeader'] === 'Sno'){ + + if ($header['parentHeader'] === 'Sno') { $header['parentHeader'] = 'S.No.'; } - + + // Set the header cell value $sheet->setCellValue("{$columnLetter}{$rowNumber}", $header['parentHeader']); + + // Set column width for header + $sheet->getColumnDimension($columnLetter)->setWidth(20); // Adjust width as needed + $sheet->getStyle("{$columnLetter}{$rowNumber}")->getAlignment()->setWrapText(true); // Apply bold style to the header $sheet->getStyle("{$columnLetter}{$rowNumber}")->applyFromArray([ @@ -528,9 +533,13 @@ class LeadsController extends BaseController ], ]); + // Add subheaders in the second row foreach ($header['subHeaders'] as $subHeader) { $sheet->setCellValue("{$columnLetter}{$subHeaderRow}", $subHeader); + // Enable word wrap for subheaders + $sheet->getStyle("{$columnLetter}{$subHeaderRow}")->getAlignment()->setWrapText(true); + // Apply bold style to the subheader $sheet->getStyle("{$columnLetter}{$subHeaderRow}")->applyFromArray([ 'font' => [ @@ -541,11 +550,11 @@ class LeadsController extends BaseController $columnLetter++; } } - + // Move to next row for data entries $rowNumber = $subHeaderRow + 1; - - // Add data rows + + // Add data rows and enable word wrap for data cells foreach ($data['table_data']['data'] as $dataRow) { $columnLetter = 'A'; foreach ($dataRow['data'] as $cellData) { @@ -553,11 +562,20 @@ class LeadsController extends BaseController continue; // Skip "Item Key" data } $sheet->setCellValue("{$columnLetter}{$rowNumber}", $cellData['value']); + + // Enable word wrap for data cells + $sheet->getStyle("{$columnLetter}{$rowNumber}")->getAlignment()->setWrapText(true); + $columnLetter++; } $rowNumber++; } - + + // Auto-size all columns after data is entered + foreach ($sheet->getColumnIterator() as $column) { + $sheet->getColumnDimension($column->getColumnIndex())->setAutoSize(true); + } + // Set filename based on type $string = ($type == 2) ? 'QCR' : 'RFQ'; $filename = $string . '_' . $rfq_data['client_short_name'] . '_' . $rfq_data['policy_type'] . '_' . date('Ymdhis') . '.xlsx'; @@ -586,7 +604,8 @@ class LeadsController extends BaseController $recipient_type = $params['recipient_type'];//insurer or client $recipient_mail = $params['recipient_mail'];// - only primary key of contacts $recipient_mail = json_decode($params['recipient_mail'], true);;// - only primary key of contacts - $cc = 'velz1990@gmail.com,vitvelz@gmail.com'; + // $cc = 'velz1990@gmail.com,vitvelz@gmail.com'; + $cc = ""; $result_data = []; // dd($recipient_mail); diff --git a/app/Models/EmployeePolicyModel.php b/app/Models/EmployeePolicyModel.php index 5eabd0bb..00dff6ca 100755 --- a/app/Models/EmployeePolicyModel.php +++ b/app/Models/EmployeePolicyModel.php @@ -78,6 +78,7 @@ class EmployeePolicyModel extends Model // ---------------------------------------------------------------------------------------------------------- public function getEmployeePolicy($client_id = 0, $policy_id=0, $status=0, $branch_id=0, $emp_code="", $emp_name="") { + // dd($status); $result = $this->select([ 'employee_polices.*', @@ -132,17 +133,39 @@ class EmployeePolicyModel extends Model if ($policy_id !=0 && !empty($policy_id)) { $result->where('employee_polices.client_policy_id', $policy_id); } - if ($status !=0 && !empty($status)) { - if($status == 'active'){ + + if (is_array($status) && count($status) > 0) { + + $result->where('employee_polices.status !=', 'expired'); + + if (in_array("active", $status)) { + $result->where('employee_polices.tpa_id IS NOT NULL'); - $result->where('employee_polices.uhid IS NOT NULL'); - }else if($status == 'pending'){ - $status = 'active'; - $result->where('employee_polices.status', $status); - }else{ - $result->where('employee_polices.status', $status); + $result->where('employee_polices.uhid IS NOT NULL'); + $result->whereIn('employee_polices.status', $status); + + } elseif (in_array("pending", $status)) { + + $result->where('employee_polices.tpa_id IS NULL'); + $result->where('employee_polices.uhid IS NULL'); + $result->whereIn('employee_polices.status', array_merge($status, ['active'])); + + } else { + + $result->whereIn('employee_polices.status', $status); } + + // if($status == 'active'){ + // $result->where('employee_polices.tpa_id IS NOT NULL'); + // $result->where('employee_polices.uhid IS NOT NULL'); + // }else if($status == 'pending'){ + // $status = 'active'; + // $result->where('employee_polices.status', $status); + // }else{ + // $result->where('employee_polices.status', $status); + // } } + if (!empty($emp_code)) { $result->where('emp.emp_code', $emp_code); } diff --git a/app/Views/employee_list.php b/app/Views/employee_list.php index fed29d5d..b6d77d34 100755 --- a/app/Views/employee_list.php +++ b/app/Views/employee_list.php @@ -7,6 +7,17 @@ table.dataTable tbody td { padding: 4px 4px !important; } + +.select2-selection__choice { + background-color: #0a8794 !important; + color: white !important; + font-weight: bold; +} + +.select2-selection__choice__remove { + color: white !important; + margin-right: 5px; +}
@@ -48,17 +59,22 @@ table.dataTable tbody td {

- $value) { ?>
+

@@ -106,6 +122,13 @@ $(document).ready(function() { $("#policies").select2(); $("#branch_id").select2(); + $("#status2").select2({ + placeholder : 'Select Status' + }); + + $("textarea.select2-search__field").attr('rows', '1'); + $("textarea.select2-search__field").css('resize', 'none'); + // if ($('.select2-selection__arrow').length > 0) { // $('.select2-selection__arrow').removeClass('select2-selection__arrow').addClass('fa fa-chevron-down'); // } @@ -119,11 +142,22 @@ var clientPoliciesWithBranch = { var client_id = ''; var client_branch_id = ''; +var statusData = ; + +$(document).ready(function() { + // Loop through each item in statusData and set the option as selected. + statusData.forEach(function(status) { + $('#status2 option[value="' + status + '"]').prop('selected', true); + }); + + // Refresh the select element (necessary if you are using a plugin like Select2). + $('#status2').trigger('change'); +}); + $(document).ready(function() { console.log("document loaded"); //fetchClientPolicies(); - }); $(window).on("load", function() { @@ -330,6 +364,11 @@ function fetchEmpolyeeList(event) { var emp_code = $('#emp_code').val(); var emp_name = $('#emp_name').val(); + var statusArray = []; + $('#status2 option:selected').each(function() { + statusArray.push($(this).val()); + }); + // console.log(client_id + '-' + policy_id); // if (client_id == '0' || policy_id == '0') { // alert('Please select values in both dropdowns.'); @@ -343,7 +382,7 @@ function fetchEmpolyeeList(event) { branch_id: branch_id, emp_code : emp_code, emp_name : emp_name, - status : status, + status : statusArray, }; const queryString = objectToQueryString(queryParams); diff --git a/app/Views/view_rfq.php b/app/Views/view_rfq.php index 95b5297e..65f88a5f 100644 --- a/app/Views/view_rfq.php +++ b/app/Views/view_rfq.php @@ -216,6 +216,7 @@ body { +
@@ -765,6 +766,7 @@ function moveAddRowButton() { // Event listener to handle row removal rfqTable.addEventListener('click', function(e) { + if (e.target.classList.contains('removeRow')) { const row = e.target.closest('tr'); // Get the row to be removed const rowKey = row.getAttribute('id'); @@ -778,6 +780,7 @@ rfqTable.addEventListener('click', function(e) { moveAddRowButton(); // Move the add row button to the last row realignSpecialConditions(); } + }); // Function to add new columns @@ -1670,8 +1673,16 @@ function changeInsurer(event) { function changeState(event) { - var type = event.target.className; - console.log(type); + let type = event.target.className; + console.log('1 : ', type); + + // if (type.includes('sendClientProposal') && type.includes('fa fa-check-square')) { + // type = 'sendClientProposal'; + // } else if (type.includes('qcrProposal') && type.includes('fa fa-check-square')) { + // type = 'qcrProposal'; + // } + + // console.log('2 : ',type); if (['qcrProposal', 'sendClientProposal'].includes(type)) { @@ -2175,6 +2186,7 @@ function showModal(){ } function ajaxRequestForGetMailData(url){ + $.ajax({ url: url, type: "GET", @@ -2212,7 +2224,7 @@ function appendInput(data) { if (!data.contact_person_email) { html += ` `; } @@ -2282,36 +2294,49 @@ function constructURL() { } function ajaxRequest(url){ + console.log(url); + + $('.loader').fadeIn(); + $('.loader-mask').fadeIn(); + $.ajax({ - url: url, - type: "GET", - dataType: 'json', - success: function (res) { + url: url, + type: "GET", + dataType: 'json', + success: function (res) { - console.log(res); - if(res.status == 'success' && res.code == 200){ - toastr.success('Mail send Successfully', 'SUCCESS') + $('.loader').fadeOut(); + $('.loader-mask').delay(350).fadeOut('slow'); + + console.log(res); + if(res.status == 'success' && res.code == 200){ + toastr.success('Mail send Successfully', 'SUCCESS') + }else{ + if(res.messgae){ + toastr.error(res.messgae, 'ERROR') }else{ - if(res.messgae){ - toastr.error(res.messgae, 'ERROR') - }else{ - toastr.error('Mail send failed', 'ERROR') - } + toastr.error('Mail send failed', 'ERROR') } + } - $('.close').click() - }, - error: function (xhr, status, error) { - console.error(xhr.responseText); - console.error(status, error); - } + $('.close').click() + }, + error: function (xhr, status, error) { + + $('.loader').fadeOut(); + $('.loader-mask').delay(350).fadeOut('slow'); + + console.error(xhr.responseText); + console.error(status, error); + } }); } //-------------------------------------------------------------------------------------------------------------------------------------------- +// not in use do not remove this function function tableToJson() { const headers = []; @@ -2522,14 +2547,14 @@ function jsonToTable(json) { proposel_count++; // Extract qcr and stc status for the main headers - const dropdown_data_qcr = proposels[header.parentHeader]?.qcr === 1 ? + const dropdown_data_qcr = proposels[header.parentHeader]?.qcr == 1 ? 'style="background-color: rgb(221, 221, 221);"' : ''; - const dropdown_data_stc = proposels[header.parentHeader]?.stc === 1 ? + const dropdown_data_stc = proposels[header.parentHeader]?.stc == 1 ? 'style="background-color: rgb(221, 221, 221);"' : ''; - const check_icon_qcr = proposels[header.parentHeader]?.qcr === 1 ? + const check_icon_qcr = proposels[header.parentHeader]?.qcr == 1 ? `` : ''; - const check_icon_stc = proposels[header.parentHeader]?.stc === 1 ? + const check_icon_stc = proposels[header.parentHeader]?.stc == 1 ? `` : ''; @@ -2539,7 +2564,7 @@ function jsonToTable(json) { `; @@ -2603,15 +2628,15 @@ function jsonToTable(json) { const insurerData = proposels[header.parentHeader]?.insurers[index - 1] || {}; - dropdownDataQCRForInsurer = insurerData.qcr === 1 ? + dropdownDataQCRForInsurer = insurerData.qcr == 1 ? 'style="background-color: rgb(221, 221, 221);"' : ''; - dropdownDataSTCForInsurer = insurerData.stc === 1 ? + dropdownDataSTCForInsurer = insurerData.stc == 1 ? 'style="background-color: rgb(221, 221, 221);"' : ''; - checkDropdownDataQCRForInsurer = insurerData.qcr === 1 ? + checkDropdownDataQCRForInsurer = insurerData.qcr == 1 ? `` : ''; - checkDropdownDataSTCForInsurer = insurerData.stc === 1 ? + checkDropdownDataSTCForInsurer = insurerData.stc == 1 ? `` : ''; @@ -2814,57 +2839,72 @@ function jsonToTable(json) { console.log(over_all_column_data); - try { + let qcr_count = $('#qcr_count').val() + let lead_id = $('#lead_id').val() - $('.loader').fadeIn(); - $('.loader-mask').fadeIn(); + if(qcr_count != 0){ - const jsonData = await convertJsonForQCR(); // Construct the JSON data + console.log('qcr found') - // Create a FormData object - const formData = new FormData(); + url = '' + lead_id + '/' + 2; + window.location.href = url; - let lead_id = $('#lead_id').val(); + }else{ - formData.append('json', JSON.stringify(jsonData)); - formData.append('lead_id', lead_id); + console.log('qcr not found') - const postUrl = ''; - console.log(postUrl); + try { - const response = await $.ajax({ - url: postUrl, - type: 'POST', - data: formData, - processData: false, // Important to prevent jQuery from processing the data - contentType: false, // Important to set this to false to let jQuery set the content type correctly - }); + $('.loader').fadeIn(); + $('.loader-mask').fadeIn(); - console.log('Data sent successfully:', response); - if(response.status == true){ - toastr.success(response.message, 'SUCCESS'); - }else{ - toastr.warning(response.message, 'WARNING'); - } + const jsonData = await convertJsonForQCR(); // Construct the JSON data - window.location.href = '' + lead_id + '/' + 2; + // Create a FormData object + const formData = new FormData(); - } catch (error) { - console.error('An error occurred during the AJAX request:'); - - if (error.responseText) { - try { - const errorResponse = JSON.parse(error.responseText); - console.error('Server Response:', errorResponse); - } catch (parseError) { - console.error('Error Message:', error.message); - console.error('Could not parse error response:', error.responseText); + let lead_id = $('#lead_id').val(); + + formData.append('json', JSON.stringify(jsonData)); + formData.append('lead_id', lead_id); + + const postUrl = ''; + console.log(postUrl); + + const response = await $.ajax({ + url: postUrl, + type: 'POST', + data: formData, + processData: false, // Important to prevent jQuery from processing the data + contentType: false, // Important to set this to false to let jQuery set the content type correctly + }); + + console.log('Data sent successfully:', response); + if(response.status == true){ + toastr.success(response.message, 'SUCCESS'); + }else{ + toastr.warning(response.message, 'WARNING'); } - } else { - console.error('Error Message:', error.message); - } - console.error('Full Error Object:', error); + window.location.href = '' + lead_id + '/' + 2; + + } catch (error) { + console.error('An error occurred during the AJAX request:'); + + if (error.responseText) { + try { + const errorResponse = JSON.parse(error.responseText); + console.error('Server Response:', errorResponse); + } catch (parseError) { + console.error('Error Message:', error.message); + console.error('Could not parse error response:', error.responseText); + } + } else { + console.error('Error Message:', error.message); + } + + console.error('Full Error Object:', error); + } } }); }); @@ -2882,15 +2922,21 @@ function jsonToTable(json) { let headerIndex = 0; parentHeaders.forEach((header) => { + + console.log('header names', header); + console.log('header header.innerText', header.innerText); + const colspan = header.getAttribute('colspan') || 1; const subHeaderArray = []; for (let i = 0; i < colspan; i++) { - subHeaderArray.push(subHeaders[headerIndex].innerText.replace('⋮', '').trim()); + const cleanedText = subHeaders[headerIndex].innerText.split('⋮')[0].trim(); + subHeaderArray.push(cleanedText); headerIndex++; } + headers.push({ - parentHeader: header.innerText.replace('⋮', '').trim(), + parentHeader: header.innerText.split('⋮')[0].trim(), subHeaders: subHeaderArray }); }); From 0e895de4298d58102c0d1eef55d3f3630adc2dd2 Mon Sep 17 00:00:00 2001 From: "venkatesh.r" Date: Tue, 12 Nov 2024 17:41:41 +0530 Subject: [PATCH 2/3] FEAT_MAIL_ATTACHMENT : RV --- app/Config/Routes.php | 4 +- app/Controllers/ClientController.php | 23 +- app/Controllers/EmpDataServiceController.php | 101 +++--- app/Controllers/MasterController.php | 20 +- app/Controllers/NotificationController.php | 83 ++++- app/Helpers/sendMailNotification.php | 39 ++- app/Models/MailAttachmentModel.php | 56 ++++ app/Views/insurer_or_tpa_data.php | 38 ++- app/Views/layout/header.php | 4 +- app/Views/notification.php | 309 ++++++++++++++++--- app/Views/view_rfq.php | 23 +- 11 files changed, 575 insertions(+), 125 deletions(-) create mode 100644 app/Models/MailAttachmentModel.php diff --git a/app/Config/Routes.php b/app/Config/Routes.php index 34478d0c..9c7af0c5 100755 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -20,7 +20,7 @@ $routes->get("updatajson", "EmpDataServiceController::updatajson"); $routes->get("view", "EmployeeController::viewECard/$1"); // $routes->get("exportQCRandRFQ", "LeadsController::exportQCRandRFQ"); $routes->get("smapletest", "ClientController::smapletest"); - +$routes->get("testMailAttachments", "ClientController::testMailAttachments"); $routes->post("add_advertise_image", "AppContentManagementController::add_advertise_image"); $routes->get("add_image_index", "AppContentManagementController::add_image_index"); @@ -74,7 +74,9 @@ $routes->group("/client", ["filter" => "authMVC"], function ($routes) { $routes->group("notification", ["filter" => "authMVC"], function ($routes) { $routes->post("create", "NotificationController::createNotification"); $routes->post("update_enable", "NotificationController::update_enable"); + $routes->post("add_attachment", "NotificationController::insertAttachmentsForMailTemplates"); $routes->get("getMailTemplateData/(:any)/(:any)", "NotificationController::getMailTemplateData/$1/$2"); + $routes->get("removeAttachment/(:any)", "NotificationController::removeAttachmentsForMailTemplates/$1"); }); $routes->group("general", ["filter" => "authMVC"], function ($routes) { diff --git a/app/Controllers/ClientController.php b/app/Controllers/ClientController.php index 41291548..b937e835 100755 --- a/app/Controllers/ClientController.php +++ b/app/Controllers/ClientController.php @@ -118,11 +118,28 @@ class ClientController extends AdminController $this->leadsModel = new LeadsModel(); } - public function smapletest(){ - + public function smapletest() + { $headers = ['S.No','EMP ID','EMP NAME','DOB','GENDER','RELATIONSHIP','SUM INSURED','Date of Leaving','Policy End Date','No Of Days','Premium','Pro Rata Premium','GST','Total','Claim Status','ENDORSEMENT_ID']; $filePath = generateExcelWithHeader($headers); - echo "Excel file created at: $filePath"; + echo "Excel file created at: $filePath"; + } + + public function testMailAttachments($email = 'venkateshraman786@gmail.com') + { + $message = ''; + + $attachments = [ + ["filePath" => ROOTPATH."public/sample_excel/sample_addition.xls","fileName" => "sample_addition.xls"], + ["filePath" => ROOTPATH."public/sample_excel/sample_inception.xls","fileName" => "sample_inception.xls"], + ["filePath" => ROOTPATH."public/assets/images/login_bg.jpg","fileName" => "login_bg.jpg"] + ]; + + $res = MailHelper::send_email(['mail' => $email, 'subject' => 'Mail Via Attachment Testing URL', 'message' => $message,'attachments' => $attachments]); + + print_rr($res); + echo '------------------------------------------------------------------------------------------'; + print_rr($attachments); } public function testingForReviewMail($client_id = 77, $emp_code = 'MGL-004', $mail_active = 0) //this function for only tsesting some logics not use for business logic diff --git a/app/Controllers/EmpDataServiceController.php b/app/Controllers/EmpDataServiceController.php index 04cdc654..7ed5aae0 100755 --- a/app/Controllers/EmpDataServiceController.php +++ b/app/Controllers/EmpDataServiceController.php @@ -640,11 +640,14 @@ class EmpDataServiceController extends BaseController // echo '
';
         // print_r($ids); die;
 
-        if (!empty($cash_balance)) {
-            if ((int) $cash_balance['balance']  < (int) $rounded_totals) {
-                $this->myLogger->logme('error', 'Inception export failed due to insufficient deposit amount.');
-                $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]);
-                return 0;
+        if($export_data['insurer_or_tpa'] == 'insurer') //check CD amt related issue for only insurer, not tpa
+        {
+            if (!empty($cash_balance)) {
+                if ((int) $cash_balance['balance']  < (int) $rounded_totals) {
+                    $this->myLogger->logme('error', 'Inception export failed due to insufficient deposit amount.');
+                    $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]);
+                    return 0;
+                }
             }
         }
 
@@ -708,7 +711,6 @@ class EmpDataServiceController extends BaseController
             
         }
 
-
         $excel_data_info = generate_insurer_based_excel($excel_header_columns, $objects);
 
         // Generate Excel file
@@ -1667,6 +1669,7 @@ class EmpDataServiceController extends BaseController
 
         $file_id = $params['file_id'];
         $file = $this->batchFileModel->find($file_id);
+
         if (!$file) {
 
             $data = [
@@ -1697,7 +1700,6 @@ class EmpDataServiceController extends BaseController
                     ->where('insurer_id', $insurer_id['insurer_id'])
                     ->first();
 
-
         $get_policy_type = $this->clientPolicyModel
             ->select('policy_type.policy_type, policies.policy_type_id as policy_type_id')
             ->join('policies', 'policies.id = client_policy.policy_id')
@@ -1780,12 +1782,11 @@ class EmpDataServiceController extends BaseController
             'amount' => $totals,
         ]);
 
-
         $this->myLogger->logme('error', 'Inception Update TPA and UHID --    employee count : {data}', ['data' => $emp_count]);
         $this->myLogger->logme('error', 'Inception Update TPA and UHID --    batch file status : {data}', ['data' => $status_val]);
         $this->myLogger->logme('error', 'Inception Update TPA and UHID --    total amount for cash deposite : {data}', ['data' => $totals]);
 
-
+        //update CD transaction entry if only insurer
         if ($file['insurer_or_tpa'] == 'insurer') {
 
             $this->myLogger->logme('error', 'Inception Update TPA and UHID --    set  cashDepositCalculationForInception and sendMailForDownloadingECard in JOB QUEUE');
@@ -1817,15 +1818,20 @@ class EmpDataServiceController extends BaseController
                 'user_id' => $user_id,
             ]]);
 
+            // $this->cashDepositCalculationForInception($depositeData);
+            // $this->sendMailForDownloadingECard($emp_policy_ids);
+
+        }
+
+        //send ecard mail if the event is tpa only
+        if ($file['insurer_or_tpa'] == 'tpa') {
+
             if ($get_policy_type['policy_type_id'] != 1) {
 
                 $job_details  = new Jobs();
                 $r = Jobs::addJob(['job_name' => 'sendMailForDownloadingECard', 'payload' => $emp_policy_ids]);
             }
 
-            // $this->cashDepositCalculationForInception($depositeData);
-            // $this->sendMailForDownloadingECard($emp_policy_ids);
-
         }
 
         $file_data = $this->getDataByFileId($file_id, 'success');
@@ -2854,27 +2860,29 @@ class EmpDataServiceController extends BaseController
         $this->myLogger->logme('error', 'SI Enhancement Update Endorsement ID --      Employee count : {data}', ['data' => $emp_count]);
         $this->myLogger->logme('error', 'SI Enhancement Update Endorsement ID --      Batch File status : {data}', ['data' => $status_val]);
 
+        //call the cash deposite function
+        if ($file['insurer_or_tpa'] == 'insurer') {
+
+            $policy_name = $this->getPolicyNameUsingClientPolicyId($client_policy_id);
+            $job_details  = new Jobs();                             
+            $r = Jobs::addJob(['job_name' => 'cashDepositCalculationForSIEnhancement','payload' => [
+                'employeeIds' => $insertedIds,
+                'client_id' => $client_id,
+                'client_policy_id' => $client_policy_id,
+                'client_branch_id' => $client_branch_id,
+                'cd_ac_no' => $CD_Account_Number['cd_ac_no'] ?? null,
+                'endorsement_no' => $endorsement_id ?? null,
+                'count' => $emp_count,
+                'event_name' => $file['event_type'],
+                'policy_name' => $policy_name['policy_name'],
+                'user_id' => $user_id,
+            ]]);
+
+        }
 
         $file_data = $this->getDataByFileId($file_id, 'success');
         $this->setPullNotification($file_data);
 
-        //call the cash deposite function
-
-        $policy_name = $this->getPolicyNameUsingClientPolicyId($client_policy_id);
-        $job_details  = new Jobs();                             
-        $r = Jobs::addJob(['job_name' => 'cashDepositCalculationForSIEnhancement','payload' => [
-            'employeeIds' => $insertedIds,
-            'client_id' => $client_id,
-            'client_policy_id' => $client_policy_id,
-            'client_branch_id' => $client_branch_id,
-            'cd_ac_no' => $CD_Account_Number['cd_ac_no'] ?? null,
-            'endorsement_no' => $endorsement_id ?? null,
-            'count' => $emp_count,
-            'event_name' => $file['event_type'],
-            'policy_name' => $policy_name['policy_name'],
-            'user_id' => $user_id,
-        ]]);
-
         //import file to upload Google Drive
         // if(excelFileGDriveUpload($file_id, 'batch_file')){
         //     $this->myLogger->logme('error', 'SI Enhancement File Update Google Drive File Upload --    File Uploaded Successfully');
@@ -3381,28 +3389,27 @@ class EmpDataServiceController extends BaseController
         $this->myLogger->logme('error', 'Deletion Update Endorsement ID --      Employee count : {data}', ['data' => $emp_count]);
         $this->myLogger->logme('error', 'Deletion Update Endorsement ID --      Batch File status : {data}', ['data' => $status_val]);
 
+        //call the cash deposite function
+        if ($file['insurer_or_tpa'] == 'insurer') {
+            $policy_name = $this->getPolicyNameUsingClientPolicyId($client_policy_id);
+            $job_details  = new Jobs();
+            $r = Jobs::addJob(['job_name' => 'cashDepositCalculationForDeletion', 'payload' => [
+                'employeeIds' => $employee_policy_table_primaryKey,
+                'client_id' => $client_id,
+                'client_policy_id' => $client_policy_id,
+                'client_branch_id' => $client_branch_id,
+                'cd_ac_no' => $CD_Account_Number['cd_ac_no'] ?? null,
+                'endorsement_no' => $endorsement_id ?? null,
+                'count' => $emp_count,
+                'event_name' => $file['event_type'],
+                'policy_name' => $policy_name['policy_name'],
+                'user_id' => $user_id,
+            ]]);
+        }
 
         $file_data = $this->getDataByFileId($file_id, 'success');
         $this->setPullNotification($file_data);
 
-        //call the cash deposite function
-
-        $policy_name = $this->getPolicyNameUsingClientPolicyId($client_policy_id);
-
-        $job_details  = new Jobs();
-        $r = Jobs::addJob(['job_name' => 'cashDepositCalculationForDeletion', 'payload' => [
-            'employeeIds' => $employee_policy_table_primaryKey,
-            'client_id' => $client_id,
-            'client_policy_id' => $client_policy_id,
-            'client_branch_id' => $client_branch_id,
-            'cd_ac_no' => $CD_Account_Number['cd_ac_no'] ?? null,
-            'endorsement_no' => $endorsement_id ?? null,
-            'count' => $emp_count,
-            'event_name' => $file['event_type'],
-            'policy_name' => $policy_name['policy_name'],
-            'user_id' => $user_id,
-        ]]);
-
         //import file to upload Google Drive
         // if(excelFileGDriveUpload($file_id, 'batch_file')){
         //     $this->myLogger->logme('error', 'Deletion File Update Google Drive File Upload --    File Uploaded Successfully');
diff --git a/app/Controllers/MasterController.php b/app/Controllers/MasterController.php
index a4927e3d..13305f50 100755
--- a/app/Controllers/MasterController.php
+++ b/app/Controllers/MasterController.php
@@ -1611,18 +1611,26 @@ class MasterController extends AdminController
          // $gmailapi = \Config\Services::gmailapi();
          $message = '';
 
+        // $attachments = [
+        //     ["filePath" => WRITEPATH."uploads/excel/sample/correction.xls","fileName" => "correction.xls"],
+        //     ["filePath" => WRITEPATH."uploads/excel/sample/deletion.xls","fileName" => "deletion.xls"],
+        //     ["filePath" => "C:\\Users\\Venba\\Desktop\\IQ.pdf","fileName" => "Questions.pdf"],
+        //     ["filePath" => "C:\\Users\\Venba\\Desktop\\config_age.png","fileName" => "config_age.png"]
+        // ];
+
         $attachments = [
-            ["filePath" => WRITEPATH."uploads/excel/sample/correction.xls","fileName" => "correction.xls"],
-            ["filePath" => WRITEPATH."uploads/excel/sample/deletion.xls","fileName" => "deletion.xls"],
-            ["filePath" => "C:\\Users\\Venba\\Desktop\\IQ.pdf","fileName" => "Questions.pdf"],
-            ["filePath" => "C:\\Users\\Venba\\Desktop\\config_age.png","fileName" => "config_age.png"]
+            ["filePath" => ROOTPATH."public/sample_excel/sample_addition.xls","fileName" => "sample_addition.xls"],
+            ["filePath" => ROOTPATH."public/sample_excel/sample_inception.xls","fileName" => "sample_inception.xls"],
+            ["filePath" => ROOTPATH."public/assets/images/login_bg.jpg","fileName" => "login_bg.jpg"]
         ];
 
+
         $email_id = CLI::getOption('to') ? CLI::getOption('to') : $email_id;
           $res = MailHelper::send_email(['mail' => $email_id, 'subject' => 'Mail Via CLI', 'message' => $message,'attachments' => $attachments]);
            print_r($res);
 
     }
+    
     public function testCheckBounceMails()
     {
          $gmailapi = \Config\Services::gmailapi();
@@ -1661,7 +1669,9 @@ class MasterController extends AdminController
             'uploads' => ROOTPATH . 'public/uploads',
             'add_image_upload' => ROOTPATH . 'public/uploads/add_image_upload/',//adverdisement images for enrollment app
             'logo' => ROOTPATH . 'public/uploads/logo/',
-            'template_bg' => ROOTPATH . 'public/uploads/template_bg/'
+            'template_bg' => ROOTPATH . 'public/uploads/template_bg/',
+            'attachments' => WRITEPATH . 'uploads/attachments/',
+
         ];
 
         foreach ($folders as $folderName => $folderPath) {
diff --git a/app/Controllers/NotificationController.php b/app/Controllers/NotificationController.php
index ff666cef..a3c8efe9 100755
--- a/app/Controllers/NotificationController.php
+++ b/app/Controllers/NotificationController.php
@@ -16,6 +16,7 @@ use App\Models\NotificationModel;
 use App\Models\ClientModel;
 use App\Models\EmployeeModel;
 use App\Models\UserModel;
+use App\Models\MailAttachmentModel;
 
 use App\Helpers\sendMailNotification;
 use App\Helpers\MailHelper;
@@ -26,12 +27,14 @@ class NotificationController extends AdminController
     protected $myLogger;
     protected $notificationModel;
     protected $clientModel;
+    protected $MailAttachmentModel;
     
     public function __construct()
     {
         $this->myLogger = \Config\Services::mylogger();
         $this->notificationModel       = new NotificationModel();                
         $this->clientModel       = new ClientModel();                
+        $this->MailAttachmentModel       = new MailAttachmentModel();                
     }
 
     // This is for Template Name Camel Case to Snake Case for store in DB  
@@ -52,16 +55,21 @@ class NotificationController extends AdminController
         $notificationModel = new NotificationModel();
 
         $find_notification = $notificationModel->where('client_id',$form_data['client_id'])->where('template_name',$form_data['template_name'])->first();
+        
         if ($find_notification) {
+
             $id = $find_notification['id'];
             $form_data['updated_by'] = get_session_userid();
             $notificationModel->update($id,$form_data);
             $complete = "Update";
+
         }else{
+
             $form_data['created_by'] = get_session_userid();
             $notificationModel->insert($form_data);
             $complete = "Inserted";
         }
+
         return json_encode($complete);
         
     }
@@ -111,8 +119,11 @@ class NotificationController extends AdminController
     public function getMailTemplateData($template_name,$client_id)
     {
         $notificationModel = new NotificationModel();
-
         $value = $notificationModel->where('client_id',$client_id)->where('template_name',$template_name)->first();
+        if($value){
+            $value['data'] = $this->MailAttachmentModel->where('notification_id', $value['id'])->where('is_active', 1)->findAll();
+        }
+        // return $this->respond(['status' => true, 'code' => 200, '' => 'Attachment deleted successfully'], 200);
 
         return json_encode($value);
     }
@@ -198,4 +209,74 @@ class NotificationController extends AdminController
 
         }
     }
+
+    public function insertAttachmentsForMailTemplates()
+    {
+        $form_data = $this->request->getPost();
+    
+        // Check if client_id and template_name are provided
+        if (empty($form_data['client_id']) || empty($form_data['template_name'])) {
+            return $this->respond(['status' => false, 'code' => 400, 'message' => 'Client ID and template name are required.'], 400);
+        }
+    
+        // Attempt to find the notification
+        $find_notification = $this->notificationModel->where('client_id', $form_data['client_id'])
+                                                    ->where('template_name', $form_data['template_name'])
+                                                    ->first();
+    
+        if (!$find_notification) {
+            return $this->respond(['status' => false, 'code' => 404, 'message' => 'Notification data not found.'], 404);
+        }
+    
+        // Define upload path and attempt file upload
+        $uploadFilePath = WRITEPATH . 'uploads/attachments';
+        $uploadedFile = $this->request->getFile('file');
+        $fileName = file_Upload($uploadedFile, $uploadFilePath); // Assume file_Upload handles file saving
+    
+        if ($fileName) {
+            // Prepare data for insertion
+            $data = [
+                'notification_id' => $find_notification['id'],
+                'file_name' => $fileName,
+                'file_path' => 'uploads/attachments/' . $fileName,
+            ];
+
+    
+            // Insert file attachment record
+            if ($this->MailAttachmentModel->insert($data)) {
+                // Retrieve active attachments to return in response
+                $attachment_data = $this->MailAttachmentModel->where('is_active', 1)->findAll();
+                return $this->respond([
+                    'status' => true,
+                    'code' => 200,
+                    'data' => $attachment_data,
+                    'message' => 'File uploaded successfully'
+                ], 200);
+            } else {
+                return $this->respond(['status' => false, 'code' => 500, 'message' => 'Failed to save file attachment data.'], 500);
+            }
+        } else {
+            return $this->respond(['status' => false, 'code' => 400, 'message' => 'File upload failed.'], 400);
+        }
+    }
+
+    public function removeAttachmentsForMailTemplates($id, $client_id, $template_name)
+    {   
+        $attachment_data_for_unlink_file = $this->MailAttachmentModel->where('id', $id)->first();
+        $file_path = WRITEPATH . $attachment_data_for_unlink_file['file_path'];
+
+        if ($this->MailAttachmentModel->where('id', $id)->delete()) {
+
+            unlink($file_path);
+
+            $find_notification = $this->notificationModel->where('client_id', $client_id)->where('template_name', $template_name)->first();
+            $attachmentDatas = $this->MailAttachmentModel->where('notification_id', $find_notification['id'])->where('is_active', 1)->findAll();
+            
+            return $this->respond(['status' => true, 'code' => 200, 'message' => 'Attachment deleted successfully', 'data' => $attachmentDatas], 200);
+       
+        } else {
+            return $this->respond(['status' => false, 'code' => 404, 'message' => 'The Client has active policy'], 200);
+        }
+    }
+    
 }
\ No newline at end of file
diff --git a/app/Helpers/sendMailNotification.php b/app/Helpers/sendMailNotification.php
index 6a729c56..31114293 100755
--- a/app/Helpers/sendMailNotification.php
+++ b/app/Helpers/sendMailNotification.php
@@ -10,6 +10,7 @@ use App\Models\UserModel;
 use App\Models\EmployeeModel;
 use App\Models\PolicyPremium1Model;
 use App\Models\PolicyPremium2Model;
+use App\Models\MailAttachmentModel;
 
 class sendMailNotification
 {
@@ -22,6 +23,21 @@ class sendMailNotification
             $notification = $params['notification'];
             $client_data = $params['client_data'];
 
+            $mailAttachmentModel = new MailAttachmentModel();
+            $attachment_data = $mailAttachmentModel
+                                ->select('file_path, file_name')
+                                ->where('notification_id', $notification['id'])
+                                ->where('is_active', 1)
+                                ->findAll();
+            
+            $attachments = [];
+            foreach ($attachment_data as $data) {
+                $attachments[] = [
+                    "filePath" => WRITEPATH . $data['file_path'],
+                    "fileName" => $data['file_name']
+                ];
+            }
+
             $mail = $dataToInsert['email_corporate'];
             $subject = $notification['subject'];            
             $app_link = $_ENV['App_Url'];
@@ -37,7 +53,7 @@ class sendMailNotification
 
             $mail_content = str_replace("[[app_link]]", "Review Details", $mail_content);
             if ($dataToInsert['relationship'] == 'Self' && $mail != null || $mail != '') {
-                $wholeData =  ['mail' => $mail, 'subject' => $subject,'message'=> $mail_content,'bcc'=> $client_data['common_mails'], 'reply_to' => $client_data['reply_to']];
+                $wholeData =  ['mail' => $mail, 'subject' => $subject,'message'=> $mail_content,'bcc'=> $client_data['common_mails'], 'reply_to' => $client_data['reply_to'], 'attachments' => $attachments];
             }
             
             return $wholeData;
@@ -799,7 +815,24 @@ class sendMailNotification
             $mail = $params['test_mail'];
 
             $mail_content = $notification['mail_content'];
-            $subject = $notification['subject'];        
+            $subject = $notification['subject'];      
+            
+            $mailAttachmentModel = new MailAttachmentModel();
+            $attachment_data = $mailAttachmentModel
+                                ->select('file_path, file_name')
+                                ->where('notification_id', $notification['id'])
+                                ->where('is_active', 1)
+                                ->findAll();
+            
+            $attachments = [];
+            foreach ($attachment_data as $data) {
+                $attachments[] = [
+                    "filePath" => WRITEPATH . $data['file_path'],
+                    "fileName" => $data['file_name']
+                ];
+            }
+            
+            // print_r($attachments); die;
 
             $employee_name = 'John Doe';
 
@@ -816,7 +849,7 @@ class sendMailNotification
             $mail_content = str_replace("[[app_link]]", "Review Details", $mail_content);
             
             if ($mail != null || $mail != '') {
-                $wholeData =  ['mail' => $mail, 'subject' => $subject,'message'=> $mail_content,'bcc'=> $client_data['common_mails'], 'reply_to' => $client_data['reply_to']];
+                $wholeData =  ['mail' => $mail, 'subject' => $subject,'message'=> $mail_content,'bcc'=> $client_data['common_mails'], 'reply_to' => $client_data['reply_to'], 'attachments' => $attachments];
             }
             
             return $wholeData;
diff --git a/app/Models/MailAttachmentModel.php b/app/Models/MailAttachmentModel.php
new file mode 100644
index 00000000..74519d65
--- /dev/null
+++ b/app/Models/MailAttachmentModel.php
@@ -0,0 +1,56 @@
+
 
                     
-                    
+                    
 
                     
 
diff --git a/app/Views/notification.php b/app/Views/notification.php
index 6b15116a..c9bdb5e5 100755
--- a/app/Views/notification.php
+++ b/app/Views/notification.php
@@ -30,32 +30,32 @@
             $account_maneger_summary_mail = 0;
             $client_hr_summary_mail = 0;
             if(isset($notification)){
-            foreach($notification as $value){
-                
-                if ($value['template_name'] == 'member_welcome_mail') {
-                    $member_welcome_mail = $value['enabled'];
-                }
+                foreach($notification as $value){
+                    
+                    if ($value['template_name'] == 'member_welcome_mail') {
+                        $member_welcome_mail = $value['enabled'];
+                    }
 
-                if ($value['template_name'] == 'member_reminder_mail') {
-                    $member_reminder_mail = $value['enabled'];
-                }
+                    if ($value['template_name'] == 'member_reminder_mail') {
+                        $member_reminder_mail = $value['enabled'];
+                    }
 
-                if ($value['template_name'] == 'member_ecard_mail') {
-                    $member_ecard_mail = $value['enabled'];
-                }
+                    if ($value['template_name'] == 'member_ecard_mail') {
+                        $member_ecard_mail = $value['enabled'];
+                    }
 
-                if ($value['template_name'] == 'member_review_and_summary_mail') {
-                    $member_review_and_summary_mail = $value['enabled'];
-                }
+                    if ($value['template_name'] == 'member_review_and_summary_mail') {
+                        $member_review_and_summary_mail = $value['enabled'];
+                    }
 
-                if ($value['template_name'] == 'account_maneger_summary_mail') {
-                    $account_maneger_summary_mail = $value['enabled'];
-                }
+                    if ($value['template_name'] == 'account_maneger_summary_mail') {
+                        $account_maneger_summary_mail = $value['enabled'];
+                    }
 
-                if ($value['template_name'] == 'client_hr_summary_mail') {
-                    $client_hr_summary_mail = $value['enabled'];
+                    if ($value['template_name'] == 'client_hr_summary_mail') {
+                        $client_hr_summary_mail = $value['enabled'];
+                    }
                 }
-            }
             }
              ?>

@@ -197,7 +197,7 @@