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/cloud_cafsinfotech_in/application/controllers/Pdf_generation_bk.php
<?php if ( ! defined('BASEPATH')) exit('No direct script is allowed');
require_once("Action_controller.php");
require('./application/libraries/dompdf/autoload.inc.php');
use Dompdf\Dompdf;
use DOMDocument;
class Pdf_generation  extends Action_controller{	
	private $emp_data_rslt;
	public function __construct(){
		parent::__construct('pdf_generation');
		if(!$this->Appconfig->isAppvalid()){
			redirect('config');
		}
	}
	//$this->load->library('pdf');
	// LOAD PAGE QUICK LINK,FILTERS AND TABLE HEADERS
	public function index(){
		$group_query = 'select label_name,view_name,pick_table,pick_list from cw_form_setting where prime_module_id = "employees" and field_show = "1" and input_view_type !=3 and field_type in (5,7) ORDER BY input_for,field_sort asc';
		$group_info   = $this->db->query("CALL sp_a_run ('SELECT','$group_query')");
		$group_result = $group_info->result();
		$group_info->next_result();
		$group_by[""] = "---- Select Group ----";
		foreach($group_result as $rlst){
			$col_name  = "cw_employees.".$rlst->label_name;
			$view_name = $rlst->view_name;
			$group_by[$col_name] = $view_name;
		}
		$data['group_by']  = $group_by;
		//Get filter
		$from_query = 'select * from cw_form_setting where prime_module_id = "employees" and field_show = "1" ORDER BY input_for,field_sort asc';
		$form_data   = $this->db->query("CALL sp_a_run ('SELECT','$from_query')");
		$form_result = $form_data->result();
		$form_data->next_result();
		$fliter_list = $this->get_filter_data($form_result);
		$data['fliter_list']  = $fliter_list;

		$remove_module = array("request","approval","direct_leave_entry","formm","offer_letter","custom_approval");
		$remove_module = implode('","', $remove_module);
		//Get Design Modules
		$print_module_qry 	 = 'SELECT print_info_module_id FROM `cw_print_info` where trans_status = 1 and print_info_module_id not in("'.$remove_module.'")';
		$print_module_info   = $this->db->query("CALL sp_a_run ('SELECT','$print_module_qry')");
		$print_module_result = $print_module_info->result();
		$print_module_info->next_result();
		$module_list[""] = "---- Select Print From ----";
		foreach($print_module_result as $for){
			$module_id   = $for->print_info_module_id;
			$module_list[$module_id] = ucwords(str_replace("_", " ", $module_id));
		}
		$data['module_list'] = $module_list;

		$group_result 	= json_decode(json_encode($group_result),true);
		$final_rslt 	= array_reduce($group_result, function($result, $arr){         
			$result[$arr['label_name']] = $arr;
			return $result;
		}, array());
		$payslip_based_on 	= $this->company_info();
		$payslip_based_on	= $payslip_based_on[0]->payslip_based_on;
		$data['payslip_based_on']	= ucwords(str_replace('_', '', $payslip_based_on));
		$this->load->view("$this->control_name/manage",$data);
	}
	//PROVIDE QUERY AND DROPDOWN VALUES 
	public function get_filter_data($form_result){
		$filter = array();
		foreach($form_result as $setting){
			$prime_form_id      = (int)$setting->prime_form_id;
			$prime_module_id    = $setting->prime_module_id;
			$input_view_type    = (int)$setting->input_view_type;
			$input_for          = (int)$setting->input_for;
			$field_type         = (int)$setting->field_type;
			$label_id           = $setting->label_name;
			$label_name         = ucwords($setting->view_name);
			$field_length       = $setting->field_length;
			$field_decimals     = $setting->field_decimals;
			$pick_list_type     = (int)$setting->pick_list_type;
			$pick_list          = $setting->pick_list;
			$pick_table         = $setting->pick_table;
			$auto_prime_id      = $setting->auto_prime_id;
			$auto_dispaly_value = $setting->auto_dispaly_value;
			$field_isdefault    = (int)$setting->field_isdefault;
			$file_type          = (int)$setting->file_type;
			$mandatory_field    = (int)$setting->mandatory_field;
			$unique_field       = (int)$setting->unique_field;
			$search_show        = (int)$setting->search_show;
			$array_list = array();
			if($label_id != 'role' && $label_id != 'employee_code' && $label_id != 'emp_name'){
				if(($field_type === 5) || ($field_type === 7)){
					if($pick_list_type === 1){
						$pick_list_val   = explode(",",$pick_list);
						$pick_list_val_1 = $pick_list_val[0];
						$pick_list_val_2 = $pick_list_val[1];
						if($pick_table == "cw_category"){
							$qry = " and prime_category_id != 1";
							}else{
							$qry = "";
						}
						if($pick_table == "cw_payroll_formula"){
							$pick_query = "select $pick_list from $pick_table where trans_status = 1";
							$pick_data   = $this->db->query("CALL sp_a_run ('SELECT','$pick_query')");
							$pick_result = $pick_data->result();
							$pick_data->next_result();
							$array_list[""] = "---- $label_name ----";
							foreach($pick_result as $pick){
								$pick_key = $pick->$pick_list_val_1;
								$pick_val = ucwords(str_replace("_"," ",$pick->$pick_list_val_2));
								$array_list[$pick_key] = $pick_val;
							}
						}else{
							if($label_id === "excemption_component"){
								$pick_query = "select $pick_list from $pick_table where trans_status = 1 and tax_section = 1 $qry";
								}else{
								$pick_query = "select $pick_list from $pick_table where trans_status = 1 $qry";
							}
							$pick_data   = $this->db->query("CALL sp_a_run ('SELECT','$pick_query')");
							$pick_result = $pick_data->result();
							$pick_data->next_result();
							
							$array_list[""] = "---- $label_name ----";
							foreach($pick_result as $pick){
								$pick_key = $pick->$pick_list_val_1;
								$pick_val = $pick->$pick_list_val_2;
								$array_list[$pick_key] = $pick_val;
							}
						}
					}else
					if($pick_list_type === 2){ 
						$pick_list_val_1 = $pick_table."_id";
						$pick_list_val_2 = $pick_table."_value";
						$pick_list_val_3 = $pick_table."_status";
						
						$pick_query = "select $pick_list_val_1,$pick_list_val_2 from $pick_table where $pick_list_val_3 = 1";
						$pick_data   = $this->db->query("CALL sp_a_run ('SELECT','$pick_query')");
						$pick_result = $pick_data->result();
						$pick_data->next_result();
						
						$array_list[""] = "---- $label_name ----";
						foreach($pick_result as $pick){
							$pick_key = $pick->$pick_list_val_1;
							$pick_val = $pick->$pick_list_val_2;
							$array_list[$pick_key] = $pick_val;
						}
					}
				}		
				if(($input_view_type === 1) || ($input_view_type === 2)){
					$filter[] = array('label_id'=> $label_id, 'field_isdefault'=> $field_isdefault, 'array_list'=> $array_list, 'field_type'=> $field_type);
				}
			}
		}
		return $filter;
	}
	// Get Employee Code
	public function get_employees_list(){
		$column_name          	= implode(',',array_filter($this->input->post('column_name')));
		$process_month     	= $this->input->post('process_month');
		$module_name 	   	= $this->input->post('module_name');
		$pdf_template      	= $this->input->post('pdf_template');
		$where_column 	   	= $this->where_month_value($module_name,$pdf_template,$process_month);
		$where_column_arr 	= explode(',', $where_column);
		$where_column_count = count($where_column_arr);
		$where_month_col   = " $where_column";
		if((int)$where_column_count === 0){
			echo json_encode(array('success'=>FALSE,'message'=>"Please set Month Column for print setting"));
			exit(0);
		}
		$print_block_qry   = 'select print_block_table,prime_print_block_id from cw_print_info inner join cw_print_block on cw_print_block.print_block_for = cw_print_info.prime_print_info_id where cw_print_info.trans_status = 1 and cw_print_block.trans_status = 1 and prime_print_info_id = "'.$pdf_template.'"';
		$print_block_info  = $this->db->query("CALL sp_a_run ('SELECT','$print_block_qry')");
		$print_block_rslt  = $print_block_info->result_array();
		$print_block_info->next_result();
		$print_block_table = explode(',', $print_block_rslt[0]['print_block_table']);
		$block_count	   = count($print_block_table);
		$block_id 		   = $print_block_rslt[0]['prime_print_block_id'];

		$where_qry    = 'select where_condition from cw_print_table_where where trans_status = 1 and cw_print_table_where.where_for_id = "'.$block_id.'"';
		$where_data   = $this->db->query("CALL sp_a_run ('SELECT','$where_qry')");
		$where_result = $where_data->result_array();
		$where_data->next_result();
		$tbl_where_condition = $where_condition[0]['where_condition'];

		if((int)$block_count > 1){
			$print_table_qry   = 'select line_prime_table,line_prime_col,line_join_type,line_join_table,line_join_col,line_sort from cw_print_table where cw_print_table.trans_status = 1 and cw_print_table.print_table_for_id = "'.$block_id.'"';
			$print_table_info  = $this->db->query("CALL sp_a_run ('SELECT','$print_table_qry')");
			$print_table_rslt  = $print_table_info->result_array();
			$print_table_info->next_result();
			$print_table_count = count($print_table_rslt);
			$final_block_count 	   = $block_count-1;
			if((int)$final_block_count !== (int)$print_table_count){
				echo json_encode(array('success'=>FALSE,'message'=>"Please Join Table!!!"));
				exit(0);
			}
			$cutome_table_check = array('transactions'=>'cw_transactions');
			$line_table_query = "";
			foreach($print_table_rslt as $table_result){
				$line_prime_table = $table_result['line_prime_table'];
				$line_prime_col   = $table_result['line_prime_col'];
				$line_join_type   = $table_result['line_join_type'];
				$line_join_table  = $table_result['line_join_table'];
				$line_join_col    = $table_result['line_join_col'];
				$line_sort        = $table_result['line_sort'];
				$module_name      = str_replace("cw_","",$line_prime_table);
				$prime_id         = "prime_".$module_name."_id";	
				
				if((int)$line_sort === 1){
					$line_prime_table = " $line_prime_table ";
					$line_join_table = " $line_join_table on $line_join_col = $line_prime_col";
					$line_table_query .= " $line_prime_table  $line_join_type join $line_join_table"; 
				}else{
					$line_table_query .= " $line_join_type join $line_join_table on $line_join_col = $line_prime_col "; 
				}
			}
		}else{
			$line_table_query 	= $print_block_rslt[0]['print_block_table'];
		}

		$where_trans = "";
		$where_trans_info = explode(",",$print_block_rslt[0]['print_block_table']);
		foreach($where_trans_info as $trans_info){
			if($trans_info === "cw_transactions"){
				$select_query .= "cw_transactions.transactions_month , ";
			}				
			$where_trans .= "$trans_info.trans_status = 1 and ";
		}
		$where_trans  = rtrim($where_trans,'and ');
		$payslip_based_on 	= $this->company_info();
		$payslip_based_on	= $payslip_based_on[0]->payslip_based_on;
		$final_qry 	  = 'select CONCAT("<option value =",cw_employees.employee_code," >",cw_employees.emp_name," - ",cw_employees.employee_code,"</option>") as result_data from '.$line_table_query.' where '.$where_trans.' and cw_employees.'.$payslip_based_on.' in('.$column_name.')'.$tbl_where_condition.' '.$where_month_col.' group by cw_employees.employee_code';
		echo $final_qry; die;
		$final_data   = $this->db->query("CALL sp_a_run ('SELECT','$final_qry')");
		$final_result = $final_data->result();
		$final_data->next_result();
		$result_data  = array_column($final_result,'result_data');
		$option       = "<option value=''>---- Select Employee ----</option>".implode('',$result_data);
		if(empty($final_result)){
			echo json_encode(array('success'=>FALSE,'message'=>"No Data Found for this Month"));
		}else{
			echo json_encode(array('success'=>TRUE,'option'=>$option));
		}	
	}
	// Pdf Generate
	public function pdf_generation(){
		$suppressed_data     = $this->input->post('suppressed_data_val');
		$emp_codes 		 	 = $this->input->post('pdf_block_employees');
		$column_name         = implode(',',array_filter($this->input->post('column_name')));
		$process_month     	 = $this->input->post('process_month');
		$fliter_label        = $this->input->post('fliter_label');
		$fliter_type         = $this->input->post('fliter_type');
		$filter_cond         = $this->input->post('filter_cond');
		$fliter_val          = $this->input->post('fliter_val');
		$input_field_type    = $this->input->post('input_field_type');
		$process_by          = $this->input->post('process_by');
		$process_mode  		 = $this->input->post('process_mode');
		$pdf_template        = $this->input->post('pdf_template');
		$filter_count        = count($fliter_label);
		$fliter_query        = "";
		$search_count        = 0;
		$module_name 	     = $this->input->post('module_name');

		for($i=0;$i<=(int)$filter_count;$i++){
			$db_name     = $fliter_label[$i];
			$table_name  = $fliter_type[$i];
			$db_cond     = $filter_cond[$i];
			$db_value    = $fliter_val[$i];
			$field_type  = $input_field_type[$i];
			if(($db_cond) && ($db_value)){
				$search_count++;
				if((int)$field_type === 4){
					$search_val = date("Y-m-d",strtotime($db_value));
				}else{
					$search_val = $db_value;
				}
				if($db_cond === "LIKE"){ $search_val = "$db_value%"; }
				if((int)$table_name === 1){ $fliter_query .= ' and cw_employees.'. $db_name ." ". $db_cond .' "'.$search_val.'"'; }
			}			
		}

		$block_qry   	= 'select prime_print_info_id,prime_print_block_id,print_block_name,print_block_type,print_block_table,print_block_column,folder_column,set_password,pdf_paper_size,pdf_sheet_type,password_column from cw_print_info inner join cw_print_block on cw_print_block.print_block_for = cw_print_info.prime_print_info_id where cw_print_info.trans_status = 1 and cw_print_block.trans_status = 1 and prime_print_info_id = "'.$pdf_template.'" and print_info_module_id = "'.$module_name.'" and print_block_module_id = "'.$module_name.'"';
		$block_info  	= $this->db->query("CALL sp_a_run ('SELECT','$block_qry')");
		$block_result   = $block_info->result_array();
		$block_info->next_result();
		
		$print_id   		= $block_result[0]['prime_print_info_id'];
		$pdf_set_password   = $block_result[0]['set_password'];
		$pdf_paper_size     = $block_result[0]['pdf_paper_size'];
		$pdf_sheet_type     = $block_result[0]['pdf_sheet_type'];

		$design_name		= strtolower(str_replace(' ', '_', $block_result[0]['print_block_name']));
		$password_column    = $block_result[0]['password_column'];

		$design_qry    = 'SELECT print_design from cw_print_design where print_design_for = "'.$print_id.'" and trans_status = 1';
		$design_data   = $this->db->query("CALL sp_a_run ('SELECT','$design_qry')");
		$design_result = $design_data->result();
		$design_data->next_result();
		$print_design_value  = $design_result[0]->print_design;
		$print_design_value = str_replace('~','"',$print_design_value);

		$pwd_column 	= "";
		if((int)$pdf_set_password === 1){
			$pwd_column 	= ",$password_column";
		}
		if(!$pdf_set_password && !$pdf_paper_size && !$pdf_sheet_type){
			echo json_encode(array('success'=>FALSE,'message'=>"Pdf Settings Empty"));
			exit(0);
		}

		$table_qry    = 'select line_prime_table,line_prime_col,line_join_type,line_join_table,line_join_col,line_sort,print_table_for_id from cw_print_table where trans_status = 1';
		$table_data   = $this->db->query("CALL sp_a_run ('SELECT','$table_qry')");
		$table_result = $table_data->result_array();
		$table_data->next_result();
		$print_table_result = array_reduce($table_result, function ($result, $arr) {		
		    $result[$arr['print_table_for_id']][] = $arr;
		    return $result;
		}, array());

		$emp_code_arr  	= implode('","', $emp_codes);
		$emp_qry 	= 'SELECT prime_employees_id,emp_name,employee_code '.$pwd_column.' FROM `cw_employees` where trans_status = 1 and employee_code in ("'.$emp_code_arr.'") '.$fliter_query.'';
		$emp_info   = $this->db->query("CALL sp_a_run ('SELECT','$emp_qry')");
		$emp_rslt 	= $emp_info->result_array();
		$emp_info->next_result();
		$emp_rslt = array_reduce($emp_rslt, function ($result, $arr) {		
		    $result[$arr['employee_code']] = $arr;
		    return $result;
		}, array());
		$emp_codes = array_values(array_column($emp_rslt, 'employee_code'));

		$split_qry    = 'select split_info,split_colum from cw_print_split where trans_status = 1';
		$split_data   = $this->db->query("CALL sp_a_run ('SELECT','$split_qry')");
		$split_result_arr = $split_data->result_array();
		$split_data->next_result();
		$split_result_arr = array_reduce($split_result_arr, function($result, $arr){
		    $result[$arr['split_table_info']] = $arr;
		    return $result;
		}, array());	

		$where_qry    = 'select where_condition,where_for_id from cw_print_table_where where trans_status = 1';
		$where_data   = $this->db->query("CALL sp_a_run ('SELECT','$where_qry')");
		$where_result = $where_data->result_array();
		$where_data->next_result();
		$where_result = array_reduce($where_result, function($result, $arr){
		    $result[$arr['where_for_id']] = $arr;
		    return $result;
		}, array());

		$form_qry     		= 'select prime_module_id,prime_form_id,view_name,label_name,field_type,pick_list_type,pick_list,pick_table,auto_prime_id,auto_dispaly_value from cw_form_setting where trans_status = "1"';
		$form_data   		= $this->db->query("CALL sp_a_run ('SELECT','$form_qry')");
		$form_result_arr 	= $form_data->result_array();
		$form_data->next_result();
		$form_result_array 	= array_reduce($form_result_arr, function($result, $arr){
		    $result[$arr['prime_module_id']][$arr['label_name']][] = $arr;
		    return $result;
		}, array());

		$emp_codes_array  	= array_filter($emp_codes);
		$in_empcode 		= implode(',', $emp_codes_array);
		$in_empcode 		= str_replace(',', '","', $in_empcode);
		$folder_tbl_name 	= str_replace('cw_', '', $module_name);
		$folder_tbl_name   	= strtolower(str_replace(" ","_",$folder_tbl_name));
		$where_column 	    = $this->where_month_value($module_name,$pdf_template,$process_month);
		$where_column_arr 	= explode(',', $where_column);
		$where_column_count = count($where_column_arr);
		
		$where_month_col  = " $where_column and cw_employees.employee_code in(\"$in_empcode\")";
		$payslip_based_on 	= $this->company_info();
		$payslip_based_on	= $payslip_based_on[0]->payslip_based_on;
		if((int)$process_mode === 1){
			$final_qry_array	= $this->load_all_data($block_result,$print_table_result,$form_result_array,$where_result,$where_month_col,$process_month,$in_empcode,$payslip_based_on);
			$final_qry 			= $final_qry_array['final_qry'];
			$split_array 		= $final_qry_array['split_array'];
			$map_column 		= $final_qry_array['map_column'];
			$block_result 		= $final_qry_array['block_result'];
			$assign_date_formate_list  = $final_qry_array['assign_date_formate_list'];
			$final_qry_data     = $this->db->query("CALL sp_a_run ('SELECT','$final_qry')");
			$final_qry_result   = $final_qry_data->result();
			$final_qry_data->next_result();
			if(!$final_qry_result){
				echo json_encode(array('success'=>FALSE,'message'=>"NO Data Available...",'table_data'=>""));
				exit(0);
			}
			$tble_line = "";
			$print_design= "";
			foreach($block_result as $block){
				$print_block_type      = (int)$block['print_block_type'];
				$print_block_column    = $block['print_block_column'].',folder_column.folder_column_name';
				$pdf_paper_size        = (int)$block['pdf_paper_size'];
				$pdf_sheet_type        = (int)$block['pdf_sheet_type'];
				$set_password          = (int)$block['set_password'];
				if($final_qry_result){
					$data['print_sts'] = true;
					$emp_detail_arr = array();
					$emp_data_arr 	= array();
					$final_data_rslt = array();
					foreach($final_qry_result as $rslt){
						$count++;
						$map_column = explode(",",$print_block_column);

						$td_line = "";
						$print_design 		= $print_design_value;
						foreach($map_column as $table_column){
							$map_column   = explode(".",$table_column);
							$column 	  = $map_column[1];
							$value        = $rslt->$column;
							$replace_val  = "@".$column."@";
							if($column == 'net_pay'){
								$value         = $rslt->$column;
								$value         = $value.".00";
								$print_design  = str_replace($replace_val,$value,$print_design);
								$net_pay_val   = $value;
								$net_pay_words = $this->numbertowords($net_pay_val);
								$net_pay_words = strtoupper($net_pay_words);
								$print_design  = str_replace("@net_pay_words@",$net_pay_words,$print_design);
							}
							$today_date    = date('d-m-Y');
							$print_design  = str_replace("@today_date@",$today_date,$print_design);
							
							if($split_array[$replace_val]){
								//Process split informtion 
								$process_function = $split_array[$replace_val];	
								if((int)$process_function === 1){
									$transactions_month = $final_qry_result[0]->transactions_month;
									$employee_code      = $final_qry_result[0]->employee_code;
									$loan_info = $this->get_loan_value($transactions_month,$employee_code);
									$print_design = str_replace($replace_val,$loan_info,$print_design);	
								}
							}else{
								if($print_block_type === 1){
									$print_design = str_replace($replace_val,$value,$print_design);
									foreach($assign_date_formate_list as $key=>$formate){
										if($column == 'transactions_month'){//transactions month static updated
											$start         = "@".$key."_";
											$end           = "_".$key."@";
											$replace_val   = $start.$column.$end;
											$value         = date('Y-m-d',strtotime("01-".$rslt->$column));
											$date_value    = date_create($value);
											$replace_value = strtoupper(date_format($date_value,$formate));
											$print_design  = str_replace($replace_val,$replace_value,$print_design);
										}else{//not static month updated
											$start         = "@".$key."_";
											$end           = "_".$key."@";
											$replace_val   = $start.$column.$end;
											$replace_val   = $start.$column.$end;
											$date_value    = date_create($value);
											$replace_value = date_format($date_value,$formate);
											$print_design  = str_replace($replace_val,$replace_value,$print_design);
										}
									}
								}else
								if($print_block_type === 2){
									$td_line .= "<td style='text-align:center;'>$value</td>";
								}
								if($count === 1){
									$head_name = ucwords(str_replace("_"," ",$column));
									if(($value === "") || ($value === "0.00") || ($value === "0") || (!$value)){
										$th_line = "";
									}else{
										$th_line .= "<th style='text-align:center;'>$head_name</th>";
									}
								}
							}
							if($column === 'employee_code'){
								$emp_code = $value;
							}else
							if($column === 'emp_name'){
								$emp_name = $value;
							}else
							if($column === 'folder_column_name'){
								$payslip_based_id = $value;
							}
						}
						if($print_block_type === 2){
							if($count === 1){
								if(($value === "") || ($value === "0.00") || ($value === "0") || (!$value)){
									$th_line = "";
								}else{
									$th_line  = "$th_line";
									$tr_line .= "<tr>$td_line</tr>";
								}
							}
						}
						if((int)$suppressed_data === 1){
							$print_design = str_replace("<br>","",$print_design);
						}
						if($print_block_type === 2){
							$table_list  = "<table style='width:100%;'><thead>$th_line</thead><tbody>$tr_line</tbody></table>";
							$replce_block = "@".strtolower(str_replace(" ","_",$print_block_name))."@";
							$print_design = str_replace($replce_block,$table_list,$print_design);
						}
						$emp_data_arr[$emp_code]['emp_code'] 		= $emp_code;
						$emp_data_arr[$emp_code]['payslip_based_id']= $payslip_based_id;
						$emp_data_arr[$emp_code]['print_design'] 	= $print_design;
						if((int)$set_password === 1){
							$password_column = explode(',', $block_result[0]['password_column']);
							$password_col = "";
							foreach ($password_column as $pwd_key => $pwd_value) {
								$pwd_field_type = $form_result_array['employees'][$pwd_value][0]['field_type'];
								if((int)$pwd_field_type === 4){
									$password_col 	.= date('d-m-Y',strtotime($emp_rslt[$emp_code][$pwd_value]));
								}else{
									$password_col 	.= $emp_rslt[$emp_code][$pwd_value];
								}
							}
						}
						$emp_data_arr[$emp_code]['pwd_column']		= $password_col;
						$emp_data_arr[$emp_code]['set_password']	= $set_password;
						$emp_data_arr[$emp_code]['pdf_sheet_type']	= $pdf_sheet_type;
						$emp_data_arr[$emp_code]['pdf_paper_size']	= $pdf_paper_size;
					}
				}
			}
			$get_pdf_design = "";
			foreach ($emp_data_arr as $i => $emp_detail) {
				$emp_code 		= $emp_detail['emp_code'];
				$cate_name 		= str_replace('/', '_',strtolower(str_replace(' ', '_', $emp_detail['payslip_based_id'])));
				$print_design 	= $emp_detail['print_design'];
				$print_design   = str_replace('~', '"', $print_design);
				$set_password 	= $emp_detail['set_password'];
				$pdf_sheet_type = $emp_detail['pdf_sheet_type'];
				$pdf_paper_size = $emp_detail['pdf_paper_size'];
				$pwd_column 	= $emp_detail['pwd_column'];
				$pwd_column 	= preg_replace('/[^a-zA-Z0-9]/s','',$pwd_column);
				$print_design   = "<!DOCTYPE html>
								<head></head>
								<style>	table {
											border-collapse: collapse;
										}
										table td.fr-highlighted,.fr-view table th.fr-highlighted{
											border:1px solid black !important;
										}
								</style><body>".$print_design."</body></html>";

				$fetchURL = $this->get_pdf($design_name,$pdf_paper_size,$pdf_sheet_type,$pdf_set_password,$pdf_sheet_per_page,$print_id,$print_design,$column_name,$payslip_month,$emp_code,$process_by,$folder_tbl_name,$cate_name,$process_month,$suppressed_data,$payslip_based_on,$pwd_column);
				$folder_arr[$emp_code] = 'pdf_generation/'.$folder_tbl_name."/".$design_name."/".$process_month."/".$payslip_based_on."_".$cate_name;
			}
		}else
		if((int)$process_mode === 2){
			$payslip_based_on 	= $this->company_info();
			$payslip_based_on	= $payslip_based_on[0]->payslip_based_on;
			$form_setting_qry  = 'select label_name,view_name,pick_table,pick_list from cw_form_setting where prime_module_id = "employees" and trans_status = 1 and label_name = "'.$payslip_based_on.'"';
			$form_setting_info = $this->db->query("CALL sp_a_run ('SELECT','$form_setting_qry')");
			$form_setting_rslt = $form_setting_info->result();
			$form_setting_info->next_result();
			$payslip_pick_table = $form_setting_rslt[0]->pick_table;
			$payslip_pick_list 	= $form_setting_rslt[0]->pick_list;
			$payslip_pick_arr 	= explode(',', $payslip_pick_list);
			$payslip_pick_list1 = $payslip_pick_arr[0];
			$payslip_pick_list2 = $payslip_pick_arr[1];

			$emp_query = 'select '.$payslip_pick_table.'.'.$payslip_pick_list1.' as '.$payslip_based_on.',employee_code,emp_name from cw_employees inner join '.$payslip_pick_table.' on '.$payslip_pick_table.'.'.$payslip_pick_list1.' = cw_employees.'.$payslip_based_on.' where cw_employees.trans_status = 1 and employee_code in("'.$in_empcode.'")';
			$emp_info  = $this->db->query("CALL sp_a_run ('SELECT','$emp_query')");
			$emp_rslt  = $emp_info->result_array();
			$emp_info->next_result();
			$folder_arr 	= array_reduce($emp_rslt, function ($result, $arr) {		
			    $result[$arr['employee_code']] = $arr;
			    return $result;
			}, array());
		}
		// $folder_name    = 'pdf_generation/'.$folder_tbl_name."/".$design_name."/".$cate_name."/".$process_month;
		$dw_all    	    = $folder_tbl_name."/".$design_name."/".$process_month;
		$table_data = $this->view_emp_details($emp_codes_array,$process_by,$process_mode,$folder_arr,$column_name,$emp_rslt,$dw_all,$tbl_name,$folder_tbl_name,$design_name,$process_month);
		
		echo json_encode(array('success' => true,'message' => '', 'table_data' => $table_data));
	}
	public function get_pdf($design_name,$pdf_paper_size,$pdf_sheet_type,$pdf_set_password,$pdf_sheet_per_page,$print_id,$content,$column_name,$payslip_month,$emp_code,$process_by,$folder_tbl_name,$cate_name,$process_month,$suppressed_data,$payslip_based_on,$pwd_column){
		$design_name 	= str_replace(' ', '_', $design_name);
		$cate_name 		= str_replace(' ', '_', $cate_name);
		$folder_tbl_name= str_replace(' ', '_', $folder_tbl_name);
		$folder 	= 'pdf_generation/'.$folder_tbl_name."/$design_name/$process_month/".$payslip_based_on."_".$cate_name;
		$file_type 	= ".pdf";
		$path 		= $this->generate_pdf_bulk($content,$folder,$emp_code,$pdf_sheet_type,$pdf_paper_size,$pdf_set_password,$file_type,$process_by,$suppressed_data,$pwd_column);
		return $path;
	}
	public function load_all_data($block_result,$print_table_result,$form_result_array,$where_result,$where_month_col,$process_month,$in_empcode,$payslip_based_on){
		foreach($block_result as $block){
			$prime_print_block_id  = $block['prime_print_block_id'];
			$print_block_name      = $block['print_block_name'];
			$print_block_type      = (int)$block['print_block_type'];
			$print_block_table     = $block['print_block_table'];
			$print_block_column    = $block['print_block_column'];
			$folder_column    	   = $block['folder_column'];
			$table_rslt            = $print_table_result[$prime_print_block_id];
			$line_table_query     = "";
			foreach($table_rslt as $table_result){
				$line_prime_table = $table_result['line_prime_table'];
				$line_prime_col   = $table_result['line_prime_col'];
				$line_join_type   = $table_result['line_join_type'];
				$line_join_table  = $table_result['line_join_table'];
				$line_join_col    = $table_result['line_join_col'];
				$line_sort        = $table_result['line_sort'];
				$module_name      = str_replace("cw_","",$line_prime_table);
				$prime_id         = "prime_".$module_name."_id";
				$join_module_name = str_replace("cw_","",$line_join_table);
				$join_prime_id    = "prime_".$join_module_name."_id";	
				if((int)$line_sort === 1){
					$line_prime_table = " $line_prime_table ";
					$line_join_table = " $line_join_table on $line_join_col = $line_prime_col ";
					$line_table_query .= " $line_prime_table  $line_join_type join $line_join_table"; 
				}else{
					$line_table_query .= " $line_join_type join $line_join_table on $line_join_col = $line_prime_col ";
				}
			}		
			if(!$line_table_query){
				$module_name      = str_replace("cw_","",$print_block_table);
				$prime_id         = "prime_".$module_name."_id";
				$line_table_query = " $print_block_table ";
			}
			if(!$print_block_column){
				$print_block_column = "*";
			}else{
				$select_query = "";
				$select_query.= "$folder_column as folder_column_name,";
				$pick_query   = "";
				$map_column = explode(",",$print_block_column);				
				foreach($map_column as $table_column){
					$map_column   = explode(".",$table_column);
					$table_name   = $map_column[0];
					$column 	  = $map_column[1];
					$control_name = str_replace('cw_',"",$table_name);
					if($control_name === "transactions"){
						$control_name = "employees";
					}					
					$form_result 		= $form_result_array[$control_name][$column];	
					foreach($form_result as $form){
						$prime_form_id  = (int)$form['prime_form_id'];
						$view_name      = $form['view_name'];
						$label_name     = $form['label_name'];
						$field_type     = (int)$form['field_type'];
						$pick_list_type = (int)$form['pick_list_type'];
						$pick_list      = $form['pick_list'];
						$pick_table     = $form['pick_table'];
						$auto_prime_id      = $form['auto_prime_id'];
						$auto_dispaly_value = $form['auto_dispaly_value'];
						if($label_name){
							if((int)$field_type === 4){
								$select_query .= 'DATE_FORMAT('.$table_name.'.'.$label_name.', "%d-%m-%Y") as '.$label_name.' , ';
							}else
							if(($field_type === 5) || ($field_type === 7)){
								if($pick_list_type === 1){
									$pick_list_val   = explode(",",$pick_list);
									$pick_list_val_1 = $pick_list_val[0];
									$pick_list_val_2 = $pick_list_val[1];
									
									$pick_query_as = $pick_table."_".$prime_form_id;
									$select_query .= "$pick_query_as.$pick_list_val_2 as $label_name , ";
									$pick_query .= " left join $pick_table as $pick_query_as on $pick_query_as.$pick_list_val_1 = $table_name.$label_name ";
								}else
								if($pick_list_type === 2){ 
									$pick_list_val_1 = $pick_table."_id";
									$pick_list_val_2 = $pick_table."_value";
									$pick_list_val_3 = $pick_table."_status";
									
									$pick_query_as = $pick_table."_".$prime_form_id;
									$select_query .= "$pick_query_as.$pick_list_val_2 as $label_name , ";
									$pick_query   .= " left join $pick_table as $pick_query_as on $pick_query_as.$pick_list_val_1 = $table_name.$label_name ";
								}
							}else
							if($field_type === 9){
								$pick_query_as = $pick_table."_".$prime_form_id;
								$select_query .= "$pick_query_as.$auto_dispaly_value as $label_name,";
								$pick_query .= " left join $pick_table as $pick_query_as on $pick_query_as.$auto_prime_id = $table_name.$label_name ";
							}else
							if(($field_type === 2) || ($field_type === 3)){
								$label_ytd  =	$label_name."_ytd";
								$select_ytd_query .= "sum($table_name.$label_name) as $label_ytd, ";
								$select_query .= "$table_name.$label_name , ";
							}else{
								$select_query .= "$table_name.$label_name , ";
							}
						}
					}
					
				}
			}
			$where_trans = "";
			$where_trans_info = explode(",",$print_block_table);
			foreach($where_trans_info as $trans_info){
				if($trans_info === "cw_transactions"){
					$select_query .= "cw_transactions.transactions_month , ";
				}				
				$where_trans .= " $trans_info.trans_status = 1 and ";
			}
			$where_trans 	= rtrim($where_trans,'and ');
			$where_rslt 	= $where_result[$prime_print_block_id];
			if(!empty($where_rslt)){
				$where_condition = str_replace('^','"',$where_rslt['where_condition']);
				$where_condition = str_replace('@logged_id@',$emp_id,$where_condition);
				$where_condition = str_replace('@input_month@',$payslip_month,$where_condition);
				$session_date_list  = array("logged_DMY"=>"d-m-Y","logged_YMD"=>"Y-m-d","logged_MY"=>"m-Y","logged_YM"=>"Y-m","logged_Y"=>"Y"); 
				$session_query      = 'select session_value from cw_session_value where session_for = 1 and trans_status = "1"';
				$session_data       = $this->db->query("CALL sp_a_run ('SELECT','$session_query')");
				$session_result     = $session_data->result();
				$session_data->next_result();
				foreach($session_result as $rslt){
					$session_value 	   = $rslt->session_value;
					if($session_value !== "access_data"){
						$exist_val = "@".$session_value."@";
						if($session_date_list[$session_value]){
							$date_formate      = $session_date_list[$session_value];
							$saved_session_val = date($date_formate);
						}else{
							$saved_session_val = $this->session->userdata($session_value);
						}
						$where_condition  = str_replace($exist_val,$saved_session_val,$where_condition);
					}
				}
			}

			$select_query = rtrim($select_query,',');
			$select_query = rtrim($select_query,' , ');
			if((int)$cumulative_data === 1){
				$start_fin_date = $this->financial_info[0]->start_date;
				$start_fin_date = date('m-Y',strtotime($start_fin_date));
				$select_ytd_query = rtrim($select_ytd_query,',');
				$select_ytd_query = rtrim($select_ytd_query,' , ');
				$where_ytd_condition  = ' and cw_transactions.employee_code="'.$emp_code.'" and date_format(str_to_date(transactions_month, "%m-%Y") , "%Y-%m")  >= date_format(str_to_date("'.$start_fin_date.'", "%m-%Y"), "%Y-%m") and date_format(str_to_date(transactions_month, "%m-%Y") , "%Y-%m")  <= date_format(str_to_date("'.$payslip_month.'", "%m-%Y"), "%Y-%m")';
				$final_ytd_qry = "select $select_ytd_query from $line_table_query $pick_query  where $where_trans $where_ytd_condition";
				$final_ytd_data   = $this->db->query("CALL sp_a_run ('SELECT','$final_ytd_qry')");
				$final_ytd_result = $final_ytd_data->result();
				$final_ytd_data->next_result();
				foreach($final_ytd_result as $ytd_rslt){
					$map_column = explode(",",$print_block_column);
					foreach($map_column as $table_column){
						$map_column   = explode(".",$table_column);
						$ytd_column 	  = $map_column[1]."_ytd";
						$ytd_value        = $ytd_rslt->$ytd_column;
						$replace_ytd_val  = "@".$ytd_column."@";
						$print_design  = str_replace($replace_ytd_val,$ytd_value,$print_design);
					}
				}
			}
			$final_qry = "select $select_query from $line_table_query $pick_query where $where_trans $where_condition $where_month_col";
			$tr_line = "";
			$th_line = "";
			$count = 0;
			$assign_date_formate_list  = array("DMY"=>"d-m-Y","YMD"=>"Y-m-d","MY"=>"F-Y","YM"=>"Y-F","D"=>"d","M"=>"M","Y"=>"Y");
			$split_array = array();
			$split_result = $split_result_arr[$print_id];
			foreach($split_result as $split){
				$split_info  = $split->split_info;
				$split_colum = $split->split_colum;
				$split_array[$split_colum] = $split_info;
			}	
		}
		$map_column = explode(",",$print_block_column);
		$final_qry_array = array('final_qry'=>$final_qry,'split_array'=>$split_array,'map_column'=>$map_column,'print_design'=>$print_design,'assign_date_formate_list'=>$assign_date_formate_list,'block_result'=>$block_result);
		return $final_qry_array;
	}
	public function generate_pdf_bulk($table_data,$folder,$file_name,$set_paper,$paper_size,$pdf_set_password,$file_type,$process_by,$suppressed_data,$pwd_column){
		$folder = strtolower($folder);
		if((int)$suppressed_data === 1){
			$dom = new \DOMDocument();
			$dom->loadHTML($table_data);
			$xpath = new \DOMXPath($dom);
			//loop all <tr> element.
			foreach ($xpath->query('//tr') as $tr) {
			    $tds = $tr->getElementsByTagName('td');
		   		for ($i = 0; $i <= count($tr); $i++) {
			        // get table cell value.
			        $table_cell_value = $tds->item($i)->nodeValue;
					if($table_cell_value === '0.00'){
						$tr->parentNode->removeChild($tr);
					} 
			    }
			}
			// get the result
			$saved_html = preg_replace('~<(?:!DOCTYPE|/?(?:html|body))[^>]*>\s*~i', '', $dom->saveHTML());
		}else{
			$saved_html = $table_data;
		}
		$path = $this->common_generate_pdf($saved_html,$folder,$file_name,$set_paper,$paper_size,$pdf_set_password,$pwd_column);
		return $path;
	}
	public function download_zip(){
		$emp_codes 		= $this->input->post("emp_codes");
		$emp_codes  	= str_replace('"', '', $emp_codes);
		$emp_code_arr  	= explode(',', $emp_codes);
		$path_name  	= strtolower($this->input->post('path_name'));
		$path       	= "./pdf_generation/".$path_name."/";
		$zip        	= new ZipArchive();
		$filename   	= "./pdf_generation/".$path_name.".zip";
		unlink($filename);
		if ($zip->open($filename, ZipArchive::CREATE)!==TRUE) {
			exit("cannot open <$filename>\n");
		}
		$dir = $path;
		if (is_dir($dir)){
			if ($dh = opendir($dir)){
				while (($file = readdir($dh)) !== false){
					if($file != '' && $file != '.' && $file != '..'){
						$file_name = $path.$file.'/';
						if (is_dir($file_name)){
							if ($dhs = opendir($file_name)){
								while (($files = readdir($dhs)) !== false){
									if (in_array($files, $emp_code_arr)){
										if (is_file($file_name.$files)) {
											if($files != '' && $files != '.' && $files != '..'){
												$zip->addFile($file_name.$files);
											}
										}
									}
								}
								closedir($dhs);
							}
						}
					}
				}
				closedir($dh);
			}
		}
		$zip->close();
		$filename = str_replace("./","",$filename);
		echo json_encode(array('success' => true,'filename' => $filename));
	}

	public function view_emp_details($emp_codes_array,$process_by,$process_mode,$folder_arr,$column_name,$emp_rslt,$dw_all,$tbl_name,$folder_tbl_name,$design_name,$process_month){
		$tble_line = "";
		foreach ($emp_codes_array as $key => $emp_code) {
			if((int)$process_mode === 1){
				$folder_name 	   = $folder_arr[$emp_code];
				$emp_name 		   = $emp_rslt[$emp_code]['emp_name'];
			}else
			if((int)$process_mode === 2){
				$payslip_based_on 	= $this->company_info();
				$payslip_based_on	= $payslip_based_on[0]->payslip_based_on;
				$cate_name 	    = $folder_arr[$emp_code][$payslip_based_on];
				$design_name 	= str_replace(' ', '_', $design_name);
				$cate_name 		= str_replace(' ', '_', $cate_name);
				$folder_tbl_name= str_replace(' ', '_', $folder_tbl_name);
				$folder_name 	= 'pdf_generation/'.$folder_tbl_name."/".$design_name."/".$process_month."/".$payslip_based_on."_".$cate_name;
				$emp_name 		= $folder_arr[$emp_code]['emp_name'];
			}
			$folder_name 	   = strtolower(str_replace(' ', '_', $folder_name));
			$file_path         = $folder_name."/".$emp_code.".pdf";
			$exist_file 	   = './'.$folder_name."/".$emp_code.".pdf";
			$exist_process 	   = true;  
			if((int)$process_mode === 2){
				if(file_exists($exist_file)){
					$exist_process = true;
				}else{
					$exist_process = false;
				}
			}

			$file_path           = base_url().$file_path;
			$filename            = dirname(__FILE__).$file_path;
			$filename            = str_replace("application\controllers","",$filename);
			if($exist_process){
				$tble_line .= "	<tr class='gradeU'>
								<td>$emp_code</td>
								<td>$emp_name</td>
								<td>
									<a class='btn btn-primary btn-sm' onclick=pdf_viewer('$file_path')><span class='fa fa-eye' >&nbsp;</span> view </a>

									<a class='btn btn-primary btn-sm' id='download_$emp_code' href='$file_path' download '><span class='fa fa-download' download>&nbsp;</span> Download </a>
								</td>
							</tr>";
			}
		}
		if($emp_codes_array){
			$emp_codes_arr_val = '"'.implode('.pdf","', $emp_codes_array).'.pdf"';
		}
		$tfoot_list ="<tfoot>
				<tr class='gradeU'><td></td><td style='text-align:center;'><a class='btn btn-primary btn-sm' onclick = download_zip('$dw_all','$emp_codes_arr_val') ><span class='fa fa-download' >&nbsp;</span> Download All </a></td><td></td></tr>
			</tfoot>";
		$table_data = "	<table class='table table-striped table-bordered' id='emp_details'>
						<thead>
							<tr>
							<th>Employee Code</th>
							<th>Employee Name</th>
							<th>Action</th>
							</tr>
						</thead>
						<tbody>
							$tble_line
						</tbody>
							$tfoot_list
					</table>";
		return $table_data;
	}
	public function get_pdf_template(){
		$module_name   = $this->input->post("module_name");
		$template_qry  = 'SELECT prime_print_info_id,print_info_name FROM cw_print_design inner join cw_print_info on cw_print_info.prime_print_info_id = cw_print_design.print_design_for WHERE cw_print_info.print_info_module_id = "'.$module_name.'" and  cw_print_info.trans_status = 1 and cw_print_design.trans_status = 1';
		$template_info = $this->db->query("CALL sp_a_run ('SELECT','$template_qry')");
		$template_rslt = $template_info->result_array();
		$template_info->next_result();	
		echo json_encode(array('success' => true,'message' => '', 'template_rslt' => $template_rslt));
	}
	public function pdf_template_wise_data(){
		$pdf_template 	= $this->input->post("pdf_template");
		$column_qry  = 'SELECT concat(pdf_design_for) as pdf_design_for from cw_print_info where trans_status = 1 and prime_print_info_id = "'.$pdf_template.'"';
		$column_info = $this->db->query("CALL sp_a_run ('SELECT','$column_qry')");
		$column_rslt = $column_info->result_array();
		$column_info->next_result();
		$pdf_design_for	= $column_rslt[0]['pdf_design_for'];
		$pdf_design_for = rtrim($pdf_design_for,',');

		$payslip_based_on 	= $this->company_info();
		$payslip_based_on	= $payslip_based_on[0]->payslip_based_on;
		$form_setting_query= 'select label_name,view_name,pick_table,pick_list from cw_form_setting where prime_module_id = "employees" and label_name="'.$payslip_based_on.'" ORDER BY input_for,field_sort asc';
		$form_setting_info = $this->db->query("CALL sp_a_run ('SELECT','$form_setting_query')");
		$form_setting_rslt = $form_setting_info->result_array();
		$form_setting_info->next_result();

		$payslip_pick_table = $form_setting_rslt[0]['pick_table'];
		$payslip_pick_list 	= $form_setting_rslt[0]['pick_list'];
		$payslip_pick_arr 	= explode(',', $payslip_pick_list);
		$payslip_pick_list1 = $payslip_pick_arr[0];
		$payslip_pick_list2 = $payslip_pick_arr[1];
		$filter_qry = "";
		if($payslip_pick_table === "cw_category"){
			$filter_qry 	= " and prime_category_id != 1";
		}
		$column_qry	 = 'SELECT '.$payslip_pick_list.' from '.$payslip_pick_table.' where trans_status = 1 and '.$payslip_pick_list1.' in('.$pdf_design_for.') '.$filter_qry.'';
		$column_info = $this->db->query("CALL sp_a_run ('SELECT','$column_qry')");
		$column_rslt = $column_info->result();
		$column_info->next_result();
		$pick_key    = array_column($column_rslt, $payslip_pick_list1);
		$pick_val    = array_column($column_rslt, $payslip_pick_list2);
		$column_list = array_combine( $pick_key, $pick_val);
		$column_name = $form_setting_rslt[$payslip_based_on]['view_name'];
		$column_list = array("" => "---- $column_name ----") + $column_list;
		echo json_encode(array('success' => true,'message' => '', 'column_rslt' => $column_list));
	}
	public function company_info(){
		$company = 'select * from cw_company_information where cw_company_information.trans_status = 1';
		$comp_info    = $this->db->query("CALL sp_a_run ('SELECT','$company')");
		$comp_result  = $comp_info->result();
		$comp_info->next_result();
		$this->company_info = $comp_result;
		return $comp_result;
	}
}