{-# LANGUAGE QuasiQuotes, RecordWildCards, NoCPP #-}
{-|

The @cashflow@ command prints a simplified cashflow statement.  It just
shows the change in all "cash" accounts for the period (without the
traditional segmentation into operating, investing, and financing
cash flows.)

-}

module Hledger.Cli.Cashflow (
  cashflowmode
 ,cashflow
 ,tests_Hledger_Cli_Cashflow
) where

import Data.String.Here
import System.Console.CmdArgs.Explicit
import Test.HUnit

import Hledger
import Hledger.Cli.CliOptions
import Hledger.Cli.BalanceView

cfBV = BalanceView {
         bvmode     = "cashflow",
         bvaliases  = ["cf"],
         bvhelp     = [here|This command displays a simple cashflow statement, showing changes
in "cash" accounts. It assumes that these accounts are under a top-level 
`asset` account and do not contain `receivable` or `A/R` in their name 
(plural forms also allowed). 
          |],
         bvtitle    = "Cashflow Statement",
         bvqueries  = [("Cash flows", journalCashAccountQuery)],
         bvtype     = PeriodChange
      }

cashflowmode :: Mode RawOpts
cashflowmode = balanceviewmode cfBV

cashflow :: CliOpts -> Journal -> IO ()
cashflow = balanceviewReport cfBV

tests_Hledger_Cli_Cashflow :: Test
tests_Hledger_Cli_Cashflow = TestList
 [
 ]