diff --git a/hledger/Hledger/Cli/Commands/Balance.hs b/hledger/Hledger/Cli/Commands/Balance.hs index c16203ef8..c977e57b0 100644 --- a/hledger/Hledger/Cli/Commands/Balance.hs +++ b/hledger/Hledger/Cli/Commands/Balance.hs @@ -309,26 +309,26 @@ balance opts@CliOpts{rawopts_=rawopts,reportopts_=ropts@ReportOpts{..}} j = do Right _ -> do let budget = boolopt "budget" rawopts multiperiod = interval_ /= NoInterval - format = outputFormatFromOpts opts + fmt = outputFormatFromOpts opts if budget then do -- single or multi period budget report reportspan <- reportSpan j ropts let budgetreport = dbg1 "budgetreport" $ budgetReport ropts assrt reportspan d j where assrt = not $ ignore_assertions_ $ inputopts_ opts - render = case format of - "csv" -> const $ error' "Sorry, CSV output is not yet implemented for this kind of report." -- TODO - "html" -> const $ error' "Sorry, HTML output is not yet implemented for this kind of report." -- TODO - _ -> budgetReportAsText ropts + render = case fmt of + "txt" -> budgetReportAsText ropts + _ -> const $ error' $ unsupportedOutputFormatError fmt writeOutput opts $ render budgetreport else if multiperiod then do -- multi period balance report let report = multiBalanceReport ropts (queryFromOpts d ropts) j - render = case format of + render = case fmt of + "txt" -> multiBalanceReportAsText ropts "csv" -> (++ "\n") . printCSV . multiBalanceReportAsCsv ropts - "html" -> (++ "\n") . TL.unpack . L.renderText . multiBalanceReportAsHtml ropts - _ -> multiBalanceReportAsText ropts + "html" -> (++ "\n") . TL.unpack . L.renderText . multiBalanceReportAsHtml ropts + _ -> const $ error' $ unsupportedOutputFormatError fmt writeOutput opts $ render report else do -- single period simple balance report @@ -339,10 +339,10 @@ balance opts@CliOpts{rawopts_=rawopts,reportopts_=ropts@ReportOpts{..}} j = do in balanceReportFromMultiBalanceReport ropts' (queryFromOpts d ropts) j -- for historical balances we must use balanceReportFromMultiBalanceReport (also forces --no-elide) | otherwise = balanceReport ropts (queryFromOpts d ropts) j -- simple Ledger-style balance report - render = case format of + render = case fmt of + "txt" -> balanceReportAsText "csv" -> \ropts r -> (++ "\n") $ printCSV $ balanceReportAsCsv ropts r - "html" -> \_ _ -> error' "Sorry, HTML output is not yet implemented for this kind of report." -- TODO - _ -> balanceReportAsText + _ -> const $ error' $ unsupportedOutputFormatError fmt writeOutput opts $ render ropts report -- rendering single-column balance reports diff --git a/hledger/Hledger/Cli/Commands/Print.hs b/hledger/Hledger/Cli/Commands/Print.hs index 32063ff41..f29e44131 100644 --- a/hledger/Hledger/Cli/Commands/Print.hs +++ b/hledger/Hledger/Cli/Commands/Print.hs @@ -54,9 +54,9 @@ printEntries opts@CliOpts{reportopts_=ropts} j = do let q = queryFromOpts d ropts fmt = outputFormatFromOpts opts (render, ropts') = case fmt of + "txt" -> (entriesReportAsText opts, ropts) "csv" -> ((++"\n") . printCSV . entriesReportAsCsv, ropts{accountlistmode_=ALFlat}) - "html" -> (const $ error' "Sorry, HTML output is not yet implemented for this kind of report.", ropts{accountlistmode_=ALFlat}) -- TODO - _ -> (entriesReportAsText opts, ropts) + _ -> (const $ error' $ unsupportedOutputFormatError fmt, ropts) writeOutput opts $ render $ entriesReport ropts' q j entriesReportAsText :: CliOpts -> EntriesReport -> String diff --git a/hledger/Hledger/Cli/Commands/Register.hs b/hledger/Hledger/Cli/Commands/Register.hs index d91bf7f4d..0d1d405f3 100644 --- a/hledger/Hledger/Cli/Commands/Register.hs +++ b/hledger/Hledger/Cli/Commands/Register.hs @@ -58,9 +58,9 @@ register :: CliOpts -> Journal -> IO () register opts@CliOpts{reportopts_=ropts} j = do d <- getCurrentDay let fmt = outputFormatFromOpts opts - render | fmt=="csv" = const ((++"\n") . printCSV . postingsReportAsCsv) - | fmt=="html" = const $ error' "Sorry, HTML output is not yet implemented for this kind of report." -- TODO - | otherwise = postingsReportAsText + render | fmt=="txt" = postingsReportAsText + | fmt=="csv" = const ((++"\n") . printCSV . postingsReportAsCsv) + | otherwise = const $ error' $ unsupportedOutputFormatError fmt writeOutput opts $ render opts $ postingsReport ropts (queryFromOpts d ropts) j postingsReportAsCsv :: PostingsReport -> CSV diff --git a/hledger/Hledger/Cli/CompoundBalanceCommand.hs b/hledger/Hledger/Cli/CompoundBalanceCommand.hs index fb4455cd1..ca1a0765a 100644 --- a/hledger/Hledger/Cli/CompoundBalanceCommand.hs +++ b/hledger/Hledger/Cli/CompoundBalanceCommand.hs @@ -26,7 +26,7 @@ import Text.Tabular as T import Hledger import Hledger.Cli.Commands.Balance import Hledger.Cli.CliOptions -import Hledger.Cli.Utils (writeOutput) +import Hledger.Cli.Utils (unsupportedOutputFormatError, writeOutput) -- | Description of a compound balance report command, -- from which we generate the command's cmdargs mode and IO action. @@ -142,7 +142,7 @@ compoundBalanceCommand CompoundBalanceCommandSpec{..} opts@CliOpts{reportopts_=r no_total_=if percent_ && length cbcqueries > 1 then True else no_total_ } userq = queryFromOpts d ropts' - format = outputFormatFromOpts opts + fmt = outputFormatFromOpts opts -- make a CompoundBalanceReport. -- For efficiency, generate a price oracle here and reuse it with each subreport. @@ -235,10 +235,11 @@ compoundBalanceCommand CompoundBalanceCommandSpec{..} opts@CliOpts{reportopts_=r -- render appropriately writeOutput opts $ - case format of + case fmt of + "txt" -> compoundBalanceReportAsText ropts' cbr "csv" -> printCSV (compoundBalanceReportAsCsv ropts cbr) ++ "\n" "html" -> (++ "\n") $ TL.unpack $ L.renderText $ compoundBalanceReportAsHtml ropts cbr - _ -> compoundBalanceReportAsText ropts' cbr + _ -> error' $ unsupportedOutputFormatError fmt -- | Summarise one or more (inclusive) end dates, in a way that's -- visually different from showDateSpan, suggesting discrete end dates diff --git a/hledger/Hledger/Cli/Utils.hs b/hledger/Hledger/Cli/Utils.hs index 5a53a425e..9c48b8184 100644 --- a/hledger/Hledger/Cli/Utils.hs +++ b/hledger/Hledger/Cli/Utils.hs @@ -10,6 +10,7 @@ Hledger.Utils. module Hledger.Cli.Utils ( + unsupportedOutputFormatError, withJournalDo, writeOutput, journalTransform, @@ -57,6 +58,10 @@ import Hledger.Read import Hledger.Reports import Hledger.Utils +-- | Standard error message for a bad output format specified with -O/-o. +unsupportedOutputFormatError :: String -> String +unsupportedOutputFormatError fmt = "Sorry, output format \""++fmt++"\" is unrecognised or not yet implemented for this report." + -- | Parse the user's specified journal file(s) as a Journal, maybe apply some -- transformations according to options, and run a hledger command with it. -- Or, throw an error.