balance: with --tree and --flat, use the last (fix #219)
This commit is contained in:
		
							parent
							
								
									d352bbedd2
								
							
						
					
					
						commit
						855d4e1131
					
				| @ -122,7 +122,7 @@ multiBalanceReport opts q j = MultiBalanceReport (displayspans, items, totals) | |||||||
|             (startbalanceitems,_) = dbg "starting balance report" $ balanceReport opts' precedingq j |             (startbalanceitems,_) = dbg "starting balance report" $ balanceReport opts' precedingq j | ||||||
|                                     where |                                     where | ||||||
|                                       opts' | tree_ opts = opts{no_elide_=True} |                                       opts' | tree_ opts = opts{no_elide_=True} | ||||||
|                                             | otherwise  = opts{flat_=True} |                                             | otherwise  = opts{accountlistmode_=ALFlat} | ||||||
|       startingBalanceFor a = fromMaybe nullmixedamt $ lookup a startacctbals |       startingBalanceFor a = fromMaybe nullmixedamt $ lookup a startacctbals | ||||||
|       startAccts = dbg "startAccts" $ map fst startacctbals |       startAccts = dbg "startAccts" $ map fst startacctbals | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -8,9 +8,12 @@ Options common to most hledger reports. | |||||||
| module Hledger.Reports.ReportOptions ( | module Hledger.Reports.ReportOptions ( | ||||||
|   ReportOpts(..), |   ReportOpts(..), | ||||||
|   BalanceType(..), |   BalanceType(..), | ||||||
|  |   AccountListMode(..), | ||||||
|   FormatStr, |   FormatStr, | ||||||
|   defreportopts, |   defreportopts, | ||||||
|   rawOptsToReportOpts, |   rawOptsToReportOpts, | ||||||
|  |   flat_, | ||||||
|  |   tree_, | ||||||
|   dateSpanFromOpts, |   dateSpanFromOpts, | ||||||
|   intervalFromOpts, |   intervalFromOpts, | ||||||
|   clearedValueFromOpts, |   clearedValueFromOpts, | ||||||
| @ -47,6 +50,11 @@ data BalanceType = PeriodBalance     -- ^ The change of balance in each period. | |||||||
| 
 | 
 | ||||||
| instance Default BalanceType where def = PeriodBalance | instance Default BalanceType where def = PeriodBalance | ||||||
| 
 | 
 | ||||||
|  | -- | Should accounts be displayed: in the command's default style, hierarchically, or as a flat list ? | ||||||
|  | data AccountListMode = ALDefault | ALTree | ALFlat deriving (Eq, Show, Data, Typeable) | ||||||
|  | 
 | ||||||
|  | instance Default AccountListMode where def = ALDefault | ||||||
|  | 
 | ||||||
| -- | Standard options for customising report filtering and output, | -- | Standard options for customising report filtering and output, | ||||||
| -- corresponding to hledger's command-line options and query language | -- corresponding to hledger's command-line options and query language | ||||||
| -- arguments. Used in hledger-lib and above. | -- arguments. Used in hledger-lib and above. | ||||||
| @ -75,8 +83,7 @@ data ReportOpts = ReportOpts { | |||||||
|     ,related_        :: Bool |     ,related_        :: Bool | ||||||
|     -- balance |     -- balance | ||||||
|     ,balancetype_    :: BalanceType |     ,balancetype_    :: BalanceType | ||||||
|     ,flat_           :: Bool -- mutually |     ,accountlistmode_  :: AccountListMode | ||||||
|     ,tree_           :: Bool -- exclusive |  | ||||||
|     ,drop_           :: Int |     ,drop_           :: Int | ||||||
|     ,no_total_       :: Bool |     ,no_total_       :: Bool | ||||||
|  } deriving (Show, Data, Typeable) |  } deriving (Show, Data, Typeable) | ||||||
| @ -110,7 +117,6 @@ defreportopts = ReportOpts | |||||||
|     def |     def | ||||||
|     def |     def | ||||||
|     def |     def | ||||||
|     def |  | ||||||
| 
 | 
 | ||||||
| rawOptsToReportOpts :: RawOpts -> IO ReportOpts | rawOptsToReportOpts :: RawOpts -> IO ReportOpts | ||||||
| rawOptsToReportOpts rawopts = do | rawOptsToReportOpts rawopts = do | ||||||
| @ -138,12 +144,18 @@ rawOptsToReportOpts rawopts = do | |||||||
|     ,average_     = boolopt "average" rawopts |     ,average_     = boolopt "average" rawopts | ||||||
|     ,related_     = boolopt "related" rawopts |     ,related_     = boolopt "related" rawopts | ||||||
|     ,balancetype_ = balancetypeopt rawopts |     ,balancetype_ = balancetypeopt rawopts | ||||||
|     ,flat_        = boolopt "flat" rawopts |     ,accountlistmode_ = accountlistmodeopt rawopts | ||||||
|     ,tree_        = boolopt "tree" rawopts |  | ||||||
|     ,drop_        = intopt "drop" rawopts |     ,drop_        = intopt "drop" rawopts | ||||||
|     ,no_total_    = boolopt "no-total" rawopts |     ,no_total_    = boolopt "no-total" rawopts | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | accountlistmodeopt :: RawOpts -> AccountListMode | ||||||
|  | accountlistmodeopt rawopts = | ||||||
|  |   case reverse $ filter (`elem` ["tree","flat"]) $ map fst rawopts of | ||||||
|  |     ("tree":_) -> ALTree | ||||||
|  |     ("flat":_) -> ALFlat | ||||||
|  |     _          -> ALDefault | ||||||
|  | 
 | ||||||
| balancetypeopt :: RawOpts -> BalanceType | balancetypeopt :: RawOpts -> BalanceType | ||||||
| balancetypeopt rawopts | balancetypeopt rawopts | ||||||
|     | length [o | o <- ["cumulative","historical"], isset o] > 1 |     | length [o | o <- ["cumulative","historical"], isset o] > 1 | ||||||
| @ -181,6 +193,13 @@ maybeperiodopt d rawopts = | |||||||
|                 Just |                 Just | ||||||
|                 $ parsePeriodExpr d s |                 $ parsePeriodExpr d s | ||||||
| 
 | 
 | ||||||
|  | -- | Legacy-compatible convenience aliases for accountlistmode_. | ||||||
|  | tree_ :: ReportOpts -> Bool | ||||||
|  | tree_ = (==ALTree) . accountlistmode_ | ||||||
|  | 
 | ||||||
|  | flat_ :: ReportOpts -> Bool | ||||||
|  | flat_ = (==ALFlat) . accountlistmode_ | ||||||
|  | 
 | ||||||
| -- | Figure out the date span we should report on, based on any | -- | Figure out the date span we should report on, based on any | ||||||
| -- begin/end/period options provided. A period option will cause begin and | -- begin/end/period options provided. A period option will cause begin and | ||||||
| -- end options to be ignored. | -- end options to be ignored. | ||||||
|  | |||||||
| @ -38,7 +38,7 @@ print' opts@CliOpts{reportopts_=ropts} j = do | |||||||
|   let q = queryFromOpts d ropts |   let q = queryFromOpts d ropts | ||||||
|       fmt = outputFormatFromOpts opts |       fmt = outputFormatFromOpts opts | ||||||
|       (render, ropts') = case fmt of |       (render, ropts') = case fmt of | ||||||
|         "csv" -> ((++"\n") . printCSV . entriesReportAsCsv, ropts{flat_=True}) |         "csv" -> ((++"\n") . printCSV . entriesReportAsCsv, ropts{accountlistmode_=ALFlat}) | ||||||
|         _     -> (entriesReportAsText,                      ropts) |         _     -> (entriesReportAsText,                      ropts) | ||||||
|   writeOutput opts $ render $ entriesReport ropts' q j |   writeOutput opts $ render $ entriesReport ropts' q j | ||||||
| 
 | 
 | ||||||
|  | |||||||
							
								
								
									
										23
									
								
								tests/balance/219.test
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								tests/balance/219.test
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,23 @@ | |||||||
|  | # issue 219, --tree and --flat flags should override each other cleanly | ||||||
|  | # 1. multiple flags ending with --flat, equivalent to --flat | ||||||
|  | hledgerdev -f balance-multicol.journal bal -MEH --no-total date:2013/1 --tree --flat | ||||||
|  | >>> | ||||||
|  | Ending balances (historical) in 2013/01: | ||||||
|  | 
 | ||||||
|  |                  ||  2013/01/31  | ||||||
|  | =================++============= | ||||||
|  |  assets:checking ||          10  | ||||||
|  | 
 | ||||||
|  | >>>= 0 | ||||||
|  | 
 | ||||||
|  | # 2. multiple flags ending with --tree, equivalent to --tree | ||||||
|  | hledgerdev -f balance-multicol.journal bal -MEH --no-total date:2013/1 --flat --tree | ||||||
|  | >>> | ||||||
|  | Ending balances (historical) in 2013/01: | ||||||
|  | 
 | ||||||
|  |             ||  2013/01/31  | ||||||
|  | ============++============= | ||||||
|  |  assets     ||          10  | ||||||
|  |    checking ||          10  | ||||||
|  | 
 | ||||||
|  | >>>= 0 | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user