| Version 1 (modified by , 7 days ago) ( diff ) |
|---|
Погледи
Целосен преглед на нарачки
Опис
Погледот прикажува целосен преглед на сите нарачки со детали за масата, келнерот, плаќањето и вкупниот износ.
Имплементација
CREATE OR REPLACE VIEW v_orders_full AS
SELECT
o.order_id,
o.created_at,
o.status AS order_status,
rt.table_number,
rt.capacity,
u.first_name || ' ' || u.last_name AS waiter_name,
r.role_name AS waiter_role,
p.amount AS total_paid,
p.method AS payment_method,
p.payment_date,
i.invoice_number,
i.issued_at,
COUNT(oi.item_number) AS total_items,
SUM(oi.quantity) AS total_quantity
FROM project.orders o
JOIN project.restaurant_table rt ON rt.table_id = o.table_id
JOIN project.app_user u ON u.user_id = o.user_id
JOIN project.role r ON r.role_id = u.role_id
LEFT JOIN project.payment p ON p.order_id = o.order_id
LEFT JOIN project.invoice i ON i.payment_id = p.payment_id
LEFT JOIN project.order_item oi ON oi.order_id = o.order_id
GROUP BY o.order_id, o.created_at, o.status, rt.table_number, rt.capacity,
u.first_name, u.last_name, r.role_name,
p.amount, p.method, p.payment_date,
i.invoice_number, i.issued_at
ORDER BY o.created_at DESC;
Преглед на маси со нивниот статус
Опис
Погледот прикажува сите маси со нивниот статус и активна нарачка (ако има).
Имплементација
CREATE OR REPLACE VIEW v_tables_status AS
SELECT
rt.table_id,
rt.table_number,
rt.capacity,
rt.status,
o.order_id AS active_order_id,
o.created_at AS order_time,
u.first_name || ' ' || u.last_name AS waiter_name,
COUNT(oi.item_number) AS items_in_order
FROM project.restaurant_table rt
LEFT JOIN project.orders o ON o.table_id = rt.table_id AND o.status != 'ПЛАТЕНА'
LEFT JOIN project.app_user u ON u.user_id = o.user_id
LEFT JOIN project.order_item oi ON oi.order_id = o.order_id
GROUP BY rt.table_id, rt.table_number, rt.capacity, rt.status,
o.order_id, o.created_at, u.first_name, u.last_name
ORDER BY rt.table_number::int;
Месечен приход по категорија
Опис
Погледот го прикажува месечниот приход групиран по категорија.
Имплементација
CREATE OR REPLACE VIEW v_monthly_revenue_by_category AS
SELECT
TO_CHAR(o.created_at, 'YYYY-MM') AS month,
c.category_id,
c.name AS category_name,
COUNT(DISTINCT o.order_id) AS order_count,
SUM(oi.quantity) AS items_sold,
SUM(oi.quantity * oi.unit_price) AS total_revenue,
ROUND(AVG(oi.quantity * oi.unit_price), 2) AS avg_item_price
FROM project.orders o
JOIN project.order_item oi ON oi.order_id = o.order_id
JOIN project.product p ON p.product_id = oi.product_id
JOIN project.category c ON c.category_id = p.category_id
WHERE o.status = 'ПЛАТЕНА'
GROUP BY TO_CHAR(o.created_at, 'YYYY-MM'), c.category_id, c.name
ORDER BY month DESC, total_revenue DESC;
Извештај за најпродавани производи
Опис
Погледот ги прикажува најпродаваните производи со вкупна количина и приход.
Имплементација
CREATE OR REPLACE VIEW v_top_products AS
SELECT
p.product_id,
p.name AS product_name,
c.name AS category_name,
p.price AS current_price,
COUNT(DISTINCT oi.order_id) AS order_count,
SUM(oi.quantity) AS total_quantity,
SUM(oi.quantity * oi.unit_price) AS total_revenue,
ROUND(AVG(oi.unit_price), 2) AS avg_selling_price
FROM project.product p
JOIN project.category c ON c.category_id = p.category_id
LEFT JOIN project.order_item oi ON oi.product_id = p.product_id
LEFT JOIN project.orders o ON o.order_id = oi.order_id AND o.status = 'ПЛАТЕНА'
WHERE p.active = TRUE
GROUP BY p.product_id, p.name, c.name, p.price
ORDER BY total_revenue DESC NULLS LAST;
Дневен извештај за продажба
Опис
Погледот прикажува дневен извештај за продажбата со вкупен приход, број на нарачки и просечна вредност.
Имплементација
CREATE OR REPLACE VIEW v_daily_sales AS
SELECT
DATE(o.created_at) AS sale_date,
TO_CHAR(o.created_at, 'Day') AS day_of_week,
COUNT(DISTINCT o.order_id) AS order_count,
COUNT(DISTINCT o.table_id) AS tables_used,
COUNT(DISTINCT o.user_id) AS waiters_active,
SUM(p.amount) AS total_revenue,
ROUND(AVG(p.amount), 2) AS avg_order_value,
SUM(CASE WHEN p.method = 'КЕШ' THEN p.amount ELSE 0 END) AS cash_revenue,
SUM(CASE WHEN p.method = 'КАРТИЧКА' THEN p.amount ELSE 0 END) AS card_revenue
FROM project.orders o
JOIN project.payment p ON p.order_id = o.order_id
WHERE o.status = 'ПЛАТЕНА'
GROUP BY DATE(o.created_at), TO_CHAR(o.created_at, 'Day')
ORDER BY sale_date DESC;
Преглед на залиха по производ
Опис
Погледот прикажува моментална залиха за секој производ со статус (ОК, НИСКО, КРИТИЧНО).
Имплементација
CREATE OR REPLACE VIEW v_product_stock AS
SELECT
p.product_id,
p.name AS product_name,
c.name AS category_name,
p.min_stock,
COALESCE(SUM(i.quantity_change), 0) AS current_stock,
CASE
WHEN COALESCE(SUM(i.quantity_change), 0) <= 0 THEN 'КРИТИЧНО'
WHEN COALESCE(SUM(i.quantity_change), 0) < p.min_stock THEN 'НИСКО'
ELSE 'ОК'
END AS stock_status,
MAX(i.created_at) AS last_movement
FROM project.product p
JOIN project.category c ON c.category_id = p.category_id
LEFT JOIN project.inventory i ON i.product_id = p.product_id
WHERE p.active = TRUE
GROUP BY p.product_id, p.name, c.name, p.min_stock
ORDER BY stock_status, current_stock ASC;
Note:
See TracWiki
for help on using the wiki.
