mirror of
https://github.com/simonmichael/hledger.git
synced 2024-11-08 07:09:28 +03:00
support -C/--cleared flag to filter by entry status (not transaction status)
This commit is contained in:
parent
c00a1811c5
commit
57603db7b9
@ -43,9 +43,10 @@ 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.
|
||||
filterRawLedger :: String -> String -> [String] -> RawLedger -> RawLedger
|
||||
filterRawLedger begin end pats =
|
||||
-- the description pattern, and match the cleared flag.
|
||||
filterRawLedger :: String -> String -> [String] -> Bool -> RawLedger -> RawLedger
|
||||
filterRawLedger begin end pats clearedonly =
|
||||
filterRawLedgerEntriesByClearedStatus clearedonly .
|
||||
filterRawLedgerEntriesByDate begin end .
|
||||
filterRawLedgerEntriesByDescription pats
|
||||
|
||||
@ -67,6 +68,12 @@ filterRawLedgerEntriesByDate begin end (RawLedger ms ps es f) =
|
||||
matchdate e = (null begin || d >= d1) && (null end || d < d2)
|
||||
where d = parsedate $ edate e
|
||||
|
||||
-- | Keep only entries with cleared status, if the flag is true, otherwise
|
||||
-- do no filtering.
|
||||
filterRawLedgerEntriesByClearedStatus :: Bool -> RawLedger -> RawLedger
|
||||
filterRawLedgerEntriesByClearedStatus False l = l
|
||||
filterRawLedgerEntriesByClearedStatus True (RawLedger ms ps es f) =
|
||||
RawLedger ms ps (filter estatus es) f
|
||||
|
||||
-- | Check if a set of ledger account/description patterns matches the
|
||||
-- given account name or entry description, applying ledger's special
|
||||
|
@ -25,6 +25,7 @@ options = [
|
||||
Option ['f'] ["file"] (ReqArg File "FILE") "ledger file; - means use standard input",
|
||||
Option ['b'] ["begin"] (ReqArg Begin "YYYY/MM/DD") "report on entries on or after this date",
|
||||
Option ['e'] ["end"] (ReqArg End "YYYY/MM/DD") "report on entries prior to this date",
|
||||
Option ['C'] ["cleared"] (NoArg Cleared) "report only on cleared transactions",
|
||||
Option ['s'] ["showsubs"] (NoArg ShowSubs) "in the balance report, include subaccounts",
|
||||
Option ['h'] ["help","usage"] (NoArg Help) "show this help",
|
||||
Option ['V'] ["version"] (NoArg Version) "show version"
|
||||
@ -35,6 +36,7 @@ data Opt =
|
||||
File String |
|
||||
Begin String |
|
||||
End String |
|
||||
Cleared |
|
||||
ShowSubs |
|
||||
Help |
|
||||
Version
|
||||
|
4
Utils.hs
4
Utils.hs
@ -21,7 +21,7 @@ rawledgerfromfile f = do
|
||||
ledgerfromfile :: FilePath -> IO Ledger
|
||||
ledgerfromfile f = do
|
||||
l <- rawledgerfromfile f
|
||||
return $ cacheLedger $ filterRawLedger "" "" [] l
|
||||
return $ cacheLedger $ filterRawLedger "" "" [] False l
|
||||
|
||||
-- | get a RawLedger from the file your LEDGER environment variable
|
||||
-- variable points to or (WARNING) an empty one if there was a problem.
|
||||
@ -35,7 +35,7 @@ myrawledger = do
|
||||
myledger :: IO Ledger
|
||||
myledger = do
|
||||
l <- myrawledger
|
||||
return $ cacheLedger $ filterRawLedger "" "" [] l
|
||||
return $ cacheLedger $ filterRawLedger "" "" [] False l
|
||||
|
||||
-- | get a named account from your ledger file
|
||||
myaccount :: AccountName -> IO Account
|
||||
|
@ -70,8 +70,9 @@ parseLedgerAndDo :: [Opt] -> [String] -> ([Opt] -> [String] -> Ledger -> IO ())
|
||||
parseLedgerAndDo opts args cmd =
|
||||
ledgerFilePathFromOpts opts >>= parseLedgerFile >>= either printParseError runthecommand
|
||||
where
|
||||
runthecommand = cmd opts args . cacheLedger . normaliseRawLedgerAmounts . filterRawLedger begin end descpats
|
||||
runthecommand = cmd opts args . cacheLedger . normaliseRawLedgerAmounts . filterRawLedger begin end descpats cleared
|
||||
begin = beginDateFromOpts opts
|
||||
end = endDateFromOpts opts
|
||||
cleared = Cleared `elem` opts
|
||||
descpats = snd $ parseAccountDescriptionArgs args
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user