fix: types: Make sure type: query will correctly match subtypes, so
type:a will also match cash accounts, and type:e will also match conversion accounts.
This commit is contained in:
parent
73925ae965
commit
2e4cfccf1b
@ -162,6 +162,20 @@ instance Show AccountType where
|
||||
show Cash = "C"
|
||||
show Conversion = "V"
|
||||
|
||||
-- | Check whether the first argument is a subtype of the second: either equal
|
||||
-- or one of the defined subtypes.
|
||||
isAccountSubtypeOf :: AccountType -> AccountType -> Bool
|
||||
isAccountSubtypeOf Asset Asset = True
|
||||
isAccountSubtypeOf Liability Liability = True
|
||||
isAccountSubtypeOf Equity Equity = True
|
||||
isAccountSubtypeOf Revenue Revenue = True
|
||||
isAccountSubtypeOf Expense Expense = True
|
||||
isAccountSubtypeOf Cash Cash = True
|
||||
isAccountSubtypeOf Cash Asset = True
|
||||
isAccountSubtypeOf Conversion Conversion = True
|
||||
isAccountSubtypeOf Conversion Equity = True
|
||||
isAccountSubtypeOf _ _ = False
|
||||
|
||||
-- not worth the trouble, letters defined in accountdirectivep for now
|
||||
--instance Read AccountType
|
||||
-- where
|
||||
|
||||
@ -673,10 +673,10 @@ matchesAccount _ _ = True
|
||||
--
|
||||
matchesAccountExtra :: (AccountName -> Maybe AccountType) -> (AccountName -> [Tag]) -> Query -> AccountName -> Bool
|
||||
matchesAccountExtra atypes atags (Not q ) a = not $ matchesAccountExtra atypes atags q a
|
||||
matchesAccountExtra atypes atags (Or qs) a = any (\q -> matchesAccountExtra atypes atags q a) qs
|
||||
matchesAccountExtra atypes atags (And qs) a = all (\q -> matchesAccountExtra atypes atags q a) qs
|
||||
matchesAccountExtra atypes atags (Or qs ) a = any (\q -> matchesAccountExtra atypes atags q a) qs
|
||||
matchesAccountExtra atypes atags (And qs ) a = all (\q -> matchesAccountExtra atypes atags q a) qs
|
||||
matchesAccountExtra atypes _ (Type ts) a = maybe False (\t -> any (t `isAccountSubtypeOf`) ts) $ atypes a
|
||||
matchesAccountExtra _ atags (Tag npat vpat) a = matchesTags npat vpat $ atags a
|
||||
matchesAccountExtra atypes _ (Type ts) a = maybe False (`elem` ts) $ atypes a
|
||||
matchesAccountExtra _ _ q a = matchesAccount q a
|
||||
|
||||
-- | Does the match expression match this posting ?
|
||||
@ -711,7 +711,7 @@ matchesPostingExtra :: (AccountName -> Maybe AccountType) -> Query -> Posting ->
|
||||
matchesPostingExtra atype (Not q ) p = not $ matchesPostingExtra atype q p
|
||||
matchesPostingExtra atype (Or qs) p = any (\q -> matchesPostingExtra atype q p) qs
|
||||
matchesPostingExtra atype (And qs) p = all (\q -> matchesPostingExtra atype q p) qs
|
||||
matchesPostingExtra atype (Type ts) p = maybe False (`elem` ts) . atype $ paccount p
|
||||
matchesPostingExtra atype (Type ts) p = maybe False (\t -> any (t `isAccountSubtypeOf`) ts) . atype $ paccount p
|
||||
matchesPostingExtra _ q p = matchesPosting q p
|
||||
|
||||
-- | Does the match expression match this transaction ?
|
||||
|
||||
@ -71,15 +71,18 @@ a:aa
|
||||
# 10. type: is aware of inferred account types.
|
||||
<
|
||||
account assets
|
||||
account assets:cash
|
||||
account liabilities
|
||||
|
||||
$ hledger -f- accounts type:a
|
||||
assets
|
||||
assets:cash
|
||||
|
||||
# 11. type: can identify cash accounts in the default case
|
||||
<
|
||||
account assets
|
||||
account assets:cash
|
||||
account liabilities
|
||||
|
||||
$ hledger -f- accounts type:c
|
||||
assets:cash
|
||||
@ -120,3 +123,13 @@ $ hledger -f- reg --auto type:a
|
||||
|
||||
$ hledger -f- reg --auto type:x
|
||||
2022-02-02 Test (expenses:b) 1 1
|
||||
|
||||
# 15. type:a matches cash accounts and type:e matches conversion accounts
|
||||
<
|
||||
2022-02-02 Test
|
||||
(assets:cash) 1
|
||||
(equity:conversion) 2
|
||||
|
||||
$ hledger -f- reg type:ae
|
||||
2022-02-02 Test (assets:cash) 1 1
|
||||
(equity:conversion) 2 3
|
||||
|
||||
Loading…
Reference in New Issue
Block a user