mirror of
https://github.com/simonmichael/hledger.git
synced 2024-11-09 21:22:26 +03:00
budget: more consistent display of percentage
This commit is contained in:
parent
41665d07b0
commit
8759f12b63
@ -258,17 +258,19 @@ budgetReportAsText ropts budgetr =
|
||||
++
|
||||
tableAsText ropts showcell (budgetReportAsTable ropts budgetr)
|
||||
where
|
||||
-- XXX lay out actual, percentage and/or goal in the single table cell for now, should probably use separate cells
|
||||
showcell :: (Maybe Change, Maybe BudgetGoal) -> String
|
||||
showcell (mactual, mbudget) = actualstr ++ " " ++ budgetstr
|
||||
where
|
||||
actualwidth = 7
|
||||
percentwidth = 4
|
||||
budgetwidth = 5
|
||||
actualstr = printf ("%"++show actualwidth++"s") (maybe "0" showamt mactual)
|
||||
budgetstr = case (mactual, mbudget) of
|
||||
(_, Nothing) -> replicate (percentwidth + 7 + budgetwidth) ' '
|
||||
(mactual, Just budget) ->
|
||||
case percentage mactual budget of
|
||||
actual = fromMaybe 0 mactual
|
||||
actualstr = printf ("%"++show actualwidth++"s") (showamt actual)
|
||||
budgetstr = case mbudget of
|
||||
Nothing -> replicate (percentwidth + 7 + budgetwidth) ' '
|
||||
Just budget ->
|
||||
case percentage actual budget of
|
||||
Just pct ->
|
||||
printf ("[%"++show percentwidth++"s%% of %"++show budgetwidth++"s]")
|
||||
(show $ roundTo 0 pct) (showbudgetamt budget)
|
||||
@ -276,18 +278,19 @@ budgetReportAsText ropts budgetr =
|
||||
printf ("["++replicate (percentwidth+5) ' '++"%"++show budgetwidth++"s]")
|
||||
(showbudgetamt budget)
|
||||
|
||||
percentage :: Maybe Change -> BudgetGoal -> Maybe Percentage
|
||||
percentage Nothing _ = Nothing
|
||||
percentage (Just actual) budget =
|
||||
-- percentage of budget consumed is always computed in the cost basis
|
||||
-- | Calculate the percentage of actual change to budget goal to show, if any.
|
||||
-- Both amounts are converted to cost, if possible, before comparing.
|
||||
-- A percentage will not be shown if:
|
||||
-- - actual or goal are not the same, single, commodity
|
||||
-- - the goal is zero
|
||||
percentage :: Change -> BudgetGoal -> Maybe Percentage
|
||||
percentage actual budget =
|
||||
case (toCost actual, toCost budget) of
|
||||
(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
|
||||
where
|
||||
toCost = normaliseMixedAmount . costOfMixedAmount
|
||||
(Mixed [a], Mixed [b]) | (acommodity a == acommodity b || isZeroAmount a) && not (isZeroAmount b)
|
||||
-> Just $ 100 * aquantity a / aquantity b
|
||||
_ -> Nothing
|
||||
where
|
||||
toCost = normaliseMixedAmount . costOfMixedAmount
|
||||
|
||||
showamt :: MixedAmount -> String
|
||||
showamt | color_ ropts = cshowMixedAmountOneLineWithoutPrice
|
||||
|
@ -41,7 +41,7 @@ Budget performance in 2016/12/01-2016/12/03:
|
||||
expenses:food || $10 [ 100% of $10] $9 [ 90% of $10] $11 [ 110% of $10]
|
||||
expenses:leisure || 0 [ 0% of $15] $5 [ 33% of $15] 0 [ 0% of $15]
|
||||
-----------------------++------------------------------------------------------------------------------
|
||||
|| 0 [ 0% of 0] 0 [ 0% of 0] 0 [ 0% of 0]
|
||||
|| 0 [ 0] 0 [ 0] 0 [ 0]
|
||||
|
||||
# 2. --show-unbudgeted
|
||||
$ hledger bal -D -b 2016-12-01 -e 2016-12-04 -f - --budget --show-unbudgeted
|
||||
@ -55,7 +55,7 @@ Budget performance in 2016/12/01-2016/12/03:
|
||||
expenses:leisure || 0 [ 0% of $15] $5 [ 33% of $15] 0 [ 0% of $15]
|
||||
expenses:movies || 0 0 $25
|
||||
------------------++------------------------------------------------------------------------------
|
||||
|| 0 [ 0% of 0] 0 [ 0% of 0] 0 [ 0% of 0]
|
||||
|| 0 [ 0] 0 [ 0] 0 [ 0]
|
||||
|
||||
# 3. Test that budget works with mix of commodities
|
||||
<
|
||||
@ -102,8 +102,7 @@ Budget performance in 2016/12/01-2016/12/03:
|
||||
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 [ 0% of 0] $-21, 20 CAD [ 0% of 0] 0 [ 0% of 0]
|
||||
# TODO zero totals ^
|
||||
|| $-15, £10 [ 0] $-21, 20 CAD [ 0] 0 [ 0]
|
||||
|
||||
<
|
||||
~ daily
|
||||
@ -142,8 +141,8 @@ Budget performance in 2018/01/01-2018/01/03:
|
||||
|| 2018/01/01 2018/01/02 2018/01/03
|
||||
===++==============================================================================
|
||||
a || 1 [ 10% of 10] 0 [ 0% of 10] 1 [ 10% of 10]
|
||||
b || 1 [ 1% of 100] 0 [ 0% of 0] 1 [ 0]
|
||||
c || 1 [ 0% of 1000] 0 [ 0% of 0] 1 [ 0]
|
||||
b || 1 [ 1% of 100] 0 [ 0] 1 [ 0]
|
||||
c || 1 [ 0% of 1000] 0 [ 0] 1 [ 0]
|
||||
---++------------------------------------------------------------------------------
|
||||
|| 3 [ 0% of 1110] 0 [ 0% of 10] 3 [ 30% of 10]
|
||||
|
||||
@ -247,9 +246,9 @@ Budget performance in 2018/01/01-2018/01/02:
|
||||
|
||||
|| 2018/01/01 2018/01/02
|
||||
===++====================================================
|
||||
a || 0 [ 1] 0 [ 1]
|
||||
a || 0 [ 0% of 1] 0 [ 0% of 1]
|
||||
---++----------------------------------------------------
|
||||
|| 0 [ 1] 0 [ 1]
|
||||
|| 0 [ 0% of 1] 0 [ 0% of 1]
|
||||
|
||||
# 11. With -E, zeroes are shown
|
||||
$ hledger -f- bal --budget -D date:2018/1/1-2018/1/3 -E
|
||||
|
Loading…
Reference in New Issue
Block a user