0xV3NOMx
Linux ip-172-26-7-228 5.4.0-1103-aws #111~18.04.1-Ubuntu SMP Tue May 23 20:04:10 UTC 2023 x86_64



Your IP : 3.137.171.71


Current Path : /var/www/oasis/src_old/
Upload File :
Current File : /var/www/oasis/src_old/FormulaEvaluate.php

<?php
  /*
            Author :  Natesha
	 Date : 2009-9-19
	 Module : Purchase Order

    */  
  
  
  class FormulaEvaluate
	{
    public $login_ctr;
    public $qty;
    public $alt_qty;
    public $rate_for;
    public $rate;
    public $item_basic_value;
    public $lobj_select_item_data;
    public $final_item_value;
       //Start :  Constructor
	           function __construct($aobj_context)
	              {
		              session_start();
		              $this->aobj_context=$aobj_context;
		              $this->aobj_context->mobj_db->SetFetchMode(ADODB_FETCH_ASSOC);
					  require_once($aobj_context->main_src."\custom_src\inventory_master.php");
					  require_once($aobj_context->main_src."\src\getnumword.php");
		              $this->user_id = $_SESSION['user_id'];
		              $this->login_ctr =$_SESSION['login_cnt'];
					   $this->ref_s_ref_data_code=$aobj_context->mobj_data["ref_s_ref_data_code"];
		              					  
		           }
		//End : Constructor 
		
	    function getItemCommercialTableValues()
		{
			if($this->entry_table_name=='grn_item_commercials')
			$value_field="item_value";
			else
			$value_field="item_value";
	 
			$this->alt_qty=empty($this->alt_qty)?0:$this->alt_qty;
			$this->rate=empty($this->rate)?0:$this->rate;
			$drop_table1 = "DROP TABLE IF EXISTS `formula_temp_{$this->login_ctr}`";
	                 $lobj_drop_table1 = $this->aobj_context->mobj_db->Execute($drop_table1);		
			
			$get_system_parameters="select internal_code,parameter_name from {$this->entry_table_name} where parameter_type='System'";
			$lobj_get_system_parameters = $this->aobj_context->mobj_db->GetAll($get_system_parameters);
		 
			foreach($lobj_get_system_parameters as $key=>$v)
			{
			$this->system_params_int_code[$v[parameter_name]]=$v[internal_code];
			}
			 
		
			 
			$create_temp_data="create table formula_temp_{$this->login_ctr} as 
							select {$this->system_params_int_code['Qty']} as internal_code,'Qty' as name,0 as percentage,0 as amount,{$this->qty} as value,'USER' as type, 'USER' as level,'USER' as action,{$this->qty} as 'e_formula',0 as 'formula','Nearest Paisa' as round_off,-1 as seq
							union
							select {$this->system_params_int_code['Alt Qty']} as internal_code,'Alt Qty' as name,0 as percentage,0 as amount,{$this->alt_qty} as value,'USER' as type, 'USER' as level,'USER' as action,{$this->alt_qty} as 'e_formula',0 as 'formula','Nearest Paisa' as round_off,-2 as seq
							union
							select {$this->system_params_int_code['Rate']} as internal_code,'Rate' as name,0 as percentage,0 as amount,{$this->rate} as value,'USER' as type, 'USER' as level,'USER' as action,0 as 'e_formula',{$this->rate} as 'formula','Nearest Paisa' as round_off,-3 as seq
							union
							select {$this->system_params_int_code['Basic Value']} as internal_code,'Basic Value' as name,0 as percentage,0 as amount,if('{$this->rate_for}'='UOM',{$this->qty}*{$this->rate},{$this->alt_qty}*{$this->rate}) as value,'USER' as type, 'USER' as level,'USER' as action,
							if('{$this->rate_for}'='UOM',{$this->qty}*{$this->rate},{$this->alt_qty}*{$this->rate}) as 'e_formula',0 as 'formula','Nearest Paisa' as round_off,-4 as seq
							union
							select {$this->system_params_int_code['Item Value']} as internal_code,'Item Value' as name,0 as percentage,0 as amount,if('{$this->rate_for}'='UOM',{$this->qty}*{$this->rate},{$this->alt_qty}*{$this->rate}) as value,'USER' as type, 'USER' as level,'USER' as action,
							if('{$this->rate_for}'='UOM',{$this->qty}*{$this->rate},{$this->alt_qty}*{$this->rate}) as 'e_formula',0 as 'formula','Nearest Paisa' as round_off,-4 as seq
							
							union
							(select poic.internal_code,name,if(action='None',100,poic.percentage) as percentage,
							if(action='None',0,poic.amount) as amount,
							poic.value,p.type,fsd.level,fsd.action,
							if(amount<>0 && action<>'None',
							if('{$this->rate_for}'='UOM',{$this->qty}*amount,{$this->alt_qty}*amount),
							trim(formula)) as e_formula,
							formula	,round_off,fsd.sequence
							from 
							{$this->entry_table_name} poic
							inner join parameters p on p.internal_code=poic.parameter_int_code
							inner join formula_setup_details fsd on 
							fsd.internal_code=poic.formula_details_int_code
							where fsd.level='Item'
							and poic.login_cnt={$this->login_ctr}
							and 
							(poic.ref_s_ref_data_code={$this->ref_s_ref_data_code}
							or poic.ref_s_ref_data_code=0) order by fsd.sequence)";
					  //
							
					
					$lobj_create_temp_data = $this->aobj_context->mobj_db->Execute($create_temp_data);
					
					$select_data = "select * from formula_temp_{$this->login_ctr} order by seq ";
					$this->lobj_select_data = $this->aobj_context->mobj_db->GetAll($select_data);
			 
					 $drop_table1 = "DROP TABLE IF EXISTS `formula_temp_{$this->login_ctr}`";
	                 $lobj_drop_table1 = $this->aobj_context->mobj_db->Execute($drop_table1);		
					 
					$this->item_basic_value=($this->rate_for=='UOM')?$this->qty*$this->rate:$this->alt_qty*$this->rate;
				 $this->lobj_formula_result=array();
				  $this->final_item_value=$this->item_basic_value;
		}
		
		
		function getItemCommercialGroupTable()
		{
			$get_system_parameters="select* from {$this->group_table_name} where parameter_type='System'";
			$lobj_get_system_parameters = $this->aobj_context->mobj_db->GetAll($get_system_parameters);
			foreach($lobj_get_system_parameters as $key=>$v)
			{
			$this->system_params_int_code[$v[paramater_name]]=$v[internal_code];
			}
			$this->alt_qty=empty($this->alt_qty)?0:$this->alt_qty;
			$this->rate=empty($this->rate)?0:$this->rate;
		 
					//echo $select_data;
					$create_temp_data="create table formula_po_temp_{$this->login_ctr} as 
							select {$this->system_params_int_code['Qty']} as internal_code,'Qty' as name,0 as percentage,0 as amount,{$this->qty} as value,'USER' as type, 'USER' as level,'USER' as action,{$this->qty} as 'e_formula',0 as 'formula','Nearest Paisa' as round_off,-1 as seq
							union
							select {$this->system_params_int_code['Alt Qty']} as internal_code,'Alt Qty' as name,0 as percentage,0 as amount,{$this->alt_qty} as value,'USER' as type, 'USER' as level,'USER' as action,{$this->alt_qty} as 'e_formula',0 as 'formula','Nearest Paisa' as round_off,-2 as seq
							union
							select {$this->system_params_int_code['Rate']} as internal_code,'Rate' as name,0 as percentage,0 as amount,{$this->rate} as value,'USER' as type, 'USER' as level,'USER' as action,0 as 'e_formula',{$this->rate} as 'formula','Nearest Paisa' as round_off,-3 as seq
							union
							select {$this->system_params_int_code['Basic Value']} as internal_code,'Basic Value' as name,0 as percentage,0 as amount,if('{$this->rate_for}'='UOM',{$this->qty}*{$this->rate},{$this->alt_qty}*{$this->rate}) as value,'USER' as type, 'USER' as level,'USER' as action,
							if('{$this->rate_for}'='UOM',{$this->qty}*{$this->rate},{$this->alt_qty}*{$this->rate}) as 'e_formula',0 as 'formula','Nearest Paisa' as round_off,-4 as seq
							union
							select {$this->system_params_int_code['Item Value']} as internal_code,'Item Value' as name,0 as percentage,0 as amount,if('{$this->rate_for}'='UOM',{$this->qty}*{$this->rate},{$this->alt_qty}*{$this->rate}) as value,'USER' as type, 'USER' as level,'USER' as action,
							if('{$this->rate_for}'='UOM',{$this->qty}*{$this->rate},{$this->alt_qty}*{$this->rate}) as 'e_formula',0 as 'formula','Nearest Paisa' as round_off,-4 as seq
							
							union
							(select poic.internal_code,name,if(action='None',100,poic.percentage) as percentage,
							if(action='None',0,poic.amount) as amount,
							poic.value,p.type,fsd.level,fsd.action,
							if(amount<>0 && action<>'None',
							if('{$this->rate_for}'='UOM',{$this->qty}*amount,{$this->alt_qty}*amount),
							trim(formula)) as e_formula,
							formula	,round_off,fsd.sequence
							from 
							{$this->group_table_name} poic
							inner join parameters p on p.internal_code=poic.parameter_int_code
							inner join formula_setup_details fsd on 
							fsd.internal_code=poic.formula_details_int_code
							where fsd.level='Item' and 
							poic.ref_s_ref_data_code={$this->ref_s_ref_data_code} order by fsd.sequence)";
					  
					$lobj_create_temp_data = $this->aobj_context->mobj_db->Execute($create_temp_data);
					
					
					$select_data = "select * from formula_po_temp_{$this->login_ctr} order by seq ";
					$this->lobj_select_data = $this->aobj_context->mobj_db->GetAll($select_data);
				 
					 $drop_table2 = "DROP TABLE IF EXISTS `formula_po_temp_{$this->login_ctr}`";
	                $lobj_drop_table2 = $this->aobj_context->mobj_db->Execute($drop_table2);		
									 
					$this->item_basic_value=($this->rate_for=='UOM')?$this->qty*$this->rate:$this->alt_qty*$this->rate;
				 $this->final_item_value=$this->item_basic_value;
				  	 $this->lobj_formula_result=array();
		}
		
		
		function getPoOrderCommercialTableValues()
		{
		 
		$select_data="		select poic.internal_code,name,poic.order_percentage as percentage,
							poic.order_amount as amount,poic.order_value as value,
							p.type,fsd.level,fsd.action,
							if(fsd.level='Item',order_amount,trim(formula))  as e_formula,
							formula	,round_off
							from 
							{$this->entry_table_name} poic
							inner join parameters p on p.internal_code=poic.order_parameter_int_code
							inner join formula_setup_details fsd on 
							fsd.internal_code=poic.order_formula_details_int_code						 
							and poic.login_cnt={$this->login_ctr} order by fsd.sequence
							";
		 	$this->lobj_select_data = $this->aobj_context->mobj_db->GetAll($select_data);
				 $this->lobj_formula_result=array();
			
			$get_formula_result="SELECT  parameter_name,SUM(VALUE) AS amt
							FROM  purchase_order_item_commercials_entry
							WHERE login_cnt='{$this->login_ctr}'
							 GROUP BY parameter_name";
			$get_formula_result = $this->aobj_context->mobj_db->GetAll($get_formula_result);
			foreach($get_formula_result as $fk=>$fv)
			{
			$this->lobj_formula_result[$fv[parameter_name]]=$fv[amt];
			}
			$this->final_item_value=$this->lobj_formula_result['Item Value']; 
		 
		 
		function CalculateFormulaValues()
		{
				
			
			  
			
			for($i=0;$i<count($this->lobj_select_data);$i++)
			{
					$name=trim($this->lobj_select_data[$i]['name']);
					$round_off_type=$this->lobj_select_data[$i]['round_off'];
					$formula=$this->lobj_select_data[$i]['e_formula'];
					$this->lobj_formula_result[$name]=trim($this->lobj_select_data[$i]['e_formula']);
					$brace_count=substr_count($formula, "{");
					if($brace_count>0) 
					{
						for($k=0;$k<($brace_count);$k++)
						{
							$pos_open_brace=strpos($formula,'{');
							$pos_close_brace=strpos($formula,'}');
							if ($pos_open_brace === false && $pos_close_brace===false) {
							}
							else 
							{
							
							$id=substr($formula, $pos_open_brace+1, (($pos_close_brace)-($pos_open_brace+1)));  
							$calc_val=empty($this->lobj_formula_result[$id])?0:$this->lobj_formula_result[$id];
							$value= str_replace("{".$id."}",$calc_val, $formula);
							$formula=$value;						
							}				
						}
						 
					}
					else {
					$value=$formula;
					}
					$value=(empty($value))?0:$value; 
				 
					 error_reporting(0); 
					if(false===eval("\$value =  ($value);"))
					{	
						$get_sql_value="select ". stripslashes($value)." as result";
						$lobj_get_sql_value = $this->aobj_context->mobj_db->GetRow($get_sql_value);
						$value= empty($lobj_get_sql_value[result])?0:$lobj_get_sql_value[result];
					}
					else
					{
						$value=$value;
					}
					$value=(empty($value))?0:$value; 
					$value=roundOff($value,$round_off_type);
					 
					if($this->lobj_select_data[$i]['level']=='Item' or $this->lobj_select_data[$i]['level']=='Document')
					{
						if($this->lobj_select_data[$i]['percentage']>0 && $this->lobj_select_data[$i]['action']!='None')
						{
							
							$value=$value*($this->lobj_select_data[$i]['percentage']/100);
						}if($this->lobj_select_data[$i]['amount']>0 && $this->lobj_select_data[$i]['action']!='None')
						{
							
							$value=$this->lobj_select_data[$i]['amount'];
						}	
						 else if($this->lobj_select_data[$i]['percentage']==0 && $this->lobj_select_data[$i]['amount']==0 && $this->lobj_select_data[$i]['action']!='None')
						 {
						 $value=0;
						 }
						 //else
						 //$value=$this->lobj_select_data[$i]['amount'];
						 
						 $value=empty($value)?0:$value;
						// echo '--'.$value;
							if($this->lobj_select_data[$i]['action']=='Add')
							{
							$this->final_item_value+=$value;
							}
							else if($this->lobj_select_data[$i]['action']=='Deduct')
							$this->final_item_value-=$value;	
                   	}
					$this->lobj_formula_result[$name]= ($value);
					$this->lobj_select_data[$i]['e_formula']=$value;
			}	
 				$this->final_item_value=round($this->final_item_value,2);  
		 	   // echo "<pre>";print_r($this->lobj_select_data);
			 // print_r($this->lobj_formula_result);	 
		}
	
		function UpdateItemCommericials()
		{
	 
			foreach($this->lobj_select_data as $key=>$val)
			{
				if($val['internal_code']>0)
				{
				if(strtolower($val[name])=='item value')
				$row_val=$this->final_item_value;
				else
				$row_val=$val[e_formula];
				$update_value="update {$this->entry_table_name}
								set value={$row_val}
								where internal_code={$val['internal_code']}";
				$lobj_update_value = $this->aobj_context->mobj_db->Execute($update_value);	
 			// echo $update_value.'<br>';
				}
			} 
		}
		
		function UpdateItemGroupCommericials()
		{
			foreach($this->lobj_select_data as $key=>$val)
			{
				if($val['internal_code']>0)
				{
				$update_value="update {$this->group_table_name}
								set value={$val[e_formula]}
								where internal_code={$val['internal_code']}";
				$lobj_update_value = $this->aobj_context->mobj_db->Execute($update_value);	
 			
				}
			}
		}
		
		function UpdateOrderCommericials()
		{
			foreach($this->lobj_select_data as $key=>$val)
			{
				if($val['internal_code']>0 && $val['level']=='Document')
				{
				$update_value="update {$this->entry_table_name}
								set order_value={$val[e_formula]}
								where internal_code={$val['internal_code']}";
				$lobj_update_value = $this->aobj_context->mobj_db->Execute($update_value);		
				 			
				}
			}
		}
}	
       
       
function  EvaluatePOItemLevelFormulaValues($aobj_context) 
 {
    
	 
 }
}
 
?>