summaryrefslogtreecommitdiff
path: root/src/xact.cc
diff options
context:
space:
mode:
authorMartin Michlmayr <tbm@cyrius.com>2014-07-14 20:39:04 -0400
committerMartin Michlmayr <tbm@cyrius.com>2014-07-14 20:39:04 -0400
commit37b8b5e3373151a75e720161ce860cbce074da32 (patch)
tree08aca165a30646d36b3622ac8d6e4ebfd1c384e2 /src/xact.cc
parent511b17a21f79bbb19fe151402b07e3d0cc3948ec (diff)
downloadfork-ledger-37b8b5e3373151a75e720161ce860cbce074da32.tar.gz
fork-ledger-37b8b5e3373151a75e720161ce860cbce074da32.tar.bz2
fork-ledger-37b8b5e3373151a75e720161ce860cbce074da32.zip
Preserve original cost basis when gain or loss is made
Change the definition of cost: in the past, if you bought 1 AAA for $10 and then sold it for $12, ledger would take $12 as the cost. With the patch, the original cost of $10 is preserved ss the cost basis. In my opinion, this brings ledger in line with accounting expectations. This change fixes bugs #712 and #713. Bug #712 is about Equity:Capital Gains and Equity:Capital Loss entries ledger automatically generates that are in my opinion incorrect. Bug #713 is about strange behaviour with -B after a capital gain or loss is made. Patch from John Wiegley.
Diffstat (limited to 'src/xact.cc')
-rw-r--r--src/xact.cc6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/xact.cc b/src/xact.cc
index eec4cff3..3e563714 100644
--- a/src/xact.cc
+++ b/src/xact.cc
@@ -304,10 +304,9 @@ bool xact_base_t::finalize()
DEBUG("xact.finalize", "gain_loss = " << gain_loss);
gain_loss.in_place_round();
DEBUG("xact.finalize", "gain_loss rounds to = " << gain_loss);
-
if (post->must_balance())
add_or_set_value(balance, gain_loss.reduced());
-
+#if 0
account_t * account;
if (gain_loss.sign() > 0)
account = journal->find_account(_("Equity:Capital Gains"));
@@ -321,6 +320,9 @@ bool xact_base_t::finalize()
p->add_flags(post->flags() & (POST_VIRTUAL | POST_MUST_BALANCE));
}
add_post(p);
+#else
+ *post->cost += gain_loss;
+#endif
DEBUG("xact.finalize", "added gain_loss, balance = " << balance);
} else {
DEBUG("xact.finalize", "gain_loss would have displayed as zero");