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