From a54caaab61a1a88de23a76d9fa1e31d5f3a005e0 Mon Sep 17 00:00:00 2001 From: Christopher Lam Date: Mon, 15 Apr 2024 23:15:42 +0800 Subject: [PATCH] [Account.cpp] GetBalanceAsOfDate gets std::function instead of bool --- libgnucash/engine/Account.cpp | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) 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>; using ProbabilityVec=std::vector>; using FlatKvpEntry=std::pair; @@ -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 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(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);