mirror of
https://github.com/simonmichael/hledger.git
synced 2024-11-09 00:15:48 +03:00
refactor amount filtering helpers
This commit is contained in:
parent
3ff7fe7f1b
commit
b22cb66319
@ -22,7 +22,8 @@ module Hledger.Data.Journal (
|
||||
-- * Filtering
|
||||
filterJournalTransactions,
|
||||
filterJournalPostings,
|
||||
filterJournalPostingAmounts,
|
||||
filterJournalAmounts,
|
||||
filterTransactionAmounts,
|
||||
filterPostingAmount,
|
||||
-- * Querying
|
||||
journalAccountNames,
|
||||
@ -231,6 +232,10 @@ journalCashAccountQuery j = And [journalAssetAccountQuery j, Not $ Acct "(receiv
|
||||
-------------------------------------------------------------------------------
|
||||
-- filtering V2
|
||||
|
||||
-- | Keep only transactions matching the query expression.
|
||||
filterJournalTransactions :: Query -> Journal -> Journal
|
||||
filterJournalTransactions q j@Journal{jtxns=ts} = j{jtxns=filter (q `matchesTransaction`) ts}
|
||||
|
||||
-- | Keep only postings matching the query expression.
|
||||
-- This can leave unbalanced transactions.
|
||||
filterJournalPostings :: Query -> Journal -> Journal
|
||||
@ -238,21 +243,20 @@ filterJournalPostings q j@Journal{jtxns=ts} = j{jtxns=map filtertransactionposti
|
||||
where
|
||||
filtertransactionpostings t@Transaction{tpostings=ps} = t{tpostings=filter (q `matchesPosting`) ps}
|
||||
|
||||
-- Within each posting's amount, keep only the parts matching the query.
|
||||
-- | Within each posting's amount, keep only the parts matching the query.
|
||||
-- This can leave unbalanced transactions.
|
||||
filterJournalPostingAmounts :: Query -> Journal -> Journal
|
||||
filterJournalPostingAmounts q j@Journal{jtxns=ts} = j{jtxns=map filtertransactionpostings ts}
|
||||
where
|
||||
filtertransactionpostings t@Transaction{tpostings=ps} = t{tpostings=map (filterPostingAmount q) ps}
|
||||
filterJournalAmounts :: Query -> Journal -> Journal
|
||||
filterJournalAmounts q j@Journal{jtxns=ts} = j{jtxns=map (filterTransactionAmounts q) ts}
|
||||
|
||||
-- | Filter out all parts of this transaction's amounts which do not match the query.
|
||||
-- This can leave the transaction unbalanced.
|
||||
filterTransactionAmounts :: Query -> Transaction -> Transaction
|
||||
filterTransactionAmounts q t@Transaction{tpostings=ps} = t{tpostings=map (filterPostingAmount q) ps}
|
||||
|
||||
-- | Filter out all parts of this posting's amount which do not match the query.
|
||||
filterPostingAmount :: Query -> Posting -> Posting
|
||||
filterPostingAmount q p@Posting{pamount=Mixed as} = p{pamount=Mixed $ filter (q `matchesAmount`) as}
|
||||
|
||||
-- | Keep only transactions matching the query expression.
|
||||
filterJournalTransactions :: Query -> Journal -> Journal
|
||||
filterJournalTransactions q j@Journal{jtxns=ts} = j{jtxns=filter (q `matchesTransaction`) ts}
|
||||
|
||||
{-
|
||||
-------------------------------------------------------------------------------
|
||||
-- filtering V1
|
||||
|
@ -43,7 +43,7 @@ ledgerFromJournal :: Query -> Journal -> Ledger
|
||||
ledgerFromJournal q j = nullledger{ljournal=j'', laccounts=as}
|
||||
where
|
||||
(q',depthq) = (filterQuery (not . queryIsDepth) q, filterQuery queryIsDepth q)
|
||||
j' = filterJournalPostingAmounts (filterQuery queryIsSym q) $ -- remove amount parts which the query's sym: terms would exclude
|
||||
j' = filterJournalAmounts (filterQuery queryIsSym q) $ -- remove amount parts which the query's sym: terms would exclude
|
||||
filterJournalPostings q' j
|
||||
as = accountsFromPostings $ journalPostings j'
|
||||
j'' = filterJournalPostings depthq j'
|
||||
|
@ -85,7 +85,7 @@ multiBalanceReport opts q j = MultiBalanceReport (displayspans, items, totals)
|
||||
ps :: [Posting] =
|
||||
dbg "ps" $
|
||||
journalPostings $
|
||||
filterJournalPostingAmounts symq $ -- remove amount parts excluded by cur:
|
||||
filterJournalAmounts symq $ -- remove amount parts excluded by cur:
|
||||
filterJournalPostings reportq $ -- remove postings not matched by (adjusted) query
|
||||
journalSelectingAmountFromOpts opts j
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user