MOON
Server: Apache
System: Linux nserver.cafsindia.com 4.18.0-553.104.1.lve.el8.x86_64 #1 SMP Tue Feb 10 20:07:30 UTC 2026 x86_64
User: cafsindia (1002)
PHP: 8.2.30
Disabled: NONE
Upload Files
File: /home/cafsindia/hrms_cafsinfotech_in/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, '&quot;');
												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, '&quot;');
											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"); ?>