first try for implementing --depth for register

This commit is contained in:
johannes@debussy 2013-11-05 14:56:13 +01:00
parent 973659d9a1
commit 71f1adad64
2 changed files with 39 additions and 25 deletions

View file

@ -449,8 +449,9 @@ void collapse_posts::report_subtotal()
DEBUG("filters.collapse", "earliest date = " << earliest_date); DEBUG("filters.collapse", "earliest date = " << earliest_date);
DEBUG("filters.collapse", "latest date = " << latest_date); DEBUG("filters.collapse", "latest date = " << latest_date);
foreach (post_t * post, component_posts) {
handle_value(/* value= */ subtotal, handle_value(/* value= */ subtotal,
/* account= */ totals_account, /* account= */ find_totals_account(post->account),
/* xact= */ &xact, /* xact= */ &xact,
/* temps= */ temps, /* temps= */ temps,
/* handler= */ handler, /* handler= */ handler,
@ -458,6 +459,8 @@ void collapse_posts::report_subtotal()
/* act_date_p= */ false); /* act_date_p= */ false);
} }
}
component_posts.clear(); component_posts.clear();
last_xact = NULL; last_xact = NULL;
@ -466,6 +469,21 @@ void collapse_posts::report_subtotal()
count = 0; count = 0;
} }
account_t* collapse_posts::find_totals_account(account_t* account)
{
unsigned short depth=2;
if(account->depth==depth)
{
string name=account->fullname();
account_t*& acc = totals_accounts[name];
if(acc==NULL)
acc= &temps.create_account(name);
return acc;
}
//recurse
return find_totals_account(account->parent);
}
void collapse_posts::operator()(post_t& post) void collapse_posts::operator()(post_t& post)
{ {
// If we've reached a new xact, report on the subtotal // If we've reached a new xact, report on the subtotal

View file

@ -429,7 +429,7 @@ class collapse_posts : public item_handler<post_t>
xact_t * last_xact; xact_t * last_xact;
post_t * last_post; post_t * last_post;
temporaries_t temps; temporaries_t temps;
account_t * totals_account; std::map<string,account_t *> totals_accounts;
bool only_collapse_if_zero; bool only_collapse_if_zero;
std::list<post_t *> component_posts; std::list<post_t *> component_posts;
report_t& report; report_t& report;
@ -448,17 +448,13 @@ public:
only_predicate(_only_predicate), count(0), only_predicate(_only_predicate), count(0),
last_xact(NULL), last_post(NULL), last_xact(NULL), last_post(NULL),
only_collapse_if_zero(_only_collapse_if_zero), report(_report) { only_collapse_if_zero(_only_collapse_if_zero), report(_report) {
create_accounts();
TRACE_CTOR(collapse_posts, "post_handler_ptr, ..."); TRACE_CTOR(collapse_posts, "post_handler_ptr, ...");
} }
virtual ~collapse_posts() { virtual ~collapse_posts() {
TRACE_DTOR(collapse_posts); TRACE_DTOR(collapse_posts);
handler.reset(); handler.reset();
} }
account_t* find_totals_account(account_t* account);
void create_accounts() {
totals_account = &temps.create_account(_("<Total>"));
}
virtual void flush() { virtual void flush() {
report_subtotal(); report_subtotal();
@ -480,7 +476,7 @@ public:
last_post = NULL; last_post = NULL;
temps.clear(); temps.clear();
create_accounts(); totals_accounts.clear();
component_posts.clear(); component_posts.clear();
item_handler<post_t>::clear(); item_handler<post_t>::clear();