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/.trash/application_bkold/models/Fandf_calculation_model.php
<?php
 class Fandf_calculation_model extends CI_Model{ 
		 
	private $month_day_res;
		  
	private $sup_emp;
		  
	private $ptax_rslt;
		  
	private $statutory_arr;
		  
	private $get_map_arr;
		  
	private $lwf_emp_arr;
		  
	private $emp_date_arr;
		  
	private $gratuity_arr;
		  
	private $ptax_arr;
		  
	public function Payroll_calculation($trans_array){
 		$month_day_qry    = 'SELECT category,day_conditions,day_count,day_start,day_end from cw_month_day where cw_month_day.trans_status = 1 ';
		$month_day_data   = $this->db->query("CALL sp_a_run ('SELECT','$month_day_qry')");
		$month_day_result = $month_day_data->result_array();
		$month_day_data->next_result();
		$this->month_day_res = array_reduce($month_day_result, function ($result, $arr) {
		    $result[$arr['category']] = $arr;
		    return $result;
		}, array()); 
	
	       //get tax settings info
			$ptax_qry = 'select cw_professional_tax.prime_professional_tax_id,location,calculation_period,ptax_deduction_month_first as first_period,ptax_deduction_month_second as second_period, osm_first_end,osm_second_end,osm_first_start,osm_second_start from cw_professional_tax where cw_professional_tax.trans_status = 1';
			$ptax_data   = $this->db->query("CALL sp_a_run ('SELECT','$ptax_qry')");
			$ptax_result = $ptax_data->result_array();
			$ptax_data->next_result();
			$this->ptax_rslt = array_reduce($ptax_result, function ($result, $arr) {
				$result[$arr['location']] = $arr;
				return $result;
			}, array()); 
	
 		// get_document_fees
		/*$payroll_exist_query = 'SELECT employee_code,count(employee_code) as pay_count from cw_transactions where termination_status = 0 and trans_status = 1 group by employee_code';
		$payroll_exist_info   = $this->db->query("CALL sp_a_run ('RUN','$payroll_exist_query')");
		$payroll_exist_result = $payroll_exist_info->result_array();
		$payroll_exist_info->next_result();*/

        //get statutory array
		$get_statutory_qry 	= 'SELECT * FROM cw_statutory WHERE trans_status = 1';
		$get_statutory_info   	= $this->db->query("CALL sp_a_run ('SELECT','$get_statutory_qry')");
		$get_statutory_rslt 	= $get_statutory_info->result_array();
		$get_statutory_info->next_result();
		$this->statutory_arr 	= array_reduce($get_statutory_rslt, function ($result, $arr) {
			$result[$arr['category']] = $arr;
			return $result;
		}, array()); 
	
		//get Payroll Function Map array
		$get_map_qry 		= 'select * from cw_payroll_function_map where trans_status=1';
		$get_map_info   	= $this->db->query("CALL sp_a_run ('SELECT','$get_map_qry')");
		$get_map_rslt 		= $get_map_info->result_array();
		$get_map_info->next_result();
		$this->get_map_arr = array_reduce($get_map_rslt, function ($result, $arr) {
			$result[$arr['loc_name']] = $arr;
			return $result;
		}, array()); 
	
		//Get lwf_employee & lwf_employer
		$select_lwf_qry 			= 'select pay_month,company_amount,employee_amount from cw_lwf_setting inner join cw_lwf_setting_lwf_pay_month on cw_lwf_setting_lwf_pay_month.prime_lwf_setting_id=cw_lwf_setting.prime_lwf_setting_id WHERE cw_lwf_setting.trans_status =1';
		$select_lwf_data   		= $this->db->query("CALL sp_a_run ('SELECT','$select_lwf_qry')");
		$select_lwf_result 		= $select_lwf_data->result_array();
		$select_lwf_data->next_result();
		$this->lwf_emp_arr 		= array_reduce($select_lwf_result, function ($result, $arr) {
			$result[$arr['lwf_location']] = $arr;
			return $result;
		}, array()); 
	

		//Get Employee Date
		$emp_date_qry 				= 'select last_working_date,date_of_joining,employee_code,termination_status,esi_location,esi_eligibility from cw_employees where trans_status = 1';
		$emp_date_data   			= $this->db->query("CALL sp_a_run ('SELECT','$emp_date_qry')");
		$emp_date_rslt 			= $emp_date_data->result_array();
		$emp_date_data->next_result();

		
	
		foreach($emp_date_rslt as $key => $value){
			$this->emp_date_arr[$value['employee_code']] = $value;
		}  
	


		/*$this->emp_date_arr 		= array_reduce($emp_date_rslt, function ($result, $arr) {
			$result[$arr['employee_code']] = $arr;
			return $result;
		}, array()); 
	*/

		//Get Gratuity
		$check_eligibilty_qry 		= 'select category,working_days,number_of_years,pay_days,year_rounding,formula_detail,formula_rounding from cw_gratuity where trans_status = 1';
		$check_eligibilty_data   	= $this->db->query("CALL sp_a_run ('SELECT','$check_eligibilty_qry')");
		$check_eligibilty_result 	= $check_eligibilty_data->result_array();
		$check_eligibilty_data->next_result();
		$this->gratuity_arr 		= array_reduce($check_eligibilty_result, function ($result, $arr) {
			$result[$arr['category']] = $arr;
			return $result;
		}, array()); 
	

		//Get Gratuity
		$ptax_arr_qry 		= 'select cw_professional_tax.prime_professional_tax_id,location,calculation_period,ptax_deduction_month_first as first_period,ptax_deduction_month_second as second_period, osm_first_end,osm_second_end,osm_first_start,osm_second_start from cw_professional_tax_tax_range inner join cw_professional_tax on cw_professional_tax.prime_professional_tax_id = cw_professional_tax_tax_range.prime_professional_tax_id where cw_professional_tax.trans_status = 1';
		$ptax_arr_data   	= $this->db->query("CALL sp_a_run ('SELECT','$ptax_arr_qry')");
		$ptax_arr_result 	= $ptax_arr_data->result_array();
		$ptax_arr_data->next_result();
		
	
		foreach($emp_date_rslt as $key => $value){
			$this->ptax_arr[$value['location']] = $value;
		}  
	

		/*$this->ptax_arr 		= array_reduce($ptax_arr_result, function ($result, $arr) {
			$result[$arr['location']] = $arr;
			return $result;
		}, array()); 
	*/

		$emp_qry     = 'select GROUP_CONCAT(employee_code) as sup_emp from cw_monthly_input where trans_status = 1 and supplementary_status = 1';
		$emp_data   = $this->db->query("CALL sp_a_run ('SELECT','$emp_qry')");
		$emp_result = $emp_data->result();
		$emp_data->next_result();
		$this->sup_emp    = $emp_result[0]->sup_emp;
		
	 
		$logged_id = $this->session->userdata("logged_id"); 
		$date = date("Y-m-d H:i:s"); 
		$settlement_date = date("Y-m-d"); 
		 $payroll_array = array();
			 foreach($trans_array as $key => $trans){
			  
			 $employee_code = $trans["employee_code"]; $trans["transactions_month"] = $trans["process_month"];
			if((int)$trans["role"] === 3){
				$trans["company_lwf"] = $trans["company_lwf"];			
				$trans["salary_loan"] = $trans["salary_loan"];			
				$trans["dorm"] = $trans["dorm"];			
				$trans["meal"] = $trans["meal"];			
				$trans["other_deduction"] = $trans["other_deduction"];			
				$trans["f_skill"] = $trans["f_skill"];			
				$trans["cost_center"] = $trans["cost_center"];			
				$trans["pf_loan"] = $trans["pf_loan"];			
				$trans["pda_ars"] = $trans["pda_ars"];			
				$trans["department"] = $trans["department"];			
				$trans["designation"] = $trans["designation"];			
				$trans["att_bns"] = $trans["att_bns"];			
				$trans["monthly_tds"] = $trans["monthly_tds"];			
				$trans["bank_name"] = $trans["bank_name"];			
				$trans["bank_account_number"] = $trans["bank_account_number"];			
				$trans["ifsc_code"] = $trans["ifsc_code"];			
				$trans["differential_day"] = $this->get_differential_day($trans["employee_code"],$trans["role"],$trans["transactions_month"]);			
				$trans["separation_day"] = $this->get_seperation_day($trans["employee_code"],$trans["role"],$trans["transactions_month"]);			
				$trans["ele_bill"] = $trans["ele_bill"];			
				$trans["fixed_basic"] = $trans["fixed_basic"];			
				$trans["a_basic"] = $this->rounding_value(($trans["a_basic"]),'>1');			
				$trans["employee_lwf"] = $trans["employee_lwf"];			
				$trans["fopfa"] = $trans["fopfa"];			
				$trans["sl"] = $trans["sl"];			
				$trans["ml"] = $trans["ml"];			
				$trans["coff"] = $trans["coff"];			
				$trans["pend_prev_md"] = $trans["pend_prev_md"];			
				$trans["marital_leave"] = $trans["marital_leave"];			
				$trans["bl"] = $trans["bl"];			
				$trans["il"] = $trans["il"];			
				$trans["wfh"] = $trans["wfh"];			
				$trans["br"] = $trans["br"];			
				$trans["covid"] = $trans["covid"];			
				$trans["bonus_two"] = $trans["bonus_two"];			
				$trans["bonus_three"] = $trans["bonus_three"];			
				$trans["pen_paid_days"] = $trans["pen_paid_days"];			
				$trans["month_days"] = $this->get_total_work_days($trans["role"],$trans["transactions_month"]);			
				$trans["lop_days"] = $trans["lop_days"];			
				$trans["hot_water"] = $trans["hot_water"];			
				$trans["spl_pa"] = $trans["spl_pa"];			
				$trans["a_da"] = $trans["a_da"];			
				$trans["a_hra"] = $trans["a_hra"];			
				$trans["bonus"] = $trans["bonus"];			
				$trans["casual_leave"] = $trans["casual_leave"];			
				$trans["cl_op"] = $trans["cl_op"];			
				$trans["fcon"] = $trans["fcon"];			
				$trans["fixed_da"] = $trans["fixed_da"];			
				$trans["el"] = $trans["el"];			
				$trans["el_op"] = $trans["el_op"];			
				$trans["fixed_hra"] = $trans["fixed_hra"];			
				$trans["fixed_gross"] = $trans["fixed_gross"];			
				$trans["flta"] = $trans["flta"];			
				$trans["fmed"] = $trans["fmed"];			
				$trans["fspl"] = $trans["fspl"];			
				$trans["ftfa"] = $trans["ftfa"];			
				$trans["gratuity"] = $trans["gratuity"];			
				$trans["hd"] = $trans["hd"];			
				$trans["lev_encashday"] = $trans["lev_encashday"];			
				$trans["nsd"] = $trans["nsd"];			
				$trans["notice_period"] = $trans["notice_period"];			
				$trans["ot_hrs"] = $trans["ot_hrs"];			
				$trans["otr"] = $trans["otr"];			
				$trans["fo_allowance"] = $trans["fo_allowance"];			
				$trans["pb_ars"] = $trans["pb_ars"];			
				$trans["pot_hrs"] = $trans["pot_hrs"];			
				$trans["potr"] = $trans["potr"];			
				$trans["po_ars"] = $trans["po_ars"];			
				$trans["spm"] = $trans["spm"];			
				$trans["woff_days"] = $trans["woff_days"];			
				$trans["pf_eligibility"] = $trans["pf_eligibility"];			
				$trans["tds"] = $trans["tds"];			
				$trans["paid_days"] = $trans["month_days"]-($trans["lop_days"]+$trans["differential_day"]+$trans["separation_day"]+$trans["br"]);			
				$trans["basic"] = $this->rounding_value(($this->dz($trans["fixed_basic"]/$trans["month_days"])*$trans["paid_days"]),'>1');			
				$trans["cl_balance"] = $trans["cl_op"]-$trans["casual_leave"];			
				$trans["econ"] = $this->rounding_value(($this->dz($trans["fcon"]/$trans["month_days"])*$trans["paid_days"]),'>1');			
				$trans["da"] = $this->rounding_value(($this->dz($trans["fixed_da"]/$trans["month_days"])*$trans["paid_days"]),'>1');			
				$trans["el_bal"] = $trans["el_op"]-$trans["el"];			
				$trans["hra"] = $this->rounding_value(($this->dz($trans["fixed_hra"]/$trans["month_days"])*$trans["paid_days"]),'>1');			
				$trans["lev_encashrate"] = $trans["fixed_gross"]/26;			
				$trans["lev_encashamt"] = $this->rounding_value(($this->dz($trans["fixed_gross"]/26)*$trans["lev_encashday"]),'1');			
				$trans["elta"] = $this->rounding_value(($this->dz($trans["flta"]/$trans["month_days"])*$trans["paid_days"]),'>1');			
				$trans["emed"] = $this->rounding_value(($this->dz($trans["fmed"]/$trans["month_days"])*$trans["paid_days"]),'>1');			
				$trans["pot"] = $this->rounding_value(($this->dz($this->dz($this->dz($trans["fixed_gross"]/26)/8)*2)*$trans["pot_hrs"]),'>1');			
				$trans["espl"] = $this->rounding_value(($this->dz($trans["fspl"]/$trans["month_days"])*$trans["paid_days"]),'>1');			
				$trans["etfa"] = $this->dz($trans["ftfa"]/$trans["month_days"])*$trans["paid_days"];			
				$trans["nsa"] = $trans["nsd"]*50;			
				$trans["paid_leave"] = $trans["casual_leave"]+$trans["el"]+$trans["sl"]+$trans["ml"]+$trans["marital_leave"]+$trans["coff"]+$trans["bl"]+$trans["il"]+$trans["covid"];			
				$trans["prd"] = ($trans["month_days"]+$trans["pen_paid_days"])-($trans["woff_days"]+$trans["hd"]+$trans["paid_leave"]+$trans["lop_days"]+$trans["differential_day"]+$trans["separation_day"]);			
				$trans["esi_eligibility"] = $trans["fixed_basic"]+$trans["fixed_da"]+$trans["fixed_hra"]+$trans["fcon"]+$trans["fmed"]+$trans["flta"]+$trans["fspl"];			
				$trans["e_skill"] = $this->rounding_value(($this->dz($trans["f_skill"]/$trans["month_days"])*$trans["paid_days"]),'>1');			
				$trans["gross"] = $this->rounding_value(($trans["basic"]+$trans["da"]+$trans["hra"]+$trans["espl"]+$trans["emed"]+$trans["elta"]+$trans["econ"]+$trans["e_skill"]+$trans["lev_encashamt"]),'1');			
				if($trans["gross"]+$trans["etfa"]>15000){$trans["pf_gross"] = 15000;}else{$trans["pf_gross"] = (round($trans["gross"]+$trans["etfa"]));}
				$trans["employer_edli"] = $this->rounding_value(($this->dz($trans["pf_gross"]*0.5)/100),'1');			
				$trans["admin_charges"] = $this->dz($trans["pf_gross"]*0.5)/100;			
				$trans["pf"] = $this->rounding_value(($this->dz($trans["pf_gross"])*$this->dz(12/100)),'1');			
				$trans["employer_pf"] = $this->rounding_value(($trans["pf_gross"]*$this->dz(8.33/100)),'1');			
				$trans["employee_pf"] = $this->rounding_value(($trans["pf"]-$trans["employer_pf"]),'1');			
				if($trans["pf_gross"]>15000){$trans["eps_wages"] = 15000;}else{$trans["eps_wages"] = $trans["pf_gross"];}
				$trans["edli_wages"] = $trans["eps_wages"];			
				$trans["eopfa"] = $trans["fopfa"];			
				$trans["total_fixed_gross"] = $trans["fixed_basic"]+$trans["fixed_da"]+$trans["fixed_hra"]+$trans["fcon"]+$trans["flta"]+$trans["fmed"]+$trans["fspl"]+$trans["ftfa"]+$trans["fopfa"]+$trans["f_skill"];			
				$trans["eot"] = $this->rounding_value(($this->dz($this->dz($this->dz($trans["total_fixed_gross"]/26)/8)*2)*$trans["ot_hrs"]),'>1');			
				$trans["bas_da_pen_days"] = $this->rounding_value(($this->dz($this->dz($trans["fixed_basic"]/$trans["pend_prev_md"])*$trans["pen_paid_days"])+$this->dz($this->dz($trans["fixed_da"]/$trans["pend_prev_md"])*$trans["pen_paid_days"])),'1');			
				$trans["oth_allw_pen_days"] = $this->rounding_value(($this->dz($this->dz($trans["fixed_gross"]/$trans["pend_prev_md"])*$trans["pen_paid_days"])-$trans["bas_da_pen_days"]),'1');			
				$trans["mgs"] = $trans["gross"]+$trans["spl_pa"]+$trans["etfa"]+$trans["att_bns"]+$trans["nsa"]+$trans["fo_allowance"]+$trans["bonus"]+$trans["pb_ars"]+$trans["po_ars"]+$trans["eot"]+$trans["pot"]+$trans["bonus_two"]+$trans["bonus_three"]+$trans["bas_da_pen_days"]+$trans["oth_allw_pen_days"];			
				$trans["professional_tax"] = $this->get_professional_tax_value($trans["employee_code"],$trans["professional_tax_location"],$trans["pt_projection"],$trans["mgs"],$trans["transactions_month"]);			
				$a=0;if($trans["fixed_gross"]>21000){$trans["esi_gross"] = $a;}else{$trans["esi_gross"] = $trans["mgs"]-$trans["bonus"]-$trans["bonus_two"]-$trans["bonus_three"]-$trans["fo_allowance"];}
				$trans["emp_esi"] = $this->rounding_value(($trans["esi_gross"]*$this->dz(3.25/100)),'1');			
				$trans["esi"] = $this->rounding_value(($trans["esi_gross"]*$this->dz(0.75/100)),'>1');			
				$trans["total_esi"] = $this->rounding_value(($trans["emp_esi"]+$trans["esi"]),'1');			
				$trans["total_deductions"] = $this->rounding_value(($trans["pf"]+$trans["esi"]+$trans["tds"]+$trans["professional_tax"]+$trans["meal"]+$trans["dorm"]+$trans["employee_lwf"]+$trans["other_deduction"]+$trans["salary_loan"]+$trans["monthly_tds"]+$trans["hot_water"]+$trans["pf_loan"]+$trans["ele_bill"]),'1');			
				$trans["notice_period_recovery_amount"] = $this->rounding_value(($this->dz($trans["fixed_gross"]/$trans["month_days"])*$trans["notice_period"]),'1');			
				if($trans["fixed_gross"]+$trans["ftfa"]>15000){$trans["fpf_gross"] = 15000;}else{$trans["fpf_gross"] = (round($trans["fixed_gross"]+$trans["ftfa"]));}
				$trans["fixed_pf"] = $this->rounding_value(($trans["fpf_gross"]*$this->dz(12/100)),'1');			
				$trans["fpt_gross"] = $trans["total_fixed_gross"];			
				$trans["net_pay"] = $this->rounding_value(($trans["mgs"]-$trans["total_deductions"]),'1');			
				$trans["total_earnings"] = $this->rounding_value(($trans["esp_po_allw"]+$trans["bonus_two"]+$trans["eleader_allw"]+$trans["bonus_three"]+$trans["bas_da_pen_days"]+$trans["oth_allw_pen_days"]+$trans["fo_allowance"]+$trans["att_bns"]+$trans["bonus"]+$trans["econ"]+$trans["gratuity"]+$trans["lev_encashamt"]+$trans["elta"]+$trans["emed"]+$trans["nsa"]+$trans["eot"]+$trans["pb_ars"]+$trans["pot"]+$trans["po_ars"]+$trans["espl"]+$trans["spl_pa"]+$trans["etfa"]+$trans["e_skill"]+$trans["pda_ars"]+$trans["basic"]+$trans["da"]+$trans["hra"]),'1');			
				$trans["total_deductions"] = $this->rounding_value(($trans["pf"]+$trans["esi"]+$trans["professional_tax"]+$trans["notice_period_recovery_amount"]+$trans["other_deduction"]+$trans["dorm"]+$trans["tds"]+$trans["meal"]+$trans["vpf"]+$trans["monthly_tds"]+$trans["hot_water"]+$trans["ele_bill"]),'1');			
				$trans["net_pay"] = $this->rounding_value(($trans["total_earnings"]-$trans["total_deductions"]),'1');			
	 $payroll_array[3][] ="('".$trans["employees_id"]."','".$trans["transactions_month"]."','".$trans["total_earnings"]."','".$trans["total_deductions"]."','".$trans["net_pay"]."',\"$logged_id\",\"$date\",\"$settlement_date\",\"1\",'".$trans["company_lwf"]."','".$trans["salary_loan"]."','".$trans["dorm"]."','".$trans["meal"]."','".$trans["other_deduction"]."','".$trans["f_skill"]."','".$trans["cost_center"]."','".$trans["pf_loan"]."','".$trans["pda_ars"]."','".$trans["department"]."','".$trans["designation"]."','".$trans["att_bns"]."','".$trans["monthly_tds"]."','".$trans["bank_name"]."','".$trans["bank_account_number"]."','".$trans["ifsc_code"]."','".$trans["differential_day"]."','".$trans["separation_day"]."','".$trans["ele_bill"]."','".$trans["fixed_basic"]."','".$trans["a_basic"]."','".$trans["employee_lwf"]."','".$trans["fopfa"]."','".$trans["sl"]."','".$trans["ml"]."','".$trans["coff"]."','".$trans["pend_prev_md"]."','".$trans["marital_leave"]."','".$trans["bl"]."','".$trans["il"]."','".$trans["wfh"]."','".$trans["br"]."','".$trans["covid"]."','".$trans["bonus_two"]."','".$trans["bonus_three"]."','".$trans["pen_paid_days"]."','".$trans["month_days"]."','".$trans["lop_days"]."','".$trans["hot_water"]."','".$trans["spl_pa"]."','".$trans["a_da"]."','".$trans["a_hra"]."','".$trans["bonus"]."','".$trans["casual_leave"]."','".$trans["cl_op"]."','".$trans["fcon"]."','".$trans["fixed_da"]."','".$trans["el"]."','".$trans["el_op"]."','".$trans["fixed_hra"]."','".$trans["fixed_gross"]."','".$trans["flta"]."','".$trans["fmed"]."','".$trans["fspl"]."','".$trans["ftfa"]."','".$trans["gratuity"]."','".$trans["hd"]."','".$trans["lev_encashday"]."','".$trans["nsd"]."','".$trans["notice_period"]."','".$trans["ot_hrs"]."','".$trans["otr"]."','".$trans["fo_allowance"]."','".$trans["pb_ars"]."','".$trans["pot_hrs"]."','".$trans["potr"]."','".$trans["po_ars"]."','".$trans["spm"]."','".$trans["woff_days"]."','".$trans["pf_eligibility"]."','".$trans["tds"]."','".$trans["paid_days"]."','".$trans["basic"]."','".$trans["cl_balance"]."','".$trans["econ"]."','".$trans["da"]."','".$trans["el_bal"]."','".$trans["hra"]."','".$trans["lev_encashrate"]."','".$trans["lev_encashamt"]."','".$trans["elta"]."','".$trans["emed"]."','".$trans["pot"]."','".$trans["espl"]."','".$trans["etfa"]."','".$trans["nsa"]."','".$trans["paid_leave"]."','".$trans["prd"]."','".$trans["esi_eligibility"]."','".$trans["e_skill"]."','".$trans["gross"]."','".$trans["pf_gross"]."','".$trans["employer_edli"]."','".$trans["admin_charges"]."','".$trans["pf"]."','".$trans["employer_pf"]."','".$trans["employee_pf"]."','".$trans["eps_wages"]."','".$trans["edli_wages"]."','".$trans["eopfa"]."','".$trans["total_fixed_gross"]."','".$trans["eot"]."','".$trans["bas_da_pen_days"]."','".$trans["oth_allw_pen_days"]."','".$trans["mgs"]."','".$trans["professional_tax"]."','".$trans["esi_gross"]."','".$trans["emp_esi"]."','".$trans["esi"]."','".$trans["total_esi"]."','".$trans["total_deductions"]."','".$trans["notice_period_recovery_amount"]."','".$trans["fpf_gross"]."','".$trans["fixed_pf"]."','".$trans["fpt_gross"]."','".$trans["net_pay"]."','".$trans["salary_loan_total"]."','".$trans["salary_loan_installments"]."','".$trans["salary_loan_instal_count"]."','".$trans["salary_loan_balance"]."','".$trans["pf_loan_total"]."','".$trans["pf_loan_installments"]."','".$trans["pf_loan_instal_count"]."','".$trans["pf_loan_balance"]."','".$trans["role"]."','".$trans["employee_code"]."','".$trans["emp_name"]."','".$trans["department"]."','".$trans["designation"]."','".$trans["bank_account_number"]."','".$trans["bank_name"]."','".$trans["ifsc_code"]."','".$trans["lwf_location"]."','".$trans["process_month"]."','".$trans["resignation_date"]."','".$trans["termination_status"]."','".$trans["epf"]."','".$trans["education_proof"]."','".$trans["resignation_log_remarks"]."','".$trans["payroll"]."','".$trans["cost_center"]."','".$trans["pf_tag"]."','".$trans["vendor_name"]."','".$trans["pay_mode"]."','".$trans["skill_grade"]."','".$trans["project_detail"]."')";
			 
		 
	 $qry_3 = 'INSERT INTO cw_transactions(employees_id,transactions_month,total_earnings,total_deductions,net_pay,trans_created_by,trans_created_date,settlement_date,fandf,company_lwf,salary_loan,dorm,meal,other_deduction,f_skill,cost_center,pf_loan,pda_ars,department,designation,att_bns,monthly_tds,bank_name,bank_account_number,ifsc_code,differential_day,separation_day,ele_bill,fixed_basic,a_basic,employee_lwf,fopfa,sl,ml,coff,pend_prev_md,marital_leave,bl,il,wfh,br,covid,bonus_two,bonus_three,pen_paid_days,month_days,lop_days,hot_water,spl_pa,a_da,a_hra,bonus,casual_leave,cl_op,fcon,fixed_da,el,el_op,fixed_hra,fixed_gross,flta,fmed,fspl,ftfa,gratuity,hd,lev_encashday,nsd,notice_period,ot_hrs,otr,fo_allowance,pb_ars,pot_hrs,potr,po_ars,spm,woff_days,pf_eligibility,tds,paid_days,basic,cl_balance,econ,da,el_bal,hra,lev_encashrate,lev_encashamt,elta,emed,pot,espl,etfa,nsa,paid_leave,prd,esi_eligibility,e_skill,gross,pf_gross,employer_edli,admin_charges,pf,employer_pf,employee_pf,eps_wages,edli_wages,eopfa,total_fixed_gross,eot,bas_da_pen_days,oth_allw_pen_days,mgs,professional_tax,esi_gross,emp_esi,esi,total_esi,total_deductions,notice_period_recovery_amount,fpf_gross,fixed_pf,fpt_gross,net_pay,salary_loan_total,salary_loan_installments,salary_loan_instal_count,salary_loan_balance,pf_loan_total,pf_loan_installments,pf_loan_instal_count,pf_loan_balance,role,employee_code,emp_name,department,designation,bank_account_number,bank_name,ifsc_code,lwf_location,process_month,resignation_date,termination_status,epf,education_proof,resignation_log_remarks,payroll,cost_center,pf_tag,vendor_name,pay_mode,skill_grade,project_detail'.$trans_key_array.') VALUES '.implode(',',$payroll_array[3]); 
			}else
			if((int)$trans["role"] === 2){
				$trans["month_days"] = $this->get_total_work_days($trans["role"],$trans["transactions_month"]);			
				$trans["lop_days"] = $trans["lop_days"];			
				$trans["a_da"] = $trans["a_da"];			
				$trans["a_hra"] = $trans["a_hra"];			
				$trans["att_bns"] = $trans["att_bns"];			
				$trans["bonus"] = $trans["bonus"];			
				$trans["casual_leave"] = $trans["casual_leave"];			
				$trans["cl_op"] = $trans["cl_op"];			
				$trans["fcon"] = $trans["fcon"];			
				$trans["fixed_da"] = $trans["fixed_da"];			
				$trans["el"] = $trans["el"];			
				$trans["el_op"] = $trans["el_op"];			
				$trans["fixed_hra"] = $trans["fixed_hra"];			
				$trans["fixed_gross"] = $trans["fixed_gross"];			
				$trans["flta"] = $trans["flta"];			
				$trans["fmed"] = $trans["fmed"];			
				$trans["fspl"] = $trans["fspl"];			
				$trans["ftfa"] = $trans["ftfa"];			
				$trans["gratuity"] = $trans["gratuity"];			
				$trans["hd"] = $trans["hd"];			
				$trans["lev_encashday"] = $trans["lev_encashday"];			
				$trans["nsd"] = $trans["nsd"];			
				$trans["notice_period"] = $trans["notice_period"];			
				$trans["ot_hrs"] = $trans["ot_hrs"];			
				$trans["otr"] = $trans["otr"];			
				$trans["fo_allowance"] = $trans["fo_allowance"];			
				$trans["pb_ars"] = $trans["pb_ars"];			
				$trans["pot_hrs"] = $trans["pot_hrs"];			
				$trans["potr"] = $trans["potr"];			
				$trans["po_ars"] = $trans["po_ars"];			
				$trans["spm"] = $trans["spm"];			
				$trans["spl_pa"] = $trans["spl_pa"];			
				$trans["woff_days"] = $trans["woff_days"];			
				$trans["f_skill"] = $trans["f_skill"];			
				$trans["tds"] = $trans["tds"];			
				$trans["company_lwf"] = $trans["company_lwf"];			
				$trans["salary_loan"] = $trans["salary_loan"];			
				$trans["dorm"] = $trans["dorm"];			
				$trans["meal"] = $trans["meal"];			
				$trans["cost_center"] = $trans["cost_center"];			
				$trans["other_deduction"] = $trans["other_deduction"];			
				$trans["pf_eligibility"] = $trans["pf_eligibility"];			
				$trans["pf_loan"] = $trans["pf_loan"];			
				$trans["pda_ars"] = $trans["pda_ars"];			
				$trans["designation"] = $trans["designation"];			
				$trans["department"] = $trans["department"];			
				$trans["bank_account_number"] = $trans["bank_account_number"];			
				$trans["bank_name"] = $trans["bank_name"];			
				$trans["ifsc_code"] = $trans["ifsc_code"];			
				$trans["monthly_tds"] = $trans["monthly_tds"];			
				$trans["differential_day"] = $this->get_differential_day($trans["employee_code"],$trans["role"],$trans["transactions_month"]);			
				$trans["separation_day"] = $this->get_seperation_day($trans["employee_code"],$trans["role"],$trans["transactions_month"]);			
				$trans["ele_bill"] = $trans["ele_bill"];			
				$trans["fixed_basic"] = $trans["fixed_basic"];			
				$trans["a_basic"] = $this->rounding_value(($trans["a_basic"]),'>1');			
				$trans["pf_tag"] = $trans["pf_tag"];			
				$trans["employee_lwf"] = $trans["employee_lwf"];			
				$trans["sl"] = $trans["sl"];			
				$trans["coff"] = $trans["coff"];			
				$trans["ml"] = $trans["ml"];			
				$trans["marital_leave"] = $trans["marital_leave"];			
				$trans["bl"] = $trans["bl"];			
				$trans["il"] = $trans["il"];			
				$trans["wfh"] = $trans["wfh"];			
				$trans["fsp_po_allw"] = $trans["fsp_po_allw"];			
				$trans["br"] = $trans["br"];			
				$trans["covid"] = $trans["covid"];			
				$trans["fleader_allw"] = $trans["fleader_allw"];			
				$trans["pend_prev_md"] = $trans["pend_prev_md"];			
				$trans["bonus_two"] = $trans["bonus_two"];			
				$trans["bonus_three"] = $trans["bonus_three"];			
				$trans["pen_paid_days"] = $trans["pen_paid_days"];			
				$trans["hot_water"] = $trans["hot_water"];			
				$trans["paid_days"] = ($trans["month_days"])-($trans["lop_days"]+$trans["differential_day"]+$trans["separation_day"]+$trans["br"]);			
				$trans["basic"] = $this->rounding_value(($this->dz($trans["fixed_basic"]/$trans["month_days"])*$trans["paid_days"]),'>1');			
				$trans["cl_balance"] = $trans["cl_op"]-$trans["casual_leave"];			
				$trans["econ"] = $this->rounding_value(($this->dz($trans["fcon"]/$trans["month_days"])*$trans["paid_days"]),'>1');			
				$trans["da"] = $this->rounding_value(($this->dz($trans["fixed_da"]/$trans["month_days"])*$trans["paid_days"]),'>1');			
				$trans["el_bal"] = $trans["el_op"]-$trans["el"];			
				$trans["hra"] = $this->rounding_value(($this->dz($trans["fixed_hra"]/$trans["month_days"])*$trans["paid_days"]),'>1');			
				$trans["lev_encashrate"] = $trans["fixed_gross"]/26;			
				$trans["lev_encashamt"] = $this->rounding_value(($this->dz($trans["fixed_gross"]/26)*$trans["lev_encashday"]),'1');			
				$trans["elta"] = $this->rounding_value(($this->dz($trans["flta"]/$trans["month_days"])*$trans["paid_days"]),'>1');			
				$trans["emed"] = $this->rounding_value(($this->dz($trans["fmed"]/$trans["month_days"])*$trans["paid_days"]),'>1');			
				$trans["eot"] = $this->rounding_value(($this->dz($this->dz($this->dz($trans["fixed_gross"]/26)/8)*2)*$trans["ot_hrs"]),'>1');			
				$trans["pot"] = $this->rounding_value(($this->dz($this->dz($this->dz($trans["fixed_gross"]/26)/8)*2)*$trans["pot_hrs"]),'>1');			
				$trans["espl"] = $this->rounding_value(($this->dz($trans["fspl"]/$trans["month_days"])*$trans["paid_days"]),'>1');			
				$trans["etfa"] = $trans["ftfa"];			
				$trans["nsa"] = $trans["nsd"]*50;			
				$trans["esi_eligibility"] = $trans["fixed_basic"]+$trans["fixed_da"]+$trans["fixed_hra"]+$trans["fcon"]+$trans["fmed"]+$trans["flta"]+$trans["fspl"];			
				$trans["paid_leave"] = $trans["casual_leave"]+$trans["el"]+$trans["sl"]+$trans["ml"]+$trans["marital_leave"]+$trans["coff"]+$trans["bl"]+$trans["il"]+$trans["covid"];			
				$trans["prd"] = ($trans["month_days"]+$trans["pen_paid_days"])-($trans["woff_days"]+$trans["hd"]+$trans["paid_leave"]+$trans["lop_days"]+$trans["differential_day"]+$trans["separation_day"]);			
				$trans["e_skill"] = $this->rounding_value(($this->dz($trans["f_skill"]/$trans["month_days"])*$trans["paid_days"]),'>1');			
				$trans["total_fixed_gross"] = $trans["fixed_basic"]+$trans["fixed_da"]+$trans["fixed_hra"]+$trans["fcon"]+$trans["flta"]+$trans["fmed"]+$trans["fspl"]+$trans["ftfa"]+$trans["f_skill"]+$trans["fsp_po_allw"]+$trans["fleader_allw"];			
				$trans["esp_po_allw"] = $this->rounding_value(($this->dz($trans["fsp_po_allw"]/$trans["month_days"])*$trans["paid_days"]),'1');			
				$trans["eleader_allw"] = $this->rounding_value(($this->dz($trans["fleader_allw"]/$trans["month_days"])*$trans["paid_days"]),'1');			
				$trans["gross"] = $this->rounding_value(($trans["basic"]+$trans["da"]+$trans["hra"]+$trans["espl"]+$trans["emed"]+$trans["elta"]+$trans["econ"]+$trans["e_skill"]+$trans["esp_po_allw"]+$trans["eleader_allw"]+$trans["lev_encashamt"]),'1');			
				$a=15000;if((int)$trans["pf_tag"]==2){if($trans["gross"]>15000){$trans["pf_gross"] = $a;}elseif($trans["gross"]<15000){$trans["pf_gross"] = (round($trans["gross"]));}}elseif((int)$trans["pf_tag"]==3){$trans["pf_gross"] = (round($trans["basic"]+$trans["da"]));}else{$trans["pf_gross"] = 0;}
				if($trans["pf_gross"]>15000){$trans["eps_wages"] = 15000;}else{$trans["eps_wages"] = $trans["pf_gross"];}
				$trans["edli_wages"] = $trans["eps_wages"];			
				if($trans["pf_gross"]>15000){$trans["employer_edli"] = 75;}else{$trans["employer_edli"] = (round($trans["pf_gross"]*0.005));}
				$trans["admin_charges"] = $this->dz($trans["pf_gross"]*0.5)/100;			
				$a=1250;if($trans["pf_gross"]>15000){$trans["employer_pf"] = $a;}else{$trans["employer_pf"] = (round($trans["pf_gross"]*(0.0833)));}
				$trans["pf"] = $this->rounding_value(($trans["pf_gross"]*$this->dz(12/100)),'1');			
				$trans["employee_pf"] = $this->rounding_value(($trans["pf"]-$trans["employer_pf"]),'1');			
				$trans["bas_da_pen_days"] = $this->rounding_value(($this->dz($this->dz($trans["fixed_basic"]/$trans["pend_prev_md"])*$trans["pen_paid_days"])+$this->dz($this->dz($trans["fixed_da"]/$trans["pend_prev_md"])*$trans["pen_paid_days"])),'1');			
				$trans["oth_allw_pen_days"] = $this->rounding_value(($this->dz($this->dz($trans["fixed_gross"]/$trans["pend_prev_md"])*$trans["pen_paid_days"])-$trans["bas_da_pen_days"]),'1');			
				$trans["mgs"] = $trans["gross"]+$trans["spl_pa"]+$trans["etfa"]+$trans["att_bns"]+$trans["nsa"]+$trans["fo_allowance"]+$trans["bonus"]+$trans["pb_ars"]+$trans["po_ars"]+$trans["eot"]+$trans["pot"]+$trans["bonus_two"]+$trans["bonus_three"]+$trans["bas_da_pen_days"]+$trans["oth_allw_pen_days"];			
				$trans["professional_tax"] = $this->get_professional_tax_value($trans["employee_code"],$trans["professional_tax_location"],$trans["pt_projection"],$trans["mgs"],$trans["transactions_month"]);			
				$a=0;if($trans["fixed_gross"]>21000){$trans["esi_gross"] = $a;}else{$trans["esi_gross"] = $trans["mgs"]-$trans["bonus"]-$trans["bonus_two"]-$trans["bonus_three"]-$trans["fo_allowance"];}
				$trans["emp_esi"] = $this->rounding_value(($trans["esi_gross"]*$this->dz(3.25/100)),'1');			
				$trans["esi"] = $this->rounding_value(($trans["esi_gross"]*$this->dz(0.75/100)),'>1');			
				$trans["total_esi"] = $this->rounding_value(($trans["emp_esi"]+$trans["esi"]),'1');			
				$trans["total_deductions"] = $this->rounding_value(($trans["pf"]+$trans["esi"]+$trans["tds"]+$trans["professional_tax"]+$trans["meal"]+$trans["dorm"]+$trans["employee_lwf"]+$trans["other_deduction"]+$trans["salary_loan"]+$trans["monthly_tds"]+$trans["hot_water"]+$trans["pf_loan"]+$trans["ele_bill"]),'1');			
				$trans["notice_period_recovery_amount"] = $this->rounding_value(($this->dz($trans["fixed_gross"]/$trans["month_days"])*$trans["notice_period"]),'1');			
				$a=15000;if((int)$trans["pf_tag"]==2){if($trans["fixed_gross"]>15000){$trans["fpf_gross"] = $a;}elseif($trans["fixed_gross"]<15000){$trans["fpf_gross"] = (round($trans["fixed_gross"]));}}elseif((int)$trans["pf_tag"]==3){$trans["fpf_gross"] = (round($trans["fixed_basic"]+$trans["fixed_da"]));}else{$trans["fpf_gross"] = 0;}
				$trans["fixed_pf"] = $this->rounding_value(($trans["fpf_gross"]*$this->dz(12/100)),'1');			
				$trans["fpt_gross"] = $trans["total_fixed_gross"];			
				$trans["net_pay"] = $this->rounding_value(($trans["mgs"]-$trans["total_deductions"]),'1');			
				$trans["total_earnings"] = $this->rounding_value(($trans["esp_po_allw"]+$trans["bonus_two"]+$trans["eleader_allw"]+$trans["bonus_three"]+$trans["bas_da_pen_days"]+$trans["oth_allw_pen_days"]+$trans["fo_allowance"]+$trans["att_bns"]+$trans["bonus"]+$trans["econ"]+$trans["gratuity"]+$trans["lev_encashamt"]+$trans["elta"]+$trans["emed"]+$trans["nsa"]+$trans["eot"]+$trans["pb_ars"]+$trans["pot"]+$trans["po_ars"]+$trans["espl"]+$trans["spl_pa"]+$trans["etfa"]+$trans["e_skill"]+$trans["pda_ars"]+$trans["basic"]+$trans["da"]+$trans["hra"]),'1');			
				$trans["total_deductions"] = $this->rounding_value(($trans["pf"]+$trans["esi"]+$trans["professional_tax"]+$trans["notice_period_recovery_amount"]+$trans["other_deduction"]+$trans["dorm"]+$trans["tds"]+$trans["meal"]+$trans["vpf"]+$trans["monthly_tds"]+$trans["hot_water"]+$trans["ele_bill"]),'1');			
				$trans["net_pay"] = $this->rounding_value(($trans["total_earnings"]-$trans["total_deductions"]),'1');			 
	 $payroll_array[2][] ="('".$trans["employees_id"]."','".$trans["transactions_month"]."','".$trans["total_earnings"]."','".$trans["total_deductions"]."','".$trans["net_pay"]."',\"$logged_id\",\"$date\",\"$settlement_date\",\"1\",'".$trans["month_days"]."','".$trans["lop_days"]."','".$trans["a_da"]."','".$trans["a_hra"]."','".$trans["att_bns"]."','".$trans["bonus"]."','".$trans["casual_leave"]."','".$trans["cl_op"]."','".$trans["fcon"]."','".$trans["fixed_da"]."','".$trans["el"]."','".$trans["el_op"]."','".$trans["fixed_hra"]."','".$trans["fixed_gross"]."','".$trans["flta"]."','".$trans["fmed"]."','".$trans["fspl"]."','".$trans["ftfa"]."','".$trans["gratuity"]."','".$trans["hd"]."','".$trans["lev_encashday"]."','".$trans["nsd"]."','".$trans["notice_period"]."','".$trans["ot_hrs"]."','".$trans["otr"]."','".$trans["fo_allowance"]."','".$trans["pb_ars"]."','".$trans["pot_hrs"]."','".$trans["potr"]."','".$trans["po_ars"]."','".$trans["spm"]."','".$trans["spl_pa"]."','".$trans["woff_days"]."','".$trans["f_skill"]."','".$trans["tds"]."','".$trans["company_lwf"]."','".$trans["salary_loan"]."','".$trans["dorm"]."','".$trans["meal"]."','".$trans["cost_center"]."','".$trans["other_deduction"]."','".$trans["pf_eligibility"]."','".$trans["pf_loan"]."','".$trans["pda_ars"]."','".$trans["designation"]."','".$trans["department"]."','".$trans["bank_account_number"]."','".$trans["bank_name"]."','".$trans["ifsc_code"]."','".$trans["monthly_tds"]."','".$trans["differential_day"]."','".$trans["separation_day"]."','".$trans["ele_bill"]."','".$trans["fixed_basic"]."','".$trans["a_basic"]."','".$trans["pf_tag"]."','".$trans["employee_lwf"]."','".$trans["sl"]."','".$trans["coff"]."','".$trans["ml"]."','".$trans["marital_leave"]."','".$trans["bl"]."','".$trans["il"]."','".$trans["wfh"]."','".$trans["fsp_po_allw"]."','".$trans["br"]."','".$trans["covid"]."','".$trans["fleader_allw"]."','".$trans["pend_prev_md"]."','".$trans["bonus_two"]."','".$trans["bonus_three"]."','".$trans["pen_paid_days"]."','".$trans["hot_water"]."','".$trans["paid_days"]."','".$trans["basic"]."','".$trans["cl_balance"]."','".$trans["econ"]."','".$trans["da"]."','".$trans["el_bal"]."','".$trans["hra"]."','".$trans["lev_encashrate"]."','".$trans["lev_encashamt"]."','".$trans["elta"]."','".$trans["emed"]."','".$trans["eot"]."','".$trans["pot"]."','".$trans["espl"]."','".$trans["etfa"]."','".$trans["nsa"]."','".$trans["esi_eligibility"]."','".$trans["paid_leave"]."','".$trans["prd"]."','".$trans["e_skill"]."','".$trans["total_fixed_gross"]."','".$trans["esp_po_allw"]."','".$trans["eleader_allw"]."','".$trans["gross"]."','".$trans["pf_gross"]."','".$trans["eps_wages"]."','".$trans["edli_wages"]."','".$trans["employer_edli"]."','".$trans["admin_charges"]."','".$trans["employer_pf"]."','".$trans["pf"]."','".$trans["employee_pf"]."','".$trans["bas_da_pen_days"]."','".$trans["oth_allw_pen_days"]."','".$trans["mgs"]."','".$trans["professional_tax"]."','".$trans["esi_gross"]."','".$trans["emp_esi"]."','".$trans["esi"]."','".$trans["total_esi"]."','".$trans["total_deductions"]."','".$trans["notice_period_recovery_amount"]."','".$trans["fpf_gross"]."','".$trans["fixed_pf"]."','".$trans["fpt_gross"]."','".$trans["net_pay"]."','".$trans["salary_loan_total"]."','".$trans["salary_loan_installments"]."','".$trans["salary_loan_instal_count"]."','".$trans["salary_loan_balance"]."','".$trans["pf_loan_total"]."','".$trans["pf_loan_installments"]."','".$trans["pf_loan_instal_count"]."','".$trans["pf_loan_balance"]."','".$trans["role"]."','".$trans["employee_code"]."','".$trans["emp_name"]."','".$trans["department"]."','".$trans["designation"]."','".$trans["bank_account_number"]."','".$trans["bank_name"]."','".$trans["ifsc_code"]."','".$trans["lwf_location"]."','".$trans["process_month"]."','".$trans["resignation_date"]."','".$trans["termination_status"]."','".$trans["epf"]."','".$trans["education_proof"]."','".$trans["resignation_log_remarks"]."','".$trans["payroll"]."','".$trans["cost_center"]."','".$trans["pf_tag"]."','".$trans["vendor_name"]."','".$trans["pay_mode"]."','".$trans["skill_grade"]."','".$trans["project_detail"]."')";
			 
		 
	 $qry_2 = 'INSERT INTO cw_transactions(employees_id,transactions_month,total_earnings,total_deductions,net_pay,trans_created_by,trans_created_date,settlement_date,fandf,month_days,lop_days,a_da,a_hra,att_bns,bonus,casual_leave,cl_op,fcon,fixed_da,el,el_op,fixed_hra,fixed_gross,flta,fmed,fspl,ftfa,gratuity,hd,lev_encashday,nsd,notice_period,ot_hrs,otr,fo_allowance,pb_ars,pot_hrs,potr,po_ars,spm,spl_pa,woff_days,f_skill,tds,company_lwf,salary_loan,dorm,meal,cost_center,other_deduction,pf_eligibility,pf_loan,pda_ars,designation,department,bank_account_number,bank_name,ifsc_code,monthly_tds,differential_day,separation_day,ele_bill,fixed_basic,a_basic,pf_tag,employee_lwf,sl,coff,ml,marital_leave,bl,il,wfh,fsp_po_allw,br,covid,fleader_allw,pend_prev_md,bonus_two,bonus_three,pen_paid_days,hot_water,paid_days,basic,cl_balance,econ,da,el_bal,hra,lev_encashrate,lev_encashamt,elta,emed,eot,pot,espl,etfa,nsa,esi_eligibility,paid_leave,prd,e_skill,total_fixed_gross,esp_po_allw,eleader_allw,gross,pf_gross,eps_wages,edli_wages,employer_edli,admin_charges,employer_pf,pf,employee_pf,bas_da_pen_days,oth_allw_pen_days,mgs,professional_tax,esi_gross,emp_esi,esi,total_esi,total_deductions,notice_period_recovery_amount,fpf_gross,fixed_pf,fpt_gross,net_pay,salary_loan_total,salary_loan_installments,salary_loan_instal_count,salary_loan_balance,pf_loan_total,pf_loan_installments,pf_loan_instal_count,pf_loan_balance,role,employee_code,emp_name,department,designation,bank_account_number,bank_name,ifsc_code,lwf_location,process_month,resignation_date,termination_status,epf,education_proof,resignation_log_remarks,payroll,cost_center,pf_tag,vendor_name,pay_mode,skill_grade,project_detail'.$trans_key_array.') VALUES '.implode(',',$payroll_array[2]); 
			}else
			if((int)$trans["role"] === 5){
				$trans["hot_water"] = $trans["hot_water"];			
				$trans["spl_pa"] = $trans["spl_pa"];			
				$trans["fopfa"] = $trans["fopfa"];			
				$trans["lop_days"] = $trans["lop_days"];			
				$trans["separation_day"] = $this->get_seperation_day($trans["employee_code"],$trans["role"],$trans["transactions_month"]);			
				$trans["month_days"] = $this->get_total_work_days($trans["role"],$trans["transactions_month"]);			
				$trans["f_skill"] = $trans["f_skill"];			
				$trans["cost_center"] = $trans["cost_center"];			
				$trans["pf_loan"] = $trans["pf_loan"];			
				$trans["pda_ars"] = $trans["pda_ars"];			
				$trans["bank_name"] = $trans["bank_name"];			
				$trans["bank_account_number"] = $trans["bank_account_number"];			
				$trans["ifsc_code"] = $trans["ifsc_code"];			
				$trans["ele_bill"] = $trans["ele_bill"];			
				$trans["vendor_name"] = $trans["vendor_name"];			
				$trans["actual_paid_days"] = $trans["actual_paid_days"];			
				$trans["pend_prev_md"] = $trans["pend_prev_md"];			
				$trans["a_da"] = $trans["a_da"];			
				$trans["a_hra"] = $trans["a_hra"];			
				$trans["bonus"] = $trans["bonus"];			
				$trans["casual_leave"] = $trans["casual_leave"];			
				$trans["cl_op"] = $trans["cl_op"];			
				$trans["fcon"] = $trans["fcon"];			
				$trans["fixed_da"] = $trans["fixed_da"];			
				$trans["el"] = $trans["el"];			
				$trans["el_op"] = $trans["el_op"];			
				$trans["fixed_hra"] = $trans["fixed_hra"];			
				$trans["fixed_gross"] = $trans["fixed_gross"];			
				$trans["flta"] = $trans["flta"];			
				$trans["fmed"] = $trans["fmed"];			
				$trans["fspl"] = $trans["fspl"];			
				$trans["ftfa"] = $trans["ftfa"];			
				$trans["gratuity"] = $trans["gratuity"];			
				$trans["hd"] = $trans["hd"];			
				$trans["lev_encashday"] = $trans["lev_encashday"];			
				$trans["nsd"] = $trans["nsd"];			
				$trans["notice_period"] = $trans["notice_period"];			
				$trans["ot_hrs"] = $trans["ot_hrs"];			
				$trans["otr"] = $trans["otr"];			
				$trans["fo_allowance"] = $trans["fo_allowance"];			
				$trans["pb_ars"] = $trans["pb_ars"];			
				$trans["pot_hrs"] = $trans["pot_hrs"];			
				$trans["potr"] = $trans["potr"];			
				$trans["po_ars"] = $trans["po_ars"];			
				$trans["spm"] = $trans["spm"];			
				$trans["woff_days"] = $trans["woff_days"];			
				$trans["pf_eligibility"] = $trans["pf_eligibility"];			
				$trans["tds"] = $trans["tds"];			
				$trans["company_lwf"] = $trans["company_lwf"];			
				$trans["salary_loan"] = $trans["salary_loan"];			
				$trans["dorm"] = $trans["dorm"];			
				$trans["meal"] = $trans["meal"];			
				$trans["other_deduction"] = $trans["other_deduction"];			
				$trans["department"] = $trans["department"];			
				$trans["designation"] = $trans["designation"];			
				$trans["att_bns"] = $trans["att_bns"];			
				$trans["monthly_tds"] = $trans["monthly_tds"];			
				$trans["differential_day"] = $this->get_differential_day($trans["employee_code"],$trans["role"],$trans["transactions_month"]);			
				$trans["fixed_basic"] = $trans["fixed_basic"];			
				$trans["a_basic"] = $this->rounding_value(($trans["a_basic"]),'>1');			
				$trans["employee_lwf"] = $trans["employee_lwf"];			
				$trans["sl"] = $trans["sl"];			
				$trans["ml"] = $trans["ml"];			
				$trans["coff"] = $trans["coff"];			
				$trans["marital_leave"] = $trans["marital_leave"];			
				$trans["bl"] = $trans["bl"];			
				$trans["il"] = $trans["il"];			
				$trans["wfh"] = $trans["wfh"];			
				$trans["br"] = $trans["br"];			
				$trans["covid"] = $trans["covid"];			
				$trans["bonus_two"] = $trans["bonus_two"];			
				$trans["bonus_three"] = $trans["bonus_three"];			
				$trans["pen_paid_days"] = $trans["pen_paid_days"];			
				$trans["paid_days"] = $trans["actual_paid_days"];			
				$trans["basic"] = $this->rounding_value(($this->dz($this->dz($this->dz($trans["fixed_basic"]/26)/8)*9.523)*$trans["paid_days"]),'>1');			
				$trans["cl_balance"] = $trans["cl_op"]-$trans["casual_leave"];			
				$trans["econ"] = $this->rounding_value(($this->dz($trans["fcon"]/$trans["month_days"])*$trans["paid_days"]),'>1');			
				$trans["da"] = $this->rounding_value(($this->dz($this->dz($this->dz($trans["fixed_da"]/26)/8)*9.523)*$trans["paid_days"]),'>1');			
				$trans["el_bal"] = $trans["el_op"]-$trans["el"];			
				$trans["hra"] = $this->rounding_value(($this->dz($this->dz($this->dz($trans["fixed_hra"]/26)/8)*9.523)*$trans["paid_days"]),'>1');			
				$trans["lev_encashrate"] = $trans["fixed_gross"]/26;			
				$trans["lev_encashamt"] = $this->rounding_value(($this->dz($trans["fixed_gross"]/26)*$trans["lev_encashday"]),'1');			
				$trans["elta"] = $this->rounding_value(($this->dz($trans["flta"]/$trans["month_days"])*$trans["paid_days"]),'>1');			
				$trans["emed"] = $this->rounding_value(($this->dz($trans["fmed"]/$trans["month_days"])*$trans["paid_days"]),'>1');			
				$trans["pot"] = $this->rounding_value(($this->dz($this->dz($this->dz($trans["fixed_gross"]/26)/8)*2)*$trans["pot_hrs"]),'>1');			
				$trans["espl"] = $this->rounding_value(($this->dz($this->dz($this->dz($trans["fspl"]/26)/8)*9.523)*$trans["paid_days"]),'>1');			
				$trans["etfa"] = $trans["ftfa"];			
				$trans["nsa"] = $trans["nsd"]*50;			
				$trans["paid_leave"] = $trans["casual_leave"]+$trans["el"]+$trans["sl"]+$trans["ml"]+$trans["marital_leave"]+$trans["coff"]+$trans["bl"]+$trans["il"]+$trans["covid"];			
				$trans["prd"] = ($trans["month_days"]+$trans["pen_paid_days"])-($trans["woff_days"]+$trans["hd"]+$trans["paid_leave"]+$trans["lop_days"]+$trans["differential_day"]+$trans["separation_day"]);			
				if($trans["basic"]+$trans["da"]>15000){$trans["pf_gross"] = 15000;}else{$trans["pf_gross"] = (round($trans["basic"]+$trans["da"]));}
				$trans["pf"] = $this->rounding_value(($this->dz($trans["pf_gross"])*$this->dz(12/100)),'1');			
				$trans["esi_eligibility"] = $trans["fixed_basic"]+$trans["fixed_da"]+$trans["fixed_hra"]+$trans["fcon"]+$trans["fmed"]+$trans["flta"]+$trans["fspl"];			
				$trans["employer_pf"] = $this->rounding_value(($trans["pf_gross"]*$this->dz(8.33/100)),'1');			
				$trans["employee_pf"] = $this->rounding_value(($trans["pf"]-$trans["employer_pf"]),'1');			
				$trans["eopfa"] = $this->dz($this->dz($this->dz($trans["fopfa"]/26)/8)*9.523)*$this->dz($trans["paid_days"]-$trans["hd"]);			
				$trans["admin_charges"] = $this->dz($trans["pf_gross"]*0.5)/100;			
				$trans["employer_edli"] = $this->rounding_value(($this->dz($trans["pf_gross"]*0.5)/100),'1');			
				$trans["e_skill"] = $this->rounding_value(($this->dz($this->dz($this->dz($trans["f_skill"]/26)/8)*9.523)*$this->dz($trans["paid_days"]-$trans["hd"])),'>1');			
				$trans["gross"] = $this->rounding_value(($trans["basic"]+$trans["da"]+$trans["hra"]+$trans["espl"]+$trans["emed"]+$trans["elta"]+$trans["econ"]+$trans["e_skill"]+$trans["lev_encashamt"]),'1');			
				if($trans["vendor_name"]==4){$trans["service_charge"] = 0;}elseif($trans["vendor_name"]==1||$trans["vendor_name"]==3||$trans["vendor_name"]==5||$trans["vendor_name"]==6||$trans["vendor_name"]==7||$trans["vendor_name"]==8){$trans["service_charge"] = ($trans["basic"]+$trans["da"]+$trans["pb_ars"])*0.065;}else{$trans["service_charge"] = ($trans["basic"]+$trans["da"]+$trans["pb_ars"])*0.07;}
				if($trans["pf_gross"]>15000){$trans["eps_wages"] = 15000;}else{$trans["eps_wages"] = $trans["pf_gross"];}
				$trans["edli_wages"] = $trans["eps_wages"];			
				$trans["total_fixed_gross"] = $trans["fixed_basic"]+$trans["fixed_da"]+$trans["fixed_hra"]+$trans["fcon"]+$trans["flta"]+$trans["fmed"]+$trans["fspl"]+$trans["ftfa"]+$trans["fopfa"]+$trans["f_skill"];			
				$trans["eot"] = $this->rounding_value(($this->dz($this->dz($this->dz($trans["total_fixed_gross"]/26)/8)*2)*$trans["ot_hrs"]),'>1');			
				$trans["bas_da_pen_days"] = $this->rounding_value(($this->dz($this->dz($trans["fixed_basic"]/$trans["pend_prev_md"])*$trans["pen_paid_days"])+$this->dz($this->dz($trans["fixed_da"]/$trans["pend_prev_md"])*$trans["pen_paid_days"])),'1');			
				$trans["oth_allw_pen_days"] = $this->rounding_value(($this->dz($this->dz($trans["fixed_gross"]/$trans["pend_prev_md"])*$trans["pen_paid_days"])-$trans["bas_da_pen_days"]),'1');			
				$trans["mgs"] = $trans["gross"]+$trans["spl_pa"]+$trans["etfa"]+$trans["att_bns"]+$trans["nsa"]+$trans["fo_allowance"]+$trans["bonus"]+$trans["pb_ars"]+$trans["po_ars"]+$trans["eot"]+$trans["pot"]+$trans["bonus_two"]+$trans["bonus_three"]+$trans["eopfa"]+$trans["bas_da_pen_days"]+$trans["oth_allw_pen_days"];			
				$trans["professional_tax"] = $this->get_professional_tax_value($trans["employee_code"],$trans["professional_tax_location"],$trans["pt_projection"],$trans["mgs"],$trans["transactions_month"]);			
				$a=0;if($trans["fixed_gross"]>21000){$trans["esi_gross"] = $a;}else{$trans["esi_gross"] = $trans["mgs"]-$trans["bonus"]-$trans["bonus_two"]-$trans["bonus_three"]-$trans["fo_allowance"];}
				$trans["emp_esi"] = $this->rounding_value(($trans["esi_gross"]*$this->dz(3.25/100)),'1');			
				$trans["vendor_invoice"] = $trans["mgs"]+$trans["employer_pf"]+$trans["employee_pf"]+$trans["employer_edli"]+$trans["admin_charges"]+$trans["emp_esi"]+$trans["company_lwf"]+$trans["service_charge"];			
				if($trans["vendor_name"]==1||$trans["vendor_name"]==2||$trans["vendor_name"]==5||$trans["vendor_name"]==7){$trans["service_tds"] = ($trans["vendor_invoice"])*0.02;}elseif($trans["vendor_name"]==3||$trans["vendor_name"]==6||$trans["vendor_name"]==8){$trans["service_tds"] = ($trans["vendor_invoice"])*0.01;}else{$trans["service_tds"] = 0;}
				if($trans["vendor_name"]==1||$trans["vendor_name"]==2){$trans["igst"] = ($trans["vendor_invoice"])*0.18;}else{$trans["igst"] = 0;}
				if($trans["vendor_name"]==4||$trans["vendor_name"]==1||$trans["vendor_name"]==2){$trans["sgst"] = 0;}else{$trans["sgst"] = ($trans["vendor_invoice"])*0.09;}
				if($trans["vendor_name"]==4||$trans["vendor_name"]==1||$trans["vendor_name"]==2){$trans["cgst"] = 0;}else{$trans["cgst"] = ($trans["vendor_invoice"])*0.09;}
				$trans["esi"] = $this->rounding_value(($trans["esi_gross"]*$this->dz(0.75/100)),'>1');			
				$trans["total_esi"] = $this->rounding_value(($trans["emp_esi"]+$trans["esi"]),'1');			
				$trans["total_deductions"] = $this->rounding_value(($trans["pf"]+$trans["esi"]+$trans["tds"]+$trans["professional_tax"]+$trans["meal"]+$trans["dorm"]+$trans["employee_lwf"]+$trans["other_deduction"]+$trans["salary_loan"]+$trans["monthly_tds"]+$trans["hot_water"]+$trans["pf_loan"]+$trans["ele_bill"]),'1');			
				$trans["notice_period_recovery_amount"] = $this->rounding_value(($this->dz($trans["fixed_gross"]/$trans["month_days"])*$trans["notice_period"]),'1');			
				if($trans["fixed_basic"]+$trans["fixed_da"]>15000){$trans["fpf_gross"] = 15000;}else{$trans["fpf_gross"] = (round($trans["fixed_basic"]+$trans["fixed_da"]));}
				$trans["fixed_pf"] = $this->rounding_value(($trans["fpf_gross"]*$this->dz(12/100)),'1');			
				$trans["fpt_gross"] = $trans["total_fixed_gross"];			
				$trans["net_pay"] = $this->rounding_value(($trans["mgs"]-$trans["total_deductions"]),'1');			
				$trans["total_earnings"] = $this->rounding_value(($trans["esp_po_allw"]+$trans["bonus_two"]+$trans["eleader_allw"]+$trans["bonus_three"]+$trans["bas_da_pen_days"]+$trans["oth_allw_pen_days"]+$trans["fo_allowance"]+$trans["att_bns"]+$trans["bonus"]+$trans["econ"]+$trans["gratuity"]+$trans["lev_encashamt"]+$trans["elta"]+$trans["emed"]+$trans["nsa"]+$trans["eot"]+$trans["pb_ars"]+$trans["pot"]+$trans["po_ars"]+$trans["espl"]+$trans["spl_pa"]+$trans["etfa"]+$trans["e_skill"]+$trans["pda_ars"]+$trans["basic"]+$trans["da"]+$trans["hra"]),'1');			
				$trans["total_deductions"] = $this->rounding_value(($trans["pf"]+$trans["esi"]+$trans["professional_tax"]+$trans["notice_period_recovery_amount"]+$trans["other_deduction"]+$trans["dorm"]+$trans["tds"]+$trans["meal"]+$trans["vpf"]+$trans["monthly_tds"]+$trans["hot_water"]+$trans["ele_bill"]),'1');			
				$trans["net_pay"] = $this->rounding_value(($trans["total_earnings"]-$trans["total_deductions"]),'1');			 
	 $payroll_array[5][] ="('".$trans["employees_id"]."','".$trans["transactions_month"]."','".$trans["total_earnings"]."','".$trans["total_deductions"]."','".$trans["net_pay"]."',\"$logged_id\",\"$date\",\"$settlement_date\",\"1\",'".$trans["hot_water"]."','".$trans["spl_pa"]."','".$trans["fopfa"]."','".$trans["lop_days"]."','".$trans["separation_day"]."','".$trans["month_days"]."','".$trans["f_skill"]."','".$trans["cost_center"]."','".$trans["pf_loan"]."','".$trans["pda_ars"]."','".$trans["bank_name"]."','".$trans["bank_account_number"]."','".$trans["ifsc_code"]."','".$trans["ele_bill"]."','".$trans["vendor_name"]."','".$trans["actual_paid_days"]."','".$trans["pend_prev_md"]."','".$trans["a_da"]."','".$trans["a_hra"]."','".$trans["bonus"]."','".$trans["casual_leave"]."','".$trans["cl_op"]."','".$trans["fcon"]."','".$trans["fixed_da"]."','".$trans["el"]."','".$trans["el_op"]."','".$trans["fixed_hra"]."','".$trans["fixed_gross"]."','".$trans["flta"]."','".$trans["fmed"]."','".$trans["fspl"]."','".$trans["ftfa"]."','".$trans["gratuity"]."','".$trans["hd"]."','".$trans["lev_encashday"]."','".$trans["nsd"]."','".$trans["notice_period"]."','".$trans["ot_hrs"]."','".$trans["otr"]."','".$trans["fo_allowance"]."','".$trans["pb_ars"]."','".$trans["pot_hrs"]."','".$trans["potr"]."','".$trans["po_ars"]."','".$trans["spm"]."','".$trans["woff_days"]."','".$trans["pf_eligibility"]."','".$trans["tds"]."','".$trans["company_lwf"]."','".$trans["salary_loan"]."','".$trans["dorm"]."','".$trans["meal"]."','".$trans["other_deduction"]."','".$trans["department"]."','".$trans["designation"]."','".$trans["att_bns"]."','".$trans["monthly_tds"]."','".$trans["differential_day"]."','".$trans["fixed_basic"]."','".$trans["a_basic"]."','".$trans["employee_lwf"]."','".$trans["sl"]."','".$trans["ml"]."','".$trans["coff"]."','".$trans["marital_leave"]."','".$trans["bl"]."','".$trans["il"]."','".$trans["wfh"]."','".$trans["br"]."','".$trans["covid"]."','".$trans["bonus_two"]."','".$trans["bonus_three"]."','".$trans["pen_paid_days"]."','".$trans["paid_days"]."','".$trans["basic"]."','".$trans["cl_balance"]."','".$trans["econ"]."','".$trans["da"]."','".$trans["el_bal"]."','".$trans["hra"]."','".$trans["lev_encashrate"]."','".$trans["lev_encashamt"]."','".$trans["elta"]."','".$trans["emed"]."','".$trans["pot"]."','".$trans["espl"]."','".$trans["etfa"]."','".$trans["nsa"]."','".$trans["paid_leave"]."','".$trans["prd"]."','".$trans["pf_gross"]."','".$trans["pf"]."','".$trans["esi_eligibility"]."','".$trans["employer_pf"]."','".$trans["employee_pf"]."','".$trans["eopfa"]."','".$trans["admin_charges"]."','".$trans["employer_edli"]."','".$trans["e_skill"]."','".$trans["gross"]."','".$trans["service_charge"]."','".$trans["eps_wages"]."','".$trans["edli_wages"]."','".$trans["total_fixed_gross"]."','".$trans["eot"]."','".$trans["bas_da_pen_days"]."','".$trans["oth_allw_pen_days"]."','".$trans["mgs"]."','".$trans["professional_tax"]."','".$trans["esi_gross"]."','".$trans["emp_esi"]."','".$trans["vendor_invoice"]."','".$trans["service_tds"]."','".$trans["igst"]."','".$trans["sgst"]."','".$trans["cgst"]."','".$trans["esi"]."','".$trans["total_esi"]."','".$trans["total_deductions"]."','".$trans["notice_period_recovery_amount"]."','".$trans["fpf_gross"]."','".$trans["fixed_pf"]."','".$trans["fpt_gross"]."','".$trans["net_pay"]."','".$trans["salary_loan_total"]."','".$trans["salary_loan_installments"]."','".$trans["salary_loan_instal_count"]."','".$trans["salary_loan_balance"]."','".$trans["pf_loan_total"]."','".$trans["pf_loan_installments"]."','".$trans["pf_loan_instal_count"]."','".$trans["pf_loan_balance"]."','".$trans["role"]."','".$trans["employee_code"]."','".$trans["emp_name"]."','".$trans["department"]."','".$trans["designation"]."','".$trans["bank_account_number"]."','".$trans["bank_name"]."','".$trans["ifsc_code"]."','".$trans["lwf_location"]."','".$trans["process_month"]."','".$trans["resignation_date"]."','".$trans["termination_status"]."','".$trans["epf"]."','".$trans["education_proof"]."','".$trans["resignation_log_remarks"]."','".$trans["payroll"]."','".$trans["cost_center"]."','".$trans["pf_tag"]."','".$trans["vendor_name"]."','".$trans["pay_mode"]."','".$trans["skill_grade"]."','".$trans["project_detail"]."')";
			 
		 
	 $qry_5 = 'INSERT INTO cw_transactions(employees_id,transactions_month,total_earnings,total_deductions,net_pay,trans_created_by,trans_created_date,settlement_date,fandf,hot_water,spl_pa,fopfa,lop_days,separation_day,month_days,f_skill,cost_center,pf_loan,pda_ars,bank_name,bank_account_number,ifsc_code,ele_bill,vendor_name,actual_paid_days,pend_prev_md,a_da,a_hra,bonus,casual_leave,cl_op,fcon,fixed_da,el,el_op,fixed_hra,fixed_gross,flta,fmed,fspl,ftfa,gratuity,hd,lev_encashday,nsd,notice_period,ot_hrs,otr,fo_allowance,pb_ars,pot_hrs,potr,po_ars,spm,woff_days,pf_eligibility,tds,company_lwf,salary_loan,dorm,meal,other_deduction,department,designation,att_bns,monthly_tds,differential_day,fixed_basic,a_basic,employee_lwf,sl,ml,coff,marital_leave,bl,il,wfh,br,covid,bonus_two,bonus_three,pen_paid_days,paid_days,basic,cl_balance,econ,da,el_bal,hra,lev_encashrate,lev_encashamt,elta,emed,pot,espl,etfa,nsa,paid_leave,prd,pf_gross,pf,esi_eligibility,employer_pf,employee_pf,eopfa,admin_charges,employer_edli,e_skill,gross,service_charge,eps_wages,edli_wages,total_fixed_gross,eot,bas_da_pen_days,oth_allw_pen_days,mgs,professional_tax,esi_gross,emp_esi,vendor_invoice,service_tds,igst,sgst,cgst,esi,total_esi,total_deductions,notice_period_recovery_amount,fpf_gross,fixed_pf,fpt_gross,net_pay,salary_loan_total,salary_loan_installments,salary_loan_instal_count,salary_loan_balance,pf_loan_total,pf_loan_installments,pf_loan_instal_count,pf_loan_balance,role,employee_code,emp_name,department,designation,bank_account_number,bank_name,ifsc_code,lwf_location,process_month,resignation_date,termination_status,epf,education_proof,resignation_log_remarks,payroll,cost_center,pf_tag,vendor_name,pay_mode,skill_grade,project_detail'.$trans_key_array.') VALUES '.implode(',',$payroll_array[5]); 
			}else
			if((int)$trans["role"] === 4){
				$trans["food_acc"] = $trans["food_acc"];			
				$trans["f_skill"] = $trans["f_skill"];			
				$trans["cost_center"] = $trans["cost_center"];			
				$trans["pf_eligibility"] = $trans["pf_eligibility"];			
				$trans["pf_loan"] = $trans["pf_loan"];			
				$trans["a_da"] = $trans["a_da"];			
				$trans["a_hra"] = $trans["a_hra"];			
				$trans["att_bns"] = $trans["att_bns"];			
				$trans["pda_ars"] = $trans["pda_ars"];			
				$trans["bonus"] = $trans["bonus"];			
				$trans["casual_leave"] = $trans["casual_leave"];			
				$trans["separation_day"] = $this->get_seperation_day($trans["employee_code"],$trans["role"],$trans["transactions_month"]);			
				$trans["cl_op"] = $trans["cl_op"];			
				$trans["fcon"] = $trans["fcon"];			
				$trans["department"] = $trans["department"];			
				$trans["fixed_da"] = $trans["fixed_da"];			
				$trans["designation"] = $trans["designation"];			
				$trans["el"] = $trans["el"];			
				$trans["el_op"] = $trans["el_op"];			
				$trans["fixed_hra"] = $trans["fixed_hra"];			
				$trans["monthly_tds"] = $trans["monthly_tds"];			
				$trans["flta"] = $trans["flta"];			
				$trans["fmed"] = $trans["fmed"];			
				$trans["bank_name"] = $trans["bank_name"];			
				$trans["fspl"] = $trans["fspl"];			
				$trans["differential_day"] = $this->get_differential_day($trans["employee_code"],$trans["role"],$trans["transactions_month"]);			
				$trans["bank_account_number"] = $trans["bank_account_number"];			
				$trans["ftfa"] = $trans["ftfa"];			
				$trans["ifsc_code"] = $trans["ifsc_code"];			
				$trans["gratuity"] = $trans["gratuity"];			
				$trans["hd"] = $trans["hd"];			
				$trans["ele_bill"] = $trans["ele_bill"];			
				$trans["lev_encashday"] = $trans["lev_encashday"];			
				$trans["fixed_basic"] = $trans["fixed_basic"];			
				$trans["a_basic"] = $this->rounding_value(($trans["a_basic"]),'>1');			
				$trans["nsd"] = $trans["nsd"];			
				$trans["notice_period"] = $trans["notice_period"];			
				$trans["ot_hrs"] = $trans["ot_hrs"];			
				$trans["otr"] = $trans["otr"];			
				$trans["fo_allowance"] = $trans["fo_allowance"];			
				$trans["pb_ars"] = $trans["pb_ars"];			
				$trans["pot_hrs"] = $trans["pot_hrs"];			
				$trans["potr"] = $trans["potr"];			
				$trans["po_ars"] = $trans["po_ars"];			
				$trans["fixed_gross"] = $trans["fixed_gross"];			
				$trans["spm"] = $trans["spm"];			
				$trans["employee_lwf"] = $trans["employee_lwf"];			
				$trans["spl_pa"] = $trans["spl_pa"];			
				$trans["woff_days"] = $trans["woff_days"];			
				$trans["tds"] = $trans["tds"];			
				$trans["pend_prev_md"] = $trans["pend_prev_md"];			
				$trans["company_lwf"] = $trans["company_lwf"];			
				$trans["salary_loan"] = $trans["salary_loan"];			
				$trans["dorm"] = $trans["dorm"];			
				$trans["meal"] = $trans["meal"];			
				$trans["other_deduction"] = $trans["other_deduction"];			
				$trans["sl"] = $trans["sl"];			
				$trans["coff"] = $trans["coff"];			
				$trans["ml"] = $trans["ml"];			
				$trans["marital_leave"] = $trans["marital_leave"];			
				$trans["bl"] = $trans["bl"];			
				$trans["il"] = $trans["il"];			
				$trans["wfh"] = $trans["wfh"];			
				$trans["br"] = $trans["br"];			
				$trans["covid"] = $trans["covid"];			
				$trans["bonus_two"] = $trans["bonus_two"];			
				$trans["bonus_three"] = $trans["bonus_three"];			
				$trans["pen_paid_days"] = $trans["pen_paid_days"];			
				$trans["lop_days"] = $trans["lop_days"];			
				$trans["month_days"] = $this->get_total_work_days($trans["role"],$trans["transactions_month"]);			
				$trans["hot_water"] = $trans["hot_water"];			
				$trans["paid_days"] = $trans["month_days"]-($trans["lop_days"]+$trans["differential_day"]+$trans["separation_day"]+$trans["br"]);			
				$trans["basic"] = $this->rounding_value(($this->dz($trans["fixed_basic"]/$trans["month_days"])*$trans["paid_days"]),'>1');			
				$trans["cl_balance"] = $trans["cl_op"]-$trans["casual_leave"];			
				$trans["econ"] = $this->rounding_value(($this->dz($trans["fcon"]/$trans["month_days"])*$trans["paid_days"]),'>1');			
				$trans["da"] = $this->rounding_value(($this->dz($trans["fixed_da"]/$trans["month_days"])*$trans["paid_days"]),'>1');			
				$trans["el_bal"] = $trans["el_op"]-$trans["el"];			
				$trans["hra"] = $this->rounding_value(($this->dz($trans["fixed_hra"]/$trans["month_days"])*$trans["paid_days"]),'>1');			
				$trans["lev_encashrate"] = $trans["fixed_gross"]/26;			
				$trans["lev_encashamt"] = $this->rounding_value(($this->dz($trans["fixed_gross"]/26)*$trans["lev_encashday"]),'1');			
				$trans["elta"] = $this->rounding_value(($this->dz($trans["flta"]/$trans["month_days"])*$trans["paid_days"]),'>1');			
				$trans["emed"] = $this->rounding_value(($this->dz($trans["fmed"]/$trans["month_days"])*$trans["paid_days"]),'>1');			
				$trans["eot"] = $this->rounding_value(($this->dz($this->dz($this->dz($trans["fixed_gross"]/26)/8)*2)*$trans["ot_hrs"]),'>1');			
				$trans["pot"] = $this->rounding_value(($this->dz($this->dz($this->dz($trans["fixed_gross"]/26)/8)*2)*$trans["pot_hrs"]),'>1');			
				$trans["espl"] = $this->rounding_value(($this->dz($trans["fspl"]/$trans["month_days"])*$trans["paid_days"]),'>1');			
				$trans["etfa"] = $trans["ftfa"];			
				$trans["nsa"] = $trans["nsd"]*50;			
				$trans["esi_eligibility"] = $trans["fixed_basic"]+$trans["fixed_da"]+$trans["fixed_hra"]+$trans["fcon"]+$trans["fmed"]+$trans["flta"]+$trans["fspl"];			
				$trans["paid_leave"] = $trans["casual_leave"]+$trans["el"]+$trans["sl"]+$trans["ml"]+$trans["marital_leave"]+$trans["coff"]+$trans["bl"]+$trans["il"]+$trans["covid"];			
				$trans["prd"] = ($trans["month_days"]+$trans["pen_paid_days"])-($trans["woff_days"]+$trans["hd"]+$trans["paid_leave"]+$trans["lop_days"]+$trans["differential_day"]+$trans["separation_day"]);			
				$trans["e_skill"] = $this->rounding_value(($this->dz($trans["f_skill"]/$trans["month_days"])*$trans["paid_days"]),'>1');			
				$trans["gross"] = $this->rounding_value(($trans["basic"]+$trans["da"]+$trans["hra"]+$trans["espl"]+$trans["emed"]+$trans["elta"]+$trans["econ"]+$trans["e_skill"]+$trans["lev_encashamt"]),'1');			
				$trans["pf_gross"] = $this->rounding_value(($trans["gross"]+$trans["po_ars"]),'1');			
				$trans["pf"] = $this->rounding_value(($this->dz($trans["pf_gross"])*$this->dz(12/100)),'1');			
				$trans["employer_edli"] = $this->rounding_value(($trans["pf_gross"]*0),'1');			
				$trans["admin_charges"] = $this->dz($trans["pf_gross"]*0.5)/100;			
				$trans["employee_pf"] = $this->rounding_value(($trans["pf"]),'1');			
				if($trans["pf_gross"]>15000){$trans["eps_wages"] = ($trans["pf_gross"]*0);}else{$trans["eps_wages"] = 0;}
				$trans["edli_wages"] = $trans["eps_wages"];			
				$trans["total_fixed_gross"] = $trans["fixed_basic"]+$trans["fixed_da"]+$trans["fixed_hra"]+$trans["fcon"]+$trans["flta"]+$trans["fmed"]+$trans["fspl"]+$trans["ftfa"]+$trans["f_skill"];			
				$trans["bas_da_pen_days"] = $this->rounding_value(($this->dz($trans["fixed_basic"]/$trans["pend_prev_md"])*$trans["pen_paid_days"]),'1');			
				$trans["oth_allw_pen_days"] = $this->rounding_value(($this->dz($this->dz($trans["fixed_gross"]/$trans["pend_prev_md"])*$trans["pen_paid_days"])-$trans["bas_da_pen_days"]),'1');			
				$trans["mgs"] = $trans["gross"]+$trans["spl_pa"]+$trans["etfa"]+$trans["att_bns"]+$trans["nsa"]+$trans["fo_allowance"]+$trans["bonus"]+$trans["pb_ars"]+$trans["po_ars"]+$trans["eot"]+$trans["pot"]+$trans["bonus_two"]+$trans["bonus_three"]+$trans["bas_da_pen_days"]+$trans["oth_allw_pen_days"];			
				$trans["professional_tax"] = $this->get_professional_tax_value($trans["employee_code"],$trans["professional_tax_location"],$trans["pt_projection"],$trans["mgs"],$trans["transactions_month"]);			
				$a=0;if($trans["fixed_gross"]>21000){$trans["esi_gross"] = $a;}else{$trans["esi_gross"] = $trans["mgs"];}
				$trans["esi"] = $this->rounding_value(($trans["esi_gross"]*(0)),'1');			
				$trans["total_deductions"] = $this->rounding_value(($trans["pf"]+$trans["esi"]+$trans["tds"]+$trans["professional_tax"]+$trans["meal"]+$trans["dorm"]+$trans["employee_lwf"]+$trans["other_deduction"]+$trans["salary_loan"]+$trans["monthly_tds"]+$trans["hot_water"]+$trans["pf_loan"]+$trans["ele_bill"]),'1');			
				$trans["notice_period_recovery_amount"] = $this->rounding_value(($this->dz($trans["fixed_gross"]/$trans["month_days"])*$trans["notice_period"]),'1');			
				$trans["fpf_gross"] = $this->rounding_value(($trans["fixed_gross"]+$trans["po_ars"]),'1');			
				$trans["fixed_pf"] = $this->rounding_value(($trans["fpf_gross"]*$this->dz(12/100)),'1');			
				$trans["fpt_gross"] = $trans["total_fixed_gross"];			
				$trans["net_pay"] = $this->rounding_value(($trans["mgs"]-$trans["total_deductions"]),'1');			
				$trans["total_earnings"] = $this->rounding_value(($trans["esp_po_allw"]+$trans["bonus_two"]+$trans["eleader_allw"]+$trans["bonus_three"]+$trans["bas_da_pen_days"]+$trans["oth_allw_pen_days"]+$trans["fo_allowance"]+$trans["att_bns"]+$trans["bonus"]+$trans["econ"]+$trans["gratuity"]+$trans["lev_encashamt"]+$trans["elta"]+$trans["emed"]+$trans["nsa"]+$trans["eot"]+$trans["pb_ars"]+$trans["pot"]+$trans["po_ars"]+$trans["espl"]+$trans["spl_pa"]+$trans["etfa"]+$trans["e_skill"]+$trans["pda_ars"]+$trans["basic"]+$trans["da"]+$trans["hra"]),'1');			
				$trans["total_deductions"] = $this->rounding_value(($trans["pf"]+$trans["esi"]+$trans["professional_tax"]+$trans["notice_period_recovery_amount"]+$trans["other_deduction"]+$trans["dorm"]+$trans["tds"]+$trans["meal"]+$trans["vpf"]+$trans["monthly_tds"]+$trans["hot_water"]+$trans["ele_bill"]),'1');			
				$trans["net_pay"] = $this->rounding_value(($trans["total_earnings"]-$trans["total_deductions"]),'1');			 
	 $payroll_array[4][] ="('".$trans["employees_id"]."','".$trans["transactions_month"]."','".$trans["total_earnings"]."','".$trans["total_deductions"]."','".$trans["net_pay"]."',\"$logged_id\",\"$date\",\"$settlement_date\",\"1\",'".$trans["food_acc"]."','".$trans["f_skill"]."','".$trans["cost_center"]."','".$trans["pf_eligibility"]."','".$trans["pf_loan"]."','".$trans["a_da"]."','".$trans["a_hra"]."','".$trans["att_bns"]."','".$trans["pda_ars"]."','".$trans["bonus"]."','".$trans["casual_leave"]."','".$trans["separation_day"]."','".$trans["cl_op"]."','".$trans["fcon"]."','".$trans["department"]."','".$trans["fixed_da"]."','".$trans["designation"]."','".$trans["el"]."','".$trans["el_op"]."','".$trans["fixed_hra"]."','".$trans["monthly_tds"]."','".$trans["flta"]."','".$trans["fmed"]."','".$trans["bank_name"]."','".$trans["fspl"]."','".$trans["differential_day"]."','".$trans["bank_account_number"]."','".$trans["ftfa"]."','".$trans["ifsc_code"]."','".$trans["gratuity"]."','".$trans["hd"]."','".$trans["ele_bill"]."','".$trans["lev_encashday"]."','".$trans["fixed_basic"]."','".$trans["a_basic"]."','".$trans["nsd"]."','".$trans["notice_period"]."','".$trans["ot_hrs"]."','".$trans["otr"]."','".$trans["fo_allowance"]."','".$trans["pb_ars"]."','".$trans["pot_hrs"]."','".$trans["potr"]."','".$trans["po_ars"]."','".$trans["fixed_gross"]."','".$trans["spm"]."','".$trans["employee_lwf"]."','".$trans["spl_pa"]."','".$trans["woff_days"]."','".$trans["tds"]."','".$trans["pend_prev_md"]."','".$trans["company_lwf"]."','".$trans["salary_loan"]."','".$trans["dorm"]."','".$trans["meal"]."','".$trans["other_deduction"]."','".$trans["sl"]."','".$trans["coff"]."','".$trans["ml"]."','".$trans["marital_leave"]."','".$trans["bl"]."','".$trans["il"]."','".$trans["wfh"]."','".$trans["br"]."','".$trans["covid"]."','".$trans["bonus_two"]."','".$trans["bonus_three"]."','".$trans["pen_paid_days"]."','".$trans["lop_days"]."','".$trans["month_days"]."','".$trans["hot_water"]."','".$trans["paid_days"]."','".$trans["basic"]."','".$trans["cl_balance"]."','".$trans["econ"]."','".$trans["da"]."','".$trans["el_bal"]."','".$trans["hra"]."','".$trans["lev_encashrate"]."','".$trans["lev_encashamt"]."','".$trans["elta"]."','".$trans["emed"]."','".$trans["eot"]."','".$trans["pot"]."','".$trans["espl"]."','".$trans["etfa"]."','".$trans["nsa"]."','".$trans["esi_eligibility"]."','".$trans["paid_leave"]."','".$trans["prd"]."','".$trans["e_skill"]."','".$trans["gross"]."','".$trans["pf_gross"]."','".$trans["pf"]."','".$trans["employer_edli"]."','".$trans["admin_charges"]."','".$trans["employee_pf"]."','".$trans["eps_wages"]."','".$trans["edli_wages"]."','".$trans["total_fixed_gross"]."','".$trans["bas_da_pen_days"]."','".$trans["oth_allw_pen_days"]."','".$trans["mgs"]."','".$trans["professional_tax"]."','".$trans["esi_gross"]."','".$trans["esi"]."','".$trans["total_deductions"]."','".$trans["notice_period_recovery_amount"]."','".$trans["fpf_gross"]."','".$trans["fixed_pf"]."','".$trans["fpt_gross"]."','".$trans["net_pay"]."','".$trans["salary_loan_total"]."','".$trans["salary_loan_installments"]."','".$trans["salary_loan_instal_count"]."','".$trans["salary_loan_balance"]."','".$trans["pf_loan_total"]."','".$trans["pf_loan_installments"]."','".$trans["pf_loan_instal_count"]."','".$trans["pf_loan_balance"]."','".$trans["role"]."','".$trans["employee_code"]."','".$trans["emp_name"]."','".$trans["department"]."','".$trans["designation"]."','".$trans["bank_account_number"]."','".$trans["bank_name"]."','".$trans["ifsc_code"]."','".$trans["lwf_location"]."','".$trans["process_month"]."','".$trans["resignation_date"]."','".$trans["termination_status"]."','".$trans["epf"]."','".$trans["education_proof"]."','".$trans["resignation_log_remarks"]."','".$trans["payroll"]."','".$trans["cost_center"]."','".$trans["pf_tag"]."','".$trans["vendor_name"]."','".$trans["pay_mode"]."','".$trans["skill_grade"]."','".$trans["project_detail"]."')";
			 
		 
	 $qry_4 = 'INSERT INTO cw_transactions(employees_id,transactions_month,total_earnings,total_deductions,net_pay,trans_created_by,trans_created_date,settlement_date,fandf,food_acc,f_skill,cost_center,pf_eligibility,pf_loan,a_da,a_hra,att_bns,pda_ars,bonus,casual_leave,separation_day,cl_op,fcon,department,fixed_da,designation,el,el_op,fixed_hra,monthly_tds,flta,fmed,bank_name,fspl,differential_day,bank_account_number,ftfa,ifsc_code,gratuity,hd,ele_bill,lev_encashday,fixed_basic,a_basic,nsd,notice_period,ot_hrs,otr,fo_allowance,pb_ars,pot_hrs,potr,po_ars,fixed_gross,spm,employee_lwf,spl_pa,woff_days,tds,pend_prev_md,company_lwf,salary_loan,dorm,meal,other_deduction,sl,coff,ml,marital_leave,bl,il,wfh,br,covid,bonus_two,bonus_three,pen_paid_days,lop_days,month_days,hot_water,paid_days,basic,cl_balance,econ,da,el_bal,hra,lev_encashrate,lev_encashamt,elta,emed,eot,pot,espl,etfa,nsa,esi_eligibility,paid_leave,prd,e_skill,gross,pf_gross,pf,employer_edli,admin_charges,employee_pf,eps_wages,edli_wages,total_fixed_gross,bas_da_pen_days,oth_allw_pen_days,mgs,professional_tax,esi_gross,esi,total_deductions,notice_period_recovery_amount,fpf_gross,fixed_pf,fpt_gross,net_pay,salary_loan_total,salary_loan_installments,salary_loan_instal_count,salary_loan_balance,pf_loan_total,pf_loan_installments,pf_loan_instal_count,pf_loan_balance,role,employee_code,emp_name,department,designation,bank_account_number,bank_name,ifsc_code,lwf_location,process_month,resignation_date,termination_status,epf,education_proof,resignation_log_remarks,payroll,cost_center,pf_tag,vendor_name,pay_mode,skill_grade,project_detail'.$trans_key_array.') VALUES '.implode(',',$payroll_array[4]); 
			}
		}  
	 if($payroll_array[3]){ 
	 $this->db->query($qry_3); 
	 }
	 if($payroll_array[2]){ 
	 $this->db->query($qry_2); 
	 }
	 if($payroll_array[5]){ 
	 $this->db->query($qry_5); 
	 }
	 if($payroll_array[4]){ 
	 $this->db->query($qry_4); 
	 } 
	 return true; 
	}

	public function rounding_value($result, $round_mode){
		$result = round($result,2);
		$final_result =0;
		if(($round_mode == 0.5) || ($round_mode == 1)){
			$final_result = round($result/$round_mode, 0)* $round_mode;
		}elseif($round_mode == '>1'){
			$final_result = ceil($result);
		}elseif($round_mode == '<1'){
			$final_result = floor($result);
		}elseif($round_mode == '<0.5'){
			$rslt   = explode('.', $result);
			$int_value  =  $rslt[0];
			$point_value =  $rslt[1];
			if((int)$point_value > 50){
				$final_result = $int_value.'.50';
			}else{
				$final_result = ceil($result);
			}
		}elseif($round_mode == '>0.5'){
			$rslt   = explode('.', $result);
			$int_value   =  $rslt[0];
			$point_value =  $rslt[1];
			if((int)$point_value >= 50){
				$final_result = round($result);
			}else{
				$final_result = $int_value.'.50';
			}
		}elseif(((int)$round_mode == 5) || ((int)$round_mode == 10) || ((int)$round_mode == 50) || ((int)$round_mode == 100)){
			$final_result = (ceil($result)% $round_mode === 0) ? ceil($result) : round(($result+ $round_mode/2)/ $round_mode)*$round_mode;
		}elseif($round_mode == 0.1){
			$final_result = round($result, 2);
		}
		return $final_result;
	}
			
	public function dz($result){
		if(is_nan($result) || is_infinite($result)){
			$result = 0;
		}else{
			$result;
		}
		return $result;
	} //GET TOTAL WORKING DAYS
	public function get_total_work_days($role,$process_month){
		$month_day_result   = $this->month_day_res[$role];
		if($month_day_result){			
			$role           = $month_day_result['category'];
			$day_conditions = $month_day_result['day_conditions'];
			$day_count      = $month_day_result['day_count'];
			$day_start      = $month_day_result['day_start'];
			$day_end        = $month_day_result['day_end'];
			$month_day = array();
			if((int)$day_conditions === 1){
				//STATIC DAYS
				$month_day = $day_count;
			}else
			if((int)$day_conditions === 2){
				//CALENDER DAYS
				$trans_month = explode('-',$process_month);
				$month_val     = $trans_month[0];
				$year_val      = $trans_month[1];
				$day_count     = cal_days_in_month(CAL_GREGORIAN, $month_val, $year_val);
				$month_day     = $day_count;
			}else
			if((int)$day_conditions === 3){
				//CUTOFF DAYS
				$trans_month   = explode('-',$process_month);
				$month_val     = $trans_month[0];
				$year_val      = $trans_month[1];
				$pre_month     = (int)$month_val - 1;
				$pre_year_val  = $year_val;
				if((int)$pre_month === 0){
					$pre_month     = 12;
					$pre_year_val  = (int)$year_val - 1;
				}
				$start_date = $day_start."-".$pre_month."-".$pre_year_val;
				$end_date   = $day_end."-".$month_val."-".$year_val;
				$start_date = strtotime($start_date);
				$end_date   = strtotime($end_date);
				$datediff   = $end_date - $start_date;
				$day_count  = round($datediff/86400);//60 * 60 * 24
				$month_day  = (int)$day_count + 1;
			}
		}else{
			$trans_month = explode("-",$process_month);
			$month_val     = $trans_month[0];
			$year_val      = $trans_month[1];
			$day_count     = cal_days_in_month(CAL_GREGORIAN, $month_val, $year_val);
			$month_day     = $day_count;
		}		
		return $month_day;
	}	
	
	//GET DIFFERENTIAL DAY COUNT FOR NEW JOINING details
	//intermediate joining date and month days count differentiate day count	
	public function get_differential_day($employee_code,$role,$process_month){		
		$month_day_result = $this->month_day_res[$role];
		$tot_month_day    = $this->get_total_work_days($role,$process_month);
		if($month_day_result){
			$day_conditions = $month_day_result['day_conditions'];
			$day_count      = $month_day_result['day_count'];
			$day_start      = $month_day_result['day_start'];
			$day_end        = $month_day_result['day_end'];
			$diff_day_qry    = 'select date_of_joining from cw_employees where trans_status = 1 and employee_code = "'.$employee_code.'" and DATE_FORMAT(date_of_joining, "%m-%Y") like "'.$process_month.'"';
			$diff_day_data   = $this->db->query("CALL sp_a_run ('SELECT','$diff_day_qry')");
			$diff_day_result = $diff_day_data->result();
			$diff_day_data->next_result();
			$doj = $diff_day_result[0]->date_of_joining;
			$diff_day_count = $diff_day_data->num_rows();
			if(((int)$day_conditions === 1) || ((int)$day_conditions === 2)){//STATIC DAYS AND CALENDER DAYS
						if((int)$diff_day_count === 0){
							$final_dif_day = 0;
						}else{
							$trans_month   = explode('-',$process_month);
							$month_val     = $trans_month[0];
							$year_val      = $trans_month[1];
							if((int)$day_conditions === 2){
								$day_count     = cal_days_in_month(CAL_GREGORIAN, $month_val, $year_val);
							}
							$process_date  = $day_count.'-'.$process_month;
							$process_date  = date('d-m-Y', strtotime($process_date));
							$process_date  = strtotime($process_date);
							$doj           = strtotime($doj);
							$diff          = $process_date - $doj;
							$differ_day    = round($diff / 86400);
							$final_dif_day = $tot_month_day - $differ_day - 1;
						}
			}else
			if((int)$day_conditions === 3){//CUTOFF DAYS
				$trans_month    = explode("-",$process_month);
				$month_val      = $trans_month[0];
				$year_val       = $trans_month[1];
				$process_end    = $day_end."-".$month_val."-".$year_val;
				$process_end    = date('Y-m-d',strtotime($process_end));
				$pre_month      = ($month_val - 1) % 12;
				$process_start  = $day_start."-".$pre_month."-".$year_val;
				$process_start  = date('Y-m-d',strtotime($process_start));
				$diff_cut_day_qry    = 'select date_of_joining from cw_employees where trans_status = 1 and employee_code = "'.$employee_code.'" and DATE_FORMAT(date_of_joining, "%Y-%m-%d") between "'.$process_start.'" and "'.$process_end.'"';
						$diff_cut_day_data   = $this->db->query("CALL sp_a_run ('SELECT','$diff_cut_day_qry')");
						$diff_cut_day_result = $diff_cut_day_data->result();
						$diff_cut_day_data->next_result();
						$diff_cut_day_count = $diff_cut_day_data->num_rows();
						$doj = $diff_cut_day_result[0]->date_of_joining;
						if((int)$diff_cut_day_count === 0){
					$final_dif_day = 0;
				}else{
					$doj            = strtotime($doj);
					$process_end    = strtotime($process_end);
					$diff           = $process_end - $doj;
					$differ_day     = round($diff / 86400);
					$final_dif_day  = $tot_month_day - $differ_day - 1;
				}
			}
		}
		return $final_dif_day;
	}
	 
	//GET TOTAL LOAN AMOUNT FOR PER EMPLOYEE
			
	public function get_loan_value($employee_code,$process_month){
				$get_terminate_qry = 'select termination_status from cw_employees where trans_status=1 and employee_code ="'.$employee_code.'"';
				$get_terminate_data   = $this->db->query("CALL sp_a_run ('SELECT','$get_terminate_qry')");
				$get_terminate_result = $get_terminate_data->result();
				$get_terminate_data->next_result();
				$terminate_sts  =  $get_terminate_result[0]->termination_status;
				$loan_amt = 0;
				if((int)$terminate_sts === 1){
					$loan_qry = 'select IFNULL(sum(install_amount),0) as install_amt from cw_loan_installment where trans_status = 1 and paid_status = 0 and emp_code ="'.$employee_code.'" and date_format(str_to_date(install_year, "%m-%Y") , "%Y-%m")  >= date_format(str_to_date("'.$process_month.'", "%m-%Y"), "%Y-%m")';
					$loan_data   = $this->db->query("CALL sp_a_run ('SELECT','$loan_qry')");
					$loan_result = $loan_data->result();
					$loan_data->next_result();
					if(!empty($loan_result)){
						$loan_amt = $loan_result[0]->install_amt;
					}
				}else{
					$loan_qry = 'select IFNULL(install_amount,0) as install_amt from cw_loan_installment where trans_status = 1 and paid_status = 0 and emp_code ="'.$employee_code.'" and install_year ="'.$process_month.'"';
					$loan_data   = $this->db->query("CALL sp_a_run ('SELECT','$loan_qry')");
					$loan_result = $loan_data->result();
					$loan_data->next_result();
					$loan_amt = 0;
					if(!empty($loan_result)){				
						$loan_amt = $loan_result[0]->install_amt;
						if($loan_amt > 0){
							$upd_query  = 'UPDATE cw_loan_installment SET paid_status = 1 WHERE trans_status = 1 and install_year ="'.$process_month.'" and emp_code="'.$employee_code.'"';
							$update_info   = $this->db->query("CALL sp_a_run ('UPDATE','$upd_query')");
						}
					}
				}
				return $loan_amt;
			}	
			//Get ESI STATUS 20SEP2022 BSK
			public function get_esi_status($earned_gross,$employee_code,$role,$process_month){
				$statutory_rslt 		= $this->statutory_arr[$role];
				$esi_limit 			= $statutory_rslt['esi_limit'];
				$esi_conditions 		= $statutory_rslt['esi_conditions'];
				$esi_start_check_month = $statutory_rslt['esi_start_check_month'];
				$esi_end_check_month 	= $statutory_rslt['esi_end_check_month'];
				$process_month 		= $statutory_rslt['process_month'];
				$process_month_val 	= $statutory_rslt['process_month_val'];
				$esi_loc_db            = $this->get_map_arr['esi_loc']['db_column'];
				$esi_elig_db           = $this->get_map_arr['esi_elig']['db_column'];
				if($esi_limit > 0){
					//location nil is default
					//1 -- Nil default no esi sts 2
					/*$select_loc_qry 		= 'select '.$esi_loc_db.' as esi_loc from cw_employees where trans_status = 1 and role = "'.$role.'" and employee_code = "'.$employee_code.'"';
					$select_loc_data 		= $this->db->query("CALL sp_a_run ('SELECT','$select_loc_qry')");
					$select_loc_result 	= $select_loc_data->result_array();
					$select_loc_data->next_result();*/

					$esi_location    = $this->emp_date_arr[$employee_code][$esi_loc_db];
					$esi_eligibility = $this->emp_date_arr[$employee_code][$esi_elig_db];

					if((int)$esi_location){
						$upd_query 	= 'UPDATE cw_employees SET esi_eligibility = 2 WHERE trans_status = 1 and role ="'.$role.'" and employee_code="'.$employee_code.'"';
						$update_info 	= $this->db->query("CALL sp_a_run ('UPDATE','$upd_query')");
						$esi_sts 		= 2;
						return $esi_sts;
					}else{
						//esi eligibility 1= yes 2 = no;
						if(($esi_start_check_month === $process_month_val) || ($esi_end_check_month === $process_month_val)){
							if((int)$earned_gross > (int)$esi_limit){
								$upd_query 	= 'UPDATE cw_employees SET esi_eligibility = 2 WHERE trans_status = 1 and role ="'.$role.'" and employee_code="'.$employee_code.'"';
								$update_info 	= $this->db->query("CALL sp_a_run ('UPDATE','$upd_query')");
								$esi_sts 		= 2;
								return $esi_sts;
							}else{
								$esi_sts = 1; //yes esi
								return $esi_sts;
							}
						}else{
							$select_esi_elig_qry 		= 'select '.$esi_loc_db.' as esi_elig from cw_employees where trans_status = 1 and role = "'.$role.'" and employee_code = "'.$employee_code.'"';
							$select_esi_elig_data 		= $this->db->query("CALL sp_a_run ('SELECT','$select_esi_elig_qry')");
							$select_esi_elig_result 	= $select_esi_elig_data->result();
							$select_esi_elig_data->next_result();
							$esi_sts 					= $select_esi_elig_result[0]->esi_elig;
							return $esi_sts; 	//actual esi status from DB//
						}
					}
				}
				
			}
			//GET LWF EMPLOYER (COMPANY AMOUNT) FUNCTION
			public function get_lwf_employer($lwf_location,$process_month){
				$process_month 		= explode("-",$process_month);
				$process_month_val 	= $process_month[0];
				//$process_month_val 	= 12;
				$select_lwf_result 	= $this->lwf_emp_arr[$lwf_location];
				$pay_month 			= $select_lwf_result['pay_month'];
				$company_amount 		= $select_lwf_result['company_amount'];
				$lwf_comp_amt 			= 0;
				if($pay_month == "process_month_val"){
					$lwf_comp_amt = $company_amount;
				}
				return $lwf_comp_amt; 
			}
			//GET LWF EMPLOYEE (EMPLOYEE AMOUNT) FUNCTION
			public function get_lwf_employee($lwf_location,$process_month){
				$process_month 		= explode("-",$process_month);
				$process_month_val 	= $process_month[0];
				$select_lwf_result 	= $this->lwf_emp_arr[$lwf_location];
				$pay_month 			= $select_lwf_result['pay_month'];
				$employee_amount 		= $select_lwf_result['employee_amount'];
				$lwf_emp_amt 			= 0;
				if($pay_month == "process_month_val"){
					$lwf_emp_amt = $employee_amount;
				}
				return $lwf_emp_amt; 
			}
			//formula PD = MD-LD-DD-S_DD;
			//find re-leaving date for resigning employee details check this values 13/12/2021
			public function get_seperation_day($employee_code,$role,$process_month){
				$sep_day 					= $this->emp_date_arr[$employee_code]['last_working_date'];
				if($sep_day && $sep_day !== '0000-00-00' && $sep_day !== '1970-01-01'){
					$month_day_result 		= $this->month_day_res[$role];
					$day_conditions 		= $month_day_result['day_conditions'];
					$day_count 			= $month_day_result['day_count'];
					$day_start 			= $month_day_result['day_start'];
					$day_end 				= $month_day_result['day_end'];
					if((int)$day_conditions === 1){
						//STATIC DAYS
						$process_date 		= $day_count.'-'.$process_month;
						$process_date 		= date('d-m-Y', strtotime($process_date));
						$process_date 		= strtotime($process_date);
						$sep_day 			= strtotime($sep_day);
						$diff 				= $process_date - $sep_day;
						$separation_day	= round($diff / 86400);
					}else
					if((int)$day_conditions === 2){
						//CALENDER DAYS
						$trans_month 		= explode("-",$process_month);
						$month_val 		= $trans_month[0];
						$year_val 			= $trans_month[1];
						$day_count 		= cal_days_in_month(CAL_GREGORIAN, $month_val, $year_val);
						$process_date 		= $day_count.'-'.$process_month;
						$process_date 		= date('d-m-Y', strtotime($process_date));
						$process_date 		= strtotime($process_date);
						$sep_day 			= strtotime($sep_day);
						$diff 				= $process_date - $sep_day;
						$separation_day	= round($diff / 86400);
					}else
					if((int)$day_conditions === 3){
						//CUTOFF DAYS
						$trans_month 		= explode("-",$process_month);
						$month_val 		= $trans_month[0];
						$year_val 			= $trans_month[1];
						$process_date 		= $day_end.'-'.$month_val.'-'.$year_val;
						$process_date 		= strtotime($process_date);
						$sep_day 			= strtotime($sep_day);
						$diff 				= $process_date - $sep_day;
						$separation_day	= round($diff / 86400);
					}
				}else{
					$separation_day = 0;
				}
				if($separation_day < 0){
					$separation_day = 0;
				}
				return $separation_day; 
			}
			public function get_gratuity($role,$employee_code){
				$check_eligibilty_result	= $this->gratuity_arr[$role];
				$working_days				= $check_eligibilty_result['working_days'];
				$number_of_years			= $check_eligibilty_result['number_of_years'];
				$pay_days					= $check_eligibilty_result['pay_days'];
				$year_rounding				= $check_eligibilty_result['year_rounding'];
				$gratuity_formula			= $check_eligibilty_result['formula_detail'];
				$formula_rounding			= $check_eligibilty_result['formula_rounding'];
				$gratuity_formula			= str_replace("@","",$gratuity_formula);
				$gratuity_formula			= "(".$gratuity_formula.") as gratuity";
				$doj 						= $this->emp_date_arr[$employee_code]['date_of_joining'];
				$last_day					= $this->emp_date_arr[$employee_code]['last_working_date'];
				$status				    = $this->emp_date_arr[$employee_code]['termination_status'];
				$doj 						= strtotime($doj);
				$last_day					= strtotime($last_day);
				$tot_year					= (abs($last_day-$doj)/60/60/24)/365;
				
				//year rounding base working year is rounded
				$year_arr = array(1=>$tot_year,2=>round($tot_year),3=>ceil($tot_year),4=>floor($tot_year));
				if($year_rounding){
					$tot_year = $year_arr[$year_rounding];
				}			
				$tot_year = number_format((float)$tot_year, 2, '.', '');
				if($last_day && $last_day !== '0000-00-00' && $last_day !== '1970-01-01' && (int)$status === 1){
				//gratuity calculations for given formula and employee code
				if(($tot_year >= $number_of_years)){
					$grat_formula_amt_qry				= 'select  '.$gratuity_formula.' from cw_employees where trans_status =1 and employee_code = "'.$employee_code.'"';
					$grat_formula_amt_data 			= $this->db->query("CALL sp_a_run ('SELECT','$grat_formula_amt_qry')");
					$grat_formula_amt_result			= $grat_formula_amt_data->result();
					$grat_formula_amt_data->next_result();
					$grat_formula_amt 					= $grat_formula_amt_result[0]->gratuity;
					$gratutity_amt					    = (($grat_formula_amt * $pay_days)/$working_days) * $tot_year;
					if($formula_rounding){
						$gratutity_amt						= $this->rounding_value($gratutity_amt,$formula_rounding);
					}					
					return $gratutity_amt;
				}else{
						return 0;
					}
				}else{
					return 0;
				}
			}
			public function get_salary_date($category){
				$month_day_result 		= $this->gratuity_arr[$category];
				if($month_day_result){
					$role 				= $month_day_result['category'];
					$day_conditions 	= $month_day_result['day_conditions'];
					$day_count 		= $month_day_result['day_count'];
					$day_start 		= $month_day_result['day_start'];
					$day_end 			= $month_day_result['day_end'];
					if((int)$day_conditions === 3){
						return array('day_start'=> $day_start, 'day_end' => $day_end,'day_conditions'=>(int)$day_conditions);
					}else{
						$day_start = '01';
						return array('day_start'=> $day_start, 'day_end' => $day_end,'day_conditions'=>(int)$day_conditions);
					}
				}
			}
			public function get_fandf_professional_tax_value($professional_tax_location,$pt_projection,$total_earnings,$process_month){				
				$professional_tax_amount_db = $this->get_map_arr['professional_tax_amount']['db_column'];
				$ptax_qry 			= 'select cw_professional_tax.prime_professional_tax_id,location,calculation_period,ptax_deduction_month_first as first_period,ptax_deduction_month_second as second_period, osm_first_end,osm_second_end from cw_professional_tax_tax_range inner join cw_professional_tax on cw_professional_tax.prime_professional_tax_id = cw_professional_tax_tax_range.prime_professional_tax_id where cw_professional_tax.trans_status = 1 and location = "'.$professional_tax_location.'"';
				$ptax_data 		= $this->db->query("CALL sp_a_run ('SELECT','$ptax_qry')");
				$ptax_result 		= $ptax_data->result();
				$ptax_data->next_result();
				$prof_tax_id         = $ptax_result[0]->prime_professional_tax_id;
				$location            = $ptax_result[0]->location;
				$calculation_mode    = $ptax_result[0]->calculation_period;
				$ptax_first_period   = $ptax_result[0]->osm_first_end;
				$ptax_second_period  = $ptax_result[0]->osm_second_end;
				$ptax_deduct_first   = $ptax_result[0]->first_period;
				$ptax_deduct_second  = $ptax_result[0]->second_period;
				$trans_month         = $process_month;
				$process_month       = explode("-",$process_month);
				$process_month_val   = $process_month[0];
				$process_year_val    = $process_month[1];
				$process_month_date  = $process_month[1]."-".$process_month[0]."-01";

				//tax area Tamil Nadu tax calculation
				//By Formula every month calculated ptax amount based on earn gross
				$prof_tax = 0;
				if((int)$calculation_mode === 1){
					//By Formula -- First Method
					$every_month_qry 		= 'select professional_tax_amount as ptax_amt from cw_professional_tax_tax_range where trans_status=1 and prime_professional_tax_id = "'.$prof_tax_id.'" and earning_range_from <= "'.floor($total_earnings).'" and earning_range_to >= "'.floor($total_earnings).'"';
					$every_month_data 		= $this->db->query("CALL sp_a_run ('SELECT','$every_month_qry')");
					$every_month_result 	= $every_month_data->result();
					$every_month_data->next_result();
					$prof_tax 				= $every_month_result[0]->ptax_amt;
				}else
				if((int)$calculation_mode === 2){
					//By Monthly  -- Second Method -- values
					//create first and second tax pay period array			
					$period_qry 		= 'select osm_first_start,osm_first_end,osm_second_start,osm_second_end from cw_professional_tax where trans_status =1 and location = "'.$professional_tax_location.'"';
					$period_data 		= $this->db->query("CALL sp_a_run ('SELECT','$period_qry')");
					$period_result 	= $period_data->result();
					$period_data->next_result();
					$osm_first_st_val 	= $period_result[0]->osm_first_start;
					$osm_first_ed_val 	= $period_result[0]->osm_first_end;
					$osm_second_st_val = $period_result[0]->osm_second_start;
					$osm_second_ed_val = $period_result[0]->osm_second_end;
					$first_period 		= array();
					for($osm_first_st_val;$osm_first_st_val<=$osm_first_ed_val;$osm_first_st_val++){
						$first_period[] = $osm_first_st_val;
					}
					$second_period_part_i = array();
					for($osm_second_st_val;$osm_second_st_val<=12;$osm_second_st_val++){
						$second_period_part_i[] = $osm_second_st_val;
					}
					
					$second_period_part_ii = array();
					for($osm_second_ed_val;$osm_second_ed_val>=1;$osm_second_ed_val--){
						$second_period_part_ii[] = $osm_second_ed_val;
					}
					sort($second_period_part_ii);
					$second_period = array_merge($second_period_part_i,$second_period_part_ii);
					$loop_count    = 5;
					$tot_count     = 0;
					//calculating pending projection count loop
					if(in_array($process_month_val,$first_period)){
						$cur_count = array_search($process_month_val, array_values($first_period));
						$tot_count = (int)$loop_count - (int)$cur_count;
					}else
					if(in_array($process_month_val,$second_period)){
						$cur_count = array_search($process_month_val, array_values($second_period));
						$tot_count = (int)$loop_count - (int)$cur_count;
					}
					//projection amount
					//$projection_total  = $pt_projection * (int)$tot_count; //2 month count
					$projection_total    = 0; //as discussed with jai sir.
					//Find last total earned gross amount
					$last_month_date 		= date("Y-m-d", strtotime(date("Y-m-d", strtotime($process_month_date)) . " - ".$cur_count." months"));
					$previous_tax_qry 		= 'select ifnull(sum(total_earnings),0) as total_earnings from cw_transactions where trans_status =1 and employee_code = "'.$employee_code.'" and date_format(str_to_date(transactions_month, "%m-%Y") , "%Y-%m") BETWEEN date_format("'.$last_month_date.'", "%Y-%m") and date_format("'.$process_month_date.'", "%Y-%m")';
					$previous_tax_data 	= $this->db->query("CALL sp_a_run ('SELECT','$previous_tax_qry')");
					$previous_tax_result 	= $previous_tax_data->result();
					$previous_tax_data->next_result();
					$previous_earned 		= $previous_tax_result[0]->total_earnings; //upto this month sum earned gross
					$total_earn 			= $previous_earned + $projection_total + $total_earnings;
					//loop processing count
					$process_count 		= (int)$tot_count + 1;

					//Find current professional tax pay amount
					$find_tax_qry 			= 'select professional_tax_amount as ptax_amt from cw_professional_tax_tax_range where trans_status = 1 and prime_professional_tax_id = "'.$prof_tax_id.'" and earning_range_from <= "'.floor($total_earn).'" and earning_range_to >= "'.floor($total_earn).'"';
					$find_tax_data 		= $this->db->query("CALL sp_a_run ('SELECT','$find_tax_qry')");
					$find_tax_result 		= $find_tax_data->result();
					$find_tax_data->next_result();
					$find_tax_val 			= $find_tax_result[0]->ptax_amt;
					
					//Find last paying professional tax amount and find final professional tax values and return to ptax column
					$last_tax_qry 			= 'select ifnull(sum('.$professional_tax_amount_db.'),0) as professional_tax from cw_transactions where trans_status =1 and employee_code = "'.$employee_code.'" and date_format(str_to_date(transactions_month, "%m-%Y") , "%Y-%m") BETWEEN date_format("'.$last_month_date.'", "%Y-%m") and date_format("'.$process_month_date.'", "%Y-%m")';
					$last_tax_data 		= $this->db->query("CALL sp_a_run ('SELECT','$last_tax_qry')");
					$last_tax_result 		= $last_tax_data->result();
					$last_tax_data->next_result();	
					$last_tax_val 			= $last_tax_result[0]->professional_tax;
					$prof_tax 				= $find_tax_val - $last_tax_val;					
				}else
				if((int)$calculation_mode === 3){
					//By Once in six month -- Last Method
					$period_qry = 'select osm_first_start,osm_first_end,osm_second_start,osm_second_end from cw_professional_tax where trans_status =1 and location = "'.$professional_tax_location.'" ';
					$period_data    = $this->db->query("CALL sp_a_run ('SELECT','$period_qry')");
					$period_result  = $period_data->result();
					$period_data->next_result();
					$osm_first_st_val  = $period_result[0]->osm_first_start;
					$osm_first_ed_val  = $period_result[0]->osm_first_end;
					$osm_second_st_val = $period_result[0]->osm_second_start;
					$osm_second_ed_val = $period_result[0]->osm_second_end;

					$first_period = array();
					for($osm_first_st_val;$osm_first_st_val<=$osm_first_ed_val;$osm_first_st_val++){
						$first_period[] = $osm_first_st_val;
					}
					$second_period_part_i = array();
					for($osm_second_st_val;$osm_second_st_val<=12;$osm_second_st_val++){
						$second_period_part_i[] = $osm_second_st_val;
					}
					$second_period_part_ii = array();
					for($osm_second_ed_val;$osm_second_ed_val>=1;$osm_second_ed_val--){
						$second_period_part_ii[] = $osm_second_ed_val;
					}
					sort($second_period_part_ii);
					$second_period = array_merge($second_period_part_i,$second_period_part_ii);
					$loop_count    = 5;
					$tot_count     = 0;

					//calculating pending projection count loop
					if(in_array($process_month_val,$first_period)){
						$cur_count = array_search($process_month_val, array_values($first_period));
						$tot_count = (int)$loop_count - (int)$cur_count; 	
					}else
					if(in_array($process_month_val,$second_period)){
						$cur_count = array_search($process_month_val, array_values($second_period));
						$tot_count = (int)$loop_count - (int)$cur_count;
					}

					//Find Projection amount
					//projection amount
					$projection_total 		= $pt_projection * (int)$tot_count; //2 month count
					//calculate sum of actual and projection amount and six month amount value
					$last_month_date 		= date("Y-m-d", strtotime(date("Y-m-d", strtotime($process_month_date)) . " - ".$cur_count." months"));
					$previous_tax_qry 		= 'select ifnull(sum(total_earnings),0) as total_earnings from cw_transactions where trans_status =1 and employee_code = "'.$employee_code.'" and date_format(str_to_date(transactions_month, "%m-%Y") , "%Y-%m") BETWEEN date_format("'.$last_month_date.'", "%Y-%m") and date_format("'.$process_month_date.'", "%Y-%m")';
					$previous_tax_data 	= $this->db->query("CALL sp_a_run ('SELECT','$previous_tax_qry')");
					$previous_tax_result 	= $previous_tax_data->result();
					$previous_tax_data->next_result();
					$previous_earned 		= $previous_tax_result[0]->total_earnings; //find curr to pre earned gross sum value
					$total_earn 			= $previous_earned + $projection_total + $total_earnings; // total sum (earned + project)
					//Find current professional tax pay amount
					$find_tax_qry 			= 'select professional_tax_amount as ptax_amt from cw_professional_tax_tax_range where trans_status=1 and prime_professional_tax_id = "'.$prof_tax_id.'" and earning_range_from <= "'.floor($total_earn).'" and earning_range_to >= "'.floor($total_earn).'"';
					$find_tax_data 		= $this->db->query("CALL sp_a_run ('SELECT','$find_tax_qry')");
					$find_tax_result 		= $find_tax_data->result();
					$find_tax_data->next_result();
					$prof_tax 				= $find_tax_result[0]->ptax_amt;
				}	
				if($prof_tax < 0 || $total_earnings < $prof_tax){
					$prof_tax = 0;
				}			
				return $this->rounding_value($prof_tax,1);
			}
	//CHECK PTAX FOR EVERY EMPLOYEE FOR THIS MONTH AND YEAR -- 11MAY2019 --Updates
	public function get_professional_tax_value($employee_code,$professional_tax_location,$pt_projection,$total_earnings,$process_month){
		$get_emp_sts_result 	= $this->emp_date_arr[$employee_code]['last_working_date'];
		$term_sts 				= $get_emp_sts_result['termination_status'];
		$doj      				= $get_emp_sts_result['date_of_joining'];
		/*if($term_sts === 1){
			$prof_tax = $this->get_fandf_professional_tax_value($employee_code,$professional_tax_location,$pt_projection,$total_earnings,$process_month);
		}else{*/
		$professional_tax_amount_db = $this->get_map_arr['professional_tax_amount']['db_column'];
		$earned_gross_db            = $this->get_map_arr['earned_gross']['db_column'];
		$pt_gross_db                = $this->get_map_arr['pt_gross']['db_column'];
		$ptax_result                = $this->ptax_rslt[$professional_tax_location];
		$prof_tax_id                = $ptax_result['prime_professional_tax_id'];
		$location                   = $ptax_result['location'];
		$calculation_mode           = $ptax_result['calculation_period'];
		$osm_first_st_val           = $ptax_result['osm_first_start'];
		$osm_first_ed_val           = $ptax_result['osm_first_end'];
		$osm_second_st_val          = $ptax_result['osm_second_start'];
		$osm_second_ed_val          = $ptax_result['osm_second_end'];
		$osm_second_end_val         = $ptax_result['osm_second_end'];
		$ptax_deduct_first          = $ptax_result['first_period'];
		$ptax_deduct_second         = $ptax_result['second_period'];			
		$trans_month                = $process_month;
		$process_month              = explode("-",$process_month);
		$process_month_val          = $process_month[0];
		$process_year_val           = $process_month[1];
		$process_month_date         = $process_month[1]."-".$process_month[0]."-01";
		//By Formula every month calculated ptax amount based on earn gross
		$first_period = array();
		for($osm_first_st_val;$osm_first_st_val<=$osm_first_ed_val;$osm_first_st_val++){
			$first_period[] = $osm_first_st_val;
		}
		//array bulid based on months start
		$second_period_part_i = array();
		for($osm_second_st_val;$osm_second_st_val<=12;$osm_second_st_val++){
			$second_period_part_i[] = $osm_second_st_val;
		}
		$second_period_part_ii = array();
		for($osm_second_ed_val;$osm_second_ed_val>=1;$osm_second_ed_val--){
			$second_period_part_ii[] = $osm_second_ed_val;
		}				
		sort($second_period_part_ii);
		$second_period = array_merge($second_period_part_i,$second_period_part_ii);
		//array bulid based on months End
		//Payroll month fall in first period and second priod start
		
		//Payroll month fall in first period find process and proj count
		if(in_array($process_month_val,$first_period)){
			$act_count      = array_search($osm_first_ed_val, array_values($first_period));
			$cut_off_count  = array_search($ptax_deduct_first, array_values($first_period));
			$cur_count      = array_search($process_month_val, array_values($first_period));
			$cut_off_count++;
			$process_count  = (int)$cut_off_count - (int)$cur_count;	
			$proj_count     = (int)$act_count - (int)$cur_count;	
		}else
		if(in_array($process_month_val,$second_period)){
		//Payroll month fall in second period find process and proj count
			$act_count     = array_search($osm_second_end_val, array_values($second_period));
			$cut_off_count = array_search($ptax_deduct_second, array_values($second_period));
			$cur_count     = array_search($process_month_val, array_values($second_period));
			$cut_off_count++;
			$process_count = (int)$cut_off_count - (int)$cur_count;
			$proj_count    = (int)$act_count - (int)$cur_count;
		}			
		if((int)$process_count < 0){
			$process_count=0;
		}
		
		$prof_tax = 0;
		if((int)$calculation_mode === 1){
			//By Formula -- First Method
			$every_month_qry = 'select professional_tax_amount as ptax_amt from cw_professional_tax_tax_range where trans_status=1 and prime_professional_tax_id ="'.$prof_tax_id.'" and earning_range_from <= "'.floor($total_earnings).'" and earning_range_to >= '.floor($total_earnings);
			$every_month_data    = $this->db->query("CALL sp_a_run ('SELECT','$every_month_qry')");
			$every_month_result  = $every_month_data->result();
			$every_month_data->next_result();
			$prof_tax = $every_month_result[0]->ptax_amt;
		}else
		if((int)$calculation_mode === 2){
			//$projection_total  = $pt_projection * (int)$proj_count; //2 month count
			//Find last total earned gross amount
			$projection_total 		= 0; //2 as discussed with jai sir
			//Find last total earned gross amount
			$last_month_date = date("Y-m-d", strtotime(date("Y-m-d", strtotime($process_month_date)) . " - ".$cur_count." months"));
			$previous_tax_qry 		= 'select ifnull(sum('.$pt_gross_db.'),0) as total_earnings from cw_transactions where trans_status =1 and employee_code = "'.$employee_code.'" and date_format(str_to_date(CONCAT("01-",transactions_month), "%d-%m-%Y") , "%Y-%m") BETWEEN date_format("'.$last_month_date.'", "%Y-%m") and date_format("'.$process_month_date.'", "%Y-%m")';
			$previous_tax_data    = $this->db->query("CALL sp_a_run ('SELECT','$previous_tax_qry')");
			$previous_tax_result  = $previous_tax_data->result();
			$previous_tax_data->next_result();
			$previous_earned = $previous_tax_result[0]->total_earnings; //upto this month sum earned gross
			$total_earn      = $previous_earned + $projection_total + $total_earnings;
		
			//Find current professional tax pay amount
			$find_tax_qry = 'select professional_tax_amount as ptax_amt from cw_professional_tax_tax_range where trans_status = 1 and prime_professional_tax_id ="'.$prof_tax_id.'" and earning_range_from <= "'.floor($total_earn).'" and earning_range_to >= '.floor($total_earn);
			$find_tax_data    = $this->db->query("CALL sp_a_run ('SELECT','$find_tax_qry')");
			$find_tax_result  = $find_tax_data->result();
			$find_tax_data->next_result();
			$find_tax_val = $find_tax_result[0]->ptax_amt;
			
			//Find last paying professional tax amount and find final professional tax values and return to ptax column
			$last_tax_qry= 'select ifnull(sum('.$professional_tax_amount_db.'),0) as professional_tax from cw_transactions where trans_status =1 and employee_code = "'.$employee_code.'" and date_format(str_to_date(CONCAT("01-",transactions_month), "%d-%m-%Y") , "%Y-%m") BETWEEN date_format("'.$last_month_date.'", "%Y-%m") and date_format("'.$process_month_date.'", "%Y-%m")';
			
			$last_tax_data    = $this->db->query("CALL sp_a_run ('SELECT','$last_tax_qry')");
			$last_tax_result  = $last_tax_data->result();
			$last_tax_data->next_result();	
			$last_tax_val     = $last_tax_result[0]->professional_tax;
			$prof_tax_amt     = $find_tax_val - $last_tax_val;
			$prof_tax         = $prof_tax_amt/$process_count;
		}else
		if((int)$calculation_mode === 3){
			//By Once in six month -- Last Method
				//Find Projection amount
				//projection amount
				//$projection_total  = $pt_projection * (int)$proj_count; //2 month count
				$projection_total 		= 0; //2 as discussed with jai sir
				//calculate sum of actual and projection amount and six month amount value
				$last_month_date = date("Y-m-d", strtotime(date("Y-m-d", strtotime($process_month_date)) . " - ".$cur_count." months"));

				$previous_tax_qry= 'select ifnull(sum('.$pt_gross_db.'),0) as total_earnings from cw_transactions where trans_status =1 and employee_code = "'.$employee_code.'" and date_format(str_to_date(CONCAT("01-",transactions_month), "%d-%m-%Y") , "%Y-%m") BETWEEN date_format("'.$last_month_date.'", "%Y-%m") and date_format("'.$process_month_date.'", "%Y-%m")';
				$previous_tax_data    = $this->db->query("CALL sp_a_run ('SELECT','$previous_tax_qry')");
				$previous_tax_result  = $previous_tax_data->result();
				$previous_tax_data->next_result();
				$previous_earned = $previous_tax_result[0]->total_earnings; //find curr to pre earned gross sum value
				$total_earn      =$previous_earned + $projection_total + $total_earnings; // total sum (earned + project)
				
				//Find current professional tax pay amount
				$find_tax_qry = 'select professional_tax_amount as ptax_amt from cw_professional_tax_tax_range where trans_status=1 and prime_professional_tax_id ="'.$prof_tax_id.'" and earning_range_from <= "'.floor($total_earn).'" and earning_range_to >= '.floor($total_earn);
				$find_tax_data    = $this->db->query("CALL sp_a_run ('SELECT','$find_tax_qry')");
				$find_tax_result  = $find_tax_data->result();
				$find_tax_data->next_result();
				$prof_tax  = $find_tax_result[0]->ptax_amt;
					}
				//}	
				if($prof_tax < 0 || $total_earnings < $prof_tax){
					$prof_tax = 0;
				}		
			return	round($prof_tax);
			}
		//}
		

}
	 
?>