summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Wiegley <johnw@newartisans.com>2010-06-17 23:42:23 -0400
committerJohn Wiegley <johnw@newartisans.com>2010-06-17 23:42:23 -0400
commit31e8ed7587f6c7dc54e9623dd6a4e09ad5b6b017 (patch)
tree27e27c95c45d3e1cee0138709406c7b7ea4a8736
parentf82ae73ecfd52cfc639270e303c6b00941bc7a48 (diff)
downloadfork-ledger-31e8ed7587f6c7dc54e9623dd6a4e09ad5b6b017.tar.gz
fork-ledger-31e8ed7587f6c7dc54e9623dd6a4e09ad5b6b017.tar.bz2
fork-ledger-31e8ed7587f6c7dc54e9623dd6a4e09ad5b6b017.zip
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.
-rw-r--r--src/account.cc2
-rw-r--r--src/filters.cc4
-rw-r--r--src/output.cc4
-rw-r--r--src/post.cc10
-rw-r--r--src/post.h2
-rw-r--r--src/report.h5
6 files changed, 19 insertions, 8 deletions
diff --git a/src/account.cc b/src/account.cc
index ceeb1c12..3e0ad086 100644
--- a/src/account.cc
+++ b/src/account.cc
@@ -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());
}
}
diff --git a/src/filters.cc b/src/filters.cc
index 03baadc6..f60ce062 100644
--- a/src/filters.cc
+++ b/src/filters.cc
@@ -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);
diff --git a/src/output.cc b/src/output.cc
index de0444cf..cc4845a3 100644
--- a/src/output.cc
+++ b/src/output.cc
@@ -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++;
}
diff --git a/src/post.cc b/src/post.cc
index 675749fc..7c42e3c5 100644
--- a/src/post.cc
+++ b/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) {
diff --git a/src/post.h b/src/post.h
index aec81e89..7111ddef 100644
--- a/src/post.h
+++ b/src/post.h
@@ -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);
}
diff --git a/src/report.h b/src/report.h
index eff375cc..a453d351 100644
--- a/src/report.h
+++ b/src/report.h
@@ -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