lib: make date: also set forecast end date, not just -e and -p
This commit is contained in:
		
							parent
							
								
									816ba0f89d
								
							
						
					
					
						commit
						26d2c79ce0
					
				| @ -132,22 +132,34 @@ journalApplyValue ropts j = do | ||||
|                 | otherwise    = id | ||||
|     return $ convert j | ||||
| 
 | ||||
| -- | Run PeriodicTransactions from journal from today or journal end to requested end day. | ||||
| -- Add generated transactions to the journal | ||||
| -- | Generate periodic transactions from all periodic transaction rules in the journal. | ||||
| -- These transactions are added to the in-memory Journal (but not the on-disk file). | ||||
| -- | ||||
| -- They start on or after the day following the latest normal transaction in the journal, | ||||
| -- or today if there are none. | ||||
| -- They end on or before the specified report end date, or 180 days from today if unspecified. | ||||
| -- | ||||
| journalAddForecast :: CliOpts -> Journal -> IO Journal | ||||
| journalAddForecast opts j = do | ||||
| journalAddForecast opts@CliOpts{reportopts_=ropts} j = do | ||||
|   today <- getCurrentDay | ||||
|   -- Create forecast starting from end of journal + 1 day, and until the end of requested reporting period | ||||
|   -- If end is not provided, do 180 days of forecast. | ||||
|   -- Note that jdatespan already returns last day + 1 | ||||
|   let startDate = fromMaybe today $ spanEnd (jdatespan j)  | ||||
|       endDate = fromMaybe (addDays 180 today) $ periodEnd (period_ ropts) | ||||
|       dates = DateSpan (Just startDate) (Just endDate) | ||||
|       withForecast = [ txnTieKnot t | pt <- jperiodictxns j, t <- runPeriodicTransaction pt dates, spanContainsDate dates (tdate t) ] ++ (jtxns j) | ||||
|       ropts = reportopts_ opts | ||||
| 
 | ||||
|   -- "They start on or after the day following the latest normal transaction in the journal, or today if there are none." | ||||
|   let DateSpan mjournalstart _ = journalDateSpan False j  -- ignore secondary dates | ||||
|       forecaststart = fromMaybe today mjournalstart | ||||
| 
 | ||||
|   -- "They end on or before the specified report end date, or 180 days from today if unspecified." | ||||
|   mspecifiedstart <- fst <$> specifiedStartEndDates ropts | ||||
|   let forecastend = fromMaybe (addDays 180 today) mspecifiedstart | ||||
| 
 | ||||
|   let forecastspan = DateSpan (Just forecaststart) (Just forecastend) | ||||
|       forecasttxns = [ txnTieKnot t | pt <- jperiodictxns j | ||||
|                                     , t <- runPeriodicTransaction pt forecastspan | ||||
|                                     , spanContainsDate forecastspan (tdate t) | ||||
|                                     ] | ||||
|   return $ | ||||
|     if forecast_ ropts  | ||||
|     then return $ journalBalanceTransactions' opts j { jtxns = withForecast } | ||||
|     else return j | ||||
|       then journalBalanceTransactions' opts j{ jtxns = forecasttxns ++ jtxns j }  -- XXX wouldn't appending be better ? | ||||
|       else j | ||||
|   where       | ||||
|     journalBalanceTransactions' opts j = | ||||
|       let assrt = not . ignore_assertions_ $ inputopts_ opts | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user