more balanceTransaction cleanup
Clarify: it's fine to try to infer prices on a transaction that has had an amount inferred, it just won't have any effect.
This commit is contained in:
parent
b735107f43
commit
b827f1a146
@ -267,14 +267,12 @@ isTransactionBalanced styles t =
|
||||
balanceTransaction :: Maybe (Map.Map Commodity AmountStyle) -> Transaction -> Either String Transaction
|
||||
balanceTransaction styles t =
|
||||
case inferBalancingAmount t of
|
||||
Left err -> Left err
|
||||
Right tWithAmounts ->
|
||||
case isTransactionBalanced styles tWithAmountsAndPrices of
|
||||
False -> Left $ printerr $ nonzerobalanceerror tWithAmountsAndPrices
|
||||
True -> Right $ txnTieKnot tWithAmountsAndPrices
|
||||
|
||||
Left err -> Left err
|
||||
Right t' -> let t'' = inferBalancingPrices t'
|
||||
in if isTransactionBalanced styles t''
|
||||
then Right $ txnTieKnot t''
|
||||
else Left $ printerr $ nonzerobalanceerror t''
|
||||
where
|
||||
tWithAmountsAndPrices = (if tWithAmounts==t then inferBalancingPrices else id) tWithAmounts -- XXX unneeded ?
|
||||
printerr s = intercalate "\n" [s, showTransactionUnelided t]
|
||||
nonzerobalanceerror :: Transaction -> String
|
||||
nonzerobalanceerror t = printf "could not balance this transaction (%s%s%s)" rmsg sep bvmsg
|
||||
@ -321,10 +319,13 @@ inferBalancingAmount t@Transaction{tpostings=ps}
|
||||
-- of the second posting (with -B), and such that the postings balance.
|
||||
--
|
||||
-- In general, we can infer a conversion price when the sum of posting amounts
|
||||
-- contains exactly two different commodities and no explicit prices. The
|
||||
-- transaction could contain additional commodities, and/or prices, if they
|
||||
-- cancel out; what matters is that the sum of posting amounts contains
|
||||
-- exactly two commodities and zero prices.
|
||||
-- contains exactly two different commodities and no explicit prices. Also
|
||||
-- all postings are expected to contain an explicit amount (no missing
|
||||
-- amounts) in a single commodity. Otherwise no price inferring is attempted.
|
||||
--
|
||||
-- The transaction itself could contain more than two commodities, and/or
|
||||
-- prices, if they cancel out; what matters is that the sum of posting amounts
|
||||
-- contains exactly two commodities and zero prices.
|
||||
--
|
||||
-- There can also be more than two postings in either of the commodities.
|
||||
--
|
||||
@ -345,11 +346,6 @@ inferBalancingAmount t@Transaction{tpostings=ps}
|
||||
-- use any decimal places. The minimum of 2 helps make the prices shown by the
|
||||
-- print command a bit less surprising in this case. Could do better.)
|
||||
--
|
||||
-- All postings are expected to contain an explicit amount (no missing
|
||||
-- amounts) in a single commodity. (The code used to avoid inferring prices
|
||||
-- when it had previously inferred a missing amount, but it seems harmless to
|
||||
-- do that.)
|
||||
--
|
||||
inferBalancingPrices :: Transaction -> Transaction
|
||||
inferBalancingPrices t@Transaction{tpostings=ps} = t{tpostings=ps'}
|
||||
where
|
||||
|
||||
Loading…
Reference in New Issue
Block a user