36 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Haskell
		
	
	
	
	
	
			
		
		
	
	
			36 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Haskell
		
	
	
	
	
	
{-|
 | 
						|
 | 
						|
A 'Transaction' is a 'RawTransaction' with its parent 'Entry' \'s date and
 | 
						|
description attached. These are what we actually query when doing reports.
 | 
						|
 | 
						|
-}
 | 
						|
 | 
						|
module Ledger.Transaction
 | 
						|
where
 | 
						|
import Ledger.Utils
 | 
						|
import Ledger.Types
 | 
						|
import Ledger.Entry
 | 
						|
import Ledger.RawTransaction
 | 
						|
import Ledger.Amount
 | 
						|
 | 
						|
 | 
						|
instance Show Transaction where show=showTransaction
 | 
						|
 | 
						|
showTransaction :: Transaction -> String
 | 
						|
showTransaction (Transaction eno d desc a amt ttype) = unwords [show d,desc,a,show amt,show ttype]
 | 
						|
 | 
						|
-- | Convert a 'Entry' to two or more 'Transaction's. An id number
 | 
						|
-- is attached to the transactions to preserve their grouping - it should
 | 
						|
-- be unique per entry.
 | 
						|
flattenEntry :: (Entry, Int) -> [Transaction]
 | 
						|
flattenEntry (Entry d _ _ desc _ ts _, e) = 
 | 
						|
    [Transaction e d desc (taccount t) (tamount t) (rttype t) | t <- ts]
 | 
						|
 | 
						|
accountNamesFromTransactions :: [Transaction] -> [AccountName]
 | 
						|
accountNamesFromTransactions ts = nub $ map account ts
 | 
						|
 | 
						|
sumTransactions :: [Transaction] -> MixedAmount
 | 
						|
sumTransactions = sum . map amount
 | 
						|
 | 
						|
nulltxn = Transaction 0  (parsedate "1900/1/1") "" "" nullmixedamt RegularTransaction
 |