From 1c7de0f9e4d6372ab80a90f0ccd8ce7314466686 Mon Sep 17 00:00:00 2001 From: John Wiegley Date: Mon, 2 Mar 2009 16:39:26 -0400 Subject: Added "fixated commodity pricing" If you put '=' before an annotated commodity's price, it will cause any future market valuation of that commodity to use that price, and ignore whatever changes may have happened since in the market price. This can be useful if you are tracking gas expenses based on a standard rate which, although it changes over time, should not adjust the historical valuation of how much the gas cost at the time it was purchased: 2009/01/01 Payee Expenses:Gas 100 GAL {=$2} Liabilities:MasterCard $-200 --- src/commodity.cc | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'src/commodity.cc') diff --git a/src/commodity.cc b/src/commodity.cc index 1c849624..08252cf4 100644 --- a/src/commodity.cc +++ b/src/commodity.cc @@ -638,6 +638,12 @@ void annotation_t::parse(std::istream& in) throw_(amount_error, _("Commodity specifies more than one price")); in.get(c); + c = peek_next_nonws(in); + if (c == '=') { + in.get(c); + add_flags(ANNOTATION_PRICE_FIXATED); + } + READ_INTO(in, buf, 255, c, c != '}'); if (c == '}') in.get(c); @@ -761,7 +767,10 @@ void annotated_commodity_t::write_annotations(std::ostream& out) const void annotation_t::print(std::ostream& out, bool keep_base) const { if (price) - out << " {" << (keep_base ? *price : price->unreduced()).rounded() << '}'; + out << " {" + << (has_flags(ANNOTATION_PRICE_FIXATED) ? "=" : "") + << (keep_base ? *price : price->unreduced()).rounded() + << '}'; if (date) out << " [" << format_date(*date, string("%Y/%m/%d")) << ']'; -- cgit v1.2.3