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