mirror of
https://github.com/simonmichael/hledger.git
synced 2024-12-29 13:22:27 +03:00
;valuation: more tests; document default amount style issue
[ci skip]
This commit is contained in:
parent
2da50875ee
commit
33d03284c3
@ -81,13 +81,23 @@ amountApplyValuation prices styles periodend today ismultiperiod v a =
|
|||||||
-- given valuation date. (The default valuation commodity is the
|
-- given valuation date. (The default valuation commodity is the
|
||||||
-- commodity of the latest applicable market price before the
|
-- commodity of the latest applicable market price before the
|
||||||
-- valuation date.)
|
-- valuation date.)
|
||||||
|
--
|
||||||
|
-- The returned amount will have its commodity's canonical style applied,
|
||||||
|
-- but with the precision adjusted to show all significant decimal digits
|
||||||
|
-- up to a maximum of 8. (experimental)
|
||||||
|
--
|
||||||
-- If the market prices available on that date are not sufficient to
|
-- If the market prices available on that date are not sufficient to
|
||||||
-- calculate this value, the amount is left unchanged.
|
-- calculate this value, the amount is left unchanged.
|
||||||
amountValueAtDate :: [PriceDirective] -> M.Map CommoditySymbol AmountStyle -> Maybe CommoditySymbol -> Day -> Amount -> Amount
|
amountValueAtDate :: [PriceDirective] -> M.Map CommoditySymbol AmountStyle -> Maybe CommoditySymbol -> Day -> Amount -> Amount
|
||||||
amountValueAtDate pricedirectives styles mto d a =
|
amountValueAtDate pricedirectives styles mto d a =
|
||||||
case priceLookup pricedirectives d (acommodity a) mto of
|
case priceLookup pricedirectives d (acommodity a) mto of
|
||||||
Nothing -> a
|
Nothing -> a
|
||||||
Just (comm, rate) -> styleAmount styles $ amount{acommodity=comm, aquantity=rate * aquantity a}
|
Just (comm, rate) ->
|
||||||
|
-- setNaturalPrecisionUpTo 8 $ -- XXX force higher precision in case amount appears to be zero ?
|
||||||
|
-- Make default display style use precision 2 instead of 0 ?
|
||||||
|
-- Leave as is for now; mentioned in manual.
|
||||||
|
styleAmount styles
|
||||||
|
amount{acommodity=comm, aquantity=rate * aquantity a}
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
-- Building a price graph
|
-- Building a price graph
|
||||||
|
@ -644,6 +644,42 @@ $ hledger -f- print --value=2000-01-15
|
|||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
You may need to explicitly set a commodity's display style, when reverse prices are used.
|
||||||
|
Eg this output might be surprising:
|
||||||
|
```
|
||||||
|
P 2000-01-01 A 2B
|
||||||
|
|
||||||
|
2000-01-01
|
||||||
|
a 1B
|
||||||
|
b
|
||||||
|
```
|
||||||
|
```
|
||||||
|
$ hledger print -x -X A
|
||||||
|
2000/01/01
|
||||||
|
a 0
|
||||||
|
b 0
|
||||||
|
|
||||||
|
```
|
||||||
|
Explanation: because there's no amount or commodity directive specifying a display style
|
||||||
|
for A, 0.5A gets the default style, which shows no decimal digits. Because the displayed
|
||||||
|
amount looks like zero, the commodity symbol and minus sign are not displayed either.
|
||||||
|
Adding a commodity directive sets a more useful display style for A:
|
||||||
|
```
|
||||||
|
P 2000-01-01 A 2B
|
||||||
|
commodity 0.00A
|
||||||
|
|
||||||
|
2000-01-01
|
||||||
|
a 1B
|
||||||
|
b
|
||||||
|
```
|
||||||
|
```
|
||||||
|
$ hledger print -X A
|
||||||
|
2000/01/01
|
||||||
|
a 0.50A
|
||||||
|
b -0.50A
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
#### Effect of --value on reports
|
#### Effect of --value on reports
|
||||||
|
|
||||||
Below is how `--value` affects each of hledger's reports, currently.
|
Below is how `--value` affects each of hledger's reports, currently.
|
||||||
|
102
tests/journal/valuation2.test
Normal file
102
tests/journal/valuation2.test
Normal file
@ -0,0 +1,102 @@
|
|||||||
|
; More valuation tests. See also tests/journal/valuation.test.
|
||||||
|
|
||||||
|
; some market prices
|
||||||
|
P 2019-01-01 B 10 A
|
||||||
|
P 2019-01-01 C 2 B
|
||||||
|
P 2019-01-01 A 100 D
|
||||||
|
P 2019-01-01 E 3 D
|
||||||
|
|
||||||
|
; a transaction with both amounts in B
|
||||||
|
2019-06-01
|
||||||
|
a 1 B
|
||||||
|
b
|
||||||
|
|
||||||
|
; tests follow. This comment directive makes this file readable
|
||||||
|
; by hledger, as well as shelltest; useful when troubleshooting.
|
||||||
|
comment
|
||||||
|
|
||||||
|
# 1. normal unvalued output
|
||||||
|
$ hledger -f- print -x
|
||||||
|
2019/06/01
|
||||||
|
a 1 B
|
||||||
|
b -1 B
|
||||||
|
|
||||||
|
>=
|
||||||
|
|
||||||
|
# 2. current market value in default valuation commodity
|
||||||
|
$ hledger -f- print -x -V
|
||||||
|
2019/06/01
|
||||||
|
a 10 A
|
||||||
|
b -10 A
|
||||||
|
|
||||||
|
>=
|
||||||
|
|
||||||
|
# 3. same as above, but request commodity A explicitly
|
||||||
|
$ hledger -f- print -x --value=now,A
|
||||||
|
2019/06/01
|
||||||
|
a 10 A
|
||||||
|
b -10 A
|
||||||
|
|
||||||
|
>=
|
||||||
|
|
||||||
|
# 4. request commodity B - no effect
|
||||||
|
$ hledger -f- print -x --value=now,B
|
||||||
|
2019/06/01
|
||||||
|
a 1 B
|
||||||
|
b -1 B
|
||||||
|
|
||||||
|
>=
|
||||||
|
|
||||||
|
# 5. request commodity we don't have prices for - no effect
|
||||||
|
$ hledger -f- print -x --value=now,Z
|
||||||
|
2019/06/01
|
||||||
|
a 1 B
|
||||||
|
b -1 B
|
||||||
|
|
||||||
|
>=
|
||||||
|
|
||||||
|
# 6. request commodity C - uses reverse of C->B price.
|
||||||
|
# There's nothing setting C display style, so the default style is used,
|
||||||
|
# which shows no decimal digits.
|
||||||
|
# And because that makes it display as zero, the commodity symbol
|
||||||
|
# and sign are not shown either.
|
||||||
|
$ hledger -f- print -x --value=now,C
|
||||||
|
2019/06/01
|
||||||
|
a 0
|
||||||
|
b 0
|
||||||
|
|
||||||
|
>=
|
||||||
|
# # There's nothing setting C display style, so the default style is used,
|
||||||
|
# # but the precision is increased to show the decimal digit
|
||||||
|
# # (otherwise it would show C0).
|
||||||
|
# $ hledger -f- print -x --value=now,C
|
||||||
|
# 2019/06/01
|
||||||
|
# a C0.5
|
||||||
|
# b C-0.5
|
||||||
|
#
|
||||||
|
# >=
|
||||||
|
|
||||||
|
# 7. request commodity D - chains B->A, A->D prices
|
||||||
|
$ hledger -f- print -x --value=now,D
|
||||||
|
2019/06/01
|
||||||
|
a 1000 D
|
||||||
|
b -1000 D
|
||||||
|
|
||||||
|
>=
|
||||||
|
|
||||||
|
# 8. request commodity E - chains B->A, A->D, reverse of D->E prices.
|
||||||
|
# As with C above, E gets the default display style, with precision 0.
|
||||||
|
$ hledger -f- print -x --value=now,E
|
||||||
|
2019/06/01
|
||||||
|
a E333
|
||||||
|
b E-333
|
||||||
|
|
||||||
|
>=
|
||||||
|
# # As with C above, E gets the default display style, but with the precision
|
||||||
|
# # increased to show the decimal digits, but no more than 8.
|
||||||
|
# $ hledger -f- print -x --value=now,E
|
||||||
|
# 2019/06/01
|
||||||
|
# a E333.33333333
|
||||||
|
# b E-333.33333333
|
||||||
|
#
|
||||||
|
# >=
|
Loading…
Reference in New Issue
Block a user