File: /www/exchange2/exchange/custom_actions/TT2987.php
<?php
class TT2987
{
public $query;
public $result;
public $new_transactions=array();
private $last_id;
function __construct()
{
include_once('../Bin/constants.php');
include_once('../Bin/init.php');
require_once(ROOT_FOLDER.'Bin/Security.php');
$this->query = new Bin_Query();
include_once(ROOT_FOLDER.'admin/classes/Model/MCEtr.php');
}
function fixOriginatorFee()
{
$this->query->executeQuery("SELECT * FROM site_settings LIMIT 1");
$site_settings = count($this->query->records) > 0 ? $this->query->records[0] : null;
$MCetr = new Model_MCEtr(NULL,NULL,$site_settings);
$this->query->executeQuery('SELECT c.close_id as ids, "invoice" as item_type, m.actual_date as item_date, m.manual_transaction_id,m.trade_reference_id as trade_reference_id, main_trans.transaction_type as transaction_type, NULL as specific_deductible, m.invoice_no as item_reference, m.reserve_on, main_trans.status as transaction_status, m.face_value as face_value,date(m.logapprove_date) as paid_on, m.face_value*(100-m.payment_discount)/100 as paid, ROUND(m.payment_discount,2) as payment_discount,
DATEDIFF(IF(main_trans.transaction_type='.RECONCILE_CREDITOR_ACCOUNT.',payment_trans.transaction_date, CURDATE()), date(m.logapprove_date)) as rdso,
IF(main_trans.transaction_type='.RECONCILE_CREDITOR_ACCOUNT.',date(main_trans.transaction_date),"") as receipt_date, m.expected_date as expected_date, IFNULL(DATEDIFF(DATE(m.expected_date), DATE(m.logapprove_date)),0) AS edso, invoice_closed_attributes.processing_fee AS processing_fee, deb.sell_rate AS creditor_sell_rate, organisation_details.agreed_rate AS originator_sell_rate, c.max_thirty_reserve AS invoice_sell_rate, (SELECT currency_rate FROM currency_rates WHERE currency_date = date(m.logapprove_date) AND currency_id = deb.currency_id LIMIT 1) AS currency_rate, deb.currency_id AS currency_id, m.user_id AS user_id,
"" AS payment_transaction_type, "" AS payment_reconcile_credit, "" AS payment_status, "" AS payment_id, m.c_etr_commission AS c_etr_commission, NULL as originator_fee, m.invoice_id,
m.face_value_charge_applied, m.face_value_charge, deb.face_value_charge as creditor_face_value_charge, organisation_details.creditor_face_value_charge as originator_face_value_charge,
m.ldc_premium, m.agent_commission
FROM invoice_master m
LEFT JOIN organisation_details ON m.user_id = organisation_details.user_id
LEFT JOIN invoice_closed c ON c.invoice_id = m.invoice_id
LEFT JOIN invoice_closed_attributes ON invoice_closed_attributes.invoice_id = m.invoice_id
LEFT JOIN debtors_detail deb ON m.debtor_id = deb.debtor_id
LEFT JOIN manual_transactions as main_trans ON main_trans.manual_transaction_id = m.manual_transaction_id AND main_trans.status=1
LEFT JOIN manual_transactions as payment_trans ON main_trans.reconcile_payment = payment_trans.manual_transaction_id AND payment_trans.status=1
WHERE deb.type = "creditor" AND m.root_invoice_id > 0 AND m.invoice_status = 3 AND main_trans.transaction_type='.RECONCILE_CREDITOR_ACCOUNT);
$invocies=$this->query->records;
foreach($invocies as $invoice)
{
$MCetr->setData($invoice);
$invoice['originator_fee']=NULL;
$this->query->updateQuery('UPDATE invoice_master SET
reserve = '.$MCetr->getOriginatorFee().'
WHERE invoice_id = '.$invoice['invoice_id']. '
LIMIT 1');
}
}
function returnCommissions()
{
$invoices=array(
//RCA, ICP, diff, ICP/RCA amount
array(42278,42277,-9.38401101145064,5977.47),
array(42280,42279,-2.40000000000009,3821),
array(42288,42287,-44.5999999999995,4374.03),
array(42442,42441,-77.7600000000002,7087.47),
array(42461,42460,-157.209999999999,11392.5),
array(42465,42464,-8.4067,968.38),
array(42472,42471,-44.79000000001,2282.88),
array(42476,42475,-36.4700000000003,2282.88),
array(42483,42482,-17.7399999999998,2260.52),
array(42502,42501,-16.0400000000009,11397.5),
array(42504,42503,-0.43,62.41),
array(42506,42505,-4.66999999999996,639.49),
array(42508,42507,-2.33999999999999,105.02),
array(42513,42512,-3.89999999999998,663.56),
array(42515,42514,-2.21999999999997,282.84),
array(42519,42518,-2.09000000000003,575.47),
array(43252,43251,-324.580000000002,28420.02),
array(44467,44466,-5.68000000000029,20245.68),
array(44478,44477,-120.900000000001,21104.33),
array(45033,45032,-30.1100000000006,24259.32),
array(45358,45357,-42.1994974519002,15022.04),
array(46424,46421,-17.5817830725,5193.79),
array(46439,46437,-0.539999999999964,485.77),
array(46451,46449,-3.80230000000006,1116.77),
array(46618,46613,-41.7099999999991,11387.5),
array(46619,46616,-8.78000000000975,4463.21),
array(46623,46621,-17.5,5187.5),
array(46688,46676,-1.50999999999999,1871.94),
array(46689,46678,-6.05000000000018,7493.26),
array(46692,46680,-3.81999999999971,4735.95),
array(46759,46754,-31.3699999999999,6188.69),
array(46808,46806,-133.330000000002,82412.5),
array(46816,46814,-346.669999999998,84679.17),
array(46837,46835,-679.159900000006,63131.37),
array(47123,47122,-526.926627971499,10641),
array(47125,47124,-1093.3622479284,29299.75),
array(47127,47126,-702.8966869041,21615.97),
array(47133,47132,-2883.724386905,104078.8),
array(47137,47136,-1124.7566869041,46685.91),
array(47139,47138,-537.790167296298,22324.92),
array(47144,47143,-1114.3066869041,47846.72),
array(47146,47145,-235.892247928401,15074.61),
array(47148,47147,-114.49224792833,8398.32),
array(47150,47149,-1077.7066279714,44005.86),
array(47156,47155,-673.098867296307,62089.16),
array(47158,47157,-274.5017456186,13158.01),
array(47160,47159,-63.9566869040973,22756.6),
array(47162,47161,-110.232247928401,27460.15),
array(47168,47167,-202.9066869042,84214.14),
array(47170,47169,-148.246686904102,61529.15),
array(47174,47173,-147.083742921899,21860.46),
array(47176,47175,-186.703742921905,33439.94),
array(47178,47177,-6.45016729630152,16074.78),
array(47184,47183,-22.5501672963001,56143.72),
array(47186,47185,-47.0702504618966,58613.63),
array(47193,47192,-146.261716211298,18217.91),
array(47202,47201,-67.9002504620003,169092.86),
array(47206,47205,-62.2037429219017,22355.5),
array(47208,47207,-78.9137429218972,28357.03),
array(47210,47209,-115.496627971499,11517.4),
array(47212,47211,-14.3917162112994,5129.78),
array(47214,47213,-71.02161555052,2451.61),
array(47220,47219,-292.090000000102,26942.33),
array(47224,47223,-595.549999999996,54927.81),
array(47226,47225,-50.7196162112959,42117.14),
array(47228,47227,-53.3197665847001,11071.76),
array(47230,47229,-88.3291917756997,10284.05),
array(47238,47237,-1627.6633,46226.11),
array(47242,47241,-53.1366279715003,12042.12),
array(47244,47243,-1161.6836363072,37629.25),
array(47246,47245,-18.9072562417005,15706.11),
array(47248,47247,-50.7297665846999,42111.27),
array(47250,47249,-465.613300000099,13995.14),
array(47254,47253,-199.159999999996,45089.02),
array(47256,47255,-177.508715550601,12808.1),
array(47258,47257,-1.8356323692999,1539.03),
array(47260,47259,-48.4632155505201,3716.19),
array(47262,47261,-35.8500000000004,11164.7),
array(47264,47263,-10.6933781545399,2436.04),
array(47266,47265,-22.0003562416987,10961.22),
array(47268,47267,-27.8387155505202,2528.69),
array(47270,47269,-28.3403562417006,35292.44),
array(47276,47275,-36.4496168976002,15140.6),
array(47284,47283,-40.9416155505196,5267.82),
array(47286,47285,-394.4933,16184.83),
array(47288,47287,-224.443300000001,9100.02),
array(47292,47291,-1.17689525002902,579.66),
array(47298,47297,-0.760000000000019,161.02),
array(47310,47309,-3.93161555051097,983.27),
array(47312,47311,-0.205011235955965,272.45),
array(47384,47382,-65.0300000000007,11268.11),
array(48233,48230,-400,246107.5),
array(48272,48271,-415.150000000001,48227),
array(48608,48605,-178.34,11506.05),
array(48841,48839,-29.6171999999999,1427.29),
array(48846,48844,-36.5036,1676.89),
array(48865,48863,-25.4037429218597,3773.14),
array(48878,48876,-21.8637429218602,3250.23),
array(48963,48962,-57.9210425019501,8471.07),
array(49443,49442,-4.26000000000022,2592.78),
array(49972,49971,-51.9300000000003,32099.21),
array(50926,50924,-541.529999999999,22516),
array(50938,50936,-97.5299999999997,4394.17),
array(50942,50940,-16.3199999999997,4432.61),
array(50947,50945,-10.96,467.56),
array(50952,50950,-28.2400000000002,4022.34),
array(50956,50954,-267.121934562199,12795.23),
array(50961,50959,-448.411925804998,44133.86),
array(50965,50963,-18.02525885413,1316.91),
array(50969,50967,-37.0917404255397,3387.24),
array(50975,50972,-9.30187132229003,1076.8),
array(50979,50977,-109.93027500616,8077.83),
array(50984,50981,-34.3083177082499,2551.64),
array(50990,50987,-19.3893737563799,3634.99),
array(51001,50999,-112.076368048281,4909.35),
array(51005,51003,-54.8031181015499,3458.91),
array(51012,51009,-53.9692489168301,5603.08),
array(51070,51064,-25.9400000000005,12944.08),
array(51075,51072,-62.5879623854998,4353.76),
array(51385,51383,-9.06823624909975,6700.11),
array(51540,51538,-74.25,142905.34),
array(51727,51725,-0.343887082369974,1191.25),
array(51735,51733,-61.7560634093597,5843.42),
array(52005,52003,-2.75913228692002,1934.65),
array(52018,52017,-39.8199999999997,23126.64),
array(52164,51015,-2.27199177561988,4044.56),
array(52167,52165,-0.844370123290105,601.69),
array(52304,52302,-96.6800000000003,12378.48),
array(52308,52306,-68.5300000000097,2969.54),
array(52312,52310,-52.54,6004.85),
array(52317,52315,-23.3300000000017,20730),
array(52321,52319,-6.75487716354019,5129.37),
array(52349,52348,-105.209999999999,55493.25),
array(52901,52899,-7.34399770026994,7407.21),
array(52916,52907,-40.6200000000026,49363.61));
$transactions=array();
foreach($invoices as $invoice)
{
$diff=abs($invoice[2]);
if (!isset($transactions[$invoice[1]]))
{
$transactions[$invoice[1]]=array(
'value'=>0,
'invoices'=>array(),
'rca'=>$invoice[0],
'transaction'=>$invoice
);
}
$transactions[$invoice[1]]['value']+=$diff;
}
$this->query->executeQuery('SELECT MAX(manual_transactions.manual_transaction_id) as last_id
FROM manual_transactions');
$this->last_id=$this->query->records[0]['last_id'];
foreach($transactions as $icp_id=>$icp_details)
{
$parent_id=$this->findParentTransaction($icp_details['transaction'][1]);
$previous=$this->findParentTransaction($icp_details['transaction'][1],TRUE);
switch($previous['result'])
{
case 'splitted':{
//change amount of icp
$this->query->updateQuery('UPDATE manual_transactions SET
amount = amount - '.abs($icp_details['value']).'
WHERE manual_transaction_id='.$icp_details['transaction'][1]);
//change amount of rca, if exists
$this->query->updateQuery('UPDATE manual_transactions SET
amount = amount - '.abs($icp_details['value']).'
WHERE manual_transaction_id='.$icp_details['transaction'][0]);
//add new 19
$this->query->updateQuery('INSERT INTO `manual_transactions` (`manual_transaction_id`, `transaction_type`, `debtor_id`, `originator_id`, `currency_id`, `amount`, `reference_to`, `specific_allocation`, `notes`, `transaction_file`, `specific_deductible`, `deductible_amount`, `trailing_balance`, `trailing_balance_amt`, `transref_list`, `reconcile_payment`, `reconcile_ref`, `payment_return`, `false_payment`, `amendment_id`, `status`, `reconcile_status`, `reconcile_credit`, `multiple_payments`, `multiple_status`, `interface`, `paid_status`, `transaction_date`, `notification_title`, `transaction_name`, `issue_date`, `created_at`, `created_by`, `modified_at`, `modified_by`, `authorised_at`, `authorised_by`, `reserve_on`, `rerouted`, `spooled`, `orpa_id`, `fees_commissions`)
SELECT NULL, `transaction_type`, `debtor_id`, `originator_id`, `currency_id`, '.abs($icp_details['value']).', "", 0, "", "", 0, 0, 0, 0, "", 0, 0, 0, 0, 0, `status`, 0, 0, 0, 0, `interface`, 0, `transaction_date`, "", "", `issue_date`, NOW(), -1, `modified_at`, `modified_by`, NOW(), -1, 0, `rerouted`, `spooled`, `orpa_id`, `fees_commissions`
FROM manual_transactions
WHERE manual_transaction_id='.$icp_details['transaction'][1]);
//link new 19 to same as linked icp
$new_icp = $this->query->insertid;
$this->query->updateQuery('INSERT INTO `transaction_relations` (`parent_transaction_id`, `transaction_id`) VALUES ('.$previous['trans_id'].', '.$new_icp.');');
//check for currency against parent, if not same convert value of new transaction to currency and date of parent
$this->query->executeQuery('SELECT IF(manual_transactions_rejected.transaction_type='.ORIGINATOR_PAYMENT_ON_ACCOUNT.', manual_transactions_rejected.currency_id, debtors_detail.currency_id) as parent_currency, manual_transactions_rejected.transaction_date, manual_transactions.currency_id, d2.currency_id as d2_currency_id
FROM manual_transactions
LEFT JOIN manual_transactions_rejected ON manual_transactions_rejected.manual_transaction_id='.$parent_id['trans_id'].'
LEFT JOIN debtors_detail ON debtors_detail.debtor_id = manual_transactions_rejected.debtor_id
LEFT JOIN debtors_detail as d2 ON d2.debtor_id = manual_transactions.debtor_id
WHERE manual_transactions.manual_transaction_id = '.$new_icp.' AND d2.currency_id <> IF(manual_transactions_rejected.transaction_type='.ORIGINATOR_PAYMENT_ON_ACCOUNT.', manual_transactions_rejected.currency_id, debtors_detail.currency_id)');
if (count($this->query->records)>0)
{
$details=$this->query->records[0];
if (in_array('1',array($details['parent_currency'],$details['d2_currency_id'])))
{
$currency_id = ($details['parent_currency']=='1')?$details['d2_currency_id']:$details['parent_currency'];
$this->query->executeQuery('SELECT currency_rates.currency_rate
FROM currency_rates
WHERE currency_rates.currency_date=DATE("'.$details['transaction_date'].'") AND currency_rates.currency_id='.$currency_id);
$rate=$this->query->records[0]['currency_rate'];
$change_amount='IF('.$details['d2_currency_id'].'='.$currency_id.',manual_transactions.amount/'.$rate.',manual_transactions.amount*'.$rate.')';
}
else
{
$this->query->executeQuery('SELECT *
FROM currency_rates
WHERE currency_rates.currency_date=DATE("'.$details['transaction_date'].'")');
$rates=array();
foreach($this->query->records as $rate)
{
$rates[$rate['currency_id']]=$rate['currency_rate'];
}
$change_amount='(manual_transactions.amount/'.$rates[$details['d2_currency_id']].') * '.$rates[$details['parent_currency']];
}
$this->query->updateQuery('UPDATE manual_transactions SET
manual_transactions.amount= '.$change_amount.',
manual_transactions.currency_id='.$details['parent_currency'].'
WHERE manual_transactions.manual_transaction_id='.$new_icp);
}
//change type from 19 to 7
$this->query->updateQuery('UPDATE manual_transactions
LEFT JOIN debtors_detail ON debtors_detail.debtor_id = manual_transactions.debtor_id
SET manual_transactions.transaction_type='.ORIGINATOR_PAYMENT_ON_ACCOUNT.', manual_transactions.currency_id = debtors_detail.currency_id, manual_transactions.debtor_id=0
WHERE manual_transactions.manual_transaction_id='.$new_icp);
//update notes for simples
$this->query->updateQuery('UPDATE manual_transactions
LEFT JOIN transaction_relations ON transaction_relations.transaction_id = manual_transactions.manual_transaction_id
SET manual_transactions.notes=CONCAT("Splitted from #",transaction_relations.parent_transaction_id," with amount ",manual_transactions.amount," and authorised at ",manual_transactions.authorised_at)
WHERE transaction_relations.parent_transaction_id = '.$parent_id['trans_id']);
break;
}
case FALSE;
case 'grouped':{
//change amount of rca
$this->query->updateQuery('UPDATE manual_transactions SET
amount = amount - '.abs($icp_details['value']).',
manual_transactions.modified_at = NOW()
WHERE manual_transaction_id='.$icp_details['transaction'][0]);
//split payment for original value and new
$ids=array();
$this->query->updateQuery('INSERT INTO `manual_transactions` (`manual_transaction_id`, `transaction_type`, `debtor_id`, `originator_id`, `currency_id`, `amount`, `reference_to`, `specific_allocation`, `notes`, `transaction_file`, `specific_deductible`, `deductible_amount`, `trailing_balance`, `trailing_balance_amt`, `transref_list`, `reconcile_payment`, `reconcile_ref`, `payment_return`, `false_payment`, `amendment_id`, `status`, `reconcile_status`, `reconcile_credit`, `multiple_payments`, `multiple_status`, `interface`, `paid_status`, `transaction_date`, `notification_title`, `transaction_name`, `issue_date`, `created_at`, `created_by`, `modified_at`, `modified_by`, `authorised_at`, `authorised_by`, `reserve_on`, `rerouted`, `spooled`, `orpa_id`, `fees_commissions`)
SELECT NULL, `transaction_type`, `debtor_id`, `originator_id`, `currency_id`,'.($icp_details['transaction'][3]-abs($icp_details['value'])).', `reference_to`, `specific_allocation`, `notes`, `transaction_file`, `specific_deductible`, `deductible_amount`, `trailing_balance`, `trailing_balance_amt`, `transref_list`, `reconcile_payment`, `reconcile_ref`, `payment_return`, `false_payment`, `amendment_id`, `status`, `reconcile_status`, `reconcile_credit`, `multiple_payments`, `multiple_status`, `interface`, `paid_status`, `transaction_date`, `notification_title`, `transaction_name`, `issue_date`, `created_at`, `created_by`, `modified_at`, `modified_by`, `authorised_at`, `authorised_by`, `reserve_on`, `rerouted`, `spooled`, `orpa_id`, `fees_commissions`
FROM manual_transactions
WHERE manual_transaction_id='.$icp_details['transaction'][1]);
$ids['new_icp']=$this->query->insertid;
$this->query->updateQuery('INSERT INTO `transaction_relations` (`parent_transaction_id`, `transaction_id`) VALUES ('.$icp_details['transaction'][1].', '.$ids['new_icp'].');');
$this->query->updateQuery('INSERT INTO `manual_transactions` (`manual_transaction_id`, `transaction_type`, `debtor_id`, `originator_id`, `currency_id`, `amount`, `reference_to`, `specific_allocation`, `notes`, `transaction_file`, `specific_deductible`, `deductible_amount`, `trailing_balance`, `trailing_balance_amt`, `transref_list`, `reconcile_payment`, `reconcile_ref`, `payment_return`, `false_payment`, `amendment_id`, `status`, `reconcile_status`, `reconcile_credit`, `multiple_payments`, `multiple_status`, `interface`, `paid_status`, `transaction_date`, `notification_title`, `transaction_name`, `issue_date`, `created_at`, `created_by`, `modified_at`, `modified_by`, `authorised_at`, `authorised_by`, `reserve_on`, `rerouted`, `spooled`, `orpa_id`, `fees_commissions`)
SELECT NULL, `transaction_type`, `debtor_id`, `originator_id`, `currency_id`, '.abs($icp_details['value']).', "", 0, "", "", 0, 0, 0, 0, "", 0, 0, 0, 0, 0, `status`, 0, 0, 0, 0, `interface`, 0, `transaction_date`, "", "", `issue_date`, NOW(), -1, `modified_at`, `modified_by`, NOW(), -1, 0, `rerouted`, `spooled`, `orpa_id`, `fees_commissions`
FROM manual_transactions
WHERE manual_transaction_id='.$icp_details['transaction'][1]);
$ids['diff_icp']=$this->query->insertid;
$this->query->updateQuery('INSERT INTO `transaction_relations` (`parent_transaction_id`, `transaction_id`) VALUES ('.$icp_details['transaction'][1].', '.$ids['diff_icp'].');');
//update notes for simples
$this->query->updateQuery('UPDATE manual_transactions
LEFT JOIN transaction_relations ON transaction_relations.transaction_id = manual_transactions.manual_transaction_id
SET manual_transactions.notes=CONCAT("Splitted from #",transaction_relations.parent_transaction_id," with amount ",manual_transactions.amount," and authorised at ",manual_transactions.authorised_at), manual_transactions.modified_at = NOW()
WHERE transaction_relations.parent_transaction_id = '.$icp_details['transaction'][1]);
//remove original icp
$this->query->updateQuery("INSERT INTO `manual_transactions_rejected`(manual_transaction_id,transaction_type,debtor_id,originator_id,currency_id,amount,reference_to,specific_allocation,notes,transaction_file,specific_deductible,deductible_amount,trailing_balance,trailing_balance_amt,transref_list,reconcile_payment,reconcile_ref,payment_return,false_payment,amendment_id,status,reconcile_status,reconcile_credit,multiple_payments,multiple_status,interface,paid_status,transaction_date,notification_title,transaction_name,issue_date,reject_status,created_at,created_by,delete_notes,authorised_at,authorised_by,reserve_on,rerouted,spooled, orpa_id)
(
SELECT manual_transaction_id,transaction_type,debtor_id,originator_id,currency_id,amount,reference_to,specific_allocation,notes,transaction_file,specific_deductible,deductible_amount,trailing_balance,trailing_balance_amt,transref_list,reconcile_payment,reconcile_ref,payment_return,false_payment,amendment_id,status,reconcile_status,reconcile_credit,multiple_payments,multiple_status,interface,paid_status,transaction_date,notification_title,transaction_name,issue_date,0,NOW(),-1,'".json_encode(array_values($ids))."',authorised_at,authorised_by,reserve_on,rerouted,spooled,orpa_id
FROM manual_transactions
WHERE manual_transaction_id = '".$icp_details['transaction'][1]."'
)");
$this->query->updateQuery('DELETE FROM manual_transactions WHERE manual_transaction_id = '.$icp_details['transaction'][1].' LIMIT 1');
//change links between new icp and rca
$this->query->updateQuery('UPDATE manual_transactions SET
reconcile_payment='.$ids['new_icp'].',
manual_transactions.modified_at = NOW()
WHERE manual_transaction_id='.$icp_details['transaction'][0]);
$this->query->updateQuery('UPDATE manual_transactions SET
reconcile_ref = '.$icp_details['transaction'][0].',
manual_transactions.modified_at = NOW()
WHERE manual_transaction_id='.$ids['new_icp']);
//change type from 19 to 7
$this->query->updateQuery('UPDATE manual_transactions
LEFT JOIN debtors_detail ON debtors_detail.debtor_id = manual_transactions.debtor_id
SET manual_transactions.transaction_type='.ORIGINATOR_PAYMENT_ON_ACCOUNT.', manual_transactions.currency_id = debtors_detail.currency_id, manual_transactions.debtor_id=0, manual_transactions.modified_at = NOW()
WHERE manual_transactions.manual_transaction_id='.$ids['diff_icp']);
break;
}
default:{
var_dump($parent_id,$previous,$icp_details['transaction'][1],'--------');
break;
}
}
}
}
function getResult($transactions)
{
$parent=$simple=array();
foreach($transactions as $item)
{
$parent[$item['parent_transaction_id']]=TRUE;
$simple[$item['transaction_id']]=TRUE;
}
$result=NULL;
if (count(array_keys($parent))==1 AND count(array_keys($simple))>1)
{
$result='splitted';
}
elseif(count(array_keys($parent))>1 AND count(array_keys($simple))==1)
{
$result='grouped';
}
elseif(count(array_keys($parent))==1 AND count(array_keys($simple))==1)
{
$result='converted';
}
return $result;
}
function findParentTransaction($transaction_id,$previous=FALSE)
{
$this->query->executeQuery('SELECT *
FROM transaction_relations
WHERE transaction_relations.transaction_id='.$transaction_id);
if (is_null($this->query->records[0]['parent_transaction_id']))
{
return array('trans_id'=>$transaction_id,'result'=>FALSE);
}
if (count($this->query->records)>1 AND $previous)
{
return array('trans_id'=>0,'result'=>$this->getResult($this->query->records));
}
$this->query->executeQuery('SELECT *
FROM transaction_relations
WHERE transaction_relations.parent_transaction_id='.$this->query->records[0]['parent_transaction_id']);
if ($previous)
{
return array('trans_id'=>$this->query->records[0]['parent_transaction_id'],'result'=>$this->getResult($this->query->records));
}
return $this->findParentTransaction($this->query->records[0]['parent_transaction_id']);
}
function groupOCPA()
{
$this->query->updateQuery('SET SESSION group_concat_max_len = 1000000;');
$this->query->executeQuery('SELECT GROUP_CONCAT(manual_transactions.manual_transaction_id) as ids
FROM manual_transactions
WHERE manual_transactions.manual_transaction_id>'.$this->last_id.' AND manual_transactions.transaction_type='.ORIGINATOR_PAYMENT_ON_ACCOUNT.'
GROUP BY manual_transactions.originator_id, manual_transactions.currency_id');
$transactions=$this->query->records;
foreach($transactions as $transaction)
{
$this->query->updateQuery('INSERT INTO `manual_transactions` (`manual_transaction_id`, `transaction_type`, `debtor_id`, `originator_id`, `currency_id`, `amount`, `reference_to`, `specific_allocation`, `notes`, `transaction_file`, `specific_deductible`, `deductible_amount`, `trailing_balance`, `trailing_balance_amt`, `transref_list`, `reconcile_payment`, `reconcile_ref`, `payment_return`, `false_payment`, `amendment_id`, `status`, `reconcile_status`, `reconcile_credit`, `multiple_payments`, `multiple_status`, `interface`, `paid_status`, `transaction_date`, `notification_title`, `transaction_name`, `issue_date`, `created_at`, `created_by`, `modified_at`, `modified_by`, `authorised_at`, `authorised_by`, `reserve_on`, `rerouted`, `spooled`, `orpa_id`, `fees_commissions`)
SELECT NULL, `transaction_type`, `debtor_id`, `originator_id`, `currency_id`, SUM(amount), `reference_to`, `specific_allocation`, CONCAT("Merged from ", GROUP_CONCAT(CONCAT("ID : ",manual_transactions.manual_transaction_id,", Value : ",FORMAT(manual_transactions.amount,2)) SEPARATOR "; ")), `transaction_file`, `specific_deductible`, `deductible_amount`, `trailing_balance`, `trailing_balance_amt`, `transref_list`, `reconcile_payment`, `reconcile_ref`, `payment_return`, `false_payment`, `amendment_id`, `status`, `reconcile_status`, `reconcile_credit`, `multiple_payments`, `multiple_status`, `interface`, `paid_status`, NOW(), `notification_title`, `transaction_name`, `issue_date`, NOW(), -1, `modified_at`, `modified_by`, NOW(), -1, `reserve_on`, `rerouted`, `spooled`, `orpa_id`, `fees_commissions`
FROM manual_transactions
WHERE manual_transactions.manual_transaction_id IN ('.$transaction['ids'].')');
$final_ocpa_id = $this->query->insertid;
$this->query->updateQuery('INSERT INTO transaction_relations (parent_transaction_id,transaction_id)
SELECT `manual_transaction_id`,'.$final_ocpa_id.'
FROM manual_transactions
WHERE manual_transactions.manual_transaction_id IN ('.$transaction['ids'].')');
foreach(explode(',',$transaction['ids']) as $old_id)
{
$this->query->updateQuery("INSERT INTO `manual_transactions_rejected`(manual_transaction_id,transaction_type,debtor_id,originator_id,currency_id,amount,reference_to,specific_allocation,notes,transaction_file,specific_deductible,deductible_amount,trailing_balance,trailing_balance_amt,transref_list,reconcile_payment,reconcile_ref,payment_return,false_payment,amendment_id,status,reconcile_status,reconcile_credit,multiple_payments,multiple_status,interface,paid_status,transaction_date,notification_title,transaction_name,issue_date,reject_status,created_at,created_by,delete_notes,authorised_at,authorised_by,reserve_on,rerouted,spooled, orpa_id)
(
SELECT manual_transaction_id,transaction_type,debtor_id,originator_id,currency_id,amount,reference_to,specific_allocation,notes,transaction_file,specific_deductible,deductible_amount,trailing_balance,trailing_balance_amt,transref_list,reconcile_payment,reconcile_ref,payment_return,false_payment,amendment_id,status,reconcile_status,reconcile_credit,multiple_payments,multiple_status,interface,paid_status,transaction_date,notification_title,transaction_name,issue_date,0,NOW(),-1,'',authorised_at,authorised_by,reserve_on,rerouted,spooled,orpa_id
FROM manual_transactions
WHERE manual_transaction_id = '".$old_id."'
)");
$this->query->updateQuery('DELETE FROM manual_transactions WHERE manual_transaction_id = '.$old_id.' LIMIT 1');
}
}
}
}
$TT2987 = new TT2987();
$TT2987->fixOriginatorFee();
$TT2987->returnCommissions();
$TT2987->groupOCPA();
?>