summaryrefslogtreecommitdiff
path: root/src/account.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/account.cc')
-rw-r--r--src/account.cc20
1 files changed, 17 insertions, 3 deletions
diff --git a/src/account.cc b/src/account.cc
index 29c28866..5f9f7f51 100644
--- a/src/account.cc
+++ b/src/account.cc
@@ -610,8 +610,10 @@ void account_t::clear_xdata()
pair.second->clear_xdata();
}
-value_t account_t::amount(const optional<expr_t&>& expr) const
+value_t account_t::amount(const optional<bool> real_only, const optional<expr_t&>& expr) const
{
+ DEBUG("account.amount", "real only: " << real_only);
+
if (xdata_ && xdata_->has_flags(ACCOUNT_EXT_VISITED)) {
posts_list::const_iterator i;
if (xdata_->self_details.last_post)
@@ -622,6 +624,10 @@ value_t account_t::amount(const optional<expr_t&>& expr) const
for (; i != posts.end(); i++) {
if ((*i)->xdata().has_flags(POST_EXT_VISITED)) {
if (! (*i)->xdata().has_flags(POST_EXT_CONSIDERED)) {
+ if (! (*i)->has_flags(POST_VIRTUAL)) {
+ (*i)->add_to_value(xdata_->self_details.real_total, expr);
+ }
+
(*i)->add_to_value(xdata_->self_details.total, expr);
(*i)->xdata().add_flags(POST_EXT_CONSIDERED);
}
@@ -637,6 +643,10 @@ value_t account_t::amount(const optional<expr_t&>& expr) const
for (; i != xdata_->reported_posts.end(); i++) {
if ((*i)->xdata().has_flags(POST_EXT_VISITED)) {
if (! (*i)->xdata().has_flags(POST_EXT_CONSIDERED)) {
+ if (! (*i)->has_flags(POST_VIRTUAL)) {
+ (*i)->add_to_value(xdata_->self_details.real_total, expr);
+ }
+
(*i)->add_to_value(xdata_->self_details.total, expr);
(*i)->xdata().add_flags(POST_EXT_CONSIDERED);
}
@@ -644,7 +654,11 @@ value_t account_t::amount(const optional<expr_t&>& expr) const
xdata_->self_details.last_reported_post = i;
}
- return xdata_->self_details.total;
+ if (real_only == true) {
+ return xdata_->self_details.real_total;
+ } else {
+ return xdata_->self_details.total;
+ }
} else {
return NULL_VALUE;
}
@@ -662,7 +676,7 @@ value_t account_t::total(const optional<expr_t&>& expr) const
add_or_set_value(xdata_->family_details.total, temp);
}
- temp = amount(expr);
+ temp = amount(false, expr);
if (! temp.is_null())
add_or_set_value(xdata_->family_details.total, temp);
}