lib: more explicit conditions for using legacy csv parser

This commit is contained in:
Dmitry Astapov 2019-10-12 09:21:24 +01:00
parent 294fb4172c
commit 28ca65b99a

View File

@ -782,10 +782,21 @@ transactionFromCsvRecord sourcepos rules record = t
, showRecord record , showRecord record
, showRules rules record , showRules rules record
] ]
-- Posting 2 is special -- we want account to be income:unknown or expense:unknown if it is not specified, -- Posting 2 is special -- if there are no postings 3-9, we want to preserve legacy behaviour and
-- we want account to be income:unknown or expense:unknown if it is not specified,
-- based on the amount from posting 1 -- based on the amount from posting 1
posting2 = parsePosting' "2" "account2" (Just $ pamount posting1) "amount2" "amount2-in" "amount2-out" "balance2" "comment2" postings3to9 = catMaybes $ [ parsePosting i | x<-[3..9], let i = show x]
postings2to9 = catMaybes $ posting2:[ parsePosting i | x<-[3..9], let i = show x] postings =
if postings3to9 == []
then [fromMaybe justOnePostingError $ parsePosting' "2" "account2" (Just $ pamount posting1) "amount2" "amount2-in" "amount2-out" "balance2" "comment2"]
else case parsePosting "2" of
Just posting2 -> posting2:postings3to9
Nothing -> postings3to9
justOnePostingError = error' $ unlines [ "Found single posting, cannot generate transaction"
, showRecord record
, showRules rules record
]
-- build the transaction -- build the transaction
t = nulltransaction{ t = nulltransaction{
tsourcepos = genericSourcePos sourcepos, tsourcepos = genericSourcePos sourcepos,
@ -796,7 +807,7 @@ transactionFromCsvRecord sourcepos rules record = t
tdescription = T.pack description, tdescription = T.pack description,
tcomment = T.pack comment, tcomment = T.pack comment,
tprecedingcomment = T.pack precomment, tprecedingcomment = T.pack precomment,
tpostings = posting1:postings2to9 tpostings = posting1:postings
} }
toAssertion (a, b) = assertion{ toAssertion (a, b) = assertion{
baamount = a, baamount = a,