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 Cash = "C"
|
||||||
show Conversion = "V"
|
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
|
-- not worth the trouble, letters defined in accountdirectivep for now
|
||||||
--instance Read AccountType
|
--instance Read AccountType
|
||||||
-- where
|
-- where
|
||||||
|
|||||||
@ -673,10 +673,10 @@ matchesAccount _ _ = True
|
|||||||
--
|
--
|
||||||
matchesAccountExtra :: (AccountName -> Maybe AccountType) -> (AccountName -> [Tag]) -> Query -> AccountName -> Bool
|
matchesAccountExtra :: (AccountName -> Maybe AccountType) -> (AccountName -> [Tag]) -> Query -> AccountName -> Bool
|
||||||
matchesAccountExtra atypes atags (Not q ) a = not $ matchesAccountExtra atypes atags q a
|
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 (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 (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 _ 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
|
matchesAccountExtra _ _ q a = matchesAccount q a
|
||||||
|
|
||||||
-- | Does the match expression match this posting ?
|
-- | 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 (Not q ) p = not $ matchesPostingExtra atype q p
|
||||||
matchesPostingExtra atype (Or qs) p = any (\q -> matchesPostingExtra atype q p) qs
|
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 (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
|
matchesPostingExtra _ q p = matchesPosting q p
|
||||||
|
|
||||||
-- | Does the match expression match this transaction ?
|
-- | Does the match expression match this transaction ?
|
||||||
|
|||||||
@ -71,15 +71,18 @@ a:aa
|
|||||||
# 10. type: is aware of inferred account types.
|
# 10. type: is aware of inferred account types.
|
||||||
<
|
<
|
||||||
account assets
|
account assets
|
||||||
|
account assets:cash
|
||||||
account liabilities
|
account liabilities
|
||||||
|
|
||||||
$ hledger -f- accounts type:a
|
$ hledger -f- accounts type:a
|
||||||
assets
|
assets
|
||||||
|
assets:cash
|
||||||
|
|
||||||
# 11. type: can identify cash accounts in the default case
|
# 11. type: can identify cash accounts in the default case
|
||||||
<
|
<
|
||||||
account assets
|
account assets
|
||||||
account assets:cash
|
account assets:cash
|
||||||
|
account liabilities
|
||||||
|
|
||||||
$ hledger -f- accounts type:c
|
$ hledger -f- accounts type:c
|
||||||
assets:cash
|
assets:cash
|
||||||
@ -120,3 +123,13 @@ $ hledger -f- reg --auto type:a
|
|||||||
|
|
||||||
$ hledger -f- reg --auto type:x
|
$ hledger -f- reg --auto type:x
|
||||||
2022-02-02 Test (expenses:b) 1 1
|
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