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 |