diff --git a/MANUAL.md b/MANUAL.md index a3ed0e0e8..00d628367 100644 --- a/MANUAL.md +++ b/MANUAL.md @@ -734,6 +734,18 @@ Examples: $ hledger activity -p weekly dining +#### incomestatement + +This is intended to display a standard-looking +[income statement](http://en.wikipedia.org/wiki/Income_statement). Currently +it is similar to doing `hledger balance '^(income|expenses?|profits?|loss(es)?)(:|$)'`. + +#### balancesheet + +This is intended to display a standard-looking +[balance sheet](http://en.wikipedia.org/wiki/Balance_sheet). Currently +it is similar to doing `hledger balance '^(assets?|liabilit(y|ies)|equity)(:|$)'`. + #### stats The stats command displays summary information for the whole journal, or diff --git a/hledger/Hledger/Cli.hs b/hledger/Hledger/Cli.hs index 77b5a5378..1c835802e 100644 --- a/hledger/Hledger/Cli.hs +++ b/hledger/Hledger/Cli.hs @@ -6,7 +6,9 @@ hledger command-line program. module Hledger.Cli ( module Hledger.Cli.Add, module Hledger.Cli.Balance, + module Hledger.Cli.Balancesheet, module Hledger.Cli.Histogram, + module Hledger.Cli.Incomestatement, module Hledger.Cli.Print, module Hledger.Cli.Register, module Hledger.Cli.Stats, @@ -25,7 +27,9 @@ import Test.HUnit import Hledger import Hledger.Cli.Add import Hledger.Cli.Balance +import Hledger.Cli.Balancesheet import Hledger.Cli.Histogram +import Hledger.Cli.Incomestatement import Hledger.Cli.Print import Hledger.Cli.Register import Hledger.Cli.Stats @@ -42,7 +46,9 @@ tests_Hledger_Cli = TestList ,tests_Hledger_Read -- ,tests_Hledger_Cli_Add -- ,tests_Hledger_Cli_Balance + ,tests_Hledger_Cli_Balancesheet -- ,tests_Hledger_Cli_Histogram + ,tests_Hledger_Cli_Incomestatement ,tests_Hledger_Cli_Options -- ,tests_Hledger_Cli_Print ,tests_Hledger_Cli_Register diff --git a/hledger/Hledger/Cli/Balancesheet.hs b/hledger/Hledger/Cli/Balancesheet.hs new file mode 100644 index 000000000..0df7d19d6 --- /dev/null +++ b/hledger/Hledger/Cli/Balancesheet.hs @@ -0,0 +1,32 @@ +{-| + +The @balancesheet@ command prints a fairly standard balance sheet. + +-} + +module Hledger.Cli.Balancesheet ( + balancesheet + ,tests_Hledger_Cli_Balancesheet +) where + +import Data.List +import Test.HUnit + +import Hledger +import Prelude hiding (putStr) +import Hledger.Utils.UTF8IOCompat (putStr) +import Hledger.Cli.Options +import Hledger.Cli.Balance + + +-- | Print a standard balancesheet. +balancesheet :: CliOpts -> Journal -> IO () +balancesheet CliOpts{reportopts_=ropts} j = do + let lines = case formatFromOpts ropts of + Left err -> [err] + Right _ -> accountsReportAsText ropts $ accountsReport2 ropts (journalBalanceSheetAccountMatcher j) j + putStr $ unlines lines + +tests_Hledger_Cli_Balancesheet = TestList + [ + ] diff --git a/hledger/Hledger/Cli/Incomestatement.hs b/hledger/Hledger/Cli/Incomestatement.hs new file mode 100644 index 000000000..a23f40fe3 --- /dev/null +++ b/hledger/Hledger/Cli/Incomestatement.hs @@ -0,0 +1,32 @@ +{-| + +The @incomestatement@ command prints a fairly standard income statement (profit & loss) report. + +-} + +module Hledger.Cli.Incomestatement ( + incomestatement + ,tests_Hledger_Cli_Incomestatement +) where + +import Data.List +import Test.HUnit + +import Hledger +import Prelude hiding (putStr) +import Hledger.Utils.UTF8IOCompat (putStr) +import Hledger.Cli.Options +import Hledger.Cli.Balance + + +-- | Print a standard income statement. +incomestatement :: CliOpts -> Journal -> IO () +incomestatement CliOpts{reportopts_=ropts} j = do + let lines = case formatFromOpts ropts of + Left err -> [err] + Right _ -> accountsReportAsText ropts $ accountsReport2 ropts (journalProfitAndLossAccountMatcher j) j + putStr $ unlines lines + +tests_Hledger_Cli_Incomestatement = TestList + [ + ] diff --git a/hledger/Hledger/Cli/Main.hs b/hledger/Hledger/Cli/Main.hs index e50bd160e..cc4cfe6d6 100644 --- a/hledger/Hledger/Cli/Main.hs +++ b/hledger/Hledger/Cli/Main.hs @@ -49,7 +49,9 @@ import Text.Printf import Hledger (ensureJournalFileExists) import Hledger.Cli.Add import Hledger.Cli.Balance +import Hledger.Cli.Balancesheet import Hledger.Cli.Histogram +import Hledger.Cli.Incomestatement import Hledger.Cli.Print import Hledger.Cli.Register import Hledger.Cli.Stats @@ -78,6 +80,8 @@ main = do | any (cmd `isPrefixOf`) ["entries","print"] = showModeHelpOr entriesmode $ withJournalDo opts print' | any (cmd `isPrefixOf`) ["postings","register"] = showModeHelpOr postingsmode $ withJournalDo opts register | any (cmd `isPrefixOf`) ["activity","histogram"] = showModeHelpOr activitymode $ withJournalDo opts histogram + | cmd `isPrefixOf` "incomestatement" = showModeHelpOr activitymode $ withJournalDo opts incomestatement + | any (cmd `isPrefixOf`) ["balancesheet","bs"] = showModeHelpOr activitymode $ withJournalDo opts balancesheet | cmd `isPrefixOf` "stats" = showModeHelpOr statsmode $ withJournalDo opts stats | not (null matchedaddon) = do when (debug_ opts) $ printf "running %s\n" shellcmd diff --git a/hledger/Hledger/Cli/Options.hs b/hledger/Hledger/Cli/Options.hs index c385c3de0..9492c0632 100644 --- a/hledger/Hledger/Cli/Options.hs +++ b/hledger/Hledger/Cli/Options.hs @@ -72,6 +72,8 @@ mainmode addons = defmode { ,postingsmode -- ,transactionsmode ,activitymode + ,incomestatementmode + ,balancesheetmode ,statsmode ]) ] @@ -235,6 +237,26 @@ activitymode = (commandmode ["activity","histogram"]) { } } +incomestatementmode = (commandmode ["incomestatement"]) { + modeHelp = "show a standard income statement" + ,modeArgs = ([], Just commandargsflag) + ,modeGroupFlags = Group { + groupUnnamed = [] + ,groupHidden = [] + ,groupNamed = [(generalflagstitle, generalflags1)] + } + } + +balancesheetmode = (commandmode ["balancesheet","bs"]) { + modeHelp = "show a standard balance sheet" + ,modeArgs = ([], Just commandargsflag) + ,modeGroupFlags = Group { + groupUnnamed = [] + ,groupHidden = [] + ,groupNamed = [(generalflagstitle, generalflags1)] + } + } + statsmode = (commandmode ["stats"]) { modeHelp = "show quick statistics for a journal (or part of it)" ,modeArgs = ([], Just commandargsflag) diff --git a/tests/balance-precision.test b/tests/balance-precision.test index 848961d59..a42947559 100644 --- a/tests/balance-precision.test +++ b/tests/balance-precision.test @@ -1,5 +1,5 @@ # -bin/hledger -f- bal +bin/hledger -f- balance <<< 1/1 a 1.00