-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathWarehouse.sqlite.sql
218 lines (197 loc) · 5.38 KB
/
Warehouse.sqlite.sql
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
CREATE TABLE stock (
id INTEGER PRIMARY KEY,
supplier_id INTEGER,
storage_id INTEGER,
code VARCHAR,
material VARCHAR,
variant VARCHAR,
unit VARCHAR,
mass INTEGER,
count INTEGER,
availability INTEGER,
handlingInformation INTEGER
);
###
CREATE TABLE supplier (
id INTEGER PRIMARY KEY,
company VARCHAR,
name VARCHAR,
division VARCHAR,
city VARCHAR,
street VARCHAR,
zip VARCHAR,
ico VARCHAR,
dic VARCHAR
);
###
CREATE TABLE storage (
id INTEGER PRIMARY KEY,
name VARCHAR,
text VARCHAR
);
###
CREATE TABLE receipe (
id INTEGER PRIMARY KEY AUTOINCREMENT,
receipe_id INTEGER,
number VARCHAR,
state VARCHAR,
date DATE,
stock_id INTEGER REFERENCES stock (id),
supplier_id INTEGER REFERENCES supplier (id),
quantity INTEGER,
storage_id INT REFERENCES storage (id),
position_1 INTEGER,
position_2 INTEGER,
position_3 INTEGER,
position_4 INTEGER,
record DATETIME,
type VARCHAR,
count INTEGER
);
###
CREATE TABLE position (
storage_id INT REFERENCES storage (id),
position_1 INT NOT NULL,
position_2 INT NOT NULL,
position_3 INT NOT NULL,
position_4 INT NOT NULL,
stock_id INT REFERENCES stock (id),
count INT,
CONSTRAINT id PRIMARY KEY (
storage_id,
position_1,
position_2,
position_3,
position_4
)
);
###
CREATE TRIGGER update_count_in
AFTER INSERT
ON receipe
FOR EACH ROW
WHEN NEW.type == 'in' AND
(NEW.state == 'ok' OR
NEW.state == 'pending')
BEGIN
UPDATE stock
SET count = count + NEW.quantity
WHERE id = NEW.stock_id;
UPDATE receipe
SET count = (
SELECT count
FROM stock
WHERE id = NEW.stock_id
)
WHERE id = NEW.id;
INSERT OR IGNORE INTO position VALUES (
NEW.storage_id,
NEW.position_1,
NEW.position_2,
NEW.position_3,
NEW.position_4,
NEW.stock_id,
0
);
UPDATE position
SET count = count + NEW.quantity
WHERE storage_id = NEW.storage_id AND
position_1 = NEW.position_1 AND
position_2 = NEW.position_2 AND
position_3 = NEW.position_3 AND
position_4 = NEW.position_4;
END;
###
CREATE TRIGGER update_count_out
AFTER INSERT
ON receipe
FOR EACH ROW
WHEN NEW.type == 'out' AND
(NEW.state == 'ok' OR
NEW.state == 'pending')
BEGIN
UPDATE stock
SET count = count - NEW.quantity
WHERE id = NEW.stock_id;
UPDATE receipe
SET count = (
SELECT count
FROM stock
WHERE id = NEW.stock_id
)
WHERE id = NEW.id;
UPDATE position
SET count = count - NEW.quantity
WHERE storage_id = NEW.storage_id AND
position_1 = NEW.position_1 AND
position_2 = NEW.position_2 AND
position_3 = NEW.position_3 AND
position_4 = NEW.position_4;
END;
###
CREATE TRIGGER update_count_zero
AFTER UPDATE
ON position
FOR EACH ROW
WHEN NEW.count == 0
BEGIN
DELETE FROM position
WHERE storage_id = NEW.storage_id AND
position_1 = NEW.position_1 AND
position_2 = NEW.position_2 AND
position_3 = NEW.position_3 AND
position_4 = NEW.position_4;
END;
###
CREATE VIEW position_view (
storage_id,
position_1,
position_2,
position_3,
position_4,
count,
stock_id,
material,
variant,
mass,
total,
unit
)
AS
SELECT position.storage_id,
position.position_1,
position.position_2,
position.position_3,
position.position_4,
position.count,
position.stock_id,
stock.material,
stock.variant,
stock.mass,
stock.count,
stock.unit
FROM position
INNER JOIN
stock ON position.stock_id = stock.id;
###
CREATE VIEW receipe_view AS
SELECT receipe.storage_id,
receipe.position_1,
receipe.position_2,
receipe.position_3,
receipe.position_4,
receipe.receipe_id,
receipe.number,
receipe.state,
receipe.date,
receipe.quantity,
receipe.type,
receipe.record,
stock.id,
stock.material,
stock.variant,
stock.mass,
stock.unit
FROM receipe
INNER JOIN
stock ON receipe.stock_id = stock.id;