Fixed the behavior of fn_nail_down

This commit is contained in:
John Wiegley 2012-03-09 07:02:53 -06:00
parent 929a734a30
commit 318b5f49ff
3 changed files with 238 additions and 45 deletions

View file

@ -743,12 +743,20 @@ value_t report_t::fn_commodity(call_scope_t& args)
value_t report_t::fn_nail_down(call_scope_t& args)
{
value_t arg0(args[0]);
value_t arg1(args[1]);
switch (arg0.type()) {
case value_t::AMOUNT: {
amount_t tmp(arg0.as_amount());
if (tmp.has_commodity())
tmp.set_commodity(tmp.commodity()
.nail_down(args[1].as_any<expr_t::ptr_op_t>()));
if (tmp.has_commodity() && ! arg1.is_null()) {
expr_t value_expr(is_expr(arg1) ?
as_expr(arg1) : expr_t::op_t::wrap_value(arg1 / arg0));
std::ostringstream buf;
value_expr.print(buf);
value_expr.set_text(buf.str());
tmp.set_commodity(tmp.commodity().nail_down(value_expr));
}
return tmp;
}

View file

@ -89,15 +89,11 @@ account Expenses:Food5
test reg -V food
12-Mar-02 KFC Expenses:Food2 2 EUR 2 EUR
12-Mar-03 KFC <Adjustment> -1 EUR 1 EUR
Expenses:Food3 3 EUR 4 EUR
12-Mar-04 KFC <Adjustment> -2 EUR 2 EUR
Expenses:Food4 4 EUR 6 EUR
12-Mar-05 KFC <Adjustment> -3 EUR 3 EUR
Expenses:Food5 5 EUR 8 EUR
12-Mar-06 KFC <Adjustment> -4 EUR 4 EUR
Expenses:Food6 6 EUR 10 EUR
12-Mar-07 KFC Expenses:Food7 7 EUR 17 EUR
12-Mar-08 XACT Expenses:Food8 8 EUR 25 EUR
12-Mar-09 POST (Expenses:Food9) 9 EUR 34 EUR
12-Mar-03 KFC Expenses:Food3 3 EUR 5 EUR
12-Mar-04 KFC Expenses:Food4 4 EUR 9 EUR
12-Mar-05 KFC Expenses:Food5 5 EUR 14 EUR
12-Mar-06 KFC Expenses:Food6 6 EUR 20 EUR
12-Mar-07 KFC Expenses:Food7 7 EUR 27 EUR
12-Mar-08 XACT Expenses:Food8 8 EUR 35 EUR
12-Mar-09 POST (Expenses:Food9) 9 EUR 44 EUR
end test

View file

@ -1,61 +1,250 @@
2012-03-01 Broker
Assets:Stocks 10 APPL {$1} @ $1
D EUR 2.000,00
P 2011-12-15 $ EUR 2
P 2011-12-15 AAPL $5.00
2012-01-01 Broker
Assets:Stocks 10 AAPL {$1} @ $10
Equity
2012-03-02 Broker
Assets:Stocks 10 APPL {$1} @ $2
P 2012-01-15 AAPL $15.00
2012-02-02 Broker
Assets:Stocks 10 AAPL {$2} @ $20
Equity
P 2012-02-15 AAPL $25.00
2012-03-03 Broker
Assets:Stocks 10 APPL {$1} @ $3
Assets:Stocks 10 AAPL {$3} @ $30
Equity
2012-03-04 Broker
Assets:Stocks 10 APPL {$1} @ $4
P 2012-03-15 AAPL $35.00
2012-04-04 Broker
Assets:Stocks 10 AAPL {$4} @ $40
Equity
2012-03-05 Broker
Assets:Stocks 10 APPL {$1} @ $5
P 2012-04-15 AAPL $45.00
2012-05-05 Broker
Assets:Stocks 10 AAPL {$5} @ $50
Equity
P 2012-5-15 AAPL $55.00
test reg stocks
12-Jan-01 Broker Assets:Stocks 10 AAPL 10 AAPL
12-Feb-02 Broker Assets:Stocks 10 AAPL 20 AAPL
12-Mar-03 Broker Assets:Stocks 10 AAPL 30 AAPL
12-Apr-04 Broker Assets:Stocks 10 AAPL 40 AAPL
12-May-05 Broker Assets:Stocks 10 AAPL 50 AAPL
end test
test reg stocks -O
12-Mar-01 Broker Assets:Stocks 10 APPL 10 APPL
12-Mar-02 Broker Assets:Stocks 10 APPL 20 APPL
12-Mar-03 Broker Assets:Stocks 10 APPL 30 APPL
12-Mar-04 Broker Assets:Stocks 10 APPL 40 APPL
12-Mar-05 Broker Assets:Stocks 10 APPL 50 APPL
12-Jan-01 Broker Assets:Stocks 10 AAPL 10 AAPL
12-Feb-02 Broker Assets:Stocks 10 AAPL 20 AAPL
12-Mar-03 Broker Assets:Stocks 10 AAPL 30 AAPL
12-Apr-04 Broker Assets:Stocks 10 AAPL 40 AAPL
12-May-05 Broker Assets:Stocks 10 AAPL 50 AAPL
end test
test reg stocks -B
12-Mar-01 Broker Assets:Stocks $10 $10
12-Mar-02 Broker Assets:Stocks $20 $30
12-Mar-03 Broker Assets:Stocks $30 $60
12-Mar-04 Broker Assets:Stocks $40 $100
12-Mar-05 Broker Assets:Stocks $50 $150
12-Jan-01 Broker Assets:Stocks $100 $100
12-Feb-02 Broker Assets:Stocks $200 $300
12-Mar-03 Broker Assets:Stocks $300 $600
12-Apr-04 Broker Assets:Stocks $400 $1000
12-May-05 Broker Assets:Stocks $500 $1500
end test
test reg stocks -I
12-Mar-01 Broker Assets:Stocks $10 $10
12-Mar-02 Broker Assets:Stocks $10 $20
12-Mar-03 Broker Assets:Stocks $10 $30
12-Mar-04 Broker Assets:Stocks $10 $40
12-Mar-05 Broker Assets:Stocks $10 $50
12-Jan-01 Broker Assets:Stocks $10 $10
12-Feb-02 Broker Assets:Stocks $20 $30
12-Mar-03 Broker Assets:Stocks $30 $60
12-Apr-04 Broker Assets:Stocks $40 $100
12-May-05 Broker Assets:Stocks $50 $150
end test
test reg stocks -O -H
end test
test reg stocks -B -H
end test
test reg stocks -I -H
test reg stocks -V
12-Jan-01 Broker Assets:Stocks $100 $100
12-Jan-15 Commodities revalued <Revalued> $50 $150
12-Feb-02 Commodities revalued <Revalued> $50 $200
12-Feb-02 Broker Assets:Stocks $200 $400
12-Feb-15 Commodities revalued <Revalued> $100 $500
12-Mar-03 Commodities revalued <Revalued> $100 $600
12-Mar-03 Broker Assets:Stocks $300 $900
12-Mar-15 Commodities revalued <Revalued> $150 $1050
12-Apr-04 Commodities revalued <Revalued> $150 $1200
12-Apr-04 Broker Assets:Stocks $400 $1600
12-Apr-15 Commodities revalued <Revalued> $200 $1800
12-May-05 Commodities revalued <Revalued> $200 $2000
12-May-05 Broker Assets:Stocks $500 $2500
end test
test reg stocks -O -V
12-Jan-01 Broker Assets:Stocks $100 $100
12-Jan-15 Commodities revalued <Revalued> $50 $150
12-Feb-02 Commodities revalued <Revalued> $50 $200
12-Feb-02 Broker Assets:Stocks $200 $400
12-Feb-15 Commodities revalued <Revalued> $100 $500
12-Mar-03 Commodities revalued <Revalued> $100 $600
12-Mar-03 Broker Assets:Stocks $300 $900
12-Mar-15 Commodities revalued <Revalued> $150 $1050
12-Apr-04 Commodities revalued <Revalued> $150 $1200
12-Apr-04 Broker Assets:Stocks $400 $1600
12-Apr-15 Commodities revalued <Revalued> $200 $1800
12-May-05 Commodities revalued <Revalued> $200 $2000
12-May-05 Broker Assets:Stocks $500 $2500
end test
test reg stocks -B -V
12-Jan-01 Broker Assets:Stocks $100 $100
12-Feb-02 Broker Assets:Stocks $200 $300
12-Mar-03 Broker Assets:Stocks $300 $600
12-Apr-04 Broker Assets:Stocks $400 $1000
12-May-05 Broker Assets:Stocks $500 $1500
end test
test reg stocks -I -V
12-Jan-01 Broker Assets:Stocks $10 $10
12-Feb-02 Broker Assets:Stocks $20 $30
12-Mar-03 Broker Assets:Stocks $30 $60
12-Apr-04 Broker Assets:Stocks $40 $100
12-May-05 Broker Assets:Stocks $50 $150
end test
test reg stocks -X EUR
12-Jan-01 Broker Assets:Stocks EUR 200,00 EUR 200,00
12-Feb-02 Commodities revalued <Revalued> EUR 200,00 EUR 400,00
12-Feb-02 Broker Assets:Stocks EUR 400,00 EUR 800,00
12-Mar-03 Commodities revalued <Revalued> EUR 400,00 EUR 1.200,00
12-Mar-03 Broker Assets:Stocks EUR 600,00 EUR 1.800,00
12-Apr-04 Commodities revalued <Revalued> EUR 600,00 EUR 2.400,00
12-Apr-04 Broker Assets:Stocks EUR 800,00 EUR 3.200,00
12-May-05 Commodities revalued <Revalued> EUR 800,00 EUR 4.000,00
12-May-05 Broker Assets:Stocks EUR 1.000,00 EUR 5.000,00
end test
test reg stocks -O -X EUR
12-Jan-01 Broker Assets:Stocks EUR 200,00 EUR 200,00
12-Feb-02 Commodities revalued <Revalued> EUR 200,00 EUR 400,00
12-Feb-02 Broker Assets:Stocks EUR 400,00 EUR 800,00
12-Mar-03 Commodities revalued <Revalued> EUR 400,00 EUR 1.200,00
12-Mar-03 Broker Assets:Stocks EUR 600,00 EUR 1.800,00
12-Apr-04 Commodities revalued <Revalued> EUR 600,00 EUR 2.400,00
12-Apr-04 Broker Assets:Stocks EUR 800,00 EUR 3.200,00
12-May-05 Commodities revalued <Revalued> EUR 800,00 EUR 4.000,00
12-May-05 Broker Assets:Stocks EUR 1.000,00 EUR 5.000,00
end test
test reg stocks -B -X EUR
12-Jan-01 Broker Assets:Stocks EUR 200,00 EUR 200,00
12-Feb-02 Broker Assets:Stocks EUR 400,00 EUR 600,00
12-Mar-03 Broker Assets:Stocks EUR 600,00 EUR 1.200,00
12-Apr-04 Broker Assets:Stocks EUR 800,00 EUR 2.000,00
12-May-05 Broker Assets:Stocks EUR 1.000,00 EUR 3.000,00
end test
test reg stocks -I -X EUR
12-Jan-01 Broker Assets:Stocks EUR 20,00 EUR 20,00
12-Feb-02 Broker Assets:Stocks EUR 40,00 EUR 60,00
12-Mar-03 Broker Assets:Stocks EUR 60,00 EUR 120,00
12-Apr-04 Broker Assets:Stocks EUR 80,00 EUR 200,00
12-May-05 Broker Assets:Stocks EUR 100,00 EUR 300,00
end test
test reg stocks -H
12-Jan-01 Broker Assets:Stocks $100 $100
12-Feb-02 Broker Assets:Stocks $200 $300
12-Mar-03 Broker Assets:Stocks $300 $600
12-Apr-04 Broker Assets:Stocks $400 $1000
12-May-05 Broker Assets:Stocks $500 $1500
end test
test reg stocks -O -H
12-Jan-01 Broker Assets:Stocks $100 $100
12-Feb-02 Broker Assets:Stocks $200 $300
12-Mar-03 Broker Assets:Stocks $300 $600
12-Apr-04 Broker Assets:Stocks $400 $1000
12-May-05 Broker Assets:Stocks $500 $1500
end test
test reg stocks -B -H
12-Jan-01 Broker Assets:Stocks $100 $100
12-Feb-02 Broker Assets:Stocks $200 $300
12-Mar-03 Broker Assets:Stocks $300 $600
12-Apr-04 Broker Assets:Stocks $400 $1000
12-May-05 Broker Assets:Stocks $500 $1500
end test
test reg stocks -I -H
12-Jan-01 Broker Assets:Stocks $10 $10
12-Feb-02 Broker Assets:Stocks $20 $30
12-Mar-03 Broker Assets:Stocks $30 $60
12-Apr-04 Broker Assets:Stocks $40 $100
12-May-05 Broker Assets:Stocks $50 $150
end test
test reg stocks -H -V
12-Jan-01 Broker Assets:Stocks $100 $100
12-Feb-02 Broker Assets:Stocks $200 $300
12-Mar-03 Broker Assets:Stocks $300 $600
12-Apr-04 Broker Assets:Stocks $400 $1000
12-May-05 Broker Assets:Stocks $500 $1500
end test
test reg stocks -O -H -V
12-Jan-01 Broker Assets:Stocks $100 $100
12-Feb-02 Broker Assets:Stocks $200 $300
12-Mar-03 Broker Assets:Stocks $300 $600
12-Apr-04 Broker Assets:Stocks $400 $1000
12-May-05 Broker Assets:Stocks $500 $1500
end test
test reg stocks -B -H -V
12-Jan-01 Broker Assets:Stocks $100 $100
12-Feb-02 Broker Assets:Stocks $200 $300
12-Mar-03 Broker Assets:Stocks $300 $600
12-Apr-04 Broker Assets:Stocks $400 $1000
12-May-05 Broker Assets:Stocks $500 $1500
end test
test reg stocks -I -H -V
12-Jan-01 Broker Assets:Stocks $10 $10
12-Feb-02 Broker Assets:Stocks $20 $30
12-Mar-03 Broker Assets:Stocks $30 $60
12-Apr-04 Broker Assets:Stocks $40 $100
12-May-05 Broker Assets:Stocks $50 $150
end test
test reg stocks -H -X EUR
12-Jan-01 Broker Assets:Stocks EUR 200,00 EUR 200,00
12-Feb-02 Broker Assets:Stocks EUR 400,00 EUR 600,00
12-Mar-03 Broker Assets:Stocks EUR 600,00 EUR 1.200,00
12-Apr-04 Broker Assets:Stocks EUR 800,00 EUR 2.000,00
12-May-05 Broker Assets:Stocks EUR 1.000,00 EUR 3.000,00
end test
test reg stocks -O -H -X EUR
12-Jan-01 Broker Assets:Stocks EUR 200,00 EUR 200,00
12-Feb-02 Broker Assets:Stocks EUR 400,00 EUR 600,00
12-Mar-03 Broker Assets:Stocks EUR 600,00 EUR 1.200,00
12-Apr-04 Broker Assets:Stocks EUR 800,00 EUR 2.000,00
12-May-05 Broker Assets:Stocks EUR 1.000,00 EUR 3.000,00
end test
test reg stocks -B -H -X EUR
12-Jan-01 Broker Assets:Stocks EUR 200,00 EUR 200,00
12-Feb-02 Broker Assets:Stocks EUR 400,00 EUR 600,00
12-Mar-03 Broker Assets:Stocks EUR 600,00 EUR 1.200,00
12-Apr-04 Broker Assets:Stocks EUR 800,00 EUR 2.000,00
12-May-05 Broker Assets:Stocks EUR 1.000,00 EUR 3.000,00
end test
test reg stocks -I -H -X EUR
12-Jan-01 Broker Assets:Stocks EUR 20,00 EUR 20,00
12-Feb-02 Broker Assets:Stocks EUR 40,00 EUR 60,00
12-Mar-03 Broker Assets:Stocks EUR 60,00 EUR 120,00
12-Apr-04 Broker Assets:Stocks EUR 80,00 EUR 200,00
12-May-05 Broker Assets:Stocks EUR 100,00 EUR 300,00
end test