mirror of
https://github.com/simonmichael/hledger.git
synced 2024-11-07 21:15:19 +03:00
journal: fix balance assertions/assignments & prices (#824)
Hopefully this is will do it. This restores the past behaviour: - parsing prices in balance assertions/assignments - ignoring them in assertions - using them in assignments - and printing them and clarifies tests and docs.
This commit is contained in:
parent
08c0d83593
commit
550e33a558
@ -737,11 +737,11 @@ balanceassertionp = do
|
||||
char '='
|
||||
exact <- optional $ try $ char '='
|
||||
lift (skipMany spacenonewline)
|
||||
-- allow this amount to have a price, for compatibility, but discard it
|
||||
-- this amount can have a price; balance assertions ignore it,
|
||||
-- but balance assignments will use it
|
||||
a <- amountp <?> "amount (for a balance assertion or assignment)"
|
||||
let a' = a{aprice=NoPrice}
|
||||
return BalanceAssertion
|
||||
{ baamount = a'
|
||||
{ baamount = a
|
||||
, baexact = isJust exact
|
||||
, baposition = sourcepos
|
||||
}
|
||||
|
@ -438,10 +438,18 @@ One workaround is to isolate each commodity into its own subaccount:
|
||||
|
||||
### Assertions and prices
|
||||
|
||||
Balance assertion (or assignment) amounts should not have a [price](#transaction-prices),
|
||||
as the meaning of that is unclear.
|
||||
A price written there will be ignored.
|
||||
(hledger's [close](/manual.html#close) command used to generate balance assertions with prices.)
|
||||
Balance assertions ignore [transaction prices](#transaction-prices),
|
||||
and should normally be written without one:
|
||||
|
||||
``` journal
|
||||
2019/1/1
|
||||
(a) $1 @ €1 = $1
|
||||
```
|
||||
|
||||
We do allow prices to be written there, however, and [print](/manual.html#print) shows them,
|
||||
even though they don't affect whether the assertion passes or fails.
|
||||
This is for backward compatibility (hledger's [close](/manual.html#close) command used to generate balance assertions with prices),
|
||||
and because [balance *assignments*](#balance-assignments) do use them (see below).
|
||||
|
||||
### Assertions and subaccounts
|
||||
|
||||
@ -505,6 +513,20 @@ Note that using balance assignments makes your journal a little less explicit;
|
||||
to know the exact amount posted, you have to run hledger or do the calculations yourself,
|
||||
instead of just reading it.
|
||||
|
||||
### Balance assignments and prices
|
||||
|
||||
A [transaction price](#transaction-prices) in a balance assignment
|
||||
will cause the calculated amount to have that price attached:
|
||||
|
||||
``` journal
|
||||
2019/1/1
|
||||
(a) = $1 @ €2
|
||||
```
|
||||
```
|
||||
$ hledger print --explicit
|
||||
2019/01/01
|
||||
(a) $1 @ €2 = $1 @ €2
|
||||
```
|
||||
|
||||
## Transaction prices
|
||||
|
||||
|
@ -1,4 +1,6 @@
|
||||
#!/usr/bin/env shelltest
|
||||
# balance assertion & balance assignment tests
|
||||
|
||||
# 1. test some balance assertions
|
||||
hledger -f - stats
|
||||
<<<
|
||||
@ -358,16 +360,46 @@ hledger -f - stats
|
||||
>>>=0
|
||||
|
||||
# 20. Balance assertions may have a price, but it's ignored
|
||||
hledger -f- stats
|
||||
hledger -f- print
|
||||
<<<
|
||||
2019/01/01
|
||||
(a) 1A @ 1B = 1A @ 2B
|
||||
(a) 1A @ 1B = 1A @ 2B
|
||||
>>>
|
||||
>>>2 /unexpected '@'/
|
||||
>>>=1
|
||||
2019/01/01
|
||||
(a) 1A @ 1B = 1A @ 2B
|
||||
|
||||
# 21. The exact amounts are compared; display precision does not affect assertions.
|
||||
hledger -f- stats
|
||||
>>>=0
|
||||
|
||||
# 21. Balance assignments may have a price, and it's used for the posting amount.
|
||||
# But not shown as part of the balance assertion in the resulting posting.
|
||||
hledger -f- print --explicit
|
||||
<<<
|
||||
2019/01/01
|
||||
(a) = 1A @ 2B
|
||||
>>>
|
||||
2019/01/01
|
||||
(a) 1A @ 2B = 1A @ 2B
|
||||
|
||||
>>>=0
|
||||
|
||||
# 22. close generates balance assertions without prices
|
||||
hledger -f- close -e 2019/1/2
|
||||
<<<
|
||||
2019/01/01
|
||||
(a) 1A @ 1B = 1A @ 2B
|
||||
>>>
|
||||
2019/01/01 closing balances
|
||||
a -1A @ 1B = 0A
|
||||
equity:closing balances
|
||||
|
||||
2019/01/02 opening balances
|
||||
a 1A @ 1B = 1A
|
||||
equity:opening balances
|
||||
|
||||
>>>=0
|
||||
|
||||
# 23. The exact amounts are compared; display precision does not affect assertions.
|
||||
hledger -f- print
|
||||
<<<
|
||||
commodity $1000.00
|
||||
|
||||
@ -377,12 +409,12 @@ commodity $1000.00
|
||||
2019/01/02
|
||||
(a) $1.00 = $1.006
|
||||
|
||||
>>> /Transactions/
|
||||
>>> /2019/
|
||||
>>>2
|
||||
>>>=0
|
||||
|
||||
# 22. This fails
|
||||
hledger -f- stats
|
||||
# 24. This fails
|
||||
hledger -f- print
|
||||
<<<
|
||||
commodity $1000.00
|
||||
|
||||
@ -395,8 +427,8 @@ commodity $1000.00
|
||||
>>>2 /difference: 0\.004/
|
||||
>>>=1
|
||||
|
||||
# 23. This fails
|
||||
hledger -f- stats
|
||||
# 25. This fails
|
||||
hledger -f- print
|
||||
<<<
|
||||
commodity $1000.00
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user