balance: with --flat, --drop N elides leading account name components. Feature or frill ?
This commit is contained in:
		
							parent
							
								
									5d7f141239
								
							
						
					
					
						commit
						73572e2d85
					
				| @ -140,7 +140,7 @@ showInterestingAccount opts l interestingaccts a = concatTopPadded [amt, "  ", n | ||||
|       bal | Flat `elem` opts = exclusiveBalance acct | ||||
|           | otherwise = abalance acct | ||||
|       acct = ledgerAccount l a | ||||
|       name | Flat `elem` opts = a | ||||
|       name | Flat `elem` opts = accountNameDrop (dropFromOpts opts) a | ||||
|            | otherwise        = depthspacer ++ partialname | ||||
|       parents = parentAccountNames a | ||||
|       interestingparents = filter (`elem` interestingaccts) parents | ||||
|  | ||||
| @ -76,6 +76,7 @@ options = [ | ||||
|  ,Option "E" ["empty"]        (NoArg  Empty)         "show empty/zero things which are normally elided" | ||||
|  ,Option "R" ["real"]         (NoArg  Real)          "report only on real (non-virtual) transactions" | ||||
|  ,Option ""  ["flat"]         (NoArg  Flat)          "balance report: show full account names, unindented" | ||||
|  ,Option ""    ["drop"]       (ReqArg Drop "N")     "balance report: with --flat, elide first N account name components" | ||||
|  ,Option ""    ["no-total"]     (NoArg  NoTotal)       "balance report: hide the final total" | ||||
| -- ,Option "s" ["subtotal"]     (NoArg  SubTotal)      "balance report: show subaccounts" | ||||
|  ,Option "W" ["weekly"]       (NoArg  WeeklyOpt)     "register report: show weekly summary" | ||||
| @ -115,6 +116,7 @@ data Opt = | ||||
|     Empty |  | ||||
|     Real |  | ||||
|     Flat | | ||||
|     Drop   {value::String} | | ||||
|     NoTotal | | ||||
|     SubTotal | | ||||
|     WeeklyOpt | | ||||
| @ -212,13 +214,20 @@ intervalFromOpts opts = | ||||
|       periodopts   = reverse $ optValuesForConstructor Period opts | ||||
|       intervalopts = reverse $ filter (`elem` [WeeklyOpt,MonthlyOpt,QuarterlyOpt,YearlyOpt]) opts | ||||
| 
 | ||||
| -- | Get the value of the (last) depth option, if any, otherwise a large number. | ||||
| -- | Get the value of the (last) depth option, if any. | ||||
| depthFromOpts :: [Opt] -> Maybe Int | ||||
| depthFromOpts opts = listtomaybeint $ optValuesForConstructor Depth opts | ||||
|     where | ||||
|       listtomaybeint [] = Nothing | ||||
|       listtomaybeint vs = Just $ read $ last vs | ||||
| 
 | ||||
| -- | Get the value of the (last) drop option, if any, otherwise 0. | ||||
| dropFromOpts :: [Opt] -> Int | ||||
| dropFromOpts opts = fromMaybe 0 $ listtomaybeint $ optValuesForConstructor Drop opts | ||||
|     where | ||||
|       listtomaybeint [] = Nothing | ||||
|       listtomaybeint vs = Just $ read $ last vs | ||||
| 
 | ||||
| -- | Get the value of the (last) display option, if any. | ||||
| displayExprFromOpts :: [Opt] -> Maybe String | ||||
| displayExprFromOpts opts = listtomaybe $ optValuesForConstructor Display opts | ||||
|  | ||||
| @ -282,13 +282,16 @@ Examples: | ||||
|     $ hledger balance food -p 'last month' | ||||
| 
 | ||||
| A final total is displayed, use `--no-total` to suppress this. Also, the | ||||
| `--depth` option shows accounts only to the specified depth, useful for an overview: | ||||
| `--depth N` option shows accounts only to the specified depth, useful for | ||||
| an overview: | ||||
| 
 | ||||
|     $ for y in 2006 2007 2008 2009 2010; do echo; echo $y; hledger -f $y.ledger balance ^expenses --depth 2; done | ||||
| 
 | ||||
| With `--flat`, a non-hierarchical list of full account names is displayed | ||||
| instead. This mode shows just the accounts actually contributing to the | ||||
| balance, making the arithmetic a little more obvious to non-hledger users. | ||||
| In this mode you can also use `--drop N` to elide the first few account | ||||
| name components. | ||||
| 
 | ||||
| ##### chart | ||||
| 
 | ||||
|  | ||||
| @ -32,6 +32,9 @@ accountNameLevel :: AccountName -> Int | ||||
| accountNameLevel "" = 0 | ||||
| accountNameLevel a = length (filter (==acctsepchar) a) + 1 | ||||
| 
 | ||||
| accountNameDrop :: Int -> AccountName -> AccountName | ||||
| accountNameDrop n = accountNameFromComponents . drop n . accountNameComponents | ||||
| 
 | ||||
| -- | ["a:b:c","d:e"] -> ["a","a:b","a:b:c","d","d:e"] | ||||
| expandAccountNames :: [AccountName] -> [AccountName] | ||||
| expandAccountNames as = nub $ concatMap expand as | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user