Restored --cleared, --pending, --uncleared, -X and -Y.
This commit is contained in:
parent
660c40a6d3
commit
41c33a2442
5 changed files with 112 additions and 22 deletions
39
src/entry.cc
39
src/entry.cc
|
|
@ -356,7 +356,9 @@ bool entry_t::get_state(xact_t::state_t * state) const
|
|||
bool hetero = false;
|
||||
|
||||
foreach (xact_t * xact, xacts) {
|
||||
if (first) {
|
||||
if (first ||
|
||||
xact->state == xact_t::CLEARED ||
|
||||
(xact->state == xact_t::PENDING && *state == xact_t::UNCLEARED)) {
|
||||
*state = xact->state;
|
||||
first = false;
|
||||
}
|
||||
|
|
@ -380,6 +382,22 @@ namespace {
|
|||
return entry.date();
|
||||
}
|
||||
|
||||
value_t get_status(entry_t& entry) {
|
||||
xact_t::state_t status;
|
||||
entry.get_state(&status);
|
||||
return long(status);
|
||||
}
|
||||
value_t get_cleared(entry_t& entry) {
|
||||
xact_t::state_t status;
|
||||
entry.get_state(&status);
|
||||
return status == xact_t::CLEARED;
|
||||
}
|
||||
value_t get_pending(entry_t& entry) {
|
||||
xact_t::state_t status;
|
||||
entry.get_state(&status);
|
||||
return status == xact_t::PENDING;
|
||||
}
|
||||
|
||||
value_t get_code(entry_t& entry) {
|
||||
if (entry.code)
|
||||
return string_value(*entry.code);
|
||||
|
|
@ -403,6 +421,8 @@ expr_t::ptr_op_t entry_t::lookup(const string& name)
|
|||
case 'c':
|
||||
if (name == "code")
|
||||
return WRAP_FUNCTOR(get_wrapper<&get_code>);
|
||||
else if (name == "cleared")
|
||||
return WRAP_FUNCTOR(get_wrapper<&get_cleared>);
|
||||
break;
|
||||
|
||||
case 'd':
|
||||
|
|
@ -424,6 +444,23 @@ expr_t::ptr_op_t entry_t::lookup(const string& name)
|
|||
case 'p':
|
||||
if (name[1] == '\0' || name == "payee")
|
||||
return WRAP_FUNCTOR(get_wrapper<&get_payee>);
|
||||
else if (name == "pending")
|
||||
return WRAP_FUNCTOR(get_wrapper<&get_pending>);
|
||||
break;
|
||||
|
||||
case 'u':
|
||||
if (name == "uncleared")
|
||||
return expr_t::op_t::wrap_value(1L);
|
||||
break;
|
||||
|
||||
case 'X':
|
||||
if (name[1] == '\0')
|
||||
return WRAP_FUNCTOR(get_wrapper<&get_cleared>);
|
||||
break;
|
||||
|
||||
case 'Y':
|
||||
if (name[1] == '\0')
|
||||
return WRAP_FUNCTOR(get_wrapper<&get_pending>);
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -320,8 +320,12 @@ expr_t::ptr_op_t report_t::lookup(const string& name)
|
|||
break;
|
||||
|
||||
case 'c':
|
||||
if (std::strcmp(p, "collapse") == 0)
|
||||
if (! *(p + 1) || std::strcmp(p, "current") == 0)
|
||||
return MAKE_FUNCTOR(report_t::option_current);
|
||||
else if (std::strcmp(p, "collapse") == 0)
|
||||
return MAKE_FUNCTOR(report_t::option_collapse);
|
||||
else if (std::strcmp(p, "cleared") == 0)
|
||||
return MAKE_FUNCTOR(report_t::option_cleared);
|
||||
else if (std::strcmp(p, "comm-as-payee") == 0)
|
||||
return MAKE_FUNCTOR(report_t::option_comm_as_payee);
|
||||
else if (std::strcmp(p, "code-as-payee") == 0)
|
||||
|
|
@ -361,7 +365,7 @@ expr_t::ptr_op_t report_t::lookup(const string& name)
|
|||
break;
|
||||
|
||||
case 'j':
|
||||
if (! (*p + 1))
|
||||
if (! *(p + 1))
|
||||
return MAKE_FUNCTOR(report_t::option_amount_data);
|
||||
break;
|
||||
|
||||
|
|
@ -423,6 +427,11 @@ expr_t::ptr_op_t report_t::lookup(const string& name)
|
|||
return MAKE_FUNCTOR(report_t::option_tail_);
|
||||
break;
|
||||
|
||||
case 'u':
|
||||
if (std::strcmp(p, "uncleared") == 0)
|
||||
return MAKE_FUNCTOR(report_t::option_uncleared);
|
||||
break;
|
||||
|
||||
case 'w':
|
||||
if (std::strcmp(p, "weekly") == 0)
|
||||
return MAKE_FUNCTOR(report_t::option_weekly);
|
||||
|
|
@ -440,8 +449,13 @@ expr_t::ptr_op_t report_t::lookup(const string& name)
|
|||
return MAKE_FUNCTOR(report_t::option_date_format_);
|
||||
break;
|
||||
|
||||
case 'C':
|
||||
if (! *(p + 1))
|
||||
return MAKE_FUNCTOR(report_t::option_cleared);
|
||||
break;
|
||||
|
||||
case 'E':
|
||||
if (std::strcmp(p, "E") == 0)
|
||||
if (! *(p + 1))
|
||||
return MAKE_FUNCTOR(report_t::option_empty);
|
||||
break;
|
||||
|
||||
|
|
@ -451,17 +465,17 @@ expr_t::ptr_op_t report_t::lookup(const string& name)
|
|||
break;
|
||||
|
||||
case 'J':
|
||||
if (! (*p + 1))
|
||||
if (! *(p + 1))
|
||||
return MAKE_FUNCTOR(report_t::option_total_data);
|
||||
break;
|
||||
|
||||
case 'M':
|
||||
if (std::strcmp(p, "M") == 0)
|
||||
if (! *(p + 1))
|
||||
return MAKE_FUNCTOR(report_t::option_monthly);
|
||||
break;
|
||||
|
||||
case 'P':
|
||||
if (std::strcmp(p, "P") == 0)
|
||||
if (! *(p + 1))
|
||||
return MAKE_FUNCTOR(report_t::option_by_payee);
|
||||
break;
|
||||
|
||||
|
|
@ -475,13 +489,18 @@ expr_t::ptr_op_t report_t::lookup(const string& name)
|
|||
return MAKE_FUNCTOR(report_t::option_total_);
|
||||
break;
|
||||
|
||||
case 'U':
|
||||
if (! *(p + 1))
|
||||
return MAKE_FUNCTOR(report_t::option_uncleared);
|
||||
break;
|
||||
|
||||
case 'W':
|
||||
if (std::strcmp(p, "W") == 0)
|
||||
if (! *(p + 1))
|
||||
return MAKE_FUNCTOR(report_t::option_weekly);
|
||||
break;
|
||||
|
||||
case 'Y':
|
||||
if (std::strcmp(p, "Y") == 0)
|
||||
if (! *(p + 1))
|
||||
return MAKE_FUNCTOR(report_t::option_yearly);
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
23
src/report.h
23
src/report.h
|
|
@ -294,25 +294,28 @@ public:
|
|||
return true;
|
||||
}
|
||||
|
||||
#if 0
|
||||
value_t option_current(call_scope_t& args) { // c
|
||||
if (! report->predicate.empty())
|
||||
report->predicate += "&";
|
||||
report->predicate += "d<=m";
|
||||
if (! predicate.empty())
|
||||
predicate += "&";
|
||||
predicate += "date<=now";
|
||||
return true;
|
||||
}
|
||||
|
||||
value_t option_cleared(call_scope_t& args) { // C
|
||||
if (! report->predicate.empty())
|
||||
report->predicate += "&";
|
||||
report->predicate += "X";
|
||||
if (! predicate.empty())
|
||||
predicate += "&";
|
||||
predicate += "cleared";
|
||||
return true;
|
||||
}
|
||||
|
||||
value_t option_uncleared(call_scope_t& args) { // U
|
||||
if (! report->predicate.empty())
|
||||
report->predicate += "&";
|
||||
report->predicate += "!X";
|
||||
if (! predicate.empty())
|
||||
predicate += "&";
|
||||
predicate += "!cleared";
|
||||
return true;
|
||||
}
|
||||
|
||||
#if 0
|
||||
value_t option_real(call_scope_t& args) { // R
|
||||
if (! report->predicate.empty())
|
||||
report->predicate += "&";
|
||||
|
|
|
|||
35
src/xact.cc
35
src/xact.cc
|
|
@ -85,6 +85,22 @@ namespace {
|
|||
return string_value(empty_string);
|
||||
}
|
||||
|
||||
value_t get_status(xact_t& xact) {
|
||||
xact_t::state_t status;
|
||||
xact.entry->get_state(&status);
|
||||
return long(status);
|
||||
}
|
||||
value_t get_cleared(xact_t& xact) {
|
||||
xact_t::state_t status;
|
||||
xact.entry->get_state(&status);
|
||||
return status == xact_t::CLEARED;
|
||||
}
|
||||
value_t get_pending(xact_t& xact) {
|
||||
xact_t::state_t status;
|
||||
xact.entry->get_state(&status);
|
||||
return status == xact_t::PENDING;
|
||||
}
|
||||
|
||||
value_t get_payee(xact_t& xact) {
|
||||
return string_value(xact.entry->payee);
|
||||
}
|
||||
|
|
@ -173,7 +189,7 @@ expr_t::ptr_op_t xact_t::lookup(const string& name)
|
|||
|
||||
case 'c':
|
||||
if (name == "cleared")
|
||||
return expr_t::op_t::wrap_value(0L);
|
||||
return WRAP_FUNCTOR(get_wrapper<&get_cleared>);
|
||||
else if (name == "code")
|
||||
return WRAP_FUNCTOR(get_wrapper<&get_code>);
|
||||
break;
|
||||
|
|
@ -198,11 +214,16 @@ expr_t::ptr_op_t xact_t::lookup(const string& name)
|
|||
|
||||
case 'p':
|
||||
if (name == "pending")
|
||||
return expr_t::op_t::wrap_value(2L);
|
||||
return WRAP_FUNCTOR(get_wrapper<&get_pending>);
|
||||
else if (name == "payee")
|
||||
return WRAP_FUNCTOR(get_wrapper<&get_payee>);
|
||||
break;
|
||||
|
||||
case 's':
|
||||
if (name == "status")
|
||||
return WRAP_FUNCTOR(get_wrapper<&get_status>);
|
||||
break;
|
||||
|
||||
case 't':
|
||||
if (name[1] == '\0' || name == "total")
|
||||
return WRAP_FUNCTOR(get_wrapper<&get_total>);
|
||||
|
|
@ -212,6 +233,16 @@ expr_t::ptr_op_t xact_t::lookup(const string& name)
|
|||
if (name == "uncleared")
|
||||
return expr_t::op_t::wrap_value(1L);
|
||||
break;
|
||||
|
||||
case 'X':
|
||||
if (name[1] == '\0')
|
||||
return WRAP_FUNCTOR(get_wrapper<&get_cleared>);
|
||||
break;
|
||||
|
||||
case 'Y':
|
||||
if (name[1] == '\0')
|
||||
return WRAP_FUNCTOR(get_wrapper<&get_pending>);
|
||||
break;
|
||||
}
|
||||
return entry->lookup(name);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@ public:
|
|||
#define XACT_GENERATED 0x0020 // transaction was not found in a journal
|
||||
#define XACT_TEMP 0x0040 // transaction is a temporary object
|
||||
|
||||
enum state_t { UNCLEARED, CLEARED, PENDING };
|
||||
enum state_t { UNCLEARED = 0, CLEARED, PENDING };
|
||||
|
||||
entry_t * entry;
|
||||
account_t * account;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue