Advertisement
aadddrr

r_inventory_stock_summary

Jul 9th, 2018
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -- Function: r_inventory_stock_summary(character varying, bigint, bigint, bigint, character varying, bigint, character varying, character varying, bigint, character varying, character varying)
  2.  
  3. DROP FUNCTION IF EXISTS r_inventory_stock_summary(character varying, bigint, bigint, bigint, character varying, bigint, character varying, character varying, bigint, character varying, character varying);
  4.  
  5. CREATE OR REPLACE FUNCTION r_inventory_stock_summary(character varying, bigint, bigint, bigint, character varying, bigint, bigint)
  6.   RETURNS SETOF refcursor AS
  7. $BODY$
  8. DECLARE
  9.     pRefHeader          REFCURSOR := 'refHeader';
  10.     pRefDetail          REFCURSOR := 'refDetail';
  11.     pSessionId          ALIAS FOR $1;
  12.     pTenantId           ALIAS FOR $2;
  13.     pUserId             ALIAS FOR $3;
  14.     pRoleId             ALIAS FOR $4;
  15.     pDatetime           ALIAS FOR $5;
  16.     pOuId               ALIAS FOR $6;
  17.     pPartnerId          ALIAS FOR $7;
  18.  
  19.    
  20.     vEmptyId            bigint := -99;
  21.     vEmptyString        character varying := '';
  22.     vReleaseDoc         character varying := 'R';
  23.     vStock              character varying := 'Y';
  24.     vVoid               character varying := 'V';
  25.     vCancel             character varying := 'C';
  26.     vFinal              character varying := 'F';
  27.     vFilterPartner      text := '';
  28.     vRgConsignment      bigint := 113;
  29.     vRg                 bigint := 111;
  30.     vDo                 bigint := 311;
  31.     vDoReceipt          bigint := 526;
  32.     vReturnNote         bigint := 502;
  33.     vClaimNote          bigint := 511;
  34.     vClaimConsignment   bigint := 561;
  35.     vAdjStockQty        bigint := 521;
  36.     vAdjStockAmount     bigint := 522;
  37.     vPosShop            bigint := 401;
  38.     vPosShopInShop      bigint := 403;
  39.     vVoidPosShop        bigint := 405;
  40.     vVoidPosShopInShop  bigint := 406;
  41.     vYes                character varying := 'Y';  
  42. BEGIN
  43.  
  44.    
  45.     IF (pRoleId = -2) THEN
  46.  
  47.         SELECT partner_id INTO pPartnerId
  48.         FROM m_partner_user WHERE user_id = pUserId;
  49.  
  50.         vFilterPartner := ' AND A.partner_id =  ' || pPartnerId;
  51.     ELSE
  52.        IF (pPartnerId <> vEmptyId) THEN
  53.         vFilterPartner := ' AND A.partner_id = ' || pPartnerId;
  54.        END IF
  55.     END IF;
  56.  
  57.     -- ambil semua produk yang sudah pernah ada di po
  58.     EXECUTE 'INSERT INTO tt_inventory_stock_summary_consignment(
  59.            session_id, product_id, supplier_product_code, product_code,
  60.            product_name, qty_commitment, qty_receive, qty_return, qty_cancel,
  61.            qty_add, qty_sell, qty_do_receipt, supplier_code, supplier_name, color, size,
  62.            qty_nett_sell, qty_adjustment, qty_end_balance, style_product,
  63.            qty_claim, qty_os_receive, qty_end_balance_supplier)
  64.     SELECT $1, B.product_id, C.supplier_product_code, f_get_product_code(B.product_id),
  65.             f_get_product_name(B.product_id), SUM(E.qty_int_po), 0, 0, SUM(E.qty_int_cancel),
  66.             SUM(E.qty_int_add), 0, 0, f_get_partner_code(A.partner_id), f_get_partner_name(A.partner_id), D.color, D.size,
  67.             0, 0, 0, D.style_product,
  68.             0, 0, 0
  69.     FROM pu_po A
  70.         INNER JOIN pu_po_item B ON A.po_id = B.po_id
  71.         INNER JOIN m_product_consignment_supp_info C ON B.product_id = C.product_id AND A.partner_id = C.supplier_id
  72.         INNER JOIN m_product_custom D ON C.product_id = D.product_id
  73.         INNER JOIN pu_po_balance_item_consignment E ON E.po_item_id = B.po_item_id
  74.     WHERE A.tenant_id = $2
  75.         AND A.ou_id = $3
  76.         AND D.flg_buy_konsinyasi = $4 '|| vFilterPartner ||
  77.         ' GROUP BY B.product_id, C.supplier_product_code, A.partner_id, D.color, D.size, D.style_product' USING pSessionId, pTenantId, pOuId, vYes;
  78.    
  79.        
  80.     -- ambil qty RG Consignment
  81.     WITH data_qty_receive_cons AS (
  82.         SELECT B.session_id AS session_id, B.product_id, SUM(A.qty) AS qty
  83.         FROM in_log_product_consignment_balance_stock A
  84.         INNER JOIN tt_inventory_stock_summary_consignment B ON A.product_id = B.product_id
  85.         WHERE A.doc_type_id = vRgConsignment
  86.             AND B.session_id = pSessionId
  87.         GROUP BY B.product_id, B.session_id
  88.        
  89.     )
  90.     UPDATE tt_inventory_stock_summary_consignment SET qty_receive = qty_receive + A.qty
  91.     FROM data_qty_receive_cons A
  92.     WHERE A.product_id = tt_inventory_stock_summary_consignment.product_id
  93.         AND tt_inventory_stock_summary_consignment.session_id = A.session_id;
  94.    
  95.     -- ambil Adj Stock
  96.     WITH data_qty_adjustment AS (
  97.         SELECT B.session_id AS session_id, B.product_id, SUM(A.qty) AS qty
  98.         FROM in_log_product_consignment_balance_stock A
  99.         INNER JOIN tt_inventory_stock_summary_consignment B ON A.product_id = B.product_id
  100.         WHERE A.doc_type_id IN(vAdjStockQty, vAdjStockAmount)
  101.             AND B.session_id = pSessionId
  102.         GROUP BY B.product_id, B.session_id
  103.        
  104.     )
  105.     UPDATE tt_inventory_stock_summary_consignment SET qty_adjustment = qty_adjustment + A.qty
  106.     FROM data_qty_adjustment A
  107.     WHERE A.product_id = tt_inventory_stock_summary_consignment.product_id
  108.         AND tt_inventory_stock_summary_consignment.session_id = A.session_id;
  109.    
  110.     -- ambil qty DO dan POS
  111.     WITH data_qty_sell AS (
  112.         SELECT B.session_id AS session_id, B.product_id, SUM(A.qty * -1) AS qty
  113.         FROM in_log_product_consignment_balance_stock A
  114.         INNER JOIN tt_inventory_stock_summary_consignment B ON A.product_id = B.product_id
  115.         WHERE A.doc_type_id IN(vDo, vPosShop, vPosShopInShop)
  116.             AND B.session_id = pSessionId
  117.         GROUP BY B.product_id, B.session_id
  118.        
  119.     )
  120.     UPDATE tt_inventory_stock_summary_consignment SET qty_sell = qty_sell + A.qty
  121.     FROM data_qty_sell A
  122.     WHERE A.product_id = tt_inventory_stock_summary_consignment.product_id
  123.         AND tt_inventory_stock_summary_consignment.session_id = A.session_id;
  124.        
  125.    
  126.     -- ambil qty posted
  127.     WITH data_qty_posted AS (
  128.         SELECT C.session_id AS session_id, A.qty_posted AS qty_posted, C.product_id
  129.         FROM pu_po_balance_item_consignment_sold_manual A
  130.         INNER JOIN sl_do_item B ON A.do_item_id = B.do_item_id
  131.         INNER JOIN tt_inventory_stock_summary_consignment C ON B.product_id = C.product_id
  132.         WHERE A.supplier_id = pPartnerId   
  133.     )
  134.    
  135.     UPDATE tt_inventory_stock_summary_consignment SET qty_sell = qty_sell + A.qty_posted
  136.     FROM data_qty_posted A
  137.     WHERE A.product_id = tt_inventory_stock_summary_consignment.product_id
  138.         AND tt_inventory_stock_summary_consignment.session_id = A.session_id;
  139.    
  140.  
  141.    
  142.     -- ambil qty Void POS
  143.     WITH data_qty_void AS (
  144.         SELECT B.session_id AS session_id, B.product_id, SUM(A.qty * -1) AS qty
  145.         FROM in_log_product_balance_stock A
  146.         INNER JOIN tt_inventory_stock_summary_consignment B ON A.product_id = B.product_id
  147.         WHERE A.doc_type_id IN(vVoidPosShop, vVoidPosShopInShop)
  148.             AND B.session_id = pSessionId
  149.         GROUP BY B.product_id, B.session_id
  150.        
  151.     )
  152.     UPDATE tt_inventory_stock_summary_consignment SET qty_sell = qty_sell + A.qty
  153.     FROM data_qty_void A
  154.     WHERE A.product_id = tt_inventory_stock_summary_consignment.product_id
  155.         AND tt_inventory_stock_summary_consignment.session_id = A.session_id;
  156.        
  157.     -- ambil qty DO Receipt
  158.     WITH data_qty_do_receipt AS (
  159.         SELECT B.session_id AS session_id, B.product_id, SUM(A.qty) AS qty
  160.         FROM in_log_product_consignment_balance_stock A
  161.         INNER JOIN tt_inventory_stock_summary_consignment B ON A.product_id = B.product_id
  162.         WHERE A.doc_type_id = vDoReceipt
  163.             AND B.session_id = pSessionId
  164.         GROUP BY B.product_id, B.session_id
  165.        
  166.     )
  167.     UPDATE tt_inventory_stock_summary_consignment SET qty_do_receipt = qty_do_receipt + A.qty
  168.     FROM data_qty_do_receipt A
  169.     WHERE A.product_id = tt_inventory_stock_summary_consignment.product_id
  170.         AND tt_inventory_stock_summary_consignment.session_id = A.session_id;
  171.    
  172.     -- ambil qty Return Note
  173.     WITH data_qty_return AS (
  174.         SELECT B.session_id AS session_id, B.product_id, SUM(A.qty) AS qty
  175.         FROM in_log_product_consignment_balance_stock A
  176.         INNER JOIN tt_inventory_stock_summary_consignment B ON A.product_id = B.product_id
  177.         WHERE A.doc_type_id = vReturnNote
  178.             AND B.session_id = pSessionId
  179.         GROUP BY B.product_id, B.session_id
  180.        
  181.     )
  182.     UPDATE tt_inventory_stock_summary_consignment SET qty_return = qty_return + A.qty
  183.     FROM data_qty_return A
  184.     WHERE A.product_id = tt_inventory_stock_summary_consignment.product_id
  185.         AND tt_inventory_stock_summary_consignment.session_id = A.session_id;
  186.    
  187.    
  188.     -- ambil qty Claim Consignment
  189.     WITH data_qty_claim AS (
  190.         SELECT B.session_id AS session_id, B.product_id, SUM(A.qty * -1) AS qty
  191.         FROM in_log_product_consignment_balance_stock A
  192.         INNER JOIN tt_inventory_stock_summary_consignment B ON A.product_id = B.product_id
  193.         WHERE A.doc_type_id = vClaimConsignment
  194.             AND B.session_id = pSessionId
  195.         GROUP BY B.product_id, B.session_id
  196.        
  197.     )
  198.     UPDATE tt_inventory_stock_summary_consignment SET qty_claim = qty_claim + A.qty
  199.     FROM data_qty_claim A
  200.     WHERE A.product_id = tt_inventory_stock_summary_consignment.product_id
  201.         AND tt_inventory_stock_summary_consignment.session_id = A.session_id;
  202.    
  203.     -- ambil qty Claim Note
  204.     WITH data_qty_claim_note AS (
  205.         SELECT B.session_id AS session_id, B.product_id, SUM(A.qty * -1) AS qty
  206.         FROM in_log_product_consignment_balance_stock A
  207.         INNER JOIN tt_inventory_stock_summary_consignment B ON A.product_id = B.product_id
  208.         WHERE A.doc_type_id = vClaimNote
  209.             AND B.session_id = pSessionId
  210.         GROUP BY B.product_id, B.session_id
  211.        
  212.     )
  213.     UPDATE tt_inventory_stock_summary_consignment SET qty_claim = qty_claim + A.qty
  214.     FROM data_qty_claim_note A
  215.     WHERE A.product_id = tt_inventory_stock_summary_consignment.product_id
  216.         AND tt_inventory_stock_summary_consignment.session_id = A.session_id;
  217.  
  218.     -- update qty_nett_sell
  219.     UPDATE tt_inventory_stock_summary_consignment SET qty_nett_sell = qty_sell - qty_return - qty_do_receipt
  220.         WHERE tt_inventory_stock_summary_consignment.session_id = pSessionId;
  221.        
  222.     -- update qty_os_receive
  223.     UPDATE tt_inventory_stock_summary_consignment SET qty_os_receive = qty_commitment + qty_add - qty_cancel - qty_receive
  224.         WHERE tt_inventory_stock_summary_consignment.session_id = pSessionId;
  225.        
  226.     -- update qty_end_balance
  227.     UPDATE tt_inventory_stock_summary_consignment SET qty_end_balance = f_get_product_balance_stock(pTenantId, tt_inventory_stock_summary_consignment.product_id, pOuId)
  228.         WHERE tt_inventory_stock_summary_consignment.session_id = pSessionId;
  229.        
  230.     -- update qty_end_balance_supplier
  231.     WITH data_end_balance_supp AS
  232.         (  
  233.             SELECT pSessionId AS session_id, product_id, SUM(qty_receive - qty_claim - qty_nett_sell) AS qty_end_balance_supplier
  234.             FROM tt_inventory_stock_summary_consignment
  235.             GROUP BY product_id
  236.            
  237.         )
  238.     UPDATE tt_inventory_stock_summary_consignment Z SET qty_end_balance_supplier = X.qty_end_balance_supplier
  239.         FROM data_end_balance_supp X
  240.         WHERE Z.session_id = X.session_id AND Z.product_id = X.product_id;
  241.    
  242.     Open pRefHeader FOR
  243.     SELECT pPartnerId AS partner_id,
  244.         CASE WHEN pPartnerId = vEmptyId THEN '(All)' ELSE f_get_partner_code(pPartnerId) END AS partner_code,
  245.             CASE WHEN pPartnerId = vEmptyId THEN '(All)' ELSE f_get_partner_name(pPartnerId) END AS partner_name,
  246.         pDatetime AS print_datetime, pOuId AS ou_id, f_get_ou_name(pOuId) AS ou_name;
  247.     RETURN NEXT pRefHeader;
  248.    
  249.    
  250.     Open pRefDetail FOR
  251.     SELECT  supplier_code, supplier_name, product_name, size AS psize, color, product_code, supplier_product_code,
  252.             qty_commitment, qty_add, qty_cancel, qty_receive, qty_os_receive, qty_claim,
  253.             qty_nett_sell, qty_end_balance_supplier AS qty_end_balance
  254.     FROM tt_inventory_stock_summary_consignment
  255.     WHERE session_id = pSessionId;
  256.     RETURN NEXT pRefDetail ;
  257.    
  258.     DELETE FROM tt_inventory_stock_summary_consignment WHERE session_id = pSessionId;
  259.    
  260. END;
  261. $BODY$
  262.   LANGUAGE plpgsql VOLATILE
  263.   COST 100
  264.   ROWS 1000;
  265.   /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement