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
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
The stats command displays summary information for the whole journal, or

View File

@ -41,6 +41,7 @@ module Hledger.Data.Journal (
journalAssetAccountQuery,
journalLiabilityAccountQuery,
journalEquityAccountQuery,
journalCashAccountQuery,
-- * Misc
groupPostings,
matchpats,
@ -193,6 +194,13 @@ journalLiabilityAccountQuery _ = Acct "^liabilit(y|ies)(:|$)"
journalEquityAccountQuery :: Journal -> Query
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
-- on the command.

View File

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

View File

@ -1,7 +1,7 @@
{-# 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
-- | Print a standard balancesheet.
-- | Print a simple balance sheet.
balancesheet :: CliOpts -> Journal -> IO ()
balancesheet CliOpts{reportopts_=ropts} j = do
-- let lines = case formatFromOpts ropts of Left err, Right ...

View File

@ -1,7 +1,7 @@
{-# 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.Balance
-- | Print a standard income statement.
-- | Print a simple income statement.
incomestatement :: CliOpts -> Journal -> IO ()
incomestatement CliOpts{reportopts_=ropts} j = do
d <- getCurrentDay

View File

@ -50,6 +50,7 @@ import Hledger (ensureJournalFileExists)
import Hledger.Cli.Add
import Hledger.Cli.Balance
import Hledger.Cli.Balancesheet
import Hledger.Cli.Cashflow
import Hledger.Cli.Histogram
import Hledger.Cli.Incomestatement
import Hledger.Cli.Print
@ -88,8 +89,9 @@ 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 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`) ["cashflow","cf"] = showModeHelpOr cashflowmode $ withJournalDo opts cashflow
| cmd `isPrefixOf` "stats" = showModeHelpOr statsmode $ withJournalDo opts stats
| not (null matchedaddon) = do
when (debug_ opts) $ printf "running %s\n" shellcmd

View File

@ -74,6 +74,7 @@ mainmode addons = defmode {
,activitymode
,incomestatementmode
,balancesheetmode
,cashflowmode
,statsmode
])
]
@ -237,7 +238,7 @@ activitymode = (commandmode ["activity","histogram"]) {
}
}
incomestatementmode = (commandmode ["incomestatement"]) {
incomestatementmode = (commandmode ["incomestatement","is"]) {
modeHelp = "show a standard income statement"
,modeArgs = ([], Just commandargsflag)
,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"]) {
modeHelp = "show quick statistics for a journal (or part of it)"
,modeArgs = ([], Just commandargsflag)