balance: make -H work with single-column reports #392
-H/--historical now makes a single-column balance report with a start date show historical balances reflecting earlier postings. This is equivalent to specifying no start date, but it's more consistent.
This commit is contained in:
parent
156922e419
commit
39c5eb9801
@ -9,7 +9,8 @@ module Hledger.Reports.MultiBalanceReports (
|
|||||||
MultiBalanceReport(..),
|
MultiBalanceReport(..),
|
||||||
MultiBalanceReportRow,
|
MultiBalanceReportRow,
|
||||||
multiBalanceReport,
|
multiBalanceReport,
|
||||||
multiBalanceReportValue
|
multiBalanceReportValue,
|
||||||
|
singleBalanceReport
|
||||||
|
|
||||||
-- -- * Tests
|
-- -- * Tests
|
||||||
-- tests_Hledger_Reports_MultiBalanceReport
|
-- tests_Hledger_Reports_MultiBalanceReport
|
||||||
@ -71,6 +72,20 @@ instance Show MultiBalanceReport where
|
|||||||
-- type alias just to remind us which AccountNames might be depth-clipped, below.
|
-- type alias just to remind us which AccountNames might be depth-clipped, below.
|
||||||
type ClippedAccountName = AccountName
|
type ClippedAccountName = AccountName
|
||||||
|
|
||||||
|
-- | Generates a single column BalanceReport like balanceReport, but uses
|
||||||
|
-- multiBalanceReport, so supports --historical. Does not support
|
||||||
|
-- boring parent eliding yet.
|
||||||
|
singleBalanceReport :: ReportOpts -> Query -> Journal -> BalanceReport
|
||||||
|
singleBalanceReport opts q j = (rows', total)
|
||||||
|
where
|
||||||
|
MultiBalanceReport (_, rows, (totals, _, _)) = multiBalanceReport opts q j
|
||||||
|
rows' = [(a
|
||||||
|
,if tree_ opts then a' else a -- BalanceReport expects full account name here with --flat
|
||||||
|
,if tree_ opts then d-1 else 0 -- BalanceReport uses 0-based account depths
|
||||||
|
, headDef nullmixedamt amts -- 0 columns is illegal, should not happen, return zeroes if it does
|
||||||
|
) | (a,a',d, amts, _, _) <- rows]
|
||||||
|
total = headDef nullmixedamt totals
|
||||||
|
|
||||||
-- | Generate a multicolumn balance report for the matched accounts,
|
-- | Generate a multicolumn balance report for the matched accounts,
|
||||||
-- showing the change of balance, accumulated balance, or historical balance
|
-- showing the change of balance, accumulated balance, or historical balance
|
||||||
-- in each of the specified periods.
|
-- in each of the specified periods.
|
||||||
|
|||||||
@ -272,8 +272,8 @@ balancemode = (defCommandMode $ ["balance"] ++ aliases) { -- also accept but don
|
|||||||
,flagReq ["drop"] (\s opts -> Right $ setopt "drop" s opts) "N" "flat mode: omit N leading account name parts"
|
,flagReq ["drop"] (\s opts -> Right $ setopt "drop" s opts) "N" "flat mode: omit N leading account name parts"
|
||||||
,flagReq ["format"] (\s opts -> Right $ setopt "format" s opts) "FORMATSTR" "singlecolumn mode: use this custom line format"
|
,flagReq ["format"] (\s opts -> Right $ setopt "format" s opts) "FORMATSTR" "singlecolumn mode: use this custom line format"
|
||||||
,flagNone ["no-elide"] (\opts -> setboolopt "no-elide" opts) "tree mode: don't squash boring parent accounts"
|
,flagNone ["no-elide"] (\opts -> setboolopt "no-elide" opts) "tree mode: don't squash boring parent accounts"
|
||||||
,flagNone ["historical","H"] (\opts -> setboolopt "historical" opts) "multicolumn mode: show historical ending balances"
|
,flagNone ["historical","H"] (\opts -> setboolopt "historical" opts) "show historical ending balances, reflecting postings before report start"
|
||||||
,flagNone ["cumulative"] (\opts -> setboolopt "cumulative" opts) "multicolumn mode: show accumulated ending balances"
|
,flagNone ["cumulative"] (\opts -> setboolopt "cumulative" opts) "in multicolumn mode: show ending balances accumulated from 0 at report start"
|
||||||
,flagNone ["average","A"] (\opts -> setboolopt "average" opts) "multicolumn mode: show a row average column"
|
,flagNone ["average","A"] (\opts -> setboolopt "average" opts) "multicolumn mode: show a row average column"
|
||||||
,flagNone ["row-total","T"] (\opts -> setboolopt "row-total" opts) "multicolumn mode: show a row total column"
|
,flagNone ["row-total","T"] (\opts -> setboolopt "row-total" opts) "multicolumn mode: show a row total column"
|
||||||
,flagNone ["no-total","N"] (\opts -> setboolopt "no-total" opts) "don't show the final total row"
|
,flagNone ["no-total","N"] (\opts -> setboolopt "no-total" opts) "don't show the final total row"
|
||||||
@ -297,9 +297,19 @@ balance opts@CliOpts{reportopts_=ropts} j = do
|
|||||||
interval = interval_ ropts
|
interval = interval_ ropts
|
||||||
baltype = balancetype_ ropts
|
baltype = balancetype_ ropts
|
||||||
valuedate = fromMaybe d $ queryEndDate False $ queryFromOpts d ropts
|
valuedate = fromMaybe d $ queryEndDate False $ queryFromOpts d ropts
|
||||||
|
-- shenanigans: use single/multiBalanceReport when we must,
|
||||||
|
-- ie when there's a report interval, or --historical or -- cumulative.
|
||||||
|
-- Otherwise prefer the older balanceReport since it can elide boring parents.
|
||||||
case interval of
|
case interval of
|
||||||
NoInterval -> do
|
NoInterval -> do
|
||||||
let report = balanceReport ropts (queryFromOpts d ropts) j
|
let report
|
||||||
|
-- For --historical/--cumulative, we must use multiBalanceReport.
|
||||||
|
-- (This forces --no-elide.)
|
||||||
|
| balancetype_ ropts `elem` [HistoricalBalance, CumulativeBalance]
|
||||||
|
= let ropts' | flat_ ropts = ropts
|
||||||
|
| otherwise = ropts{accountlistmode_=ALTree}
|
||||||
|
in singleBalanceReport ropts' (queryFromOpts d ropts) j
|
||||||
|
| otherwise = balanceReport ropts (queryFromOpts d ropts) j
|
||||||
convert | value_ ropts = balanceReportValue j valuedate
|
convert | value_ ropts = balanceReportValue j valuedate
|
||||||
| otherwise = id
|
| otherwise = id
|
||||||
render = case format of
|
render = case format of
|
||||||
|
|||||||
@ -17,10 +17,10 @@ Show accounts and their balances. Alias: bal.
|
|||||||
: in tree mode: don't squash boring parent accounts
|
: in tree mode: don't squash boring parent accounts
|
||||||
|
|
||||||
`-H --historical`
|
`-H --historical`
|
||||||
: in multicolumn mode: show historical ending balances
|
: show historical ending balances, reflecting postings before report start
|
||||||
|
|
||||||
`--cumulative`
|
`--cumulative`
|
||||||
: in multicolumn mode: show accumulated ending balances
|
: in multicolumn mode: show ending balances accumulated from 0 at report start
|
||||||
|
|
||||||
`-A --average`
|
`-A --average`
|
||||||
: in multicolumn mode: show a row average column
|
: in multicolumn mode: show a row average column
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user