ref: journalFinalise: clarify sequence, top to bottom
This commit is contained in:
		
							parent
							
								
									91441bad8f
								
							
						
					
					
						commit
						885a4fcfec
					
				| @ -317,42 +317,28 @@ parseAndFinaliseJournal' parser iopts f txt = do | ||||
| -- - check all commodities have been declared if in strict mode | ||||
| -- | ||||
| journalFinalise :: InputOpts -> FilePath -> Text -> ParsedJournal -> ExceptT String IO Journal | ||||
| journalFinalise iopts@InputOpts{auto_,infer_equity_,balancingopts_,strict_} f txt pj = do | ||||
| journalFinalise iopts@InputOpts{auto_,infer_equity_,balancingopts_,strict_,_ioDay} f txt pj = do | ||||
|   t <- liftIO getPOSIXTime | ||||
|     -- Infer and apply canonical styles for each commodity (or throw an error). | ||||
|     -- This affects transaction balancing/assertions/assignments, so needs to be done early. | ||||
|     liftEither $ checkAddAndBalance (_ioDay iopts) <=< journalApplyCommodityStyles $ | ||||
|         pj{jglobalcommoditystyles=fromMaybe mempty $ commodity_styles_ balancingopts_}  -- save any global commodity styles | ||||
|         & journalAddFile (f, txt)           -- save the main file's info | ||||
|   liftEither $ do | ||||
|     let pj2 = pj | ||||
|           & journalSetLastReadTime t   -- save the last read time | ||||
|           & journalAddFile (f, txt)    -- save the main file's info | ||||
|           & journalReverse             -- convert all lists to the order they were parsed           | ||||
|   where | ||||
|     checkAddAndBalance d j = do | ||||
|         newj <- j | ||||
|           -- Add account tags to postings' tags | ||||
|           & journalPostingsAddAccountTags | ||||
|           -- Add forecast transactions if enabled | ||||
|           & journalAddForecast (forecastPeriod iopts j) | ||||
|           -- Add account tags again to affect forecast transactions  -- PERF: just to the new transactions ? | ||||
|           & journalPostingsAddAccountTags | ||||
|           -- Add auto postings if enabled | ||||
|           & (if auto_ && not (null $ jtxnmodifiers j) then journalAddAutoPostings d balancingopts_ else pure) | ||||
|           -- Add account tags again to affect auto postings  -- PERF: just to the new postings ? | ||||
|           >>= Right . journalPostingsAddAccountTags | ||||
|           -- Balance all transactions and maybe check balance assertions. | ||||
|           >>= journalBalanceTransactions balancingopts_ | ||||
|           -- Add inferred equity postings, after balancing transactions and generating auto postings | ||||
|           <&> (if infer_equity_ then journalAddInferredEquityPostings else id) | ||||
|           -- infer market prices from commodity-exchanging transactions | ||||
|           <&> journalInferMarketPricesFromTransactions | ||||
| 
 | ||||
|     pj3 <- pj2{jglobalcommoditystyles=fromMaybe mempty $ commodity_styles_ balancingopts_} | ||||
|           & journalApplyCommodityStyles                   -- Infer and apply commodity styles - should be done early | ||||
|     j <- pj3 | ||||
|       &   journalPostingsAddAccountTags                  -- Add account tags to postings' tags | ||||
|       &   journalAddForecast (forecastPeriod iopts pj3)  -- Add forecast transactions if enabled | ||||
|       &   journalPostingsAddAccountTags                  -- Add account tags again to affect forecast transactions  -- PERF: just to the new transactions ? | ||||
|       &   (if auto_ && not (null $ jtxnmodifiers pj3) then journalAddAutoPostings _ioDay balancingopts_ else pure)  -- Add auto postings if enabled | ||||
|       >>= Right . journalPostingsAddAccountTags          -- Add account tags again to affect auto postings  -- PERF: just to the new postings ? | ||||
|       >>= journalBalanceTransactions balancingopts_      -- Balance all transactions and maybe check balance assertions. | ||||
|       <&> (if infer_equity_ then journalAddInferredEquityPostings else id)  -- Add inferred equity postings, after balancing transactions and generating auto postings | ||||
|       <&> journalInferMarketPricesFromTransactions       -- infer market prices from commodity-exchanging transactions | ||||
|     when strict_ $ do | ||||
|           -- If in strict mode, check all postings are to declared accounts | ||||
|           journalCheckAccountsDeclared newj | ||||
|           -- and using declared commodities | ||||
|           journalCheckCommoditiesDeclared newj | ||||
| 
 | ||||
|         return newj | ||||
|       journalCheckAccountsDeclared j                     -- If in strict mode, check all postings are to declared accounts | ||||
|       journalCheckCommoditiesDeclared j                  -- and using declared commodities | ||||
|     return j | ||||
| 
 | ||||
| -- | To all postings in the journal, add any tags from their account  | ||||
| -- (including those inherited from parent accounts). | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user