gnucash stable: [Account.cpp] GetBalanceAsOfDate gets std::function instead of bool
Christopher Lam
clam at code.gnucash.org
Mon Apr 15 11:34:52 EDT 2024
Updated via https://github.com/Gnucash/gnucash/commit/a54caaab (commit)
from https://github.com/Gnucash/gnucash/commit/cc10b9a0 (commit)
commit a54caaab61a1a88de23a76d9fa1e31d5f3a005e0
Author: Christopher Lam <christopher.lck at gmail.com>
Date: Mon Apr 15 23:15:42 2024 +0800
[Account.cpp] GetBalanceAsOfDate gets std::function instead of bool
diff --git a/libgnucash/engine/Account.cpp b/libgnucash/engine/Account.cpp
index 052bc7e241..b4dbcb4b34 100644
--- a/libgnucash/engine/Account.cpp
+++ b/libgnucash/engine/Account.cpp
@@ -76,8 +76,6 @@ static const std::string KEY_BALANCE_HIGHER_LIMIT_VALUE("higher-value");
static const std::string KEY_BALANCE_LOWER_LIMIT_VALUE("lower-value");
static const std::string KEY_BALANCE_INCLUDE_SUB_ACCTS("inlude-sub-accts");
-static gnc_numeric GetBalanceAsOfDate (Account *acc, time64 date, gboolean ignclosing);
-
using FinalProbabilityVec=std::vector<std::pair<std::string, int32_t>>;
using ProbabilityVec=std::vector<std::pair<std::string, struct AccountProbability>>;
using FlatKvpEntry=std::pair<std::string, KvpValue*>;
@@ -3578,7 +3576,7 @@ xaccAccountGetProjectedMinimumBalance (const Account *acc)
\********************************************************************/
static gnc_numeric
-GetBalanceAsOfDate (Account *acc, time64 date, gboolean ignclosing)
+GetBalanceAsOfDate (Account *acc, time64 date, std::function<gnc_numeric(Split*)> split_to_numeric)
{
/* Ideally this could use xaccAccountForEachSplit, but
* it doesn't exist yet and I'm uncertain of exactly how
@@ -3600,25 +3598,19 @@ GetBalanceAsOfDate (Account *acc, time64 date, gboolean ignclosing)
latest = (Split *)lp->data;
}
- if (!latest)
- return gnc_numeric_zero();
-
- if (ignclosing)
- return xaccSplitGetNoclosingBalance (latest);
- else
- return xaccSplitGetBalance (latest);
+ return latest ? split_to_numeric (latest) : gnc_numeric_zero();
}
gnc_numeric
xaccAccountGetBalanceAsOfDate (Account *acc, time64 date)
{
- return GetBalanceAsOfDate (acc, date, FALSE);
+ return GetBalanceAsOfDate (acc, date, xaccSplitGetBalance);
}
static gnc_numeric
xaccAccountGetNoclosingBalanceAsOfDate (Account *acc, time64 date)
{
- return GetBalanceAsOfDate (acc, date, TRUE);
+ return GetBalanceAsOfDate (acc, date, xaccSplitGetNoclosingBalance);
}
gnc_numeric
@@ -3995,8 +3987,8 @@ 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);
+ b1 = GetBalanceAsOfDate(acc, cbdiff->t1, xaccSplitGetNoclosingBalance);
+ b2 = GetBalanceAsOfDate(acc, cbdiff->t2, xaccSplitGetNoclosingBalance);
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,
@@ -4011,8 +4003,8 @@ xaccAccountGetNoclosingBalanceChangeInCurrencyForPeriod (Account *acc, time64 t1
gnc_numeric b1, b2;
- b1 = GetBalanceAsOfDate(acc, t1, TRUE);
- b2 = GetBalanceAsOfDate(acc, t2, TRUE);
+ b1 = GetBalanceAsOfDate(acc, t1, xaccSplitGetNoclosingBalance);
+ b2 = GetBalanceAsOfDate(acc, t2, xaccSplitGetNoclosingBalance);
gnc_numeric balanceChange = gnc_numeric_sub(b2, b1, GNC_DENOM_AUTO, GNC_HOW_DENOM_FIXED);
gnc_commodity *report_commodity = xaccAccountGetCommodity(acc);
Summary of changes:
libgnucash/engine/Account.cpp | 24 ++++++++----------------
1 file changed, 8 insertions(+), 16 deletions(-)
More information about the gnucash-changes
mailing list