Several fixes to get the state flags to appear right in "print".
This commit is contained in:
parent
6f37d88391
commit
ffba456113
4 changed files with 24 additions and 14 deletions
10
src/entry.cc
10
src/entry.cc
|
|
@ -61,14 +61,14 @@ entry_base_t::~entry_base_t()
|
|||
item_t::state_t entry_base_t::state() const
|
||||
{
|
||||
bool first = true;
|
||||
state_t result = UNCLEARED;
|
||||
state_t result = CLEARED;
|
||||
|
||||
foreach (xact_t * xact, xacts) {
|
||||
if ((result == UNCLEARED && xact->_state != UNCLEARED) ||
|
||||
(result == PENDING && xact->_state == CLEARED))
|
||||
result = xact->_state;
|
||||
if (xact->_state == UNCLEARED)
|
||||
return UNCLEARED;
|
||||
else if (xact->_state == PENDING)
|
||||
result = PENDING;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -58,11 +58,13 @@ report_t::report_t(session_t& _session) : session(_session)
|
|||
"%48|%-.38A %22.108t %!22.132T\n");
|
||||
|
||||
HANDLER(print_format_).on(
|
||||
"%(entry.date)%(entry.cleared ? \" *\" : (entry.uncleared ? \"\" : \" !\"))"
|
||||
"%(entry.date)%(entry.cleared ? \" *\" : (entry.pending ? \" !\" : \"\"))"
|
||||
"%(code ? \" (\" + code + \")\" : \"\") %(payee)%(entry.comment | \"\")\n"
|
||||
" %(cleared ? \"* \" : (uncleared ? \"\" : \"! \"))%-34(account)"
|
||||
" %(entry.uncleared ? (cleared ? \"* \" : (pending ? \"! \" : \"\")) : \"\")"
|
||||
"%-34(account)"
|
||||
" %12(amount)%(comment | \"\")\n%/"
|
||||
" %(cleared ? \"* \" : (uncleared ? \"\" : \"! \"))%-34(account)"
|
||||
" %(entry.uncleared ? (cleared ? \"* \" : (pending ? \"! \" : \"\")) : \"\")"
|
||||
"%-34(account)"
|
||||
" %12(amount)%(comment | \"\")\n%/\n");
|
||||
|
||||
HANDLER(balance_format_).on(
|
||||
|
|
@ -84,7 +86,7 @@ report_t::report_t(session_t& _session) : session(_session)
|
|||
"%(quoted(payee)),"
|
||||
"%(quoted(account)),"
|
||||
"%(quoted(display_amount)),"
|
||||
"%(quoted(cleared ? \"*\" : (uncleared ? \"\" : \"!\"))),"
|
||||
"%(quoted((cleared or entry.cleared) ? \"*\" : ((pending or entry.pending) ? \"!\" : \"\"))),"
|
||||
"%(quoted(code)),"
|
||||
"%(quoted(join(note)))\n");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -752,8 +752,8 @@ xact_t * instance_t::parse_xact(char * line,
|
|||
}
|
||||
|
||||
if (entry &&
|
||||
((entry->_state == item_t::CLEARED && xact->state() != item_t::CLEARED) ||
|
||||
(entry->_state == item_t::PENDING && xact->state() == item_t::UNCLEARED)))
|
||||
((entry->_state == item_t::CLEARED && xact->_state != item_t::CLEARED) ||
|
||||
(entry->_state == item_t::PENDING && xact->_state == item_t::UNCLEARED)))
|
||||
xact->set_state(entry->_state);
|
||||
|
||||
// Parse the account name
|
||||
|
|
@ -1050,15 +1050,14 @@ entry_t * instance_t::parse_entry(char * line,
|
|||
|
||||
// Parse the optional cleared flag: *
|
||||
|
||||
item_t::state_t state = item_t::UNCLEARED;
|
||||
if (next) {
|
||||
switch (*next) {
|
||||
case '*':
|
||||
state = item_t::CLEARED;
|
||||
curr->_state = item_t::CLEARED;
|
||||
next = skip_ws(++next);
|
||||
break;
|
||||
case '!':
|
||||
state = item_t::PENDING;
|
||||
curr->_state = item_t::PENDING;
|
||||
next = skip_ws(++next);
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -66,6 +66,10 @@ item_t::state_t xact_t::state() const
|
|||
}
|
||||
|
||||
namespace {
|
||||
value_t get_this(xact_t& xact) {
|
||||
return value_t(static_cast<scope_t *>(&xact));
|
||||
}
|
||||
|
||||
value_t get_entry(xact_t& xact) {
|
||||
return value_t(static_cast<scope_t *>(xact.entry));
|
||||
}
|
||||
|
|
@ -198,6 +202,11 @@ expr_t::ptr_op_t xact_t::lookup(const string& name)
|
|||
else if (name == "total_cost")
|
||||
return WRAP_FUNCTOR(get_wrapper<&get_total_cost>);
|
||||
break;
|
||||
|
||||
case 'x':
|
||||
if (name == "xact")
|
||||
return WRAP_FUNCTOR(get_wrapper<&get_this>);
|
||||
break;
|
||||
}
|
||||
|
||||
return item_t::lookup(name);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue