gnucash stable: Multiple changes pushed
John Ralls
jralls at code.gnucash.org
Sat Apr 29 15:05:28 EDT 2023
Updated via https://github.com/Gnucash/gnucash/commit/bb423e44 (commit)
via https://github.com/Gnucash/gnucash/commit/04b03171 (commit)
from https://github.com/Gnucash/gnucash/commit/df878c6a (commit)
commit bb423e4484aef679c8bfb91a1686504d29cd25db
Merge: df878c6a3d 04b0317119
Author: John Ralls <jralls at ceridwen.us>
Date: Sat Apr 29 12:04:45 2023 -0700
Merge CrfzdPQM6's 'b_betterCurrencyBudgetReporting' into stable.
commit 04b0317119d9c2d26506f099e52d9cacb9652adf
Author: Daniel Johnson <daniel.johnson at cern.ch>
Date: Mon Jan 9 08:39:12 2023 +0100
Demonstrate fx handling in budget report
diff --git a/libgnucash/engine/Account.cpp b/libgnucash/engine/Account.cpp
index 7c14e0db2d..b0bd8a8937 100644
--- a/libgnucash/engine/Account.cpp
+++ b/libgnucash/engine/Account.cpp
@@ -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;
+}
/********************************************************************\
\********************************************************************/
diff --git a/libgnucash/engine/Account.h b/libgnucash/engine/Account.h
index 499ffbe0e8..342c236c1f 100644
--- a/libgnucash/engine/Account.h
+++ b/libgnucash/engine/Account.h
@@ -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);
diff --git a/libgnucash/engine/Recurrence.c b/libgnucash/engine/Recurrence.c
index b450e93689..5054b0ba1e 100644
--- a/libgnucash/engine/Recurrence.c
+++ b/libgnucash/engine/Recurrence.c
@@ -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
Summary of changes:
libgnucash/engine/Account.cpp | 44 ++++++++++++++++++++++++++++++++++++++++++
libgnucash/engine/Account.h | 2 ++
libgnucash/engine/Recurrence.c | 2 +-
3 files changed, 47 insertions(+), 1 deletion(-)
More information about the gnucash-changes
mailing list