Advertisement
widana

Untitled

Jul 18th, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -- Function: r_outlet_rekap_nilai_saldo_stok_akhir(character varying, bigint, bigint, character varying, bigint)
  2.  
  3. -- DROP FUNCTION r_outlet_rekap_nilai_saldo_stok_akhir(character varying, bigint, bigint, character varying, bigint);
  4.  
  5. CREATE OR REPLACE FUNCTION r_outlet_rekap_nilai_saldo_stok_akhir(character varying, bigint, bigint, character varying, bigint)
  6.   RETURNS SETOF refcursor AS
  7. $BODY$
  8. DECLARE
  9.     pRefHeader          REFCURSOR := 'refHeader';
  10.     pRefDetail          REFCURSOR := 'refDetail';  
  11.     pSessionId              ALIAS FOR $1;
  12.     pTenantId               ALIAS FOR $2;
  13.     pOuId                   ALIAS FOR $3;
  14.     pDateTo                 ALIAS FOR $4;
  15.     pUserId                 ALIAS FOR $5;
  16.    
  17.     vEmptyValue             character varying(1);
  18.     vEmptyId                bigint;
  19.     vAllId                  bigint;
  20.     vWarehouseId            bigint;
  21.     vParentOuId             bigint;
  22.     vCount              character varying;                 
  23.    
  24. BEGIN
  25.    
  26.     vEmptyValue := ' ';
  27.     vEmptyId := -99;
  28.     vAllId := -99;
  29.     vParentOuId := f_get_parent_ou_bu(pTenantId, pOuId);
  30.    
  31.     SELECT warehouse_id INTO vWarehouseId
  32.     FROM i_outlet
  33.     WHERE tenant_id = pTenantId AND ou_id = pOuId;
  34.        
  35.     DELETE FROM tr_saldo_stok WHERE session_id = pSessionId;
  36.     DELETE FROM tr_sell_price WHERE session_id = pSessionId;   
  37.     DELETE FROM tt_input_data WHERE session_id = pSessionId;   
  38.     DELETE FROM tt_output_data WHERE session_id = pSessionId;  
  39.    
  40.     INSERT INTO tr_saldo_stok
  41.     (session_id, tenant_id, product_id, base_uom_id, qty,
  42.     product_code, product_name, ctgr_product_id, sub_ctgr_product_id)
  43.     SELECT pSessionId, A.tenant_id, A.product_id, A.base_uom_id, SUM(A.qty),
  44.         B.product_code, B.product_name, B.ctgr_product_id, B.sub_ctgr_product_id       
  45.     FROM in_product_balance_stock A
  46.         INNER JOIN m_product B ON A.product_id = B.product_id
  47.     WHERE A.tenant_id = pTenantId AND
  48.         A.warehouse_id = vWarehouseId AND
  49.         A.qty <> 0
  50.     GROUP BY A.tenant_id, A.product_id, A.base_uom_id,
  51.         B.product_code, B.product_name, B.ctgr_product_id, B.sub_ctgr_product_id;
  52.        
  53.     INSERT INTO tr_sell_price
  54.     (session_id, tenant_id, product_id, ou_id,
  55.     curr_code, gross_sell_price, flg_tax_amount)
  56.     SELECT pSessionId, A.tenant_id, A.product_id, B.ou_id,
  57.         B.curr_code, B.gross_sell_price, B.flg_tax_amount
  58.     FROM tr_saldo_stok A, m_sell_price_product B
  59.     WHERE A.session_id = pSessionId AND
  60.         A.tenant_id = B.tenant_id AND
  61.         B.ou_id = pOuId AND
  62.         A.product_id = B.product_id AND
  63.         pDateTo BETWEEN B.date_from AND B.date_to;
  64.        
  65.     INSERT INTO tr_sell_price
  66.     (session_id, tenant_id, product_id, ou_id,
  67.     curr_code, gross_sell_price, flg_tax_amount)
  68.     SELECT pSessionId, A.tenant_id, A.product_id, B.ou_id,  
  69.         B.curr_code, B.gross_sell_price, B.flg_tax_amount
  70.     FROM tr_saldo_stok A, m_sell_price_product B
  71.     WHERE A.session_id = pSessionId AND
  72.         A.tenant_id = B.tenant_id AND
  73.         A.product_id = B.product_id AND
  74.         B.ou_id = vParentOuId AND
  75.         pDateTo BETWEEN B.date_from AND B.date_to AND
  76.         NOT EXISTS (SELECT 1 FROM tr_sell_price C
  77.                     WHERE A.session_id = C.session_id AND
  78.                         A.tenant_id = C.tenant_id AND
  79.                         A.product_Id = C.product_id);
  80.    
  81.     INSERT INTO tr_sell_price
  82.     (session_id, tenant_id, product_id, ou_id,
  83.         curr_code, gross_sell_price, flg_tax_amount)
  84.     SELECT pSessionId, A.tenant_id, A.product_id, pOuId,  
  85.         f_get_value_system_config_by_param_code(A.tenant_id, 'ValutaBuku'), 0, 'Y'
  86.     FROM tr_saldo_stok A
  87.     WHERE A.session_id = pSessionId AND
  88.         NOT EXISTS (SELECT 1 FROM tr_sell_price C
  89.                     WHERE A.session_id = C.session_id AND
  90.                         A.tenant_id = C.tenant_id AND
  91.                         A.product_Id = C.product_id);
  92.  
  93.     Open pRefHeader FOR
  94.     SELECT fullName AS full_name, pDateTo AS date_to
  95.     FROM t_user
  96.     WHERE user_id = pUserId;
  97.    
  98.     RETURN NEXT pRefHeader;
  99.    
  100.     INSERT INTO tt_input_data
  101.     (session_id, id_data, data_group_1,
  102.     data_group_2, data_group_3, data_measure)
  103.     SELECT pSessionId, 'SALDO', B.curr_code,
  104.         C.ctgr_product_name, D.sub_ctgr_product_name, SUM(A.qty * B.gross_sell_price)
  105.     FROM tr_saldo_stok A, tr_sell_price B, m_ctgr_product C, m_sub_ctgr_product D
  106.     WHERE A.session_id = pSessionId AND
  107.         A.session_id = B.session_id AND
  108.         A.tenant_id = B.tenant_id AND
  109.         A.product_id = B.product_id AND
  110.         A.ctgr_product_id = C.ctgr_product_id AND
  111.         A.sub_ctgr_product_id = D.sub_ctgr_product_id
  112.     GROUP BY B.curr_code, C.ctgr_product_name, D.sub_ctgr_product_name;
  113.    
  114.     SELECT f_agregate_percentage(pSessionId, 'SALDO', ';', 3, 1, 2) INTO vCount;
  115.    
  116.     Open pRefDetail FOR
  117.     SELECT A.data_group_1 AS curr_code, A.data_group_2 AS ctgr_product_name,
  118.         A.data_group_3 AS sub_ctgr_product_name, A.sum_measure AS saldo_amount, A.percentage_measure AS percentage
  119.     FROM tt_output_data A
  120.     WHERE A.session_id = pSessionId AND
  121.         A.id_data = 'SALDO';
  122.    
  123.     RETURN NEXT pRefDetail;
  124.  
  125.     DELETE FROM tr_saldo_stok WHERE session_id = pSessionId;
  126.     DELETE FROM tr_sell_price WHERE session_id = pSessionId;   
  127.     DELETE FROM tt_input_data WHERE session_id = pSessionId;   
  128.     DELETE FROM tt_output_data WHERE session_id = pSessionId;  
  129.    
  130. END;
  131. $BODY$
  132.   LANGUAGE plpgsql VOLATILE
  133.   COST 100
  134.   ROWS 1000;
  135. ALTER FUNCTION r_outlet_rekap_nilai_saldo_stok_akhir(character varying, bigint, bigint, character varying, bigint)
  136.   OWNER TO sts;
  137. GRANT EXECUTE ON FUNCTION r_outlet_rekap_nilai_saldo_stok_akhir(character varying, bigint, bigint, character varying, bigint) TO sts;
  138. GRANT EXECUTE ON FUNCTION r_outlet_rekap_nilai_saldo_stok_akhir(character varying, bigint, bigint, character varying, bigint) TO public;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement