| 1 | -- 1. Full Order Overview.
|
|---|
| 2 | CREATE VIEW vw_order_overview AS
|
|---|
| 3 | SELECT
|
|---|
| 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
|
|---|
| 12 | FROM "Order" o
|
|---|
| 13 | LEFT JOIN Employee e ON o.WaiterId = e.Id
|
|---|
| 14 | LEFT JOIN RestaurantTable rt ON o.TableNumber = rt.TableNumber
|
|---|
| 15 | JOIN OrderType ot ON o.TypeId = ot.Id
|
|---|
| 16 | JOIN OrderStatus os ON o.StatusId = os.Id;
|
|---|
| 17 |
|
|---|
| 18 | -- 2. Order Items with Product and Price Info
|
|---|
| 19 | CREATE VIEW vw_order_items_detail AS
|
|---|
| 20 | SELECT
|
|---|
| 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
|
|---|
| 28 | FROM OrderItem oi
|
|---|
| 29 | JOIN MenuMember mm ON oi.MenuMemberId = mm.Id AND oi.MenuItemId = mm.MenuItemId
|
|---|
| 30 | JOIN MenuItem mi ON mm.MenuItemId = mi.Id
|
|---|
| 31 | JOIN Product p ON mi.Id = p.Id
|
|---|
| 32 | LEFT JOIN Employee e ON oi.CreatedBy = e.Id;
|
|---|
| 33 |
|
|---|
| 34 | -- 3. Invoice Summary
|
|---|
| 35 | CREATE VIEW vw_invoice_summary AS
|
|---|
| 36 | SELECT
|
|---|
| 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
|
|---|
| 44 | FROM Invoice i
|
|---|
| 45 | JOIN "Order" o ON i.OrderId = o.Id
|
|---|
| 46 | LEFT JOIN Employee e ON o.WaiterId = e.Id;
|
|---|
| 47 |
|
|---|
| 48 | -- 4. Active Menu with Items and Prices
|
|---|
| 49 | CREATE VIEW vw_active_menu AS
|
|---|
| 50 | SELECT
|
|---|
| 51 | m.Name AS Menu,
|
|---|
| 52 | mt.Type AS MenuType,
|
|---|
| 53 | p.Name AS Product,
|
|---|
| 54 | mm.Price,
|
|---|
| 55 | mmt.Type AS MemberType
|
|---|
| 56 | FROM Menu m
|
|---|
| 57 | JOIN MenuType mt ON m.TypeId = mt.Id
|
|---|
| 58 | JOIN MenuMember mm ON mm.MenuId = m.Id
|
|---|
| 59 | JOIN MenuItem mi ON mm.MenuItemId = mi.Id
|
|---|
| 60 | JOIN Product p ON mi.Id = p.Id
|
|---|
| 61 | JOIN MenuMemberType mmt ON mm.TypeId = mmt.Id
|
|---|
| 62 | WHERE m.Active = TRUE;
|
|---|
| 63 |
|
|---|
| 64 | -- 5. Table Availability
|
|---|
| 65 | CREATE VIEW vw_table_availability AS
|
|---|
| 66 | SELECT
|
|---|
| 67 | rt.TableNumber,
|
|---|
| 68 | rt.Capacity,
|
|---|
| 69 | tt.Type AS TableType,
|
|---|
| 70 | rt.Status AS Available
|
|---|
| 71 | FROM RestaurantTable rt
|
|---|
| 72 | JOIN TableType tt ON rt.TableTypeId = tt.Id;
|
|---|
| 73 |
|
|---|
| 74 |
|
|---|
| 75 |
|
|---|
| 76 | -- 6. Product Inventory
|
|---|
| 77 | CREATE VIEW vw_inventory AS
|
|---|
| 78 | SELECT
|
|---|
| 79 | p.Name AS Product,
|
|---|
| 80 | pt.Type AS ProductType,
|
|---|
| 81 | sp.Quantity,
|
|---|
| 82 | u.Name AS BaseUnit
|
|---|
| 83 | FROM StoredProduct sp
|
|---|
| 84 | JOIN Product p ON sp.ProductId = p.Id
|
|---|
| 85 | JOIN ProductType pt ON p.TypeId = pt.Id
|
|---|
| 86 | JOIN Unit u ON p.BaseUnitId = u.Id;
|
|---|
| 87 |
|
|---|
| 88 |
|
|---|
| 89 | -- 7. Today's reservations
|
|---|
| 90 | CREATE VIEW vw_todays_reservations AS
|
|---|
| 91 | SELECT
|
|---|
| 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
|
|---|
| 100 | FROM Reservation r
|
|---|
| 101 | LEFT JOIN RestaurantTable rt ON rt.TableNumber = r.TableNumber
|
|---|
| 102 | LEFT JOIN Employee e ON e.Id = r.EmployeeId
|
|---|
| 103 | WHERE r."Date" = CURRENT_DATE
|
|---|
| 104 | ORDER BY r.StartTime;
|
|---|
| 105 |
|
|---|
| 106 | -- 8. Revenue per Waiter
|
|---|
| 107 | CREATE VIEW vw_revenue_per_waiter AS
|
|---|
| 108 | SELECT
|
|---|
| 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
|
|---|
| 113 | FROM "Order" o
|
|---|
| 114 | JOIN Employee e ON o.WaiterId = e.Id
|
|---|
| 115 | JOIN Invoice i ON i.OrderId = o.Id
|
|---|
| 116 | GROUP BY e.Id, e.FirstName, e.LastName;
|
|---|
| 117 |
|
|---|
| 118 | --9. ProductUsage History
|
|---|
| 119 | CREATE VIEW vw_product_usage_history AS
|
|---|
| 120 | SELECT
|
|---|
| 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
|
|---|
| 128 | FROM ProductUsageLog pul
|
|---|
| 129 | JOIN Product p ON pul.ProductId = p.Id
|
|---|
| 130 | JOIN ChangeType ct ON pul.ChangeTypeId = ct.Id
|
|---|
| 131 | JOIN 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 |
|
|---|