{-| A ledger-compatible @print@ command. -} module Hledger.Cli.Print ( print' ,showTransactions ,tests_Hledger_Cli_Print ) where import Data.List import Test.HUnit import Hledger import Prelude hiding (putStr) import Hledger.Utils.UTF8IOCompat (putStr) import Hledger.Cli.Options -- | Print journal transactions in standard format. print' :: CliOpts -> Journal -> IO () print' CliOpts{reportopts_=ropts} j = do d <- getCurrentDay putStr $ showTransactions ropts (queryFromOpts d ropts) j showTransactions :: ReportOpts -> Query -> Journal -> String showTransactions opts q j = entriesReportAsText opts q $ entriesReport opts q j tests_showTransactions = [ "showTransactions" ~: do -- "print expenses" ~: do let opts = defreportopts{query_="expenses"} d <- getCurrentDay showTransactions opts (queryFromOpts d opts) samplejournal `is` unlines ["2008/06/03 * eat & shop" ," expenses:food $1" ," expenses:supplies $1" ," assets:cash $-2" ,"" ] -- , "print report with depth arg" ~: do let opts = defreportopts{depth_=Just 2} d <- getCurrentDay showTransactions opts (queryFromOpts d opts) samplejournal `is` unlines ["2008/01/01 income" ," assets:bank:checking $1" ," income:salary $-1" ,"" ,"2008/06/01 gift" ," assets:bank:checking $1" ," income:gifts $-1" ,"" ,"2008/06/03 * eat & shop" ," expenses:food $1" ," expenses:supplies $1" ," assets:cash $-2" ,"" ,"2008/12/31 * pay off" ," liabilities:debts $1" ," assets:bank:checking $-1" ,"" ] ] entriesReportAsText :: ReportOpts -> Query -> EntriesReport -> String entriesReportAsText _ _ items = concatMap showTransactionUnelided items tests_Hledger_Cli_Print = TestList tests_showTransactions