File: /www/exchange2/exchange/custom_actions/tpr_import.php
<?php
include_once('../admin/classes/Model/reports/accounts_journal_data.php');
class Tpr_import extends Accounts_journal_data
{
private $group_types=array(
'DETR'=>array(1,2,3),
'CETR'=>array(4,5),
'DETRDiscount'=>array(6)
);
function getHeaders($type)
{
$result=array();
foreach($this->xero_ledgers as $group_name=>$group_index)
{
if (!in_array($group_index,$this->group_types[$type]))
{
continue;
}
foreach($this->ledger_codes[$group_name]['values'] as $code)
{
$result[$group_index][(!empty($code[2]))?$code[2]:$code[3]][]=$this->ledger_codes[$group_name]['details']['title'].' '.$code[1];
}
}
if ($type=='CETR')
{
$result[4]['tar_reserves'][]='Tar Reserves';
}
foreach($result as $group_index=>$values)
{
foreach($result[$group_index] as $value=>$texts)
{
$result[$group_index][$value]=implode("\r\n",array_unique($texts));
}
unset($result[$group_index]['processing_commission']);
if ($group_index==3)
{
unset($result[$group_index]['deposit_exchange']);
}
}
return $result;
}
function getFormulas($type)
{
$this->duplicateBlocks();
$result=array();
foreach($this->xero_ledgers as $group_name=>$group_index)
{
if (!in_array($group_index,$this->group_types[$type]))
{
continue;
}
$with_currency_rate=(preg_match('/[_0-9]{4}$/si',$group_name))?'yes':'no';
foreach($this->functions[$group_name] as $value_name=>$values)
{
foreach($values as $condition=>$formula)
{
$value_name = str_replace('_wo_tc','',$value_name);
if (in_array($group_index,$this->group_types['DETR']))
{
$result[$group_index][$value_name][$with_currency_rate]=str_replace(array(
'@face_value',
'@sell_rate',
'@purchase_discount',
'@processing_fee',
'@edso',
'@adso',
'@trade_commission',
'@traded_rate',
'@settled_reserve_rate',
'@settled_rate',
'@payment_discount',
'@tar_value'
),array(
'N{row_id}',
'P{row_id}',
'O{row_id}',
'AE{row_id}',
'J{row_id}',
'K{row_id}',
'10',
'U{row_id}',
'AB{row_id}',
'X{row_id}',
'AF{row_id}',
'System!$H$6'
),$formula);
}
elseif(in_array($group_index,$this->group_types['CETR']))
{
$result[$group_index][$value_name][$with_currency_rate]=str_replace(array(
'@face_value',
'@payment_discount',
'@trade_commission',
'@traded_rate',
'@settled_rate',
'@tar_value'
),array(
'K{row_id}',
'M{row_id}',
'R{row_id}',
'N{row_id}',
'U{row_id}',
'System!$H$6'
),$formula);
}
}
}
}
return $result;
}
function getConvertedFormulas($lastDETRrow,$lastCETRrow,$commisionRow,$drpCommisionRow,$lastCNRow,$lastSDRow)
{
$lastDETRrow--;
$lastCETRrow--;
$commisionRow--;
$drpCommisionRow--;
$lastCNRow--;
$lastSDRow--;
$input=array(
'traded_DETR'=>array(
'currency'=>array('EUR','EUR'),
'commission'=>'A',
'comission_type'=>'traded',
'values'=>array(
'total_traded'=>'AF',
'quistclose'=>'AG',
'bank_clearing_commission'=>'AH',
'bank_clearing'=>'AI',
'bank_clearing2'=>'AJ',
'purchase_price'=>'AJ',
'originator_reserves'=>'AL',
'deferred_commission'=>'AM',
'tar_reserves'=>''
)
),
'traded_DETR_711'=>array(
'currency'=>array('GBP','USD','EUR'),
'commission'=>'B',
'comission_type'=>'traded',
'values'=>array(
'total_traded'=>'AF',
'quistclose'=>'AG',
'bank_clearing_commission'=>'AH',
'bank_clearing'=>'AI',
'bank_clearing2'=>'AJ',
'purchase_price'=>'AJ',
'originator_reserves'=>'AL',
'deferred_commission'=>'AM'
)
),
'traded_DETR_712'=>array(
'currency'=>array('GBP','GBP'),
'commission'=>'D',
'comission_type'=>'traded',
'values'=>array(
'total_traded'=>'AF',
'quistclose'=>'AG',
'bank_clearing_commission'=>'AH',
'bank_clearing'=>'AI',
'bank_clearing2'=>'AJ',
'purchase_price'=>'AJ',
'originator_reserves'=>'AL',
'deferred_commission'=>'AM'
)
),
'traded_DETR_713'=>array(
'currency'=>array('USD','USD'),
'commission'=>'C',
'comission_type'=>'traded',
'values'=>array(
'total_traded'=>'AF',
'quistclose'=>'AG',
'bank_clearing_commission'=>'AH',
'bank_clearing'=>'AI',
'bank_clearing2'=>'AJ',
'purchase_price'=>'AJ',
'originator_reserves'=>'AL',
'deferred_commission'=>'AM'
)
),
'settled_DETR'=>array(
'currency'=>array('EUR','EUR'),
'commission'=>'A',
'additional_formulas'=>", 'd-ETR'!R2:R".$lastDETRrow.",\"R\"",
'values'=>array(
'bank_clearing'=>'AO',
'quistclose_long'=>'AP',
'quistclose_short'=>'AQ',
'reserves_outstanding'=>'AR',
'ldc_reserves'=>'AS',
'originator_reserves'=>'AT',
'reserves_due'=>'AU',
'deferred_commission'=>'AV',
'exchange_commission'=>'AW'
)
),
'settled_DETR_721'=>array(
'currency'=>array('GBP','USD','EUR'),
'commission'=>'B',
'additional_formulas'=>", 'd-ETR'!R2:R".$lastDETRrow.",\"R\"",
'values'=>array(
'bank_clearing'=>'AO',
'd_etr'=>'AX',
'quistclose_long'=>'AP',
'quistclose_short'=>'AQ',
'reserves_outstanding'=>'AR',
'ldc_reserves'=>'AS',
'originator_reserves'=>'AT',
'reserves_due'=>'AU',
'deferred_commission'=>'AV',
'exchange_commission'=>'AW',
'fx_commission'=>'AY'
)
),
'settled_DETR_722'=>array(
'currency'=>array('GBP','GBP'),
'commission'=>'D',
'additional_formulas'=>", 'd-ETR'!R2:R".$lastDETRrow.",\"R\"",
'values'=>array(
'bank_clearing'=>'AO',
'd_etr'=>'AX',
'quistclose_long'=>'AP',
'quistclose_short'=>'AQ',
'reserves_outstanding'=>'AR',
'ldc_reserves'=>'AS',
'originator_reserves'=>'AT',
'reserves_due'=>'AU',
'deferred_commission'=>'AV',
'exchange_commission'=>'AW',
'fx_commission'=>'AY'
)
),
'settled_DETR_723'=>array(
'currency'=>array('USD','USD'),
'commission'=>'C',
'additional_formulas'=>", 'd-ETR'!R2:R".$lastDETRrow.",\"R\"",
'values'=>array(
'bank_clearing'=>'AO',
'd_etr'=>'AX',
'quistclose_long'=>'AP',
'quistclose_short'=>'AQ',
'reserves_outstanding'=>'AR',
'ldc_reserves'=>'AS',
'originator_reserves'=>'AT',
'reserves_due'=>'AU',
'deferred_commission'=>'AV',
'exchange_commission'=>'AW',
'fx_commission'=>'AY'
)
),
'settled_reserve'=>array(
'currency'=>array('EUR','EUR'),
'commission'=>'A',
'comission_type'=>'drp',
'additional_formulas'=>", 'd-ETR'!T2:T".$lastDETRrow.",\"PAID\"",
'values'=>array(
'bank_ldc'=>'AZ',
'reserves_due'=>'BA'
)
),
'settled_reserve_731'=>array(
'currency'=>array('GBP','USD','EUR'),
'commission'=>'B',
'comission_type'=>'drp',
'additional_formulas'=>", 'd-ETR'!T2:T".$lastDETRrow.",\"PAID\"",
'values'=>array(
'bank_ldc'=>'AZ',
'reserves_due'=>'BA'
)
),
'settled_reserve_732'=>array(
'currency'=>array('GBP','GBP'),
'commission'=>'D',
'comission_type'=>'drp',
'additional_formulas'=>", 'd-ETR'!T2:T".$lastDETRrow.",\"PAID\"",
'values'=>array(
'bank_ldc'=>'AZ',
'reserves_due'=>'BA'
)
),
'settled_reserve_733'=>array(
'currency'=>array('USD','USD'),
'commission'=>'C',
'comission_type'=>'drp',
'additional_formulas'=>", 'd-ETR'!T2:T".$lastDETRrow.",\"PAID\"",
'values'=>array(
'bank_ldc'=>'AZ',
'reserves_due'=>'BA'
)
),
'traded_CETR'=>array(
'currency'=>array('EUR','EUR'),
'values'=>array(
'total_traded'=>'V',
'deposit_exchange'=>'W',
'deferred_commission'=>'X'
)
),
'traded_CETR_741'=>array(
'currency'=>array('GBP','USD','EUR'),
'values'=>array(
'total_traded'=>'V',
'deposit_exchange'=>'W',
'deferred_commission'=>'X'
)
),
'traded_CETR_742'=>array(
'currency'=>array('GBP','GBP'),
'values'=>array(
'total_traded'=>'V',
'deposit_exchange'=>'W',
'deferred_commission'=>'X'
)
),
'traded_CETR_743'=>array(
'currency'=>array('USD','USD'),
'values'=>array(
'total_traded'=>'V',
'deposit_exchange'=>'W',
'deferred_commission'=>'X'
)
),
'settled_CETR'=>array(
'currency'=>array('EUR','EUR'),
'additional_formulas'=>", 'C-ETR'!S2:S".$lastCETRrow.",\"X\"",
'values'=>array(
'cETR'=>'Z',
'deferred_commission'=>'AA'
)
),
'settled_CETR_751'=>array(
'currency'=>array('GBP','USD','EUR'),
'additional_formulas'=>", 'C-ETR'!S2:S".$lastCETRrow.",\"X\"",
'values'=>array(
'cETR'=>'Z',
'deferred_commission'=>'AA',
'deferred_commissions'=>'AB',
'fx_commission'=>'AC',
'fx_costs'=>'AD'
)
),
'settled_CETR_752'=>array(
'currency'=>array('GBP','GBP'),
'additional_formulas'=>", 'C-ETR'!S2:S".$lastCETRrow.",\"X\"",
'values'=>array(
'cETR'=>'Z',
'deferred_commission'=>'AA',
'deferred_commissions'=>'AB',
'fx_commission'=>'AC',
'fx_costs'=>'AD'
)
),
'settled_CETR_753'=>array(
'currency'=>array('USD','USD'),
'additional_formulas'=>", 'C-ETR'!S2:S".$lastCETRrow.",\"X\"",
'values'=>array(
'cETR'=>'Z',
'deferred_commission'=>'Z',
'deferred_commissions'=>'AA',
'fx_commission'=>'AB',
'fx_costs'=>'AC'
)
),
'DETR_discount'=>array(
'values'=>array(
'total_discount'=>''
)
)
);
$result=array();
$processing_commission_templates=array(
'traded'=>"SUMIFS(
'Commissions'!{comission_column}2:{comission_column}".$commisionRow.",
'Commissions'!E2:E".$commisionRow.",\">=\"&H5,
'Commissions'!E2:E".$commisionRow.",\"<=\"&H6
)",
'drp'=>"SUMIFS(
'DRP Commissions'!{comission_column}2:{comission_column}".$drpCommisionRow.",
'DRP Commissions'!E2:E".$drpCommisionRow.",\">=\"&H5,
'DRP Commissions'!E2:E".$drpCommisionRow.",\"<=\"&H6
)",
);
foreach($input as $group_name=>$group_values)
{
foreach($group_values['values'] as $value_name=>$value_column)
{
if(in_array($this->xero_ledgers[$group_name],$this->group_types['DETR']))
{
if ($value_name=='tar_reserves')
{
$function="SUMIFS(
'd-ETR'!AN2:AN".$lastDETRrow.",
'd-ETR'!{date_filter}2:{date_filter}".$lastDETRrow.",\">=\"&H5,
'd-ETR'!{date_filter}2:{date_filter}".$lastDETRrow.",\"<=\"&H6
)+SUMIFS(
'c-ETR'!Y2:Y".$lastCETRrow.",
'c-ETR'!{date_filter}2:{date_filter}".$lastCETRrow.",\">=\"&H5,
'c-ETR'!{date_filter}2:{date_filter}".$lastCETRrow.",\"<=\"&H6,
'c-ETR'!Q2:Q".$lastCETRrow.",\">\"&\" \"
)";
}
else
{
$function="SUMIFS(
'd-ETR'!{value_column}2:{value_column}".$lastDETRrow.",
'd-ETR'!{date_filter}2:{date_filter}".$lastDETRrow.",\">=\"&H5,
'd-ETR'!{date_filter}2:{date_filter}".$lastDETRrow.",\"<=\"&H6,
'd-ETR'!M2:M".$lastDETRrow.",\"{currency_debtor}\",
'd-ETR'!AD2:AD".$lastDETRrow.",\"{currency_account}\"
{additional_formulas}
)";
}
}
elseif(in_array($this->xero_ledgers[$group_name],$this->group_types['CETR']))
{
$function="SUMIFS(
'c-ETR'!{value_column}2:{value_column}".$lastCETRrow.",
'c-ETR'!{date_filter}2:{date_filter}".$lastCETRrow.",\">=\"&H5,
'c-ETR'!{date_filter}2:{date_filter}".$lastCETRrow.",\"<=\"&H6,
'c-ETR'!J2:J".$lastCETRrow.",\"{currency_debtor}\",
'c-ETR'!Q2:Q".$lastCETRrow.",\"{currency_account}\"
{additional_formulas}
)";
}
elseif($group_name=='DETR_discount')
{
$function="SUMIFS(
'CN'!N2:N".$lastCNRow.",
'CN'!F2:F".$lastCNRow.",\">=\"&H5,
'CN'!F2:F".$lastCNRow.",\"<=\"&H6,
'CN'!J2:J".$lastCNRow.",\"Authorized\"
)+
SUMIFS(
'SD'!M2:M".$lastSDRow.",
'SD'!F2:F".$lastSDRow.",\">=\"&H5,
'SD'!F2:F".$lastSDRow.",\"<=\"&H6,
'SD'!J2:J".$lastSDRow.",\"Authorized\"
)";
}
switch($this->xero_ledgers[$group_name])
{
case 1:{
$function=str_replace('{date_filter}','I',$function);
break;
}
case 2:{
$function=str_replace('{date_filter}','Z',$function);
break;
}
case 3:{
$function=str_replace('{date_filter}','AA',$function);
break;
}
case 4:{
$function=str_replace('{date_filter}','I',$function);
break;
}
case 5:{
$function=str_replace('{date_filter}','T',$function);
break;
}
}
$function=str_replace('{additional_formulas}',empty($group_values['additional_formulas'])?'':$group_values['additional_formulas'],$function);
$processing_commission=(empty($group_values['comission_type']))?'':str_replace('{comission_column}',$group_values['commission'],$processing_commission_templates[$group_values['comission_type']]);
if (in_array($group_name,array('traded_DETR_711','settled_DETR_721','settled_reserve_731','traded_CETR_741','settled_CETR_751')))
{
$result[$group_name][$value_name]='='.str_replace(array('{value_column}','{currency_debtor}','{currency_account}'),array($value_column,$group_values['currency'][0],$group_values['currency'][2]),$function).'+'.str_replace(array('{value_column}','{currency_debtor}','{currency_account}'),array($value_column,$group_values['currency'][1],$group_values['currency'][2]),$function);
}
elseif($group_name=='DETR_discount')
{
$result[$group_name][$value_name]='='.$function;
}
else
{
$result[$group_name][$value_name]='='.str_replace(array('{value_column}','{currency_debtor}','{currency_account}'),array($value_column,$group_values['currency'][0],$group_values['currency'][1]),$function);
}
if ($value_name=='bank_clearing_commission')
{
$result[$group_name][$value_name].=('+'.$processing_commission);
}
elseif($value_name=='bank_clearing2' OR ($value_name=='reserves_due' AND in_array($group_name,array('settled_reserve_731','settled_reserve_732','settled_reserve_733'))))
{
$result[$group_name][$value_name].=('-'.$processing_commission);
}
}
if ($this->xero_ledgers[$group_name]==1)
{
$result[$group_name]['processing_commission']=('='.$processing_commission);
}
elseif(in_array($group_name,array('settled_reserve','settled_reserve_731','settled_reserve_732','settled_reserve_733')))
{
$result[$group_name]['deposit_exchange']=('='.$processing_commission);
}
}
return $result;
}
}
?>