nhance-enrollment/app/Views/employee_data_list.php

899 lines
36 KiB
PHP
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<style>
.badge2 {
box-shadow: none;
}
.badge2-secondary2 {
color: #fff;
background-color: #187607;
}
.badge2 {
display: inline-block;
padding: .25em .4em;
font-size: 75%;
font-weight: 700;
line-height: 1;
text-align: center;
white-space: nowrap;
vertical-align: baseline;
border-radius: .25rem;
transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out;
}
.table-responsive {
overflow-x: auto;
}
.word-wrap {
word-wrap: break-word;
white-space: normal;
}
.dataTables_filter {
position: absolute;
}
.right-align-input {
text-align: right;
}
.readonly-select {
pointer-events: none;
background-color: #f0f0f0;
color: #666;
}
</style>
<style>
/* Timeline Design */
.timeline {
position: relative;
padding-left: 30px;
border-left: 3px solid #007bff;
}
.timeline-item {
position: relative;
margin-bottom: 20px;
padding-left: 20px;
}
.timeline-dot {
position: absolute;
left: -10px;
top: 5px;
width: 15px;
height: 15px;
background: #007bff;
border-radius: 50%;
}
.timeline-content {
background: #f8f9fa;
padding: 10px;
border-radius: 5px;
box-shadow: 0 0 5px rgba(0, 0, 0, 0.1);
}
.btn-inception {
background-color: #02a8b5; /* Bootstrap primary blue */
color: white;
border: none;
padding: 6px 12px;
font-weight: 500;
border-radius: 4px;
}
.btn-inception:hover {
background-color: #05676eff;
}
</style>
<?php $pro_rata_total = 0; $gst_total = 0 ?>
<div class="row" id="client_list">
<div class="col-12">
<div class="card">
<div class="card-body">
<div class="row" style="padding-bottom: 10px;">
<div class="col-6" style="align-self: center;">
<h4 style="position: relative;">Employees</h4>
</div>
</div>
<table class="table table-striped mb-0 nowrap" cellspacing="0" id="tickets-table">
<thead class="bg-light">
<tr>
<th class="font-weight-medium">SNO</th>
<?php if (isset($getData)) {
if ($getData['client_id'] == '0' && $getData['policy_id'] == '0' && $getData['branch_id'] == '0' && ($getData['emp_code'] != "" || $getData['emp_name'] != "" || $getData['status'] != "")) { ?>
<th class="font-weight-medium">Client/Branch</th>
<?php }
if ($getData['client_id'] != '0' && $getData['branch_id'] == '0') { ?>
<th class="font-weight-medium">Branch</th>
<?php } } ?>
<th class="font-weight-medium">Name</th>
<th class="font-weight-medium">EMP Code</th>
<th class="font-weight-medium">Relationship</th>
<th class="font-weight-medium">Gender</th>
<th class="font-weight-medium">Email</th>
<th class="font-weight-medium">Mobile</th>
<th class="font-weight-medium">Date of Birth</th>
<th class="font-weight-medium">Policy name</th>
<th class="font-weight-medium">Insurer name</th>
<th class="font-weight-medium">TPA ID</th>
<th class="font-weight-medium">Risk ID</th>
<th class="font-weight-medium">Policy status</th>
<th class="font-weight-medium">(₹)Sum Insured</th>
<th class="font-weight-medium">(₹)Premium</th>
<th class="font-weight-medium" id="rata_premium" data-toggle="tooltip" data-placement="top">
(₹)Pro Rata <br> Premium</th>
<th class="font-weight-medium" id="gst" data-toggle="tooltip" data-placement="top">(₹)GST
</th>
<th class="font-weight-medium">Remarks</th>
<th class="font-weight-medium"> Action </th>
</tr>
</thead>
<tbody class="font-12">
<?php
if (isset($employees)) {
$pro_rata_total = 0;
$gst_total = 0;
foreach ($employees as $key => $employee) { ?>
<tr>
<td><b><?php echo ($key + 1); ?></b></td>
<?php if (isset($getData)) {
if ($getData['client_id'] == '0' && $getData['policy_id'] == '0' && $getData['branch_id'] == '0' && ($getData['emp_code'] != "" || $getData['emp_name'] != "" || $getData['status'] != "")) { ?>
<td><?php echo $employee['client_short_name'] . ' - ' . $employee['client_branch_name']; ?>
</td>
<?php }
if ($getData['client_id'] != '0' && $getData['branch_id'] == '0') { ?>
<td><?php echo $employee['client_branch_name']; ?></td>
<?php } } ?>
<td><?php echo $employee['name']; ?></td>
<td><?php echo $employee['emp_code']; ?></td>
<td><?php echo $employee['relationship']; ?></td>
<td><?php echo $employee['gender']; ?></td>
<td><?php echo $employee['email_corporate']; ?></td>
<td><?php echo $employee['mobile']; ?></td>
<td><?php echo date('d/m/Y', strtotime($employee['dob'])); ?></td>
<td><?php echo isset($employee['policy_type']) ? $employee['policy_type'] : ''; ?> -
<?php echo isset($employee['policy_no']) ? $employee['policy_no'] : ''; ?></td>
<td><?php echo $employee['insurer_short_name']; ?></td>
<td><?php echo $employee['tpa_id']; ?></td>
<td><?php echo $employee['uhid']; ?></td>
<td>
<?php
switch ($employee['status']) {
case 'draft':
echo '<span class="badge badge-secondary">' . $employee['status'] . '</span>';
break;
case 'active':
echo '<span class="badge badge-success">' . $employee['status'] . '</span>';
break;
case 'inactive':
echo '<span class="badge badge-warning">' . $employee['status'] . '</span>';
break;
case 'expired':
echo '<span class="badge badge-danger">' . $employee['status'] . '</span>';
break;
case 'enrolled':
echo '<span class="badge2 badge2-secondary2">' . $employee['status'] . '</span>';
break;
default:
echo $employee['status'];
break;
}
?>
</td>
<td><?php echo format_indian_number($employee['basic_cover_si']); ?></td>
<td><?php echo format_indian_number($employee['premium']); ?></td>
<td><?php $pro_rata_total += $employee['rata_premimum']; echo format_indian_number($employee['rata_premimum']); ?>
</td>
<td><?php $gst_total += $employee['gst']; echo format_indian_number($employee['gst']); ?>
</td>
<td>
<?php
if(!empty($employee['newly_added'])){
echo "<p>" . $employee['newly_added'];
if (!empty($employee['newly_added_updated_at'])) {
echo ' (' . $employee['newly_added_updated_at'] . ')';
}
echo "</p>";
}
if(!empty($employee['name_first_old']) ){
echo "<p> Name : " . $employee['name_first_old'] . ' => ' . $employee['name_last_new'];
if (!empty($employee['name_created_at'])) {
echo ' (' . $employee['name_created_at'] . ')';
}
echo "</p>";
}
if(!empty($employee['dob_first_old'])){
echo "<p> DOB : " . change_date_format($employee['dob_first_old'], null, 'd/m/Y') . ' => ' . change_date_format($employee['dob_last_new'], null, 'd/m/Y');
if (!empty($employee['dob_created_at'])) {
echo ' (' . $employee['dob_created_at'] . ')';
}
echo "</p>";
}
if(!empty($employee['gender_first_old'])){
echo "<p> Gender : " . $employee['gender_first_old'] . ' => ' . $employee['gender_last_new'];
if (!empty($employee['gender_created_at'])) {
echo ' (' . $employee['gender_created_at'] . ')';
}
echo "</p>";
}
// if(!empty($employee['removed_count'])){
// echo "<p>" . $employee['removed_count'] . " People removed </p>";
// }
if(!empty($employee['removed_summary'])){
echo "<p>" . $employee['removed_summary'];
if (!empty($employee['removed_summary_updated_at'])) {
echo ' (' . $employee['removed_summary_updated_at'] . ')';
}
echo " </p>";
}
if(empty($employee['name_first_old']) && empty($employee['dob_first_old']) && empty($employee['gender_first_old']) && empty($employee['removed_summary'] ) && empty($employee['newly_added'] )){
echo " - ";
}
?>
</td>
<td>
<div class="btn-group dropdown">
<a href="javascript: void(0);"
class="dropdown-toggle arrow-none btn btn-light btn-sm" data-toggle="dropdown"
aria-expanded="false"><i class="mdi mdi-dots-horizontal"></i></a>
<div class="dropdown-menu dropdown-menu-right">
<?php
if
(
(in_array($employee['emp_status'], ['draft', 'enrolled', 'active']) && in_array($employee['status'], ['draft', 'enrolled', 'active']))
) {
?>
<a class="dropdown-item"
onclick="get_emp_master_data_for_update(this, '<?= $employee['employee_id'];?>', '<?= $employee['status'];?>')"><i
class="mdi mdi-pencil mr-2 text-muted font-18 vertical-middle"></i>Edit</a>
<a class="dropdown-item"
onclick="get_emp_history(this, '<?= $employee['employee_id'];?>')"> <i
class="mdi mdi-history mr-2 text-muted font-18 vertical-middle"></i>Employee
History</a>
<?php } ?>
<?php if(in_array($employee['policy_type_id'], [2,3,4,5]) && $employee['emp_status'] == 'active' && $employee['status'] == 'active' && !empty($employee['tpa_id'])) { ?>
<a href="<?= base_url('download-e-card/'). $employee['rand_string'] ?>"
class="dropdown-item" target="_blank"><i
class="mdi mdi-eye mr-2 text-muted font-18 vertical-middle"></i>View
E-Card</a>
<?php } ?>
<?php if($employee['relationship'] == 'Self' && in_array($employee['policy_type_id'], [2,3,4,5]) && $employee['email_corporate'] != '' && $employee['emp_status'] == 'active' && $employee['status'] == 'active' && !empty($employee['tpa_id'])) { ?>
<a class="dropdown-item"
onclick="send_mail_for_individual_employee_ecard('<?= $employee['id'];?>')"><i
class="mdi mdi-email-alert mr-2 text-muted font-18 vertical-middle"></i>Send
E-Card Mail</a>
<?php } ?>
</div>
</div>
</td>
</tr>
<?php } } ?>
</tbody>
<tfoot>
<tr>
<th></th>
<?php if (isset($getData)) {
if ($getData['client_id'] == '0' && $getData['policy_id'] == '0' && $getData['branch_id'] == '0' && ($getData['emp_code'] != "" || $getData['emp_name'] != "" || $getData['status'] != "")) { ?>
<th></th>
<?php }
if ($getData['client_id'] != '0' && $getData['branch_id'] == '0') { ?>
<th></th>
<?php } } ?>
<th></th>
<th></th>
<th></th>
<th></th>
<th></th>
<th></th>
<th></th>
<th></th>
<th></th>
<th></th>
<th></th>
<th>Total</th>
<th><?php echo format_indian_number($pro_rata_total); ?></th>
<th><?php echo format_indian_number($gst_total); ?></th>
<th></th>
</tr>
</tfoot>
</table>
</div>
</div>
</div><!-- end col -->
</div>
<!-- modal content -->
<div id="emp_modal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"
style="display: none;">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">Edit Employee</h4>
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
</div>
<div class="modal-body p-4">
<form role="form" class="parsley-examples" id="empForm"
onsubmit="update_emp_master_data_submit_function(event, this)" enctype="multipart/form-data">
<input type="hidden" name="employee_primary_id" id="employee_primary_id" />
<div class="form-group">
<div class="form-row">
<div class="form-group col-md-4">
<label for="emp_code">Employee Code<span class="text-danger">*</span></label>
<input type="text" class="form-control" id="emp_code_for_edit" placeholder="Enter Code"
readonly>
</div>
<div class="form-group col-md-8">
<label for="name">Name<span class="text-danger">*</span></label>
<input type="text" class="form-control" name="name" id="name" placeholder="Ente Name">
</div>
</div>
<div class="form-row">
<div class="form-group col-md-6">
<label for="gender">Gender <span class="text-danger">*</span></label>
<select class="form-control" id="gender" name="gender" required disabled>
<option value="">Select Gender</option>
<option value="M">Male</option>
<option value="F">Female</option>
</select>
</div>
<div class="form-group col-md-6">
<label for="dob">Date of Birth<span class="text-danger">*</span></label>
<input type="text" class="form-control" id="dob" placeholder="Enter DOB" name="dob"
required>
</div>
<div class="form-group col-md-12">
<label for="email">Email<span class="text-danger">*</span></label>
<input type="text" class="form-control" id="email_corporate" placeholder="Enter Email"
name="email_corporate" data-parsley-trigger="change" data-parsley-type="email"
onkeyup="validateInput(this, 'employees', 'email_corporate')" required>
</div>
<div class="form-group col-md-12">
<label for="mobile">Mobile Number<span class="text-danger">*</span></label>
<input type="text" class="form-control" id="mobile" placeholder="Enter Mobile Number"
name="mobile" onkeypress="return onlyNumbers(event)" maxlength="10" minlength="10"
onkeyup="validateInput(this, 'employees', 'mobile')" required>
</div>
</div>
</div>
<div class="form-group text-right m-b-0">
<button type="submit" class="btn btn-primary waves-effect waves-light mr-1"
id="btnSubmit">Submit</button>
</div>
</form>
</div>
</div>
</div>
</div><!-- /.modal -->
<!-- Modal content for Emp History -->
<div class="modal fade" id="emp_history_modal" tabindex="-1" aria-labelledby="emp_history_modal_label"
aria-hidden="true">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title" id="emp_history_modal_label">Employee History</h4>
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
</div>
<div id="emp_history_content"></div>
</div>
</div>
</div>
<script>
$(document).ready(function() {
var dob = flatpickr("#dob", {
dateFormat: "d/m/Y",
allowInput: false, // Allows manual input
yearSelector: true, // Ensures year can be selected manually
});
})
$(document).ready(function() {
var ticketsTable = $('#tickets-table');
if (ticketsTable.length) {
ticketsTable.DataTable({
scrollX: true,
dom: "<'row'<'col-sm-6'f><'col-sm-6 text-right'B>>" + // Filter left, buttons right
"<'row'<'col-sm-12'tr>>" +
"<'row'<'col-sm-5'i><'col-sm-7'p>>", // Pagination at the bottom, without page length selector
buttons: [
{
extend: 'csv',
text: 'CSV',
title: 'Member-List',
}
,
{
extend: 'excelHtml5',
text: 'Excel',
title: 'Member-List',
exportOptions: {
columns: function (idx, data, node) {
return idx < $('#tickets-table thead th').length - 1;
},
format: {
body: function (data, row, column, node) {
// Only apply formatting for column Q (index 16)
if (column === 16) {
return $('<div>').html(data).find('p').map(function () {
return $(this).text().trim();
}).get().join('\n');
}
// Return other columns as-is (text only, no HTML tags)
return $('<div>').html(data).text().trim();
}
}
},
customize: function (xlsx) {
var sheet = xlsx.xl.worksheets['sheet1.xml'];
// Wrap only column Q
$('row c[r]', sheet).each(function () {
var cell = $(this);
var address = cell.attr('r'); // Example: Q2, Q3
if (address.startsWith('Q')) {
cell.attr('s', '55'); // Wrap text style
}
});
}
}
,
{
text: 'Export As Inception',
className: 'btn-inception',
action: function (e, dt, node, config) {
downloadInception();
}
}
],
language: {
search: "_INPUT_",
searchPlaceholder: "Search..."
},
paging: true, // Enable pagination
pageLength: 25 // Set default number of rows per page (optional)
});
} else {
console.error("Table not found.");
}
});
function get_emp_master_data_for_update(input, id) {
get_emp_master_data_for_update_ajax(id)
}
function get_emp_master_data_for_update_ajax(id) {
$('.loader').fadeIn();
$('.loader-mask').fadeIn();
$.ajax({
url: '<?php echo base_url('util/get_emp_master_data_for_update/');?>' + id,
type: "GET",
dataType: 'json',
success: function(res) {
console.log('get_emp_master_data_for_update response', res)
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
let data = res.data
if (res.status == true) {
if (data.relationship == 'Self') {
$('#gender').prop('disabled', false)
} else {
$('#gender').prop('disabled', true)
}
$('#employee_primary_id').val(data.id);
$('#emp_code_for_edit').val(data.emp_code);
$('#name').val(data.name);
$('#gender').val(data.gender);
$('#dob').val(data.formatted_dob);
$('#email_corporate').val(data.email_corporate);
$('#mobile').val(data.mobile);
if (data.emp_status == "active") {
$('#name').prop('disabled', true);
$('#gender').prop('disabled', true);
$('#dob').prop('disabled', true);
} else {
$('#name').prop('disabled', false);
$('#gender').prop('disabled', false);
$('#dob').prop('disabled', false);
}
var myModal = new bootstrap.Modal(document.getElementById('emp_modal'));
myModal.show();
} else {
$('#employee_primary_id').val('');
$('#emp_code_for_edit').val('');
$('#name').val('');
$('#gender').val('');
$('#dob').val('');
$('#email_corporate').val('');
$('#mobile').val('');
$('#name').prop('disabled', false);
$('#gender').prop('disabled', false);
$('#dob').prop('disabled', false);
toastr.warning(res.message, 'Warning');
}
},
error: function(xhr, status, error) {
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
console.error(xhr.responseText);
console.error(status, error);
}
});
}
function update_emp_master_data_submit_function(event, form) {
event.preventDefault(); // Prevent the default form submission
var isValid = $(form).parsley().validate();
if (!isValid) {
console.log('Form is Empty', 'Warning');
return;
}
const formData = new FormData(form);
const submitButton = form.querySelector('button[type="submit"]');
submitButton.disabled = true;
submitButton.innerText = 'Updating...';
$('.loader').fadeIn();
$('.loader-mask').fadeIn();
// AJAX request to update the individual employee
$.ajax({
url: '<?= base_url('/util/update_emp_data') ?>',
type: 'POST',
data: formData,
processData: false,
contentType: false,
success: function(response) {
console.log(response)
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
if (response.status == true) {
toastr.success(response.message, 'Success');
$('.close').click();
$('#employee_primary_id').val('');
$('#emp_code_for_edit').val('');
$('#name').val('');
$('#gender').val('');
$('#dob').val('');
$('#email_corporate').val('');
$('#mobile').val('');
// window.location.reload();
fetchEmpolyeeList();
} else {
toastr.error(response.message, 'Error');
}
},
error: function(xhr, status, error) {
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
// Handle error
console.error('Upload error occurred:');
console.error('Status: ', status); // Status of the request
console.error('Error: ', error); // Specific error message
console.error('XHR Object: ', xhr); // Full XHR object with response details
// Optionally log server response, if available
if (xhr.responseText) {
console.error('Response Text: ', xhr.responseText);
}
toastr.warning('Error uploading file', 'Warning');
console.error('Upload error:', error);
},
complete: function() {
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
// Re-enable the submit button and reset its text
submitButton.disabled = false;
submitButton.innerText = 'Submit';
}
});
}
function send_mail_for_individual_employee_ecard(id) {
Swal.fire({
title: "Do you want to send Ecard Mail?",
showDenyButton: true,
showCancelButton: false,
confirmButtonText: "Yes,Send",
denyButtonText: "Don't Send"
}).then((result) => {
if (result.isConfirmed) {
$('.loader').fadeIn();
$('.loader-mask').fadeIn();
$.ajax({
url: '<?php echo base_url('util/send_mail_for_individual_employee_ecard/');?>' + id,
type: "GET",
dataType: 'json',
success: function(res) {
console.log('send_mail_for_individual_employee_ecard response', res)
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
if (res.status == true) {
toastr.success(res.message, 'Success');
} else {
toastr.error(res.message, 'Error');
}
},
error: function(xhr, status, error) {
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
console.error(xhr.responseText);
console.error(status, error);
}
});
}
});
}
function validateInput(input, table, field) {
let emp_code = $('#emp_code_for_edit').val();
let client_id = $('#clients').val();
console.log("emp_code", emp_code);
console.log("client_id", client_id);
let value = $(input).val();
let label = $(input).closest('.form-group').find('label').text().replace('*', '').trim();
let message = "Value is duplicate!";
if (label) {
message = label + " already exists!";
}
let data = {};
data["emp_code !="] = emp_code;
data[field] = value;
console.log(data);
checkDuplicateTableFieldValue(table, field, data, function(isDuplicate) {
if (isDuplicate) {
toastr.warning(message, 'Warning');
$("#btnSubmit").prop('disabled', true);
}else{
$("#btnSubmit").prop('disabled', false);
}
});
}
function onlyNumbers(event) {
var charcode;
charcode = event.which || event.keyCode;
if (charcode >= 48 && charcode <= 57 || charcode == 46) return true;
return false;
}
var modalInstance; // Store the modal instance globally
function showModal() {
var myModalEl = document.getElementById('emp_history_modal');
modalInstance = new bootstrap.Modal(myModalEl, {
backdrop: true, // Ensures the backdrop is shown
keyboard: true // Allows closing with the Escape key
});
modalInstance.show();
}
function closeModal() {
if (modalInstance) {
modalInstance.hide(); // Hide the modal and its backdrop
// Manually remove backdrop if it's still visible
setTimeout(function() {
document.querySelector('.modal-backdrop').classList.remove('show');
}, 150); // Wait for animation to finish
}
}
function get_emp_history(input, emp_id) {
$('.loader').fadeIn();
$('.loader-mask').fadeIn();
let url = '<?= base_url("employee/get_emp_history")?>';
let requestData = {
emp_id: emp_id
};
sendAjaxRequestForGlobal(url, 'POST', requestData, function(response) {
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
if (response.status === true) {
console.log('response data length', response.data.emp_history.length);
// **Clear old data**
$('#emp_history_content').html('');
// **Check if data exists**
if (response.data.emp_history.length > 0) {
let historyTable = `
<div class="card-body">
<div class="table-responsive">
<table class="table w-100">
<thead class="bg-light">
<tr>
<th>Field</th>
<th>Change</th>
<th>User</th>
<th>Date/Time</th>
</tr>
</thead>
<tbody>
`;
// **Loop through the data dynamically**
response.data.emp_history.forEach(row => {
historyTable += `
<tr>
<td>${row.field_name}</td>
<td>${row.old_value} => ${row.new_value}</td>
<td>${row.created_by}</td>
<td>${row.created_at}</td>
</tr>
`;
});
historyTable += `
</tbody>
</table>
</div>
</div>
`;
// **Append to modal**
$('#emp_history_content').append(historyTable);
} else {
$('#emp_history_content').html('<p class="text-center text-muted">No history available.</p>');
}
// **Show the modal**
showModal();
} else {
let message = response.message;
toastr.error(message, 'Error');
}
}, function(xhr, status, error) {
console.error('Error fetching data:', error);
console.error(xhr.responseText);
toastr.error('An error occurred while fetching the report page.', 'Error');
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
});
}
// function closeModal(){
// var myModalEl = document.getElementById('emp_history_modal');
// var modalInstance = bootstrap.Modal.getInstance(myModalEl);
// if (modalInstance) {
// modalInstance.hide();
// }
// }
function downloadInception(){
let client = $('#clients').val();
let branch = $('#branch_id').val();
let policies = $('#policies').val();
let status = $('#status2').val();
let empCode = $('#emp_code').val();
let empName = $('#emp_name').val();
$('.loader').fadeIn();
$('.loader-mask').fadeIn();
$.ajax({
type: 'POST',
url: "<?php echo base_url('employee/download_inception') ?>",
dataType: 'json',
data: {
client: client,
branch: branch,
policies: policies,
status: status,
empCode: empCode,
empName: empName
},
success: function(response) {
if (response.status === true && response.data && response.data.downloadUrl) {
$('<a>', {
href: response.data.downloadUrl,
download: '',
style: 'display:none'
}).appendTo('body')[0].click();
} else {
toastr.error(response.message || 'Download failed', 'Error');
}
},
error: function(xhr) {
const response = xhr.responseJSON;
toastr.error(response?.message || 'An error occurred while generating the export.', 'Error');
},
complete: function() {
$('.loader').fadeOut();
$('.loader-mask').delay(350).fadeOut('slow');
console.log('AJAX request finished.');
}
});
}
</script>