Advertisement
widana

r_report_inquiry_sales_outlet_csv

Nov 16th, 2017
130
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.sub_total, A.flg_denda, e.purch_price, A.trx_mobile_pos_item_balance_id';
  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, A.flg_denda,
  103.                         A.outlet_id, A.promo_code_verified, A.status_item, B.product_id, A.trx_mobile_pos_item_balance_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.verification_trx_item_id
  107.                         AND C.ref_item_id = -99
  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, A.flg_denda,
  112.                         A.outlet_id, A.promo_code_verified, A.status_item, B.product_id, A.trx_mobile_pos_item_balance_id
  113.                     FROM i_trx_mobile_pos_item_balance A
  114.                     INNER JOIN m_product B ON A.product_id = B.product_id
  115.                     WHERE NOT EXISTS(
  116.                         SELECT 1 FROM i_verification_trx_mobile_pos_item C
  117.                         WHERE A.trx_mobile_pos_item_id = C.verification_trx_item_id)
  118.                 )
  119.                 SELECT '|| vCount ||' AS _COUNT,C.group_outlet_name, D.outlet_name, A.doc_no, A.doc_date, A.promo_code_verified,
  120.                     CASE WHEN A.status_item = $8 THEN $5
  121.                         WHEN A.status_item = $9 THEN $6
  122.                         WHEN A.status_item = $10 THEN $7 END status_item,
  123.                     CASE WHEN A.flg_unused = $9 THEN $11 ELSE $12 END flg_unused,
  124.                     A.product_code, A.gross_sell_price,
  125.                     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 ,
  126.                     CASE WHEN A.flg_denda = $8 THEN $13 ELSE $14 END flg_denda, f_get_fine_amount_spg(A.trx_mobile_pos_item_balance_id) AS denda, CASE WHEN A.flg_unused = $9 THEN $11 ELSE $12 END AS flg_unused2,
  127.                     A.sub_total '|| vFilterShowHpp || vFilterShowHppSubTotal || '
  128.                 FROM TEMP A
  129.                 INNER JOIN m_outlet_group B ON A.outlet_id = B.outlet_id
  130.                 INNER JOIN m_group_outlet C ON B.group_outlet_id = C.group_outlet_id
  131.                 INNER JOIN i_outlet D ON A.outlet_id = D.outlet_id
  132.                 LEFT JOIN m_purch_price_product E ON A.product_id = E.product_id
  133.                     AND E.ou_id = $15
  134.                     AND D.tenant_id = E.tenant_id
  135.                     AND A.doc_date BETWEEN E.date_from AND E.date_to
  136.                 WHERE  C.group_outlet_id = $1
  137.                        AND A.doc_date BETWEEN $3 AND $4'
  138.                        || vFilterVerified  || vFilterStatus || vFilterOutlet || vFilterGroup || '
  139.                 ORDER BY A.doc_no, A.doc_date ASC'
  140.         USING pGroupOutletId, pOutletId, pPeriodStart, pPeriodEnd, vVerified, vNotVerified, vInProgressVerified,
  141.                 vYes, vNo, vInProgress, vUse, vUnUsed, vFine, vNotFine, vOuGrazia;
  142.     RETURN NEXT pRefDetail;
  143.    
  144. END
  145. $BODY$
  146.   LANGUAGE plpgsql VOLATILE
  147.   COST 100
  148.   ROWS 1000
  149. /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement