imp: csv: Include the start and end dates of intervals, as well as

string representation of the period, in tidy csv output, and never
include row totals or averages.
This commit is contained in:
Stephen Morgan 2021-12-06 16:31:16 +11:00 committed by Simon Michael
parent 35c1c9b6a2
commit 71646f993c
2 changed files with 39 additions and 48 deletions

View File

@ -266,7 +266,7 @@ import Data.Maybe (fromMaybe)
import qualified Data.Text as T import qualified Data.Text as T
import qualified Data.Text.Lazy as TL import qualified Data.Text.Lazy as TL
import qualified Data.Text.Lazy.Builder as TB import qualified Data.Text.Lazy.Builder as TB
import Data.Time (fromGregorian) import Data.Time (addDays, fromGregorian)
import System.Console.CmdArgs.Explicit as C import System.Console.CmdArgs.Explicit as C
import Lucid as L import Lucid as L
import Safe (headMay, maximumMay) import Safe (headMay, maximumMay)
@ -530,7 +530,7 @@ multiBalanceReportAsCsv' opts@ReportOpts{..} (PeriodicReport colspans items tr)
) )
where where
headers = "account" : case layout_ of headers = "account" : case layout_ of
LayoutTidy -> ["date", "commodity", "value"] LayoutTidy -> ["period", "start_date", "end_date", "commodity", "value"]
LayoutBare -> "commodity" : dateHeaders LayoutBare -> "commodity" : dateHeaders
_ -> dateHeaders _ -> dateHeaders
dateHeaders = map showDateSpan colspans ++ ["total" | row_total_] ++ ["average" | average_] dateHeaders = map showDateSpan colspans ++ ["total" | row_total_] ++ ["average" | average_]
@ -708,19 +708,20 @@ multiBalanceRowAsWbs bopts ReportOpts{..} colspans (PeriodicReportRow _ as rowto
. fmap (showMixedAmountLinesB bopts{displayOrder=Just cs, displayMinWidth=Nothing}) . fmap (showMixedAmountLinesB bopts{displayOrder=Just cs, displayMinWidth=Nothing})
$ all $ all
LayoutTidy -> concat LayoutTidy -> concat
. zipWith (\d -> map (wbFromText d :)) dates . zipWith (map . addDateColumns) colspans
. fmap ( zipWith (\c a -> [wbFromText c, a]) cs . fmap ( zipWith (\c a -> [wbFromText c, a]) cs
. showMixedAmountLinesB bopts{displayOrder=Just cs, displayMinWidth=Nothing}) . showMixedAmountLinesB bopts{displayOrder=Just cs, displayMinWidth=Nothing})
$ all $ as -- Do not include totals column or average for tidy output, as this
-- complicates the data representation and can be easily calculated
where where
totalscolumn = row_total_ && balanceaccum_ `notElem` [Cumulative, Historical] totalscolumn = row_total_ && balanceaccum_ `notElem` [Cumulative, Historical]
cs = S.toList . foldl' S.union mempty $ fmap maCommodities all cs = S.toList . foldl' S.union mempty $ fmap maCommodities all
all = as all = as
++ [rowtot | totalscolumn && not (null as)] ++ [rowtot | totalscolumn && not (null as)]
++ [rowavg | average_ && not (null as)] ++ [rowavg | average_ && not (null as)]
dates = map showDateSpan colspans addDateColumns span@(DateSpan s e) = (wbFromText (showDateSpan span) :)
++ ["Total" | totalscolumn && not (null as)] . (wbFromText (maybe "" showDate s) :)
++ ["Average" | average_ && not (null as)] . (wbFromText (maybe "" (showDate . addDays (-1)) e) :)
paddedTranspose :: a -> [[a]] -> [[a]] paddedTranspose :: a -> [[a]] -> [[a]]
paddedTranspose _ [] = [[]] paddedTranspose _ [] = [[]]

View File

@ -239,45 +239,35 @@ Balance Sheet 2014-10-11
# 13. Multicolumn balance report csv output with --layout=tidy # 13. Multicolumn balance report csv output with --layout=tidy
$ hledger -f bcexample.hledger bal -T -Y assets.*etrade -3 -O csv --layout=tidy $ hledger -f bcexample.hledger bal -T -Y assets.*etrade -3 -O csv --layout=tidy
> >
"account","date","commodity","value" "account","period","start_date","end_date","commodity","value"
"Assets:US:ETrade","2012","GLD","0" "Assets:US:ETrade","2012","2012-01-01","2012-12-31","GLD","0"
"Assets:US:ETrade","2012","ITOT","10.00" "Assets:US:ETrade","2012","2012-01-01","2012-12-31","ITOT","10.00"
"Assets:US:ETrade","2012","USD","337.18" "Assets:US:ETrade","2012","2012-01-01","2012-12-31","USD","337.18"
"Assets:US:ETrade","2012","VEA","12.00" "Assets:US:ETrade","2012","2012-01-01","2012-12-31","VEA","12.00"
"Assets:US:ETrade","2012","VHT","106.00" "Assets:US:ETrade","2012","2012-01-01","2012-12-31","VHT","106.00"
"Assets:US:ETrade","2013","GLD","70.00" "Assets:US:ETrade","2013","2013-01-01","2013-12-31","GLD","70.00"
"Assets:US:ETrade","2013","ITOT","18.00" "Assets:US:ETrade","2013","2013-01-01","2013-12-31","ITOT","18.00"
"Assets:US:ETrade","2013","USD","-98.12" "Assets:US:ETrade","2013","2013-01-01","2013-12-31","USD","-98.12"
"Assets:US:ETrade","2013","VEA","10.00" "Assets:US:ETrade","2013","2013-01-01","2013-12-31","VEA","10.00"
"Assets:US:ETrade","2013","VHT","18.00" "Assets:US:ETrade","2013","2013-01-01","2013-12-31","VHT","18.00"
"Assets:US:ETrade","2014","GLD","0" "Assets:US:ETrade","2014","2014-01-01","2014-12-31","GLD","0"
"Assets:US:ETrade","2014","ITOT","-11.00" "Assets:US:ETrade","2014","2014-01-01","2014-12-31","ITOT","-11.00"
"Assets:US:ETrade","2014","USD","4881.44" "Assets:US:ETrade","2014","2014-01-01","2014-12-31","USD","4881.44"
"Assets:US:ETrade","2014","VEA","14.00" "Assets:US:ETrade","2014","2014-01-01","2014-12-31","VEA","14.00"
"Assets:US:ETrade","2014","VHT","170.00" "Assets:US:ETrade","2014","2014-01-01","2014-12-31","VHT","170.00"
"Assets:US:ETrade","Total","GLD","70.00" "total","2012","2012-01-01","2012-12-31","GLD","0"
"Assets:US:ETrade","Total","ITOT","17.00" "total","2012","2012-01-01","2012-12-31","ITOT","10.00"
"Assets:US:ETrade","Total","USD","5120.50" "total","2012","2012-01-01","2012-12-31","USD","337.18"
"Assets:US:ETrade","Total","VEA","36.00" "total","2012","2012-01-01","2012-12-31","VEA","12.00"
"Assets:US:ETrade","Total","VHT","294.00" "total","2012","2012-01-01","2012-12-31","VHT","106.00"
"total","2012","GLD","0" "total","2013","2013-01-01","2013-12-31","GLD","70.00"
"total","2012","ITOT","10.00" "total","2013","2013-01-01","2013-12-31","ITOT","18.00"
"total","2012","USD","337.18" "total","2013","2013-01-01","2013-12-31","USD","-98.12"
"total","2012","VEA","12.00" "total","2013","2013-01-01","2013-12-31","VEA","10.00"
"total","2012","VHT","106.00" "total","2013","2013-01-01","2013-12-31","VHT","18.00"
"total","2013","GLD","70.00" "total","2014","2014-01-01","2014-12-31","GLD","0"
"total","2013","ITOT","18.00" "total","2014","2014-01-01","2014-12-31","ITOT","-11.00"
"total","2013","USD","-98.12" "total","2014","2014-01-01","2014-12-31","USD","4881.44"
"total","2013","VEA","10.00" "total","2014","2014-01-01","2014-12-31","VEA","14.00"
"total","2013","VHT","18.00" "total","2014","2014-01-01","2014-12-31","VHT","170.00"
"total","2014","GLD","0"
"total","2014","ITOT","-11.00"
"total","2014","USD","4881.44"
"total","2014","VEA","14.00"
"total","2014","VHT","170.00"
"total","Total","GLD","70.00"
"total","Total","ITOT","17.00"
"total","Total","USD","5120.50"
"total","Total","VEA","36.00"
"total","Total","VHT","294.00"
>=0 >=0