X-Git-Url: https://delta.frontaccounting.com/gitweb/?a=blobdiff_plain;f=gl%2Fincludes%2Fdb%2Fgl_db_banking.inc;h=cff9e70d0b1bda27aa4d9832a02fd27c5e42b5ac;hb=a2beb43204eecb9cbaf6dc643f9d69d52172ad52;hp=b20644c58c2d79113383e18df7ce2057ff4ee6be;hpb=ddadb47f2620ce6902ad4694ce6512568862ba05;p=fa-stable.git diff --git a/gl/includes/db/gl_db_banking.inc b/gl/includes/db/gl_db_banking.inc index b20644c5..cff9e70d 100644 --- a/gl/includes/db/gl_db_banking.inc +++ b/gl/includes/db/gl_db_banking.inc @@ -16,14 +16,25 @@ function add_exchange_variation($trans_type, $trans_no, $date_, $acc_id, $accoun return; if ($date_ == null) $date_ = Today(); - $rate = get_exchange_rate_from_home_currency($currency, $date_); - $result = db_query("SELECT SUM(amount) FROM ".TB_PREF."bank_trans WHERE - bank_act='$acc_id' AND trans_date<='".date2sql($date_)."'", - "Transactions for account $account could not be calculated"); - $row = db_fetch_row($result); - $foreign_amount = $row[0]; + $for_amount = 0; + + // We have to calculate all the currency accounts belonging to the GL account + // upto $date_ and calculate with the exchange rates. And then compare with the GL account balance. + // 2010-02-23 Joe Hunt with help of Ary Wibowo + $sql = "SELECT SUM(bt.amount) AS for_amount, ba.bank_curr_code + FROM ".TB_PREF."bank_trans bt, ".TB_PREF."bank_accounts ba + WHERE ba.id = bt.bank_act AND ba.account_code = ".db_escape($account)." AND bt.trans_date<='".date2sql($date_)."' + GROUP BY ba.bank_curr_code"; + $result = db_query($sql, "Transactions for bank account $acc_id could not be calculated"); + while ($row = db_fetch($result)) + { + if ($row['for_amount'] == 0) + continue; + $rate = get_exchange_rate_from_home_currency($row['bank_curr_code'], $date_); + $for_amount += round2($row['for_amount'] * $rate, user_price_dec()); + } $amount = get_gl_trans_from_to("", $date_, $account); - $diff = $amount - (round2($foreign_amount * $rate, user_price_dec())); + $diff = $amount - $for_amount; if ($diff != 0) { if ($trans_type == null) @@ -102,7 +113,9 @@ function add_bank_transfer($from_account, $to_account, $date_, $date_, $amount, PT_MISC, "", $currency, "Cannot insert a destination bank transaction"); - add_exchange_variation($trans_type, $trans_no, $date_, $from_account, $from_gl_account, + $currency = get_bank_account_currency($to_account); + + add_exchange_variation($trans_type, $trans_no, $date_, $to_account, $to_gl_account, $currency, PT_MISC, ""); add_comments($trans_type, $trans_no, $date_, $memo_); @@ -127,7 +140,7 @@ function add_bank_transfer($from_account, $to_account, $date_, // returns an array of (inserted trans type, trans no) function add_bank_transaction($trans_type, $from_account, $items, $date_, - $person_type_id, $person_id, $person_detail_id, $ref, $memo_) + $person_type_id, $person_id, $person_detail_id, $ref, $memo_, $use_transaction=true) { global $Refs; @@ -137,7 +150,8 @@ function add_bank_transaction($trans_type, $from_account, $items, $date_, $do_exchange_variance = false; - begin_transaction(); + if ($use_transaction) + begin_transaction(); $currency = get_bank_account_currency($from_account); $bank_gl_account = get_bank_gl_account($from_account); @@ -232,7 +246,8 @@ function add_bank_transaction($trans_type, $from_account, $items, $date_, $Refs->save($trans_type, $trans_no, $ref); add_audit_trail($trans_type, $trans_no, $date_); - commit_transaction(); + if ($use_transaction) + commit_transaction(); return array($trans_type, $trans_no); }