bal: --budget: don't always convert to cost

And don't show a percentage when budgeted and actual amounts are in
different commodities.
This commit is contained in:
Simon Michael 2019-05-23 13:27:37 -07:00
parent 2355da0f93
commit adbce22152
2 changed files with 10 additions and 10 deletions

View File

@ -308,19 +308,19 @@ budgetReportAsText ropts@ReportOpts{..} budgetr@(PeriodicReport ( _, rows, _)) =
(showbudgetamt budget) (showbudgetamt budget)
-- | Calculate the percentage of actual change to budget goal to show, if any. -- | Calculate the percentage of actual change to budget goal to show, if any.
-- Both amounts are converted to cost, if possible, before comparing. -- If valuing at cost, both amounts are converted to cost before comparing.
-- A percentage will not be shown if: -- A percentage will not be shown if:
-- - actual or goal are not the same, single, commodity -- - actual or goal are not the same, single, commodity
-- - the goal is zero -- - the goal is zero
percentage :: Change -> BudgetGoal -> Maybe Percentage percentage :: Change -> BudgetGoal -> Maybe Percentage
percentage actual budget = percentage actual budget =
case (toCost actual, toCost budget) of case (maybecost $ normaliseMixedAmount actual, maybecost $ normaliseMixedAmount budget) of
(Mixed [a], Mixed [b]) | (acommodity a == acommodity b || isZeroAmount a) && not (isZeroAmount b) (Mixed [a], Mixed [b]) | (acommodity a == acommodity b || isZeroAmount a) && not (isZeroAmount b)
-> Just $ 100 * aquantity a / aquantity b -> Just $ 100 * aquantity a / aquantity b
_ -> Nothing _ -> -- trace (pshow $ (maybecost actual, maybecost budget)) -- debug missing percentage
Nothing
where where
toCost = normaliseMixedAmount . costOfMixedAmount maybecost = if valuationTypeIsCost ropts then costOfMixedAmount else id
showamt :: MixedAmount -> String showamt :: MixedAmount -> String
showamt | color_ = cshowMixedAmountOneLineWithoutPrice showamt | color_ = cshowMixedAmountOneLineWithoutPrice
| otherwise = showMixedAmountOneLineWithoutPrice | otherwise = showMixedAmountOneLineWithoutPrice

View File

@ -31,7 +31,7 @@
# 1. Test --budget switch # 1. Test --budget switch
$ hledger bal -D -b 2016-12-01 -e 2016-12-04 -f - --budget $ hledger -f- bal -D -b 2016-12-01 -e 2016-12-04 --budget
Budget performance in 2016/12/01-2016/12/03: Budget performance in 2016/12/01-2016/12/03:
|| 2016/12/01 2016/12/02 2016/12/03 || 2016/12/01 2016/12/02 2016/12/03
@ -45,7 +45,7 @@ Budget performance in 2016/12/01-2016/12/03:
|| 0 [ 0] 0 [ 0] 0 [ 0] || 0 [ 0] 0 [ 0] 0 [ 0]
# 2. -E # 2. -E
$ hledger bal -D -b 2016-12-01 -e 2016-12-04 -f - --budget -E $ hledger -f- bal -D -b 2016-12-01 -e 2016-12-04 --budget -E
Budget performance in 2016/12/01-2016/12/03: Budget performance in 2016/12/01-2016/12/03:
|| 2016/12/01 2016/12/02 2016/12/03 || 2016/12/01 2016/12/02 2016/12/03
@ -95,15 +95,15 @@ Budget performance in 2016/12/01-2016/12/03:
expenses:leisure $15 expenses:leisure $15
assets:cash assets:cash
$ hledger bal -D -b 2016-12-01 -e 2016-12-04 -f - --budget $ hledger -f- bal -D -b 2016-12-01 -e 2016-12-04 --budget
Budget performance in 2016/12/01-2016/12/03: Budget performance in 2016/12/01-2016/12/03:
|| 2016/12/01 2016/12/02 2016/12/03 || 2016/12/01 2016/12/02 2016/12/03
==================++====================================================================================== ==================++======================================================================================
assets || $-15 [ 60% of $-25] $-26 [ 104% of $-25] $-51 [ 204% of $-25] assets || $-15 [ 60% of $-25] $-26 [ 104% of $-25] $-51 [ 204% of $-25]
assets:cash || $-15 [ 60% of $-25] $-26 [ 104% of $-25] $-51 [ 204% of $-25] assets:cash || $-15 [ 60% of $-25] $-26 [ 104% of $-25] $-51 [ 204% of $-25]
expenses || £10 [ 60% of $25] $5, 20 CAD [ 104% of $25] $51 [ 204% of $25] expenses || £10 [ $25] $5, 20 CAD [ $25] $51 [ 204% of $25]
expenses:food || £10 [ 150% of $10] 20 CAD [ 210% of $10] $11 [ 110% of $10] expenses:food || £10 [ $10] 20 CAD [ $10] $11 [ 110% of $10]
expenses:leisure || 0 [ 0% of $15] $5 [ 33% of $15] 0 [ 0% of $15] expenses:leisure || 0 [ 0% of $15] $5 [ 33% of $15] 0 [ 0% of $15]
------------------++-------------------------------------------------------------------------------------- ------------------++--------------------------------------------------------------------------------------
|| $-15, £10 [ 0] $-21, 20 CAD [ 0] 0 [ 0] || $-15, £10 [ 0] $-21, 20 CAD [ 0] 0 [ 0]