Make xaccAccountSortSplits a private function so the backends can use it.

git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@5781 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
Dave Peticolas 2001-11-07 09:00:37 +00:00
parent 88f759322d
commit f55253d1ae
3 changed files with 42 additions and 35 deletions

View File

@ -604,15 +604,17 @@ split_sort_func(gconstpointer a, gconstpointer b) {
return(xaccSplitDateOrder(sa, sb));
}
static void
xaccAccountSortSplits (Account *acc)
void
xaccAccountSortSplits (Account *acc, gboolean force)
{
if(!acc) return;
if(!acc->sort_dirty) return;
if(acc->editlevel > 0) return;
if(!force && acc->editlevel > 0) return;
acc->splits = g_list_sort(acc->splits, split_sort_func);
acc->sort_dirty = FALSE;
acc->balance_dirty = TRUE;
}
static void
@ -622,7 +624,7 @@ xaccAccountBringUpToDate(Account *acc)
/* if a re-sort happens here, then everything will update, so the
cost basis and balance calls are no-ops */
xaccAccountSortSplits(acc);
xaccAccountSortSplits(acc, FALSE);
xaccAccountRecomputeBalance(acc);
}
@ -1597,29 +1599,20 @@ xaccAccountGetBalanceAsOfDate (Account *acc, time_t date)
gboolean found = FALSE;
gnc_numeric balance;
balance = xaccAccountGetBalance( acc );
if (!acc) return gnc_numeric_zero ();
xaccAccountSortSplits( acc ); /* just in case, normally a nop */
xaccAccountSortSplits (acc, TRUE); /* just in case, normally a noop */
xaccAccountRecomputeBalance (acc); /* just in case, normally a noop */
balance = xaccAccountGetBalance( acc );
/* Since transaction post times are stored as a Timespec,
* convert date into a Timespec as well rather than converting
* each transaction's Timespec into a time_t.
*/
ts.tv_sec = date;
ts.tv_nsec = 0;
/* Do checks from xaccAccountRecomputeBalance. balance_dirty isn't
* checked because it shouldn't be necessary.
*/
if( NULL == acc ||
acc->editlevel > 0 ||
acc->do_free )
{
return ( balance );
}
lp = xaccAccountGetSplitList( acc );
while( lp && !found )
{

View File

@ -167,6 +167,11 @@ Account * xaccAccountLookupEntityTable (const GUID *guid,
*/
void xaccAccountRemoveSplit (Account *, Split *);
/* xaccAccountSortSplits() will resort the account's splits
* if the sort is dirty. If 'force' is true, the account is
* sorted even if the editlevel is not zero. */
void xaccAccountSortSplits (Account *acc, gboolean force);
/* the following recompute the partial balances (stored with the
* transaction) and the total balance, for this account */
void xaccAccountRecomputeBalance (Account *);

View File

@ -1005,7 +1005,16 @@ xaccTransEqual(const Transaction *ta, const Transaction *tb,
{
if (!xaccSplitEqual(sa->data, sb->data, check_guids, FALSE))
{
PWARN ("splits differ");
char *str_a, *str_b;
str_a = guid_to_string (xaccSplitGetGUID (sa->data));
str_b = guid_to_string (xaccSplitGetGUID (sb->data));
PWARN ("splits %s and %s differ", str_a, str_b);
g_free (str_a);
g_free (str_b);
return(FALSE);
}
@ -2558,10 +2567,20 @@ xaccSplitSetReconcile (Split *split, char recn)
return;
}
split->reconciled = recn;
if (split->reconciled != recn)
{
Account *account = xaccSplitGetAccount (split);
xaccAccountRecomputeBalance (xaccSplitGetAccount(split));
mark_split (split);
split->reconciled = recn;
if (account)
{
account->balance_dirty = TRUE;
xaccAccountRecomputeBalance (account);
}
mark_split (split);
}
}
void
@ -2826,13 +2845,11 @@ xaccTransVoid(Transaction *transaction,
void_reason_str,
val);
now.tv_sec = time(NULL);
now.tv_nsec = 0;
gnc_timespec_to_iso8601_buff(now, iso8601_str);
val = kvp_value_new_string (iso8601_str);
kvp_frame_set_slot_nc(frame,
@ -2856,18 +2873,13 @@ xaccTransVoid(Transaction *transaction,
amt = xaccSplitGetValue(split);
val = kvp_value_new_gnc_numeric(amt);
kvp_frame_set_slot_nc(frame, void_former_val_str, val);
xaccSplitSetAmount(split, zero);
xaccSplitSetValue(split, zero);
xaccSplitSetReconcile(split, VREC);
}
xaccTransCommitEdit(transaction);
return;
}
gboolean
@ -2875,13 +2887,11 @@ xaccTransGetVoidStatus(Transaction *trans)
{
kvp_frame *frame;
g_return_val_if_fail(trans, FALSE);
frame = xaccTransGetSlots(trans);
return (gboolean) kvp_frame_get_slot(frame, void_reason_str);
return (kvp_frame_get_slot(frame, void_reason_str) != NULL);
}
char *
@ -2923,7 +2933,6 @@ xaccSplitVoidFormerAmount(Split *split)
}
return amt;
}
gnc_numeric