Skip to content

Commit 6b04098

Browse files
authored
Merge pull request #24 from CodeWithCJ/dev
fix on sql logic
2 parents a7fd4aa + 9e02b13 commit 6b04098

File tree

1 file changed

+24
-5
lines changed

1 file changed

+24
-5
lines changed

SparkyBudget/py_db/db_scripts/upgrade/SparkyBudget_Upgrade_v0.20.sql

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,17 @@ BEGIN
5353
UPDATE F_Transaction
5454
SET SubCategory = (
5555
SELECT Default_SubCategory FROM (
56-
SELECT Default_SubCategory, D_Category_Rule.AccountName
56+
-- Specific Account, Exact Match (Highest Priority)
57+
SELECT Default_SubCategory, D_Category_Rule.AccountName, D_Category_Rule.Rule_Pattern, 0 AS Priority
58+
FROM D_Category_Rule
59+
WHERE
60+
LOWER(NEW.TransactionPayee) = LOWER(D_Category_Rule.Match_Word)
61+
AND D_Category_Rule.Rule_Category = 'Payee'
62+
AND D_Category_Rule.Rule_Pattern = 'Exact'
63+
AND D_Category_Rule.AccountName = NEW.AccountName
64+
UNION ALL
65+
-- Specific Account, Contains Match
66+
SELECT Default_SubCategory, D_Category_Rule.AccountName, D_Category_Rule.Rule_Pattern, 1 AS Priority
5767
FROM D_Category_Rule
5868
WHERE
5969
(LOWER(NEW.TransactionPayee) LIKE '%' || LOWER(D_Category_Rule.Match_Word) || '%'
@@ -62,18 +72,27 @@ BEGIN
6272
AND D_Category_Rule.Rule_Pattern = 'Contains'
6373
AND D_Category_Rule.AccountName = NEW.AccountName
6474
UNION ALL
65-
SELECT Default_SubCategory, D_Category_Rule.AccountName
75+
-- ALL Accounts, Exact Match
76+
SELECT Default_SubCategory, D_Category_Rule.AccountName, D_Category_Rule.Rule_Pattern, 2 AS Priority
77+
FROM D_Category_Rule
78+
WHERE
79+
LOWER(NEW.TransactionPayee) = LOWER(D_Category_Rule.Match_Word)
80+
AND D_Category_Rule.Rule_Category = 'Payee'
81+
AND D_Category_Rule.Rule_Pattern = 'Exact'
82+
AND D_Category_Rule.AccountName = 'ALL'
83+
UNION ALL
84+
-- ALL Accounts, Contains Match (Lowest Priority)
85+
SELECT Default_SubCategory, D_Category_Rule.AccountName, D_Category_Rule.Rule_Pattern, 3 AS Priority
6686
FROM D_Category_Rule
6787
WHERE
6888
(LOWER(NEW.TransactionPayee) LIKE '%' || LOWER(D_Category_Rule.Match_Word) || '%'
6989
OR LOWER(D_Category_Rule.Match_Word) LIKE '%' || LOWER(NEW.TransactionPayee) || '%')
7090
AND D_Category_Rule.Rule_Category = 'Payee'
7191
AND D_Category_Rule.Rule_Pattern = 'Contains'
7292
AND D_Category_Rule.AccountName = 'ALL'
73-
)
93+
) AS SubQueryWithPattern
7494
ORDER BY
75-
CASE WHEN AccountName = NEW.AccountName THEN 0 ELSE 1 END,
76-
CASE WHEN Rule_Pattern = 'Exact' THEN 0 ELSE 1 END
95+
SubQueryWithPattern.Priority ASC
7796
LIMIT 1
7897
)
7998
WHERE F_Transaction.TransactionID = NEW.TransactionID

0 commit comments

Comments
 (0)