Changes between Initial Version and Version 1 of AdvancedDatabaseDevelopment3


Ignore:
Timestamp:
09/24/26 02:13:28 (7 days ago)
Author:
201178
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • AdvancedDatabaseDevelopment3

    v1 v1  
     1= Погледи =
     2
     3== Целосен преглед на нарачки ==
     4
     5=== Опис ===
     6
     7Погледот прикажува целосен преглед на сите нарачки со детали за масата, келнерот, плаќањето и вкупниот износ.
     8
     9=== Имплементација ===
     10
     11{{{
     12CREATE OR REPLACE VIEW v_orders_full AS
     13SELECT
     14    o.order_id,
     15    o.created_at,
     16    o.status AS order_status,
     17    rt.table_number,
     18    rt.capacity,
     19    u.first_name || ' ' || u.last_name AS waiter_name,
     20    r.role_name AS waiter_role,
     21    p.amount AS total_paid,
     22    p.method AS payment_method,
     23    p.payment_date,
     24    i.invoice_number,
     25    i.issued_at,
     26    COUNT(oi.item_number) AS total_items,
     27    SUM(oi.quantity) AS total_quantity
     28FROM project.orders o
     29JOIN project.restaurant_table rt ON rt.table_id = o.table_id
     30JOIN project.app_user u ON u.user_id = o.user_id
     31JOIN project.role r ON r.role_id = u.role_id
     32LEFT JOIN project.payment p ON p.order_id = o.order_id
     33LEFT JOIN project.invoice i ON i.payment_id = p.payment_id
     34LEFT JOIN project.order_item oi ON oi.order_id = o.order_id
     35GROUP BY o.order_id, o.created_at, o.status, rt.table_number, rt.capacity,
     36         u.first_name, u.last_name, r.role_name,
     37         p.amount, p.method, p.payment_date,
     38         i.invoice_number, i.issued_at
     39ORDER BY o.created_at DESC;
     40}}}
     41
     42== Преглед на маси со нивниот статус ==
     43
     44=== Опис ===
     45
     46Погледот прикажува сите маси со нивниот статус и активна нарачка (ако има).
     47
     48=== Имплементација ===
     49
     50{{{
     51CREATE OR REPLACE VIEW v_tables_status AS
     52SELECT
     53    rt.table_id,
     54    rt.table_number,
     55    rt.capacity,
     56    rt.status,
     57    o.order_id AS active_order_id,
     58    o.created_at AS order_time,
     59    u.first_name || ' ' || u.last_name AS waiter_name,
     60    COUNT(oi.item_number) AS items_in_order
     61FROM project.restaurant_table rt
     62LEFT JOIN project.orders o ON o.table_id = rt.table_id AND o.status != 'ПЛАТЕНА'
     63LEFT JOIN project.app_user u ON u.user_id = o.user_id
     64LEFT JOIN project.order_item oi ON oi.order_id = o.order_id
     65GROUP BY rt.table_id, rt.table_number, rt.capacity, rt.status,
     66         o.order_id, o.created_at, u.first_name, u.last_name
     67ORDER BY rt.table_number::int;
     68}}}
     69
     70== Месечен приход по категорија ==
     71
     72=== Опис ===
     73
     74Погледот го прикажува месечниот приход групиран по категорија.
     75
     76=== Имплементација ===
     77
     78{{{
     79CREATE OR REPLACE VIEW v_monthly_revenue_by_category AS
     80SELECT
     81    TO_CHAR(o.created_at, 'YYYY-MM') AS month,
     82    c.category_id,
     83    c.name AS category_name,
     84    COUNT(DISTINCT o.order_id) AS order_count,
     85    SUM(oi.quantity) AS items_sold,
     86    SUM(oi.quantity * oi.unit_price) AS total_revenue,
     87    ROUND(AVG(oi.quantity * oi.unit_price), 2) AS avg_item_price
     88FROM project.orders o
     89JOIN project.order_item oi ON oi.order_id = o.order_id
     90JOIN project.product p ON p.product_id = oi.product_id
     91JOIN project.category c ON c.category_id = p.category_id
     92WHERE o.status = 'ПЛАТЕНА'
     93GROUP BY TO_CHAR(o.created_at, 'YYYY-MM'), c.category_id, c.name
     94ORDER BY month DESC, total_revenue DESC;
     95}}}
     96
     97== Извештај за најпродавани производи ==
     98
     99=== Опис ===
     100
     101Погледот ги прикажува најпродаваните производи со вкупна количина и приход.
     102
     103=== Имплементација ===
     104
     105{{{
     106CREATE OR REPLACE VIEW v_top_products AS
     107SELECT
     108    p.product_id,
     109    p.name AS product_name,
     110    c.name AS category_name,
     111    p.price AS current_price,
     112    COUNT(DISTINCT oi.order_id) AS order_count,
     113    SUM(oi.quantity) AS total_quantity,
     114    SUM(oi.quantity * oi.unit_price) AS total_revenue,
     115    ROUND(AVG(oi.unit_price), 2) AS avg_selling_price
     116FROM project.product p
     117JOIN project.category c ON c.category_id = p.category_id
     118LEFT JOIN project.order_item oi ON oi.product_id = p.product_id
     119LEFT JOIN project.orders o ON o.order_id = oi.order_id AND o.status = 'ПЛАТЕНА'
     120WHERE p.active = TRUE
     121GROUP BY p.product_id, p.name, c.name, p.price
     122ORDER BY total_revenue DESC NULLS LAST;
     123}}}
     124
     125== Дневен извештај за продажба ==
     126
     127=== Опис ===
     128
     129Погледот прикажува дневен извештај за продажбата со вкупен приход, број на нарачки и просечна вредност.
     130
     131=== Имплементација ===
     132
     133{{{
     134CREATE OR REPLACE VIEW v_daily_sales AS
     135SELECT
     136    DATE(o.created_at) AS sale_date,
     137    TO_CHAR(o.created_at, 'Day') AS day_of_week,
     138    COUNT(DISTINCT o.order_id) AS order_count,
     139    COUNT(DISTINCT o.table_id) AS tables_used,
     140    COUNT(DISTINCT o.user_id) AS waiters_active,
     141    SUM(p.amount) AS total_revenue,
     142    ROUND(AVG(p.amount), 2) AS avg_order_value,
     143    SUM(CASE WHEN p.method = 'КЕШ' THEN p.amount ELSE 0 END) AS cash_revenue,
     144    SUM(CASE WHEN p.method = 'КАРТИЧКА' THEN p.amount ELSE 0 END) AS card_revenue
     145FROM project.orders o
     146JOIN project.payment p ON p.order_id = o.order_id
     147WHERE o.status = 'ПЛАТЕНА'
     148GROUP BY DATE(o.created_at), TO_CHAR(o.created_at, 'Day')
     149ORDER BY sale_date DESC;
     150}}}
     151
     152== Преглед на залиха по производ ==
     153
     154=== Опис ===
     155
     156Погледот прикажува моментална залиха за секој производ со статус (ОК, НИСКО, КРИТИЧНО).
     157
     158=== Имплементација ===
     159
     160{{{
     161CREATE OR REPLACE VIEW v_product_stock AS
     162SELECT
     163    p.product_id,
     164    p.name AS product_name,
     165    c.name AS category_name,
     166    p.min_stock,
     167    COALESCE(SUM(i.quantity_change), 0) AS current_stock,
     168    CASE
     169        WHEN COALESCE(SUM(i.quantity_change), 0) <= 0 THEN 'КРИТИЧНО'
     170        WHEN COALESCE(SUM(i.quantity_change), 0) < p.min_stock THEN 'НИСКО'
     171        ELSE 'ОК'
     172    END AS stock_status,
     173    MAX(i.created_at) AS last_movement
     174FROM project.product p
     175JOIN project.category c ON c.category_id = p.category_id
     176LEFT JOIN project.inventory i ON i.product_id = p.product_id
     177WHERE p.active = TRUE
     178GROUP BY p.product_id, p.name, c.name, p.min_stock
     179ORDER BY stock_status, current_stock ASC;
     180}}}