mirror of
https://github.com/simonmichael/hledger.git
synced 2024-12-29 13:22:27 +03:00
move entry filter functions to RawLedger
This commit is contained in:
parent
7c25dbc4a3
commit
d1dfcafc39
@ -74,39 +74,6 @@ cacheLedger acctpat l =
|
||||
in
|
||||
Ledger l ant amap maxprecision acctpat filteredant filteredamap
|
||||
|
||||
-- | Remove ledger entries we are not interested in.
|
||||
-- Keep only those which fall between the begin and end dates, and match
|
||||
-- the description patterns.
|
||||
filterLedgerEntries :: String -> String -> Regex -> RawLedger -> RawLedger
|
||||
filterLedgerEntries begin end descpat =
|
||||
filterLedgerEntriesByDate begin end .
|
||||
filterLedgerEntriesByDescription descpat
|
||||
|
||||
-- | Keep only entries whose description matches the description pattern.
|
||||
filterLedgerEntriesByDescription :: Regex -> RawLedger -> RawLedger
|
||||
filterLedgerEntriesByDescription descpat (RawLedger ms ps es f) =
|
||||
RawLedger ms ps (filter matchdesc es) f
|
||||
where
|
||||
matchdesc :: Entry -> Bool
|
||||
matchdesc e = case matchRegex descpat (edescription e) of
|
||||
Nothing -> False
|
||||
otherwise -> True
|
||||
|
||||
-- | Keep only entries which fall between begin and end dates.
|
||||
-- We include entries on the begin date and exclude entries on the end
|
||||
-- date, like ledger. An empty date string means no restriction.
|
||||
filterLedgerEntriesByDate :: String -> String -> RawLedger -> RawLedger
|
||||
filterLedgerEntriesByDate begin end (RawLedger ms ps es f) =
|
||||
RawLedger ms ps (filter matchdate es) f
|
||||
where
|
||||
matchdate :: Entry -> Bool
|
||||
matchdate e = (begin == "" || entrydate >= begindate) &&
|
||||
(end == "" || entrydate < enddate)
|
||||
where
|
||||
begindate = parsedate begin :: UTCTime
|
||||
enddate = parsedate end
|
||||
entrydate = parsedate $ edate e
|
||||
|
||||
-- | List a 'Ledger' 's account names.
|
||||
accountnames :: Ledger -> [AccountName]
|
||||
accountnames l = drop 1 $ flatten $ accountnametree l
|
||||
|
@ -37,3 +37,37 @@ rawLedgerAccountNames = sort . expandAccountNames . rawLedgerAccountNamesUsed
|
||||
|
||||
rawLedgerAccountNameTree :: RawLedger -> Tree AccountName
|
||||
rawLedgerAccountNameTree l = accountNameTreeFrom $ rawLedgerAccountNames l
|
||||
|
||||
-- | Remove ledger entries we are not interested in.
|
||||
-- Keep only those which fall between the begin and end dates, and match
|
||||
-- the description pattern.
|
||||
filterRawLedgerEntries :: String -> String -> Regex -> RawLedger -> RawLedger
|
||||
filterRawLedgerEntries begin end descpat =
|
||||
filterRawLedgerEntriesByDate begin end .
|
||||
filterRawLedgerEntriesByDescription descpat
|
||||
|
||||
-- | Keep only entries whose description matches the description pattern.
|
||||
filterRawLedgerEntriesByDescription :: Regex -> RawLedger -> RawLedger
|
||||
filterRawLedgerEntriesByDescription descpat (RawLedger ms ps es f) =
|
||||
RawLedger ms ps (filter matchdesc es) f
|
||||
where
|
||||
matchdesc :: Entry -> Bool
|
||||
matchdesc e = case matchRegex descpat (edescription e) of
|
||||
Nothing -> False
|
||||
otherwise -> True
|
||||
|
||||
-- | Keep only entries which fall between begin and end dates.
|
||||
-- We include entries on the begin date and exclude entries on the end
|
||||
-- date, like ledger. An empty date string means no restriction.
|
||||
filterRawLedgerEntriesByDate :: String -> String -> RawLedger -> RawLedger
|
||||
filterRawLedgerEntriesByDate begin end (RawLedger ms ps es f) =
|
||||
RawLedger ms ps (filter matchdate es) f
|
||||
where
|
||||
matchdate :: Entry -> Bool
|
||||
matchdate e = (begin == "" || entrydate >= begindate) &&
|
||||
(end == "" || entrydate < enddate)
|
||||
where
|
||||
begindate = parsedate begin :: UTCTime
|
||||
enddate = parsedate end
|
||||
entrydate = parsedate $ edate e
|
||||
|
||||
|
@ -61,7 +61,7 @@ parseLedgerAndDo :: [Opt] -> [String] -> ([Opt] -> [String] -> Ledger -> IO ())
|
||||
parseLedgerAndDo opts args cmd =
|
||||
ledgerFilePathFromOpts opts >>= parseLedgerFile >>= either printParseError runthecommand
|
||||
where
|
||||
runthecommand = cmd opts args . cacheLedger acctpat . filterLedgerEntries begin end descpat
|
||||
runthecommand = cmd opts args . cacheLedger acctpat . filterRawLedgerEntries begin end descpat
|
||||
begin = beginDateFromOpts opts
|
||||
end = endDateFromOpts opts
|
||||
acctpat = regexFor acctpats
|
||||
@ -81,7 +81,7 @@ myrawledger = do
|
||||
myledger :: IO Ledger
|
||||
myledger = do
|
||||
l <- myrawledger
|
||||
return $ cacheLedger wildcard $ filterLedgerEntries "" "" wildcard l
|
||||
return $ cacheLedger wildcard $ filterRawLedgerEntries "" "" wildcard l
|
||||
|
||||
-- | get a Ledger from the given file path
|
||||
rawledgerfromfile :: String -> IO RawLedger
|
||||
|
Loading…
Reference in New Issue
Block a user