[Account.cpp] GetBalanceAsOfDate gets std::function instead of bool

pull/1917/head
Christopher Lam 2 years ago
parent cc10b9a0b7
commit a54caaab61

@ -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);

Loading…
Cancel
Save