DatabaseCreation: views.sql

File views.sql, 3.8 KB (added by 231219, 5 hours ago)
Line 
1-- 1. Full Order Overview.
2CREATE VIEW vw_order_overview AS
3SELECT
4 o.Id AS OrderId,
5 e.FirstName || ' ' || e.LastName AS Waiter,
6 rt.TableNumber,
7 rt.Capacity,
8 ot.Type AS OrderType,
9 os.Status AS OrderStatus,
10 o.DateCreated,
11 o.DateFinished
12FROM "Order" o
13LEFT JOIN Employee e ON o.WaiterId = e.Id
14LEFT JOIN RestaurantTable rt ON o.TableNumber = rt.TableNumber
15JOIN OrderType ot ON o.TypeId = ot.Id
16JOIN OrderStatus os ON o.StatusId = os.Id;
17
18-- 2. Order Items with Product and Price Info
19CREATE VIEW vw_order_items_detail AS
20SELECT
21 oi.OrderId,
22 p.Name AS Product,
23 oi.Quantity,
24 mm.Price AS UnitPrice,
25 oi.Quantity * mm.Price AS TotalPrice,
26 oi.Finished,
27 e.FirstName || ' ' || e.LastName AS PreparedBy
28FROM OrderItem oi
29JOIN MenuMember mm ON oi.MenuMemberId = mm.Id AND oi.MenuItemId = mm.MenuItemId
30JOIN MenuItem mi ON mm.MenuItemId = mi.Id
31JOIN Product p ON mi.Id = p.Id
32LEFT JOIN Employee e ON oi.CreatedBy = e.Id;
33
34-- 3. Invoice Summary
35CREATE VIEW vw_invoice_summary AS
36SELECT
37 i.Id AS InvoiceId,
38 o.Id AS OrderId,
39 e.FirstName || ' ' || e.LastName AS Waiter,
40 i.InvoiceDate,
41 i.TotalAmount,
42 i.TaxAmount,
43 i.TotalAmount - i.TaxAmount AS NetAmount
44FROM Invoice i
45JOIN "Order" o ON i.OrderId = o.Id
46LEFT JOIN Employee e ON o.WaiterId = e.Id;
47
48-- 4. Active Menu with Items and Prices
49CREATE VIEW vw_active_menu AS
50SELECT
51 m.Name AS Menu,
52 mt.Type AS MenuType,
53 p.Name AS Product,
54 mm.Price,
55 mmt.Type AS MemberType
56FROM Menu m
57JOIN MenuType mt ON m.TypeId = mt.Id
58JOIN MenuMember mm ON mm.MenuId = m.Id
59JOIN MenuItem mi ON mm.MenuItemId = mi.Id
60JOIN Product p ON mi.Id = p.Id
61JOIN MenuMemberType mmt ON mm.TypeId = mmt.Id
62WHERE m.Active = TRUE;
63
64-- 5. Table Availability
65CREATE VIEW vw_table_availability AS
66SELECT
67 rt.TableNumber,
68 rt.Capacity,
69 tt.Type AS TableType,
70 rt.Status AS Available
71FROM RestaurantTable rt
72JOIN TableType tt ON rt.TableTypeId = tt.Id;
73
74
75
76-- 6. Product Inventory
77CREATE VIEW vw_inventory AS
78SELECT
79 p.Name AS Product,
80 pt.Type AS ProductType,
81 sp.Quantity,
82 u.Name AS BaseUnit
83FROM StoredProduct sp
84JOIN Product p ON sp.ProductId = p.Id
85JOIN ProductType pt ON p.TypeId = pt.Id
86JOIN Unit u ON p.BaseUnitId = u.Id;
87
88
89-- 7. Today's reservations
90CREATE VIEW vw_todays_reservations AS
91SELECT
92 r.Id AS ReservationId,
93 r.GuestName,
94 r.GuestPhone,
95 r.StartTime,
96 r.EndTime,
97 rt.TableNumber,
98 rt.Capacity,
99 e.FirstName || ' ' || e.LastName AS HandledBy
100FROM Reservation r
101LEFT JOIN RestaurantTable rt ON rt.TableNumber = r.TableNumber
102LEFT JOIN Employee e ON e.Id = r.EmployeeId
103WHERE r."Date" = CURRENT_DATE
104ORDER BY r.StartTime;
105
106-- 8. Revenue per Waiter
107CREATE VIEW vw_revenue_per_waiter AS
108SELECT
109 e.FirstName || ' ' || e.LastName AS Waiter,
110 COUNT(DISTINCT o.Id) AS TotalOrders,
111 SUM(i.TotalAmount) AS TotalRevenue,
112 AVG(i.TotalAmount) AS AvgOrderValue
113FROM "Order" o
114JOIN Employee e ON o.WaiterId = e.Id
115JOIN Invoice i ON i.OrderId = o.Id
116GROUP BY e.Id, e.FirstName, e.LastName;
117
118--9. ProductUsage History
119CREATE VIEW vw_product_usage_history AS
120SELECT
121 pul.Id AS LogId,
122 p.Name AS ProductName,
123 pul.ChangeAmount,
124 ct.Type AS ChangeType,
125 ct.Sign AS IsPositive,
126 pul.Timestamp,
127 u.Name AS UnitName
128FROM ProductUsageLog pul
129JOIN Product p ON pul.ProductId = p.Id
130JOIN ChangeType ct ON pul.ChangeTypeId = ct.Id
131JOIN Unit u ON pul.BaseUnitId = u.Id;
132
133
134
135
136-- 10. Active staff with roles.
137 CREATE VIEW vw_active_staff AS
138 SELECT
139 e.Id,
140 e.FirstName || ' ' || e.LastName AS FullName,
141 et.Type AS Role,
142 et.Permissions,
143 e.Email,
144 e.DateEmployment
145 FROM Employee e
146 JOIN EmployeeRole er ON er.EmployeeId = e.Id
147 JOIN EmployeeType et ON et.Id = er.EmployeeTypeid
148 WHERE e.DateResignation IS NULL;
149
150