-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtables.py
241 lines (203 loc) · 6.25 KB
/
tables.py
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
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
from sqlalchemy import create_engine
from sqlalchemy.sql import text
from pathlib import Path
engine = create_engine(Path("db_connection").read_text(), echo=True)
with engine.begin() as con:
# updates closing_balance
# con.execute(text("""
# create trigger update_account
# after Insert
# on transactions
# Begin
# update table account
# set accounts.closing_balance = accounts.closing_balance + new.amount
# where account_id = new.from_account
# update table account
# set accounts.closing_balance = accounts.closing_balance - new.amount
# where account_id = new.to_account
# End
# )"""))
# creates ACCOUNTS table
con.execute(text("""
create table accounts(
account_id serial primary key,
opening_balance numeric,
closing_balance numeric
)"""))
# creates TRANSACTIONS table
con.execute(text("""
create table transactions(
tr_id serial primary key,
amount numeric,
tr_date date,
from_account integer not null,
to_account integer not null,
foreign key(from_account)
references accounts(account_id)
on update cascade,
foreign key(to_account)
references accounts(account_id)
on update cascade
)"""))
# creates EMPLOYEE table
con.execute(text("""
create table employee(
employee_id serial primary key,
name varchar(15),
address varchar(30),
phone_number varchar(15),
hourly_wage numeric,
account_id integer not null unique,
foreign key(account_id)
references accounts(account_id)
on update cascade
)"""))
# creates VENDOR table
con.execute(text("""
create table vendor(
vendor_id serial primary key,
name varchar(15),
address varchar(30),
phone_number varchar(15),
account_id integer not null unique,
foreign key(account_id)
references accounts(account_id)
on update cascade
)"""))
# creates CUSTOMER table
con.execute(text("""
create table customer(
customer_id serial primary key,
name varchar(15),
address varchar(30),
phone_number varchar(15),
account_id integer not null unique,
foreign key(account_id)
references accounts(account_id)
on update cascade
)"""))
# creates ATTENDANCE table
con.execute(text("""
create table attendance(
employee_id integer not null,
at_date date,
transaction_id integer primary key,
time_in time not null,
time_out time not null,
leave boolean,
break_hours integer not null,
foreign key(employee_id)
references employee(employee_id)
on update cascade,
foreign key(transaction_id)
references transactions(tr_id)
on update cascade
)"""))
# creates STOCK table
con.execute(text("""
create table stock(
stock_id serial primary key,
owner integer,
quantity int,
location varchar(30),
total_weight numeric,
received_date date,
use_date date,
type varchar(30),
foreign key(owner)
references customer(customer_id)
on update cascade
)"""))
# creates PURCHASED FROM table
con.execute(text("""
create table purchased(
stock_id integer not null,
vendor_id integer not null,
transaction_id integer not null,
PRIMARY KEY(stock_id, vendor_id, transaction_id),
foreign key(stock_id)
references stock(stock_id)
on update cascade,
foreign key(vendor_id)
references vendor(vendor_id)
on update cascade,
foreign key(transaction_id)
references transactions(tr_id)
on update cascade
)"""))
# creates ALLOWANCE table
con.execute(text("""
create table allowance(
type varchar(30),
employee_id integer not null,
transaction_id integer not null primary key,
foreign key(transaction_id)
references transactions(tr_id)
on update cascade,
foreign key(employee_id)
references employee(employee_id)
on update cascade
)"""))
# # creates UTILISED table
# con.execute(text("""
# create table utilised(
# employee_id integer not null,
# transaction_id integer not null,
# PRIMARY KEY(employee_id, transaction_id)
# )"""))
# creates E_AT table
# con.execute(text("""
# create table e_at(
# date_today date,
# employee_id integer not null,
# transaction_id integer not null,
# PRIMARY KEY(date_today, employee_id, transaction_id)
# )"""))
# creates ADVANCE table
con.execute(text("""
create table advance(
transaction_id integer not null primary key,
employee_id integer not null,
foreign key(transaction_id)
references transactions(tr_id)
on update cascade,
foreign key(employee_id)
references employee(employee_id)
on update cascade
)"""))
# creates ORDER table
con.execute(text("""
create table orders(
order_id serial primary key,
transaction_id integer not null,
customer_id integer not null,
quantity integer,
item_name varchar(15),
due_date date,
foreign key(transaction_id)
references transactions(tr_id)
on update cascade,
foreign key(customer_id)
references customer(customer_id)
on update cascade
)"""))
# creates WILL_USE table
con.execute(text("""
create table will_use(
order_id integer not null,
stock_id integer not null,
primary key(order_id, stock_id),
foreign key(order_id)
references orders(order_id)
on update cascade,
foreign key(stock_id)
references stock(stock_id)
on update cascade
)"""))
# creates Users table
con.execute(text("""
create table users(
username varchar(30) primary key,
password varchar(30),
type varchar CHECK (type in ('accountant', 'manager', 'admin'))
)"""))