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);
|
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 (
|
gnc_numeric xaccAccountGetNoclosingBalanceChangeForPeriod (
|
||||||
Account *acc, time64 date1, time64 date2, gboolean recurse);
|
Account *acc, time64 date1, time64 date2, gboolean recurse);
|
||||||
|
gnc_numeric xaccAccountGetNoclosingBalanceChangeInCurrencyForPeriod (
|
||||||
|
Account *acc, time64 date1, time64 date2, gboolean recurse);
|
||||||
gnc_numeric xaccAccountGetBalanceChangeForPeriod (
|
gnc_numeric xaccAccountGetBalanceChangeForPeriod (
|
||||||
Account *acc, time64 date1, time64 date2, gboolean recurse);
|
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());
|
g_return_val_if_fail(r && acc, gnc_numeric_zero());
|
||||||
t1 = recurrenceGetPeriodTime(r, n, FALSE);
|
t1 = recurrenceGetPeriodTime(r, n, FALSE);
|
||||||
t2 = recurrenceGetPeriodTime(r, n, TRUE);
|
t2 = recurrenceGetPeriodTime(r, n, TRUE);
|
||||||
return xaccAccountGetNoclosingBalanceChangeForPeriod (acc, t1, t2, TRUE);
|
return xaccAccountGetNoclosingBalanceChangeInCurrencyForPeriod (acc, t1, t2, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
Loading…
Reference in New Issue
Block a user