fix: layout: Commodity symbols should be omitted in --layout=bare when

all amounts are zero. (#1789)
This commit is contained in:
Stephen Morgan 2022-01-07 12:07:42 +01:00 committed by Simon Michael
parent 55a022a941
commit 2a51b6e9a4
2 changed files with 32 additions and 9 deletions

View File

@ -259,7 +259,7 @@ module Hledger.Cli.Commands.Balance (
) where
import Data.Default (def)
import Data.List (transpose, foldl', transpose)
import Data.List (transpose, transpose)
import qualified Data.Set as S
import Data.Maybe (fromMaybe)
import qualified Data.Text as T
@ -456,7 +456,7 @@ balanceReportAsText' opts ((items, total)) =
, Cell TopLeft (fmap wbFromText cs)
, Cell TopLeft (replicate (length damts - 1) mempty ++ [wbFromText dispname]) ]
where dopts = oneLine{displayColour=color_ opts, displayOrder=Just cs}
cs = S.toList $ maCommodities amt
cs = if mixedAmountLooksZero amt then [""] else S.toList $ maCommodities amt
dispname = T.replicate ((depth - 1) * 2) " " <> acctname
damts = showMixedAmountLinesB dopts amt
lines = fmap render items
@ -703,14 +703,14 @@ balanceReportAsTable opts@ReportOpts{average_, row_total_, balanceaccum_}
multiBalanceRowAsWbs :: AmountDisplayOpts -> ReportOpts -> [DateSpan] -> PeriodicReportRow a MixedAmount -> [[WideBuilder]]
multiBalanceRowAsWbs bopts ReportOpts{..} colspans (PeriodicReportRow _ as rowtot rowavg) =
case layout_ of
LayoutWide width -> [fmap (showMixedAmountB bopts{displayMaxWidth=width}) all]
LayoutWide width -> [fmap (showMixedAmountB bopts{displayMaxWidth=width}) allamts]
LayoutTall -> paddedTranspose mempty
. fmap (showMixedAmountLinesB bopts{displayMaxWidth=Nothing})
$ all
$ allamts
LayoutBare -> zipWith (:) (fmap wbFromText cs) -- add symbols
. transpose -- each row becomes a list of Text quantities
. fmap (showMixedAmountLinesB bopts{displayOrder=Just cs, displayMinWidth=Nothing})
$ all
$ allamts
LayoutTidy -> concat
. zipWith (map . addDateColumns) colspans
. fmap ( zipWith (\c a -> [wbFromText c, a]) cs
@ -719,10 +719,8 @@ multiBalanceRowAsWbs bopts ReportOpts{..} colspans (PeriodicReportRow _ as rowto
-- complicates the data representation and can be easily calculated
where
totalscolumn = row_total_ && balanceaccum_ `notElem` [Cumulative, Historical]
cs = S.toList . foldl' S.union mempty $ fmap maCommodities all
all = as
++ [rowtot | totalscolumn && not (null as)]
++ [rowavg | average_ && not (null as)]
cs = if all mixedAmountLooksZero allamts then [""] else S.toList $ foldMap maCommodities allamts
allamts = as ++ [rowtot | totalscolumn && not (null as)] ++ [rowavg | average_ && not (null as)]
addDateColumns span@(DateSpan s e) = (wbFromText (showDateSpan span) :)
. (wbFromText (maybe "" showDate s) :)
. (wbFromText (maybe "" (showDate . addDays (-1)) e) :)

View File

@ -267,3 +267,28 @@ $ hledger -f bcexample.hledger bal -T assets.*etrade -3 -O csv --layout=tidy
"Assets:US:ETrade","2012-01-01..2014-10-11","2012-01-01","2014-10-11","VEA","36.00"
"Assets:US:ETrade","2012-01-01..2014-10-11","2012-01-01","2014-10-11","VHT","294.00"
>=0
<
2021-01-01 Test
Assets:Bank INR 1.00
Equity:Opening INR -1.00
# 15. Should omit commodity from totals row when the sum is zero with --layout=bare. (#1789)
$ hledger -f - bal --layout=bare
1.00 INR Assets:Bank
-1.00 INR Equity:Opening
-----
0
>=0
# 16. The same with -M. (#1789)
$ hledger -f - bal --layout=bare -M
Balance changes in 2021-01:
|| Commodity Jan
================++==================
Assets:Bank || INR 1.00
Equity:Opening || INR -1.00
----------------++------------------
|| 0
>=0