lib: fix budget display to always show %% consumed and handle costs
For multi-column balance report, if there are no transactions in the given period for budgeted account, display [0% of <budget>] for consistency. If balance is a mix of commodities, convert to cost basis for the purposes of computing percent of balance spent.
This commit is contained in:
parent
30e4d26534
commit
58c755df86
@ -564,10 +564,15 @@ multiBalanceReportWithBudgetAsText opts budget r =
|
|||||||
Just pct -> printf "%s [%s%% of %s]" (showamt real) (show $ roundTo 0 pct) (showamt budget)
|
Just pct -> printf "%s [%s%% of %s]" (showamt real) (show $ roundTo 0 pct) (showamt budget)
|
||||||
Nothing -> printf "%s [%s]" (showamt real) (showamt budget)
|
Nothing -> printf "%s [%s]" (showamt real) (showamt budget)
|
||||||
percentage real budget =
|
percentage real budget =
|
||||||
case (real, budget) of
|
-- percentage of budget consumed is always computed in the cost basis
|
||||||
(Mixed [a1], Mixed [a2]) | acommodity a1 == acommodity a2 && aquantity a2 /= 0 ->
|
case (toCost real, toCost budget) of
|
||||||
Just $ 100 * aquantity a1 / aquantity a2
|
(Mixed [a1], Mixed [a2])
|
||||||
|
| isReallyZeroAmount a1 -> Just 0 -- if there are no postings, we consumed 0% of budget
|
||||||
|
| acommodity a1 == acommodity a2 && aquantity a2 /= 0 ->
|
||||||
|
Just $ 100 * aquantity a1 / aquantity a2
|
||||||
_ -> Nothing
|
_ -> Nothing
|
||||||
|
where
|
||||||
|
toCost = normaliseMixedAmount . costOfMixedAmount
|
||||||
showamt | color_ opts = cshowMixedAmountOneLineWithoutPrice
|
showamt | color_ opts = cshowMixedAmountOneLineWithoutPrice
|
||||||
| otherwise = showMixedAmountOneLineWithoutPrice
|
| otherwise = showMixedAmountOneLineWithoutPrice
|
||||||
-- combine reportTable budgetTable will combine them into a single table where cells
|
-- combine reportTable budgetTable will combine them into a single table where cells
|
||||||
|
|||||||
@ -37,7 +37,7 @@ Balance changes in 2016/12/01-2016/12/03:
|
|||||||
<unbudgeted>:expenses || 0 0 $40
|
<unbudgeted>:expenses || 0 0 $40
|
||||||
assets:cash || $-10 [40% of $-25] $-14 [56% of $-25] $-51 [204% of $-25]
|
assets:cash || $-10 [40% of $-25] $-14 [56% of $-25] $-51 [204% of $-25]
|
||||||
expenses:food || $10 [100% of $10] $9 [90% of $10] $11 [110% of $10]
|
expenses:food || $10 [100% of $10] $9 [90% of $10] $11 [110% of $10]
|
||||||
expenses:leisure || 0 [$15] $5 [33% of $15] 0 [$15]
|
expenses:leisure || 0 [0% of $15] $5 [33% of $15] 0 [0% of $15]
|
||||||
-----------------------++-------------------------------------------------------------
|
-----------------------++-------------------------------------------------------------
|
||||||
|| 0 0 0
|
|| 0 0 0
|
||||||
|
|
||||||
@ -83,10 +83,60 @@ Balance changes in 2016/12/01-2016/12/03:
|
|||||||
assets:cash || $-10 [40% of $-25] $-14 [56% of $-25] $-51 [204% of $-25]
|
assets:cash || $-10 [40% of $-25] $-14 [56% of $-25] $-51 [204% of $-25]
|
||||||
expenses:cab || 0 0 $15
|
expenses:cab || 0 0 $15
|
||||||
expenses:food || $10 [100% of $10] $9 [90% of $10] $11 [110% of $10]
|
expenses:food || $10 [100% of $10] $9 [90% of $10] $11 [110% of $10]
|
||||||
expenses:leisure || 0 [$15] $5 [33% of $15] 0 [$15]
|
expenses:leisure || 0 [0% of $15] $5 [33% of $15] 0 [0% of $15]
|
||||||
expenses:movies || 0 0 $25
|
expenses:movies || 0 0 $25
|
||||||
------------------++-------------------------------------------------------------
|
------------------++-------------------------------------------------------------
|
||||||
|| 0 0 0
|
|| 0 0 0
|
||||||
|
|
||||||
>>>2
|
>>>2
|
||||||
>>>=0
|
>>>=0
|
||||||
|
|
||||||
|
# Test that budget works with mix of commodities
|
||||||
|
hledger bal -D -b 2016-12-01 -e 2016-12-04 -f - --budget
|
||||||
|
<<<
|
||||||
|
2016/12/01
|
||||||
|
expenses:food £10 @@ $15
|
||||||
|
assets:cash
|
||||||
|
|
||||||
|
2016/12/02
|
||||||
|
expenses:food 10 CAD @ $1
|
||||||
|
assets:cash
|
||||||
|
|
||||||
|
2016/12/02
|
||||||
|
expenses:food 10 CAD @ $1.1
|
||||||
|
assets:cash
|
||||||
|
|
||||||
|
2016/12/03
|
||||||
|
expenses:food $11
|
||||||
|
assets:cash
|
||||||
|
|
||||||
|
2016/12/02
|
||||||
|
expenses:leisure $5
|
||||||
|
assets:cash
|
||||||
|
|
||||||
|
2016/12/03
|
||||||
|
expenses:movies $25
|
||||||
|
assets:cash
|
||||||
|
|
||||||
|
2016/12/03
|
||||||
|
expenses:cab $15
|
||||||
|
assets:cash
|
||||||
|
|
||||||
|
~ daily from 2016/1/1
|
||||||
|
expenses:food $10
|
||||||
|
expenses:leisure $15
|
||||||
|
assets:cash
|
||||||
|
>>>
|
||||||
|
Balance changes in 2016/12/01-2016/12/03:
|
||||||
|
|
||||||
|
|| 2016/12/01 2016/12/02 2016/12/03
|
||||||
|
=======================++================================================================
|
||||||
|
<unbudgeted>:expenses || 0 0 $40
|
||||||
|
assets:cash || $-15 [60% of $-25] $-26.0 [104% of $-25] $-51 [204% of $-25]
|
||||||
|
expenses:food || £10 [150% of $10] 20 CAD [210% of $10] $11 [110% of $10]
|
||||||
|
expenses:leisure || 0 [0% of $15] $5 [33% of $15] 0 [0% of $15]
|
||||||
|
-----------------------++----------------------------------------------------------------
|
||||||
|
|| $-15, £10 $-21.0, 20 CAD 0
|
||||||
|
|
||||||
|
>>>2
|
||||||
|
>>>=0
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user