Advertisement
aadddrr

r_purch_invoice_list

Oct 3rd, 2017
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /**
  2.  * Modified by Adrian, Oct 4, 2017
  3.  * memperbaiki query refDetail
  4.  * detail item diambil dari pu_po_balance_invoice dan pu_po_balance_invoice_tax
  5.  */
  6.  
  7. DROP FUNCTION IF EXISTS r_purch_invoice_list(character varying, bigint, bigint, character varying, character varying, bigint, bigint, bigint, bigint);
  8.  
  9. CREATE OR REPLACE FUNCTION r_purch_invoice_list(character varying, bigint, bigint, bigint, character varying, bigint, bigint, bigint, bigint, bigint, bigint, character varying, character varying)
  10.   RETURNS SETOF refcursor AS
  11. $BODY$
  12. DECLARE
  13.     pRefHeader          REFCURSOR := 'refHeader';
  14.     pRefDetail          REFCURSOR := 'refDetail';
  15.     pSessionId          ALIAS FOR $1;
  16.     pTenantId           ALIAS FOR $2;
  17.     pUserId             ALIAS FOR $3;
  18.     pRoleId             ALIAS FOR $4;
  19.     pDatetime           ALIAS FOR $5;
  20.     pOuId               ALIAS FOR $6;  
  21.     pPartnerId          ALIAS FOR $7;  
  22.     pCtgrPartnerId      ALIAS FOR $8;  
  23.     pCtgrProductId      ALIAS FOR $9;  
  24.     pSubCtgrProductId   ALIAS FOR $10; 
  25.     pBrandId            ALIAS FOR $11; 
  26.     pDateFrom           ALIAS FOR $12;
  27.     pDateTo             ALIAS FOR $13;
  28.    
  29.  
  30.     vEmptyId                bigint := -99;
  31.     vFilterPartner          text := '';
  32.     vFilterCtgrPartner      text := '';
  33.     vFilterCtgrProduct      text := '';
  34.     vFilterSubCtgrProduct   text := '';
  35.     vFilterBrand            text := '';
  36. BEGIN
  37.  
  38.     IF (pPartnerId <> vEmptyId) THEN
  39.         vFilterPartner := ' AND B.partner_id = ' || pPartnerId;
  40.     END IF;
  41.    
  42.     IF (pCtgrPartnerId <> vEmptyId) THEN
  43.         vFilterCtgrPartner := ' AND M.ctgr_partner_id = ' || pCtgrPartnerId;
  44.     END IF;
  45.    
  46.     IF (pCtgrProductId <> vEmptyId) THEN
  47.         vFilterCtgrProduct := ' AND I.ctgr_product_id = ' || pCtgrProductId;
  48.     END IF;
  49.    
  50.     IF (pSubCtgrProductId <> vEmptyId) THEN
  51.         vFilterSubCtgrProduct := ' AND J.sub_ctgr_product_id = ' || pSubCtgrProductId;
  52.     END IF;
  53.    
  54.     IF (pBrandId <> vEmptyId) THEN
  55.         vFilterBrand := ' AND O.brand_id = ' || pBrandId;
  56.     END IF;
  57.    
  58.     Open pRefHeader FOR
  59.         SELECT pPartnerId AS partner_id, CASE WHEN pPartnerId = vEmptyId THEN '(All)' ELSE f_get_partner_name(pPartnerId) END AS partner_name,
  60.             pCtgrPartnerId AS ctgr_partner_id, pCtgrProductId AS ctgr_product_id, pSubCtgrProductId AS sub_ctgr_product_id,
  61.             CASE WHEN pCtgrPartnerId = vEmptyId THEN '(All)' ELSE f_get_ctgr_partner_name(pCtgrPartnerId) END AS ctgr_partner_name,  
  62.             CASE WHEN pCtgrProductId = vEmptyId THEN '(All)' ELSE f_get_ctgr_product_name(pCtgrProductId) END AS ctgr_product_name,
  63.             CASE WHEN pSubCtgrProductId = vEmptyId THEN '(All)' ELSE f_get_sub_ctgr_product_name(pSubCtgrProductId) END AS sub_ctgr_product_name,
  64.             pBrandId AS brand_id, CASE WHEN pBrandId = vEmptyId THEN '(All)' ELSE f_get_brand_name(pBrandId) END AS brand_name,
  65.             pDateFrom AS date_from, pDateTo AS date_to, pDatetime AS print_datetime, pOuId AS ou_id, f_get_ou_name(pOuId) AS ou_name;
  66.     RETURN NEXT pRefHeader;
  67.    
  68.     Open pRefDetail FOR
  69.     EXECUTE '
  70.     SELECT A.ou_id, B.partner_id, D.invoice_item_id, I.ctgr_product_id,
  71.         J.sub_ctgr_product_id, A.curr_code, B.partner_name, A.doc_no, A.doc_date,
  72.         A.ext_doc_no AS ref_no, A.ext_doc_date AS ref_date, C.doc_no AS po_no, C.doc_date AS po_date, G.product_code, G.product_name,
  73.         SUM(P.qty_rcv_po) AS qty_po, H.uom_code AS uom_po, F.nett_price_po AS price, SUM(P.item_amount) AS item_amount,
  74.         SUM(COALESCE(Q.tax_amount, 0)) AS tax_amount, A.invoice_id
  75.     FROM pu_invoice A
  76.       INNER JOIN m_partner B ON A.partner_id = B.partner_id
  77.       INNER JOIN pu_po C ON A.ref_id = C.po_id
  78.       INNER JOIN pu_invoice_item D ON A.invoice_id = D.invoice_id  
  79.       INNER JOIN pu_receive_goods_item E ON D.ref_item_id = E.receive_goods_item_id
  80.       INNER JOIN pu_po_item F ON E.ref_id = F.po_item_id
  81.       INNER JOIN m_product G ON F.product_id = G.product_id
  82.       INNER JOIN m_uom H ON F.po_uom_id = H.uom_id
  83.       INNER JOIN m_ctgr_product I ON G.ctgr_product_id = I.ctgr_product_id
  84.       INNER JOIN m_sub_ctgr_product J ON G.sub_ctgr_product_id = J.sub_ctgr_product_id
  85.       INNER JOIN t_user_role K ON K.user_id = $1 AND K.role_id = $2
  86.       INNER JOIN m_policy_product L ON J.sub_ctgr_product_id = L.sub_ctgr_product_id AND K.user_role_id = L.user_role_id
  87.       INNER JOIN m_ctgr_partner M ON B.ctgr_partner_id = M.ctgr_partner_id
  88.       INNER JOIN m_policy_partner N ON M.ctgr_partner_id = N.ctgr_partner_id AND K.user_role_id = N.user_role_id
  89.       INNER JOIN m_brand O ON G.brand_id = O.brand_id
  90.       INNER JOIN pu_po_balance_invoice P ON C.po_id = P.po_id AND E.receive_goods_id = P.ref_id AND E.receive_goods_item_id = P.ref_item_id
  91.       LEFT JOIN pu_po_balance_invoice_tax Q ON C.po_id = Q.po_id AND E.receive_goods_id = Q.ref_id AND E.receive_goods_item_id = Q.ref_item_id AND F.tax_id = Q.tax_id
  92.       WHERE A.tenant_id = $3
  93.         AND A.ou_id = $4
  94.         AND A.doc_date BETWEEN $5 AND $6' ||
  95.         vFilterPartner  ||
  96.         vFilterCtgrPartner  ||
  97.         vFilterCtgrProduct  ||
  98.         vFilterSubCtgrProduct   ||
  99.         vFilterBrand ||'
  100.     GROUP BY A.ou_id, B.partner_id, D.invoice_item_id, I.ctgr_product_id,
  101.         J.sub_ctgr_product_id, A.curr_code, B.partner_name, A.doc_no, A.doc_date,
  102.         A.ext_doc_no, A.ext_doc_date, C.doc_no, C.doc_date, G.product_code, G.product_name,
  103.         H.uom_code, F.nett_price_po, A.invoice_id
  104.     ORDER BY A.curr_code, B.partner_name, A.invoice_id, A.doc_no' USING pUserId, pRoleId, pTenantId, pOuId, pDateFrom, pDateTo;
  105.     RETURN NEXT pRefDetail ;
  106. END;
  107. $BODY$
  108.   LANGUAGE plpgsql VOLATILE
  109.   COST 100
  110.   ROWS 1000;
  111. /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement