an Account now knows how many postings it has
This commit is contained in:
parent
2844333857
commit
d21085cc6e
@ -10,6 +10,7 @@ account, and subaccounting-excluding and -including balances.
|
|||||||
module Hledger.Data.Account
|
module Hledger.Data.Account
|
||||||
where
|
where
|
||||||
import Data.List
|
import Data.List
|
||||||
|
import Data.Maybe
|
||||||
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
|
||||||
@ -44,6 +45,7 @@ nullacct = Account
|
|||||||
{ aname = ""
|
{ aname = ""
|
||||||
, aparent = Nothing
|
, aparent = Nothing
|
||||||
, asubs = []
|
, asubs = []
|
||||||
|
, anumpostings = 0
|
||||||
, aebalance = nullmixedamt
|
, aebalance = nullmixedamt
|
||||||
, aibalance = nullmixedamt
|
, aibalance = nullmixedamt
|
||||||
, aboring = False
|
, aboring = False
|
||||||
@ -57,10 +59,12 @@ accountsFromPostings ps =
|
|||||||
let
|
let
|
||||||
acctamts = [(paccount p,pamount p) | p <- ps]
|
acctamts = [(paccount p,pamount p) | p <- ps]
|
||||||
grouped = groupBy (\a b -> fst a == fst b) $ sort $ acctamts
|
grouped = groupBy (\a b -> fst a == fst b) $ sort $ acctamts
|
||||||
|
counted = [(a, length acctamts) | acctamts@((a,_):_) <- grouped]
|
||||||
summed = map (\as@((aname,_):_) -> (aname, sum $ map snd as)) grouped -- always non-empty
|
summed = map (\as@((aname,_):_) -> (aname, sum $ map snd as)) grouped -- always non-empty
|
||||||
nametree = treeFromPaths $ map (expandAccountName . fst) summed
|
nametree = treeFromPaths $ map (expandAccountName . fst) summed
|
||||||
acctswithnames = nameTreeToAccount "root" nametree
|
acctswithnames = nameTreeToAccount "root" nametree
|
||||||
acctswithebals = mapAccounts setebalance acctswithnames where setebalance a = a{aebalance=lookupJustDef nullmixedamt (aname a) summed}
|
acctswithnumps = mapAccounts setnumps acctswithnames where setnumps a = a{anumpostings=fromMaybe 0 $ lookup (aname a) counted}
|
||||||
|
acctswithebals = mapAccounts setebalance acctswithnumps where setebalance a = a{aebalance=lookupJustDef nullmixedamt (aname a) summed}
|
||||||
acctswithibals = sumAccounts acctswithebals
|
acctswithibals = sumAccounts acctswithebals
|
||||||
acctswithparents = tieAccountParents acctswithibals
|
acctswithparents = tieAccountParents acctswithibals
|
||||||
acctsflattened = flattenAccounts acctswithparents
|
acctsflattened = flattenAccounts acctswithparents
|
||||||
|
|||||||
@ -210,7 +210,7 @@ data Account = Account {
|
|||||||
aname :: AccountName, -- ^ this account's full name
|
aname :: AccountName, -- ^ this account's full name
|
||||||
aebalance :: MixedAmount, -- ^ this account's balance, excluding subaccounts
|
aebalance :: MixedAmount, -- ^ this account's balance, excluding subaccounts
|
||||||
asubs :: [Account], -- ^ sub-accounts
|
asubs :: [Account], -- ^ sub-accounts
|
||||||
-- anumpostings :: Int -- ^ number of postings to this account
|
anumpostings :: Int, -- ^ number of postings to this account
|
||||||
-- derived from the above:
|
-- derived from the above:
|
||||||
aibalance :: MixedAmount, -- ^ this account's balance, including subaccounts
|
aibalance :: MixedAmount, -- ^ this account's balance, including subaccounts
|
||||||
aparent :: Maybe Account, -- ^ parent account
|
aparent :: Maybe Account, -- ^ parent account
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user