mirror of
https://github.com/Gnucash/gnucash.git
synced 2026-09-03 20:53:02 -05:00
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:
@@ -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))
|
||||
|
||||
Reference in New Issue
Block a user