;csv: refactor: more transactionFromCsvRecord cleanups

This commit is contained in:
Simon Michael 2020-02-27 00:41:10 -08:00
parent 93358d72b4
commit be5fc09ebb

View File

@ -816,10 +816,8 @@ transactionFromCsvRecord sourcepos rules record = t
(either (balanceerror n str) id $ (either (balanceerror n str) id $
runParser (evalStateT (amountp <* eof) mempty) "" $ runParser (evalStateT (amountp <* eof) mempty) "" $
T.pack $ (currency++) $ simplifySign str T.pack $ (currency++) $ simplifySign str
,nullsourcepos) -- XXX parse position to show when assertion fails. ,nullsourcepos) -- XXX parse position to show when assertion fails,
-- We don't know the posting's line number, but we -- the csv record's line number would be good
-- could show the csv record's line number, probably
-- more useful, though perhaps confusing.
where where
balanceerror n str err = error' $ unlines balanceerror n str err = error' $ unlines
["error: could not parse \""++str++"\" as balance"++n++" amount" ["error: could not parse \""++str++"\" as balance"++n++" amount"
@ -829,24 +827,24 @@ transactionFromCsvRecord sourcepos rules record = t
,"the parse error is: "++customErrorBundlePretty err ,"the parse error is: "++customErrorBundlePretty err
] ]
comment = T.pack $ maybe "" render $ mfieldtemplate commentFld comment = T.pack $ maybe "" render $ mfieldtemplate commentFld
maccount' = ((T.pack . render) <$> maccount = ((T.pack . render) <$>
(mfieldtemplate accountFld `or` mdirective ("default-account" ++ number))) (mfieldtemplate accountFld `or` mdirective ("default-account" ++ number)))
-- figure out the account name to use for this posting, if any, and -- figure out the account name to use for this posting, if any, and
-- whether it is the unknown account which may be improved later, -- whether it is the default unknown account, which may be improved
-- when we know the posting's final amount. -- later, or an explicitly set account, which may not.
maccountAndIsFinal :: Maybe (AccountName, Bool) = maccountAndIsFinal :: Maybe (AccountName, Bool) =
case maccount' of case maccount of
-- accountN is set to the empty string - no posting will be generated -- accountN is set to the empty string - no posting will be generated
Just "" -> Nothing Just "" -> Nothing
-- accountN is set (possibly to "expenses:unknown" ! #1192) - -- accountN is set (possibly to "expenses:unknown"! cf #1192) -
-- don't let it be changed. -- mark it final
Just a -> Just (a, True) Just a -> Just (a, True)
-- accountN is unset -- accountN is unset
Nothing -> Nothing ->
case (mamount, mbalance) of case (mamount, mbalance) of
-- amountN is set, or implied by balanceN - set accountN to -- amountN is set, or implied by balanceN - set accountN to
-- set to the default unknown account (expenses:unknown) -- the default unknown account ("expenses:unknown") and
-- and allow it to be improved later -- allow it to be improved later
(Just _, _) -> Just (unknownExpenseAccount, False) (Just _, _) -> Just (unknownExpenseAccount, False)
(_, Just _) -> Just (unknownExpenseAccount, False) (_, Just _) -> Just (unknownExpenseAccount, False)
-- amountN is also unset - no posting will be generated -- amountN is also unset - no posting will be generated