Advertisement
aadddrr

Untitled

Feb 3rd, 2017
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -- Function: pu_create_sn_receive_goods(bigint, character varying, character varying, bigint, bigint, character varying)
  2.  
  3. -- DROP FUNCTION pu_create_sn_receive_goods(bigint, character varying, character varying, bigint, bigint, character varying);
  4.  
  5. CREATE OR REPLACE FUNCTION pu_create_sn_receive_goods(bigint, character varying, character varying, bigint, bigint, character varying)
  6.   RETURNS void AS
  7. $BODY$
  8. DECLARE
  9.     pTenantId           ALIAS FOR $1;
  10.     pSessionId          ALIAS FOR $2;
  11.     pDocDate            ALIAS FOR $3;
  12.     pRgId               ALIAS FOR $4;
  13.     pUserId             ALIAS FOR $5;
  14.     pDatetime           ALIAS FOR $6;
  15.  
  16.     vEmptyId                bigint;
  17.     vEmptyValue             character varying(1);
  18.     vProductStatus          character varying(50);
  19.  
  20.     vCursorProduct          tt_pu_receive_goods_product_auto_sn%ROWTYPE;
  21.     vCountProduct           integer;
  22.     vStartSeq               bigint;
  23.     vEndSeq                 bigint;
  24.     vQtyProduct             bigint;
  25.     vRgProductAutoSnId      bigint;
  26.     vTotalQtyProduct        bigint;
  27. BEGIN
  28.    
  29.     vCountProduct := 0;
  30.     vEmptyId := -99;
  31.     vEmptyValue := ' ';
  32.  
  33.     /*
  34.      * NK, 31 Des 2014
  35.      * diganti dng membaca m_product_status
  36.      */
  37.     --vProductStatus := 'GOOD';
  38.     SELECT product_status_code INTO vProductStatus
  39.     FROM m_product_status
  40.     WHERE flg_buy = 'Y';
  41.    
  42.     DELETE FROM tt_pu_receive_goods_product_auto_sn WHERE session_id = pSessionId;
  43.     DELETE FROM tt_pu_receive_goods_product WHERE session_id = pSessionId;
  44.    
  45.     INSERT INTO tt_pu_receive_goods_product_auto_sn
  46.     (session_id, receive_goods_product_auto_sn_id, tenant_id, receive_goods_id, receive_goods_item_id,
  47.     line_no, product_id, product_expired_date, product_year_made,
  48.     lot_number, qty_rcv_po, po_uom_id, qty_rcv_int, base_uom_id)
  49.     SELECT pSessionId, A.receive_goods_product_auto_sn_id, A.tenant_id, B.receive_goods_id, A.receive_goods_item_id,
  50.         A.line_no, A.product_id, A.product_expired_date, A.product_year_made,
  51.         A.lot_number, A.qty_rcv_po, A.po_uom_id, A.qty_rcv_int, A.base_uom_id
  52.     FROM pu_receive_goods_product_auto_sn A, pu_receive_goods_item B, pu_receive_goods C
  53.     WHERE C.receive_goods_id = pRgId AND
  54.         C.receive_goods_id = B.receive_goods_id AND
  55.         B.receive_goods_item_id = A.receive_goods_item_id;
  56.    
  57.     SELECT COUNT(*) INTO vCountProduct
  58.     FROM tt_pu_receive_goods_product_auto_sn
  59.     WHERE session_id = pSessionId;
  60.    
  61.     IF vCountProduct > 0 THEN
  62.    
  63.         SELECT SUM(qty_rcv_int) INTO vTotalQtyProduct
  64.         FROM tt_pu_receive_goods_product_auto_sn
  65.         WHERE session_id = pSessionId;
  66.  
  67.         vStartSeq := NEXTVAL ('product_sn_seq') - 1;
  68.         PERFORM SETVAL('product_sn_seq', vTotalQtyProduct + vStartSeq);
  69.        
  70.         FOR vCursorProduct IN SELECT * FROM tt_pu_receive_goods_product_auto_sn
  71.                             WHERE session_id = pSessionId
  72.                                     ORDER BY line_no
  73.         LOOP
  74.             vRgProductAutoSnId := vCursorProduct.receive_goods_product_auto_sn_id;
  75.             vQtyProduct := vCursorProduct.qty_rcv_int::bigint;         
  76.            
  77.             INSERT INTO tt_pu_receive_goods_product
  78.             (session_id, tenant_id, receive_goods_item_id,
  79.             product_id, serial_number, product_expired_date, product_year_made,
  80.             lot_number, qty_rcv_po, po_uom_id, qty_rcv_int, base_uom_id, remark)
  81.             SELECT A.session_id, A.tenant_id, A.receive_goods_item_id,
  82.                 A.product_id, pDocDate || right('000000000'||s.a, 9), A.product_expired_date, A.product_year_made,
  83.                 A.lot_number, A.qty_rcv_po/A.qty_rcv_int, A.po_uom_id, 1, A.base_uom_id, A.remark
  84.             FROM tt_pu_receive_goods_product_auto_sn A, generate_series(vStartSeq,vStartSeq+vQtyProduct-1) AS s(a)
  85.             WHERE A.session_id = pSessionId AND
  86.                 A.receive_goods_product_auto_sn_id = vRgProductAutoSnId;
  87.            
  88.             vStartSeq := vStartSeq + vQtyProduct;
  89.  
  90.           END LOOP;
  91.    
  92.     END IF;
  93.    
  94.     INSERT INTO pu_receive_goods_product
  95.     (tenant_id, receive_goods_item_id, line_no, product_id,
  96.     serial_number, product_expired_date, product_year_made,
  97.     lot_number, qty_rcv_po, po_uom_id, qty_rcv_int, base_uom_id, remark,
  98.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  99.     SELECT tenant_id, receive_goods_item_id, ROW_NUMBER() OVER ( PARTITION BY receive_goods_item_id), product_id,
  100.         serial_number, product_expired_date, product_year_made,
  101.         lot_number, qty_rcv_po, po_uom_id, qty_rcv_int, base_uom_id, remark,
  102.         0, pDatetime, pUserId, pDatetime, pUserId
  103.     FROM tt_pu_receive_goods_product
  104.     WHERE session_id = pSessionId;
  105.    
  106.     DELETE FROM tt_pu_receive_goods_product_auto_sn WHERE session_id = pSessionId;
  107.     DELETE FROM tt_pu_receive_goods_product WHERE session_id = pSessionId;
  108.  
  109. END;   
  110. $BODY$
  111.   LANGUAGE plpgsql VOLATILE
  112.   COST 100;
  113. ALTER FUNCTION pu_create_sn_receive_goods(bigint, character varying, character varying, bigint, bigint, character varying)
  114.   OWNER TO postgres;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement