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