lib: Default to PeriodChange report when using ValueChangeReport.
This commit is contained in:
		
							parent
							
								
									3f408c2117
								
							
						
					
					
						commit
						efb37c3343
					
				| @ -22,6 +22,7 @@ module Hledger.Reports.ReportOptions ( | ||||
|   updateReportSpec, | ||||
|   updateReportSpecWith, | ||||
|   rawOptsToReportSpec, | ||||
|   balanceTypeOverride, | ||||
|   flat_, | ||||
|   tree_, | ||||
|   reportOptsToggleStatus, | ||||
| @ -190,7 +191,7 @@ rawOptsToReportOpts rawopts = do | ||||
|         Just (Right x)  -> return x | ||||
|         Just (Left err) -> fail $ "could not parse format option: " ++ err | ||||
| 
 | ||||
|     let reportopts = defreportopts | ||||
|     return defreportopts | ||||
|           {period_      = periodFromRawOpts d rawopts | ||||
|           ,interval_    = intervalFromRawOpts rawopts | ||||
|           ,statuses_    = statusesFromRawOpts rawopts | ||||
| @ -225,16 +226,6 @@ rawOptsToReportOpts rawopts = do | ||||
|           ,transpose_   = boolopt "transpose" rawopts | ||||
|           } | ||||
| 
 | ||||
|     adjustReportDefaults reportopts | ||||
| 
 | ||||
| -- | Warn users about option combinations which produce uninteresting results. | ||||
| adjustReportDefaults :: ReportOpts -> IO ReportOpts | ||||
| adjustReportDefaults ropts = case reporttype_ ropts of | ||||
|     ValueChangeReport -> case fromMaybe (AtEnd Nothing) $ value_ ropts of | ||||
|         v@(AtEnd _)   -> return ropts{value_=Just v}  -- Set value_ to AtEnd by default, unless overridden | ||||
|         _             -> fail "--valuechange only produces sensible results with --value=end" | ||||
|     _                 -> return ropts | ||||
| 
 | ||||
| -- | The result of successfully parsing a ReportOpts on a particular | ||||
| -- Day. Any ambiguous dates are completed and Queries are parsed, | ||||
| -- ensuring that there are no regular expression errors. Values here | ||||
| @ -306,13 +297,19 @@ reporttypeopt = | ||||
|       _             -> Nothing | ||||
| 
 | ||||
| balancetypeopt :: RawOpts -> BalanceType | ||||
| balancetypeopt = | ||||
|   fromMaybe PeriodChange . choiceopt parse where | ||||
| balancetypeopt = fromMaybe PeriodChange . balanceTypeOverride | ||||
| 
 | ||||
| balanceTypeOverride :: RawOpts -> Maybe BalanceType | ||||
| balanceTypeOverride rawopts = choiceopt parse rawopts <|> reportbal | ||||
|   where | ||||
|     parse = \case | ||||
|       "historical" -> Just HistoricalBalance | ||||
|       "cumulative" -> Just CumulativeChange | ||||
|       "change"     -> Just PeriodChange | ||||
|       _            -> Nothing | ||||
|     reportbal = case reporttypeopt rawopts of | ||||
|       ValueChangeReport -> Just PeriodChange | ||||
|       _                 -> Nothing | ||||
| 
 | ||||
| -- Get the period specified by any -b/--begin, -e/--end and/or -p/--period | ||||
| -- options appearing in the command line. | ||||
| @ -440,17 +437,25 @@ reportOptsToggleStatus s ropts@ReportOpts{statuses_=ss} | ||||
| -- allowed to combine -B/--cost with any other valuation type. If | ||||
| -- there's more than one valuation type, the rightmost flag wins. | ||||
| valuationTypeFromRawOpts :: RawOpts -> (Costing, Maybe ValuationType) | ||||
| valuationTypeFromRawOpts rawopts = (costing, lastMay $ mapMaybe snd valuationopts) | ||||
| valuationTypeFromRawOpts rawopts = (costing, valuation) | ||||
|   where | ||||
|     costing   = if (any ((Cost==) . fst) valuationopts) then Cost else NoCost | ||||
|     valuation = case reporttypeopt rawopts of | ||||
|         ValueChangeReport -> case directval of | ||||
|             Nothing        -> Just $ AtEnd Nothing  -- If no valuation requested for valuechange, use AtEnd | ||||
|             Just (AtEnd _) -> directval             -- If AtEnd valuation requested, use it | ||||
|             Just _         -> usageError "--valuechange only produces sensible results with --value=end" | ||||
|         _                  -> directval             -- Otherwise, use requested valuation | ||||
|       where directval = lastMay $ mapMaybe snd valuationopts | ||||
| 
 | ||||
|     valuationopts = collectopts valuationfromrawopt rawopts | ||||
|     valuationfromrawopt (n,v)  -- option name, value | ||||
|       | n == "B"     = Just (Cost,   Nothing) | ||||
|       | n == "V"     = Just (NoCost, Just $ AtEnd Nothing) | ||||
|       | n == "X"     = Just (NoCost, Just $ AtEnd (Just $ T.pack v)) | ||||
|       | n == "value" = Just $ valuation v | ||||
|       | n == "value" = Just $ valueopt v | ||||
|       | otherwise    = Nothing | ||||
|     valuation v | ||||
|     valueopt v | ||||
|       | t `elem` ["cost","c"]  = (Cost, usageError "--value=cost,COMM is no longer supported, please specify valuation explicitly, e.g. --cost --value=then,COMM" <$ mc) | ||||
|       | t `elem` ["then" ,"t"] = (NoCost, Just $ AtThen mc) | ||||
|       | t `elem` ["end" ,"e"]  = (NoCost, Just $ AtEnd  mc) | ||||
|  | ||||
| @ -106,13 +106,7 @@ compoundBalanceCommand CompoundBalanceCommandSpec{..} opts@CliOpts{reportspec_=r | ||||
|   where | ||||
|     ropts@ReportOpts{..} = rsOpts rspec | ||||
|     -- use the default balance type for this report, unless the user overrides | ||||
|     mBalanceTypeOverride = | ||||
|       choiceopt parse rawopts where | ||||
|         parse = \case | ||||
|           "historical" -> Just HistoricalBalance | ||||
|           "cumulative" -> Just CumulativeChange | ||||
|           "change"     -> Just PeriodChange | ||||
|           _            -> Nothing | ||||
|     mBalanceTypeOverride = balanceTypeOverride rawopts | ||||
|     balancetype = fromMaybe cbctype mBalanceTypeOverride | ||||
|     -- Set balance type in the report options. | ||||
|     ropts' = ropts{balancetype_=balancetype} | ||||
|  | ||||
| @ -55,7 +55,7 @@ Ending balances (historical) in 2000-01-01..2000-04-30, valued at period ends: | ||||
|         ||       15 B         8 B        15 B        20 B  | ||||
| 
 | ||||
| # 4. Balance sheet also reports on value change | ||||
| $ hledger -f- balancesheet -MN --valuechange --change -b 2000 | ||||
| $ hledger -f- balancesheet -MN --valuechange -b 2000 | ||||
| Balance Sheet 2000-01-01..2000-04-30 (Period-End Value Changes) | ||||
| 
 | ||||
|              ||  Jan   Feb  Mar  Apr  | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user