94: fix 0.19 regression showing wrong total balance with balance --flat
and distinguish better between account depth and item indent level
This commit is contained in:
parent
00b4efffc9
commit
f54e3299b9
@ -531,7 +531,7 @@ type AccountsReport = ([AccountsReportItem] -- line items, one per account
|
|||||||
)
|
)
|
||||||
type AccountsReportItem = (AccountName -- full account name
|
type AccountsReportItem = (AccountName -- full account name
|
||||||
,AccountName -- short account name for display (the leaf name, prefixed by any boring parents immediately above)
|
,AccountName -- short account name for display (the leaf name, prefixed by any boring parents immediately above)
|
||||||
,Int -- how many steps to indent this account (0-based account depth excluding boring parents)
|
,Int -- how many steps to indent this account (0 with --flat, otherwise the 0-based account depth excluding boring parents)
|
||||||
,MixedAmount) -- account balance, includes subs unless --flat is present
|
,MixedAmount) -- account balance, includes subs unless --flat is present
|
||||||
|
|
||||||
-- | Select accounts, and get their balances at the end of the selected
|
-- | Select accounts, and get their balances at the end of the selected
|
||||||
@ -552,7 +552,7 @@ accountsReport opts q j = (items, total)
|
|||||||
markboring | no_elide_ opts = id
|
markboring | no_elide_ opts = id
|
||||||
| otherwise = markBoringParentAccounts
|
| otherwise = markBoringParentAccounts
|
||||||
items = map (accountsReportItem opts) accts'
|
items = map (accountsReportItem opts) accts'
|
||||||
total = sum [amt | (_,_,depth,amt) <- items, depth==0]
|
total = sum [amt | (a,_,_,amt) <- items, accountNameLevel a == 1]
|
||||||
|
|
||||||
-- | In an account tree with zero-balance leaves removed, mark the
|
-- | In an account tree with zero-balance leaves removed, mark the
|
||||||
-- elidable parent accounts (those with one subaccount and no balance
|
-- elidable parent accounts (those with one subaccount and no balance
|
||||||
@ -565,12 +565,12 @@ markBoringParentAccounts = tieAccountParents . mapAccounts mark
|
|||||||
|
|
||||||
accountsReportItem :: ReportOpts -> Account -> AccountsReportItem
|
accountsReportItem :: ReportOpts -> Account -> AccountsReportItem
|
||||||
accountsReportItem opts a@Account{aname=name, aibalance=ibal}
|
accountsReportItem opts a@Account{aname=name, aibalance=ibal}
|
||||||
| flat_ opts = (name, name, 0, ibal)
|
| flat_ opts = (name, name, 0, ibal)
|
||||||
| otherwise = (name, elidedname, depth, ibal)
|
| otherwise = (name, elidedname, indent, ibal)
|
||||||
where
|
where
|
||||||
elidedname = accountNameFromComponents (adjacentboringparentnames ++ [accountLeafName name])
|
elidedname = accountNameFromComponents (adjacentboringparentnames ++ [accountLeafName name])
|
||||||
adjacentboringparentnames = reverse $ map (accountLeafName.aname) $ takeWhile aboring $ parents
|
adjacentboringparentnames = reverse $ map (accountLeafName.aname) $ takeWhile aboring $ parents
|
||||||
depth = length $ filter (not.aboring) parents
|
indent = length $ filter (not.aboring) parents
|
||||||
parents = init $ parentAccounts a
|
parents = init $ parentAccounts a
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
31
tests/94.test
Normal file
31
tests/94.test
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
# issue 94: total balance should be that of top-level accounts, with and without --flat
|
||||||
|
# 1.
|
||||||
|
hledgerdev -f - balance
|
||||||
|
<<<
|
||||||
|
1/1
|
||||||
|
(a) 1
|
||||||
|
|
||||||
|
1/1
|
||||||
|
(a:aa) 1
|
||||||
|
>>>
|
||||||
|
2 a
|
||||||
|
1 aa
|
||||||
|
--------------------
|
||||||
|
2
|
||||||
|
>>>= 0
|
||||||
|
|
||||||
|
# 2.
|
||||||
|
hledgerdev -f - balance --flat
|
||||||
|
<<<
|
||||||
|
1/1
|
||||||
|
(a) 1
|
||||||
|
|
||||||
|
1/1
|
||||||
|
(a:aa) 1
|
||||||
|
>>>
|
||||||
|
2 a
|
||||||
|
1 a:aa
|
||||||
|
--------------------
|
||||||
|
2
|
||||||
|
>>>= 0
|
||||||
|
|
||||||
Loading…
Reference in New Issue
Block a user