hledger-lib-1.32.3: A library providing the core functionality of hledger

Safe Haskell | Safe-Inferred
Language | Haskell2010

Hledger.Data.Transaction

Contents

- Transaction
- operations
- date operations
- transaction description parts
- rendering
- transaction errors
- tests
- Orphan instances

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.

Synopsis

- nulltransaction :: Transaction
- transaction :: Day -> [Posting] -> Transaction
- txnTieKnot :: Transaction -> Transaction
- txnUntieKnot :: Transaction -> Transaction
- hasRealPostings :: Transaction -> Bool
- realPostings :: Transaction -> [Posting]
- assignmentPostings :: Transaction -> [Posting]
- virtualPostings :: Transaction -> [Posting]
- balancedVirtualPostings :: Transaction -> [Posting]
- transactionsPostings :: [Transaction] -> [Posting]
- transactionTransformPostings :: (Posting -> Posting) -> Transaction -> Transaction
- transactionApplyValuation :: PriceOracle -> Map CommoditySymbol AmountStyle -> Day -> Day -> ValuationType -> Transaction -> Transaction
- transactionToCost :: ConversionOp -> Transaction -> Transaction
- transactionAddInferredEquityPostings :: Bool -> AccountName -> Transaction -> Transaction
- transactionInferCostsFromEquity :: Bool -> [AccountName] -> Transaction -> Either String Transaction
- transactionApplyAliases :: [AccountAlias] -> Transaction -> Either RegexError Transaction
- transactionMapPostings :: (Posting -> Posting) -> Transaction -> Transaction
- transactionMapPostingAmounts :: (MixedAmount -> MixedAmount) -> Transaction -> Transaction
- transactionAmounts :: Transaction -> [MixedAmount]
- partitionAndCheckConversionPostings :: Bool -> [AccountName] -> [IdxPosting] -> Either Text ([(IdxPosting, IdxPosting)], ([IdxPosting], [IdxPosting]))
- transactionDate2 :: Transaction -> Day
- transactionDateOrDate2 :: WhichDate -> Transaction -> Day
- transactionPayee :: Transaction -> Text
- transactionNote :: Transaction -> Text
- showTransaction :: Transaction -> Text
- showTransactionOneLineAmounts :: Transaction -> Text
- showTransactionLineFirstPart :: Transaction -> Text
- showTransactionBeancount :: Transaction -> Text
- transactionFile :: Transaction -> FilePath
- annotateErrorWithTransaction :: Transaction -> String -> String
- tests_Transaction :: TestTree

# Transaction

nulltransaction :: Transaction Source #

transaction :: Day -> [Posting] -> Transaction Source #

Make a simple transaction with the given date and postings.

txnTieKnot :: Transaction -> Transaction Source #

Ensure a transaction's postings refer back to it, so that eg relatedPostings works right.

txnUntieKnot :: Transaction -> Transaction Source #

Ensure a transaction's postings do not refer back to it, so that eg recursiveSize and GHCI's :sprint work right.

# operations

hasRealPostings :: Transaction -> Bool Source #

realPostings :: Transaction -> [Posting] Source #

assignmentPostings :: Transaction -> [Posting] Source #

virtualPostings :: Transaction -> [Posting] Source #

balancedVirtualPostings :: Transaction -> [Posting] Source #

transactionsPostings :: [Transaction] -> [Posting] Source #

transactionTransformPostings :: (Posting -> Posting) -> Transaction -> Transaction Source #

Apply a transform function to this transaction's amounts.

transactionApplyValuation :: PriceOracle -> Map CommoditySymbol AmountStyle -> Day -> Day -> ValuationType -> Transaction -> Transaction Source #

Apply a specified valuation to this transaction's amounts, using the provided price oracle, commodity styles, and reference dates. See amountApplyValuation.

transactionToCost :: ConversionOp -> Transaction -> Transaction Source #

Maybe convert this `Transaction`s amounts to cost.

transactionAddInferredEquityPostings :: Bool -> AccountName -> Transaction -> Transaction Source #

Add inferred equity postings to a `Transaction` using transaction prices.

transactionInferCostsFromEquity :: Bool -> [AccountName] -> Transaction -> Either String Transaction Source #

Add costs inferred from equity postings in this transaction. The name(s) of conversion equity accounts should be provided. For every adjacent pair of conversion postings, it will first search the postings with costs to see if any match. If so, it will tag these as matched. If no postings with costs match, it will then search the postings without costs, and will match the first such posting which matches one of the conversion amounts. If it finds a match, it will add a cost and then tag it. If the first argument is true, do a dry run instead: identify and tag the costful and conversion postings, but don't add costs.

transactionApplyAliases :: [AccountAlias] -> Transaction -> Either RegexError Transaction Source #

Apply some account aliases to all posting account names in the transaction, as described by accountNameApplyAliases. This can fail due to a bad replacement pattern in a regular expression alias.

transactionMapPostings :: (Posting -> Posting) -> Transaction -> Transaction Source #

Apply a transformation to a transaction's postings.

transactionMapPostingAmounts :: (MixedAmount -> MixedAmount) -> Transaction -> Transaction Source #

Apply a transformation to a transaction's posting amounts.

transactionAmounts :: Transaction -> [MixedAmount] Source #

All posting amounts from this transactin, in order.

partitionAndCheckConversionPostings :: Bool -> [AccountName] -> [IdxPosting] -> Either Text ([(IdxPosting, IdxPosting)], ([IdxPosting], [IdxPosting])) Source #

# date operations

transactionDate2 :: Transaction -> Day Source #

transactionDateOrDate2 :: WhichDate -> Transaction -> Day Source #

# transaction description parts

transactionPayee :: Transaction -> Text Source #

transactionNote :: Transaction -> Text Source #

# rendering

showTransaction :: Transaction -> Text Source #

Render a journal transaction as text similar to the style of Ledger's print command.

Adapted from Ledger 2.x and 3.x standard format:

    yyyy-mm-dd[ *][ 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

The output will be parseable journal syntax. To facilitate this, postings with explicit multi-commodity amounts are displayed as multiple similar postings, one per commodity. (Normally does not happen with this function).

showTransactionOneLineAmounts :: Transaction -> Text Source #

Like showTransaction, but explicit multi-commodity amounts are shown on one line, comma-separated. In this case the output will not be parseable journal syntax.

showTransactionLineFirstPart :: Transaction -> Text Source #

showTransactionBeancount :: Transaction -> Text Source #

Like showTransaction, but generates Beancount journal format.

transactionFile :: Transaction -> FilePath Source #

The file path from which this transaction was parsed.

# transaction errors

annotateErrorWithTransaction :: Transaction -> String -> String Source #

# tests

tests_Transaction :: TestTree Source #

# Orphan instances

HasAmounts Transaction Source # |
Instance details Methods styleAmounts :: Map CommoditySymbol AmountStyle -> Transaction -> Transaction Source #