mirror of
https://github.com/simonmichael/hledger.git
synced 2024-12-27 12:24:43 +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
|
||||
-- commodity of the latest applicable market price before the
|
||||
-- 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
|
||||
-- calculate this value, the amount is left unchanged.
|
||||
amountValueAtDate :: [PriceDirective] -> M.Map CommoditySymbol AmountStyle -> Maybe CommoditySymbol -> Day -> Amount -> Amount
|
||||
amountValueAtDate pricedirectives styles mto d a =
|
||||
case priceLookup pricedirectives d (acommodity a) mto of
|
||||
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
|
||||
|
@ -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
|
||||
|
||||
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