File: //home/cafsindia/hrms_allyindian_com/application/views/emp_doc_export/manage.php
<?php
$this->load->view("partial/header");
$page_name = ucwords(str_replace("_"," ",$controller_name));
$search_url = site_url($controller_name ."/search");
$breadcrumb .= "<li><a href='$site_url#Home'>Home</a></li>
<li><a href='".site_url($controller_name)."#$controller_name'>$page_name</a></li>
<li class='active'>List</li>";
?>
<!-- STYLE FOR REPONSIVE FILEDS AND SHOWING FIELDS WAS GOOD UI BY _AR -->
<style>
/* MULTISELECT WITH CHECKBOX START BY -AR */
.multiselect{
width : 200px;
position: relative;
}
.selectBox{
border : 1px solid #ccc;
padding : 8px;
cursor : pointer;
background : #fff;
}
.checkboxes{
display : none;
border : 1px solid #ccc;
border-top : none;
position : absolute;
background : #fff;
z-index : 1000;
width : 100%;
max-height : 200px;
overflow-y : auto;
}
.checkboxes label{
display: block;
padding: 5px 10px;
}
/* Sidebar structure Style Code Start By AR */
.sidebar{
position : absolute;
height : 96%;
width : 0;
top : 0;
right : 1px;
z-index : 1050;
transition : 0.6s;
background-color: #fff;
}
.process_list_wd{
width: 45%;
}
@media(min-width: 768px) and(max-width: 992px){
.process_list_wd{
width: 45%;
}
}
@media(min-width: 200px) and(max-width: 768px){
.process_list_wd{
width: 90%;
}
}
#table_line tbody tr td:first-child{
white-space: nowrap;
}
#table_line #table_wrapper{
height: 400px;
}
.dataTables_scrollHeadInner{
width : 100% !important;
padding-right: 0px !important;
}
/* Sidebar table End By _AR */
/* ToolTip Style For UI UX Good BY _AR */
.tooltip-float{
position : fixed;
background : #fff;
color : black;
padding : 10px;
border-radius : 6px;
z-index : 99999;
max-width : 350px;
display : none;
font-size : 12px;
box-shadow : 0 4px 12px rgba(0, 0, 0, 0.3);
}
.tooltip-float table{
width : 100%;
border-collapse : collapse;
font-family : Arial, sans-serif;
}
.tooltip-float td{
padding : 2px 4px;
vertical-align: top;
}
/* Tooltip Style END _AR */
</style>
<!-- MAIN PAGE INPUT FILEDS _AR -->
<div class='row title_content'>
<div class='col-md-4 col-xs-4'>
<h1 class='page_txt'><?php echo $page_name;?></h1>
</div>
<div class='col-md-8 col-xs-8'>
<ol class="breadcrumb">
<?php echo $breadcrumb; ?>
</ol>
</div>
</div>
<div id="emp_doc_export" class="form-inline" style="margin-top:20px;">
<div class="col-md-12">
<div class="form-group">
<?php
echo form_label('Description', 'description', array('class' => 'required'));
echo form_input(array('name'=> 'description','id'=> 'description','class'=> 'form-control input-sm','type'=> 'text','value'=> '','placeholder' => 'Enter Description Title'));
?>
</div>
<div class="form-group">
<?php
$filter_by = array('' => '--select--','1' => 'All','2' =>'Single Employee','3' =>'Date Range(onboarding date)','4' => 'DOJ');
echo form_label('Filter By', 'filter_by', array('class' => 'required'));
echo form_dropdown(array('name' => 'filter_by','id' =>'filter_by','class' => 'form-control input-sm select2'), $filter_by);
?>
</div>
<div class="form-group">
<?php
echo form_label('Employee', 'employee_code', array('class' => 'required'));
echo form_input(array('name'=> 'employee_code','id'=> 'employee_code','class'=> 'form-control input-sm ','type'=> 'hidden','value'=> ''));
echo form_input(array('name'=> 'employee_id','id'=> 'employee_id','class'=> 'form-control input-sm ','type'=> 'text','value'=> '','placeholder' => 'Search Employee code'));
?>
</div>
<div class="form-group" id = "filter_comp">
<a class="btn btn-sm btn-edit" id="search_filter">
<i class="fa fa-filter" aria-hidden="true" style="font-size:20px;"></i> Search filter
<span class="caret"></span>
</a>
<div class="form-group">
<div id="search_filter_div" style="right: 15% !important;" class='search_filter col-md-12'>
<div style="max-height:250px;overflow: auto;">
<?php
$filter_tr_line = '';
foreach($form_info as $setting){
$prime_form_id =(int)$setting->prime_form_id;
$field_type =(int)$setting->field_type;
$label_id = $setting->label_name;
$label_name = ucwords($setting->view_name);
$search_show = $setting->search_show;
$list_no_field = ["emp_name", "employee_code", "aadhar_card_no","termination_status"];
if(!in_array($label_id, $list_no_field)){
$label_name = ucwords(strtolower(str_replace("_"," ",$label_id)));
if(((int)$field_type === 5) ||((int)$field_type === 7)){
$dropdown_options = $all_pick[$label_id]['array_list'];
// Remove the empty key if present
if(isset($dropdown_options['']) || isset($dropdown_options[null])){
unset($dropdown_options['']);
unset($dropdown_options[null]);
}
// Prepend placeholder safely if needed
$filter_box = "<select name='{$label_id}' id='{$label_id}' class='form-control input-sm select2' multiple>";
$filter_box .= "<option value='' disabled selected>---- Select{$label_name}----</option>";
foreach($dropdown_options as $key => $val){
$filter_box .= "<option value='{$key}'>{$val}</option>";
}
$filter_box .= "</select>";
$filter_tr_line .= "<tr>
<td class='search_td'>$label_name</td>
<td>$filter_box</td>
</tr>";
}else
if($field_type === 9){
$hidden_id = $label_id . "_hidden";
$append_class = "append_" . $label_id;
$append_div = "<div class='{$append_class}'></div>";
$autocomplete_array = ["name" => $hidden_id,"id" => $hidden_id,"value"=> '',"placeholder" => "Search " . $label_name,"class" => "form-control input-sm"];
$form_input = form_input($autocomplete_array);
$hidden_input = form_input(["name" => $label_id,"id" => $label_id,"value" => "","type" => "hidden"]);
$autocomplete_fields[] = $label_id;
$filter_tr_line .= "<tr>
<td class='search_td'>$label_name</td>
<td> $form_input $hidden_input</td>
$append_div
</tr>";
}
// Correct concatenation for JS variable mapping
if($field_type === 9){
$send_data .= "$label_id:{ [''+$('#$label_id').val()+'']: ''+$('#{$label_id}_hidden').val()+'' },";
}else{
$send_data .= "$label_id:$('#$label_id').val(),";
}
}
}
$send_data = rtrim($send_data, ',');
echo "<table style = 'width:100%;'>$filter_tr_line</table>";
?>
</div>
<div style="margin-top:8px;">
<div class="row">
<div class="col-md-6" style='text-align:left;'>
<a class="btn btn-xs btn-danger" id="clear_search"> Clear / Close</a>
</div>
<div class="col-md-6" style='text-align:right;'>
<a class="btn btn-xs btn-primary" id="search_submit"> Done </a>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="form-group">
<?php
echo form_label('Start Date', 'start_date', array('class' => 'required'));
echo form_input(array('name' => 'start_date', 'id' => 'start_date', 'class' => 'form-control input-sm ', 'value'=> ''));
?>
</div>
<div class="form-group">
<?php
echo form_label('End Date', 'end_date', array('class' => 'required'));
echo form_input(array('name' => 'end_date', 'id' => 'end_date', 'class' => 'form-control input-sm ', 'value'=> ''));
?>
</div>
<div class="form-group">
<?php echo form_label('Document Type', '', ['class' => 'required']); ?>
<div class="multiselect">
<div class="selectBox">Select Documents</div>
<div class="checkboxes" id="checkboxes">
<?php foreach($document_field_option as $key => $label): ?>
<?php if(!empty($key)): ?>
<label>
<?php echo form_checkbox('document_type[]', $key, FALSE); ?>
<?php echo $label; ?>
</label>
<?php endif; ?>
<?php endforeach; ?>
</div>
</div>
</div>
<div class="form-group">
<?php
echo form_label('Include InActive Employees', 'include_inactive' );echo "</br>";
echo form_input(['type' => 'checkbox','name' => 'include_inactive','id' => 'include_inactive','value' => '0']);
?>
</div>
<div class="form-group">
<button class='btn btn-primary btn-sm' id="submit">Submit</button>
</div>
</div>
</div>
<div class='col-md-12' style='padding:8px;min-height: 400px;'>
<table id="table" class='table table-striped table-hover' style='width:100% !important;'></table>
</div>
<div id="scheduler_div">
<div class='col-md-12' style='padding:8px; min-height: 400px;'>
<table id="table" class='table table-striped table-hover' style='width:100% !important;'></table>
</div>
<div id="scheduler_div">
<!-- Main table -->
<div id="sched_list_div">
<table class="table table-striped" id="table"></table>
</div>
<!-- Sidebar Popup -->
<div class="sidebar" id="process_list">
<div id="tab_btn" class="col-md-12" style="padding: 10px;background: #e2e2e2; display: none;">
<div class="col-md-8">
<h5 style="font-weight: bold;">Process Details</h5>
</div>
<div class="col-md-3" id="refresh_div" style="top: 7px;"></div>
<div class="col-md-1" style="top: 10px;">
<a href="javascript:void(0)" class="closebtn" onclick="close_table()">
<i class="fa fa-chevron-right fa-2x" style="color:#001630;"></i>
</a>
</div>
</div>
<div id="sched_process_div">
<table class="table table-striped" id="table_line"></table>
</div>
</div>
</div>
<!-- SCRIPT PROCESS TO MAKE THE RESPONSIVE -->
<script type="text/javascript">
$(document).ready(function(){
// FILTER BOX SHOW AND HIDE
$('.selectBox').on('click', function(){
$('#checkboxes').toggle();
});
$("#search_submit").click(function(){
$("#search_filter_div").toggle()
});
$("#search_filter_div").hide();
$("#search_filter").click(function(){
$("#search_filter_div").toggle();
$("#search_filter_div td").show();
});
$("#clear_search").click(function(){
$('#search_filter_div').find('input').val('');
$('#search_filter_div').find('select').val(null).trigger('change');
$("#search_filter_div").toggle();
});
// SELECT 2 OPTION ENABLE
$('.select2').select2({placeholder: '---- Select ----',});
// Close dropdown if clicking outside
$(document).on('click', function(e){
if(!$(e.target).closest('.multiselect').length){
$('#checkboxes').hide();
}
});
// TOOLTIP SHOWING ARRANGED STRUCTURE PROCESS
const $tooltip = $('<div class="tooltip-float"></div>').appendTo('body');
$(document).on('mouseenter', '.tooltip-trigger', function(){
const content = $(this).data('tooltip');
if(!content) return;
$tooltip.html(content).fadeIn(150);
const offset = $(this).offset();
const iconHeight = $(this).height();
const scrollTop = $(window).scrollTop();
const top = offset.top + iconHeight + 10 - scrollTop;
const left = offset.left -($tooltip.outerWidth() / 2) +($(this).outerWidth() / 2);
$tooltip.css({ top: top + 'px', left: left + 'px' });
});
$(document).on('mouseleave', '.tooltip-trigger', function(){
$tooltip.fadeOut(100);
});
// TOOLTIP END
// DOCUMENT TYPE DROPDOWN WITH CHEBOX
$('input[name="document_type[]"]').on('change', function(){
let allCheckbox = $('input[name="document_type[]"][value="1"]');
if(allCheckbox.is(':checked')){
$('input[name="document_type[]"]').not(allCheckbox).prop('disabled', true).prop('checked', false);
}else{
$('input[name="document_type[]"]').prop('disabled', false);
}
});
// AUTOCOMPLETE DYNAMIC CALL
initializeAutocomplete('employee_id', 'employee_code', '.append_emp', 'employee');
<?php if(!empty($autocomplete_fields)): ?>
<?php foreach($autocomplete_fields as $field): ?>
initializeAutocomplete('<?php echo $field; ?>_hidden','<?php echo $field; ?>','.append_<?php echo $field; ?>','dynamic');
<?php endforeach; ?>
<?php endif; ?>
hide_show();
$('#start_date,#end_date').datetimepicker({
format: 'YYYY-MM-DD'
});
$('#filter_by').change(function(){
hide_show();
});
// When start date is picked
$("#start_date").on("dp.hide", function(e){
var startDate = $("#start_date").val();
if(startDate){
$('#end_date').data("DateTimePicker").minDate(startDate);
}else{
$('#end_date').data("DateTimePicker").minDate(false);
}
});
// When end date is picked
$("#end_date").on("dp.hide", function(e){
var startDate = $("#start_date").val();
if(!startDate){
$('#end_date').val('');
toastr.warning("Please select a Start Date first.");
}
});
$('#submit').on('click', function(){
$("#submit").html("<i class='fa fa-spinner fa-spin'></i> Processing...").prop('disabled', true);
var description = $('#description').val();
var employee_code = $('#employee_code').val();
var filter_by = $('#filter_by').val();
var start_date = $('#start_date').val();
var end_date = $('#end_date').val();
var include_inactive = $('#include_inactive').is(':checked') ? '1' : '0';
var document_type = [];
$('input[name="document_type[]"]:checked').each(function(){
document_type.push($(this).val());
});
// Prevent further execution
var key = '<?php echo $encKey; ?>';
var filter_data = JSON.stringify({
filter_by : filter_by,
employee_code : employee_code,
start_date : start_date,
end_date : end_date,
document_type : document_type,
inactive : include_inactive,
<?php echo $send_data; ?>
});
var encData = encrypt(key,{description: description,filter_by : filter_by,filter_data: filter_data});
if(validate_filters()){
$.ajax({
type: "POST",
url: '<?php echo site_url($controller_name . "/save_emp_doc"); ?>',
data:encData,
success: function(data){
var rslt = JSON.parse(data);
if(rslt.success){
$table.draw()
$('#description').val('');
$('#filter_by').val('');
$("#submit").html("Submit").prop('disabled', false);
toastr.success(rslt.message);
hide_show();
}else{
toastr.error(rslt.message);
}
}
});
}
$("#submit").html("Submit").prop('disabled', false);
return;
});
// DATATABLE FOR DYNAMIC FETCHED
var key = '<?php echo $encKey; ?>';
$table = $('#table').DataTable({
processing : true,
serverSide : true,
serverMethod: 'post',
lengthMenu : [[10,25,50,100,500,1000,-1],[10,25,50,100,500,1000,"All"]],
scrollX :true,
scrollY :true,
language:{
lengthMenu:"<span style='margin-top:8px;margin-left:10px;'>Display</span><span style='margin-top:10px'> _MENU_</span> <span style='margin-top:8px;'>Records</span>",
searchPlaceholder: "Search records",
search: "",
},
ajax:{
'url' : '<?php echo $search_url; ?>',
'data': function(data){
<?php echo $table_map_list;?>
var encData = encrypt(key,{data});
return { Payload: encData };
},
beforeSend: function(){
$('.dataTables_processing').html('<span style="color:#CC3366;"><i class="fa fa-spinner fa-spin fa-2x fa-fw"></i><br/>Loading...</span>');
},
},
columns: [{
title:'<input type="checkbox" name="select_all" class="select_all">',
data: '<?php echo $prime_id; ?>',
type: 'html',
orderable: false,
className: 'select-checkbox',
searchable:false,
width:'1%',
render:function(value){
return '<input type="checkbox" value="'+value+'" name="select_one" class="select_one">';
}
},
<?php
foreach($table_head as $table){
$label_name = $table->label_name;
$view_name = $table->view_name;
$field_type =(int)$table->field_type;
$date_type = $table->date_type;
if($field_type === 4){
if((int)$date_type === 1){
echo "{title:'$view_name',data: '$label_name',type: 'date',visible:true,
render:function(value){
if(value === '' || value === '0000-00-00' || value === null || value === '1970-01-01') return '';
return moment(value).format('DD/MM/YYYY');
}
},\n";
}else{
echo "{title:'$view_name',data: '$label_name',type: 'date',visible:true,
render:function(value){
if(value === '' || value === '0000-00-00' || value === null || value === '1970') return '';
return value;
}
},\n";
}
}else
if($field_type === 13){
echo "{title:'$view_name',data: '$label_name',type: 'date',visible:true,
render:function(value){
if(value){
if(value === '' || value === '0000-00-00' || value === null || value === '1970-01-01 05:30:00') return '';
return moment(value).format('DD/MM/YYYY HH:mm:ss');
}else{
return '';
}
}
},\n";
}else
if(($field_type === 5)||($field_type === 9)){
echo "{title:'$view_name',data: '$label_name',type: 'date',visible:true,
render:function(value){
if(value in pick_list['$label_name']['array_list']){
if(value === '0' || value === ''){
return '';
}else{
return pick_list['$label_name']['array_list'][value];
}
}else{
return value;
}
}
},\n";
}else
if($field_type === 6){
echo "{title:'$view_name',data: '$label_name',type: 'date',visible:true,
render:function(value){
send_val = 'No';
if(value === '1'){ send_val = 'Yes'; }
return send_val;
}
},\n";
}else
if($field_type === 7){
echo "{title:'$view_name',data: '$label_name',type: 'date',visible:true,
render:function(value){
if(value !== ''){
var rslt = '';
var multi_val = value.split(',');
var count = 0
$.each(multi_val,function(i){
count++;
var multi_key = multi_val[i];
if(multi_key in pick_list['$label_name']['array_list']){
if(count === 1){
rslt += pick_list['$label_name']['array_list'][multi_key];
}else{
rslt += ' , '+pick_list['$label_name']['array_list'][multi_key];
}
}
});
return rslt;
}else{
return '-';
}
}
},\n";
}else
if($field_type === 10){
$img = '<i class="fa fa-download" onclick="file_download(filepathleft@URL@filepathright)"></i>';
echo "{title:'$view_name',data: '$label_name',type: 'date',visible:true,sClass: 'center',
render:function(value){
if(value !== ''){
var image = '$img';
image = image.replace('@URL@', value);
image = image.replace('filepathleft', '\'');
image = image.replace('filepathright', '\'');
if(value !== null){
return image;
}else{
return '';
}
}else{
return '';
}
}
},\n";
}else
if($field_type === 1 || $field_type === 8){
if($label_name === 'process_status'){
echo "{title:'$view_name',data: '$label_name',visible:true,
render:function(value){
if(value === '0'){
return 'Yet to Start';
}else if(value === '1'){
return 'In Progress';
}else if(value === '2'){
return 'Success';
}else if(value === '3'){
return 'Failed';
}else{
return value;
}
}
},\n";
}else if($label_name === 'download_link'){
echo "{title:'$view_name', data:'$label_name', visible:true,
render:function(value, type, row){
var status = row.process_status;
if(status === '1'){
return '<span style=\"color:orange;\">In Progress</span>';
}
if(!value || value === ''){
return '<span style=\"color:gray; display:block; text-align:center;\"> - </span>';
}
try{
var obj = JSON.parse(value);
var token = obj.token || '';
var frm = obj.frm || '';
if(token && frm){
return '<div style=\"text-align:center;\">' +
'<a href=\"javascript:void(0);\" onclick=\"download_file(\\'' + token + '\\', \\'' + frm + '\\')\" style=\"color: #007bff; font-size: 16px; cursor: pointer;\">' +
'<i class=\"fa fa-download\"></i>' +
'</a></div>';
}
}catch(e){
console.error('Invalid JSON in download link:', value);
}
// Fallback for invalid JSON or missing token/frm
return '<span style=\"color:gray; display:block; text-align:center;\"> - </span>';
}
},\n";
}else if($label_name === 'filter_by'){
echo "{title:'$view_name',data: '$label_name',visible:true,
render:function(value){
if(value === '1'){
return 'ALL';
}else if(value === '2'){
return 'Employee';
}else if(value === '3'){
return 'Date Range(onboarding date)';
}else if(value === '4'){
return 'Date Range(DOJ)';
}else{
return value;
}
}
},\n";
}else if($label_name === 'filter_data'){
$allPickJson = json_encode($all_pick); // Pass PHP picklist to JS
$docOptionsJson = json_encode($document_field_option);
echo <<<EOT
{title: '$view_name',data: '$label_name',visible: true,
render: function(value){
if(!value) return '-';
try{
let parsed = JSON.parse(value);
let pickList = $allPickJson;
let docOptions = $docOptionsJson;
let rows = '';
for(let key in parsed){
let val = parsed[key];
if(val === null || val === '' ||(typeof val === 'object' && Object.keys(val).length === 0)) continue;
let displayVal = '';
// Handle object values
if(typeof val === 'object'){
if(key === 'document_type'){
if(Array.isArray(val)){
displayVal = val.map(v => docOptions[v] || v).join(', ');
}else{
displayVal = Object.keys(val).map(k => docOptions[val[k]] || val[k]).join(', ');
}
}else if(Array.isArray(val)){
// Multi-select picklist
displayVal = val.map(v =>(pickList[key] && pickList[key]['array_list'][v]) ? pickList[key]['array_list'][v] : v).join(', ');
}else if(Object.keys(val).length === 1){
// Autocomplete single key-value
let firstKey = Object.keys(val)[0];
displayVal =(pickList[key] && pickList[key]['array_list'][val[firstKey]]) ? pickList[key]['array_list'][val[firstKey]] : val[firstKey];
}else{
// Object with multiple keys
displayVal = Object.values(val).map(v =>(pickList[key] && pickList[key]['array_list'][v]) ? pickList[key]['array_list'][v] : v).join(', ');
}
}else{
// Handle single value fields
if(key === 'filter_by'){
displayVal = val === '1' ? 'ALL' :
val === '2' ? 'Employee' :
val === '3' ? 'Date Range(onboarding date)' :
val === '4' ? 'Date Range(DOJ)' : val;
}else if(key === 'inactive'){
displayVal = val === '1' ? 'Yes' : 'No';
}else if(key === 'document_type'){
displayVal = docOptions[val] || val;
}else{
displayVal =(pickList[key] && pickList[key]['array_list'][val]) ? pickList[key]['array_list'][val] : val;
}
}
if(displayVal === '') continue;
let label = key.charAt(0).toUpperCase() + key.slice(1).replace(/_/g, ' ');
rows += `<tr><td style="font-weight:bold; padding-right:6px;">\${label}</td><td>:</td><td>\${displayVal}</td></tr>`;
}
if(rows !== ''){
let tableHTML = '<table>' + rows + '</table>';
let safeTooltip = tableHTML.replace(/"/g, '"');
return `
<div class="tooltip-trigger" data-tooltip="\${safeTooltip}" style="text-align: center;">
<i class="fa fa-info-circle" style="cursor: pointer; font-size: 18px;"></i>
</div>
`;
}else{
return '-';
}
}catch(e){
let invalidTooltip = '<span style="color:red;">Invalid Data</span>';
let safeTooltip = invalidTooltip.replace(/"/g, '"');
return `
<div class="tooltip-trigger" data-tooltip="\${safeTooltip}" style="text-align: center;">
<i class="fa fa-info-circle" style="cursor: pointer; font-size: 18px;"></i>
</div>
`;
}
}
},
EOT;
}else{
echo "{title:'$view_name',data: '$label_name',visible:true,
render:function(value){
if(value){
var val = value.replace(/\~/g,'\"');
val = val.replace(/\`/g,'\'');
val = val.replace(/\^/g,'\&');
return val;
}else{
return '';
}
}
},\n";
}
}else{
if($label_name == 'failed'){
echo "{title:'$view_name', data: '$label_name', visible: true,
render: function(value, type, row){
var table_id = row.prime_emp_doc_export_id;
return '<span style=\"color: blue;padding: 4px 8px; cursor: pointer;\" onclick=\"open_table(' + table_id + ')\">' + value + '</span>';
}
},\n";
}else{
echo "{title:'$view_name',data:'$label_name',visible:true,},\n";
}
}
}
?>
],
});
$('input[type=search]').addClass('form-control input-sm');
$("select[name='table_length']" ).addClass('form-control input-sm');
});
// HIDE SHOW FUNCTION FOR FIELDS
function hide_show(){
$('#employee_code,#start_date,#end_date').val('');
$('#include_inactive').prop('checked', false);
$('input[name="document_type[]"]').prop('checked', false).prop('disabled', false);
$('#employee_code, #start_date, #end_date').parent().hide();
$('.multiselect').parent().hide();
$('#filter_comp').hide();
$('#search_filter_div').find('input').val('');
$('#search_filter_div').find('select').val(null).trigger('change');
var filter_by = parseInt($('#filter_by').val());
if(filter_by === 3 || filter_by === 4){
$('#start_date, #end_date').parent().show();
$('.multiselect').parent().show();
$('#include_inactive').parent().show();
}else
if(filter_by === 2){
$('#employee_code').parent().show();
$('.multiselect').parent().show();
$('#include_inactive').parent().hide();
}else
if(filter_by === 1){
$('.multiselect').parent().show();
$('#include_inactive').parent().show();
$('#filter_comp').show();
}
}
// DYNAMIC AUTOCOMPLETE
function initializeAutocomplete(inputId, hiddenId, appendToSelector, type){
let selected = false;
const $input = $('#' + inputId); // visible input
const $hidden = $('#' + hiddenId); // hidden input
if(!$input.length || !$hidden.length) return;
var key = '<?php echo $encKey; ?>';
// fallback if append container not found
const appendTo = $(appendToSelector).length ? appendToSelector : 'body';
$input.autocomplete({
source: function(request, response){
var encData = encrypt(key,{ term: request.term,label: hiddenId,type: type});
$.ajax({
url: '<?php echo site_url("$controller_name/dynamic_suggest"); ?>',
type: 'POST',
dataType: 'json',
data:encData,
success: function(data){
let results = [];
if(Array.isArray(data)){
results = data;
}else{
try{ results = JSON.parse(data); }catch(e){ results = []; }
}
if(results.length === 0){
response([{ label: 'No data found', value: '__nodata__' }]);
}else{
response($.map(results, function(item){
return{
label: item.label, // human-readable
value: item.value // ID
};
}));
}
},
error: function(){
response([{ label: 'Error fetching data', value: '__error__' }]);
}
});
},
minLength: 2,
appendTo: appendTo,
autoFocus: true,
select: function(e, ui){
// Prevent selection for "No data" or "Error"
if(ui.item.value === '__nodata__' || ui.item.value === '__error__'){
e.preventDefault();
$input.val('');
$hidden.val('');
selected = false;
return false;
}
// Assign visible label to input and ID to hidden
$input.val(ui.item.label);
$hidden.val(ui.item.value);
selected = true;
return false;
},
change: function(e, ui){
// Clear if invalid selection
if(!ui.item || !selected){
$input.val('');
$hidden.val('');
}
selected = false;
}
});
// Clear hidden ID if user types manually
$input.on('input', function(){
if(!selected){
$hidden.val('');
}
});
}
// VALIDATION ERROR THROW
function validate_filters(){
var filter_by = parseInt($('#filter_by').val());
var description = $('#description').val();
var isValid = true;
function showError(message){
toastr.error(message);
isValid = false;
}
// Check if both are empty
if(!filter_by ||(!description || description == ' ')){
showError("Please select Description and enter Filter By");
return false;
}
// Prepare document type selection
var document_type = [];
$('input[name="document_type[]"]:checked').each(function(){
document_type.push($(this).val());
});
// Apply checks based on filter_by
if(filter_by === 3 || filter_by === 4){
var startDate = $('#start_date').val();
var endDate = $('#end_date').val();
if(!startDate){
showError("Please select a start date.")
}else
if(!endDate){
showError("Please select an end date.")
}
else
if(document_type.length === 0){
showError("Please select at least one document type.")
};
}else
if(filter_by === 2){
var employeeCode = $('#employee_code').val();
if(!employeeCode){
showError("Please enter employee code.")
}else
if(document_type.length === 0){
showError("Please select at least one document type.")
}
}else
if(filter_by === 1){
if(document_type.length === 0){
showError("Please select at least one document type.")
}
}
return isValid;
}
// URL FOR DOWNLOADING THE FILE
function download_file(token, frm){
const BASE_URL = "<?php echo base_url(); ?>";
if(!token || !frm){
alert("Missing token or source type.");
return;
}
const url = BASE_URL + 'app/api_controller.php?url=' + encodeURIComponent(token) + '&frm=' + encodeURIComponent(frm);
window.open(url, '_blank');
}
// OPEN THE SIDE TABLE
function open_table(table_id){
if(table_id){
var refresh = `
<button class="btn btn-info btn-xs" id="refresh_btn" onclick="open_table(${table_id})" style="border: none; outline: none; box-shadow: none;">
<i class="fa fa-refresh" aria-hidden="true"></i> Refresh
</button>`;
$('#refresh_div').html(refresh);
failed_log_search(table_id);
}
}
// Close sidebar
function close_table(){
$('#tab_btn, #sched_process_div').hide();
$('#process_list').removeClass("process_list_wd");
$('.modal-backdrop').remove();
}
// FAILED DATAS SHOW IN TABLE
function failed_log_search(table_id){
var key = '<?php echo $encKey; ?>';
var encData = encrypt(key,{ table_id: table_id });
$.ajax({
type: 'POST',
url: '<?php echo site_url("$controller_name/failed_log_search"); ?>',
data:encData,
beforeSend: function(){
$('#table_line').html(`
<div style="text-align: center; padding: 100px; color: #4b6fa2;">
<i class="fa fa-spinner fa-spin fa-2x fa-fw"></i><br/>Please wait processing....
</div>`);
},
success: function(data){
var rslt = JSON.parse(data);
$('#table_line').html('');
if(rslt.success){
toastr.success(rslt.message);
}else{
toastr.warning(rslt.message);
}
// Show the sidebar with backdrop
$('#process_list').addClass("process_list_wd");
$('.modal-backdrop').remove();
$('#scheduler_div').append('<div class="modal-backdrop fade in"></div>');
setTimeout(function(){
$('#tab_btn, #sched_process_div').show();
$('#table_line').DataTable({
lengthMenu: [[10, 25, 50, 100, 500, 1000, -1], [10, 25, 50, 100, 500, 1000, "All"]],
processing: true,
serverSide: false,
destroy: true,
paging: true,
scrollY: 325,
scrollX: true,
language:{
lengthMenu: "<span style='margin-top:8px;margin-left:10px;'>Display</span> _MENU_ <span style='margin-top:8px;'>Records</span>",
searchPlaceholder: "Search records",
search: "",
processing: `
<div style="text-align: center; padding: 50px;color:#4b6fa2;z-index:999999999;">
<i class="fa fa-spinner fa-spin fa-2x fa-fw"></i><br/>Loading...
</div>`
},
data: rslt.pro_tab_create,
columns: [
{ title: "Employee Code", data: "employee_code" },
{ title: "Employee Name", data: "employee_name" },
{ title: "Remarks", data: "remarks" }
],
createdRow: function(row, data){
$('td', row).eq(2).css('color', 'blue');
}
});
$('input[type=search], select[name="table_line_length"]').addClass('form-control input-sm');
}, 450);
}
});
}
</script>
<?php $this->load->view("partial/footer"); ?>