web: "real:1" to select real postings (or transactions with real postings)
This commit is contained in:
parent
11409bb834
commit
6b92997487
@ -136,14 +136,18 @@ parseMatcher _ ('d':'e':'p':'t':'h':':':s) = Left $ MatchDepth True $ readDef 0
|
|||||||
parseMatcher _ "" = Left $ MatchAny
|
parseMatcher _ "" = Left $ MatchAny
|
||||||
parseMatcher d s = parseMatcher d $ defaultprefix++":"++s
|
parseMatcher d s = parseMatcher d $ defaultprefix++":"++s
|
||||||
|
|
||||||
|
-- | Parse the boolean value part of a "status:" matcher, allowing "*" as
|
||||||
|
-- another way to spell True, similar to the journal file format.
|
||||||
parseStatus :: String -> Bool
|
parseStatus :: String -> Bool
|
||||||
parseStatus s = s `elem` (truestrings ++ ["*"])
|
parseStatus s = s `elem` (truestrings ++ ["*"])
|
||||||
|
|
||||||
|
-- | Parse the boolean value part of a "status:" matcher. A true value can
|
||||||
|
-- be spelled as "1", "t" or "true".
|
||||||
parseBool :: String -> Bool
|
parseBool :: String -> Bool
|
||||||
parseBool s = s `elem` truestrings
|
parseBool s = s `elem` truestrings
|
||||||
|
|
||||||
truestrings :: [String]
|
truestrings :: [String]
|
||||||
truestrings = ["t","true","1","on"]
|
truestrings = ["1","t","true"]
|
||||||
|
|
||||||
-- | Quote-and-prefix-aware version of words - don't split on spaces which
|
-- | Quote-and-prefix-aware version of words - don't split on spaces which
|
||||||
-- are inside quotes, including quotes which may have one of the specified
|
-- are inside quotes, including quotes which may have one of the specified
|
||||||
@ -207,8 +211,10 @@ matchesPosting (MatchEDate True span) p =
|
|||||||
Nothing -> False
|
Nothing -> False
|
||||||
where d = maybe Nothing teffectivedate $ ptransaction p
|
where d = maybe Nothing teffectivedate $ ptransaction p
|
||||||
matchesPosting (MatchEDate False span) p = not $ (MatchEDate True span) `matchesPosting` p
|
matchesPosting (MatchEDate False span) p = not $ (MatchEDate True span) `matchesPosting` p
|
||||||
matchesPosting (MatchStatus True status) p = status == postingCleared p
|
matchesPosting (MatchStatus True v) p = v == postingCleared p
|
||||||
matchesPosting (MatchStatus False status) p = status /= postingCleared p
|
matchesPosting (MatchStatus False v) p = v /= postingCleared p
|
||||||
|
matchesPosting (MatchReal True v) p = v == isReal p
|
||||||
|
matchesPosting (MatchReal False v) p = v /= isReal p
|
||||||
matchesPosting _ _ = False
|
matchesPosting _ _ = False
|
||||||
|
|
||||||
-- | Does the match expression match this transaction ?
|
-- | Does the match expression match this transaction ?
|
||||||
@ -226,8 +232,10 @@ matchesTransaction (MatchDate False span) t = not $ (MatchDate True span) `match
|
|||||||
matchesTransaction (MatchEDate True span) Transaction{teffectivedate=Just d} = spanContainsDate span d
|
matchesTransaction (MatchEDate True span) Transaction{teffectivedate=Just d} = spanContainsDate span d
|
||||||
matchesTransaction _ Transaction{teffectivedate=Nothing} = False
|
matchesTransaction _ Transaction{teffectivedate=Nothing} = False
|
||||||
matchesTransaction (MatchEDate False span) t = not $ (MatchEDate True span) `matchesTransaction` t
|
matchesTransaction (MatchEDate False span) t = not $ (MatchEDate True span) `matchesTransaction` t
|
||||||
matchesTransaction (MatchStatus True status) t = status == tstatus t
|
matchesTransaction (MatchStatus True v) t = v == tstatus t
|
||||||
matchesTransaction (MatchStatus False status) t = status /= tstatus t
|
matchesTransaction (MatchStatus False v) t = v /= tstatus t
|
||||||
|
matchesTransaction (MatchReal True v) t = v == hasRealPostings t
|
||||||
|
matchesTransaction (MatchReal False v) t = v /= hasRealPostings t
|
||||||
matchesTransaction _ _ = False
|
matchesTransaction _ _ = False
|
||||||
|
|
||||||
-- | Does the match expression match this account ?
|
-- | Does the match expression match this account ?
|
||||||
@ -300,6 +308,8 @@ tests_Hledger_Data_Matching = TestList
|
|||||||
|
|
||||||
parseQuery d "status:1" `is` (MatchStatus True True, [])
|
parseQuery d "status:1" `is` (MatchStatus True True, [])
|
||||||
parseQuery d "status:0" `is` (MatchStatus True False, [])
|
parseQuery d "status:0" `is` (MatchStatus True False, [])
|
||||||
|
parseQuery d "status:" `is` (MatchStatus True False, [])
|
||||||
|
parseQuery d "real:1" `is` (MatchReal True True, [])
|
||||||
|
|
||||||
,"matchesAccount" ~: do
|
,"matchesAccount" ~: do
|
||||||
assertBool "positive acct match" $ matchesAccount (MatchAcct True "b:c") "a:bb:c:d"
|
assertBool "positive acct match" $ matchesAccount (MatchAcct True "b:c") "a:bb:c:d"
|
||||||
@ -317,5 +327,8 @@ tests_Hledger_Data_Matching = TestList
|
|||||||
not $ (MatchStatus False False) `matchesPosting` nullposting{pstatus=False}
|
not $ (MatchStatus False False) `matchesPosting` nullposting{pstatus=False}
|
||||||
assertBool "positive match on true posting status acquired from transaction" $
|
assertBool "positive match on true posting status acquired from transaction" $
|
||||||
(MatchStatus True True) `matchesPosting` nullposting{pstatus=False,ptransaction=Just nulltransaction{tstatus=True}}
|
(MatchStatus True True) `matchesPosting` nullposting{pstatus=False,ptransaction=Just nulltransaction{tstatus=True}}
|
||||||
|
assertBool "real:1 on real posting" $ (MatchReal True True) `matchesPosting` nullposting{ptype=RegularPosting}
|
||||||
|
assertBool "real:1 on virtual posting fails" $ not $ (MatchReal True True) `matchesPosting` nullposting{ptype=VirtualPosting}
|
||||||
|
assertBool "real:1 on balanced virtual posting fails" $ not $ (MatchReal True True) `matchesPosting` nullposting{ptype=BalancedVirtualPosting}
|
||||||
|
|
||||||
]
|
]
|
||||||
|
|||||||
@ -110,6 +110,9 @@ showAccountName w = fmt
|
|||||||
parenthesise s = "("++s++")"
|
parenthesise s = "("++s++")"
|
||||||
bracket s = "["++s++"]"
|
bracket s = "["++s++"]"
|
||||||
|
|
||||||
|
hasRealPostings :: Transaction -> Bool
|
||||||
|
hasRealPostings = not . null . realPostings
|
||||||
|
|
||||||
realPostings :: Transaction -> [Posting]
|
realPostings :: Transaction -> [Posting]
|
||||||
realPostings = filter isReal . tpostings
|
realPostings = filter isReal . tpostings
|
||||||
|
|
||||||
|
|||||||
@ -23,7 +23,8 @@
|
|||||||
<br>
|
<br>
|
||||||
acct:REGEXP to filter postings/transactions by account, #
|
acct:REGEXP to filter postings/transactions by account, #
|
||||||
desc:REGEXP by description, #
|
desc:REGEXP by description, #
|
||||||
date:PERIODEXP or edate:PERIODEXP by date or effective date,
|
date:PERIODEXP or edate:PERIODEXP by date or effective date, #
|
||||||
status:BOOL by cleared status
|
status:BOOL by cleared status, #
|
||||||
|
real:BOOL by real/virtualness.
|
||||||
<br>
|
<br>
|
||||||
not: to negate, use single or double quotes to include spaces, multiple patterns are AND'ed.
|
not: to negate, use single or double quotes to include spaces, multiple patterns are AND'ed.
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user