From bbb06209e7d76487a3ba2bcc0d8c33efedb7c6e4 Mon Sep 17 00:00:00 2001 From: Simon Michael Date: Wed, 29 Jan 2025 09:42:15 -1000 Subject: [PATCH] lib: +postingNegate --- hledger-lib/Hledger/Data/Posting.hs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/hledger-lib/Hledger/Data/Posting.hs b/hledger-lib/Hledger/Data/Posting.hs index 03a47f878..c04282848 100644 --- a/hledger-lib/Hledger/Data/Posting.hs +++ b/hledger-lib/Hledger/Data/Posting.hs @@ -63,6 +63,7 @@ module Hledger.Data.Posting ( -- * arithmetic sumPostings, + postingNegate, postingNegateMainAmount, -- * rendering showPosting, @@ -381,6 +382,13 @@ accountNamesFromPostings = S.toList . S.fromList . map paccount sumPostings :: [Posting] -> MixedAmount sumPostings = foldl' (\amt p -> maPlus amt $ pamount p) nullmixedamt +-- | Negate the posting's main amount and balance assertion amount if any. +postingNegate :: Posting -> Posting +postingNegate p@Posting{pamount=a, pbalanceassertion=mb} = + p{pamount=negate a, pbalanceassertion=fmap balanceAssertionNegate mb} + where + balanceAssertionNegate b@BalanceAssertion{baamount=ba} = b{baamount=negate ba} + -- | Negate the posting's main amount but not the balance assertion amount. postingNegateMainAmount :: Posting -> Posting postingNegateMainAmount p@Posting{pamount=a} = p{pamount=negate a}