Fixed the way prices and costs are print'd

This commit is contained in:
John Wiegley 2010-06-07 08:23:22 -04:00
parent a4d4f99794
commit c85cf0d810
9 changed files with 581 additions and 581 deletions

View file

@ -1216,7 +1216,7 @@ void amount_t::parse_conversion(const string& larger_str,
smaller.commodity().set_larger(larger);
}
void amount_t::print(std::ostream& _out, const uint_least8_t) const
void amount_t::print(std::ostream& _out, const uint_least8_t flags) const
{
VERIFY(valid());
@ -1246,7 +1246,7 @@ void amount_t::print(std::ostream& _out, const uint_least8_t) const
// If there are any annotations associated with this commodity, output them
// now.
comm.write_annotations(out);
comm.write_annotations(out, flags & AMOUNT_PRINT_NO_COMPUTED_ANNOTATIONS);
// Things are output to a string first, so that if anyone has specified a
// width or fill for _out, it will be applied to the entire amount string,

View file

@ -66,15 +66,6 @@ void annotation_t::parse(std::istream& in)
temp.parse(buf, PARSE_NO_MIGRATE);
DEBUG("commodity.annotations", "Parsed annotation price: " << temp);
// Since this price will maintain its own precision, make sure
// it is at least as large as the base commodity, since the user
// may have only specified {$1} or something similar.
if (temp.has_commodity() &&
temp.precision() > temp.commodity().precision())
temp = temp.rounded(); // no need to retain individual precision
price = temp;
}
else if (c == '[') {
@ -118,18 +109,22 @@ void annotation_t::parse(std::istream& in)
#endif
}
void annotation_t::print(std::ostream& out, bool keep_base) const
void annotation_t::print(std::ostream& out, bool keep_base,
bool no_computed_annotations) const
{
if (price)
if (price &&
(! no_computed_annotations || ! has_flags(ANNOTATION_PRICE_CALCULATED)))
out << " {"
<< (has_flags(ANNOTATION_PRICE_FIXATED) ? "=" : "")
<< (keep_base ? *price : price->unreduced()).rounded()
<< (keep_base ? *price : price->unreduced())
<< '}';
if (date)
if (date &&
(! no_computed_annotations || ! has_flags(ANNOTATION_DATE_CALCULATED)))
out << " [" << format_date(*date, FMT_WRITTEN) << ']';
if (tag)
if (tag &&
(! no_computed_annotations || ! has_flags(ANNOTATION_TAG_CALCULATED)))
out << " (" << *tag << ')';
}
@ -197,9 +192,10 @@ annotated_commodity_t::strip_annotations(const keep_details_t& what_to_keep)
return *new_comm;
}
void annotated_commodity_t::write_annotations(std::ostream& out) const
void annotated_commodity_t::write_annotations
(std::ostream& out, bool no_computed_annotations) const
{
details.print(out, pool().keep_base);
details.print(out, pool().keep_base, no_computed_annotations);
}
} // namespace ledger

View file

@ -87,7 +87,8 @@ struct annotation_t : public supports_flags<>,
void parse(std::istream& in);
void print(std::ostream& out, bool keep_base = false) const;
void print(std::ostream& out, bool keep_base = false,
bool no_computed_annotations = false) const;
bool valid() const {
assert(*this);
@ -230,7 +231,8 @@ public:
}
virtual commodity_t& strip_annotations(const keep_details_t& what_to_keep);
virtual void write_annotations(std::ostream& out) const;
virtual void write_annotations(std::ostream& out,
bool no_computed_annotations = false) const;
#if defined(HAVE_BOOST_SERIALIZATION)
private:

View file

@ -273,7 +273,7 @@ public:
virtual commodity_t& strip_annotations(const keep_details_t&) {
return *this;
}
virtual void write_annotations(std::ostream&) const {}
virtual void write_annotations(std::ostream&, bool) const {}
commodity_pool_t& pool() const {
return *parent_;

View file

@ -177,8 +177,8 @@ namespace {
report.HANDLER(amount_width_).value.to_int() : 12);
std::ostringstream amt_str;
report.scrub(post->amount)
.print(amt_str, amount_width, -1, AMOUNT_PRINT_RIGHT_JUSTIFY |
value_t(post->amount).print(amt_str, amount_width, -1,
AMOUNT_PRINT_RIGHT_JUSTIFY |
AMOUNT_PRINT_NO_COMPUTED_ANNOTATIONS);
amt = amt_str.str();
}
@ -191,15 +191,17 @@ namespace {
amtbuf << string(2 - (slip + amt_slip), ' ');
amtbuf << amt;
if (post->cost && ! post->has_flags(POST_CALCULATED)) {
if (post->cost &&
! post->has_flags(POST_CALCULATED | POST_COST_CALCULATED)) {
if (post->has_flags(POST_COST_IN_FULL))
amtbuf << " @@ " << report.scrub(post->cost->abs());
amtbuf << " @@ " << post->cost->abs();
else
amtbuf << " @ " << report.scrub((*post->cost / post->amount).abs());
amtbuf << " @ "
<< (*post->cost / post->amount).abs();
}
if (post->assigned_amount)
amtbuf << " = " << report.scrub(*post->assigned_amount);
amtbuf << " = " << post->assigned_amount;
string trailer = amtbuf.str();
out << trailer;

File diff suppressed because it is too large Load diff

View file

@ -7,11 +7,11 @@ D 1.0000s
Assets:Gruulmorg 248720c {10.051463493s}
Equity:Gold -5000000s
>>>1
1339829c {1.8659s} [2006/03/14]
1339829c {1.8659s} [2006/03/14]
248720c {10.0515s}
1339829c {1.8659s} [2006/03/14]
248720c {10.0515s}
1339829c {1.86590975416s} [2006/03/14]
1339829c {1.86590975416s} [2006/03/14]
248720c {10.051463493s}
1339829c {1.86590975416s} [2006/03/14]
248720c {10.051463493s}
-1388.9h
>>>2
=== 0
@ -19,9 +19,9 @@ reg --format '%(justify(scrub(total_expr), 40, 40, true))\n' --lots-actual
>>>1
1339829c
1339829c
248720c {10.0515s}
248720c {10.051463493s}
1339829c
248720c {10.0515s}
248720c {10.051463493s}
-1388.9h
>>>2
=== 0

File diff suppressed because it is too large Load diff

View file

@ -89,11 +89,11 @@ D 1.200,40 €
Actif:SV 14,89 €
>>>1
1999/11/01 * Achat
Actif:SSB 125,0000 STK @ 13,37936 $
Actif:SSB 125,0000 STK
Actif:SSB -1672,42 $
1999/11/04 * Vente
Actif:SSB -125,0000 STK @ 15,01288 $
Actif:SSB -125,0000 STK
Dépense:SSB:Commissions 55,07 $
Actif:SSB 1821,54 $