Changes between Initial Version and Version 1 of AdvancedReport6


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

--

Legend:

Unmodified
Added
Removed
Modified
  • AdvancedReport6

    v1 v1  
     1= Залихи под минималното ниво =
     2
     3== Опис ==
     4
     5Извештајот ги прикажува сите производи чија вкупна залиха е под минималното ниво дефинирано во табелата `product`. Овозможува навремено нарачување.
     6
     7== SQL решение ==
     8
     9{{{
     10CREATE OR REPLACE FUNCTION get_low_stock_products()
     11RETURNS TABLE (
     12    product_id INT,
     13    product_name TEXT,
     14    category_name TEXT,
     15    min_stock INT,
     16    current_stock NUMERIC,
     17    shortage NUMERIC,
     18    status TEXT
     19)
     20LANGUAGE plpgsql
     21AS $$
     22BEGIN
     23    RETURN QUERY
     24    SELECT
     25        p.product_id,
     26        p.name::TEXT AS product_name,
     27        c.name::TEXT AS category_name,
     28        p.min_stock,
     29        COALESCE(SUM(i.quantity_change), 0) AS current_stock,
     30        p.min_stock - COALESCE(SUM(i.quantity_change), 0) AS shortage,
     31        CASE
     32            WHEN COALESCE(SUM(i.quantity_change), 0) <= 0 THEN 'КРИТИЧНО'::TEXT
     33            WHEN COALESCE(SUM(i.quantity_change), 0) < p.min_stock THEN 'НИСКО'::TEXT
     34            ELSE 'ОК'::TEXT
     35        END AS status
     36    FROM project.product p
     37    JOIN project.category c ON c.category_id = p.category_id
     38    LEFT JOIN project.inventory i ON i.product_id = p.product_id
     39    WHERE p.active = TRUE
     40    GROUP BY p.product_id, p.name, c.name, p.min_stock
     41    HAVING COALESCE(SUM(i.quantity_change), 0) < p.min_stock
     42    ORDER BY shortage DESC;
     43END;
     44$$;
     45}}}
     46
     47== Релациона алгебра ==
     48
     49{{{
     50P(product_id, name, category_id, min_stock, active)
     51C(category_id, name)
     52I(inventory_id, product_id, quantity_change)
     53
     54J1 ← P ⨝ P.category_id = C.category_id C
     55J2 ← J1 ⟕ P.product_id = I.product_id I
     56
     57F1 ← σ active=TRUE (J2)
     58
     59G ← γ product_id, name, category_name, min_stock;
     60     COALESCE(SUM(quantity_change), 0) → current_stock,
     61     min_stock - COALESCE(SUM(quantity_change), 0) → shortage (F1)
     62
     63F2 ← σ current_stock < min_stock (G)
     64
     65R ← π product_id, product_name, category_name, min_stock, current_stock, shortage, status (F2)
     66
     67R_final ← τ shortage DESC (R)
     68}}}