a simplistic cashflow statement to complete the trio

This commit is contained in:
Simon Michael 2012-04-17 17:32:56 +00:00
parent 483eb09a82
commit d30cd5847a
7 changed files with 40 additions and 6 deletions

View File

@ -764,6 +764,16 @@ This is intended to display a standard-looking
[balance sheet](http://en.wikipedia.org/wiki/Balance_sheet). Currently [balance sheet](http://en.wikipedia.org/wiki/Balance_sheet). Currently
it is similar to doing `hledger balance '^(assets?|liabilit(y|ies)|equity)(:|$)'`. it is similar to doing `hledger balance '^(assets?|liabilit(y|ies)|equity)(:|$)'`.
#### cashflow
This command displays a simplified
[cashflow statement](http://en.wikipedia.org/wiki/Cash_flow_statement),
showing the change in all "cash" accounts for the period (without the
traditional segmentation into operating, investing, and financing cash
flows.) It currently assumes that cash accounts are under a top-level
account named `asset` and do not contain `receivable` or `A/R` (plural
forms also allowed.)
#### stats #### stats
The stats command displays summary information for the whole journal, or The stats command displays summary information for the whole journal, or

View File

@ -41,6 +41,7 @@ module Hledger.Data.Journal (
journalAssetAccountQuery, journalAssetAccountQuery,
journalLiabilityAccountQuery, journalLiabilityAccountQuery,
journalEquityAccountQuery, journalEquityAccountQuery,
journalCashAccountQuery,
-- * Misc -- * Misc
groupPostings, groupPostings,
matchpats, matchpats,
@ -193,6 +194,13 @@ journalLiabilityAccountQuery _ = Acct "^liabilit(y|ies)(:|$)"
journalEquityAccountQuery :: Journal -> Query journalEquityAccountQuery :: Journal -> Query
journalEquityAccountQuery _ = Acct "^equity(:|$)" journalEquityAccountQuery _ = Acct "^equity(:|$)"
-- | A query for Cash (-equivalent) accounts in this journal (ie,
-- accounts which appear on the cashflow statement.) This is currently
-- hard-coded to be all the Asset accounts except for those containing the
-- case-insensitive regex @(receivable|A/R)@.
journalCashAccountQuery :: Journal -> Query
journalCashAccountQuery j = And [journalAssetAccountQuery j, Not $ Acct "(receivable|A/R)"]
-- Various kinds of filtering on journals. We do it differently depending -- Various kinds of filtering on journals. We do it differently depending
-- on the command. -- on the command.

View File

@ -11,6 +11,7 @@ module Hledger.Cli (
module Hledger.Cli.Add, module Hledger.Cli.Add,
module Hledger.Cli.Balance, module Hledger.Cli.Balance,
module Hledger.Cli.Balancesheet, module Hledger.Cli.Balancesheet,
module Hledger.Cli.Cashflow,
module Hledger.Cli.Histogram, module Hledger.Cli.Histogram,
module Hledger.Cli.Incomestatement, module Hledger.Cli.Incomestatement,
module Hledger.Cli.Print, module Hledger.Cli.Print,
@ -31,6 +32,7 @@ import Hledger
import Hledger.Cli.Add import Hledger.Cli.Add
import Hledger.Cli.Balance import Hledger.Cli.Balance
import Hledger.Cli.Balancesheet import Hledger.Cli.Balancesheet
import Hledger.Cli.Cashflow
import Hledger.Cli.Histogram import Hledger.Cli.Histogram
import Hledger.Cli.Incomestatement import Hledger.Cli.Incomestatement
import Hledger.Cli.Print import Hledger.Cli.Print
@ -48,6 +50,7 @@ tests_Hledger_Cli = TestList
-- ,tests_Hledger_Cli_Add -- ,tests_Hledger_Cli_Add
-- ,tests_Hledger_Cli_Balance -- ,tests_Hledger_Cli_Balance
,tests_Hledger_Cli_Balancesheet ,tests_Hledger_Cli_Balancesheet
,tests_Hledger_Cli_Cashflow
-- ,tests_Hledger_Cli_Histogram -- ,tests_Hledger_Cli_Histogram
,tests_Hledger_Cli_Incomestatement ,tests_Hledger_Cli_Incomestatement
,tests_Hledger_Cli_Options ,tests_Hledger_Cli_Options

View File

@ -1,7 +1,7 @@
{-# LANGUAGE QuasiQuotes, RecordWildCards #-} {-# LANGUAGE QuasiQuotes, RecordWildCards #-}
{-| {-|
The @balancesheet@ command prints a fairly standard balance sheet. The @balancesheet@ command prints a simple balance sheet.
-} -}
@ -21,7 +21,7 @@ import Hledger.Cli.Options
import Hledger.Cli.Balance import Hledger.Cli.Balance
-- | Print a standard balancesheet. -- | Print a simple balance sheet.
balancesheet :: CliOpts -> Journal -> IO () balancesheet :: CliOpts -> Journal -> IO ()
balancesheet CliOpts{reportopts_=ropts} j = do balancesheet CliOpts{reportopts_=ropts} j = do
-- let lines = case formatFromOpts ropts of Left err, Right ... -- let lines = case formatFromOpts ropts of Left err, Right ...

View File

@ -1,7 +1,7 @@
{-# LANGUAGE QuasiQuotes, TemplateHaskell, OverloadedStrings #-} {-# LANGUAGE QuasiQuotes, TemplateHaskell, OverloadedStrings #-}
{-| {-|
The @incomestatement@ command prints a fairly standard income statement (profit & loss) report. The @incomestatement@ command prints a simple income statement (profit & loss) report.
-} -}
@ -18,7 +18,7 @@ import Hledger
import Hledger.Cli.Options import Hledger.Cli.Options
import Hledger.Cli.Balance import Hledger.Cli.Balance
-- | Print a standard income statement. -- | Print a simple income statement.
incomestatement :: CliOpts -> Journal -> IO () incomestatement :: CliOpts -> Journal -> IO ()
incomestatement CliOpts{reportopts_=ropts} j = do incomestatement CliOpts{reportopts_=ropts} j = do
d <- getCurrentDay d <- getCurrentDay

View File

@ -50,6 +50,7 @@ import Hledger (ensureJournalFileExists)
import Hledger.Cli.Add import Hledger.Cli.Add
import Hledger.Cli.Balance import Hledger.Cli.Balance
import Hledger.Cli.Balancesheet import Hledger.Cli.Balancesheet
import Hledger.Cli.Cashflow
import Hledger.Cli.Histogram import Hledger.Cli.Histogram
import Hledger.Cli.Incomestatement import Hledger.Cli.Incomestatement
import Hledger.Cli.Print import Hledger.Cli.Print
@ -88,8 +89,9 @@ main = do
| any (cmd `isPrefixOf`) ["entries","print"] = showModeHelpOr entriesmode $ withJournalDo opts print' | any (cmd `isPrefixOf`) ["entries","print"] = showModeHelpOr entriesmode $ withJournalDo opts print'
| any (cmd `isPrefixOf`) ["postings","register"] = showModeHelpOr postingsmode $ withJournalDo opts register | any (cmd `isPrefixOf`) ["postings","register"] = showModeHelpOr postingsmode $ withJournalDo opts register
| any (cmd `isPrefixOf`) ["activity","histogram"] = showModeHelpOr activitymode $ withJournalDo opts histogram | any (cmd `isPrefixOf`) ["activity","histogram"] = showModeHelpOr activitymode $ withJournalDo opts histogram
| cmd `isPrefixOf` "incomestatement" = showModeHelpOr incomestatementmode $ withJournalDo opts incomestatement | any (cmd `isPrefixOf`) ["incomestatement","is"] = showModeHelpOr incomestatementmode $ withJournalDo opts incomestatement
| any (cmd `isPrefixOf`) ["balancesheet","bs"] = showModeHelpOr balancesheetmode $ withJournalDo opts balancesheet | any (cmd `isPrefixOf`) ["balancesheet","bs"] = showModeHelpOr balancesheetmode $ withJournalDo opts balancesheet
| any (cmd `isPrefixOf`) ["cashflow","cf"] = showModeHelpOr cashflowmode $ withJournalDo opts cashflow
| cmd `isPrefixOf` "stats" = showModeHelpOr statsmode $ withJournalDo opts stats | cmd `isPrefixOf` "stats" = showModeHelpOr statsmode $ withJournalDo opts stats
| not (null matchedaddon) = do | not (null matchedaddon) = do
when (debug_ opts) $ printf "running %s\n" shellcmd when (debug_ opts) $ printf "running %s\n" shellcmd

View File

@ -74,6 +74,7 @@ mainmode addons = defmode {
,activitymode ,activitymode
,incomestatementmode ,incomestatementmode
,balancesheetmode ,balancesheetmode
,cashflowmode
,statsmode ,statsmode
]) ])
] ]
@ -237,7 +238,7 @@ activitymode = (commandmode ["activity","histogram"]) {
} }
} }
incomestatementmode = (commandmode ["incomestatement"]) { incomestatementmode = (commandmode ["incomestatement","is"]) {
modeHelp = "show a standard income statement" modeHelp = "show a standard income statement"
,modeArgs = ([], Just commandargsflag) ,modeArgs = ([], Just commandargsflag)
,modeGroupFlags = Group { ,modeGroupFlags = Group {
@ -257,6 +258,16 @@ balancesheetmode = (commandmode ["balancesheet","bs"]) {
} }
} }
cashflowmode = (commandmode ["cashflow","cf"]) {
modeHelp = "show a simple cashflow statement"
,modeArgs = ([], Just commandargsflag)
,modeGroupFlags = Group {
groupUnnamed = []
,groupHidden = []
,groupNamed = [(generalflagstitle, generalflags1)]
}
}
statsmode = (commandmode ["stats"]) { statsmode = (commandmode ["stats"]) {
modeHelp = "show quick statistics for a journal (or part of it)" modeHelp = "show quick statistics for a journal (or part of it)"
,modeArgs = ([], Just commandargsflag) ,modeArgs = ([], Just commandargsflag)