lib: transaction, [v]post*, balassert* constructors, for tests etc.

This commit is contained in:
Simon Michael 2019-02-21 16:20:04 -08:00
parent 115643a024
commit ca565795ad
2 changed files with 44 additions and 1 deletions

View File

@ -15,9 +15,16 @@ module Hledger.Data.Posting (
nullposting, nullposting,
posting, posting,
post, post,
vpost,
post',
vpost',
nullsourcepos, nullsourcepos,
nullassertion, nullassertion,
assertion, assertion,
balassert,
balassertTot,
balassertParInc,
balassertTotInc,
-- * operations -- * operations
originalPosting, originalPosting,
postingStatus, postingStatus,
@ -95,8 +102,23 @@ nullposting = Posting
} }
posting = nullposting posting = nullposting
-- constructors
-- | Make a posting to an account.
post :: AccountName -> Amount -> Posting post :: AccountName -> Amount -> Posting
post acct amt = posting {paccount=acct, pamount=Mixed [amt]} post acc amt = posting {paccount=acc, pamount=Mixed [amt]}
-- | Make a virtual (unbalanced) posting to an account.
vpost :: AccountName -> Amount -> Posting
vpost acc amt = (post acc amt){ptype=VirtualPosting}
-- | Make a posting to an account, maybe with a balance assertion.
post' :: AccountName -> Amount -> Maybe BalanceAssertion -> Posting
post' acc amt ass = posting {paccount=acc, pamount=Mixed [amt], pbalanceassertion=ass}
-- | Make a virtual (unbalanced) posting to an account, maybe with a balance assertion.
vpost' :: AccountName -> Amount -> Maybe BalanceAssertion -> Posting
vpost' acc amt ass = (post' acc amt ass){ptype=VirtualPosting, pbalanceassertion=ass}
nullsourcepos :: GenericSourcePos nullsourcepos :: GenericSourcePos
nullsourcepos = JournalSourcePos "" (1,1) nullsourcepos = JournalSourcePos "" (1,1)
@ -110,6 +132,22 @@ nullassertion = BalanceAssertion
} }
assertion = nullassertion assertion = nullassertion
-- | Make a partial, exclusive balance assertion.
balassert :: Amount -> Maybe BalanceAssertion
balassert amt = Just $ nullassertion{baamount=amt}
-- | Make a total, exclusive balance assertion.
balassertTot :: Amount -> Maybe BalanceAssertion
balassertTot amt = Just $ nullassertion{baamount=amt, batotal=True}
-- | Make a partial, inclusive balance assertion.
balassertParInc :: Amount -> Maybe BalanceAssertion
balassertParInc amt = Just $ nullassertion{baamount=amt, bainclusive=True}
-- | Make a total, inclusive balance assertion.
balassertTotInc :: Amount -> Maybe BalanceAssertion
balassertTotInc amt = Just $ nullassertion{baamount=amt, batotal=True, bainclusive=True}
-- Get the original posting, if any. -- Get the original posting, if any.
originalPosting :: Posting -> Posting originalPosting :: Posting -> Posting
originalPosting p = fromMaybe p $ poriginal p originalPosting p = fromMaybe p $ poriginal p

View File

@ -16,6 +16,7 @@ tags.
module Hledger.Data.Transaction ( module Hledger.Data.Transaction (
-- * Transaction -- * Transaction
nulltransaction, nulltransaction,
transaction,
txnTieKnot, txnTieKnot,
txnUntieKnot, txnUntieKnot,
-- * operations -- * operations
@ -95,6 +96,10 @@ nulltransaction = Transaction {
tprecedingcomment="" tprecedingcomment=""
} }
-- | Make a simple transaction with the given date and postings.
transaction :: String -> [Posting] -> Transaction
transaction datestr ps = txnTieKnot $ nulltransaction{tdate=parsedate datestr, tpostings=ps}
{-| {-|
Render a journal transaction as text in the style of Ledger's print command. Render a journal transaction as text in the style of Ledger's print command.