Advertisement
aadddrr

REPORT TAGGING PO INTERNAL - SO IGS

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