r22645 - gnucash/trunk/src/engine - Better detection of unbalanced transactions with trading accounts.
Mike Alexander
mta at code.gnucash.org
Thu Dec 13 00:13:42 EST 2012
Author: mta
Date: 2012-12-13 00:13:42 -0500 (Thu, 13 Dec 2012)
New Revision: 22645
Trac: http://svn.gnucash.org/trac/changeset/22645
Modified:
gnucash/trunk/src/engine/Transaction.c
Log:
Better detection of unbalanced transactions with trading accounts.
A transaction's value should be balanced independently in trading and
non-trading splits to be considered balanced. Incorrect adjustment
of exchange rates on existing splits can cause this to be an issue.
Modified: gnucash/trunk/src/engine/Transaction.c
===================================================================
--- gnucash/trunk/src/engine/Transaction.c 2012-12-13 05:13:34 UTC (rev 22644)
+++ gnucash/trunk/src/engine/Transaction.c 2012-12-13 05:13:42 UTC (rev 22645)
@@ -949,7 +949,33 @@
{
MonetaryList *imbal_list;
gboolean result;
- if (! gnc_numeric_zero_p(xaccTransGetImbalanceValue(trans)))
+ gnc_numeric imbal = gnc_numeric_zero();
+ gnc_numeric imbal_trading = gnc_numeric_zero();
+
+ if (xaccTransUseTradingAccounts(trans))
+ {
+ /* Transaction is imbalanced if the value is imbalanced in either
+ trading or non-trading splits. One can't be used to balance
+ the other. */
+ FOR_EACH_SPLIT(trans,
+ {
+ if (xaccAccountGetType(xaccSplitGetAccount(s)) != ACCT_TYPE_TRADING)
+ {
+ imbal = gnc_numeric_add(imbal, xaccSplitGetValue(s),
+ GNC_DENOM_AUTO, GNC_HOW_DENOM_EXACT);
+ }
+ else
+ {
+ imbal_trading = gnc_numeric_add(imbal_trading, xaccSplitGetValue(s),
+ GNC_DENOM_AUTO, GNC_HOW_DENOM_EXACT);
+ }
+ }
+ );
+ }
+ else
+ imbal = xaccTransGetImbalanceValue(trans);
+
+ if (! gnc_numeric_zero_p(imbal) || ! gnc_numeric_zero_p(imbal_trading))
return FALSE;
if (!xaccTransUseTradingAccounts (trans))
More information about the gnucash-changes
mailing list