Advertisement
aadddrr

Untitled

Jan 30th, 2017
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. --Adrian, Jan 30 2017
  2.  
  3. CREATE OR REPLACE FUNCTION r_tagging_po_internal_so_igs(character varying, bigint, bigint, bigint, character varying, bigint, character varying, character varying, bigint, character varying)
  4.   RETURNS SETOF refcursor AS
  5. $BODY$
  6. DECLARE
  7.     pRefHeader          REFCURSOR := 'refHeader';
  8.     pRefDetail          REFCURSOR := 'refDetail';
  9.    
  10.     pSessionId          ALIAS FOR $1;
  11.     pTenantId           ALIAS FOR $2;
  12.     pUserId             ALIAS FOR $3;
  13.     pRoleId             ALIAS FOR $4;
  14.     pDatetime           ALIAS FOR $5;
  15.    
  16.     pPoInternalOuId     ALIAS FOR $6;
  17.     pPoInternalNo       ALIAS FOR $7;
  18.     pPoNo               ALIAS FOR $8;
  19.     pSoOuId             ALIAS FOR $9;
  20.     pSoNo               ALIAS FOR $10;
  21.    
  22.     vFilterPoInternalNo text := '';
  23.     vFilterPoNo         text := '';
  24.     vFilterSoNo         text := '';
  25.    
  26.     vEmptyString        character varying := '';
  27.    
  28.     vDocTypeSalesInvoice    bigint := 321;
  29.     vDocTypePo              bigint := 101;
  30.    
  31. BEGIN
  32.    
  33.     IF (pPoInternalNo <> vEmptyString) THEN
  34.         vFilterPoInternalNo := ' AND C.doc_no = ''' || pPoInternalNo || '''';
  35.     END IF;
  36.    
  37.     Open pRefHeader FOR
  38.     SELECT pPoInternalOuId AS po_internal_ou_id, f_get_ou_code(pPoInternalOuId) AS po_internal_ou_code, f_get_ou_name(pPoInternalOuId) AS po_internal_ou_name,
  39.         pPoInternalNo AS po_internal_no, pPoNo AS po_no,    
  40.         pSoOuId AS so_ou_id, f_get_ou_code(pSoOuId) AS so_ou_code, f_get_ou_name(pSoOuId) AS so_ou_name,
  41.         pSoNo AS so_no;
  42.     RETURN NEXT pRefHeader;
  43.    
  44.     Open pRefDetail FOR
  45.         EXECUTE '
  46.             WITH product_po AS (
  47.             SELECT C.product_id, A.ref_doc_no, B.ref_item_amount, D.curr_code, C.qty_dlv_so
  48.             FROM pu_po_internal_doc_no A
  49.             INNER JOIN sl_invoice_item B ON B.invoice_id = A.ref_id
  50.             INNER JOIN sl_do_item C ON C.do_item_id = B.ref_item_id
  51.             INNER JOIN sl_invoice D ON D.invoice_id = B.invoice_id
  52.             WHERE A.ref_doc_type_id = '|| vDocTypeSalesInvoice ||' AND D.tenant_id = $5
  53.                 AND A.po_internal_id IN (
  54.                     SELECT A.po_internal_id
  55.                     FROM pu_po_internal_doc_no A
  56.                     INNER JOIN pu_po B ON B.po_id = A.ref_id
  57.                     INNER JOIN pu_po_internal C ON C.po_internal_id = A.po_internal_id
  58.                     WHERE A.ref_doc_type_id = '|| vDocTypePo ||' AND A.ref_doc_no = $1 AND C.ou_buy_id = $2
  59.                     '|| vFilterPoInternalNo ||'
  60.                 )
  61.         )
  62.         SELECT A.doc_no AS so_no, A.doc_date AS so_date,
  63.         f_get_product_code(B.product_id) AS product_code, f_get_product_name(B.product_id) AS product_code,
  64.         (B.qty_so * B.nett_item_amount) AS so_item_amount, COALESCE(C.ref_doc_no, '''') AS sales_invoice_no, COALESCE(C.ref_item_amount * C.qty_dlv_so, 0) AS sales_invoice_item_amount,
  65.         A.curr_code AS so_curr_code, COALESCE(C.curr_code, '''') AS sales_invoice_curr_code,
  66.         B.qty_so AS qty_so, C.qty_dlv_so AS qty_sales_invoice
  67.         FROM sl_so A
  68.         INNER JOIN sl_so_item B ON B.so_id = A.so_id
  69.         LEFT JOIN product_po C ON C.product_id = B.product_id
  70.         WHERE A.doc_no = $3 AND A.ou_id = $4 AND B.tenant_id = $5 '
  71.         USING pPoNo, pPoInternalOuId, pSoNo, pSoOuId, pTenantId;
  72.     RETURN NEXT pRefDetail ;
  73.    
  74. END;
  75. $BODY$
  76.   LANGUAGE plpgsql VOLATILE
  77.   COST 100
  78.   ROWS 1000;
  79. /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement