lib: When inferring total prices, use the precision of toamount, rather than NaturalPrecision.

This commit is contained in:
Stephen Morgan 2021-04-16 10:53:52 +10:00
parent 686a0871a9
commit d1467d4766
2 changed files with 7 additions and 7 deletions

View File

@ -584,7 +584,7 @@ priceInferrerFor t pt = maybe id inferprice inferFromAndTo
-- If only one Amount in the posting list matches fromamount we can use TotalPrice. -- If only one Amount in the posting list matches fromamount we can use TotalPrice.
-- Otherwise divide the conversion equally among the Amounts by using a unit price. -- Otherwise divide the conversion equally among the Amounts by using a unit price.
conversionprice = case filter (== acommodity fromamount) pcommodities of conversionprice = case filter (== acommodity fromamount) pcommodities of
[_] -> TotalPrice $ negate toamount `withPrecision` NaturalPrecision [_] -> TotalPrice $ negate toamount
_ -> UnitPrice $ negate unitprice `withPrecision` unitprecision _ -> UnitPrice $ negate unitprice `withPrecision` unitprecision
unitprice = aquantity fromamount `divideAmount` toamount unitprice = aquantity fromamount `divideAmount` toamount
@ -918,7 +918,7 @@ tests_Transaction =
[ posting {paccount = "a", pamount = mixedAmount (usd 1.35)} [ posting {paccount = "a", pamount = mixedAmount (usd 1.35)}
, posting {paccount = "b", pamount = mixedAmount (eur (-1))} , posting {paccount = "b", pamount = mixedAmount (eur (-1))}
])) @?= ])) @?=
Right (mixedAmount $ usd 1.35 @@ (eur 1 `withPrecision` NaturalPrecision)) Right (mixedAmount $ usd 1.35 @@ eur 1)
,test "balanceTransaction balances based on cost if there are unit prices" $ ,test "balanceTransaction balances based on cost if there are unit prices" $
assertRight $ assertRight $
balanceTransaction balanceTransaction

View File

@ -231,9 +231,9 @@ $ hledger -f- print --auto
$ hledger -f- print --auto $ hledger -f- print --auto
2018-01-01 ; modified: 2018-01-01 ; modified:
Expenses:Joint:Widgets $100.00 Expenses:Joint:Widgets $100.00
Expenses:Joint $-100.00 @@ £50 ; generated-posting: = ^Expenses:Joint Expenses:Joint $-100.00 @@ £50.00 ; generated-posting: = ^Expenses:Joint
Liabilities:Joint:Bob $50.00 @@ £25 ; generated-posting: = ^Expenses:Joint Liabilities:Joint:Bob $50.00 @@ £25.00 ; generated-posting: = ^Expenses:Joint
Liabilities:Joint:Bill $50.00 @@ £25 ; generated-posting: = ^Expenses:Joint Liabilities:Joint:Bill $50.00 @@ £25.00 ; generated-posting: = ^Expenses:Joint
Assets:Joint:Bank £-50.00 Assets:Joint:Bank £-50.00
>=0 >=0