bal: --sort-amount sorts tree-mode single-column balance reports too
This commit is contained in:
		
							parent
							
								
									e04807d251
								
							
						
					
					
						commit
						d527384261
					
				| @ -11,6 +11,7 @@ module Hledger.Data.Account | ||||
| where | ||||
| import Data.List | ||||
| import Data.Maybe | ||||
| import Data.Ord | ||||
| import qualified Data.Map as M | ||||
| import Safe (headMay, lookupJustDef) | ||||
| import Test.HUnit | ||||
| @ -183,6 +184,12 @@ filterAccounts p a | ||||
|     | p a       = a : concatMap (filterAccounts p) (asubs a) | ||||
|     | otherwise = concatMap (filterAccounts p) (asubs a) | ||||
| 
 | ||||
| -- | Sort an account tree by inclusive amount. | ||||
| sortAccountTreeByAmount :: Account -> Account | ||||
| sortAccountTreeByAmount a | ||||
|   | null $ asubs a = a | ||||
|   | otherwise      = a{asubs=sortBy (flip $ comparing aibalance) $ map sortAccountTreeByAmount $ asubs a} | ||||
| 
 | ||||
| -- | Search an account list by name. | ||||
| lookupAccount :: AccountName -> [Account] -> Maybe Account | ||||
| lookupAccount a = find ((==a).aname) | ||||
|  | ||||
| @ -92,7 +92,7 @@ balanceReport opts q j = (items, total) | ||||
|                          dbg1 "accts" $ | ||||
|                          take 1 $ clipAccountsAndAggregate (queryDepth q) $ flattenAccounts accts | ||||
|           | flat_ opts = dbg1 "accts" $ | ||||
|                          maybesort $ | ||||
|                          maybesortflat $ | ||||
|                          filterzeros $ | ||||
|                          filterempty $ | ||||
|                          drop 1 $ clipAccountsAndAggregate (queryDepth q) $ flattenAccounts accts | ||||
| @ -101,6 +101,7 @@ balanceReport opts q j = (items, total) | ||||
|                          drop 1 $ flattenAccounts $ | ||||
|                          markboring $ | ||||
|                          prunezeros $ | ||||
|                          maybesorttree $ | ||||
|                          clipAccounts (queryDepth q) accts | ||||
|           where | ||||
|             balance     = if flat_ opts then aebalance else aibalance | ||||
| @ -108,9 +109,12 @@ balanceReport opts q j = (items, total) | ||||
|             filterempty = filter (\a -> anumpostings a > 0 || not (isZeroMixedAmount (balance a))) | ||||
|             prunezeros  = if empty_ opts then id else fromMaybe nullacct . pruneAccounts (isZeroMixedAmount . balance) | ||||
|             markboring  = if no_elide_ opts then id else markBoringParentAccounts | ||||
|             maybesort   = if sort_amount_ opts then sortBy (maybeflip $ comparing balance) else id | ||||
|             maybesortflat | sort_amount_ opts = sortBy (maybeflip $ comparing balance) | ||||
|                           | otherwise = id | ||||
|               where | ||||
|                 maybeflip = if normalbalance_ opts == Just NormalNegative then id else flip | ||||
|             maybesorttree | sort_amount_ opts = sortAccountTreeByAmount  | ||||
|                           | otherwise = id | ||||
|       items = dbg1 "items" $ map (balanceReportItem opts q) accts' | ||||
|       total | not (flat_ opts) = dbg1 "total" $ sum [amt | (_,_,indent,amt) <- items, indent == 0] | ||||
|             | otherwise        = dbg1 "total" $ | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user