doc: test: update for commodity-column

Add documentation and sample output for `--commodity-column` behavior
and functional tests e.g single-period balance, yearly balance, and
yearly budget
This commit is contained in:
Lawrence 2021-07-23 16:00:42 -05:00 committed by Simon Michael
parent 198d2211fc
commit 234caae557
4 changed files with 164 additions and 2 deletions

View File

@ -34,7 +34,7 @@ instance Monoid WideBuilder where
wbToText :: WideBuilder -> Text
wbToText = TL.toStrict . TB.toLazyText . wbBuilder
-- | Convert a WideBuilder to a strict Text.
-- | Convert a strict Text to a WideBuilder.
wbFromText :: Text -> WideBuilder
wbFromText t = WideBuilder (TB.fromText t) (textWidth t)

View File

@ -311,7 +311,7 @@ balancemode = hledgerCommandMode
,flagNone ["invert"] (setboolopt "invert") "display all amounts with reversed sign"
,flagNone ["transpose"] (setboolopt "transpose") "transpose rows and columns"
,flagNone ["commodity-column"] (setboolopt "commodity-column")
"shows each commodity in its own automatically-generated subaccount, for tidier reports"
"shows one row per commodity and puts the commodity symbol in its own column, leaving amounts as bare numbers"
,outputFormatFlag ["txt","html","csv","json"]
,outputFileFlag
]

View File

@ -64,6 +64,7 @@ Many of these work with the higher-level commands as well.
- rows and columns swapped ([`--transpose`](#multi-period-balance-report))
- another field used as account name ([`--pivot`](#multi-period-balance-report))
- custom-formatted line items (single-period reports only) ([`--format`](#customising-single-period-balance-reports))
- commodities shown in a separate column, one per row ([`--commodity-column`](#commodity-column))
This command supports the
[output destination](#output-destination) and
@ -255,6 +256,63 @@ Here are some ways to handle that:
[csv-mode]: https://elpa.gnu.org/packages/csv-mode.html
[visidata]: https://www.visidata.org
#### commodity column
With `--commodity-column`, each commodity of an account is displayed as a
separate row item row will only include the quantity. The commodity itself is
shown as a separate column, one per row. This can be useful for a cleaner
display of multi-period reports with many commodities
```shell
$ hledger bal -T -Y
Balance changes in 2012-01-01..2014-12-31:
|| 2012 2013 2014 Total
==================++=============================================================================================================================
Assets:US:ETrade || 10.00 ITOT, 337.18 USD, 2 more.. 70.00 GLD, 18.00 ITOT, 3 more.. -11.00 ITOT, 3 more.. 70.00 GLD, 17.00 ITOT, 3 more..
------------------++-----------------------------------------------------------------------------------------------------------------------------
total || 10.00 ITOT, 337.18 USD, 2 more.. 70.00 GLD, 18.00 ITOT, 3 more.. -11.00 ITOT, 3 more.. 70.00 GLD, 17.00 ITOT, 3 more..
$ hledger bal -T -Y --commodity-column
Balance changes in 2012-01-01..2014-12-31:
|| Commodity 2012 2013 2014 Total
==================++=============================================
Assets:US:ETrade || GLD 0 70.00 0 70.00
Assets:US:ETrade || ITOT 10.00 18.00 -11.00 17.00
Assets:US:ETrade || USD 337.18 -98.12 4881.44 5120.50
Assets:US:ETrade || VEA 12.00 10.00 14.00 36.00
Assets:US:ETrade || VHT 106.00 18.00 170.00 294.00
------------------++---------------------------------------------
|| GLD 0 70.00 0 70.00
|| ITOT 10.00 18.00 -11.00 17.00
|| USD 337.18 -98.12 4881.44 5120.50
|| VEA 12.00 10.00 14.00 36.00
|| VHT 106.00 18.00 170.00 294.00
```
Single-period CSV balance reports also follow this new convention.
```shell
$ hledger bal -T -O csv
"account","balance"
"Assets:US:ETrade","70.00 GLD, 17.00 ITOT, 5120.50 USD, 36.00 VEA, 294.00 VHT"
"total","70.00 GLD, 17.00 ITOT, 5120.50 USD, 36.00 VEA, 294.00 VHT"
$ hledger bal -T -O csv --commodity-column
"account","commodity","balance"
"Assets:US:ETrade","GLD","70.00"
"Assets:US:ETrade","ITOT","17.00"
"Assets:US:ETrade","USD","5120.50"
"Assets:US:ETrade","VEA","36.00"
"Assets:US:ETrade","VHT","294.00"
"total","GLD","70.00"
"total","ITOT","17.00"
"total","USD","5120.50"
"total","VEA","36.00"
"total","VHT","294.00"
```
### Sorting by amount
With `-S/--sort-amount`, accounts with the largest (most positive) balances are shown first.

View File

@ -0,0 +1,104 @@
# Record a complicated real-life example. Layout is not perfect, but any
# changes should be noted and evaluated whether they improve things.
$ hledger -f bcexample.hledger bal assets.*etrade -3 -O csv
>
"account","balance"
"Assets:US:ETrade","70.00 GLD, 17.00 ITOT, 5120.50 USD, 36.00 VEA, 294.00 VHT"
"total","70.00 GLD, 17.00 ITOT, 5120.50 USD, 36.00 VEA, 294.00 VHT"
>=0
$ hledger -f bcexample.hledger bal assets.*etrade -3 -O csv --commodity-column
>
"account","commodity","balance"
"Assets:US:ETrade","GLD","70.00"
"Assets:US:ETrade","ITOT","17.00"
"Assets:US:ETrade","USD","5120.50"
"Assets:US:ETrade","VEA","36.00"
"Assets:US:ETrade","VHT","294.00"
"total","GLD","70.00"
"total","ITOT","17.00"
"total","USD","5120.50"
"total","VEA","36.00"
"total","VHT","294.00"
>=0
$ hledger -f bcexample.hledger bal assets.*etrade -3
>
70.00 GLD
17.00 ITOT
5120.50 USD
36.00 VEA
294.00 VHT Assets:US:ETrade
--------------------
70.00 GLD
17.00 ITOT
5120.50 USD
36.00 VEA
294.00 VHT
>=0
$ hledger -f bcexample.hledger bal assets.*etrade -3 --commodity-column
>
70.00 GLD
17.00 ITOT
5120.50 USD
36.00 VEA
294.00 VHT Assets:US:ETrade
-------
70.00 GLD
17.00 ITOT
5120.50 USD
36.00 VEA
294.00 VHT
>=0
$ hledger -f bcexample.hledger bal -T -Y assets.*etrade -3 -O csv
>
"account","2012","2013","2014","total"
"Assets:US:ETrade","10.00 ITOT, 337.18 USD, 12.00 VEA, 106.00 VHT","70.00 GLD, 18.00 ITOT, -98.12 USD, 10.00 VEA, 18.00 VHT","-11.00 ITOT, 4881.44 USD, 14.00 VEA, 170.00 VHT","70.00 GLD, 17.00 ITOT, 5120.50 USD, 36.00 VEA, 294.00 VHT"
"total","10.00 ITOT, 337.18 USD, 12.00 VEA, 106.00 VHT","70.00 GLD, 18.00 ITOT, -98.12 USD, 10.00 VEA, 18.00 VHT","-11.00 ITOT, 4881.44 USD, 14.00 VEA, 170.00 VHT","70.00 GLD, 17.00 ITOT, 5120.50 USD, 36.00 VEA, 294.00 VHT"
>=0
$ hledger -f bcexample.hledger bal -T -Y assets.*etrade -3 -O csv --commodity-column
>
"account","commodity","2012","2013","2014","total"
"Assets:US:ETrade","GLD","0","70.00","0","70.00"
"Assets:US:ETrade","ITOT","10.00","18.00","-11.00","17.00"
"Assets:US:ETrade","USD","337.18","-98.12","4881.44","5120.50"
"Assets:US:ETrade","VEA","12.00","10.00","14.00","36.00"
"Assets:US:ETrade","VHT","106.00","18.00","170.00","294.00"
"total","GLD","0","70.00","0","70.00"
"total","ITOT","10.00","18.00","-11.00","17.00"
"total","USD","337.18","-98.12","4881.44","5120.50"
"total","VEA","12.00","10.00","14.00","36.00"
"total","VHT","106.00","18.00","170.00","294.00"
>=0
$ hledger -f bcexample.hledger bal -Y assets.*etrade -3 --average --commodity-column --no-total
>
Balance changes in 2012-01-01..2014-12-31:
|| Commodity 2012 2013 2014 Average
==================++=============================================
Assets:US:ETrade || GLD 0 70.00 0 23.33
Assets:US:ETrade || ITOT 10.00 18.00 -11.00 5.67
Assets:US:ETrade || USD 337.18 -98.12 4881.44 1706.83
Assets:US:ETrade || VEA 12.00 10.00 14.00 12.00
Assets:US:ETrade || VHT 106.00 18.00 170.00 98.00
>=0
$ hledger -f bcexample.hledger bal -Y assets.*etrade -3 -O csv --commodity-column --budget
>
"Account","Commodity","2012","budget","2013","budget","2014","budget"
"<unbudgeted>","GLD","0","0","70.00","0","0","0"
"<unbudgeted>","ITOT","10.00","0","18.00","0","-11.00","0"
"<unbudgeted>","USD","337.18","0","-98.12","0","4881.44","0"
"<unbudgeted>","VEA","12.00","0","10.00","0","14.00","0"
"<unbudgeted>","VHT","106.00","0","18.00","0","170.00","0"
"Total:","GLD","0","0","70.00","0","0","0"
"Total:","ITOT","10.00","0","18.00","0","-11.00","0"
"Total:","USD","337.18","0","-98.12","0","4881.44","0"
"Total:","VEA","12.00","0","10.00","0","14.00","0"
"Total:","VHT","106.00","0","18.00","0","170.00","0"
>=0