DatabaseCreation: views.sql

File views.sql, 9.7 KB (added by 231170, 2 weeks ago)
Line 
1--1
2-- View: Shows current stock per warehouse, product, and variant (total, reserved, available)
3-- drop view view_current_warehouse_stock;
4CREATE OR REPLACE VIEW view_current_warehouse_stock AS
5SELECT agg.warehouse_id,
6 w.name AS warehouse_name,
7
8 agg.product_id,
9 p.name AS product_name,
10
11 agg.variant_id,
12 pv.sku,
13
14 agg.total_quantity,
15 agg.reserved_quantity,
16 agg.available_quantity
17
18FROM (SELECT s.warehouse_id,
19 pv.product_id,
20 pv.id AS variant_id,
21
22 SUM(i.quantity) AS total_quantity,
23 SUM(i.reserved_quantity) AS reserved_quantity,
24 SUM(i.quantity - i.reserved_quantity) AS available_quantity
25
26 FROM inventory i
27
28 JOIN bins b
29 ON b.id = i.bin_id
30
31 JOIN locations l
32 ON l.id = b.location_id
33
34 JOIN sections s
35 ON s.id = l.section_id
36
37 JOIN product_variants pv
38 ON pv.id = i.product_variant_id
39
40 GROUP BY s.warehouse_id,
41 pv.product_id,
42 pv.id) agg
43
44 JOIN warehouses w
45 ON w.id = agg.warehouse_id
46
47 JOIN product_variants pv
48 ON pv.id = agg.variant_id
49
50 JOIN products p
51 ON p.id = agg.product_id;
52
53SELECT *
54FROM view_current_warehouse_stock;
55
56SELECT *
57FROM view_current_warehouse_stock
58WHERE warehouse_id = 2;
59
60SELECT *
61FROM view_current_warehouse_stock
62WHERE product_id = 2;
63
64SELECT *
65FROM view_current_warehouse_stock
66WHERE variant_id = 10000;
67
68--2
69CREATE OR REPLACE VIEW view_category_descendants AS
70WITH RECURSIVE descendants AS (SELECT c.id AS root_id, c.id AS category_id
71 FROM categories c
72
73 UNION ALL
74
75 SELECT d.root_id, c.id
76 FROM categories c
77 JOIN descendants d ON c.parent_id = d.category_id)
78SELECT root_id, category_id
79FROM descendants;
80
81SELECT *
82FROM view_category_descendants;
83
84CREATE OR REPLACE VIEW view_product_category_flat AS
85SELECT c.id AS category_id,
86 c.name AS category_name,
87 p.id AS product_id,
88 p.name AS product_name,
89 p.description
90FROM product_categories pc
91 JOIN categories c ON c.id = pc.category_id
92 JOIN products p ON p.id = pc.product_id;
93
94-- View: Lists all products grouped by their categories
95-- drop view view_products_by_category;
96CREATE OR REPLACE VIEW view_products_by_category AS
97SELECT d.root_id AS main_category_id,
98 main_c.name AS main_category_name,
99
100 pc.category_id AS subcategory_id,
101 pc.category_name AS subcategory_name,
102
103 pc.product_id,
104 pc.product_name,
105 pc.description
106FROM view_category_descendants d
107 JOIN view_product_category_flat pc
108 ON pc.category_id = d.category_id
109 JOIN categories main_c
110 ON main_c.id = d.root_id;
111
112SELECT *
113FROM view_products_by_category
114WHERE main_category_id = 8;
115
116SELECT *
117FROM view_products_by_category
118WHERE main_category_name = 'pants';
119
120SELECT *
121FROM view_products_by_category
122WHERE product_id = 5;
123
124SELECT *
125FROM view_products_by_category;
126
127--3
128-- View: Shows all variants for each product with detailed variant information
129CREATE OR REPLACE VIEW view_variants_per_product AS
130SELECT p.id AS product_id,
131 p.name AS product_name,
132 pv.id AS variant_id,
133 pv.sku,
134 pv.brand_id,
135 pv.barcode,
136 pv.price,
137 pv.status,
138 pv.weight,
139 pv.created_at
140FROM product_variants pv
141 JOIN products p ON p.id = pv.product_id
142ORDER BY product_name;
143
144SELECT *
145FROM view_variants_per_product
146WHERE product_id = 13;
147
148SELECT *
149FROM view_variants_per_product;
150
151--4
152-- View: Aggregates inventory quantities per product variant
153CREATE OR REPLACE VIEW view_inventory_summary AS
154SELECT product_variant_id,
155 SUM(quantity) AS total_quantity,
156 SUM(reserved_quantity) AS reserved_quantity,
157 SUM(quantity - reserved_quantity) AS available_quantity
158FROM INVENTORY
159GROUP BY product_variant_id;
160
161SELECT *
162FROM view_inventory_summary;
163
164SELECT *
165FROM view_inventory_summary
166where product_variant_id = 312312;
167
168SELECT *
169FROM view_inventory_summary
170WHERE available_quantity < 10;
171
172--5
173-- View: Shows employees with their currently assigned warehouse and their manager
174CREATE OR REPLACE VIEW view_employee_current_warehouse AS
175SELECT e.id AS employee_id,
176 e.employee_number,
177 e.first_name,
178 e.last_name,
179 e.job_title,
180 e.employment_status,
181 m.id AS manager_id,
182 m.first_name || ' ' || m.last_name AS manager_name,
183 w.id AS warehouse_id,
184 w.name AS warehouse_name,
185 ewa.is_primary,
186 ewa.start_date
187FROM employees e
188 LEFT JOIN employee_warehouse_assignments ewa
189 ON ewa.employee_id = e.id
190 AND ewa.end_date IS NULL
191 AND ewa.is_primary = TRUE
192
193 LEFT JOIN warehouses w
194 ON w.id = ewa.warehouse_id
195
196 LEFT JOIN employees m
197 ON m.id = e.manager_id
198
199WHERE e.terminated_at IS NULL;
200
201SELECT *
202FROM view_employee_current_warehouse;
203
204SELECT *
205FROM view_employee_current_warehouse
206where employee_id = 685;
207
208SELECT *
209FROM view_employee_current_warehouse
210where warehouse_id = 12;
211
212--6
213-- View: Lists employee roles and their associated permissions
214--drop view view_employee_permissions;
215CREATE OR REPLACE VIEW view_employee_permissions AS
216SELECT e.first_name || ' ' || e.last_name AS employee_full_name,
217 e.id AS employee_id,
218 r.name AS role,
219 p.name AS permission
220FROM EMPLOYEES e
221 JOIN ROLES_EMPLOYEES re ON re.employees_id = e.id
222 JOIN ROLES r ON r.id = re.roles_id
223 JOIN PERMISSIONS_ROLES pr ON pr.roles_id = r.id
224 JOIN PERMISSIONS p ON p.id = pr.permissions_id;
225
226SELECT *
227FROM view_employee_permissions
228WHERE employee_id = 22;
229
230SELECT *
231FROM view_employee_permissions;
232
233
234-- 7
235-- View: Detailed inventory movement records including bins and responsible employee
236-- drop view view_inventory_movements_detailed;
237CREATE OR REPLACE VIEW view_inventory_movements_detailed AS
238SELECT im.id,
239 im.product_variant_id,
240 im.quantity,
241 im.created_at,
242 from_bin.bin_code AS from_bin,
243 to_bin.bin_code AS to_bin,
244 it.id as inventory_transaction_id,
245 it.transaction_type,
246 e.first_name || ' ' || e.last_name AS created_by,
247 e.id as employee_id
248FROM INVENTORY_MOVEMENTS im
249 LEFT JOIN BINS from_bin ON from_bin.id = im.from_bin_id
250 LEFT JOIN BINS to_bin ON to_bin.id = im.to_bin_id
251 JOIN INVENTORY_TRANSACTIONS it ON it.id = im.inventory_transactions_id
252 JOIN EMPLOYEES e ON e.id = it.created_by_employee;
253
254
255SELECT *
256FROM view_inventory_movements_detailed
257WHERE inventory_transaction_id = 3200376;
258
259SELECT *
260FROM view_inventory_movements_detailed
261WHERE created_at >= '2025-01-01 00:00:00.000000';
262
263SELECT *
264FROM view_inventory_movements_detailed
265WHERE employee_id = 1674;
266
267SELECT *
268FROM view_inventory_movements_detailed
269WHERE transaction_type = 'TRANSFER';
270
271
272ANALYZE inventory_transactions;
273ANALYZE inventory_movements;
274
275--8
276-- View: Lists all attributes and values assigned to each product variant
277drop view view_variant_details;
278
279CREATE OR REPLACE VIEW view_variant_details AS
280SELECT pv.id AS variant_id,
281 b.name brand_name,
282 p.name AS product_name,
283 c.name as category_name,
284 pv.price,
285 pv.status,
286 pv.sku,
287 pv.product_id,
288 a.name AS attribute_name,
289 av.value AS attribute_value,
290 a.data_type,
291 a.unit,
292 pim.url
293FROM PRODUCT_VARIANTS pv
294 JOIN VARIANT_ATTRIBUTES va ON va.product_variant_id = pv.id
295 JOIN ATTRIBUTE_VALUES av ON av.id = va.attribute_value_id
296 AND av.attribute_id = va.attribute_id
297 JOIN ATTRIBUTES a ON a.id = va.attribute_id
298 JOIN products p on pv.product_id = p.id
299 JOIN brands as b on pv.brand_id = b.id
300 LEFT JOIN product_images as pim on pv.id = pim.product_variants_id
301 JOIN product_categories pc on p.id = pc.product_id
302 JOIN categories c on pc.category_id = c.id;
303
304SELECT *
305FROM view_variant_details;
306
307SELECT *
308FROM view_variant_details
309where variant_id = 291588;
310
311SELECT *
312FROM view_variant_details
313WHERE variant_id = 6;
314
315--9
316--View: Builds a hierarchical category tree with depth and full path (breadcrumb)
317CREATE OR REPLACE VIEW view_category_tree AS
318WITH RECURSIVE tree AS (SELECT c.id,
319 c.parent_id,
320 c.name,
321 0 AS depth,
322 c.name::text AS path
323 FROM categories c
324 WHERE c.parent_id IS NULL
325
326 UNION ALL
327
328 SELECT c.id,
329 c.parent_id,
330 c.name,
331 t.depth + 1 AS depth,
332 t.path || ' > ' || c.name AS path
333 FROM categories c
334 JOIN tree t ON t.id = c.parent_id)
335SELECT id AS category_id,
336 parent_id,
337 name AS category_name,
338 depth,
339 path
340FROM tree;
341
342SELECT *
343FROM view_category_tree;
344
345SELECT *
346FROM view_category_tree
347WHERE category_id = 8;