Allow fixated costs, as well as prices
You can now establish a fixated price automatically by way of a fixated
cost. The syntax for this is:
2009/11/01 Sample
Assets 1 apple @ =$0.10
Equity
This commit is contained in:
parent
a2bcfe4338
commit
685b12d8d3
3 changed files with 24 additions and 6 deletions
13
src/post.h
13
src/post.h
|
|
@ -52,12 +52,13 @@ class account_t;
|
|||
class post_t : public item_t
|
||||
{
|
||||
public:
|
||||
#define POST_VIRTUAL 0x04 // the account was specified with (parens)
|
||||
#define POST_MUST_BALANCE 0x08 // posting must balance in the transaction
|
||||
#define POST_CALCULATED 0x10 // posting's amount was calculated
|
||||
#define POST_COST_CALCULATED 0x20 // posting's cost was calculated
|
||||
#define POST_COST_IN_FULL 0x40 // cost specified using @@
|
||||
#define POST_ANONYMIZED 0x80 // a temporary, anonymous posting
|
||||
#define POST_VIRTUAL 0x0010 // the account was specified with (parens)
|
||||
#define POST_MUST_BALANCE 0x0020 // posting must balance in the transaction
|
||||
#define POST_CALCULATED 0x0040 // posting's amount was calculated
|
||||
#define POST_COST_CALCULATED 0x0080 // posting's cost was calculated
|
||||
#define POST_COST_IN_FULL 0x0100 // cost specified using @@
|
||||
#define POST_COST_FIXATED 0x0200 // cost is fixed using = indicator
|
||||
#define POST_ANONYMIZED 0x0400 // a temporary, anonymous posting
|
||||
|
||||
xact_t * xact; // only set for posts of regular xacts
|
||||
account_t * account;
|
||||
|
|
|
|||
|
|
@ -1096,6 +1096,14 @@ post_t * instance_t::parse_post(char * line,
|
|||
if (*p) {
|
||||
post->cost = amount_t();
|
||||
|
||||
bool fixed_cost = false;
|
||||
if (*p == '=') {
|
||||
p++;
|
||||
fixed_cost = true;
|
||||
if (*p == '\0')
|
||||
throw parse_error(_("Posting is missing a cost amount"));
|
||||
}
|
||||
|
||||
beg = p - line;
|
||||
ptristream cstream(p, len - beg);
|
||||
|
||||
|
|
@ -1122,6 +1130,9 @@ post_t * instance_t::parse_post(char * line,
|
|||
post->cost->in_place_negate();
|
||||
}
|
||||
|
||||
if (fixed_cost)
|
||||
post->add_flags(POST_COST_FIXATED);
|
||||
|
||||
DEBUG("textual.parse", "line " << linenum << ": "
|
||||
<< "Total cost is " << *post->cost);
|
||||
DEBUG("textual.parse", "line " << linenum << ": "
|
||||
|
|
|
|||
|
|
@ -300,6 +300,12 @@ bool xact_base_t::finalize()
|
|||
post->amount = breakdown.amount;
|
||||
DEBUG("xact.finalize", "added breakdown, balance = " << balance);
|
||||
}
|
||||
|
||||
if (post->has_flags(POST_COST_FIXATED) &&
|
||||
post->amount.has_annotation() && post->amount.annotation().price) {
|
||||
DEBUG("xact.finalize", "fixating annotation price");
|
||||
post->amount.annotation().add_flags(ANNOTATION_PRICE_FIXATED);
|
||||
}
|
||||
}
|
||||
|
||||
if (null_post != NULL) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue