;refactor: extracted reportPeriodName for making report headings

This commit is contained in:
Simon Michael 2020-07-09 12:54:20 -07:00
parent 4b9a76068f
commit 23bef9a01b
2 changed files with 24 additions and 12 deletions

View File

@ -260,20 +260,17 @@ budgetReportAsText ropts@ReportOpts{..} budgetr =
budgetReportAsTable :: ReportOpts -> BudgetReport -> Table String String (Maybe MixedAmount, Maybe MixedAmount)
budgetReportAsTable
ropts@ReportOpts{balancetype_}
(PeriodicReport periods rows (PeriodicReportRow _ coltots grandtot grandavg)) =
(PeriodicReport spans rows (PeriodicReportRow _ coltots grandtot grandavg)) =
addtotalrow $
Table
(T.Group NoLine $ map Header accts)
(T.Group NoLine $ map Header colheadings)
(map rowvals rows)
where
colheadings = map mkheading periods
colheadings = map (reportPeriodName balancetype_ spans) spans
++ [" Total" | row_total_ ropts]
++ ["Average" | average_ ropts]
where
mkheading = case balancetype_ of
PeriodChange -> showDateSpanMonthAbbrev
_ -> maybe "" (showDate . prevday) . spanEnd
accts = map renderacct rows
-- FIXME. Have to check explicitly for which to render here, since
-- budgetReport sets accountlistmode to ALTree. Find a principled way to do
@ -290,6 +287,25 @@ budgetReportAsTable
++ [grandavg | average_ ropts && not (null coltots)]
))
-- | Make a name for the given period in a multiperiod report, given
-- the type of balance being reported and the full set of report
-- periods. This will be used as a column heading (or row heading, in
-- a register summary report). We try to pick a useful name as follows:
--
-- - ending-balance reports: the period's end date
--
-- - balance change reports where the periods are months and all in the same year:
-- the short month name in the current locale
--
-- - all other balance change reports: a description of the datespan,
-- abbreviated to compact form if possible (see showDateSpan).
--
reportPeriodName :: BalanceType -> [DateSpan] -> DateSpan -> String
reportPeriodName balancetype spans =
case balancetype of
PeriodChange -> showDateSpanMonthAbbrev
_ -> maybe "" (showDate . prevday) . spanEnd
-- tests
tests_BudgetReport = tests "BudgetReport" [

View File

@ -593,7 +593,7 @@ multiBalanceReportAsText ropts@ReportOpts{..} r =
-- | Build a 'Table' from a multi-column balance report.
balanceReportAsTable :: ReportOpts -> MultiBalanceReport -> Table String String MixedAmount
balanceReportAsTable opts@ReportOpts{average_, row_total_, balancetype_}
(PeriodicReport colspans items (PeriodicReportRow _ coltotals tot avg)) =
(PeriodicReport spans items (PeriodicReportRow _ coltotals tot avg)) =
maybetranspose $
addtotalrow $
Table
@ -602,13 +602,9 @@ balanceReportAsTable opts@ReportOpts{average_, row_total_, balancetype_}
(map rowvals items)
where
totalscolumn = row_total_ && balancetype_ `notElem` [CumulativeChange, HistoricalBalance]
colheadings = map mkheading colspans
colheadings = map (reportPeriodName balancetype_ spans) spans
++ [" Total" | totalscolumn]
++ ["Average" | average_]
where
mkheading = case balancetype_ of
PeriodChange -> showDateSpanMonthAbbrev
_ -> maybe "" (showDate . prevday) . spanEnd
accts = map renderacct items
renderacct row =
replicate ((prrDepth row - 1) * 2) ' ' ++ T.unpack (prrDisplayName row)