Advertisement
madrahimov

Untitled

Dec 10th, 2018
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 4.68 KB | None | 0 0
  1. -- --------------------------------------Ingredient Details----------------------------------------------------------------
  2. DROP FUNCTION bill."ReportIngredientByDay"(DATE, DATE, uuid, uuid, uuid);
  3.  
  4. CREATE OR REPLACE FUNCTION bill."ReportIngredientByDay"(
  5.     _from DATE,
  6.     _to DATE,
  7.     _ingredient_id uuid,
  8.     _restaurant_id uuid,
  9.     _stock_id uuid
  10.   )
  11.   RETURNS TABLE(
  12.     json json
  13.   ) AS
  14. $BODY$
  15. DECLARE
  16. BEGIN
  17.   IF (_from > _to) THEN _from = _to; END IF;
  18.   RETURN query
  19.     SELECT array_to_json(array_agg(row_to_json(t)))
  20.     FROM(
  21.           SELECT s.DAY,
  22.                 (
  23.                   SELECT SUM(ii.delta_count)
  24.                   FROM inventory_ingredients ii
  25.                   Inner Join inventories inven ON inven.id = ii.inventory_id
  26.                   WHERE ii.ingredient_id = _ingredient_id
  27.                     AND inven.is_active = TRUE
  28.                     AND inven.draft = FALSE
  29.                     AND inven.stock_id = _stock_id
  30.                     AND inven.DATE >= s.DAY
  31.                     AND inven.DATE <= s.DAY
  32.                 ) AS inventory,
  33.                 (
  34.                     SELECT COALESCE(SUM(ii.COUNT), 0)
  35.                     FROM invoice_ingredients ii
  36.                     Inner Join invoices invo ON invo.id = ii.invoice_id
  37.                     WHERE ii.is_active = TRUE
  38.                       AND ii.ingredient_id = _ingredient_id
  39.                       AND invo.is_active = TRUE
  40.                       AND invo.draft = FALSE
  41.                       AND invo.receiver_id = _stock_id
  42.                       AND invo.DATE >= s.DAY
  43.                       AND invo.DATE <= s.DAY
  44.                 ) AS invoice,
  45.                 (
  46.                   SELECT COALESCE(SUM(ri.COUNT), 0)
  47.                   FROM relocation_ingredients ri
  48.                   Inner Join relocations r ON r.id = ri.relocation_id
  49.                   WHERE ri.ingredient_id = _ingredient_id
  50.                     AND r.is_active = TRUE
  51.                     AND r.draft = FALSE
  52.                     AND r.receiver_stock_id = _stock_id
  53.                     AND r.DATE >= s.DAY
  54.                     AND r.DATE <= s.DAY
  55.                 ) AS in_relocation,
  56.                 (
  57.                   SELECT COALESCE(SUM(wi.COUNT), 0)
  58.                   FROM write_off_ingredients wi
  59.                   Inner Join write_offs w ON w.id = wi.write_off_id
  60.                   WHERE wi.ingredient_id = _ingredient_id
  61.                     AND w.is_active = TRUE
  62.                     AND w.draft = FALSE
  63.                     AND w.stock_id = _stock_id
  64.                     AND w.DATE >= s.DAY
  65.                     AND w.DATE <= s.DAY
  66.                 ) AS write_off,
  67.                 (
  68.                   SELECT COALESCE(SUM(ri.COUNT), 0)
  69.                   FROM relocation_ingredients ri
  70.                   Inner Join relocations r ON r.id = ri.relocation_id
  71.                   WHERE ri.ingredient_id = _ingredient_id
  72.                     AND r.is_active = TRUE
  73.                     AND r.draft = FALSE
  74.                     AND r.sender_stock_id = _stock_id
  75.                     AND r.DATE >= s.DAY
  76.                     AND r.DATE <= s.DAY
  77.                 ) AS out_relocation,
  78.                 (
  79.                   SELECT COALESCE(SUM(bc.COUNT), 0)
  80.                   FROM bill_calculations bc
  81.                   Inner Join bill.bill_course_solds bcs ON bcs.id = bc.object_id
  82.                   Inner Join bill.bills b ON b.id = bcs.bill_id
  83.                   WHERE bc.ingredient_id = _ingredient_id
  84.                     AND bc.stock_id = _stock_id
  85.                     AND bc.DATE >= s.DAY
  86.                     AND bc.DATE <= s.DAY
  87.                     AND bc.calculate_type = 'subtract'
  88.                     AND b.bill_type <> 5
  89.                     AND b.bill_type <> 99
  90.                 ) AS solds,
  91.                 (
  92.                   SELECT COALESCE(SUM(bc.COUNT), 0)
  93.                   FROM bill_calculations bc
  94.                   Inner Join bill.bill_course_resigns bcr ON bcr.id = bc.object_id
  95.                   Inner Join bill.bill_course_solds bcs ON bcs.id = bcr.bill_course_sold_id
  96.                   Inner Join bill.bills b ON b.id = bcs.bill_id
  97.                   WHERE bc.ingredient_id = _ingredient_id
  98.                     AND bc.stock_id = _stock_id
  99.                     AND bc.DATE >= s.DAY
  100.                     AND bc.DATE <= s.DAY
  101.                     AND bc.calculate_type = 'add'
  102.                     AND b.bill_type <> 5
  103.                     AND b.bill_type <> 99
  104.                 ) AS resings
  105.           FROM generate_series(_from, _to, '1 day') AS s(DAY)
  106.         ) t;
  107. END;
  108.  
  109. $BODY$
  110.   LANGUAGE plpgsql STABLE
  111.   COST 50
  112.   ROWS 1000;
  113. ALTER FUNCTION bill."ReportIngredientByDay"(DATE, DATE, uuid, uuid, uuid)
  114.   OWNER TO developer;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement