summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/account.cc13
-rw-r--r--test/regress/total-1.test28
-rw-r--r--test/regress/total-2.test30
3 files changed, 71 insertions, 0 deletions
diff --git a/src/account.cc b/src/account.cc
index 14e8b0a9..da8b0b8e 100644
--- a/src/account.cc
+++ b/src/account.cc
@@ -136,6 +136,19 @@ void account_t::add_post(post_t * post)
xdata_->self_details.calculated = false;
xdata_->family_details.gathered = false;
xdata_->family_details.calculated = false;
+ if (! xdata_->family_details.total.is_null()) {
+ xdata_->family_details.total = ledger::value_t();
+ }
+ account_t *ancestor = this;
+ while (ancestor->parent) {
+ ancestor = ancestor->parent;
+ if (ancestor->has_xdata()) {
+ xdata_t &xdata = ancestor->xdata();
+ xdata.family_details.gathered = false;
+ xdata.family_details.calculated = false;
+ xdata.family_details.total = ledger::value_t();
+ }
+ }
}
}
diff --git a/test/regress/total-1.test b/test/regress/total-1.test
new file mode 100644
index 00000000..51448dd2
--- /dev/null
+++ b/test/regress/total-1.test
@@ -0,0 +1,28 @@
+; Test that calling total does not affect future calls to that function via a
+; stale cache entry for the totalled account, because of a change to that same
+; account
+
+2017-10-01 * Opening Balance
+ Assets:Current Account $1000.00
+ Equity:Opening Balances
+
+2017-10-02 * Savings
+ Assets:Savings $100.00
+ Assets:Current Account
+
+assert account("Assets:Current Account").total == $900.00
+
+2017-10-03 * Savings
+ Assets:Savings $100.00
+ Assets:Current Account
+
+assert account("Assets:Current Account").total == $800.00
+
+test bal
+ $1000.00 Assets
+ $800.00 Current Account
+ $200.00 Savings
+ $-1000.00 Equity:Opening Balances
+--------------------
+ 0
+end test
diff --git a/test/regress/total-2.test b/test/regress/total-2.test
new file mode 100644
index 00000000..2b15650f
--- /dev/null
+++ b/test/regress/total-2.test
@@ -0,0 +1,30 @@
+; Test that calling total does not affect future calls to that function via a
+; stale cache entry for the totalled account, because of a change to an
+; descendant (Assets:Current:Unallocated) of that account (Assets:Current)
+
+2017-10-01 * Opening entry
+ Assets:Current:Unallocated $2000.00
+ Equity:Opening Balances
+
+2017-10-02 * Initial savings
+ Assets:Current:Savings $1000.00
+ Assets:Current:Unallocated
+
+assert account("Assets:Current").total == $2000.00
+
+2017-10-03 * Balance
+ Assets:Current:Unallocated $1.00
+ Equity:Adjustments
+
+assert account("Assets:Current").total == $2001.00
+
+test bal
+ $2001.00 Assets:Current
+ $1000.00 Savings
+ $1001.00 Unallocated
+ $-2001.00 Equity
+ $-1.00 Adjustments
+ $-2000.00 Opening Balances
+--------------------
+ 0
+end test