mirror of
https://github.com/simonmichael/hledger.git
synced 2024-09-20 02:37:12 +03:00
lib: better compatibility code in csv reader
This commit is contained in:
parent
d62f84bec2
commit
95ec5715cc
@ -750,7 +750,7 @@ transactionFromCsvRecord sourcepos rules record = t
|
||||
case account of
|
||||
Nothing -> Nothing
|
||||
Just account ->
|
||||
Just $ posting {paccount=account, pamount=fromMaybe missingmixedamt amount, ptransaction=Just t', pbalanceassertion=toAssertion <$> balance, pcomment = comment}
|
||||
Just $ (number, posting {paccount=account, pamount=fromMaybe missingmixedamt amount, ptransaction=Just t', pbalanceassertion=toAssertion <$> balance, pcomment = comment})
|
||||
|
||||
parsePosting number =
|
||||
parsePosting' number
|
||||
@ -765,9 +765,9 @@ transactionFromCsvRecord sourcepos rules record = t
|
||||
posting1' = parsePosting "1"
|
||||
posting1 =
|
||||
case (postingLegacy,posting1') of
|
||||
(Just legacy, Nothing) -> Just legacy
|
||||
(Nothing, Just posting1) -> Just posting1
|
||||
(Just legacy, Just posting1) ->
|
||||
(Just (_,legacy), Nothing) -> Just ("1", legacy)
|
||||
(Nothing, Just (_,posting1)) -> Just ("1", posting1)
|
||||
(Just (_,legacy), Just (_,posting1)) ->
|
||||
-- Here we merge legacy fields such as "amount" with "amount1", etc
|
||||
-- Account and Comment would be the same by construction
|
||||
let balanceassertion = (pbalanceassertion legacy) `or` (pbalanceassertion posting1)
|
||||
@ -787,15 +787,20 @@ transactionFromCsvRecord sourcepos rules record = t
|
||||
, "amount/amount-in/amount-out is " ++ showMixedAmount al
|
||||
, "amount1/amount1-in/amount1-out is " ++ showMixedAmount a1
|
||||
]
|
||||
in Just $ posting {paccount=paccount posting1, pamount=amount, ptransaction=Just t', pbalanceassertion=balanceassertion, pcomment = pcomment posting1}
|
||||
in Just $ ("1", posting {paccount=paccount posting1, pamount=amount, ptransaction=Just t', pbalanceassertion=balanceassertion, pcomment = pcomment posting1})
|
||||
(Nothing, Nothing) -> Nothing
|
||||
postings' = catMaybes $ posting1:[ parsePosting i | x<-[2..9], let i = show x]
|
||||
postings =
|
||||
case postings' of
|
||||
-- To be compatible with the behavior of the old code which allowed two postings only, we enforce
|
||||
-- second posting when rules generated just one of them.
|
||||
[posting1] -> [posting1,posting{paccount="unknown", pamount=missingmixedamt, ptransaction=Just t'}]
|
||||
_ -> postings'
|
||||
-- second posting when rules generated just first of them.
|
||||
-- When we have srictly first and second posting, but second posting does not have amount, we fill it in.
|
||||
[("1",posting1)] -> [posting1,posting{paccount="unknown", pamount=costOfMixedAmount(-(pamount posting1)), ptransaction=Just t'}]
|
||||
[("1",posting1),("2",posting2)] ->
|
||||
case (pamount posting1 == missingmixedamt , pamount posting2 == missingmixedamt) of
|
||||
(False, True) -> [posting1, posting2{pamount=costOfMixedAmount(-(pamount posting1))}]
|
||||
_ -> [posting1, posting2]
|
||||
_ -> map snd postings'
|
||||
|
||||
balanced = balanceTransaction Nothing t'
|
||||
t =
|
||||
@ -804,7 +809,7 @@ transactionFromCsvRecord sourcepos rules record = t
|
||||
Right balanced ->
|
||||
-- If we managed to balance transaction, lets infer better names for all "unknown" accounts
|
||||
t' {tpostings =
|
||||
[ originalPosting {paccount=newAccount, pamount=newAmount}
|
||||
[ originalPosting {paccount=newAccount}
|
||||
| (originalPosting,p) <- zip postings (tpostings balanced)
|
||||
, let account = paccount p
|
||||
, let newAccount =
|
||||
@ -814,11 +819,6 @@ transactionFromCsvRecord sourcepos rules record = t
|
||||
Just True -> "income:unknown"
|
||||
Just False -> "expenses:unknown"
|
||||
_ -> "unknown"
|
||||
, let newAmount =
|
||||
if pamount originalPosting == missingmixedamt &&
|
||||
pamount p /= missingmixedamt
|
||||
then pamount p
|
||||
else pamount originalPosting
|
||||
]}
|
||||
-- build the transaction
|
||||
t' = nulltransaction{
|
||||
|
@ -218,7 +218,7 @@ account3 expenses:tax
|
||||
$ ./hledger-csv
|
||||
2009/09/10 Flubber Co
|
||||
assets:myacct $50 = $321
|
||||
income:unknown $-50.234 = $123
|
||||
income:unknown = $123
|
||||
expenses:tax $0.234 ; VAT
|
||||
|
||||
>=0
|
||||
@ -237,8 +237,7 @@ account3 expenses:tax
|
||||
$ ./hledger-csv
|
||||
2009/09/10 Flubber Co
|
||||
assets:myacct $50 = $321
|
||||
unknown $-50 = $123
|
||||
unknown £-0.234 = $123
|
||||
unknown = $123
|
||||
expenses:tax £0.234 ; VAT
|
||||
|
||||
>=0
|
||||
@ -332,7 +331,7 @@ description %description for %itemtitle
|
||||
$ ./hledger-csv
|
||||
2018/12/22 (123456789) Someone for Joyful Systems
|
||||
sm:assets:online:paypal $9.41 = $57.60
|
||||
sm:expenses:unknown $-8.82
|
||||
sm:expenses:unknown
|
||||
JS:expenses:banking:paypal $-0.59
|
||||
|
||||
>=0
|
||||
@ -475,7 +474,7 @@ if Conditional Empty Fee
|
||||
$ ./hledger-csv
|
||||
2018/12/22 (123456789) Someone for Joyful Systems
|
||||
sm:assets:online:paypal $9.41 = $57.60
|
||||
sm:expenses:unknown $-8.82
|
||||
sm:expenses:unknown
|
||||
JS:expenses:banking:paypal $-0.59
|
||||
|
||||
2018/12/22 (987654321) Someone for Joyful Systems
|
||||
|
Loading…
Reference in New Issue
Block a user