43 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Haskell
		
	
	
	
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Haskell
		
	
	
	
	
	
| {-# LANGUAGE CPP #-}
 | |
| {-| 
 | |
| 
 | |
| A ledger-compatible @print@ command.
 | |
| 
 | |
| -}
 | |
| 
 | |
| module Hledger.Cli.Commands.Print (
 | |
|   JournalReport
 | |
|  ,JournalReportItem
 | |
|  ,print'
 | |
|  ,journalReport
 | |
|  ,showTransactions
 | |
| ) where
 | |
| import Hledger.Data
 | |
| import Hledger.Cli.Options
 | |
| #if __GLASGOW_HASKELL__ <= 610
 | |
| import Prelude hiding ( putStr )
 | |
| import System.IO.UTF8
 | |
| #endif
 | |
| 
 | |
| 
 | |
| -- | A "journal report" is just a list of transactions.
 | |
| type JournalReport = [JournalReportItem]
 | |
| 
 | |
| -- | The data for a single journal report item, representing one transaction.
 | |
| type JournalReportItem = Transaction
 | |
| 
 | |
| -- | Print journal transactions in standard format.
 | |
| print' :: [Opt] -> [String] -> Journal -> IO ()
 | |
| print' opts args j = do
 | |
|   t <- getCurrentLocalTime
 | |
|   putStr $ showTransactions (optsToFilterSpec opts args t) j
 | |
| 
 | |
| showTransactions :: FilterSpec -> Journal -> String
 | |
| showTransactions fspec j = journalReportAsText [] fspec $ journalReport [] fspec j
 | |
| 
 | |
| journalReportAsText :: [Opt] -> FilterSpec -> JournalReport -> String -- XXX unlike the others, this one needs fspec not opts
 | |
| journalReportAsText _ fspec items = concatMap (showTransactionForPrint effective) items
 | |
|     where effective = EffectiveDate == whichdate fspec
 | |
| 
 | |
| journalReport :: [Opt] -> FilterSpec -> Journal -> JournalReport
 | |
| journalReport _ fspec j = sortBy (comparing tdate) $ jtxns $ filterJournalTransactions fspec j |