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