Individual postings may each have their own payee
If a posting has the metadata field "Payee" set to a string, that will
be used as the payee name for that posting. This affects the register
report, the payees report, and the --by-payee option.
This is useful because sometimes I send, say, 4 checks at a time to my
bank. So on my bank statement, this is all just one amount:
2010-06-17 Sample
Assets:Bank $400.00
Income:Check1 $-100.00
Income:Check2 $-100.00
Income:Check3 $-100.00
Income:Check4 $-100.00
Though it's important that the Assets:Bank posting be a single posting
of $400 value, I'd like for income reports to show whom each check came
from. Now I can say:
2010-06-17 Sample
Assets:Bank $400.00
Income:Check1 $-100.00 ; Payee: Person One
Income:Check2 $-100.00 ; Payee: Person Two
Income:Check3 $-100.00 ; Payee: Person Three
Income:Check4 $-100.00 ; Payee: Person Four
When I report this, it appears as:
10-Jun-17 Sample Assets:Bank $400.00 $400.00
Person One Income:Check1 $-100.00 $300.00
Person Two Income:Check2 $-100.00 $200.00
Person Three Income:Check3 $-100.00 $100.00
Person Four Income:Check4 $-100.00 0
This shows that they are all in the same transaction (which is why the
date is not repeated), but they have different payees.
This commit is contained in:
parent
f82ae73ecf
commit
31e8ed7587
6 changed files with 19 additions and 8 deletions
|
|
@ -626,7 +626,7 @@ void account_t::xdata_t::details_t::update(post_t& post,
|
|||
|
||||
if (gather_all) {
|
||||
accounts_referenced.insert(post.account->fullname());
|
||||
payees_referenced.insert(post.xact->payee);
|
||||
payees_referenced.insert(post.payee());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1042,10 +1042,10 @@ void by_payee_posts::flush()
|
|||
|
||||
void by_payee_posts::operator()(post_t& post)
|
||||
{
|
||||
payee_subtotals_map::iterator i = payee_subtotals.find(post.xact->payee);
|
||||
payee_subtotals_map::iterator i = payee_subtotals.find(post.payee());
|
||||
if (i == payee_subtotals.end()) {
|
||||
payee_subtotals_pair
|
||||
temp(post.xact->payee,
|
||||
temp(post.payee(),
|
||||
shared_ptr<subtotal_posts>(new subtotal_posts(handler, amount_expr)));
|
||||
std::pair<payee_subtotals_map::iterator, bool> result
|
||||
= payee_subtotals.insert(temp);
|
||||
|
|
|
|||
|
|
@ -313,9 +313,9 @@ void report_payees::flush()
|
|||
|
||||
void report_payees::operator()(post_t& post)
|
||||
{
|
||||
std::map<string, std::size_t>::iterator i = payees.find(post.xact->payee);
|
||||
std::map<string, std::size_t>::iterator i = payees.find(post.payee());
|
||||
if (i == payees.end())
|
||||
payees.insert(payees_pair(post.xact->payee, 1));
|
||||
payees.insert(payees_pair(post.payee(), 1));
|
||||
else
|
||||
(*i).second++;
|
||||
}
|
||||
|
|
|
|||
10
src/post.cc
10
src/post.cc
|
|
@ -123,6 +123,14 @@ optional<date_t> post_t::effective_date() const
|
|||
return date;
|
||||
}
|
||||
|
||||
string post_t::payee() const
|
||||
{
|
||||
if (optional<value_t> post_payee = get_tag(_("Payee")))
|
||||
return post_payee->as_string();
|
||||
else
|
||||
return xact->payee;
|
||||
}
|
||||
|
||||
namespace {
|
||||
value_t get_this(post_t& post) {
|
||||
return scope_value(&post);
|
||||
|
|
@ -160,7 +168,7 @@ namespace {
|
|||
}
|
||||
|
||||
value_t get_payee(post_t& post) {
|
||||
return string_value(post.xact->payee);
|
||||
return string_value(post.payee());
|
||||
}
|
||||
|
||||
value_t get_note(post_t& post) {
|
||||
|
|
|
|||
|
|
@ -112,6 +112,8 @@ public:
|
|||
virtual date_t actual_date() const;
|
||||
virtual optional<date_t> effective_date() const;
|
||||
|
||||
string payee() const;
|
||||
|
||||
bool must_balance() const {
|
||||
return ! has_flags(POST_VIRTUAL) || has_flags(POST_MUST_BALANCE);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -816,8 +816,9 @@ public:
|
|||
" %(justify(scrub(display_total), total_width, "
|
||||
" 4 + meta_width + date_width + payee_width + account_width"
|
||||
" + amount_width + total_width + prepend_width, true, color))\n%/"
|
||||
"%(justify(\" \", 2 + date_width + payee_width))"
|
||||
"%$3 %$4 %$5\n");
|
||||
"%(justify(\" \", date_width))"
|
||||
" %(justify((has_tag(\"Payee\") ? payee : \" \"), payee_width))"
|
||||
" %$3 %$4 %$5\n");
|
||||
});
|
||||
|
||||
OPTION(report_t, related); // -r
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue