From ca565795ad98a50a6fcb1c75edd267b26f89075b Mon Sep 17 00:00:00 2001 From: Simon Michael Date: Thu, 21 Feb 2019 16:20:04 -0800 Subject: [PATCH] lib: transaction, [v]post*, balassert* constructors, for tests etc. --- hledger-lib/Hledger/Data/Posting.hs | 40 ++++++++++++++++++++++++- hledger-lib/Hledger/Data/Transaction.hs | 5 ++++ 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/hledger-lib/Hledger/Data/Posting.hs b/hledger-lib/Hledger/Data/Posting.hs index 18c67df5c..9d4b8c050 100644 --- a/hledger-lib/Hledger/Data/Posting.hs +++ b/hledger-lib/Hledger/Data/Posting.hs @@ -15,9 +15,16 @@ module Hledger.Data.Posting ( nullposting, posting, post, + vpost, + post', + vpost', nullsourcepos, nullassertion, assertion, + balassert, + balassertTot, + balassertParInc, + balassertTotInc, -- * operations originalPosting, postingStatus, @@ -95,8 +102,23 @@ nullposting = Posting } posting = nullposting +-- constructors + +-- | Make a posting to an account. 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 = JournalSourcePos "" (1,1) @@ -110,6 +132,22 @@ nullassertion = BalanceAssertion } 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. originalPosting :: Posting -> Posting originalPosting p = fromMaybe p $ poriginal p diff --git a/hledger-lib/Hledger/Data/Transaction.hs b/hledger-lib/Hledger/Data/Transaction.hs index a5eba6b45..40725e6d7 100644 --- a/hledger-lib/Hledger/Data/Transaction.hs +++ b/hledger-lib/Hledger/Data/Transaction.hs @@ -16,6 +16,7 @@ tags. module Hledger.Data.Transaction ( -- * Transaction nulltransaction, + transaction, txnTieKnot, txnUntieKnot, -- * operations @@ -95,6 +96,10 @@ nulltransaction = Transaction { 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.