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.17.181.181
<?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)
{
}
?>
|