gnucash stable: bugfix xaccTransGetTxnType: avoid returning TXN_TYPE_LINK incorrectly

Christopher Lam clam at code.gnucash.org
Wed Jun 14 09:09:48 EDT 2023


Updated	 via  https://github.com/Gnucash/gnucash/commit/4a60e01f (commit)
	from  https://github.com/Gnucash/gnucash/commit/853791cb (commit)



commit 4a60e01fcd6b3fae6acaa2547b60d5aeb74f0dc4
Author: Christopher Lam <christopher.lck at gmail.com>
Date:   Tue Jun 13 21:00:58 2023 +0800

    bugfix xaccTransGetTxnType: avoid returning TXN_TYPE_LINK incorrectly
    
    A TXN_TYPE_PAYMENT will have non-APAR splits; a TXN_TYPE_LINK will not
    have non-APAR splits. This bug manifests as a regular TXN_TYPE_PAYMENT
    transaction being later voided being incorrectly changed to
    TXN_TYPE_LINK.

diff --git a/libgnucash/engine/Transaction.c b/libgnucash/engine/Transaction.c
index 3ba90bb0d2..46caf5b5d5 100644
--- a/libgnucash/engine/Transaction.c
+++ b/libgnucash/engine/Transaction.c
@@ -2484,7 +2484,7 @@ xaccTransRetDateDue(const Transaction *trans)
 char
 xaccTransGetTxnType (Transaction *trans)
 {
-    gboolean has_nonAPAR_amount = FALSE;
+    gboolean has_nonAPAR_split = FALSE;
 
     if (!trans) return TXN_TYPE_NONE;
 
@@ -2499,9 +2499,8 @@ xaccTransGetTxnType (Transaction *trans)
         if (!acc)
             continue;
 
-        if (!xaccAccountIsAPARType (xaccAccountGetType (acc)) &&
-            !gnc_numeric_zero_p (xaccSplitGetValue (n->data)))
-            has_nonAPAR_amount = TRUE;
+        if (!xaccAccountIsAPARType (xaccAccountGetType (acc)))
+            has_nonAPAR_split = TRUE;
         else if (trans->txn_type == TXN_TYPE_NONE)
         {
             GNCLot *lot = xaccSplitGetLot (n->data);
@@ -2515,7 +2514,7 @@ xaccTransGetTxnType (Transaction *trans)
         }
     }
 
-    if (!has_nonAPAR_amount && (trans->txn_type == TXN_TYPE_PAYMENT))
+    if (!has_nonAPAR_split && (trans->txn_type == TXN_TYPE_PAYMENT))
         trans->txn_type = TXN_TYPE_LINK;
 
     return trans->txn_type;
diff --git a/libgnucash/engine/test/utest-Invoice.c b/libgnucash/engine/test/utest-Invoice.c
index 4d0c561e31..5a0eb2ded3 100644
--- a/libgnucash/engine/test/utest-Invoice.c
+++ b/libgnucash/engine/test/utest-Invoice.c
@@ -369,6 +369,12 @@ test_xaccTransGetTxnTypeInvoice (Fixture *fixture, gconstpointer pData)
     g_assert_cmpint (TXN_TYPE_INVOICE, ==, xaccTransGetTxnType (fixture->trans));
 
     g_assert_cmpint (TXN_TYPE_PAYMENT, ==, xaccTransGetTxnType (fixture->trans2));
+
+    xaccTransVoid (fixture->trans2, "Cancel payment");
+
+    g_assert_cmpint (TXN_TYPE_PAYMENT, ==, xaccTransGetTxnType (fixture->trans2));
+
+    xaccTransUnvoid (fixture->trans2);
 }
 
 



Summary of changes:
 libgnucash/engine/Transaction.c        | 9 ++++-----
 libgnucash/engine/test/utest-Invoice.c | 6 ++++++
 2 files changed, 10 insertions(+), 5 deletions(-)



More information about the gnucash-changes mailing list