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 | where | ||||||
| import Data.List | import Data.List | ||||||
| import Data.Maybe | import Data.Maybe | ||||||
|  | import Data.Ord | ||||||
| import qualified Data.Map as M | import qualified Data.Map as M | ||||||
| import Safe (headMay, lookupJustDef) | import Safe (headMay, lookupJustDef) | ||||||
| import Test.HUnit | import Test.HUnit | ||||||
| @ -183,6 +184,12 @@ filterAccounts p a | |||||||
|     | p a       = a : concatMap (filterAccounts p) (asubs a) |     | p a       = a : concatMap (filterAccounts p) (asubs a) | ||||||
|     | otherwise = 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. | -- | Search an account list by name. | ||||||
| lookupAccount :: AccountName -> [Account] -> Maybe Account | lookupAccount :: AccountName -> [Account] -> Maybe Account | ||||||
| lookupAccount a = find ((==a).aname) | lookupAccount a = find ((==a).aname) | ||||||
|  | |||||||
| @ -92,7 +92,7 @@ balanceReport opts q j = (items, total) | |||||||
|                          dbg1 "accts" $ |                          dbg1 "accts" $ | ||||||
|                          take 1 $ clipAccountsAndAggregate (queryDepth q) $ flattenAccounts accts |                          take 1 $ clipAccountsAndAggregate (queryDepth q) $ flattenAccounts accts | ||||||
|           | flat_ opts = dbg1 "accts" $ |           | flat_ opts = dbg1 "accts" $ | ||||||
|                          maybesort $ |                          maybesortflat $ | ||||||
|                          filterzeros $ |                          filterzeros $ | ||||||
|                          filterempty $ |                          filterempty $ | ||||||
|                          drop 1 $ clipAccountsAndAggregate (queryDepth q) $ flattenAccounts accts |                          drop 1 $ clipAccountsAndAggregate (queryDepth q) $ flattenAccounts accts | ||||||
| @ -101,6 +101,7 @@ balanceReport opts q j = (items, total) | |||||||
|                          drop 1 $ flattenAccounts $ |                          drop 1 $ flattenAccounts $ | ||||||
|                          markboring $ |                          markboring $ | ||||||
|                          prunezeros $ |                          prunezeros $ | ||||||
|  |                          maybesorttree $ | ||||||
|                          clipAccounts (queryDepth q) accts |                          clipAccounts (queryDepth q) accts | ||||||
|           where |           where | ||||||
|             balance     = if flat_ opts then aebalance else aibalance |             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))) |             filterempty = filter (\a -> anumpostings a > 0 || not (isZeroMixedAmount (balance a))) | ||||||
|             prunezeros  = if empty_ opts then id else fromMaybe nullacct . pruneAccounts (isZeroMixedAmount . balance) |             prunezeros  = if empty_ opts then id else fromMaybe nullacct . pruneAccounts (isZeroMixedAmount . balance) | ||||||
|             markboring  = if no_elide_ opts then id else markBoringParentAccounts |             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 |               where | ||||||
|                 maybeflip = if normalbalance_ opts == Just NormalNegative then id else flip |                 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' |       items = dbg1 "items" $ map (balanceReportItem opts q) accts' | ||||||
|       total | not (flat_ opts) = dbg1 "total" $ sum [amt | (_,_,indent,amt) <- items, indent == 0] |       total | not (flat_ opts) = dbg1 "total" $ sum [amt | (_,_,indent,amt) <- items, indent == 0] | ||||||
|             | otherwise        = dbg1 "total" $ |             | otherwise        = dbg1 "total" $ | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user