Advertisement
aadddrr

R TAGGING PO INTERNAL - SO IGS

Feb 24th, 2017
96
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, character varying, bigint, character varying, character varying, 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.     pFilterBy           ALIAS FOR $6;
  17.     pOuId               ALIAS FOR $7;
  18.     pDocNo              ALIAS FOR $8;
  19.     pYear               ALIAS FOR $9;
  20.     pMonth              ALIAS FOR $10;
  21.    
  22.     vEmptyString        character varying := '';
  23.     vFilterDocNo        character varying := '';
  24.    
  25.     vDocTypeSalesInvoice    bigint := 321;
  26.     vDocTypePo              bigint := 101;
  27.     vFilterByPoInternal     character varying := 'PO Internal';
  28.     vUpperDocNo             character varying := '';
  29.     vYearMonth              character varying := '';
  30.    
  31. BEGIN
  32.    
  33.     SELECT pYear || pMonth INTO vYearMonth;
  34.    
  35.     IF (pDocNo <> vEmptyString) THEN
  36.         SELECT UPPER (pDocNo) INTO vUpperDocNo;
  37.         vFilterDocNo := ' AND UPPER(C.doc_no) LIKE ''%' || vUpperDocNo || '%''';
  38.     END IF;
  39.    
  40.     Open pRefHeader FOR
  41.     SELECT pFilterBy AS filter_by,
  42.         pOuId AS ou_id, f_get_ou_code(pOuId) AS ou_code, f_get_ou_name(pOuId) AS ou_name,
  43.         pDocNo AS doc_no,
  44.         pYear AS year,
  45.         pMonth AS month;
  46.     RETURN NEXT pRefHeader;
  47.    
  48.    
  49.     IF (pFilterBy = vFilterByPoInternal) THEN
  50.         Open pRefDetail FOR
  51.             EXECUTE '
  52.                 WITH product_so AS (
  53.                     SELECT C.product_id, B.doc_no, B.doc_date, C.nett_item_amount, B.curr_code, C.qty_so
  54.                     FROM fi_po_internal_so_igs_tagging A
  55.                     INNER JOIN sl_so B ON A.so_id = B.so_id
  56.                     INNER JOIN sl_so_item C ON C.so_id = B.so_id
  57.                     WHERE A.tenant_id = $1
  58.                 )
  59.                 SELECT COALESCE(G.doc_no, '''') AS so_no, COALESCE(G.doc_date, '''') AS so_date,
  60.                     f_get_product_code(E.product_id) AS product_code, f_get_product_name(E.product_id) AS product_name,
  61.                     COALESCE(G.nett_item_amount, 0) AS so_item_amount, B.ref_doc_no AS sales_invoice_no, D.ref_item_amount AS sales_invoice_item_amount,
  62.                     COALESCE(G.curr_code, '''') AS so_curr_code, F.curr_code AS sales_invoice_curr_code,
  63.                     COALESCE(G.qty_so, 0) AS qty_so, E.qty_dlv_so AS qty_sales_invoice
  64.                 FROM fi_po_internal_so_igs_tagging A
  65.                 INNER JOIN pu_po_internal_doc_no B ON B.po_internal_id = A.po_internal_id
  66.                 INNER JOIN pu_po_internal C ON C.po_internal_id = B.po_internal_id
  67.                 INNER JOIN sl_invoice_item D ON D.invoice_id = B.ref_id
  68.                 INNER JOIN sl_do_item E ON E.do_item_id = D.ref_item_id
  69.                 INNER JOIN sl_invoice F ON F.invoice_id = D.invoice_id
  70.                 LEFT JOIN product_so G ON G.product_id = E.product_id
  71.                 WHERE B.ref_doc_type_id = $2
  72.                     AND A.tenant_id = $1
  73.                     AND A.po_internal_ou_id = $3
  74.                     AND SUBSTR(C.doc_date, 1, 6) = $4'
  75.                     || vFilterDocNo
  76.             USING pTenantId, vDocTypeSalesInvoice, pOuId, vYearMonth;
  77.         RETURN NEXT pRefDetail ;
  78.     ELSE
  79.         Open pRefDetail FOR
  80.             EXECUTE '
  81.                 WITH product_po AS (
  82.                     SELECT D.product_id, B.ref_doc_no, C.ref_item_amount, E.curr_code, D.qty_dlv_so
  83.                     FROM fi_po_internal_so_igs_tagging A
  84.                     INNER JOIN pu_po_internal_doc_no B ON B.po_internal_id = A.po_internal_id
  85.                     INNER JOIN sl_invoice_item C ON C.invoice_id = B.ref_id
  86.                     INNER JOIN sl_do_item D ON D.do_item_id = C.ref_item_id
  87.                     INNER JOIN sl_invoice E ON E.invoice_id = C.invoice_id
  88.                     WHERE B.ref_doc_type_id = $1 AND A.tenant_id = $2
  89.                 )
  90.                 SELECT B.doc_no AS so_no, B.doc_date AS so_date,
  91.                     f_get_product_code(C.product_id) AS product_code, f_get_product_name(C.product_id) AS product_name,
  92.                     C.nett_item_amount AS so_item_amount, COALESCE(D.ref_doc_no, '''') AS sales_invoice_no, COALESCE(D.ref_item_amount, 0) AS sales_invoice_item_amount,
  93.                     B.curr_code AS so_curr_code, COALESCE(D.curr_code, '''') AS sales_invoice_curr_code,
  94.                     C.qty_so AS qty_so, COALESCE(D.qty_dlv_so, 0) AS qty_sales_invoice
  95.                 FROM fi_po_internal_so_igs_tagging A
  96.                 INNER JOIN sl_so B ON A.so_id = B.so_id
  97.                 INNER JOIN sl_so_item C ON C.so_id = B.so_id
  98.                 LEFT JOIN product_po D ON D.product_id = C.product_id
  99.                 WHERE A.tenant_id = $2
  100.                     AND A.so_ou_id = $3
  101.                     AND SUBSTR(B.doc_date, 1, 6) = $4'
  102.                     || vFilterDocNo
  103.             USING vDocTypeSalesInvoice, pTenantId, pOuId, vYearMonth;
  104.         RETURN NEXT pRefDetail ;
  105.     END IF;
  106.    
  107. END;
  108. $BODY$
  109.   LANGUAGE plpgsql VOLATILE
  110.   COST 100
  111.   ROWS 1000;
  112. /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement