mirror of
https://github.com/simonmichael/hledger.git
synced 2024-09-20 02:37:12 +03:00
balance: ledger compatibility fix: don't elide parent accounts with multiple displayed subaccounts
This commit is contained in:
parent
ea0cbaea40
commit
f79b272ff3
@ -539,6 +539,7 @@ isInteresting :: ReportOpts -> Ledger -> AccountName -> Bool
|
||||
isInteresting opts l a | flat_ opts = isInterestingFlat opts l a
|
||||
| otherwise = isInterestingIndented opts l a
|
||||
|
||||
-- | Determine whether an account should get its own line in the --flat balance report.
|
||||
isInterestingFlat :: ReportOpts -> Ledger -> AccountName -> Bool
|
||||
isInterestingFlat opts l a = notempty || emptyflag
|
||||
where
|
||||
@ -546,16 +547,19 @@ isInterestingFlat opts l a = notempty || emptyflag
|
||||
notempty = not $ isZeroMixedAmount $ exclusiveBalance acct
|
||||
emptyflag = empty_ opts
|
||||
|
||||
-- | Determine whether an account should get its own line in the indented
|
||||
-- balance report. Cf Balance module doc.
|
||||
isInterestingIndented :: ReportOpts -> Ledger -> AccountName -> Bool
|
||||
isInterestingIndented opts l a
|
||||
| numinterestingsubs==1 && not atmaxdepth = notlikesub
|
||||
| otherwise = notzero || emptyflag
|
||||
| numinterestingsubs == 1 && samebalanceassub && not atmaxdepth = False
|
||||
| numinterestingsubs < 2 && zerobalance && not emptyflag = False
|
||||
| otherwise = True
|
||||
where
|
||||
atmaxdepth = isJust d && Just (accountNameLevel a) == d where d = depth_ opts
|
||||
emptyflag = empty_ opts
|
||||
acct = ledgerAccount l a
|
||||
notzero = not $ isZeroMixedAmount inclbalance where inclbalance = abalance acct
|
||||
notlikesub = not $ isZeroMixedAmount exclbalance where exclbalance = sumPostings $ apostings acct
|
||||
zerobalance = isZeroMixedAmount inclbalance where inclbalance = abalance acct
|
||||
samebalanceassub = isZeroMixedAmount exclbalance where exclbalance = sumPostings $ apostings acct
|
||||
numinterestingsubs = length $ filter isInterestingTree subtrees
|
||||
where
|
||||
isInterestingTree = treeany (isInteresting opts l . aname)
|
||||
|
@ -249,20 +249,6 @@ tests_Hledger_Cli = TestList
|
||||
," 0"
|
||||
]
|
||||
|
||||
,"balance report elides zero-balance root account(s)" ~: do
|
||||
j <- readJournal'
|
||||
(unlines
|
||||
["2008/1/1 one"
|
||||
," test:a 1"
|
||||
," test:b"
|
||||
])
|
||||
accountsReportAsText defreportopts (accountsReport defreportopts nullfilterspec j) `is`
|
||||
[" 1 test:a"
|
||||
," -1 test:b"
|
||||
,"--------------------"
|
||||
," 0"
|
||||
]
|
||||
|
||||
]
|
||||
|
||||
,"journalCanonicaliseAmounts" ~:
|
||||
|
@ -82,15 +82,14 @@ Also, the balance report shows the total of all displayed accounts, when
|
||||
that is non-zero. Here, it is displayed because the accounts shown add up
|
||||
to $-1.
|
||||
|
||||
Here is a more precise definition of \"interesting\" accounts in ledger's
|
||||
balance report:
|
||||
|
||||
- an account which has just one interesting subaccount branch, and which
|
||||
is not at the report's maximum depth, is interesting if the balance is
|
||||
different from the subaccount's, and otherwise boring.
|
||||
|
||||
- any other account is interesting if it has a non-zero balance, or the -E
|
||||
flag is used.
|
||||
Also, non-interesting accounts may be elided. Here's an imperfect
|
||||
description of the ledger balance command's eliding behaviour:
|
||||
\"Interesting\" accounts are displayed on their own line. An account less
|
||||
deep than the report's max depth, with just one interesting subaccount,
|
||||
and the same balance as the subaccount, is non-interesting, and prefixed
|
||||
to the subaccount's line, unless (hledger's) --no-elide is in effect.
|
||||
An account with a zero inclusive balance and less than two interesting
|
||||
subaccounts is not displayed at all, unless --empty is in effect.
|
||||
|
||||
-}
|
||||
|
||||
|
@ -1,3 +1,4 @@
|
||||
#!/usr/bin/env shelltest
|
||||
# 1. One commodity. Zero accounts should be elided but the final total should not.
|
||||
bin/hledger -f - balance
|
||||
<<<
|
||||
@ -12,3 +13,36 @@ bin/hledger -f - balance
|
||||
--------------------
|
||||
0
|
||||
>>>=0
|
||||
|
||||
# 2. An uninteresting parent account (with same balance as its single subaccount) is elided by default, like ledger
|
||||
bin/hledger -f - balance --no-total
|
||||
<<<
|
||||
1/1
|
||||
(a:b) 1
|
||||
>>>
|
||||
1 a:b
|
||||
>>>=0
|
||||
|
||||
# 3. But not with --no-elide
|
||||
bin/hledger -f - balance --no-total --no-elide
|
||||
<<<
|
||||
1/1
|
||||
(a:b) 1
|
||||
>>>
|
||||
1 a
|
||||
1 b
|
||||
>>>=0
|
||||
|
||||
# 4. Nor when it has more than one subaccount
|
||||
bin/hledger -f - balance --no-total
|
||||
<<<
|
||||
1/1
|
||||
(a:b) 1
|
||||
(a:c) -1
|
||||
>>>
|
||||
0 a
|
||||
1 b
|
||||
-1 c
|
||||
>>>2
|
||||
>>>=0
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user