diff options
author | John Wiegley <johnw@newartisans.com> | 2009-01-14 00:32:02 -0400 |
---|---|---|
committer | John Wiegley <johnw@newartisans.com> | 2009-01-14 00:32:02 -0400 |
commit | 93f884b5f2159bdf6c9b924fc5436a65cd37fc54 (patch) | |
tree | 893d54d1e555ef5f715e8fddbfb9b4491aa5c001 /src | |
parent | dc9782e0de6b308747471aa8ca0e7baa0cc72c28 (diff) | |
download | ledger-93f884b5f2159bdf6c9b924fc5436a65cd37fc54.tar.gz ledger-93f884b5f2159bdf6c9b924fc5436a65cd37fc54.tar.bz2 ledger-93f884b5f2159bdf6c9b924fc5436a65cd37fc54.zip |
The cleared or pending flag of a transaction overrides the flag for the entire
entry only if it is "more" cleared.
Diffstat (limited to 'src')
-rw-r--r-- | src/item.cc | 5 | ||||
-rw-r--r-- | src/textual.cc | 4 |
2 files changed, 7 insertions, 2 deletions
diff --git a/src/item.cc b/src/item.cc index c6f77987..359f05d7 100644 --- a/src/item.cc +++ b/src/item.cc @@ -41,6 +41,9 @@ namespace { value_t get_status(item_t& item) { return long(item.state()); } + value_t get_uncleared(item_t& item) { + return item.state() == item_t::CLEARED; + } value_t get_cleared(item_t& item) { return item.state() == item_t::CLEARED; } @@ -111,7 +114,7 @@ expr_t::ptr_op_t item_t::lookup(const string& name) case 'u': if (name == "uncleared") - return expr_t::op_t::wrap_value(1L); + return WRAP_FUNCTOR(get_wrapper<&get_uncleared>); break; case 'X': diff --git a/src/textual.cc b/src/textual.cc index eef2cc27..61cfd09a 100644 --- a/src/textual.cc +++ b/src/textual.cc @@ -552,7 +552,9 @@ entry_t * parse_entry(std::istream& in, char * line, account_t * master, } if (xact_t * xact = parse_xact(line, master, curr.get())) { - xact->set_state(state); + if ((state == item_t::CLEARED && xact->state() != item_t::CLEARED) || + (state == item_t::PENDING && xact->state() == item_t::UNCLEARED)) + xact->set_state(state); xact->beg_pos = beg_pos; xact->beg_line = beg_line; |