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