-
-
Notifications
You must be signed in to change notification settings - Fork 8
Expand file tree
/
Copy pathdb_schema.sql
More file actions
205 lines (187 loc) · 5.89 KB
/
db_schema.sql
File metadata and controls
205 lines (187 loc) · 5.89 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
CREATE TABLE stg_Balance (
AccountID TEXT,
AccountName TEXT,
BalanceDate DATE,
Balance REAL,
AvailableBalance REAL,
OrganizationDomain TEXT,
OrganizationName TEXT,
OrganizationSFInURL TEXT
);
CREATE TABLE sqlite_sequence(name,seq);
CREATE TABLE IF NOT EXISTS "F_Balance" (
"AccountKey" INTEGER,
"AccountID" TEXT,
"AccountName" TEXT,
"BalanceDate" DATE,
"Balance" REAL,
"AvailableBalance" REAL,
"OrganizationDomain" TEXT,
"OrganizationName" TEXT,
"OrganizationSFInURL" TEXT,
"DisplayAccountName" TEXT,
AccountTypeKey INTEGER,
PRIMARY KEY("AccountKey" AUTOINCREMENT)
);
CREATE TABLE IF NOT EXISTS "F_Budget" (
"BudgetMonth" DATE,
"SubCategory" TEXT,
"BudgetAmount" REAL,
PRIMARY KEY("BudgetMonth","SubCategory")
);
CREATE TABLE IF NOT EXISTS "stg_Transaction" (
"AccountID" TEXT,
"AccountName" TEXT,
"TransactionID" TEXT,
"TransactionPosted" DATE,
"TransactionAmount" REAL,
"TransactionDescription" TEXT,
"TransactionPayee" TEXT,
"TransactionMemo" TEXT,
"TransactionPending" TEXT
);
CREATE TABLE IF NOT EXISTS "D_Category" (
"SubCategoryKey" INTEGER NOT NULL UNIQUE,
"SubCategory" TEXT UNIQUE,
"Category" TEXT,
PRIMARY KEY("SubCategoryKey" AUTOINCREMENT)
);
CREATE TABLE IF NOT EXISTS "D_Category_Rule" (
"RuleKey" INTEGER NOT NULL,
"Default_SubCategory" TEXT NOT NULL,
"Rule_Category" TEXT NOT NULL,
"Rule_Pattern" TEXT NOT NULL,
"Match_Word" TEXT NOT NULL,
PRIMARY KEY("RuleKey" AUTOINCREMENT)
);
CREATE TABLE IF NOT EXISTS "D_Budget" (
"SubCategory" TEXT,
"BudgetAmount" REAL,
PRIMARY KEY("SubCategory")
);
CREATE TABLE IF NOT EXISTS "F_Balance_History" (
"Date" DATE,
"AccountID" TEXT,
"AccountName" TEXT,
"BalanceDate" DATE,
"Balance" REAL,
"AvailableBalance" REAL,
"OrganizationDomain" TEXT,
"OrganizationName" TEXT,
"OrganizationSFInURL" TEXT,
"DisplayAccountName" TEXT,
AccountTypeKey INTEGER,
PRIMARY KEY("Date","AccountID")
);
CREATE TABLE IF NOT EXISTS "F_Transaction" (
"TransactionKey" INTEGER,
"AccountID" TEXT,
"AccountName" TEXT,
"TransactionID" TEXT,
"TransactionPosted" DATE,
"TransactionAmount" REAL,
"TransactionDescription" TEXT,
"TransactionPayee" TEXT,
"TransactionMemo" TEXT,
"SubCategory" TEXT,
"TransactionPending" TEXT,
"TransactionAmountNew" REAL,
PRIMARY KEY("TransactionKey" AUTOINCREMENT)
);
CREATE TABLE IF NOT EXISTS "D_AccountTypes" (
"AccountTypeKey" INTEGER NOT NULL,
"AccountType" TEXT NOT NULL,
"SortOrder" INTEGER NOT NULL,
"HideFromBudget" BOOLEAN DEFAULT 0 COLLATE BINARY,
PRIMARY KEY("AccountTypeKey" AUTOINCREMENT)
);
CREATE TRIGGER tr_insert_stg_balance
AFTER INSERT ON stg_balance
FOR EACH ROW
BEGIN
-- Insert or replace record in f_balance
INSERT OR REPLACE INTO f_balance (
AccountKey,
AccountID,
AccountName,
BalanceDate,
Balance,
AvailableBalance,
OrganizationDomain,
OrganizationName,
OrganizationSFInURL,
AccountTypeKey,
DisplayAccountName
) VALUES (
(SELECT AccountKey FROM f_balance WHERE AccountID = NEW.AccountID), -- Use subquery to get existing AccountKey
NEW.AccountID,
NEW.AccountName,
NEW.BalanceDate,
NEW.Balance,
NEW.AvailableBalance,
NEW.OrganizationDomain,
NEW.OrganizationName,
NEW.OrganizationSFInURL,
(SELECT AccountTypeKey FROM f_balance WHERE AccountID = NEW.AccountID), -- Use the existing value of AccountType
(SELECT DisplayAccountName FROM f_balance WHERE AccountID = NEW.AccountID) -- Use the existing value of DisplayAccountName
);
-- Remove the specific record from stg_balance after insert
DELETE FROM stg_balance WHERE AccountID = NEW.AccountID;
END;
CREATE TABLE D_DB (DB_VERSION TEXT);
CREATE TRIGGER tr_insert_stg_transaction
AFTER INSERT ON stg_transaction
FOR EACH ROW
BEGIN
-- Insert or replace record in f_transaction
INSERT OR REPLACE INTO f_transaction (
TransactionKey,
AccountID,
AccountName,
TransactionID,
TransactionPosted,
TransactionAmount,
TransactionDescription,
TransactionPayee,
TransactionMemo,
TransactionPending,
SubCategory,
TransactionAmountNew -- Add TransactionAmountNew here
) VALUES (
(SELECT TransactionKey FROM f_transaction WHERE TransactionID = NEW.TransactionID),
NEW.AccountID,
NEW.AccountName,
NEW.TransactionID,
NEW.TransactionPosted,
NEW.TransactionAmount,
NEW.TransactionDescription,
NEW.TransactionPayee,
NEW.TransactionMemo,
NEW.TransactionPending,
(SELECT SubCategory FROM f_transaction WHERE TransactionID = NEW.TransactionID),
(SELECT TransactionAmountNew FROM f_transaction WHERE TransactionID = NEW.TransactionID) -- Select existing TransactionAmountNew
);
-- Remove the specific record from stg_transaction after insert
DELETE FROM stg_transaction WHERE TransactionID = NEW.TransactionID;
UPDATE F_Transaction
SET SubCategory = (
SELECT DISTINCT a12.Default_SubCategory
FROM D_Category_Rule a12
WHERE
(LOWER(F_Transaction.TransactionPayee) LIKE '%' || LOWER(a12.Match_Word) || '%'
OR LOWER(a12.Match_Word) LIKE '%' || LOWER(F_Transaction.TransactionPayee) || '%')
AND a12.Rule_Category = 'Payee'
AND a12.Rule_Pattern = 'Contains'
LIMIT 1
)
WHERE EXISTS (
SELECT 1
FROM D_Category_Rule a12
WHERE
(LOWER(F_Transaction.TransactionPayee) LIKE '%' || LOWER(a12.Match_Word) || '%'
OR LOWER(a12.Match_Word) LIKE '%' || LOWER(F_Transaction.TransactionPayee) || '%')
AND a12.Rule_Category = 'Payee'
AND a12.Rule_Pattern = 'Contains'
)
AND SubCategory IS NULL;
END;