Advertisement
widana

ts

Nov 14th, 2017
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. CREATE OR REPLACE FUNCTION r_report_inquiry_sales_outlet_csv(CHARACTER VARYING, BIGINT, BIGINT, BIGINT, CHARACTER VARYING, CHARACTER VARYING, CHARACTER VARYING, CHARACTER VARYING, BIGINT)
  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.     pGroupOutletId          ALIAS FOR $3;
  11.     pOutletId               ALIAS FOR $4;
  12.     pPeriodStart            ALIAS FOR $5;
  13.     pPeriodEnd              ALIAS FOR $6;
  14.     pFlgVerified            ALIAS FOR $7;
  15.     pFlgUnused              ALIAS FOR $8;
  16.     pRoleId                 ALIAS FOR $9;
  17.  
  18.     vVerified               CHARACTER VARYING := 'Verified';
  19.     vNotVerified            CHARACTER VARYING := 'Not Verified';
  20.     vInProgressVerified     CHARACTER VARYING := 'In Progress';
  21.     vYes                    CHARACTER VARYING := 'Y';
  22.     vNo                     CHARACTER VARYING := 'N';
  23.     vInProgress             CHARACTER VARYING := 'I';
  24.     vUse                    CHARACTER VARYING := 'Dipakai';
  25.     vUnUsed                 CHARACTER VARYING := 'Tidak Dipakai';
  26.     vFine                   CHARACTER VARYING := 'Denda';
  27.     vNotFine                CHARACTER VARYING := 'Tidak Denda';
  28.     vEmptyValue             CHARACTER VARYING := '';
  29.     vFilterVerified         CHARACTER VARYING := '';
  30.     vFilterStatus           CHARACTER VARYING := '';
  31.     vFilterOutlet           CHARACTER VARYING := '';
  32.     vFilterShowHpp          CHARACTER VARYING := '';
  33.     vFilterShowHppSubTotal  CHARACTER VARYING := '';
  34.     vFilterGroup            CHARACTER VARYING := '';
  35.     vShowHpp                CHARACTER VARYING;
  36.     vEmptyId                BIGINT := -99;
  37.     vCount                  BIGINT:= 0;
  38.     vOuGrazia               BIGINT;
  39.      
  40. BEGIN
  41.  
  42.     SELECT CAST(f_get_value_system_config_by_param_code(pTenantId, 'OU.GRAZIA.INDONESIA') AS BIGINT) INTO vOuGrazia;
  43.    
  44.     IF (pFlgVerified <> vEmptyValue) THEN
  45.         vFilterVerified := ' AND A.status_item = '''|| pFlgVerified || ''' ';
  46.     END IF;
  47.  
  48.     IF (pFlgUnused <> vEmptyValue) THEN
  49.         vFilterStatus := ' AND A.flg_unused = '''|| pFlgUnused || ''' ';
  50.     END IF;
  51.  
  52.     IF (pOutletId <> vEmptyId) THEN
  53.         vFilterOutlet := ' AND D.outlet_id = '|| pOutletId || '';
  54.     END IF;
  55.  
  56.     SELECT role_name INTO vShowHpp
  57.     FROM t_role A
  58.     INNER JOIN (
  59.         SELECT unnest(string_to_array(f_get_value_system_config_by_param_code(pTenantId, 'authorized.role.id'), ';')) AS authorized_id
  60.     ) B
  61.     ON A.role_id = CAST(B.authorized_id AS bigint)
  62.     WHERE role_id = pRoleId;
  63.    
  64.     IF vShowHpp IS NOT NULL THEN
  65.         vFilterShowHpp := ', COALESCE(E.purch_price, 0) AS hpp';
  66.         vFilterShowHppSubTotal := ', SUM(A.qty_verified* COALESCE(E.purch_price, 0)) AS sub_total_hpp';
  67.         vFilterGroup           := 'GROUP BY C.group_outlet_name, D.outlet_name, A.doc_no, A.doc_date, A.promo_code_verified,
  68.                                A.status_item, A.flg_unused,A.product_code, A.gross_sell_price,
  69.                                A.nett_sell_price_system, A.nett_sell_price, A.nett_sell_price_verified,
  70.                                A.qty, A.qty_verified, A.flg_denda, A.sub_total, a.denda, e.purch_price';
  71.         vCount         := 20;
  72.        
  73.         OPEN pRefHeader FOR
  74.             SELECT 20 AS _COUNT,
  75.                     'Dept Store', 'Outlet', 'Doc No',
  76.                     'Doc Date', 'Promo', 'Status',
  77.                     'Verified', 'Artikel', 'Harga Gross',
  78.                     'Harga Nett System', 'Harga Nett Diinput', 'Harga Nett Koreksi',
  79.                     'Qty Diinput', 'Qty Koreksi', 'Denda SPG',
  80.                     'Nilai Denda', 'Status', 'Sub Total', 'HPP', 'Sub Total Hpp',
  81.                     1 AS ordial;
  82.         RETURN NEXT pRefHeader;
  83.     ELSE
  84.         vCount         := 18;
  85.         OPEN pRefHeader FOR
  86.             SELECT 18 AS _COUNT,
  87.                     'Dept Store', 'Outlet', 'Doc No',
  88.                     'Doc Date', 'Promo', 'Status',
  89.                     'Verified', 'Artikel', 'Harga Gross',
  90.                     'Harga Nett System', 'Harga Nett Diinput', 'Harga Nett Koreksi',
  91.                     'Qty Diinput', 'Qty Koreksi', 'Denda SPG',
  92.                     'Nilai Denda', 'Status', 'Sub Total',
  93.                     1 AS ordial;
  94.         RETURN NEXT pRefHeader;
  95.     END IF;
  96.      
  97.     OPEN pRefDetail FOR
  98.         EXECUTE '
  99.             WITH TEMP AS (  
  100.                     SELECT A.doc_no, A.doc_date, B.product_code, A.gross_sell_price,
  101.                         A.nett_sell_price_system,  A.nett_sell_price, A.nett_sell_price_verified, A.qty, A.qty_verified, A.flg_unused,  
  102.                         A.nett_sell_price_verified * A.qty_verified AS sub_total, C.flg_denda, COALESCE(D.fine_amount,0) AS denda,
  103.                         A.outlet_id, A.promo_code_verified, A.status_item, B.product_id
  104.                     FROM i_trx_mobile_pos_item_balance A  
  105.                     INNER JOIN m_product B  ON A.product_id = B.product_id  
  106.                     INNER JOIN i_verification_trx_mobile_pos_item C  ON A.trx_mobile_pos_item_id = C.ref_item_id  
  107.                     LEFT JOIN i_spg_fine D  ON C.verification_trx_item_id = D.ref_item_id  
  108.                     UNION  
  109.                     SELECT A.doc_no, A.doc_date, B.product_code, A.gross_sell_price,
  110.                         A.nett_sell_price_system,  A.nett_sell_price, A.nett_sell_price_verified, A.qty, A.qty_verified, A.flg_unused,  
  111.                         A.nett_sell_price_verified * A.qty_verified AS sub_total, C.flg_denda, COALESCE(D.fine_amount,0) AS denda,
  112.                         A.outlet_id, A.promo_code_verified, A.status_item, B.product_id
  113.                     FROM i_trx_mobile_pos_item_balance A  
  114.                     INNER JOIN m_product B  ON A.product_id = B.product_id  
  115.                     INNER JOIN i_verification_trx_mobile_pos_item C  ON A.trx_mobile_pos_item_id = C.verification_trx_item_id  
  116.                         AND C.ref_item_id = -99  LEFT JOIN i_spg_fine D  ON C.verification_trx_item_id = D.ref_item_id  
  117.                     UNION  
  118.                     SELECT A.doc_no, A.doc_date, B.product_code, A.gross_sell_price,
  119.                         A.nett_sell_price_system,  A.nett_sell_price, A.nett_sell_price_verified, A.qty, A.qty_verified, A.flg_unused,  
  120.                         A.nett_sell_price_verified * A.qty_verified AS sub_total, $9 AS flg_denda, 0 AS denda,
  121.                         A.outlet_id, A.promo_code_verified, A.status_item, B.product_id
  122.                     FROM i_trx_mobile_pos_item_balance A  
  123.                     INNER JOIN m_product B  ON A.product_id = B.product_id  
  124.                     WHERE NOT EXISTS(  
  125.                         SELECT 1  FROM i_verification_trx_mobile_pos_item C  
  126.                         LEFT JOIN i_spg_fine D  ON C.verification_trx_item_id = D.ref_item_id  
  127.                         WHERE A.trx_mobile_pos_item_id = C.verification_trx_item_id  
  128.                         AND C.ref_item_id = -99 ))  
  129.                 SELECT '|| vCount ||' AS _COUNT,C.group_outlet_name, D.outlet_name, A.doc_no, A.doc_date, A.promo_code_verified,
  130.                     CASE WHEN A.status_item = $8 THEN $5
  131.                         WHEN A.status_item = $9 THEN $6
  132.                         WHEN A.status_item = $10 THEN $7 END status_item,
  133.                     CASE WHEN A.flg_unused = $9 THEN $11 ELSE $12 END flg_unused,
  134.                     A.product_code, A.gross_sell_price,
  135.                     A.nett_sell_price_system, A.nett_sell_price, A.nett_sell_price_verified, CAST(A.qty AS BIGINT) AS qty, CAST(A.qty_verified AS BIGINT) AS qty_verified ,
  136.                     CASE WHEN A.flg_denda = $8 THEN $13 ELSE $14 END flg_denda, A.denda, CASE WHEN A.flg_unused = $9 THEN $11 ELSE $12 END AS flg_unused2,
  137.                     A.sub_total '|| vFilterShowHpp || vFilterShowHppSubTotal || '
  138.                 FROM TEMP A
  139.                 INNER JOIN m_outlet_group B ON A.outlet_id = B.outlet_id
  140.                 INNER JOIN m_group_outlet C ON B.group_outlet_id = C.group_outlet_id
  141.                 INNER JOIN i_outlet D ON A.outlet_id = D.outlet_id
  142.                 LEFT JOIN m_purch_price_product E ON A.product_id = E.product_id
  143.                     AND E.ou_id = $15
  144.                     AND D.tenant_id = E.tenant_id
  145.                     AND A.doc_date BETWEEN E.date_from AND E.date_to
  146.                 WHERE  C.group_outlet_id = $1
  147.                        AND A.doc_date BETWEEN $3 AND $4'
  148.                        || vFilterVerified  || vFilterStatus || vFilterOutlet || vFilterGroup || '
  149.                 ORDER BY A.doc_no, A.doc_date ASC'
  150.         USING pGroupOutletId, pOutletId, pPeriodStart, pPeriodEnd, vVerified, vNotVerified, vInProgressVerified,
  151.                 vYes, vNo, vInProgress, vUse, vUnUsed, vFine, vNotFine, vOuGrazia;
  152.     RETURN NEXT pRefDetail;
  153.  
  154.    
  155. END
  156. $BODY$
  157.   LANGUAGE plpgsql VOLATILE
  158.   COST 100
  159.   ROWS 1000
  160. /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement