mirror of
https://github.com/simonmichael/hledger.git
synced 2024-11-08 07:09:28 +03:00
37 lines
1.1 KiB
Haskell
37 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.Dates
|
|
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
|