mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
Merge CrfzdPQM6's 'b_betterCurrencyBudgetReporting' into stable.
This commit is contained in:
commit
bb423e4484
@ -3933,6 +3933,50 @@ xaccAccountGetNoclosingBalanceChangeForPeriod (Account *acc, time64 t1,
|
||||
return gnc_numeric_sub(b2, b1, GNC_DENOM_AUTO, GNC_HOW_DENOM_FIXED);
|
||||
}
|
||||
|
||||
typedef struct
|
||||
{
|
||||
const gnc_commodity *currency;
|
||||
gnc_numeric balanceChange;
|
||||
time64 t1;
|
||||
time64 t2;
|
||||
} CurrencyBalanceChange;
|
||||
|
||||
static void
|
||||
xaccAccountBalanceChangeHelper (Account *acc, gpointer data)
|
||||
{
|
||||
CurrencyBalanceChange *cbdiff = static_cast<CurrencyBalanceChange*>(data);
|
||||
|
||||
gnc_numeric b1, b2;
|
||||
b1 = GetBalanceAsOfDate(acc, cbdiff->t1, TRUE);
|
||||
b2 = GetBalanceAsOfDate(acc, cbdiff->t2, TRUE);
|
||||
gnc_numeric balanceChange = gnc_numeric_sub(b2, b1, GNC_DENOM_AUTO, GNC_HOW_DENOM_FIXED);
|
||||
gnc_numeric balanceChange_conv = xaccAccountConvertBalanceToCurrencyAsOfDate(acc, balanceChange, xaccAccountGetCommodity(acc), cbdiff->currency, cbdiff->t2);
|
||||
cbdiff->balanceChange = gnc_numeric_add (cbdiff->balanceChange, balanceChange_conv,
|
||||
gnc_commodity_get_fraction (cbdiff->currency),
|
||||
GNC_HOW_RND_ROUND_HALF_UP);
|
||||
}
|
||||
|
||||
gnc_numeric
|
||||
xaccAccountGetNoclosingBalanceChangeInCurrencyForPeriod (Account *acc, time64 t1,
|
||||
time64 t2, gboolean recurse)
|
||||
{
|
||||
|
||||
|
||||
gnc_numeric b1, b2;
|
||||
b1 = GetBalanceAsOfDate(acc, t1, TRUE);
|
||||
b2 = GetBalanceAsOfDate(acc, t2, TRUE);
|
||||
gnc_numeric balanceChange = gnc_numeric_sub(b2, b1, GNC_DENOM_AUTO, GNC_HOW_DENOM_FIXED);
|
||||
|
||||
gnc_commodity *report_commodity = xaccAccountGetCommodity(acc);
|
||||
CurrencyBalanceChange cbdiff = { report_commodity, balanceChange, t1, t2 };
|
||||
|
||||
if(recurse)
|
||||
{
|
||||
gnc_account_foreach_descendant (acc, xaccAccountBalanceChangeHelper, &cbdiff);
|
||||
balanceChange = cbdiff.balanceChange;
|
||||
}
|
||||
return balanceChange;
|
||||
}
|
||||
|
||||
/********************************************************************\
|
||||
\********************************************************************/
|
||||
|
@ -618,6 +618,8 @@ typedef enum
|
||||
|
||||
gnc_numeric xaccAccountGetNoclosingBalanceChangeForPeriod (
|
||||
Account *acc, time64 date1, time64 date2, gboolean recurse);
|
||||
gnc_numeric xaccAccountGetNoclosingBalanceChangeInCurrencyForPeriod (
|
||||
Account *acc, time64 date1, time64 date2, gboolean recurse);
|
||||
gnc_numeric xaccAccountGetBalanceChangeForPeriod (
|
||||
Account *acc, time64 date1, time64 date2, gboolean recurse);
|
||||
|
||||
|
@ -426,7 +426,7 @@ recurrenceGetAccountPeriodValue(const Recurrence *r, Account *acc, guint n)
|
||||
g_return_val_if_fail(r && acc, gnc_numeric_zero());
|
||||
t1 = recurrenceGetPeriodTime(r, n, FALSE);
|
||||
t2 = recurrenceGetPeriodTime(r, n, TRUE);
|
||||
return xaccAccountGetNoclosingBalanceChangeForPeriod (acc, t1, t2, TRUE);
|
||||
return xaccAccountGetNoclosingBalanceChangeInCurrencyForPeriod (acc, t1, t2, TRUE);
|
||||
}
|
||||
|
||||
void
|
||||
|
Loading…
Reference in New Issue
Block a user