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.

git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@22645 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
Mike Alexander
2012-12-13 05:13:42 +00:00
parent 366411853d
commit 6ed3bfa6a3
+27 -1
View File
@@ -949,7 +949,33 @@ xaccTransIsBalanced (const Transaction *trans)
{
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))