# Bug in exchange variation calculation in certain situations. Again.
authorJoe Hunt <joe.hunt.consulting@gmail.com>
Mon, 22 Feb 2010 12:49:27 +0000 (12:49 +0000)
committerJoe Hunt <joe.hunt.consulting@gmail.com>
Mon, 22 Feb 2010 12:49:27 +0000 (12:49 +0000)
CHANGELOG.txt
gl/includes/db/gl_db_banking.inc

index 0b737b99b7bbf31ef2738bda87afc3597a4b067d..26b8882ab143c0714c962a4d67de13ddb2f31b1d 100644 (file)
@@ -23,6 +23,8 @@ $ -> Affected files
 # Exchange rate doesn't update table immediately when adding new rate 
   and no exchange rates there before.
 $ /gl/manage/exchange_rates.php
+# Bug in exchange variation calculation in certain situations. Again.
+$ /gl/includes/gl_db_banking.inc
  
 21-Feb-2010 Janusz Dobrowolski
 # Fixed check for language session var.
index d002f1d63d68c561e8992cb5e0441a50a7c38984..71ffaa7a0411c5c6142fbb6a3a92432a1ef5285b 100644 (file)
@@ -20,19 +20,19 @@ function add_exchange_variation($trans_type, $trans_no, $date_, $acc_id, $accoun
        $for_amount = $amount = 0;
        // We had to split up the SQL statements to retrieve the correct GL counter-parts
        // 2010-02-19 Joe Hunt with help of Ary Wibowo
-       $sql = "SELECT bt.*, SUM(bt.amount) AS for_amount, ba.account_code              
+       $sql = "SELECT bt.*, bt.amount AS for_amount, ba.account_code           
                FROM ".TB_PREF."bank_trans bt, ".TB_PREF."bank_accounts ba
                WHERE ba.id = bt.bank_act AND bt.bank_act=".db_escape($acc_id)." AND bt.trans_date<='".date2sql($date_)."'
-               GROUP BY bt.type, bt.trans_no";
+               ORDER BY bt.type, bt.trans_no";
        $result = db_query($sql, "Transactions for bank account $acc_id could not be calculated");
        while ($row = db_fetch($result))
        {
                $for_amount += $row['for_amount'];
                
-               $sql2 = "SELECT SUM(gt.amount) AS amount FROM ".TB_PREF."gl_trans gt
-                       WHERE gt.account = ".$row['account_code']." AND gt.type = ".$row['type']."
-                       AND gt.type_no = ".$row['trans_no']." AND gt.tran_date = '".$row['trans_date']."'
-                       AND gt.person_type_id = ".$row['person_type_id'];
+               $sql2 = "SELECT SUM(IF(((gt.amount < 0 AND ".$row['for_amount']." < 0) OR (gt.amount >= 0 AND ".$row['for_amount']." >= 0)), 
+                       gt.amount, 0)) AS amount FROM ".TB_PREF."gl_trans gt
+                       WHERE gt.account = '".$row['account_code']."' AND gt.type = ".$row['type']."
+                       AND gt.type_no = ".$row['trans_no']." AND gt.tran_date = '".$row['trans_date']."'";
                $res = db_query($sql2, "Transactions for GL account ".$row['account_code']." could not be calculated");
                $row2 = db_fetch_row($res);
                $amount += $row2[0];