journal: split up the parts of journalFinalise, and use them as needed.
`journalFinalise` is only used in the `parseAndFinaliseJournal` functions, but it needs to be run differently at different stages when transaction modifiers are applied. This change breaks it into smaller functions, and uses those smaller parts in `parseAndFinaliseJournal` as needed.
This commit is contained in:
parent
20f134c96b
commit
53b3e2bd94
@ -22,6 +22,9 @@ module Hledger.Data.Journal (
|
|||||||
journalCommodityStyles,
|
journalCommodityStyles,
|
||||||
journalConvertAmountsToCost,
|
journalConvertAmountsToCost,
|
||||||
journalFinalise,
|
journalFinalise,
|
||||||
|
journalReverse,
|
||||||
|
journalSetTime,
|
||||||
|
journalSetFilePath,
|
||||||
journalPivot,
|
journalPivot,
|
||||||
-- * Filtering
|
-- * Filtering
|
||||||
filterJournalTransactions,
|
filterJournalTransactions,
|
||||||
@ -519,6 +522,23 @@ filterJournalTransactionsByAccount apats j@Journal{jtxns=ts} = j{jtxns=filter tm
|
|||||||
|
|
||||||
-}
|
-}
|
||||||
|
|
||||||
|
journalReverse :: Journal -> Journal
|
||||||
|
journalReverse j =
|
||||||
|
j {jfiles = reverse $ jfiles j
|
||||||
|
,jdeclaredaccounts = reverse $ jdeclaredaccounts j
|
||||||
|
,jtxns = reverse $ jtxns j
|
||||||
|
,jtxnmodifiers = reverse $ jtxnmodifiers j
|
||||||
|
,jperiodictxns = reverse $ jperiodictxns j
|
||||||
|
,jmarketprices = reverse $ jmarketprices j
|
||||||
|
}
|
||||||
|
|
||||||
|
journalSetTime :: ClockTime -> Journal -> Journal
|
||||||
|
journalSetTime t j = j{ jlastreadtime = t }
|
||||||
|
|
||||||
|
journalSetFilePath :: FilePath -> Text -> Journal -> Journal
|
||||||
|
journalSetFilePath path txt j = j {jfiles = (path,txt) : jfiles j}
|
||||||
|
|
||||||
|
|
||||||
-- | Do post-parse processing on a parsed journal to make it ready for
|
-- | Do post-parse processing on a parsed journal to make it ready for
|
||||||
-- use. Reverse parsed data to normal order, standardise amount
|
-- use. Reverse parsed data to normal order, standardise amount
|
||||||
-- formats, check/ensure that transactions are balanced, and maybe
|
-- formats, check/ensure that transactions are balanced, and maybe
|
||||||
|
|||||||
@ -293,13 +293,21 @@ parseAndFinaliseJournal' parser iopts f txt = do
|
|||||||
-- be false pending modifiers) and we don't reorder the second
|
-- be false pending modifiers) and we don't reorder the second
|
||||||
-- time. If we are only running once, we reorder and follow the
|
-- time. If we are only running once, we reorder and follow the
|
||||||
-- options for checking assertions.
|
-- options for checking assertions.
|
||||||
let runFin :: Bool -> Bool -> (ParsedJournal -> Either String Journal)
|
let fj = if auto_ iopts && (not . null . jtxnmodifiers) pj
|
||||||
runFin reorder ignore = journalFinalise t f txt reorder ignore
|
|
||||||
fj = if auto_ iopts && (not . null . jtxnmodifiers) pj
|
|
||||||
then applyTransactionModifiers <$>
|
then applyTransactionModifiers <$>
|
||||||
runFin True False pj >>=
|
(journalBalanceTransactions False $
|
||||||
runFin False (not $ ignore_assertions_ iopts)
|
journalReverse $
|
||||||
else runFin True (not $ ignore_assertions_ iopts) pj
|
journalApplyCommodityStyles pj) >>=
|
||||||
|
(\j -> journalBalanceTransactions (not $ ignore_assertions_ iopts) $
|
||||||
|
journalSetTime t $
|
||||||
|
journalSetFilePath f txt $
|
||||||
|
j)
|
||||||
|
else journalBalanceTransactions (not $ ignore_assertions_ iopts) $
|
||||||
|
journalReverse $
|
||||||
|
journalApplyCommodityStyles $
|
||||||
|
journalSetTime t $
|
||||||
|
journalSetFilePath f txt $
|
||||||
|
pj
|
||||||
in
|
in
|
||||||
case fj of
|
case fj of
|
||||||
Right j -> return j
|
Right j -> return j
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user