X-Git-Url: https://delta.frontaccounting.com/gitweb/?a=blobdiff_plain;f=sales%2Fincludes%2Fdb%2Fpayment_db.inc;h=3fd0164bad6caa092a5e77a584366912f45f7fbb;hb=f5bfb4cdc5213e1eca9f5655e7c0442e8862bdb9;hp=9e0e4b16e6aacc34d593fff1edf85c837eba1198;hpb=7ed724a6c5b1d21de978b0688acff2d4afb7d4ea;p=fa-stable.git diff --git a/sales/includes/db/payment_db.inc b/sales/includes/db/payment_db.inc index 9e0e4b16..3fd0164b 100644 --- a/sales/includes/db/payment_db.inc +++ b/sales/includes/db/payment_db.inc @@ -41,17 +41,19 @@ function write_customer_payment($trans_no, $customer_id, $branch_id, $bank_accou } $bank = get_bank_account($bank_account); - if (!$rate) - $rate = get_exchange_rate_from_to(get_customer_currency($customer_id), - $bank['bank_curr_code'], $date_ ); + if (!$bank_amount) // backward compatibility workaround { + if(!$rate) + $rate = get_exchange_rate_from_to(get_customer_currency($customer_id), + $bank['bank_curr_code'], $date_ ); $bank_amount = $amount/$rate; } + // do not use $rate here: global rate stored in exrate table is always used $payment_no = write_customer_trans(ST_CUSTPAYMENT, $trans_no, $customer_id, $branch_id, - $date_, $ref, $amount, $discount, 0, 0, 0, 0, 0, 0, "", 0, $rate); + $date_, $ref, $amount, $discount); $bank_gl_account = get_bank_gl_account($bank_account); @@ -88,7 +90,7 @@ function write_customer_payment($trans_no, $customer_id, $branch_id, $bank_accou if ($charge != 0) { /* Now Debit bank charge account with charges */ - $charge_act = get_company_pref('bank_charge_act'); + $charge_act = get_bank_charge_account($bank_account); $total += add_gl_trans(ST_CUSTPAYMENT, $payment_no, $date_, $charge_act, 0, 0, '', $charge, $bank['bank_curr_code'], PT_CUSTOMER, $customer_id); } @@ -132,5 +134,35 @@ function void_customer_payment($type, $type_no) commit_transaction(); } +/* + Retrieve bank charge amount from GL postings for customer payment. + . Bank charge is not stored explicitly in database as of 2.3.xx + . Due to roundings the retrieved charge can differ from the original amount when bank_curr!=home_curr && bank_curr!=cust_curr +*/ +function get_cust_bank_charge($type, $trans_no) +{ + + // restore charge amount from amounts in bank currency if possible, otherwise calculate from GL posting with exchange rate used for amount posting + $sql = "SELECT IF(act.bank_curr_code=home_curr.value, charge.amount, + IF(act.bank_curr_code=debtor.curr_code, -(trans.amount-ar.ov_amount+ar.ov_discount), + IFNULL(charge.amount*trans.amount/pmt.amount, 0))) + FROM ".TB_PREF."bank_trans trans + LEFT JOIN ".TB_PREF."bank_accounts act ON trans.bank_act=act.id + LEFT JOIN ".TB_PREF."sys_prefs charge_act ON charge_act.name='bank_charge_act' + LEFT JOIN ".TB_PREF."sys_prefs home_curr ON home_curr.name='curr_default' + LEFT JOIN ".TB_PREF."gl_trans charge ON charge.type=trans.type AND charge.type_no=trans.trans_no AND charge.account=charge_act.value + LEFT JOIN ".TB_PREF."gl_trans pmt ON pmt.type=trans.type AND pmt.type_no=trans.trans_no AND pmt.account=act.account_code + LEFT JOIN ".TB_PREF."debtors_master debtor ON trans.person_id=debtor.debtor_no AND trans.person_type_id=".PT_CUSTOMER." + LEFT JOIN ".TB_PREF."debtor_trans ar ON trans.type=ar.type AND trans.trans_no=ar.trans_no + WHERE pmt.amount!=0 AND charge.amount!=0 AND trans.amount!=0 + AND trans.type=".db_escape($type)." AND trans.trans_no=".db_escape($trans_no); + + $result = db_query($sql, "cannot retrieve bank charge"); + + if (!db_num_rows($result)) + return 0; + + $myrow = db_fetch($result); + return $myrow['0']; +} -?> \ No newline at end of file