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/cpaqua.cafsinfotech.in/application/controllers/Custom_base_controller.php
<?php
/**********************************************************
	   Filename: Custom action controller
	Description: Custom Action Controller for custom approval data move to main emoloyee master controller.
		 Author: Jaffer
	 Created on: 28 JAN 2020
	Reviewed by:
	Reviewed on:
	Approved by:
	Approved on:
	-------------------------------------------------------
	Modification Details
	Changed by:
	Change Info:
	-------------------------------------------------------
***********************************************************/

if ( ! defined('BASEPATH')) exit('No direct script access allowed');
require_once("Secure_Controller.php");
ini_set("memory_limit","2048M");
ini_set("max_execution_time","60000");
abstract class Custom_base_controller extends Secure_Controller{
	public $control_name;
	public $logged_id;
	public $logged_role;
	public $logged_user_role;
	public $prime_id;
	public $prime_table;
	public $base_query      = "" ;
	public $logged_zone;
	public $logged_site_location;
	public $logged_site_name;
	public $logged_cluster_name;
	public $quick_link      = array();
	public $table_head      = array();
	public $view_info       = array();
	public $form_info       = array();
	public $rowset_form_info= array();
	public $role_condition;
	public $select_query    = "";
	public $view_select     = "";
	public $all_pick        = array();
	public $master_pick     = array();
	public $email_setting   = array();
	public $company_info    = array();
	public $role_based_condition  = array();
	public $formula_result        = array();

	private $db_conn_id;
	public $module_sts;
	public $module_id;
	public $condition_list   = array();
	public $session_list     = array();
	public $pick_list        = array();
	public $depen_auto_list  = array();
	public $form_condition_list = array();
	public $row_view_list    = array();

	public function __construct($module_id = NULL){
		parent::__construct($module_id);
		$this->module_sts = true;
		$this->db_conn_id = $this->db->conn_id;
		$this->module_id  = $module_id; // UDY CHAG FOR $this->control_name
		$this->control_name       = strtolower($this->router->fetch_class());
		$this->logged_id          = $this->session->userdata('logged_id');
		$this->logged_role        = $this->session->userdata('logged_role');
		$this->logged_user_role   = $this->session->userdata('logged_user_role');
		$this->logged_emp_code    = $this->session->userdata('logged_emp_code');
		$this->logged_area_access = $this->session->userdata('logged_area_access');

		if($this->control_name === "custom_approval"){
			$this->control_name = "custom_employees";
		}

		$this->prime_id           = "prime_".$this->control_name."_id";
		$this->prime_table        = $this->db->dbprefix($this->control_name);
		$this->base_query         = "select @SELECT@ from $this->prime_table";
		$this->select_query       = "$this->prime_table.$this->prime_id,";
		$this->view_select        = "$this->prime_table.$this->prime_id,";
	}

	/******************** UDY _START **********************/	
	public function run_multi_qry($qry){
		/* 1. NEED TO VALID is array  */
		$sts       = false;
		$msg       = "no data processed";
		$data      = [];
		$final_qry = implode(';',array_column($qry ?? [],'qry') ?? []).";";
		if(mysqli_multi_query($this->db_conn_id, $final_qry)) {
			$sts = true;
			$msg = "Qry processed";
			$i   = 0;
			do{
				if($result = mysqli_store_result($this->db_conn_id)){
					while($row = mysqli_fetch_assoc($result)){
						$data[$i][] = $row;
					}
					mysqli_free_result($result);
				}else{
					$data[$i] = [];
				}
				$qry[$i]["rslt"] = json_decode(json_encode($data[$i]));
				$i++;
			}
			while(mysqli_more_results($this->db_conn_id) && mysqli_next_result($this->db_conn_id));
		}
		$final_rslt = [];
		if($sts){
			$final_rslt = array_reduce($qry, function($result, $arr){         
				$result[$arr['return']] = $arr['rslt'];
				return $result;
			}, array());
		}
		return json_decode(json_encode(array("sts"=>$sts,"msg"=>$msg,"rslt"=>$final_rslt)));			
    }
		
	public function page_info(){
		$control_whr_cond     = "";
		$control_join_cond    = "";
		if($this->control_name === "custom_employees"){
			$this->control_name  = 'employees';
			$control_name        = 'employees';
			$control_whr_cond    = ' and cw_form_setting.onboard_input = "1"';
			$control_join_cond   = ' inner join cw_form_setting on cw_form_setting.input_for = cw_form_view_setting.prime_form_view_id';
		}
		
		$order_by = ' ORDER BY input_for,field_sort asc';
	
		$pro_qry   = [];
		$pro_qry[] = array("return"=>"quicklink","qry"=>'select quicklink from cw_modules  where module_id = "'.$this->control_name.'"');
		$pro_qry[] = array("return"=>"form_info","qry"=>'select * from cw_form_setting where prime_module_id = "'.$control_name.'" and field_show = "1" and trans_status = "1" and FIND_IN_SET("'.$this->logged_user_role.'",user_right_for)'.$control_whr_cond.$order_by);
		$pro_qry[] = array("return"=>"freeze_list","qry"=>'select left_freeze,right_freeze from cw_modules  where module_id = "'.$this->control_name.'" and trans_status = "1"');
		$pro_qry[] = array("return"=>"condition_list","qry"=>'select query_list_id,pick_where_condition from cw_pick_base_search where pick_module_id = "'.$this->control_name.'" and pick_query_for = "'.$this->logged_user_role.'" and trans_status = "1"');
		$pro_qry[] = array("return"=>"session_list","qry"=>'select session_value from cw_session_value  where session_for = 1 and trans_status = "1" and session_value != "access_data"');
		$pro_qry[]   = array("return"=>"company_info","qry"=>'select * from cw_company_information where cw_company_information.trans_status = 1');

		if(count($pro_qry ?? []) > 0){
			$page_info_rslt         = $this->run_multi_qry($pro_qry);
			
			if(!$page_info_rslt->sts){
				$this->module_sts   = false;
			}else{
				$condition_rslt     = [];
				$condition_list     = json_decode(json_encode($page_info_rslt->rslt->condition_list),true);
				if(count($condition_list ?? []) > 0){
					$condition_key  = array_column($condition_list ?? [], 'query_list_id');
					$condition_val  = array_column($condition_list ?? [], 'pick_where_condition');
					$condition_rslt = array_combine($condition_key ?? [], $condition_val ?? []);
				}
				$table_info         = [];
				$filter_info        = [];
				$pro_pick_list      = [];

				foreach($page_info_rslt->rslt->form_info as $key => $value){
					$field_type       = (int)$value->field_type;
					$table_show       = (int)$value->table_show;
					$search_show      = (int)$value->search_show;
					$input_view_type  = (int)$value->input_view_type;	

					//FOR MI AND MI FMS AND TIME SHEET
					//FOE DEFAULT MODULE
					if($table_show === 1){
						if($input_view_type !== 3){
							$table_info[$key]   = $value;
						}
					}
					if($search_show === 1){
						$filter_info[$key]  = $value;
					}
					if(($search_show === 1) || ($table_show === 1)){
						if(($field_type === 5) || ($field_type === 7) || ($field_type === 9)){
							$pro_pick_list[$key]  = $value;
						}
					}
				}

				array_multisort(array_column($table_info ?? [], 'table_sort'), SORT_ASC, $table_info);
				$this->quick_link           = $page_info_rslt->rslt->quicklink[0];
				$this->form_info            = $page_info_rslt->rslt->form_info;
				$this->freeze_list          = $page_info_rslt->rslt->freeze_list[0];
				$this->table_head           = $table_info;
				$this->fliter_list          = $filter_info;
				$this->condition_list       = $condition_rslt;
				$this->session_list         = $page_info_rslt->rslt->session_list;
				$this->company_info         = $page_info_rslt->rslt->company_info;
				if(count($pro_pick_list ?? []) > 0){
					$this->get_pick_list_qry($pro_pick_list);
				}
			}
		}
	}
	
	public function search_info(){
		$control_whr_cond     = "";
		$control_join_cond    = "";
		if($this->control_name === "custom_employees"){
			$this->control_name  = 'employees';
			$control_name        = 'employees';
			$control_whr_cond    = ' and cw_form_setting.onboard_input = "1"';
			$control_join_cond   = ' inner join cw_form_setting on cw_form_setting.input_for = cw_form_view_setting.prime_form_view_id';
		}

		$order_by = ' ORDER BY input_for,field_sort asc';
		
		$pro_qry   = [];
		$pro_qry[] = array("return"=>"form_info","qry"=>'select * from cw_form_setting where prime_module_id = "'.$control_name.'" and field_show = "1" and trans_status = "1" and FIND_IN_SET("'.$this->logged_user_role.'",user_right_for)'.$control_whr_cond.$order_by);
		
		$pro_qry[] = array("return"=>"role_condition_list","qry"=>'select where_condition from cw_form_table_search  where query_module_id = "custom_approval" and query_for = "'.$this->logged_user_role.'" and trans_status = "1"');

		$pro_qry[] = array("return"=>"session_list","qry"=>'select session_value from cw_session_value  where session_for = 1 and trans_status = "1" and session_value != "access_data"');
		$pro_qry[]   = array("return"=>"company_info","qry"=>'select * from cw_company_information where cw_company_information.trans_status = 1');

		if(count($pro_qry ?? []) > 0){
			$search_info_rslt = $this->run_multi_qry($pro_qry);
			if(!$search_info_rslt->sts){
				$this->module_sts = false;
			}else{
				$this->form_info      = $search_info_rslt->rslt->form_info;
				$this->session_list   = $search_info_rslt->rslt->session_list;
				//BASIC SEARCH TABLE ROLE BASE CONDITION START
				$role_condition_list  = $search_info_rslt->rslt->role_condition_list[0];

				$where_condition      =  "";
				if($role_condition_list->where_condition){
					$where_condition           = $role_condition_list->where_condition;				
					$where_condition           = str_replace('^','"',$where_condition);
					foreach($this->session_list as $session_val){
						$session_value 	       = $session_val->session_value;
						$saved_session_val     = $this->session->userdata($session_value);
						$exist_val             = "@".$session_value."@";
						$where_condition       = str_replace($exist_val,$saved_session_val,$where_condition);
					}
				}
				$where_condition  = str_replace(',','","',$where_condition);
				$this->role_condition    = $where_condition;
				//BASIC SEARCH TABLE ROLE BASE CONDITION END

				$table_info        = [];
				$filter_info       = [];
				$pro_pick_list     = [];
				foreach($this->form_info as $key => $value){
					$table_show         = (int)$value->table_show;
					$search_show        = (int)$value->search_show;
					$field_type         = (int)$value->field_type;	
					$input_view_type    = (int)$value->input_view_type;	
				
					if($table_show === 1){
						if($input_view_type !== 3){
							$table_info[$key]   = $value;
						}
						if(($field_type === 5) || ($field_type === 7) || ($field_type === 9)){
							$pro_pick_list[$key]  = $value;
						}
					}
					if($search_show === 1){
						$filter_info[$key]  = $value;
					}
					
				}
				$this->table_head           = $table_info;
				$this->fliter_list          = $filter_info;
				$select_key              = array_column($this->table_head ?? [], "label_name");
				$this->select_query     .= implode(",",$select_key ?? []);

				//PICKLIST & AUTOCOMPLETE DATA
				if(count($pro_pick_list ?? []) > 0){
					$this->get_pick_list_qry($pro_pick_list);
				}
			}	
		}
	}

	public function view_info($prime_id){
		$control_whr_cond     = "";
		$control_join_cond    = "";
		if($this->control_name === "custom_employees"){
			$this->control_name  = 'employees';
			$control_name        = 'employees';
			$control_whr_cond    = ' and cw_form_setting.onboard_input = "1"';
			$control_join_cond   = ' inner join cw_form_setting on cw_form_setting.input_for = cw_form_view_setting.prime_form_view_id';
		}

		$order_by = ' ORDER BY input_for,field_sort asc';

		$pro_qry     = [];
		$pro_qry[]   = array("return"=>"form_info","qry"=>'select * from cw_form_setting where prime_module_id = "'.$control_name.'" and field_show = "1" and trans_status = "1" and FIND_IN_SET("'.$this->logged_user_role.'",user_right_for)'.$control_whr_cond.$order_by);

		$pro_qry[]   = array("return"=>"view_info","qry"=>'select DISTINCT cw_form_view_setting.* from cw_form_view_setting '.$control_join_cond.' where prime_view_module_id = "'.$this->control_name.'" and cw_form_view_setting.form_view_show = "1" and cw_form_view_setting.trans_status = "1" and FIND_IN_SET("'.$this->logged_user_role.'",cw_form_view_setting.view_user_right)'.$control_whr_cond.' ORDER BY cw_form_view_setting.form_view_sort asc');

		$pro_qry[]   = array("return"=>"formula_result","qry"=>'select * from cw_form_bind_input where input_cond_module_id = "'.$this->control_name.'" and trans_status = 1');

		//for read only option qry
		$pro_qry[]   = array("return"=>"role_based_condition","qry"=>'select * from cw_role_base_condition where  role_module_id = "'.$this->control_name.'" and find_in_set("'.$this->logged_user_role.'",role_condition_for) and trans_status = 1');

		$pro_qry[]   = array("return"=>"condition_list","qry"=>'select query_list_id,pick_where_condition from cw_pick_base_search where pick_module_id = "'.$this->control_name.'" and pick_query_for = "'.$this->logged_user_role.'" and trans_status = "1"');

		$pro_qry[]   = array("return"=>"session_list","qry"=>'select session_value from cw_session_value  where session_for = 1 and trans_status = "1" and session_value != "access_data"');

		//DHR COMMAND FOR FORM CONDITION LIST (IT ADD FROM LAST) 
		$pro_qry[]   = array("return"=>"form_condition_list","qry"=>'select * from cw_form_condition_formula where cond_module_id = "'.$this->control_name.'" and trans_status = "1" and FIND_IN_SET("'.$this->logged_role.'",condition_for)');
		//Get Company Info
		$pro_qry[]   = array("return"=>"company_info","qry"=>'select * from cw_company_information where cw_company_information.trans_status = 1');
		//DHR COMMAND FOR FORM CONDITION LIST (IT ADD FROM LAST) 		
		if(count($pro_qry ?? []) > 0){
			$view_info_rslt           = $this->run_multi_qry($pro_qry);

			if(!$view_info_rslt->sts){
				$this->module_sts     = false;
			}else{
				$condition_rslt       = [];
				$condition_list       = json_decode(json_encode($view_info_rslt->rslt->condition_list),true);
				if(count($condition_list ?? []) > 0){
					$condition_key    = array_column($condition_list  ?? [], 'query_list_id');
					$condition_val    = array_column($condition_list  ?? [], 'pick_where_condition');
					$condition_rslt   = array_combine($condition_key  ?? [], $condition_val  ?? []);
				}
				//FOR ROLE BASE CONDITIONS
				$role_based_condition = [];
				$role_based_list      = json_decode(json_encode($view_info_rslt->rslt->role_based_condition),true);				
				foreach($role_based_list as $key => $condition) {
					$role_based_condition[$condition['user_condition_type']] = $condition['input_columns'];
				}
				$pro_pick_list         = [];
				$depen_auto_pick_list  = [];
				foreach($view_info_rslt->rslt->form_info as $key => $value){
					$field_type       = (int)$value->field_type;
					$field_show       = (int)$value->field_show;
					$depen_pick_list  = (int)$value->dependent_pick_list;		
					$label_id         = $value->label_name;
					$input_view_type  = (int)$value->input_view_type;
					if($field_show === 1){
						if($input_view_type !== 3){
							$this->view_select  .= "$this->prime_table.$label_id,";
						}
						if($depen_pick_list === 2){
							if(($field_type === 5) || ($field_type === 7) || ($field_type === 9)){
								$pro_pick_list[$key]  = $value;
							}
						}else
						if($depen_pick_list === 1 && ($field_type === 5 || $field_type === 7)){
							$pro_pick_list[$key]  = $value;
						}else
						if($depen_pick_list === 1 && $field_type === 9){
							$depen_auto_pick_list[$key]    = $value;
						}
					}
				}
				//VIEW INFO LIST
				$this->view_info            = $view_info_rslt->rslt->view_info;
				$this->form_info            = $view_info_rslt->rslt->form_info;
				$this->formula_result       = $view_info_rslt->rslt->formula_result;
				$this->role_based_condition = $role_based_condition;
				$this->condition_list       = $condition_rslt;
				$this->session_list         = $view_info_rslt->rslt->session_list;
				$this->company_info         = $view_info_rslt->rslt->company_info;

				//DHR COMMAND FOR FORM CONDITION LIST (IT ADD FROM LAST) 
				$form_condition_rslt     = $view_info_rslt->rslt->form_condition_list;

				if(count($form_condition_rslt ?? []) > 0){
					$this->form_condition_list($form_condition_rslt);
				}
				//DHR COMMAND FOR FORM CONDITION LIST (IT ADD FROM LAST) 
				$this->view_select   = rtrim($this->view_select,',');
				// ONLY FOR EMPLOYEE
				if($this->control_name === "employees"){
					$this->view_select   = $this->view_select .',user_name,password';
				}	
				if(count($pro_pick_list ?? []) > 0){
					$this->get_pick_list_qry($pro_pick_list);
				}
				if(count($depen_auto_pick_list ?? []) > 0){
					if($prime_id){
						$this->get_depen_auto_list_qry($depen_auto_pick_list,$prime_id);
					}
				}
				//FOR ROW SET FORMAT START 
				$row_view_list  = array_filter($this->view_info, function ($value) {			
					return (json_decode(json_encode((int)$value->form_view_type === 3)));
				});

				if(count($row_view_list ?? []) > 0){
					$row_form_list    = array_reduce($this->form_info, function($result, $arr){
						if((int)$arr->input_view_type === 3 && (int)$arr->table_show === 1){
							$result[$arr->input_for][] = $arr;
						};
						return $result;
					}, array());
					//THIS FUNCTION WORK PENDING SO PLEASE DON'T REMOVE IT
					// $this->row_view_list     = $this->get_row_set_list($row_view_list,$row_form_list,$prime_id);
					//THIS FUNCTION WORK PENDING SO PLEASE DON'T REMOVE IT
				}
				//FOR ROW SET FORMAT END
			}	
		}
	}

	public function save_info(){
		$control_whr_cond     = "";
		$control_join_cond    = "";
		if($this->control_name === "custom_employees"){
			$this->control_name  = 'employees';
			$control_name        = 'employees';
			$control_whr_cond    = ' and cw_form_setting.onboard_input = "1"';
			$control_join_cond   = ' inner join cw_form_setting on cw_form_setting.input_for = cw_form_view_setting.prime_form_view_id';
		}
		
		$pro_qry   = [];
		$pro_qry[] = array("return"=>"form_info","qry"=>'select * from cw_form_setting where prime_module_id = "'.$control_name.'" and field_show = "1" and trans_status = "1" and FIND_IN_SET("'.$this->logged_user_role.'",user_right_for)'.$control_whr_cond.' ORDER BY input_for,field_sort asc');
		//Get Company Info
		$pro_qry[]   = array("return"=>"company_info","qry"=>'select * from cw_company_information where cw_company_information.trans_status = 1');
		//Email Count info - check email count exist or not
		$pro_qry[]   = array("return"=>"email_count_info","qry"=>'select count(*) as email_count from cw_modules where cw_modules.module_id = "'.$control_name.'" and cw_modules.email_setting = 1 and cw_modules.trans_status = 1');

		if(count($pro_qry ?? []) > 0){
			$save_info_rslt = $this->run_multi_qry($pro_qry);
			if(!$save_info_rslt->sts){
				$this->module_sts = false;
			}else{
				$this->form_info  = $save_info_rslt->rslt->form_info;
			}	
		}
		$this->company_info       = $save_info_rslt->rslt->company_info;
		$this->email_count        = $save_info_rslt->rslt->email_count_info[0]->email_count;
	}

	public function get_pick_list_qry($pro_pick_list){
		$pro_qry = [];
		foreach($pro_pick_list 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;
			$table_show         = (int)$setting->table_show;
			$search_show        = (int)$setting->search_show;
			$default_value      = (int)$setting->default_value;
			$pick_display       = $setting->pick_display_value;
			$pick_list_import   = (int)$setting->pick_list_import;
			
			if($default_value === 0){
				$default_value = "";
			}
			
			$pick_drop       = array();
			$pick_master     = array();
			$pick_key        = array();
			$pick_val        = array();
			$final_pick      = array();
			$where_condition = "";
			
			//ROLE BASE CONDITION BUILD
			if($this->condition_list[$prime_form_id]){
				$where_condition = $this->condition_list[$prime_form_id];				
				$where_condition = str_replace('^','"',$where_condition);
				foreach($this->session_list as $session_val){
					$session_value 	   = $session_val->session_value;
					$saved_session_val = $this->session->userdata($session_value);
					$exist_val = "@".$session_value."@";
					$where_condition  = str_replace($exist_val,$saved_session_val,$where_condition);
				}
				$where_condition  = str_replace(',','","',$where_condition);
			};

			if($field_isdefault === 1){	 // UDY NEED CHECK
				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];
						$imp_pick_list_val_1 = $pick_list_val_1;
						$imp_pick_list_val_2 = $pick_list_val_2;
						if($pick_display){
							$pick_list = "$pick_list_val_1,CONCAT_WS(\" ~ \", $pick_display) as $pick_list_val_2";
							$pick_qry  = 'select '.$pick_list.' from '.$pick_table.' where trans_status = 1 '.$where_condition;
							$pick_qry  = rtrim($pick_qry," ");
							$pro_qry[] = array("return"=>$label_id,"qry"=>$pick_qry,"pro_info"=>array('prime_form_id' => $prime_form_id,'label_id' => $label_id,'label_name' => $label_name,'field_type' => $field_type,'pick_list_type' => $pick_list_type,'pick_list_val_1' => $pick_list_val_1,'pick_list_val_2' => $pick_list_val_2,'table_show' => $table_show,'search_show' => $search_show,'field_isdefault' => $field_isdefault,));
						}
					}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_qry        = 'select '.$pick_list_val_1.','.$pick_list_val_2.' from '.$pick_table.' where '.$pick_list_val_3.' = 1'. $where_condition;
						$pick_qry        = rtrim($pick_qry," ");
						$pro_qry[]       = array("return"=>$label_id,"qry"=>$pick_qry,"pro_info"=>array('prime_form_id' => $prime_form_id,'label_id' => $label_id,'label_name' => $label_name,'field_type' => $field_type,'pick_list_type' => $pick_list_type,'pick_list_val_1' => $pick_list_val_1,'pick_list_val_2' => $pick_list_val_2,'table_show' => $table_show,'search_show' => $search_show,'field_isdefault' => $field_isdefault,));
					}
				}else
				if($field_type === 9){
					$pick_display_val  = "CONCAT(".str_replace(",",'," ~ ",',$pick_display).") as auto_list_pick";
					$pick_qry          = 'select '.$auto_prime_id.','.$auto_dispaly_value.','.$pick_display_val .' from '. $pick_table .' where trans_status = 1';
					$pick_qry          = rtrim($pick_qry," ");
					$pro_qry[]         = array("return"=>$label_id,"qry"=>$pick_qry,"pro_info"=>array('prime_form_id' => $prime_form_id,'label_id' => $label_id,'label_name' => $label_name,'field_type' => $field_type,'auto_prime_id' => $auto_prime_id,'auto_dispaly_value' => $auto_dispaly_value,'table_show' => $table_show,'search_show' => $search_show,'field_isdefault' => $field_isdefault,));
				}
			}
		}
		if(count($pro_qry ?? []) > 0){
			$pick_list_info = $this->run_multi_qry($pro_qry);
			if(!$pick_list_info->sts){
				$this->module_sts = false;
			}else{
				$pick_list_rslt = [];
				$pick_list_rslt = json_decode(json_encode($pick_list_info->rslt),true);

				foreach($pick_list_rslt as $pick_key=>$list_info){
					$is_exist_pro_qry = array_search($pick_key, array_column($pro_qry, 'return'));
					if($pro_qry[$is_exist_pro_qry]){
						//pro info array format
						$pro_info         = $pro_qry[$is_exist_pro_qry]["pro_info"];

						$prime_form_id    = $pro_info['prime_form_id'];
						$label_id         = $pro_info['label_id'];
						$label_name       = $pro_info['label_name'];
						$field_type       = (int)$pro_info['field_type'];
						$table_show       = (int)$pro_info['table_show'];
						$search_show      = (int)$pro_info['search_show'];
						$field_isdefault  = (int)$pro_info['field_isdefault'];

						if($field_type === 5 || $field_type === 7){
							$pick_list_type     = (int)$pro_info['pick_list_type'];
							$pick_list_val_1    = $pro_info['pick_list_val_1'];
							$pick_list_val_2    = $pro_info['pick_list_val_2'];
							// if($pick_list_type === 1){
								$pick_key   = array_column($list_info ?? [], $pick_list_val_1);
								$pick_val   = array_column($list_info ?? [], $pick_list_val_2);
								$final_pick = array_combine( $pick_key ?? [], $pick_val ?? []);
								if($final_pick){
									$final_pick = array("" => "---- $label_name ----") + $final_pick;
								}
							// }

						}else
						if($field_type === 9){
							$auto_prime_id      = $pro_info['auto_prime_id'];
							$auto_dispaly_value = $pro_info['auto_dispaly_value'];

							$pick_key   = array_column($list_info ?? [], $auto_prime_id);
							$pick_val   = array_column($list_info ?? [], 'auto_list_pick');
							$final_pick = array_combine( $pick_key ?? [], $pick_val ?? []);
						}						
						$this->pick_list[$label_id] = array('label_id'=> $label_id, 'label_name'=> $label_name, 'field_isdefault'=> $field_isdefault, 'array_list'=> $final_pick, 'field_type'=> $field_type,'prime_form_id'=>$prime_form_id);
					}
				}
			}
		}
	}

	//FOR DEPENDENT AUTOCOMPLETE START (ONLY USING FOR FORM EDIT OPTION)
	public function get_depen_auto_list_qry($depen_auto_pick_list,$prime_id){
		$pro_qry = [];
		foreach($depen_auto_pick_list 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;
			$table_show         = (int)$setting->table_show;
			$search_show        = (int)$setting->search_show;
			$default_value      = (int)$setting->default_value;
			$pick_display       = $setting->pick_display_value;
			$pick_list_import   = (int)$setting->pick_list_import;

			if($default_value === 0){
				$default_value = "";
			}
			
			$pick_drop       = array();
			$pick_master     = array();
			$pick_key        = array();
			$pick_val        = array();
			$final_pick      = array();
			$where_condition = "";
			
			//ROLE BASE CONDITION BUILD
			if($this->condition_list[$prime_form_id]){
				$where_condition = $this->condition_list[$prime_form_id];				
				$where_condition = str_replace('^','"',$where_condition);
				foreach($this->session_list as $session_val){
					$session_value 	   = $session_val->session_value;
					$saved_session_val = $this->session->userdata($session_value);
					$exist_val = "@".$session_value."@";
					$where_condition  = str_replace($exist_val,$saved_session_val,$where_condition);
				}
				$where_condition  = str_replace(',','","',$where_condition);
			};

			if($field_isdefault === 1){	 // UDY NEED CHECK
				if($field_type === 9){
					$pick_display      = $pick_table.'.'.$pick_display;
					$pick_display      = str_replace(",",",$pick_table.",$pick_display);
					$pick_display_val  = "CONCAT(".str_replace(",",'," ~ ",',$pick_display).") as auto_list_pick";
					$pick_qry          = 'select '.$pick_table.'.'.$auto_prime_id.','.$pick_table.'.'.$auto_dispaly_value.','.$pick_display_val .' from '. $pick_table .' inner join '.$this->prime_table. ' on '.$this->prime_table.'.'.$label_id.' = '. $pick_table .'.'.$auto_prime_id.' where '.$pick_table.'.trans_status = 1 and '.$this->prime_table.'.trans_status = 1 and '.$this->prime_table.'.'.$this->prime_id.' = "'.$prime_id.'"';
					$pick_qry          = rtrim($pick_qry," ");

					$pro_qry[]         = array("return"=>$label_id,"qry"=>$pick_qry,"pro_info"=>array('prime_form_id' => $prime_form_id,'label_id' => $label_id,'label_name' => $label_name,'field_type' => $field_type,'auto_prime_id' => $auto_prime_id,'auto_dispaly_value' => $auto_dispaly_value,'table_show' => $table_show,'search_show' => $search_show,'field_isdefault' => $field_isdefault,));
				}
			}
		}

		if(count($pro_qry ?? []) > 0){
			$pick_list_info = $this->run_multi_qry($pro_qry);
			if(!$pick_list_info->sts){
				$this->module_sts = false;
			}else{
				$pick_list_rslt = [];
				$pick_list_rslt = json_decode(json_encode($pick_list_info->rslt),true);

				foreach($pick_list_rslt as $pick_key=>$list_info){
					$is_exist_pro_qry = array_search($pick_key, array_column($pro_qry ?? [], 'return'));
					if($pro_qry[$is_exist_pro_qry]){
						//pro info array format
						$pro_info         = $pro_qry[$is_exist_pro_qry]["pro_info"];

						$prime_form_id    = $pro_info['prime_form_id'];
						$label_id         = $pro_info['label_id'];
						$label_name       = $pro_info['label_name'];
						$field_type       = (int)$pro_info['field_type'];
						$table_show       = (int)$pro_info['table_show'];
						$search_show      = (int)$pro_info['search_show'];
						$field_isdefault  = (int)$pro_info['field_isdefault'];

						if($field_type === 9){
							$auto_prime_id      = $pro_info['auto_prime_id'];
							$auto_dispaly_value = $pro_info['auto_dispaly_value'];

							$pick_key           = array_column($list_info ?? [], $auto_prime_id);
							$pick_val           = array_column($list_info ?? [], 'auto_list_pick');
							$final_pick         = array_combine( $pick_key ?? [], $pick_val ?? []);
						}						
						$this->depen_auto_list[$label_id] = $final_pick;
					}
				}
			}
		}
	}
	//FOR DEPENDENT AUTOCOMPLETE END (ONLY USING FOR FORM EDIT OPTION) 

	//FOR VIEW FORM CONDITION LIST(BY BUILD A JS CODE)
	public function form_condition_list($form_condition_rslt){
		$load_script = "";
		foreach($form_condition_rslt as $condition){			
			$prime_cond_id         = $condition->prime_cond_id;
			$cond_module_id        = $condition->cond_module_id;
			$condition_label_name  = strtolower(str_replace(" ","_",$condition->condition_label_name));
			$condition_type        = (int)$condition->condition_type;
			$condition_check_form  = explode(",",$condition->condition_check_form ?? "");
			$condition_bind_to     = explode(",",$condition->condition_bind_to ?? "");
			$on_bind_inputs        = "";
			$on_change_inputs      = "";
			$on_blur_inputs        = "";
			
			foreach($condition_check_form as $label_name){
				$cond_from_qry  = 'select field_type,label_name from cw_form_setting  where prime_module_id = "'.$this->control_name.'" and label_name in ("'.$label_name.'") ORDER BY input_for,field_sort asc';
				$cond_from_qry  = rtrim($cond_from_qry," ");

				$pro_qry[]      = array("return"=>$label_name,"qry"=>$cond_from_qry,"pro_info"=>array('label_name' => $label_name,'prime_cond_id' => $prime_cond_id,'cond_module_id' => $cond_module_id,'condition_label_name' => $condition_label_name,'condition_type' => $condition_type,'condition_check_form' => $condition_check_form,'condition_bind_to' => $condition_bind_to,));			

			}
		}
		if(count($pro_qry ?? []) > 0){
			$form_cond_info = $this->run_multi_qry($pro_qry);
			if(!$form_cond_info->sts){
				$this->module_sts = false;
			}else{
				$form_cond_rslt = [];
				$form_cond_rslt = json_decode(json_encode($form_cond_info->rslt),true);

				foreach($form_cond_rslt as $cond_key=>$cond_info){
					$is_exist_pro_qry = array_search($cond_key, array_column($pro_qry ?? [], 'return'));
					if($pro_qry[$is_exist_pro_qry]){
						//pro info array format
						$pro_info         = $pro_qry[$is_exist_pro_qry]["pro_info"];

						$field_type            = (int)$cond_info[0]['field_type'];
						$label_name            = $pro_info['label_name'];
						$prime_cond_id         = $pro_info['prime_cond_id'];
						$cond_module_id        = $pro_info['cond_module_id'];
						$condition_label_name  = $pro_info['condition_label_name'];
						$condition_type        = (int)$pro_info['condition_type'];
						$condition_check_form  = $pro_info['condition_check_form'];
						$condition_bind_to     = $pro_info['condition_bind_to'];

						/*============ 
							NOTE:  AUTO COMPLETE BOX & FILE UPLOAD BOX ARE NOT INCLUDED IN ON LOAD SCRIPT
						============*/
						if(($field_type === 1) || ($field_type === 2) || ($field_type === 3) || ($field_type === 11) || ($field_type === 12)){
							$on_bind_inputs  .= "$label_name,";
						}else
						if(($field_type === 5) || ($field_type === 6) || ($field_type === 7) || ($field_type === 9)){
							$on_change_inputs  .= "$label_name,";
						}
						if($condition_type === 2){
							if(($field_type === 4) || ($field_type === 13)){
								$on_blur_inputs  .= "$label_name,";
							}
						}
					}
					$check_input = "";
					if($on_bind_inputs){
						$on_bind_input = rtrim($on_bind_inputs,',');
						$on_bind_input = str_replace(",",",#",$on_bind_input);
						$on_bind_input = "#".$on_bind_input;
						$check_input .= "$on_bind_input";
					}	
					
					if($on_change_inputs){
						$on_change_input = rtrim($on_change_inputs,',');
						$on_change_input = str_replace(",",",#",$on_change_input);
						$on_change_input = "#".$on_change_input;
						if($check_input){
							$check_input .= ",$on_change_input";
						}else{
							$check_input .= "$on_change_input";
						}

					}
					
					if($on_blur_inputs){
						$on_blur_input = rtrim($on_blur_inputs,',');
						$on_blur_input = str_replace(",",",#",$on_blur_input);
						$on_blur_input = "#".$on_blur_input;
						if($check_input){
							$check_input .= ",$on_blur_input";
						}else{
							$check_input .= "$on_blur_input";
						}
					}
					
					$send_for  = implode(",",$condition_check_form ?? []);
					$send_data = "prime_cond_id:$prime_cond_id,for_input:'$send_for',";
					foreach($condition_check_form as $check_form){
						$send_data .= "$check_form:$('#$check_form').val(),";
					}
					$send_data = "{".rtrim($send_data,',')."}";
					
					//BIND VALUE FROM DATABASE TABLE
					if($condition_type === 1){
						if($on_bind_input){
							$fill_input = "";
							foreach($condition_bind_to as $bind_to){
								$fill_val    = "ui.item.".$bind_to;
								$fill_input .= "$('#$bind_to').val($fill_val);\n";
							}
							$send_url     = site_url("custom_approval/bind_autocomplete_suggest");
							$load_script .= "$('$on_bind_input').autocomplete({
												source: function(request, response) {
													$.getJSON('$send_url',{term:request.term, prime_cond_id:$prime_cond_id },response);
												},
												minChars:2,
												autoFocus: true,
												delay:10,
												appendTo: '.modal-content',
												select: function(e, ui) {
													$fill_input
													return false;
												}
											});\n";
						}
						if($on_change_input){
							$fill_input = "";
							foreach($condition_bind_to as $bind_to){
								$fill_val    = "rslt[0].".$bind_to;
								$fill_input .= "$('#$bind_to').val($fill_val);\n";
							}
							
							$send_url  = site_url("custom_approval/bind_change_suggest");
							$load_script .= "$('$on_change_input').change(function(){
												var isValid = true;
												$('$on_change_input').each(function() {
												if ($(this).val() === '') {
													isValid = false;
													$(this).addClass('error');
												}else{
													$(this).removeClass('error');
												}
												});
												if(isValid){
													$.ajax({
														type: 'POST',
														url: '$send_url',
														data:$send_data,
														success: function(data) {
															var rslt = JSON.parse(data);
															$fill_input
														}
													});
												}
											});\n";
						}
					}else  //FOR WRITE CONDITIONS TYPE
					if($condition_type === 2){
						$fill_input = "";
						foreach($condition_bind_to as $bind_to){
							$fill_val    = "rslt.".$bind_to;
							$fill_input .= "$('#$bind_to').val($fill_val);\n $('#$bind_to').trigger('change');";
						}
						$send_url        = site_url("custom_approval/calculation_suggest");
						$encKey          = $this->generateKey();
						//CODE FOR JS FUNCTION ADD
						$function_info = "function $condition_label_name(input_id){
											var isValid = true;
											$('#'+input_id).each(function() {
												if ($(this).val() === '') {
													isValid = false;
													$(this).addClass('error');
												}else{
													$(this).removeClass('error');
												}
											});
											
											if(isValid){
												var encKey  = '$encKey';
												var encData = encrypt(encKey,$send_data);
												$.ajax({
													type: 'POST',
													url: '$send_url',
													data:encData,
													success: function(data) {
														var rslt = JSON.parse(data);
														$fill_input
													}
												});
											}
										}";
						if($on_bind_input){
							$load_script .= "$('$on_bind_input').bind('keyup blur change', function(e) {
												var input_id = $(this).attr('id');
												$condition_label_name(input_id);
											});\n";
						}
						if($on_change_input){
							$load_script .= "$('$on_change_input').change(function(){
												var input_id = $(this).attr('id');
												$condition_label_name(input_id);
											});\n";
						}
						if($on_blur_input){
							$load_script .= "$('$on_blur_input').blur(function(){
												var input_id = $(this).attr('id');
												$condition_label_name(input_id);
											});\n";
						}
						$load_script .= "\n$function_info\n";
					}
					
				}
			}
		}
				
		$load_script .= "\nlet status      = document.getElementsByClassName('modal-title')[0];
            window.addEventListener('load', function(e){
                if (navigator.onLine) {
                    //status.innerHTML = 'User is online';
                    status.classList.add('success');
                    status.classList.add('success');
                } else {
                    status.innerHTML = 'Please Check Your Internet Connection...';
                    status.classList.remove('success');
                    status.classList.add('internet_modal_error');                    
                }
            }, false);            
            window.addEventListener('online', function(e){
               // status.innerHTML = 'User is back online';
                status.classList.remove('internet_modal_error');
                status.classList.add('success');
                location.reload();
            }, false);            
            window.addEventListener('offline', function(e){
                status.innerHTML = 'Please Check Your Internet Connection...';
                status.classList.remove('success');
                status.classList.add('internet_modal_error');
            }, false);\n
            $('.select2').on('select2:select', function(e){
				 $(this).focus();
			     e.preventDefault(); 
			});\n";
		if($load_script){
			$this->form_condition_list[] = $load_script;
		}		
	}

	public function get_row_set_list($row_view_list,$row_form_list,$prime_id){
		foreach($row_view_list as $view){
			$prime_form_view_id   = $view->prime_form_view_id;
			$prime_view_module_id = $view->prime_view_module_id;
			$form_view_label_name = $view->form_view_label_name;
			
			$div_id       	      = $form_view_label_name."_div_".$prime_form_view_id;
			$table_id             = $form_view_label_name."_tbl_".$prime_form_view_id;
			$table_name           = $this->control_name."_".$form_view_label_name;
			$row_prime_id         = "prime_".$table_name."_id";
			$table_name           =  $this->db->dbprefix($table_name);
			$table_prime_id       = "prime_".$this->control_name."_id";

			$table_head           = array();
			$thead_line           = "";
			$select_query         = "$table_name.$row_prime_id,$table_name.$table_prime_id,";
			$input_form_list      = $row_form_list[$prime_form_view_id];

			foreach($input_form_list 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;
				$date_type 	 		= $form->date_type;
				if((int)$field_type === 4){
					if((int)$date_type === 1){
						$select_query .= 'DATE_FORMAT('.$table_name.'.'.$label_name.', "%d-%m-%Y") as '.$label_name.' , ';
					}else{
						$select_query .= "$table_name.$label_name , ";
					}
				}else
				if((int)$field_type === 13){
					$select_query .= 'DATE_FORMAT('.$table_name.'.'.$label_name.', "%d-%m-%Y H:i:s") 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{
					$select_query .= "$table_name.$label_name , ";
				}
				$table_head[] = $label_name;
				$thead_line  .= "<th>$view_name</th>";
			}
			$thead            = "<tr>$thead_line<th>Option</th></tr>";
			$select_query     = rtrim($select_query,',');
			$select_query     = rtrim($select_query,' , ');
			$order_qry        = 'order by abs('.$table_name.'.'.$row_prime_id.') desc';

			$final_qry        = 'select '.$select_query.' from '.$table_name.' '.$pick_query.' where '.$table_name.'.'.$table_prime_id.' = "'.$prime_id.'" and '.$table_name.'.trans_status = "1" '.$order_qry;

			$pro_qry[$prime_form_view_id]        = array("return"=>$prime_form_view_id,"qry"=>$final_qry,"pro_info"=>array('table_head' => $table_head,'row_prime_id' => $row_prime_id,'form_view_label_name' => $form_view_label_name,'prime_form_view_id' => $prime_form_view_id,'table_id' => $table_id,'div_id' => $div_id,'thead' => $thead,));
			
		}
		
		if(count($pro_qry ?? []) > 0){
			$row_set_info = $this->run_multi_qry($pro_qry);
			if(!$row_set_info->sts){
				$this->module_sts = false;
			}else{
				$row_input_rslt  = [];
				$row_input_rslt  = json_decode(json_encode($row_set_info->rslt));

				$tr_line         = "";
				$row_view_array  = [];
				foreach($row_input_rslt as $key => $data){
					$td_line                = "";
					$pro_info               = $pro_qry[$key]["pro_info"];
					
					$table_head             = $pro_info['table_head'];
					$row_prime_id           = $pro_info['row_prime_id'];
					$form_view_label_name   = $pro_info['form_view_label_name'];
					$prime_form_view_id     = $pro_info['prime_form_view_id'];
					$table_id               = $pro_info['table_id'];
					$div_id                 = $pro_info['div_id'];
					$thead                  = $pro_info['thead'];
					if($prime_form_view_id){
						if(count((array)$data ?? []) > 0){
							foreach($table_head as $label){
								$datas_exp        = $data->$label;
								$rowset_form_info = $this->get_rowset_form_info();
								$field_type       = $rowset_form_info[$label]['field_type'];
								$value            = $data->$label;
								if((int)$field_type === 4 || (int)$field_type === 13){
									if($value === "00-00-0000" || $value === 'NULL' || $value === "00-00-0000 00:00:00"){
										$td_line .= "<td></td>";
									}else{
										$td_line .= "<td>$value</td>";
									}
								}else
								if((int)$field_type === 8){//textbox only
									$value = str_replace("~",'"',$value);
									$value = str_replace("`","'",$value);
									$value = str_replace("^","&",$value);
									$td_line .= "<td>$value</td>";
								}else
								if((int)$field_type === 10){
									if($datas_exp === "" || $datas_exp === NULL){
										$td_line .= "<td>No Preview Available</td>";
									}else{
										$td_line .= "<td><a href='$datas_exp' format.pdf='' target='_blank' style='cursor: pointer;''><i class='fa fa-download' style='color:red;' aria-hidden='true'></i></a></td>";
									}
								}else{
									$td_line .= "<td>$value</td>";
								}
							}
							
							$row_id   = $data->$row_prime_id;
							$tab_name = $this->control_name."_".$form_view_label_name;
							$illustration_btn = "";
							if($form_view_label_name === "eligibility_information"){
								$illustration_btn   = "<a class='btn btn-edit btn-xs row_btn' onclick = add_illustration('$row_id','$tab_name','$prime_form_view_id');>Illustration</a>";
							}
							$edit_btn   = "<a class='btn btn-edit btn-xs row_btn' onclick = row_set_edit('$row_id','$tab_name','$prime_form_view_id','$prime_id');>Edit</a>";
							$remove_btn = "<a class='btn btn-danger btn-xs row_btn' onclick = row_set_remove('$row_id','$tab_name','$prime_form_view_id','$prime_id');>Delete</a>";
							$tr_line = "<tr>$td_line<td>$illustration_btn $edit_btn $remove_btn</td></tr>";
						}
						$row_set_view    = "<table id='$table_id' class='table table-bordered' style='background-color: #FFFFFF; box-shadow: none;'>
										<thead>$thead</thead>
										<tbody>$tr_line</tbody>
									</table>";
						$row_view_array[$prime_form_view_id]  = array('div_id' => $div_id, 'table_id' => $table_id,'row_set_view'=>$row_set_view);
					}
				}
				return $row_view_array;
			}
		}
	}
	/******************** UDY END *************************/
	
	//PROVIDE BASE DATA FOR MODULE
	public function collect_base_info(){
		$this->control_name      = 'employees';
		$this->logged_id         = $this->session->userdata('logged_id');
		$this->logged_role       = $this->session->userdata('logged_role');
		$this->logged_user_role  = $this->session->userdata('logged_user_role');
		$this->logged_emp_code   = $this->session->userdata('logged_emp_code');
		$this->logged_zone       = $this->session->userdata('logged_zone');
		$this->logged_site_location = $this->session->userdata('logged_site_location');
		$this->logged_site_name     = $this->session->userdata('logged_site_name');
		$this->logged_cluster_name  = $this->session->userdata('logged_cluster_name');
		$this->prime_id          = "prime_custom_".$this->control_name."_id";
		$this->prime_table       = "cw_custom_".$this->control_name;
		$this->base_query        = "select @SELECT@ from $this->prime_table";
		$this->select_query      = "$this->prime_table.$this->prime_id,";
		$this->get_quick_link();
		$this->get_table_head();
		$this->get_view_info();
		$this->get_form_info();
		$this->get_rowset_form_info();
		$this->get_role_condition();
		$this->get_query_and_drop();
		$this->get_condition();
		$this->get_freeze_count();
		$this->get_email_setting();
		$this->company_info();
		$this->role_based_condition();
		$this->coloring_label();
	}
	
	/* ==============================================================*/
	/* =================== BASE FUNCTIONS - START ===================*/
	/* ==============================================================*/
	// PROVIDE QUICK LINK LIST VIEW
	public function get_quick_link(){
		$link_query   = 'select quicklink from cw_modules  where module_id = "'.$this->control_name.'"';
		$link_info    = $this->db->query("CALL sp_a_run ('SELECT','$link_query')");
		$link_result  = $link_info->result();
		$link_info->next_result();
		$this->quick_link = $link_result[0];
	}
	
	// PROVIDE TABLE VIEW
	public function get_table_head(){
		$table_query = 'select label_name,view_name,field_type,date_type from cw_form_setting  where prime_module_id = "'.$this->control_name.'" and input_view_type IN (1,2) and table_show = "1" and trans_status =1  ORDER BY table_sort asc';
		$table_info = $this->db->query("CALL sp_a_run ('SELECT','$table_query')");
		$result   = $table_info->result();
		$table_info->next_result();
		$this->table_head    = $result;
		$select_key          = array_column($result ?? [], "label_name");
		$this->select_query .= implode(",",$select_key ?? []);
	}
	
	// PROVIDE MODLE VIEWS
	public function get_view_info(){
		$view_query = 'select * from cw_form_view_setting  where prime_view_module_id = "'.$this->control_name.'" and form_view_show = "1" and trans_status =1 and FIND_IN_SET("'.$this->logged_user_role.'",view_user_right) ORDER BY form_view_sort asc';
		$view_data   = $this->db->query("CALL sp_a_run ('SELECT','$view_query')");
		$view_result = $view_data->result();
		$view_data->next_result();
		$this->view_info = $view_result;
	}
	
	// PROVIDE TABLE VIEW
	public function get_freeze_count(){
		$freeze_table_query = 'select left_freeze,right_freeze from cw_modules  where module_id = "'.$this->control_name.'" and trans_status = "1"';
		$freeze_table_info = $this->db->query("CALL sp_a_run ('SELECT','$freeze_table_query')");
		$freeze_result   = $freeze_table_info->result();
		$freeze_table_info->next_result();
		return $freeze_result;
	}
	
	// PROVIDE MODLE FORM INPUT VIEWS
	public function get_form_info(){
		$from_query = 'select * from cw_form_setting  where prime_module_id = "'.$this->control_name.'" and field_show = "1" and trans_status =1 and FIND_IN_SET("'.$this->logged_user_role.'",user_right_for) 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();
		$this->form_info = $form_result;
	}
	public function get_rowset_form_info(){
		if($this->control_name === "custom_employees"){
			$this->control_name      = 'employees';
		}
		$table_query = 'select label_name,view_name,field_type from cw_form_setting  where prime_module_id = "'.$this->control_name.'" and input_view_type IN (3) and table_show = "1" and trans_status = "1" and FIND_IN_SET("'.$this->logged_user_role.'",user_right_for) ORDER BY table_sort asc';

		$table_info = $this->db->query("CALL sp_a_run ('SELECT','$table_query')");
		$result   = $table_info->result_array();
		$table_info->next_result();
		$result = array_map(function($v){
		    return [$v['label_name'] => $v];
		}, $result);
		$result = call_user_func_array('array_merge', $result);
		$this->rowset_form_info    = $result;		
		return $result;
	}
	
	// PROVIDE MODLE TABLE ROLE BASED SEARCH
	public function get_role_condition(){

		$table_search_query = 'select where_condition from cw_form_table_search  where query_module_id = "custom_approval" and query_for = "'.$this->logged_user_role.'" and trans_status = "1"';
		$table_search_data   = $this->db->query("CALL sp_a_run ('SELECT','$table_search_query')");
		$table_search_result = $table_search_data->result();
		$table_search_data->next_result();
		if($table_search_result){
			$where_condition  = str_replace('^','"',$table_search_result[0]->where_condition);
			$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"){
					$saved_session_val = $this->session->userdata($session_value);
					$exist_val = "@".$session_value."@";
					$where_condition  = str_replace($exist_val,$saved_session_val,$where_condition);
				}
			}
			$where_condition  = str_replace(',','","',$where_condition);
			if($this->logged_user_role == 4){
				$this->role_condition = $where_condition;
			}else{
				$this->role_condition = $where_condition;
			}
			//echo "BSK :: $this->role_condition"; die;
		}
	}
	
	// PROVIDE ROLE BASED PICK LIST /*UDY-13-02-2020*/
	public function get_role_based_picklist($query_list_id,$module_id){
		$pick_query = 'select pick_where_condition from cw_pick_base_search  where pick_module_id = "'.$module_id.'" and query_list_id = "'.$query_list_id.'" and pick_query_for = "'.$this->logged_user_role.'" and trans_status = "1"';
		$pick_data   = $this->db->query("CALL sp_a_run ('SELECT','$pick_query')");
		$pick_result = $pick_data->result();
		$pick_data->next_result();
		$where_condition = "";
		if($pick_result){
			$where_condition  = str_replace('^','"',$pick_result[0]->pick_where_condition);
			$where_condition  = explode(',', $where_condition ?? "");
			$where_condition  = implode('","', $where_condition ?? []);
			$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"){
					$saved_session_val = $this->session->userdata($session_value);
					$exist_val = "@".$session_value."@";
					$where_condition  = str_replace($exist_val,$saved_session_val,$where_condition);
				}
			}
		}
		$where_condition  = str_replace(',','","',$where_condition);
		return $where_condition;
	}
	//PROVIDE SEARCH AND VIEW SELECT QUERY, DROPDOWN VALUES AND SEARCH FLITERS	
	public function get_query_and_drop(){
		$this->view_select  = "$this->prime_table.$this->prime_id,";
		foreach($this->form_info 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;
			$default_value      = (int)$setting->default_value;
			$pick_display       = $setting->pick_display_value;
			$pick_list_import   = (int)$setting->pick_list_import;
			if($default_value === 0){
				$default_value = "";
			}
			$pick_drop   = array();
			$pick_master = array();
			$pick_key    = array();
			$pick_val    = array();
			$final_pick  = array();
			if($field_isdefault === 1){				
				if(($field_type === 5) || ($field_type === 7)){
					$where_condition = $this->get_role_based_picklist($prime_form_id,$prime_module_id);
					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];
						$imp_pick_list_val_1 = $pick_list_val_1;
						$imp_pick_list_val_2 = $pick_list_val_2;
						if($pick_display){
							$pick_list = "$pick_list_val_1,CONCAT_WS(\" - \", $pick_display) as $pick_list_val_2";
						}
						if($pick_table === "cw_category"){
							$pick_query = "select $pick_list from $pick_table where trans_status = 1 and prime_category_id != 1 $where_condition";
						}else{
							$pick_query = "select $pick_list from $pick_table where trans_status = 1 $where_condition";
						}
						$pick_data   = $this->db->query("CALL sp_a_run ('SELECT','$pick_query')");
						$pick_result = $pick_data->result();
						$pick_data->next_result();
						if($pick_result){
							$pick_key   = array_column($pick_result ?? [], $pick_list_val_1);
							$pick_val   = array_column($pick_result ?? [], $pick_list_val_2);
							$final_pick = array_combine( $pick_key ?? [], $pick_val ?? []);

						}
						$final_pick = str_replace("~",'"',$final_pick);
						$final_pick = str_replace("`","'",$final_pick);
						$final_pick = str_replace("^","&",$final_pick);
						$final_pick = array("" => "---- $label_name ----") + $final_pick;
						$this->master_pick[$label_id]   = $final_pick;
						 //array_unshift($final_pick,"---- $label_name ----");
						$this->all_pick[$prime_form_id] = $final_pick;

						//IMPORT FUNCTION FOR MONTHLY INPUT FMS MODULE TO EXPORT A PICKLIST DATA(FOR USER IMPORT THAT EXPORTED DATA IN TIME SHEET MODULE)
						$imp_pick_list     = ""; 
						if($pick_list_import === 1){
							$imp_pick_list = "$imp_pick_list_val_1,CONCAT_WS(\" - \", $pick_display) as $imp_pick_list_val_2";
						}else
						if($pick_list_import === 2){
							$imp_pick_list = "$imp_pick_list_val_2 as $imp_pick_list_val_1,CONCAT_WS(\" - \", $pick_display) as $imp_pick_list_val_2";
						}
						if($imp_pick_list){
							$pick_imp_qry    = "select $imp_pick_list from $pick_table where trans_status = 1";
							$pick_imp_data   = $this->db->query("CALL sp_a_run ('SELECT','$pick_imp_qry')");
							$pick_imp_rslt   = $pick_imp_data->result();
							$pick_imp_data->next_result();

							// if($label_name === "role"){
							// 	$label_name  = "category";
							// }
							$pick_imp_key        = array_column($pick_imp_rslt ?? [], $imp_pick_list_val_2);
							$pick_imp_val        = array_column($pick_imp_rslt ?? [], $imp_pick_list_val_1);
							// if($pick_list_import === 1){
							// 	$pick_imp_key    = array_column($pick_result, $pick_list_val_2);
							// 	$pick_imp_val    = array_column($pick_result, $pick_list_val_1);
							// }
							$final_imp_pick      = array_combine( $pick_imp_key ?? [], $pick_imp_val ?? []);
							$this->export_pick_arr[$label_id]   = $final_imp_pick;
						}
						
	  					//THIS IS GET A EMPLOYEE ALL PICKLISTS
						$get_components = 'select prime_form_id,prime_module_id,label_name,view_name from `cw_form_setting` where prime_module_id = "employees" and field_type = 5 ORDER BY label_name';
						$get_components_info   = $this->db->query("CALL sp_a_run ('SELECT','$get_components')");
						$get_components_result = $get_components_info->result();
						$get_components_info->next_result();
						$components[""]        = "---- Select Component ----";
						foreach($get_components_result as $component){
							$prime_form_id     = $component->prime_form_id;
							$components_name   = strtoupper($component->view_name);
							$this->components[$this->xss_clean($prime_form_id)] = $this->xss_clean($components_name);	
							// $this->emp_label_arr[$this->xss_clean($prime_form_id)] = $this->xss_clean($component->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 = "select $pick_list_val_1,$pick_list_val_2 from $pick_table where $pick_list_val_3 = 1 $where_condition";
						$pick_data   = $this->db->query("CALL sp_a_run ('SELECT','$pick_query')");
						$pick_result = $pick_data->result();
						$pick_data->next_result();
						if($pick_result){
							$pick_key   = array_column($pick_result ?? [], $pick_list_val_1);
							$pick_val   = array_column($pick_result ?? [], $pick_list_val_2);				
							$final_pick = array_combine( $pick_key ?? [], $pick_val ?? []);
						}
						$final_pick = str_replace("~",'"',$final_pick);
						$final_pick = str_replace("`","'",$final_pick);
						$final_pick = str_replace("^","&",$final_pick);
						$final_pick = array("" => "---- $label_name ----") + $final_pick;
						$this->master_pick[$label_id]   = $final_pick;
						//array_unshift($final_pick,"---- $label_name ----");
						$this->all_pick[$prime_form_id] = $final_pick;
					}
				}else
				if($field_type === 9){
					$pick_display_val 	   = "CONCAT(".str_replace(",",'," - ",',$pick_display).") as auto_list_pick";
					$pick_query = "select $auto_prime_id,$auto_dispaly_value,$pick_display_val 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();
					if($pick_result){
						$pick_key   = array_column($pick_result ?? [], $auto_prime_id);
						$pick_val   = array_column($pick_result ?? [], 'auto_list_pick');
						$final_pick = array_combine( $pick_key ?? [], $pick_val ?? []);
					}
					$final_pick = str_replace("~",'"',$final_pick);
					$final_pick = str_replace("`","'",$final_pick);
					$final_pick = str_replace("^","&",$final_pick);
					$this->master_pick[$label_id]   = $final_pick;
					// $final_pick = array("" => "---- $label_name ----") + $final_pick;
					$this->all_pick[$prime_form_id] = $final_pick;
					
					$pick_imp_key        = array_column($pick_result ?? [], 'auto_list_pick');
					$pick_imp_val        = array_column($pick_result ?? [], $auto_dispaly_value);
					$final_imp_pick      = array_combine( $pick_imp_key ?? [], $pick_imp_val ?? []);
					$this->export_pick_arr[$label_id]   = $final_imp_pick;
				}
				if(($input_view_type === 1) || ($input_view_type === 2)){
					$this->view_select  .= "$this->prime_table.$label_id,";
					if($search_show === 1){						
						$this->fliter_list[] = array('label_id'=> $label_id, 'label_name'=> $label_name, 'field_isdefault'=> $field_isdefault, 'array_list'=> $final_pick, 'field_type'=> $field_type);
					}
				}
			}
		}
		$this->view_select   = rtrim($this->view_select,',');
		// ONLY FOR EMPLOYEE
		if($this->control_name === "employees"){
			$this->view_select   = $this->view_select .',user_name,password';
		}		
	}
	// PROVIDE MODLE ONLOAD CONDITION & FORMULA
	public function get_condition(){
		$condition_query = 'select * from cw_form_condition_formula  where cond_module_id = "'.$this->control_name.'" and trans_status = "1" and FIND_IN_SET("'.$this->logged_role.'",condition_for)';
		$condition_data   = $this->db->query("CALL sp_a_run ('SELECT','$condition_query')");
		$condition_result = $condition_data->result();		
		$condition_data->next_result();
		$load_script = "";
		foreach($condition_result as $condition){			
			$prime_cond_id         = $condition->prime_cond_id;
			$cond_module_id        = $condition->cond_module_id;
			$condition_label_name  = strtolower(str_replace(" ","_",$condition->condition_label_name));
			$condition_type        = (int)$condition->condition_type;
			$condition_check_form  = explode(",",$condition->condition_check_form ?? "");
			$condition_bind_to     = explode(",",$condition->condition_bind_to ?? "");
			$on_bind_input   = "";
			$on_change_input = "";
			$on_blur_input   = "";
			
			foreach($condition_check_form as $label_name){				
				$cond_from_query = 'select field_type,label_name from cw_form_setting  where prime_module_id = "'.$this->control_name.'" and label_name in ("'.$label_name.'") ORDER BY input_for,field_sort asc';
				$cond_form_data   = $this->db->query("CALL sp_a_run ('SELECT','$cond_from_query')");
				$cond_form_result = $cond_form_data->result();
				$cond_form_data->next_result();
				$field_type = (int)$cond_form_result[0]->field_type;				
				/*============ 
					NOTE:  AUTO COMPLETE BOX & FILE UPLOAD BOX ARE NOT INCLUDED IN ON LOAD SCRIPT
				============*/
				if(($field_type === 1) || ($field_type === 2) || ($field_type === 3) || ($field_type === 11) || ($field_type === 12)){
					$on_bind_input  .= "$label_name,";
				}else
				if(($field_type === 5) || ($field_type === 6) || ($field_type === 7)){
					$on_change_input  .= "$label_name,";
				}
				if($condition_type === 2){
					if(($field_type === 4) || ($field_type === 13)){
						$on_blur_input  .= "$label_name,";
					}
				}
			}
			$check_input = "";
			if($on_bind_input){
				$on_bind_input = rtrim($on_bind_input,',');
				$on_bind_input = str_replace(",",",#",$on_bind_input);
				$on_bind_input = "#".$on_bind_input;
				$check_input .= "$on_bind_input";
			}			
			
			if($on_change_input){
				$on_change_input = rtrim($on_change_input,',');
				$on_change_input = str_replace(",",",#",$on_change_input);
				$on_change_input = "#".$on_change_input;
				if($check_input){
					$check_input .= ",$on_change_input";
				}else{
					$check_input .= "$on_change_input";
				}
				
			}
			
			if($on_blur_input){
				$on_blur_input = rtrim($on_blur_input,',');
				$on_blur_input = str_replace(",",",#",$on_blur_input);
				$on_blur_input = "#".$on_blur_input;
				if($check_input){
					$check_input .= ",$on_blur_input";
				}else{
					$check_input .= "$on_blur_input";
				}
			}
			
			$send_for  = implode(",",$condition_check_form ?? []);
			$send_data = "prime_cond_id:$prime_cond_id,for_input:'$send_for',";
			foreach($condition_check_form as $check_form){
				$send_data .= "$check_form:$('#$check_form').val(),";
			}
			$send_data = "{".rtrim($send_data,',')."}";
			
			//BIND VALUE FROM DATABASE TABLE
			if($condition_type === 1){
				if($on_bind_input){
					$fill_input = "";
					foreach($condition_bind_to as $bind_to){
						$fill_val    = "ui.item.".$bind_to;
						$fill_input .= "$('#$bind_to').val($fill_val);\n";
					}
					$send_url     = site_url("custom_approval/bind_autocomplete_suggest");
					$load_script .= "$('$on_bind_input').autocomplete({
										 source: function(request, response) {
											$.getJSON('$send_url',{term:request.term, prime_cond_id:$prime_cond_id },response);
										},
										minChars:2,
										autoFocus: true,
										delay:10,
										appendTo: '.modal-content',
										select: function(e, ui) {
											$fill_input
											return false;
										}
									});\n";
				}
				if($on_change_input){
					$fill_input = "";
					foreach($condition_bind_to as $bind_to){
						$fill_val    = "rslt[0].".$bind_to;
						$fill_input .= "$('#$bind_to').val($fill_val);\n";
					}
					
					$send_url  = site_url("custom_approval/bind_change_suggest");
					$load_script .= "$('$on_change_input').change(function(){
										var isValid = true;
										$('$on_change_input').each(function() {
										  if ($(this).val() === '') {
											isValid = false;
											$(this).addClass('error');
										  }else{
											 $(this).removeClass('error');
										  }
										});
										if(isValid){
											$.ajax({
												type: 'POST',
												url: '$send_url',
												data:$send_data,
												success: function(data) {
													var rslt = JSON.parse(data);
													$fill_input
												}
											});
										}
									});\n";
				}
			}else
			if($condition_type === 2){
				$fill_input = "";
				foreach($condition_bind_to as $bind_to){
					$fill_val    = "rslt.".$bind_to;
					$fill_input .= "$('#$bind_to').val($fill_val);\n $('#$bind_to').trigger('change');";
				}
				$encKey          = $this->generateKey();
				$send_url        = site_url("custom_approval/calculation_suggest");
				$function_info   = "function $condition_label_name(){
									var isValid = true;
									$('$check_input').each(function() {
									  if ($(this).val() === '') {
										isValid = false;
										$(this).addClass('error');
									  }else{
										 $(this).removeClass('error');
									  }
									});
									if(isValid){
										var encKey  = '$encKey';
										var encData = encrypt(encKey,$send_data);
										$.ajax({
											type: 'POST',
											url: '$send_url',
											data:encData,
											success: function(data) {
												var rslt = JSON.parse(data);
												$fill_input
											}
										});
									}
								}";
				if($on_bind_input){
					$load_script .= "$('$on_bind_input').bind('keyup blur change', function(e) {
										$condition_label_name();
									});\n";
				}
				if($on_change_input){
					$load_script .= "$('$on_change_input').change(function(){
										$condition_label_name();
									});\n";
				}
				if($on_blur_input){
					$load_script .= "$('$on_blur_input').blur(function(){
										$condition_label_name();
									});\n";
				}
				$load_script .= "\n$function_info\n";
			}
		}
		if($load_script){
			$this->condition_list[] = $load_script;
		}
	}
	/* ==============================================================*/
	/* =================== BASE FUNCTIONS - END ===================*/
	/* ==============================================================*/
	
	/* ==============================================================*/
	/* ================= CONDITION OPERATION - START ================*/
	/* ==============================================================*/
	//PROVIDE ALL SINGLE BOX AUTOCOMPLETE DROP DOWN
	public function suggest(){
		$search_term      = $this->input->post_get('term');		
		$prime_form_id    = $this->input->get('prime_form_id');
		$depen_pick_list  = $this->input->get('depen_pick_list');
		$depend_hidden_id = $this->input->get('depend_hidden_id');
		$label_id_val 	  = $this->input->get('label_id');
		$form_query  = 'select * from cw_form_setting where prime_form_id in ("'.$prime_form_id.'","'.$depend_hidden_id.'") and trans_status = 1';
		$form_data   = $this->db->query("CALL sp_a_run ('SELECT','$form_query')");
		$form_result = $form_data->result_array();
		$form_data->next_result();	
		$form_result = array_reduce($form_result, function($result, $arr){	
		    $result[$arr['prime_form_id']] = $arr;
		    return $result;
		}, array());
		if($form_result[$prime_form_id]){
			$pick_table          = $form_result[$prime_form_id]['pick_table'];
			$pick_list           = $form_result[$prime_form_id]['pick_list'];
			$auto_prime_id       = $form_result[$prime_form_id]['auto_prime_id'];
			$auto_dispaly_value  = $form_result[$prime_form_id]['auto_dispaly_value'];
			$pick_display_value  = $form_result[$prime_form_id]['pick_display_value'];
			$depand_join 	= "";
			$depand_where   = "";
			if((int)$depen_pick_list === 1){
				$pick_table_sec = $form_result[$depend_hidden_id]['pick_table'];
				$depand_tbl1 	= $form_result[$prime_form_id]['table_column1'];
				$depand_tbl2 	= $form_result[$prime_form_id]['table_column2'];
				// $depand_display = $form_result[$depend_hidden_id]['auto_dispaly_value'];
				$field_type 	= $form_result[$depend_hidden_id]['field_type'];
				$depen_pick_type 	= $form_result[$depend_hidden_id]['pick_list_type'];
				$depen_pick_list 	= $form_result[$depend_hidden_id]['pick_list'];
				if((int)$field_type === 5){
					$pick_list_val   = explode(",",$depen_pick_list ?? "");
					if((int)$depen_pick_type === 1){
						$depand_display = $pick_list_val[0];
					}else
					if((int)$depen_pick_type === 2){
						$depand_display = $pick_table."_id";
					}
				}else
				if((int)$field_type === 9){
					$depand_display = $form_result[$depend_hidden_id]['auto_prime_id'];
				}
				// $depand_display = $form_result[$depend_hidden_id]['auto_prime_id'];
				$pick_table 	= $this->input->get('pick_table');
				$table_column2 	= $this->input->get('table_column2');
				$pick_tbl_val 	= $this->input->get('pick_tbl_val');
				$depen_select 	= $this->input->get('depen_select');
				$depand_join 	= " inner join $pick_table_sec on $pick_table_sec.$depand_tbl1 = $pick_table.$depand_tbl2";
				$depand_where 	= " and $pick_table_sec.trans_status = 1 and $pick_table_sec.$depand_display = \"$depen_select\"";
			}
			$where_condition 	   = $this->get_role_based_picklist($prime_form_id,$form_result[$prime_form_id]['prime_module_id']);
			$pick_list 			 = explode(",", $pick_list ?? "");
			$pick_list 			 = "$pick_table.".implode(",$pick_table.", $pick_list ?? []);
			$pick_display_value  = explode(",", $pick_display_value ?? "");
			$pick_display_value  = "$pick_table.".implode(",$pick_table.", $pick_display_value ?? []);
			$auto_list 	   = "CONCAT(".str_replace(",",'," - ",',$pick_list).") as auto_list";
			$display_list  = "CONCAT(".str_replace(",",'," - ",',$pick_display_value).") as display_list";
			if($auto_prime_id){
				$auto_prime_ids = "$pick_table.$auto_prime_id,";
			}
			if($auto_dispaly_value){
				$auto_dispaly_values = "$pick_table.$auto_dispaly_value,";
			}
			$suggest_query = "select $auto_prime_ids $auto_dispaly_values $auto_list,$display_list from $pick_table $depand_join where $pick_table.trans_status = 1 $depand_where";
			$col_list      = explode(",",$pick_list ?? "");
			$suggest_query .= " and ";
			$where_query  = "";
			foreach($col_list as $col){
				$search_term = str_replace('"',"~",$search_term);
				$search_term = str_replace("'","`",$search_term);
				$search_term = str_replace("&","^",$search_term);
				$where_query .= $col.' like "%'.$search_term.'%" or ';
			}
			$where_query    = rtrim($where_query," or ");
			$suggest_query .= '('.$where_query.')';
			$suggest_query .= $where_condition;
			$suggest_query .= ' limit 0,50';
			$suggest_data   = $this->db->query("CALL sp_a_run ('SELECT','$suggest_query')");
			$suggest_result = $suggest_data->result();
			$suggest_data->next_result();
			foreach($suggest_result as $result){
				$suggest_prime_id  = $result->$auto_prime_id;
				$suggest_dispaly   = $result->$auto_dispaly_value;
				$suggest_list      = $result->auto_list;
				$suggest_list = str_replace("~",'"',$suggest_list);
				$suggest_list = str_replace("`","'",$suggest_list);
				$suggest_list = str_replace("^","&",$suggest_list);
				$suggest_dispaly_list = $result->display_list;
				$suggest_dispaly_list = str_replace("~",'"',$suggest_dispaly_list);
				$suggest_dispaly_list = str_replace("`","'",$suggest_dispaly_list);
				$suggest_dispaly_list = str_replace("^","&",$suggest_dispaly_list);
				$suggestions[] = array('value' => $suggest_prime_id, 'label' => $suggest_list, 'display_name' => $suggest_dispaly_list);
			}
		}
		if(empty($suggestions)){
			$suggestions[] = array('value' => "0", 'label' => "No data found for this search");
		}
		echo json_encode($suggestions);		
	}
	
	//PROVIDE AUTOCOMPLETE DROP DOWN TO FILL MULTI INPUT BOX
	public function bind_autocomplete_suggest(){
		$search_term      = $this->input->post_get('term');
		$prime_cond_id    = $this->input->post_get('prime_cond_id');
		echo $this->get_bind_final_query("autocomplete",$search_term,$prime_cond_id);
	}
	
	//PROVIDE DATA WHILE ON CHANGE EVENT TO FILL MULTI INPUT BOX
	public function bind_change_suggest(){
		$for_input        = $this->input->post_get('for_input');
		$prime_cond_id    = $this->input->post_get('prime_cond_id');
		$search_term      = $this->input->post_get($for_input);
		echo $this->get_bind_final_query("change",$search_term,$prime_cond_id);
	}
	// UDY NEED TO REVIEW
	//PROVIDE QUERY AND RESULT ARRAY TO BIND INPUT
	public function get_bind_final_query($from,$search_term,$prime_cond_id){
		/*============ 
			NOTE:  VAR FROM NOT USED MAY CAN USE IN FURTURE PROCESS
		============*/
		$cond_query = 'select * from cw_form_condition_formula  where prime_cond_id = "'.$prime_cond_id.'" and trans_status = 1';
		$cond_data   = $this->db->query("CALL sp_a_run ('SELECT','$cond_query')");
		$cond_result = $cond_data->result();
		$cond_data->next_result();
		$final_qry = "";
		if($cond_result){
			$cond_module_id       = $cond_result[0]->cond_module_id;
			$condition_check_form = $cond_result[0]->condition_check_form;
			$condition_bind_to    = $cond_result[0]->condition_bind_to;
			$condition_table      = $cond_result[0]->condition_table;
			
			$table_query = 'select * from cw_form_table_cond_for  where table_cond_id = "'.$prime_cond_id.'" ORDER BY abs(line_sort) asc';
			$table_data   = $this->db->query("CALL sp_a_run ('SELECT','$table_query')");
			$table_result = $table_data->result();
			$table_data->next_result();
			$line_table_query = "";
			foreach($table_result as $table){
				$line_prime_table = $table->line_prime_table;
				$line_prime_col   = $table->line_prime_col;
				$line_join_type   = $table->line_join_type;
				$line_join_table  = $table->line_join_table;
				$line_join_col    = $table->line_join_col;
				$line_sort        = $table->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_table_query .= " $line_prime_table $line_join_type join $line_join_table on $line_join_col = $line_prime_col"; 
				}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_","",$condition_table);
				$prime_id         = "prime_".$module_name."_id";
				$line_table_query = " $condition_table  ";
			}
			
			$for_input_query = 'select * from cw_form_for_input  where input_for_cond_id = "'.$prime_cond_id.'" and trans_status = 1';
			$for_input_data   = $this->db->query("CALL sp_a_run ('SELECT','$for_input_query')");
			$for_input_result = $for_input_data->result();
			$for_input_data->next_result();
			$for_line_input_query = "";
			foreach($for_input_result as $for_input){
				$line_input_for       = $for_input->line_input_for;
				$line_input_for_table = $for_input->line_input_for_table;
				$line_input_for_col   = $for_input->line_input_for_col;	
								
				$for_line_input_query .= $line_input_for_col.' like "'.$search_term.'%" or ';
			}
			if($for_line_input_query){
				$for_line_input_query  = " where ". rtrim($for_line_input_query," or ");
			}
			
			$input_query = 'select * from cw_form_bind_input  where input_cond_id = "'.$prime_cond_id.'" and trans_status = 1';
			$input_data   = $this->db->query("CALL sp_a_run ('SELECT','$input_query')");
			$input_result = $input_data->result();
			$input_data->next_result();
			$line_input_query = "";
			foreach($input_result as $input){
				$line_input_bind_to    = $input->line_input_bind_to;
				$line_input_bind_table = $input->line_input_bind_table;
				$line_input_bind_col   = $input->line_input_bind_col;
				
				$select_query  = 'select field_type from cw_form_setting  where prime_module_id = "'.$cond_module_id.'" and label_name = "'.$line_input_bind_to.'"';
				$select_data   = $this->db->query("CALL sp_a_run ('SELECT','$select_query')");
				$select_result = $select_data->result();
				$select_data->next_result();
				$field_type = (int)$select_result[0]->field_type;
				if(($field_type === 4) || ($field_type === 13)){
					$line_input_query .= 'DATE_FORMAT('.$line_input_bind_col.',"%d-%m-%Y") as '.$line_input_bind_to.',';
				}else{
					$line_input_query .= "$line_input_bind_col as $line_input_bind_to,";
				}
			}
			if($line_input_query){
				$line_input_query  = rtrim($line_input_query,',');
			}else{
				$line_input_query  = " * ";
			}
			$final_qry = "select $line_input_query from $line_table_query $for_line_input_query";
		}
		if($final_qry){
			$final_data   = $this->db->query("CALL sp_a_run ('SELECT','$final_qry')");
			$final_result = $final_data->result();
			$final_data->next_result();
			foreach($final_result as $rslt){
				$line = array();
				$lable = "";
				foreach($input_result as $input){
					$line_input_bind_to    = $input->line_input_bind_to;
					$rslt_val = $rslt->$line_input_bind_to;
					$line[$line_input_bind_to] =  $rslt_val;
					if($rslt_val){
						$lable .= "$rslt_val - ";
					}
				}
				$lable  = rtrim($lable," - ");
				$line['value'] = '';
				$line['label'] = $lable;
				$suggestions[] = $line;
			}
		}
		if(empty($suggestions)){
			$suggestions[] = array('value' => "0", 'label' => "No data found for this search");
		}
		return json_encode($suggestions);
	}
	
	//PROVIDE DATA FOR  ONCHANGE CALCUATION
	public function calculation_suggest(){
		$encString         = file_get_contents('php://input');
		$_POST             = $this->cryptoDecrypt($encString);
		if(!$_POST){
			echo json_encode(array('success' => false,'message' => 'Url Expired.. Please refresh the page and try again....','table_data' => ""));
			exit(0);
		}
		$for_input        = $this->input->post_get('for_input');
		$prime_cond_id    = $this->input->post_get('prime_cond_id');
		
		$cond_query = 'select * from cw_form_condition_formula  where prime_cond_id = "'.$prime_cond_id.'" and trans_status = 1';
		$cond_data   = $this->db->query("CALL sp_a_run ('SELECT','$cond_query')");
		$cond_result = $cond_data->result();
		$cond_data->next_result();		
		$condition_check_form = explode(",",$cond_result[0]->condition_check_form ?? "");
		$condition_bind_to    = $cond_result[0]->condition_bind_to;
		$condition_table      = $cond_result[0]->condition_table;
		$condition_type       = $cond_result[0]->condition_type;
		$is_drop_down         = (int)$cond_result[0]->is_drop_down;
		$cond_drop_down       = $cond_result[0]->cond_drop_down;
		$fianl_result_array = array();
		if($is_drop_down === 1){
			$search_term          = $this->input->post_get($cond_drop_down);
			$input_query = 'select * from cw_form_bind_input  where input_cond_id = "'.$prime_cond_id.'" and line_input_bind_table = "'.$search_term.'"';
			$input_data   = $this->db->query("CALL sp_a_run ('SELECT','$input_query')");
			$input_result = $input_data->result();
			$input_data->next_result();
			$line_input_bind_col = "";
			foreach($input_result as $input){
				$line_input_bind_to    = $input->line_input_bind_to;
				$line_input_bind_col   = $input->line_input_bind_col;
				$line_input_bind_col  = str_replace("~","'",$line_input_bind_col);
				$line_input_bind_col  = str_replace("!",'"',$line_input_bind_col);
				if($line_input_bind_col){
					foreach($condition_check_form as $check_form){
						if(strpos($line_input_bind_col,"@$check_form@") !== false) {
								$value = $this->input->post_get($check_form);
								if(strpos($check_form,"date") !== false) {
									$value = new DateTime($value);
									$value = $value->format("Y-m-d");
									$value = "'$value'";
								}
							$line_input_bind_col = str_replace("@$check_form@",$value, $line_input_bind_col);
						}
					}
					$dynamic_file_name= "calculation_file/".$line_input_bind_to."_".$this->logged_id.".php";
					unlink("$dynamic_file_name");
					$fname = $line_input_bind_to."(){";
					$code = "<?php function $fname $line_input_bind_col }?>";
					fopen("$dynamic_file_name", "w");
					file_put_contents("$dynamic_file_name",$code);
					chmod($dynamic_file_name, 0777);
					require_once("$dynamic_file_name");
					$fianl_result_array[$line_input_bind_to] =  $line_input_bind_to();
					unlink("$dynamic_file_name");
				}
			}
		}else{
			$input_query = 'select * from cw_form_bind_input  where input_cond_id = "'.$prime_cond_id.'"';
			$input_data   = $this->db->query("CALL sp_a_run ('SELECT','$input_query')");
			$input_result = $input_data->result();
			$input_data->next_result();
			$line_input_bind_col = "";
			foreach($input_result as $input){
				$line_input_bind_to    = $input->line_input_bind_to;
				$line_input_bind_col   = $input->line_input_bind_col;
				$line_input_bind_col  = str_replace("~","'",$line_input_bind_col);
				$line_input_bind_col  = str_replace("!",'"',$line_input_bind_col);
				if($line_input_bind_col){
					foreach($condition_check_form as $check_form){
						if(strpos($line_input_bind_col,"@$check_form@") !== false) {
								$value = $this->input->post_get($check_form);
								if(strpos($check_form,"date") !== false) {
									$value = new DateTime($value);
									$value = $value->format("Y-m-d");
									$value = "'$value'";
								}
							$line_input_bind_col = str_replace("@$check_form@",$value, $line_input_bind_col);
						}
					}
					$dynamic_file_name= "calculation_file/".$line_input_bind_to."_".$this->logged_id.".php";
					unlink("$dynamic_file_name");
					$fname = $line_input_bind_to."(){";
					$code = "<?php function $fname $line_input_bind_col }?>";
					fopen("$dynamic_file_name", "w");
					file_put_contents("$dynamic_file_name",$code);
					chmod($dynamic_file_name, 0777);
					require_once("$dynamic_file_name");
					$fianl_result_array[$line_input_bind_to] =  $line_input_bind_to();
					unlink("$dynamic_file_name");
				}
			}
		}
		echo json_encode($fianl_result_array);
	}
	// UDY NEED TO REVIEW
	/* ==============================================================*/
	/* ================= CONDITION OPERATION - END ==================*/
	/* ==============================================================*/
	
	/* ==============================================================*/
	/* ================== ROWSET OPERATION - START ==================*/
	/* ==============================================================*/
	// ROWSET SAVE
	public function rowset_save(){
		// ENCRYPT DATAS WILL DECRYPT FUNCTIONALITY ADDED BY _ARN
		$encString      = file_get_contents('php://input');
		$_POST          = $this->cryptoDecrypt($encString);
		if(!$_POST){
			echo json_encode(array('success' => false,'message' => 'Url Expired.. Please refresh the page and try again....','table_data' => ""));
			exit(0);
		}
		$view_id         = $this->input->post('view_id');
		$module_id       = $this->input->post('module_id');
		$row_prime_id    = (int)$this->input->post('row_prime_id');
		$row_label_name  =  $this->input->post('row_label_name');
		$prime_id        = (int)$this->input->post('prime_id');
		
		$table_name      = "custom_".$module_id."_".$row_label_name;
		$table_prime     = "prime_".$table_name."_id";
		$table_name      = $this->db->dbprefix($table_name);
		$prime_qry_key   = "prime_custom_".$module_id."_id,";
		$prime_qry_value = '"'.$prime_id.'",';
		$prime_upd_query = "";

		$form_qry        = 'select * from cw_form_setting where prime_module_id = "'.$module_id.'" and  input_for = "'.$view_id.'" and field_show = "1" and trans_status = 1';
		$form_data       = $this->db->query("CALL sp_a_run ('SELECT','$form_qry')");
		$form_result     = $form_data->result();
		$form_data->next_result();
		foreach($form_result as $setting){
			$field_type      = $setting->field_type;
			$input_view_type = (int)$setting->input_view_type;
			$label_id        = strtolower(str_replace(" ","_",$setting->label_name));
			$field_isdefault = $setting->field_isdefault;
			if((int)$field_type === 7){
				$multi_name = $label_id."[]";
				$value = implode(",",$this->input->post($multi_name) ?? []);
			}else{
				$value = $this->input->post($label_id);
			}			
			if((int)$field_type === 4){
				if((int)$date_type === 1){
					$value = date('Y-m-d',strtotime($value));
				}else{
					$value = $value;
				}
			}else
			if((int)$field_type === 13){
				$value = date('Y-m-d H:i:s',strtotime($value));
			}else
			if((int)$field_type === 8){//textbox only
				$value = str_replace('"',"~",$value);
				$value = str_replace("'","`",$value);
				
			}else
			if((int)$field_type === 10){//File Upload
				$value 		 		 = $value;
				$remove_upload_fname = "old_".$label_id;
				$remove_upload_file  = $this->input->post($remove_upload_fname);
				if($value !== $remove_upload_file){
					unlink($remove_upload_file);  
				}
			}			
			$prime_qry_key     .= $label_id.",";
			$prime_qry_value   .= '"'.$value.'",';
			$prime_upd_query   .= $label_id.' = "'.$value.'",';
			$exist_qry         .= $label_id.' = "'.$value.'" and ';
		}
		$created_on  = date("Y-m-d h:i:s");
		$exist_count = 0;
		
		if((int)$row_prime_id === 0){
			// INSERT QUERY TRANS STATUS COLUMN ADDED BY -AR
			$prime_qry_key     .= "trans_created_by,trans_created_date,trans_status";
			$prime_qry_value   .= '"'.$this->logged_id.'","'.$created_on.'","1"';
			$prime_insert_query = "insert into $table_name ($prime_qry_key) values ($prime_qry_value)";
			$insert_info        = $this->db->query("CALL sp_a_run ('INSERT','$prime_insert_query')");
			$insert_result      = $insert_info->result();
			$insert_info->next_result();
			$insert_id          = $insert_result[0]->ins_id;
			$row_set_data       = $this->get_row_set_data($view_id,$prime_id);
			echo json_encode(array('success' => TRUE, 'message' => "Successfully added", 'insert_id' => $insert_id, 'row_set_data' => $row_set_data));
		}else{
			$prime_upd_query    .= 'trans_updated_by = "'. $this->logged_id .'",trans_updated_date = "'.$created_on.'"';
			$prime_update_query  = "UPDATE $table_name SET ". $prime_upd_query .' WHERE '. $table_prime .' = "'. $row_prime_id .'"';
			$this->db->query("CALL sp_a_run ('UPDATE','$prime_update_query')");
			$row_set_data = $this->get_row_set_data($view_id,$prime_id);
			echo json_encode(array('success' => TRUE, 'message' => "Successfully updated",'insert_id' => $row_prime_id,'row_set_data' => $row_set_data));
		}
	}
	// UPLOAD FILES FUNCTION ADDED BY _ARN
	public function upload_files(){
		$encString     = file_get_contents('php://input');
		$_POST         = $this->cryptoDecrypt($encString);
		if(!$_POST){
			echo json_encode(array('success' => false,'message' => 'Url Expired.. Please refresh the page and try again....','table_data' => ""));
			exit(0);
		}
		$send_for      = $this->input->post('send_for'); //import or upload
		$send_from     = $this->input->post('send_from'); //module name
		$file_name     = $this->input->post('fileName');
		$file_data     = base64_decode($this->input->post('file_data'));	
		$finfo         = new finfo(FILEINFO_MIME_TYPE);		
		$file_type     = $finfo->buffer($file_data); // Get the MIME type from the binary data
		$module_id     = '';

		if($send_from  == 'custom_approval'){
			$module_id ='employees';
		}
		// Create directory if not exists
		$upload_dir = "upload_files/$send_from";
		if(($send_for !== "") && ($send_from !== "")){
			if(!file_exists($upload_dir)){
				mkdir($upload_dir, 0755, true);
				chmod($upload_dir, 0755);
			}
			// Ensure the directory is writable
			if (!is_writable($upload_dir)) {
				echo json_encode(array('success' => false, 'msg' => "Error: Upload directory is not writable."));
				exit(0);
			}
			$label_id         = $this->input->post('label_id');				
			$file_size        = $this->input->post('size');
			//MIME Types
			$mime_types = [ 'jpg'  => 'image/jpeg', 'jpeg' => 'image/jpeg', 'png'  => 'image/png', 'gif'  => 'image/gif', 'html' => 'text/html', 'pdf'  => 'application/pdf', 'doc'  => 'application/msword', 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'xls'  => 'application/vnd.ms-excel', 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'mp3'  => 'audio/mpeg', 'mp4'  => 'video/mp4', 'zip'  => 'application/zip', 'txt'  => 'text/plain','msg'  => 'application/vnd.ms-outlook','eml' => 'message/rfc822'];

			//Get info from Form Settings
			$from_query = 'select upload_extension,upload_file_size from cw_form_setting  where prime_module_id = "'.$module_id.'" and field_show = "1" and field_type = 10 and label_name = "'.$label_id.'" and trans_status = "1" and FIND_IN_SET("'.$this->logged_role.'",field_for) 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();
			if(count($form_result ?? []) === 0){
				echo json_encode(array('success' => false, 'msg' =>"Url Expired.. Please refresh the page and try again...."));
				exit(0);
			}
			$upload_filesize  = $form_result[0]->upload_file_size;
			$upload_extension = $form_result[0]->upload_extension;
			$allowed_ext      = explode(",",$upload_extension);	
			// Find elements in $array1 that match the keys in $array2
			$array_flip       = array_flip($allowed_ext);
			$allowed_mimes    = array_intersect_key($mime_types,$array_flip);

			if(!in_array($file_type, $allowed_mimes)){
				echo json_encode(array('success' => false, 'msg' =>"Please upload valid Mime type file such as $upload_extension"));
				exit(0);
			}
			$file_name        = str_replace(" ","_", $file_name);
			$file_size        = $file_size/1000;
			if((int)$upload_filesize === 0){
				$upload_filesize = 500;
			}
			if((int)$file_size <= (int)$upload_filesize){
				if($file_name){
					$ext = pathinfo($file_name, PATHINFO_EXTENSION);
					if(in_array($ext, $allowed_ext)){
						$random_digit  = rand(0000,99999999999);
						$new_file_name = "upload_files/$send_from/".$random_digit."_".$file_name;
						$path          = $this->sanitize_input($new_file_name, 10);	
						file_put_contents($path, $file_data);		
						echo json_encode(array('success' => true, 'msg' =>"File moved to server","path"=>$path));
					}else{
						echo json_encode(array('success' => false, 'msg' =>"Please upload valid file such as $upload_extension"));
					}
				}else{
					echo json_encode(array('success' => false, 'msg' =>"Please upload valid file"));
				}
			}else{
				echo json_encode(array('success' => false, 'msg' =>"File Size Must be below ".$upload_filesize."kb"));
			}
		}else{
			echo json_encode(array('success' => false, 'msg' =>"Please refresh page and retry"));
		}
	}	
	//ROW SET EDIT DATA
	public function row_set_edit(){
		// ENCRYPT DATAS WILL DECRYPT FUNCTIONALITY ADDED BY _ARN
		$encString      = file_get_contents('php://input');
		$_POST          = $this->cryptoDecrypt($encString);
		if(!$_POST){
			echo json_encode(array('success' => false,'message' => 'Url Expired.. Please refresh the page and try again....','table_data' => ""));
			exit(0);
		}
		$control_name    = 'employees';
		$row_id          = (int)$this->input->post('row_id');
		$view_id         = (int)$this->input->post('view_id');
		$table_name      = $this->input->post('table_name');
		$table_prime_id  =	 "prime_".$table_name."_id";
		$table_name      = $this->db->dbprefix($table_name);		
		
		$final_qry  = "select * from $table_name " .' where '.$table_prime_id.' = "'.$row_id.'" and  trans_status = "1"';
		$row_data   = $this->db->query("CALL sp_a_run ('SELECT','$final_qry')");
		$row_result = $row_data->result();
		$row_data->next_result();
		
		$form_qry    = 'select * from cw_form_setting where prime_module_id = "'.$control_name.'" and  input_for = "'.$view_id.'" and  input_view_type = "3" and trans_status = "1"';
		$form_data   = $this->db->query("CALL sp_a_run ('SELECT','$form_qry')");
		$form_result = $form_data->result();
		$form_data->next_result();
		$rslt_info = array();
		$rslt_info[$table_prime_id] = array('input_value'=>$row_result[0]->$table_prime_id,'field_type'=>1); ;
		foreach($form_result as $form){
			$prime_form_id      = (int)$form->prime_form_id;
			$label_name         = $form->label_name;
			$field_type         = $form->field_type;
			$pick_table         = $form->pick_table;
			$auto_prime_id      = $form->auto_prime_id;
			$auto_dispaly_value = $form->auto_dispaly_value;
			$mandatory_field    = (int)$form->mandatory_field;
			$input_value       = $row_result[0]->$label_name;
			if((int)$field_type === 4){
				if((int)$date_type === 1){
					if($input_value === '0000-00-00' || $input_value ==='01-01-1970' || $input_value === 'NULL'){
						$input_value = "";
					}else{
						$input_value = date('d-m-Y',strtotime($input_value));
					}
				}else{
					$input_value = $input_value;
				}
				if($input_value === "01-01-1970" || $input_value === 'NULL' || $input_value === "0000-00-00"){
					$input_value = "";
				}
				$rslt_info[$label_name] = array('input_value'=>$input_value,'field_type'=>$field_type,'mandatory_field'=>$mandatory_field);
			}else
			if((int)$field_type === 13){
				$input_date =  date('d-m-Y',strtotime($input_value));
				if($input_date === "01-01-1970" || $input_date === 'NULL' || $input_date === '' || $input_date === "00-00-0000" || $input_date === '30-11--0001'){
					$input_value = "";
				}else{
					$input_value = $input_value;
				}
				$rslt_info[$label_name] = array('input_value'=>$input_value,'field_type'=>$field_type,'mandatory_field'=>$mandatory_field);
			}else
			if((int)$field_type === 8){
				$input_value = str_replace("~",'"',$input_value);
				$input_value = str_replace("`","'",$input_value);
				$input_value = str_replace("^","&",$input_value);
				$rslt_info[$label_name] = array('input_value'=>$input_value,'field_type'=>$field_type,'mandatory_field'=>$mandatory_field);
			}else
			if((int)$field_type === 9){
				$rslt_info[$label_name] = array('input_value'=>$input_value,'field_type'=>$field_type,'mandatory_field'=>$mandatory_field);
				$pick_query = 'select '.$auto_dispaly_value.' from '.$pick_table.' where '.$auto_prime_id.' = "'.$input_value.'" and trans_status = 1';
				$pick_data   = $this->db->query("CALL sp_a_run ('SELECT','$pick_query')");
				$pick_result = $pick_data->result();
				$pick_data->next_result();
				$input_value = $pick_result[0]->$auto_dispaly_value;
				$label_name  = $label_name."_hidden_".$prime_form_id;
				$rslt_info[$label_name] = array('input_value'=>$input_value,'field_type'=>$field_type,'mandatory_field'=>$mandatory_field);
			}else
			if((int)$field_type === 10){
				$old_label_name 	        = "old_".$label_name;
				$rslt_info[$label_name]     = array('input_value'=>$input_value,'field_type'=>$field_type,'mandatory_field'=>$mandatory_field);
				$rslt_info[$old_label_name] = array('input_value'=>$input_value,'field_type'=>$field_type,'mandatory_field'=>$mandatory_field);
			}else{
				$rslt_info[$label_name] = array('input_value'=>$input_value,'field_type'=>$field_type,'mandatory_field'=>$mandatory_field);
			}
		}
		echo json_encode(array('success' => TRUE, 'row_result' => $rslt_info,'table_name'=> $table_name));
	}
	
	//ROW SET REMOVE DATA
	public function row_set_remove(){
		$encString      = file_get_contents('php://input');
		$_POST          = $this->cryptoDecrypt($encString);
		if(!$_POST){
			echo json_encode(array('success' => false,'message' => 'Url Expired.. Please refresh the page and try again....','table_data' => ""));
			exit(0);
		}
		$row_id          = (int)$this->input->post('row_id');
		$view_id         = (int)$this->input->post('view_id');
		$table_name      = $this->input->post('table_name');
		$prime_id        = $this->input->post('prime_id');
		$table_prime_id  =	 "prime_".$table_name."_id";
		$table_name      = $this->db->dbprefix($table_name);
		$logged_id       = $this->session->userdata('logged_id');		
		$today_date      = date("Y-m-d h:i:s");
		$final_qry       = 'UPDATE '.$table_name.' SET trans_updated_by = "'.$logged_id.'",trans_updated_date = "'.$today_date.'" , trans_status = 0 WHERE '.$table_prime_id.' = "'.$row_id.'"';
		$this->db->query("CALL sp_a_run ('SELECT','$final_qry')");
		$row_set_data = $this->get_row_set_data($view_id,$prime_id);
		echo json_encode(array('success' => TRUE, 'msg' => "Remove Successfully",'row_set_data' => $row_set_data));
	}
	public function rowset_remove_file(){
		$encString      = file_get_contents('php://input');
		$_POST          = $this->cryptoDecrypt($encString);
		if(!$_POST){
			echo json_encode(array('success' => false,'message' => 'Url Expired.. Please refresh the page and try again....','table_data' => ""));
			exit(0);
		}
		$table_name  = $this->input->post('table_name_set');
		$row_id      = (int)$this->input->post('row_id');
		$input_name  = $this->input->post('input_name');
		$view_id     = (int)$this->input->post('view_id');
		$primes_id   = (int)$this->input->post('primes_id');
		$remove_cw   = str_replace("cw_","",$table_name);
		$primary_id  = "prime_".$remove_cw."_id";
		if($table_name){
			$created_on    = date("Y-m-d h:i:s");
			$set_query     = $input_name .' = "" ,trans_updated_by = "'. $this->logged_id .'",trans_updated_date = "'.$created_on.'"';
			$update_query  = 'UPDATE '.$table_name .' SET '. $set_query .' WHERE '.$primary_id.' = "'. $row_id .'"';
			$this->db->query("CALL sp_a_run ('UPDATE','$update_query')");
			$row_set_edit = $this->get_row_set_data($view_id,$primes_id);
			$div_id       = $row_set_edit['div_id'];
			$table_id     = $row_set_edit['table_id'];
			$row_set_view = $row_set_edit['row_set_view'];
			echo json_encode(array('success' => TRUE, 'message' => "Successfully updated",'div_id' => $div_id, 'table_id' => $table_id,'row_set_view'=>$row_set_view));
		}else{
			echo json_encode(array('success' => FALSE, 'message' => "Unable to process your request"));
		}
	}
	//PROVIDE ROWSET DATA BY ID
	public function get_row_set_data($view_id,$prime_id){
		$control_name    = 'employees';
		$view_qry        = 'select * from cw_form_view_setting where prime_form_view_id = "'.$view_id.'" and prime_view_module_id = "'.$control_name.'" and form_view_type = "3" and trans_status = 1';
		$view_data       = $this->db->query("CALL sp_a_run ('SELECT','$view_qry')");
		$view_result     = $view_data->result();
		$view_data->next_result();

		$prime_form_view_id   = $view_result[0]->prime_form_view_id;
		$prime_view_module_id = $view_result[0]->prime_view_module_id;
		$form_view_label_name = $view_result[0]->form_view_label_name;
		
		$div_id       	 = $form_view_label_name."_div_".$prime_form_view_id;
		$table_id        = $form_view_label_name."_tbl_".$prime_form_view_id;
		$table_name      = "custom_".$control_name."_".$form_view_label_name;
		$row_prime_id    = "prime_".$table_name."_id";
		$table_name      =  $this->db->dbprefix($table_name);
		$table_prime_id  = "prime_custom_".$control_name."_id";
		$form_qry    = 'select 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 prime_module_id = "'.$control_name.'" and input_for = "'.$prime_form_view_id.'" and input_view_type = "3" and table_show = "1" and trans_status = "1" order by abs(field_sort)';
		$form_data   = $this->db->query("CALL sp_a_run ('SELECT','$form_qry')");
		$form_result = $form_data->result();
		$form_data->next_result();
		$table_head = array();
		$thead_line = "";
		$select_query = "$table_name.$row_prime_id,$table_name.$table_prime_id,";
		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((int)$field_type === 4){
				$select_query .= 'DATE_FORMAT('.$table_name.'.'.$label_name.', "%d-%m-%Y") as '.$label_name.' , ';
			}else
			if((int)$field_type === 13){
				$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{
				$select_query .= "$table_name.$label_name , ";
			}
			$table_head[] = $label_name;
			$thead_line  .= "<th>$view_name</th>";
		}
		$thead = "<tr>$thead_line<th>Option</th></tr>";
		
		$select_query = rtrim($select_query,',');
		$select_query = rtrim($select_query,' , ');
		$final_qry    = "select $select_query from $table_name $pick_query " .' where '.$table_name.'.'.$table_prime_id.' = "'.$prime_id.'" and '.$table_name.'.trans_status = "1" order by abs('.$table_name.'.'.$row_prime_id.') desc';
		$row_data     = $this->db->query("CALL sp_a_run ('SELECT','$final_qry')");
		$row_result   = $row_data->result();
		$row_data->next_result();
		$tr_line = "";
		foreach($row_result as $data){
			$td_line = "";
			foreach($table_head as $label){
				$datas_exp        = $data->$label;
				//$total_counts     = count($datas_exp ?? []);
				$value            = $data->$label;
				$rowset_form_info = $this->get_rowset_form_info();
				$field_type       = $rowset_form_info[$label]['field_type'];
				if((int)$field_type === 10){
					if($datas_exp === "" || $datas_exp === NULL){
						$td_line .= "<td>No Preview Available</td>";
					}else{
						//PDF FILE NAME DISPLAY
						$file_ext_type = preg_replace('/^.*\.([^.]+)$/D', '$1', $value);
						$split_values  = explode("/", $value);
						$file_name     = $split_values[2];
						$file_name     = preg_replace('/^\d+_/', '', $file_name); 
						$file_name     = strtolower($file_name); 
						if($file_ext_type === 'zip' || $file_ext_type === 'rar' || $file_ext_type === 'eml' || $file_ext_type === 'msg'){
							$td_line  .= "<td><a href='$datas_exp' format.pdf = '' target='_blank' download = $file_name style='cursor: pointer;color:blue;'><i class='fa fa-download' style='margin-right:5px' aria-hidden='true'></i>$file_name</a></td>";
						}else{
							$td_line  .= '<td><a onclick="view_upload_file(\''.$value.'\', \''.$file_ext_type.'\');" style="cursor: pointer; color: blue;margin-right:5px"><i class="fa fa-folder-open" style="margin-right:5px"aria-hidden="true"></i>'.$file_name.'</a></td>';
						}
					}					
				}else{
					$td_line .= "<td>$value</td>";
				}
			}
			$row_id   = $data->$row_prime_id;
			$tab_name = "custom_".$control_name."_".$form_view_label_name;
			$illustration_btn = "";
			if($form_view_label_name === "eligibility_information"){
				$illustration_btn   = "<a class='btn btn-edit btn-xs row_btn' onclick = add_illustration('$row_id','$tab_name','$prime_form_view_id');>Illustration</a>";
			}
			$edit_btn   = "<a class='btn btn-edit btn-xs row_btn' onclick = row_set_edit('$row_id','$tab_name','$prime_form_view_id','$prime_id');>Edit</a>";
			$remove_btn = "<a class='btn btn-danger btn-xs row_btn' onclick = row_set_remove('$row_id','$tab_name','$prime_form_view_id','$prime_id');>Delete</a>";
			$tr_line .= "<tr>$td_line<td>$illustration_btn $edit_btn $remove_btn</td></tr>";
		}
		$row_set_view = "<table id='$table_id' class='table table-bordered' style='background-color: #FFFFFF; box-shadow: none;'>
							<thead>$thead</thead>
							<tbody>$tr_line</tbody>
						</table>";
		return array('div_id' => $div_id, 'table_id' => $table_id,'row_set_view'=>$row_set_view);
	}
	/* ==============================================================*/
	/* =================== ROWSET OPERATION - END ===================*/
	/*
	==============================================================*/

	//print data print
	public function load_print_data($print_doc_id,$view_id){
		$data['print_sts'] = false;
		$design_qry    = 'select print_design,print_type from cw_print_design inner join cw_print_info on cw_print_info.prime_print_info_id=cw_print_design.print_design_for where print_design_for = "'.$print_doc_id.'" and cw_print_info.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    = $design_result[0]->print_design;
		$print_type      = $design_result[0]->print_type;
		if((int)$print_type === 4){
			$style = '';
		}else{
			$style  = "<style>
			table{
				border: 1px !important;
				border-collapse: collapse !important;
				empty-cells: show !important;
				max-width: 100% !important;
				font-size: 13px !important;
			}
			tbody {
				border: 1px !important;
				border-collapse: collapse !important; 
				empty-cells: show !important;
				max-width: 100% !important;
				font-size: 13px !important;
			}
			td, th {
				border: 1px solid #000 !important;
				font-size: 13px !important;
			}
			td.fr-thick,th.fr-thick {
				border-width: 2px !important;
			}
			table.fr-dashed-borders td, table.fr-dashed-borders th {
				border-style: dashed !important;
			}
			</style>";
		}
		$print_design  = $style."".$print_design;
		$print_design  = str_replace('~','"',$print_design);
		$block_qry    = 'select * from cw_print_block where print_block_for = "'.$print_doc_id.'" and trans_status = 1';
		$block_data   = $this->db->query("CALL sp_a_run ('SELECT','$block_qry')");
		$block_result = $block_data->result();
		$block_data->next_result();
		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;
			$suppressed_data       = $block->suppressed_data;
			$cumulative_data       = $block->cumulative_data;
			
			$table_qry    = 'select * from cw_print_table where print_table_for_id = "'.$prime_print_block_id.'" and trans_status = 1';
			$table_data   = $this->db->query("CALL sp_a_run ('SELECT','$table_qry')");
			$table_result = $table_data->result();
			$table_data->next_result();
			$line_table_query = "";
			$cutome_table_check = array('transactions'=>'cw_transactions','custom_employees'=>'cw_custom_employees');
			foreach($table_result as $table){
				$line_prime_table      = $table->line_prime_table;
				$line_prime_col        = $table->line_prime_col;
				$line_join_type        = $table->line_join_type;
				$line_join_table       = $table->line_join_table;
				$line_join_col         = $table->line_join_col;
				$line_sort             = $table->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){
					if($cutome_table_check[$module_name]){
						$line_prime_table = " $line_prime_table ";
					}
					if($cutome_table_check[$join_module_name]){
						$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{
					if($cutome_table_check[$join_module_name]){
						$line_table_query .= " $line_join_type join $line_join_table on $line_join_col = $line_prime_col "; 
					}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_ytd_query = "";
				$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 === "custom_employees")){
						$control_name = "employees";
					}
					$form_qry    = 'select 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 prime_module_id = "'.$control_name.'" and  label_name = "'.$column.'"  and trans_status = "1"';
					$form_data   = $this->db->query("CALL sp_a_run ('SELECT','$form_qry')");
					$form_result = $form_data->result();
					$form_data->next_result();
					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((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_qry    = 'select * from cw_print_table_where where where_for_id = "'.$prime_print_block_id.'" and trans_status = 1';
			$where_data   = $this->db->query("CALL sp_a_run ('SELECT','$where_qry')");
			$where_result = $where_data->result();
			$where_data->next_result();
			$where_condition = "";
			if($where_result){
				$where_condition = str_replace('^','"',$where_result[0]->where_condition);
				$where_condition = str_replace('@logged_id@',$view_id,$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));
				$end_fin_date   = $this->financial_info[0]->end_date;
				$end_fin_date   = date('m-Y',strtotime($end_fin_date));
				$select_ytd_query = rtrim($select_ytd_query,',');
				$select_ytd_query = rtrim($select_ytd_query,' , ');
				$where_ytd_condition  = ' 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("'.$end_fin_date.'", "%m-%Y"), "%Y-%m")';
				$final_ytd_qry = "select $select_ytd_query from $line_table_query $pick_query  where $where_trans $where_condition  $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";
			$final_data   = $this->db->query("CALL sp_a_run ('SELECT','$final_qry')");
			$final_result = $final_data->result();
			$final_data->next_result();
			$tr_line = "";
			$th_line = "";
			$count = 0;
			$assign_date_formate_list  = array("DMY"=>"d-m-Y","YMD"=>"Y-m-d","DFY"=>"d F Y","MY"=>"F-Y","YM"=>"Y-F","D"=>"d","M"=>"M","Y"=>"Y");
			$split_qry    = 'select * from cw_print_split where trans_status = 1 and split_table_info ="'.$print_doc_id.'"';
			$split_data   = $this->db->query("CALL sp_a_run ('SELECT','$split_qry')");
			$split_result = $split_data->result();
			$split_data->next_result();
			$split_array = array();
			foreach($split_result as $split){
				$split_info  = $split->split_info;
				$split_colum = $split->split_colum;
				$split_array[$split_colum] = $split_info;
			}		
			if($final_result){
				$data['print_sts'] = true;
				foreach($final_result as $rslt){
					$count++;
					$map_column = explode(",",$print_block_column ?? "");
					$td_line = "";
					foreach($map_column as $table_column){
						$map_column   = explode(".",$table_column ?? "");
						$column 	  = $map_column[1];
						$value        = $rslt->$column;
						$replace_val  = "@".$column."@";
						//amount number is changed to in words for net pays--07SEP2019
						if($column == 'net_pay'){
							$value         = $rslt->$column;
							$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);
						}else
						if($column == 'employee_name'){
							$value         = ucwords($rslt->$column);
							$print_design  = str_replace($replace_val,$value,$print_design);
						}else
						if($column == 'reporting_person'){
							$value         = ucwords($rslt->$column);
							$print_design  = str_replace($replace_val,$value,$print_design);
						}else
						if($column == 'salary'){
							$value         = $rslt->$column;
							$print_design  = str_replace($replace_val,$value,$print_design);
							$salary_val   = $value;
							$salary_words = $this->numbertowords($salary_val);
							$salary_words = ucwords($salary_words);
							$print_design  = str_replace("@salary_words@",$salary_words,$print_design);
						}
						
						if($split_array[$replace_val]){
							//Process split informtion 
							$process_function = $split_array[$replace_val];
							if((int)$process_function === 1){
								$transactions_month = $final_result[0]->transactions_month;
								$employee_code      = $final_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 = strtolower(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));
								$th_line .= "<th style='text-align:center;'>$head_name</th>";
							}
						}
					}
					if($print_block_type === 2){
						if($count === 1){
							$th_line  = "$th_line";
						}
						$tr_line .= "<tr>$td_line</tr>";
					}
				}
				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);
				}
			}
			$data['suppressed_data'] = $suppressed_data;
		}
		$print_design = str_replace("<br>","",$print_design);
		$data['print_design'] = $print_design;
		return $data;
	}
	
	//email data print
	public function load_email_data($email_doc_id,$view_id){
		$data['print_sts'] = false;
		$design_qry    = 'select email_design,print_type from cw_email_design inner join cw_print_info on cw_print_info.prime_print_info_id=cw_email_design.email_design_for where email_design_for = "'.$email_doc_id.'" and cw_print_info.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    = $design_result[0]->email_design;
		$print_type      = $design_result[0]->print_type;
		if((int)$print_type === 4){
			$style = '';
		}else{
			$style  = "<style>
			table{
				border: 1px !important;
				border-collapse: collapse !important;
				empty-cells: show !important;
				max-width: 100% !important;
				font-size: 13px !important;
			}
			tbody {
				border: 1px !important;
				border-collapse: collapse !important; 
				empty-cells: show !important;
				max-width: 100% !important;
				font-size: 13px !important;
			}
			td, th {
				border: 1px solid #000 !important;
				font-size: 13px !important;
			}
			td.fr-thick,th.fr-thick {
				border-width: 2px !important;
			}
			table.fr-dashed-borders td, table.fr-dashed-borders th {
				border-style: dashed !important;
			}
			</style>";
		}
		$print_design  = $style."".$print_design;
		$print_design  = str_replace('~','"',$print_design);
		$block_qry    = 'select * from cw_print_block where print_block_for = "'.$email_doc_id.'" and trans_status = 1';
		$block_data   = $this->db->query("CALL sp_a_run ('SELECT','$block_qry')");
		$block_result = $block_data->result();
		$block_data->next_result();
		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;
			$suppressed_data       = $block->suppressed_data;
			$cumulative_data       = $block->cumulative_data;
			
			$table_qry    = 'select * from cw_print_table where print_table_for_id = "'.$prime_print_block_id.'" and trans_status = 1';
			$table_data   = $this->db->query("CALL sp_a_run ('SELECT','$table_qry')");
			$table_result = $table_data->result();
			$table_data->next_result();
			$line_table_query = "";
			$cutome_table_check = array('transactions'=>'cw_transactions','custom_employees'=>'cw_custom_employees');
			foreach($table_result as $table){
				$line_prime_table      = $table->line_prime_table;
				$line_prime_col        = $table->line_prime_col;
				$line_join_type        = $table->line_join_type;
				$line_join_table       = $table->line_join_table;
				$line_join_col         = $table->line_join_col;
				$line_sort             = $table->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){
					if($cutome_table_check[$module_name]){
						$line_prime_table = " $line_prime_table ";
					}
					if($cutome_table_check[$join_module_name]){
						$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{
					if($cutome_table_check[$join_module_name]){
						$line_table_query .= " $line_join_type join $line_join_table on $line_join_col = $line_prime_col "; 
					}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_ytd_query = "";
				$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 === "custom_employees")){
						$control_name = "employees";
					}
					$form_qry    = 'select 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 prime_module_id = "'.$control_name.'" and  label_name = "'.$column.'"  and trans_status = "1"';
					$form_data   = $this->db->query("CALL sp_a_run ('SELECT','$form_qry')");
					$form_result = $form_data->result();
					$form_data->next_result();
					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((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_qry    = 'select * from cw_print_table_where where where_for_id = "'.$prime_print_block_id.'" and trans_status = 1';
			$where_data   = $this->db->query("CALL sp_a_run ('SELECT','$where_qry')");
			$where_result = $where_data->result();
			$where_data->next_result();
			$where_condition = "";
			if($where_result){
				$where_condition = str_replace('^','"',$where_result[0]->where_condition);
				$where_condition = str_replace('@logged_id@',$view_id,$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));
				$end_fin_date   = $this->financial_info[0]->end_date;
				$end_fin_date   = date('m-Y',strtotime($end_fin_date));
				$select_ytd_query = rtrim($select_ytd_query,',');
				$select_ytd_query = rtrim($select_ytd_query,' , ');
				$where_ytd_condition  = ' 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("'.$end_fin_date.'", "%m-%Y"), "%Y-%m")';
				$final_ytd_qry = "select $select_ytd_query from $line_table_query $pick_query  where $where_trans $where_condition  $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";
			$final_data   = $this->db->query("CALL sp_a_run ('SELECT','$final_qry')");
			$final_result = $final_data->result();
			$final_data->next_result();
			$tr_line = "";
			$th_line = "";
			$count = 0;
			$assign_date_formate_list  = array("DMY"=>"d-m-Y","YMD"=>"Y-m-d","DFY"=>"d F Y","MY"=>"F-Y","YM"=>"Y-F","D"=>"d","M"=>"M","Y"=>"Y");
			$split_qry    = 'select * from cw_print_split where trans_status = 1 and split_table_info ="'.$print_doc_id.'"';
			$split_data   = $this->db->query("CALL sp_a_run ('SELECT','$split_qry')");
			$split_result = $split_data->result();
			$split_data->next_result();
			$split_array = array();
			foreach($split_result as $split){
				$split_info  = $split->split_info;
				$split_colum = $split->split_colum;
				$split_array[$split_colum] = $split_info;
			}		
			if($final_result){
				$data['print_sts'] = true;
				foreach($final_result as $rslt){
					$count++;
					$map_column = explode(",",$print_block_column ?? "");
					$td_line = "";
					foreach($map_column as $table_column){
						$map_column   = explode(".",$table_column ?? "");
						$column 	  = $map_column[1];
						$value        = $rslt->$column;
						$replace_val  = "@".$column."@";
						//amount number is changed to in words for net pays--07SEP2019
						if($column == 'net_pay'){
							$value         = $rslt->$column;
							$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);
						}else
						if($column == 'employee_name'){
							$value         = ucwords($rslt->$column);
							$print_design  = str_replace($replace_val,$value,$print_design);
						}else
						if($column == 'reporting_person'){
							$value         = ucwords($rslt->$column);
							$print_design  = str_replace($replace_val,$value,$print_design);
						}else
						if($column == 'salary'){
							$value         = $rslt->$column;
							$print_design  = str_replace($replace_val,$value,$print_design);
							$salary_val   = $value;
							$salary_words = $this->numbertowords($salary_val);
							$salary_words = ucwords($salary_words);
							$print_design  = str_replace("@salary_words@",$salary_words,$print_design);
						}
						
						if($split_array[$replace_val]){
							//Process split informtion 
							$process_function = $split_array[$replace_val];
							if((int)$process_function === 1){
								$transactions_month = $final_result[0]->transactions_month;
								$employee_code      = $final_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 = strtolower(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));
								$th_line .= "<th style='text-align:center;'>$head_name</th>";
							}
						}
					}
					if($print_block_type === 2){
						if($count === 1){
							$th_line  = "$th_line";
						}
						$tr_line .= "<tr>$td_line</tr>";
					}
				}
				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);
				}
			}
			$data['suppressed_data'] = $suppressed_data;
		}
		$print_design = str_replace("<br>","",$print_design);
		$data['print_design'] = $print_design;
		return $data;
	}
	
	// GENERATE PDF
	public function generate_pdf($table_data,$category,$emp_num,$controller_name){
		$category_info   = $this->db->query("CALL sp_a_run ('SELECT','SELECT category_name FROM `cw_category` where trans_status = 1 and prime_category_id = $category')");
		$category_result = $category_info->result();
		$category_info->next_result();
		$category_name   = $category_result[0]->category_name;
		$category_name   = strtolower(str_replace(" ","_",$category_name));
		// Load pdf library
        $this->load->library('pdf');
			// Load HTML content 
		$this->dompdf->loadHtml($table_data);
			// (Optional) Setup the paper size and orientation
		$this->dompdf->setPaper('A4', 'portrait');
			// Render the HTML as PDF
		$this->dompdf->render();
			// Output the generated PDF (1 = download and 0 = preview)
		$output = $this->dompdf->output();
		$folder     = $controller_name;
		$folder1    = $controller_name."_".$category_name;
		$pdf_name   = $emp_num;
		$final_html = $output;
		$oldmask    = umask(0);
		if(!file_exists($folder)){
			mkdir($folder, 0777, true);
		}
		if(!file_exists($folder."/".$folder1)){
			mkdir($folder."/".$folder1, 0777, true);
		}
		//Check File Exist
		if(file_exists($folder."/".$folder1."/".$pdf_name.".pdf")){
			chmod($folder."/".$folder1."/".$pdf_name.".pdf", 0777);
			unlink($folder."/".$folder1."/".$pdf_name.".pdf");
		}
		file_put_contents($folder."/".$folder1."/".$pdf_name.".pdf" , $final_html);
		chmod($folder."/".$folder1."/".$pdf_name.".pdf", 0777);
		umask($oldmask);
		$path = $folder."/".$folder1."/".$pdf_name.".pdf";
		chmod($path, 0777, true);
		return $path;
	}
	//number to words changed in payslip
	public function numbertowords($number){
		$no       = round($number);
		$point    = round($number - $no, 2) * 100;
		$hundred  = null;
		$digits_1 = strlen($no);
		$i = 0;
		$str = array();
		$words = array('0' => '', '1' => 'One', '2' => 'Two',
			'3' => 'Three', '4' => 'Four', '5' => 'Five', '6' => 'Six',
			'7' => 'Seven', '8' => 'Eight', '9' => 'Nine',
			'10' => 'Ten', '11' => 'Eleven', '12' => 'Twelve',
			'13' => 'Thirteen', '14' => 'Fourteen',
			'15' => 'Fifteen', '16' => 'Sixteen', '17' => 'Seventeen',
			'18' => 'Eighteen', '19' =>'Nineteen', '20' => 'Twenty',
			'30' => 'Thirty', '40' => 'Forty', '50' => 'Fifty',
			'60' => 'Sixty', '70' => 'Seventy',
			'80' => 'Eighty', '90' => 'Ninety');
		$digits = array('', 'Hundred', 'Thousand', 'Lakh', 'Crore');
		while ($i < $digits_1) {
			$divider = ($i == 2) ? 10 : 100;
			$number = floor($no % $divider);
			$no = floor($no / $divider);
			$i += ($divider == 10) ? 1 : 2;
			if ($number) {
				$plural = (($counter = count($str ?? [])) && $number > 9) ? '' : null;
				$hundred = ($counter == 1 && $str[0]) ? ' and ' : null;
				$str [] = ($number < 21) ? $words[$number] .
				" " . $digits[$counter] . $plural . " " . $hundred
				:
				$words[floor($number / 10) * 10]
				. " " . $words[$number % 10] . " "
				. $digits[$counter] . $plural . " " . $hundred;
			} else $str[] = null;
		}
		$str = array_reverse($str);
		$result = implode('', $str ?? []);
		$points = ($point) ? "." . $words[$point / 10]. " ".$words[$point = $point % 10] : '';
		return $result;
	}
	public function dynamic_mail_sent($form_id,$pick_array,$previous_data){
		$arraycompare 	    = array_diff_assoc($pick_array ?? [],$previous_data ?? []);
		$column_data_qry    = 'select cw_email_info.table_values,cw_email_info.query_list_id from cw_email_info where cw_email_info.email_info_module_id = "custom_approval" and cw_email_info.trans_status = 1';
		$column_data_info   = $this->db->query("CALL sp_a_run ('SELECT','$column_data_qry')");
		$column_data_rlst	= $column_data_info->result_array();
		$column_data_info->next_result();
		$column_data_rlst   = array_reduce($column_data_rlst, function($result, $arr){
		    $result[$arr['query_list_id']][] = $arr['table_values'];
		    return $result;
		}, array());

		// Keep only hr_status key with its value _ARN 15-10-2025
		if($this->config->item("db_name") === 'aeq_hrms_db'){
			if(isset($arraycompare['hr_status']) && $arraycompare['hr_status'] == 3){
				$column_data_rlst = array('hr_status' => $column_data_rlst['hr_status']);
			}
		}

		$final_pick 	   = array_intersect_key($arraycompare, $column_data_rlst);
		$column 		   = http_build_query($final_pick, '', '&');
		$column_qry = "";
		$mobile_no = "";
		if($column){
			$column 	   = str_replace('=','" and table_values = "',$column);
			$column 	   = str_replace('&','") or (query_list_id = "',$column);
			$column_qry	   = '(query_list_id = "'.$column.'")';
			$mail_status = "";
			//Email Info
			$email_info_qry    	= 'select cw_email_info.email_info_name,cw_email_info.email_attach_column,cw_email_info.prime_email_info_id,email_design,email_subject from cw_email_info INNER JOIN cw_mail_design ON cw_mail_design.email_design_for = cw_email_info.prime_email_info_id where cw_email_info.email_info_module_id = "custom_approval" and cw_email_info.trans_status = 1 and '.$column_qry.'';
			$email_data_info   	= $this->db->query("CALL sp_a_run ('SELECT','$email_info_qry')");
			$email_info_rsLt	= $email_data_info->result();
			$email_data_info->next_result();
			$column_data_qry    	= 'select email_table_email_column,cw_email_block.prime_email_block_id,email_block_for,email_block_type,email_block_table,email_block_column,email_name_table,email_table_column,email_table_email_column,email_table_list FROM cw_email_block INNER JOIN cw_email_table on cw_email_table.email_name_table = cw_email_block.prime_email_block_id  WHERE cw_email_block.email_block_module_id = "custom_approval" and cw_email_block.trans_status = 1 and cw_email_table.trans_status = 1 order by cw_email_block.email_block_type';
			$column_data_info   	= $this->db->query("CALL sp_a_run ('SELECT','$column_data_qry')");
			$column_data_rsLt	= $column_data_info->result_array();
			$column_data_info->next_result();
			$email_block_rsLt = array_reduce($column_data_rsLt, function($result, $arr){			
		    $result[$arr['email_block_for']][] = $arr;
			    return $result;
			}, array());

			$where_qry    = 'select where_condition,where_for_id from cw_email_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());

			$table_join_qry  	= 'select line_prime_table,line_prime_col,line_join_type,line_join_table,line_join_col,line_sort,email_table_for_id from cw_email_table_join where trans_status = 1';
			$table_join_info   	= $this->db->query("CALL sp_a_run ('SELECT','$table_join_qry')");
			$table_join_rlst	= $table_join_info->result_array();
			$table_join_info->next_result();
			$table_join_rlst = array_reduce($table_join_rlst, function($result, $arr){			
			    $result[$arr['email_table_for_id']][] = $arr;
			    return $result;
			}, array());

			$table_content_join_qry  	= 'select line_prime_table_content,line_prime_col_content,line_join_type_content,line_join_table_content,line_join_col_content,line_sort_content,email_content_table_for_id from cw_email_content_table_join where trans_status = 1';
			$table_content_join_info   	= $this->db->query("CALL sp_a_run ('SELECT','$table_content_join_qry')");
			$table_content_join_rslt	= $table_content_join_info->result_array();
			$table_content_join_info->next_result();
			$table_content_join_rslt = array_reduce($table_content_join_rslt, function($result, $arr){			
			    $result[$arr['email_content_table_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 = $form_data->result_array();
			$form_data->next_result();
			$form_result = array_reduce($form_result, function($result, $arr){			
			    $result[$arr['prime_module_id']][$arr['label_name']][] = $arr;
			    return $result;
			}, array());

			$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();

			$config_query  = 'SELECT smtp_server,sender_name,bcc,port_no,sender_email,mail_username,mail_password,connection_type FROM cw_mail_configurations WHERE mail_status = 1 and trans_status = 1';
			$config_info   = $this->db->query("CALL sp_a_run ('SELECT','$config_query')");
			$config_result = $config_info->result();
			$config_info->next_result();

			$attachment_qry  = 'SELECT prime_print_design_id,print_design FROM cw_print_design WHERE trans_status = 1';
			$attachment_info = $this->db->query("CALL sp_a_run ('SELECT','$attachment_qry')");
			$attachment_rlst = $attachment_info->result_array();
			$attachment_info->next_result();
			$attachment_rlst = array_reduce($attachment_rlst, function($result, $arr){			
			    $result[$arr['prime_print_design_id']] = $arr;
			    return $result;
			}, array());

			$get_to_mail = "";
			$cc_mail_column="";
			foreach ($email_info_rsLt as $key => $value){
				$prime_email_info_id 	= $value->prime_email_info_id;
				$email_subject   		= $value->email_subject;
				$email_design   		= $value->email_design;
				$email_attach_column	= $value->email_attach_column;
				$pdf_name 				= $value->email_info_name;
				$attachment 			= $attachment_rlst[$email_attach_column]['print_design'];
				$email_block_rslts      = $email_block_rsLt[$prime_email_info_id];
				foreach ($email_block_rslts as $key => $value){
					$email_block_id 	= $value['prime_email_block_id'];
					$email_block_for 	= $value['email_block_for'];
					$email_block_type 	= $value['email_block_type'];
					$email_block_table 	= $value['email_block_table'];
					$email_block_column = $value['email_block_column'];
					$select_qry_column  = $value['email_table_column'];
					$select_attach_col  = $value['email_table_attach'];
					$email_column       = $value['email_table_email_column'];	
					$mail_status_name   = $value['email_block_name'];
					$bcc_mail 			= $value['bcc_mail'];
					if((int)$email_block_type === 1){
						$where_prime_id 	 = "cw_custom_employees.prime_custom_employees_id";
						$prime_select_column = $select_qry_column;
					}
				$table_join_result  		= $table_join_rlst[$email_block_id];
				$table_content_join_result  = $table_content_join_rslt[$email_block_id];
				$line_table_query 	= "";
				foreach ($table_join_result as $join_key => $table){
					$line_prime_table      = $table['line_prime_table'];
					$line_prime_col        = $table['line_prime_col'];
					$line_join_type        = $table['line_join_type'];
					$line_join_table       = $table['line_join_table'];
					$line_join_col         = $table['line_join_col'];
					$line_sort             = $table['line_sort'];
					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 "; 
					}
				}
				$line_table_content_query 	= "";
				foreach ($table_content_join_result as $join_key => $table){
					$line_prime_table_content      = $table['line_prime_table_content'];
					$line_prime_col_content        = $table['line_prime_col_content'];
					$line_join_type_content        = $table['line_join_type_content'];
					$line_join_table_content       = $table['line_join_table_content'];
					$line_join_col_content         = $table['line_join_col_content'];
					$line_sort_content             = $table['line_sort_content'];
					if((int)$line_sort === 1){
						$line_prime_table_content = " $line_prime_table_content ";
						$line_join_table_content  = " $line_join_table_content on $line_join_col_content = $line_prime_col_content ";
						$line_table_content_query .= " $line_prime_table_content  $line_join_type_content join $line_join_table_content"; 
					}else{
						$line_table_content_query .= " $line_join_type_content join $line_join_table_content on $line_join_col_content = $line_prime_col_content "; 
					}
				}
				if(!$line_table_query){
					$line_table_query = " $email_block_table ";
				}
				if(!$line_table_content_query){
					$line_table_content_query = " $email_block_table ";
				}
				if(!$select_qry_column){
					$select_qry_column = "*";
				}else{
					$select_query 	  = "";
					$pick_query       = "";
					$select_attach_column 	= "";
					$map_column = explode(",",$select_qry_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 === "custom_employees"){
							$control_name = 'employees';
						}					

						$form_result_array = $form_result[$control_name][$column];
						foreach($form_result_array 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((int)$field_type === 4){
								$select_query .= 'DATE_FORMAT('.$table_name.'.'.$label_name.', "%d-%m-%Y") as '.$label_name.' , ';
								$select_attach_column .= '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 , ";
									$select_attach_column .= "$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 , ";
									$select_attach_column .= "$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,";
								$select_attach_column .= "$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_query .= "$table_name.$label_name , ";
								$select_attach_column .= "$table_name.$label_name , ";
							}else{
								$select_query .= "$table_name.$label_name , ";
								$select_attach_column .= "$table_name.$label_name , ";
							}
						}					
					}
				}

				$where_trans = "";
				$where_trans_info = explode(",",$email_block_table ?? "");
				foreach($where_trans_info as $trans_info){
					$where_trans .= "$trans_info.trans_status = 1 and ";
				}
				$where_trans = rtrim($where_trans,'and ');
				$where_condition = "";
				if($where_result){
					$where_condition = str_replace('^','"',$where_result[$prime_email_block_id]['where_condition']);
					$where_condition = str_replace('@logged_id@',$this->logged_id,$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"); 
					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_attach_column = rtrim($select_attach_column,' , ');
				$email_column = 'CONCAT_WS(",",'.$email_column.') as mail_column';
				if((int)$email_block_type === 1){
					$prime_qry 	= "select $select_query$select_attach_column from ".$line_table_content_query." $pick_query where $where_prime_id = ".$form_id." and  $where_trans $where_condition";
					$prime_data   = $this->db->query("CALL sp_a_run ('SELECT','$prime_qry')");
					$prime_result = $prime_data->result();
					$prime_data->next_result();

					$email_qry 	  = "select $email_column from ".$line_table_query." $pick_query where $where_prime_id = ".$form_id." and  $where_trans $where_condition";
					$email_data   = $this->db->query("CALL sp_a_run ('SELECT','$email_qry')");
					$email_result = $email_data->result();
					$email_data->next_result();
					$get_to_mail  = $email_result[0]->mail_column;
				}else{
					$email_qry 	  = "select $email_column from ".$line_table_query." $pick_query where $where_prime_id = ".$form_id." and  $where_trans $where_condition";
					$email_data   = $this->db->query("CALL sp_a_run ('SELECT','$email_qry')");
					$email_result = $email_data->result();
					$email_data->next_result();
					$bcc_email          = $email_result[0]->mail_column;
					$cc_mail_column  .= $bcc_email.",";
					$bcc_email_column = rtrim($cc_mail_column,',');
				}					
			}
		}
		if($prime_result){
			$assign_date_formate_list  = array("DMY"=>"d-m-Y","YMD"=>"Y-m-d","DFY"=>"d F Y","MY"=>"F-Y","YM"=>"Y-F","D"=>"d","M"=>"M","Y"=>"Y");
			$data['email_sts'] = true;
			foreach($prime_result as $rslt){
				$count++;
				$map_column = explode(",",$prime_select_column ?? "");
				$td_line = "";
				foreach($map_column as $table_column){
					$map_column   = explode(".",$table_column ?? "");
					$column 	  = $map_column[1];
					$value        = $rslt->$column;
					$replace_val  = "@".$column."@";
					$email_design = str_replace($replace_val,$value,$email_design);
					// TODAY DATE COMES WILL REPLACED AND EMAIL SUBJECT REPLACE ADD_ARN 14-10-2025
					$today_date    = date('d-m-Y');
					$attachment    = str_replace("@today_date@",$today_date,$attachment);
					$attachment    = str_replace($replace_val,$value,$attachment);
					foreach($assign_date_formate_list as $key=>$formate){
						$start         = "@".$key."_";
						$end           = "_".$key."@";
						$replace_val   = $start.$column.$end;
						$replace_val   = $start.$column.$end;
						if(strtotime($value)){
							$date_value    = date_create($value);
							$replace_value = date_format($date_value,$formate);
						}else{
							$replace_value = $value;
						}
						$email_design  = str_replace($replace_val,$replace_value,$email_design);
						$attachment  = str_replace($replace_val,$replace_value,$attachment);
					}
				}
			}
		}
		if($attachment){
			$get_attachment 	= $this->get_email_attachment($attachment,$email_subject,$pdf_name);
		}
		if($get_to_mail){
			$mail_send_status = $this->send_mail_dynamic($mail_status_name,$get_to_mail,$config_result,$email_subject,$email_design,$bcc_mail,$get_attachment,$bcc_email_column);
		}
		}else{
			$mail_send_status    = "";
		}
		return $mail_send_status;
	}
	public function send_mail_dynamic($mail_status_name,$get_to_mail,$config_result,$email_subject,$email_design,$bcc_mail,$attachment,$bcc_email_column){
		$smtp_server   = $config_result[0]->smtp_server;
		$sender_name   = $config_result[0]->sender_name;
		//$bcc           = explode(",",$config_result[0]->bcc);
		$port_no       = $config_result[0]->port_no;
		$sender_email  = $config_result[0]->sender_email;
		$username      = $config_result[0]->mail_username;
		$password      = $config_result[0]->mail_password;
		$email_layer   = $config_result[0]->connection_type;
		if($get_to_mail){
			try{
				$mail = new PHPMailer();
				//$mail->SMTPDebug = 1;
				$mail->IsSMTP();
				$mail->Host 	= $smtp_server; // Your SMTP PArameter
				$mail->Port 	= $port_no; // Your Outgoing Port
				$mail->SMTPAuth = true; // This Must Be True
				$mail->Username = $username; // Your Email Address
				$mail->Password = $password; // Your Password
				$mail->SMTPSecure = $email_layer; // Check Your Server's Connections for TLS or  SSL
				$mail->From     = $sender_email;
				$mail->FromName = $sender_name;				
				$mail_arr       = explode(",",$get_to_mail ?? "");
				if((int)count($mail_arr ?? []) > 1){
					foreach ($mail_arr as $mail_key => $to_mail){
						$mail->AddAddress($to_mail);
					}
				}else{
					$mail->AddAddress($get_to_mail);
				}
				$bcc_mail           = explode(",",$bcc_mail ?? "");
				if((int)count($bcc_mail ?? []) > 0){
					foreach ($bcc_mail as $bcc_key => $bcc_mails){
						$mail->AddCC($bcc_mails);
					}
				}
				$bcc_email_column           = explode(",",$bcc_email_column ?? "");
				if((int)count($bcc_email_column ?? []) > 0){
					foreach ($bcc_email_column as $bccs_key => $bccs_mails){
						$mail->AddCC($bccs_mails);
					}
				}
				if(file_exists($attachment)){
					$mail->addAttachment($attachment);	
				}
				$mail->IsHTML(true);
				$mail->Subject = $email_subject;
				$mail->Body    = $email_design;
				if($mail->Send()){
					$status = 1;
					$msg = $mail_status_name." Mail Sent Successfully,";
				}else{
					$status = 0;
					$msg = $mail_status_name." Mail Not Sent,";
					echo 'Mailer error: ' . $mail->ErrorInfo;
				}	
				//Attachment
			}catch(phpmailerException $e){
				$status = 0;
				$msg = $mail_status_name." Mail Not Sent,";
			}catch(Exception $e){
				$status = 0;
				$msg = $mail_status_name." Mail Not Sent,";
			}
		}else{
			$msg = $mail_status_name." Mail Id Not Available,";
		}
		return $msg;
	}
	public function get_email_attachment($attachment,$email_subject,$pdf_name){
		//echo "BSK $attachment,$email_subject,$pdf_name"; die;
		$style  = "<style>table td.fr-highlighted,.fr-view table th.fr-highlighted{border:1px solid black !important;vertical-align: text-top;} table tr { line-height: 20px !important; } table {border-collapse: collapse !important;page-break-inside: avoid !important;}table td{vertical-align: text-top !important;}#earnings td{height : 16px;font-size:12px;}#earnings th{border-bottom:1px solid black;font-size:12px;}#earnings first-th{width:45%;}#deductions td{height : 16px;font-size:12px;}#net_pay td{height : 16px;}</style>";
		$attachment  = $style."".$attachment;
		$table_data = "<!DOCTYPE html><html> <body>".$attachment."</body></html>";

		// PREG REPLACE ADDED FOR STYLE INLINE STYLE ENABLE _ARN 14-10-2025
		$table_data  = preg_replace('/=~(.*?)~/', '="$1"', $table_data);
		// Load pdf library
        $this->load->library('pdf');
			// Load HTML content 
		$this->dompdf->loadHtml($table_data);
			// Render the HTML as PDF
		$this->dompdf->render();
			// Output the generated PDF (1 = download and 0 = preview)
		$output 	   = $this->dompdf->output();
		$conroler_name = $this->control_name;
		$pdf_name 	   = str_replace(' ', '_', $pdf_name);
		//new permission changes
		$folder     = $conroler_name."/".$pdf_name;
		$final_html = $output;
		$oldmask = umask(0);
		if (!file_exists($folder)){
			mkdir($folder, 0777, true);
		}
		if (!file_exists($conroler_name."/".$pdf_name)){
			mkdir($conroler_name."/".$pdf_name, 0777, true);
		}
		//Check File Exist
		if(file_exists($conroler_name."/".$pdf_name.".pdf")){
			chmod($conroler_name."/".$pdf_name.".pdf", 0777);
			unlink($conroler_name."/".$pdf_name.".pdf");
		}
		file_put_contents($conroler_name."/".$pdf_name.".pdf" , $final_html);
		chmod($conroler_name."/".$pdf_name.".pdf", 0777);
		umask($oldmask);
		$path = $conroler_name."/".$pdf_name.".pdf";
		chmod($path, 0777, true);
		return $path;
	}

	public function get_email_setting(){
		if($this->control_name === "employees"){
			$control_name = "custom_approval";
		}else{
			$control_name = $this->control_name;
		}
		$email_setting_qry    = 'select count(*) as email_count from cw_modules where cw_modules.module_id = "'.$control_name.'" and cw_modules.email_setting = 1 and cw_modules.trans_status = 1';
		$email_setting_info   = $this->db->query("CALL sp_a_run ('SELECT','$email_setting_qry')");
		$email_setting_result = $email_setting_info->result();
		$email_setting_info->next_result();
		$email_count 		  = $email_setting_result[0]->email_count;
		$this->email_count 	  = $email_count;
	}
	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;
	}
	public function form_setting_data($prime_module_id){
		$from_query  = 'select label_name,view_name,field_type,mandatory_field from cw_form_setting  where prime_module_id = "'.$prime_module_id.'" and field_show = "1" and trans_status = "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_array();
		$form_data->next_result();
		$form_result = array_reduce($form_result, function ($result, $arr) {
		    $result[$arr['label_name']] = $arr;
		    return $result;
		}, array());	
		return $form_result;
	}
	public function role_based_condition(){
		$role_based_query  = 'select * from cw_role_base_condition where  role_module_id = "'.$this->control_name.'" and find_in_set("'.$this->logged_user_role.'",role_condition_for) and trans_status = 1';
		$role_based_info   = $this->db->query("CALL sp_a_run ('SELECT','$role_based_query')");
		$role_based_result = $role_based_info->result();
		$role_based_info->next_result();
		$role_based_condition = array();
		foreach($role_based_result as $key => $condition) {
			$role_based_condition[$condition->user_condition_type] = $condition->input_columns;
		}
		$this->role_based_condition = $role_based_condition;
	}
	//dependent dropdown form function
	public function dependent_data_set(){
		$prime_module_id       =  $this->input->post("prime_module_id");
		$depen_select_val      =  $this->input->post("depen_select");
		$depen_pick_input      =  $this->input->post("depen_pick_input");
		$table_column1         =  $this->input->post("table_column1");
		$table_column2         =  $this->input->post("table_column2");
		$label_name            =  $this->input->post("label_id");
		$pick_table            =  $this->input->post("pick_table");
		$pick_list             =  $this->input->post("pick_list");
		$pick_display          =  $this->input->post("pick_display_val");
		$picklist_table_qry  = 'select pick_list,pick_table,prime_form_id,label_name from cw_form_setting where prime_module_id = "'.$prime_module_id.'" and label_name in ("'.$depen_pick_input.'","'.$label_name.'") and trans_status = 1';
		$picklist_table_data = $this->db->query("CALL sp_a_run ('SELECT','$picklist_table_qry')");
		$picklist_table_rslt = $picklist_table_data->result_array();
		$picklist_table_data->next_result();
		$picklist_table_rslt = array_reduce($picklist_table_rslt, function($result, $arr){	
		    $result[$arr['label_name']] = $arr;
		    return $result;
		}, array());
		$depen_pick_table    = $picklist_table_rslt[$depen_pick_input]['pick_table'];

		$pick_list_val   = explode(",",$pick_list ?? "");
		$pick_list_val_1 = $pick_list_val[0];
		$pick_list_val_2 = $pick_list_val[1];
		if($pick_display){
			$pick_list = "$pick_table.$pick_list_val_1,CONCAT_WS(\" - \", $pick_table.$pick_display) as $pick_list_val_2";
		}
		$where_condition 	   = $this->get_role_based_picklist($picklist_table_rslt[$label_name]['prime_form_id'],$prime_module_id);
		$pick_list 	= $pick_table.'.'.implode(",$pick_table.",explode(',', $pick_list ?? "") ?? []);
		$pick_query = "select $pick_list from $pick_table inner join $depen_pick_table on $depen_pick_table.$table_column1 = $pick_table.$table_column2 where $depen_pick_table.$table_column1 = \"$depen_select_val\" and $pick_table.trans_status = 1 and $depen_pick_table.trans_status = 1 $where_condition";
		$pick_data   = $this->db->query("CALL sp_a_run ('SELECT','$pick_query')");
		$pick_result = $pick_data->result();
		$pick_data->next_result();
		if($pick_result){
			$pick_key   = array_column($pick_result ?? [], $pick_list_val_1);
			$pick_val   = array_column($pick_result ?? [], $pick_list_val_2);
			$final_pick = array_combine( $pick_key ?? [], $pick_val ?? []);
		}
		$drop_list = "<option value=''>$label_name</option>";
		foreach($final_pick as $key => $val){
			$drop_list .= "<option value='$key'>$val</option>";
		}
		echo $drop_list;
	}
	//fetch data auto picklist
	public function fetch_picklist(){
		$depand_lab_val	= implode('","', $this->input->post("depand_lab_val") ?? []);
		$label_id 		= $this->input->post("label_id");
		$label_value 	= $this->input->post("label_value");
		$prime_form_id 	= $this->input->post("prime_form_id");
		$form_query  = 'select * from cw_form_setting where prime_form_id in ("'.$depand_lab_val.'","'.$prime_form_id.'")';
		$form_data   = $this->db->query("CALL sp_a_run ('SELECT','$form_query')");
		$form_result = $form_data->result_array();
		$form_data->next_result();	
		$form_result = array_reduce($form_result, function($result, $arr){	
		    $result[$arr['label_name']] = $arr;
		    return $result;
		}, array());
		$form_result_arr 	= $form_result;
		unset($form_result_arr[$label_id]);
		$dropdown_list	= array();
		foreach ($form_result_arr as $key => $form_for) {
			$field_type 	= $form_for['field_type'];
			if((int)$field_type === 5){
				$label_name 	= $form_for['label_name'];
				$pick_list 		= $form_for['pick_list'];
				$pick_table 	= $form_for['pick_table'];
				$table_column1 	= $form_for['table_column1'];
				$table_column2 	= $form_for['table_column2'];
				$dependent_pick	= $form_for['dependent_pick_input'];
				$pick_list_arr 	= explode(',', $pick_list ?? "");
				$pick_display   = $form_for['pick_display_value'];
				$pick_list_key  = $pick_list_arr[0];
				$pick_list_val  = $pick_list_arr[1];
				if($pick_display){
					$pick_list  = "$pick_table.$pick_list_key,CONCAT_WS(\" - \", $pick_table.$pick_display) as $pick_list_val";
				}
				$depen_pick_tbl = $form_result[$dependent_pick]['pick_table'];
				$inner_join 	= ' inner join '.$depen_pick_tbl.' on '.$depen_pick_tbl.'.'.$table_column1.' = '.$pick_table.'.'.$table_column2.'';
				$inner_where 	= ' and '.$depen_pick_tbl.'.trans_status = 1';
				$where_condition 	   = $this->get_role_based_picklist($this->control_name,$prime_form_id);
				$select_qry 	= 'select '.$pick_list.' from '.$pick_table.' '.$inner_join.' where '.$pick_table.'.trans_status = 1 and '.$pick_table.'.'.$table_column2.' = "'.$label_value.'" '.$inner_where.' '.$where_condition.' ';
				$select_info    = $this->db->query("CALL sp_a_run ('SELECT','$select_qry')");
				$select_rslt   	= $select_info->result();
				$select_info->next_result();

				$pick_key 		= array_column($select_rslt ?? [], $pick_list_key);
				$pick_value 	= array_column($select_rslt ?? [], $pick_list_val);
				$dropdown_list[$label_name]  = array_combine($pick_key ?? [], $pick_value ?? []);
			}
		}
		echo json_encode(array('success' => TRUE, 'message' => "Proceed..!",'dropdown_list'=>$dropdown_list));
	}
	//formula column label name coloring
	public function coloring_label(){
		$formula_qry     = 'select * from cw_form_bind_input where input_cond_module_id = "'.$this->control_name.'" and trans_status = 1';
		$formula_data    = $this->db->query("CALL sp_a_run ('SELECT','$formula_qry')");
		$formula_result  = $formula_data->result();
		$formula_data->next_result();
		$this->formula_result = $formula_result;
	}
	public function suggest_auto_filter(){
		$search_term    = $this->input->post_get('term');		
		$prime_form_id  = $this->input->get('prime_form_id');
		$form_query     = 'select * from cw_form_setting where prime_form_id = "'.$prime_form_id.'"';
		$form_data   = $this->db->query("CALL sp_a_run ('SELECT','$form_query')");
		$form_result = $form_data->result();
		$form_data->next_result();	
		$where_condition 	   = $this->get_role_based_picklist($prime_form_id,$this->control_name);
		if($form_result){
			$pick_table          = $form_result[0]->pick_table;
			$pick_list           = $form_result[0]->pick_list;
			$auto_prime_id       = $form_result[0]->auto_prime_id;
			$auto_dispaly_value  = $form_result[0]->auto_dispaly_value;
			
			$auto_list = "CONCAT(".str_replace(",",'," - ",',$pick_list).") as auto_list";
			$suggest_query = "select $auto_prime_id,$auto_dispaly_value,$auto_list from $pick_table where ";
			$col_list      = explode(",",$pick_list ?? "");
			$where_query  = "";
			foreach($col_list as $col){
				$search_term = str_replace('"',"~",$search_term);
				$search_term = str_replace("'","`",$search_term);
				$search_term = str_replace("&","^",$search_term);
				$where_query .= $col.' like "'.$search_term.'%" or ';
			}
			$where_query    = rtrim($where_query," or ");
			$suggest_query .= $where_query;
			$suggest_query .= $where_condition;
			$suggest_data   = $this->db->query("CALL sp_a_run ('SELECT','$suggest_query')");
			$suggest_result = $suggest_data->result();
			$suggest_data->next_result();
			foreach($suggest_result as $result){
				$suggest_prime_id  = $result->$auto_prime_id;
				$suggest_dispaly   = $result->$auto_dispaly_value;
				$suggest_dispaly   = str_replace("~",'"',$suggest_dispaly);
				$suggest_dispaly   = str_replace("`","'",$suggest_dispaly);
				$suggest_dispaly   = str_replace("^","&",$suggest_dispaly);
				$suggest_list      = $result->auto_list;
				$suggest_list  = str_replace("~",'"',$suggest_list);
				$suggest_list  = str_replace("`","'",$suggest_list);
				$suggest_list  = str_replace("^","&",$suggest_list);
				$suggestions[] = array('value' => $suggest_prime_id, 'label' => $suggest_list, 'display_name' => $suggest_dispaly);
			}
		}
		if(empty($suggestions)){
			$suggestions[] = array('value' => "0", 'label' => "No data found for this search");
		}
		echo json_encode($suggestions);		
	}
	//DEPENDENT PRIME ID ARRAY FOR ALL DYNAMIC MODULE START
	public function get_depend_fun(){
		$get_depend_arr       = json_decode(json_encode($this->form_info),true);
		$get_depend_prime_id  = array_reduce($get_depend_arr, function($result, $arr){	
		    $result[$arr['label_name']] = $arr;
		    return $result;
		}, array());
		return $get_depend_prime_id;
	}
	//depend_label_id autopick
	public function depend_label_fun(){
		$get_depend_arr       = json_decode(json_encode($this->form_info),true);
		$depend_label_id  = array_reduce($get_depend_arr, function($result, $arr){	
			if((int)$arr['field_type'] === 9){
		    	$result[$arr['label_name']] = $arr['dependent_pick_input'];
		    }
		    return $result;
		}, array());
		return $depend_label_id;
	}
	//prev view inputs
	public function get_previous_view($form_id){
		$control_name 	 = "employees";
		$table_name   	 = "cw_".$control_name;
		$prime_table_id  = "prime_".$control_name."_id";
		$column_query = 'select label_name,default_value from cw_form_setting  where prime_module_id = "'.$control_name.'" and field_show = "1" and input_view_type in(1,2) and trans_status = "1" and FIND_IN_SET("'.$this->logged_user_role.'",user_right_for) ORDER BY input_for,field_sort asc';
		$column_info   = $this->db->query("CALL sp_a_run ('SELECT','$column_query')");
		$column_rslt   = $column_info->result();
		$column_info->next_result();
		$column_name   = array_column($column_rslt ?? [],'label_name');
		$default_value = array_column($column_rslt ?? [],'default_value');
		$form_result   = array();
		if($column_name){
			if((int)$form_id === 0){
				$form_result[0] = array_combine($column_name, $default_value);			
			}else{
				$from_query  = 'select '.implode(",",$column_name ?? []).' from '.$table_name.' where '.$table_name.'.trans_status = 1 and '.$table_name.'.'.$prime_table_id.' = '.$form_id.' ';	
				$form_data   = $this->db->query("CALL sp_a_run ('SELECT','$from_query')");
				$form_result = $form_data->result_array();
				$form_data->next_result();			
			}			
		}			
		return $form_result;
	}
}
?>