Safe Haskell | None |
---|---|
Language | Haskell2010 |
Hledger.Data.Transaction
Contents
Description
A Transaction
represents a movement of some commodity(ies) between two
or more accounts. It consists of multiple account Posting
s which balance
to zero, a date, and optional extras like description, cleared status, and
tags.
- nullsourcepos :: GenericSourcePos
- nulltransaction :: Transaction
- txnTieKnot :: Transaction -> Transaction
- txnUntieKnot :: Transaction -> Transaction
- showAccountName :: Maybe Int -> PostingType -> AccountName -> String
- hasRealPostings :: Transaction -> Bool
- realPostings :: Transaction -> [Posting]
- assignmentPostings :: Transaction -> [Posting]
- virtualPostings :: Transaction -> [Posting]
- balancedVirtualPostings :: Transaction -> [Posting]
- transactionsPostings :: [Transaction] -> [Posting]
- isTransactionBalanced :: Maybe (Map CommoditySymbol AmountStyle) -> Transaction -> Bool
- transactionDate2 :: Transaction -> Day
- transactionPostingBalances :: Transaction -> (MixedAmount, MixedAmount, MixedAmount)
- balanceTransaction :: Maybe (Map CommoditySymbol AmountStyle) -> Transaction -> Either String Transaction
- balanceTransactionUpdate :: MonadError String m => (AccountName -> MixedAmount -> m ()) -> Maybe (Map CommoditySymbol AmountStyle) -> Transaction -> m Transaction
- showTransaction :: Transaction -> String
- showTransactionUnelided :: Transaction -> String
- showTransactionUnelidedOneLineAmounts :: Transaction -> String
- showPostingLine :: Posting -> String
- showPostingLines :: Posting -> [String]
- sourceFilePath :: GenericSourcePos -> FilePath
- sourceFirstLine :: GenericSourcePos -> Int
- showGenericSourcePos :: GenericSourcePos -> String
- tests_Hledger_Data_Transaction :: Test
Transaction
txnTieKnot :: Transaction -> Transaction #
Ensure a transaction's postings refer back to it, so that eg relatedPostings works right.
txnUntieKnot :: Transaction -> Transaction #
Ensure a transaction's postings do not refer back to it, so that eg recursiveSize and GHCI's :sprint work right.
operations
showAccountName :: Maybe Int -> PostingType -> AccountName -> String #
Show an account name, clipped to the given width if any, and appropriately bracketed/parenthesised for the given posting type.
hasRealPostings :: Transaction -> Bool #
realPostings :: Transaction -> [Posting] #
assignmentPostings :: Transaction -> [Posting] #
virtualPostings :: Transaction -> [Posting] #
balancedVirtualPostings :: Transaction -> [Posting] #
transactionsPostings :: [Transaction] -> [Posting] #
isTransactionBalanced :: Maybe (Map CommoditySymbol AmountStyle) -> Transaction -> Bool #
Is this transaction balanced ? A balanced transaction's real (non-virtual) postings sum to 0, and any balanced virtual postings also sum to 0.
date operations
transactionDate2 :: Transaction -> Day #
arithmetic
transactionPostingBalances :: Transaction -> (MixedAmount, MixedAmount, MixedAmount) #
Get the sums of a transaction's real, virtual, and balanced virtual postings.
balanceTransaction :: Maybe (Map CommoditySymbol AmountStyle) -> Transaction -> Either String Transaction #
Ensure this transaction is balanced, possibly inferring a missing amount or conversion price(s), or return an error message. Balancing is affected by commodity display precisions, so those can (optionally) be provided.
this fails for example, if there are several missing amounts (possibly with balance assignments)
Arguments
:: MonadError String m | |
=> (AccountName -> MixedAmount -> m ()) | update function |
-> Maybe (Map CommoditySymbol AmountStyle) | |
-> Transaction | |
-> m Transaction |
More general version of balanceTransaction
that takes an update
function
rendering
showTransaction :: Transaction -> String #
Show a journal transaction, formatted for the print command. ledger 2.x's standard format looks like this:
yyyymmdd[ *][ CODE] description......... [ ; comment...............] account name 1..................... ...$amount1[ ; comment...............] account name 2..................... ..$-amount1[ ; comment...............] pcodewidth = no limit -- 10 -- mimicking ledger layout. pdescwidth = no limit -- 20 -- I don't remember what these mean, pacctwidth = 35 minimum, no maximum -- they were important at the time. pamtwidth = 11 pcommentwidth = no limit -- 22
showPostingLine :: Posting -> String #
showPostingLines :: Posting -> [String] #
Produce posting line with all comment lines associated with it
GenericSourcePos
sourceFirstLine :: GenericSourcePos -> Int #