fix: balcmds: handle an empty totals column in html output (#1933)

This commit is contained in:
Simon Michael 2022-09-14 16:56:28 -10:00
parent 1d191d13ae
commit 7102d6f9e8
2 changed files with 36 additions and 15 deletions

View File

@ -573,14 +573,20 @@ multiBalanceReportHtmlRows ropts mbr =
-- | Render one MultiBalanceReport heading row as a HTML table row. -- | Render one MultiBalanceReport heading row as a HTML table row.
multiBalanceReportHtmlHeadRow :: ReportOpts -> [T.Text] -> Html () multiBalanceReportHtmlHeadRow :: ReportOpts -> [T.Text] -> Html ()
multiBalanceReportHtmlHeadRow _ [] = mempty -- shouldn't happen multiBalanceReportHtmlHeadRow _ [] = mempty -- shouldn't happen
multiBalanceReportHtmlHeadRow ropts (acct:rest) = multiBalanceReportHtmlHeadRow ropts (acct:cells) =
let let
defstyle = style_ "" defstyle = style_ ""
(amts,tot,avg) (amts,tot,avg)
| row_total_ ropts && average_ ropts = (init $ init rest, [last $ init rest], [last rest]) | row_total_ ropts && average_ ropts = (ini2, sndlst2, lst2)
| row_total_ ropts = (init rest, [last rest], []) | row_total_ ropts = (ini1, lst1, [])
| average_ ropts = (init rest, [], [last rest]) | average_ ropts = (ini1, [], lst1)
| otherwise = (rest, [], []) | otherwise = (amts, [], [])
where
n = length cells
(ini1,lst1) = splitAt (n-1) cells
(ini2, rest) = splitAt (n-2) cells
(sndlst2,lst2) = splitAt 1 rest
in in
tr_ $ mconcat $ tr_ $ mconcat $
td_ [class_ "account"] (toHtml acct) td_ [class_ "account"] (toHtml acct)
@ -591,14 +597,19 @@ multiBalanceReportHtmlHeadRow ropts (acct:rest) =
-- | Render one MultiBalanceReport data row as a HTML table row. -- | Render one MultiBalanceReport data row as a HTML table row.
multiBalanceReportHtmlBodyRow :: ReportOpts -> [T.Text] -> Html () multiBalanceReportHtmlBodyRow :: ReportOpts -> [T.Text] -> Html ()
multiBalanceReportHtmlBodyRow _ [] = mempty -- shouldn't happen multiBalanceReportHtmlBodyRow _ [] = mempty -- shouldn't happen
multiBalanceReportHtmlBodyRow ropts (label:rest) = multiBalanceReportHtmlBodyRow ropts (label:cells) =
let let
defstyle = style_ "text-align:right" defstyle = style_ "text-align:right"
(amts,tot,avg) (amts,tot,avg)
| row_total_ ropts && average_ ropts = (init $ init rest, [last $ init rest], [last rest]) | row_total_ ropts && average_ ropts = (ini2, sndlst2, lst2)
| row_total_ ropts = (init rest, [last rest], []) | row_total_ ropts = (ini1, lst1, [])
| average_ ropts = (init rest, [], [last rest]) | average_ ropts = (ini1, [], lst1)
| otherwise = (rest, [], []) | otherwise = (amts, [], [])
where
n = length cells
(ini1,lst1) = splitAt (n-1) cells
(ini2, rest) = splitAt (n-2) cells
(sndlst2,lst2) = splitAt 1 rest
in in
tr_ $ mconcat $ tr_ $ mconcat $
td_ [class_ "account", style_ "text-align:left"] (toHtml label) td_ [class_ "account", style_ "text-align:left"] (toHtml label)
@ -615,14 +626,19 @@ multiBalanceReportHtmlFootRow _ropts [] = mempty
-- : repeat nullmixedamt zeros -- : repeat nullmixedamt zeros
-- ++ (if row_total_ ropts then [nullmixedamt] else []) -- ++ (if row_total_ ropts then [nullmixedamt] else [])
-- ++ (if average_ ropts then [nullmixedamt] else []) -- ++ (if average_ ropts then [nullmixedamt] else [])
multiBalanceReportHtmlFootRow ropts (acct:rest) = multiBalanceReportHtmlFootRow ropts (acct:cells) =
let let
defstyle = style_ "text-align:right" defstyle = style_ "text-align:right"
(amts,tot,avg) (amts,tot,avg)
| row_total_ ropts && average_ ropts = (init $ init rest, [last $ init rest], [last rest]) | row_total_ ropts && average_ ropts = (ini2, sndlst2, lst2)
| row_total_ ropts = (init rest, [last rest], []) | row_total_ ropts = (ini1, lst1, [])
| average_ ropts = (init rest, [], [last rest]) | average_ ropts = (ini1, [], lst1)
| otherwise = (rest, [], []) | otherwise = (amts, [], [])
where
n = length cells
(ini1,lst1) = splitAt (n-1) cells
(ini2, rest) = splitAt (n-2) cells
(sndlst2,lst2) = splitAt 1 rest
in in
tr_ $ mconcat $ tr_ $ mconcat $
th_ [style_ "text-align:left"] (toHtml acct) th_ [style_ "text-align:left"] (toHtml acct)

View File

@ -194,3 +194,8 @@ account a:ac:aca
account b account b
$ hledger -f - balance -NE --declared not:a $ hledger -f - balance -NE --declared not:a
0 b 0 b
# 13. An empty totals column does not break HTML output (#1933).
<
$ hledger -f- bal -YT -O html
> //