Advertisement
aadddrr

R OUTLET REKAP

Mar 27th, 2017
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.  * rekap stok
  3.  * filter mandatory : session_id, tenant_id, ou_id, date_to
  4.  */
  5. CREATE OR REPLACE FUNCTION r_outlet_rekap_stok_akhir_vs_harga_beli(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.     vRoundingMode           character varying(5);
  24.    
  25.     vYes                    character varying(1);
  26.     vNo                     character varying(1);
  27.     vNone                   character varying(4);
  28.    
  29. BEGIN
  30.    
  31.     vEmptyValue := ' ';
  32.     vEmptyId := -99;
  33.     vAllId := -99;
  34.     vParentOuId := f_get_parent_ou_bu(pTenantId, pOuId);
  35.     vYes := 'Y';
  36.     vNo := 'N';
  37.     vNone := 'None';
  38.     SELECT f_get_value_system_config_by_param_code(pTenantId, 'rounding.mode.non.tax') INTO vRoundingMode;
  39.    
  40.     /* SELECT warehouse_id INTO vWarehouseId
  41.     FROM i_outlet
  42.     WHERE tenant_id = pTenantId AND ou_id = pOuId; */
  43.        
  44.     DELETE FROM tr_saldo_stok WHERE session_id = pSessionId;
  45.     DELETE FROM tr_sell_price WHERE session_id = pSessionId;   
  46.     DELETE FROM tt_input_data WHERE session_id = pSessionId;   
  47.     DELETE FROM tt_output_data WHERE session_id = pSessionId;  
  48.    
  49.     /**
  50.      * Adrian, Mar 27, 2017
  51.      * Insert tr_saldo_stok untuk OU yang dipilih
  52.      */
  53.     INSERT INTO tr_saldo_stok
  54.     (session_id, tenant_id, product_id, base_uom_id, qty,
  55.     product_code, product_name, ctgr_product_id, sub_ctgr_product_id)
  56.     SELECT pSessionId, A.tenant_id, A.product_id, A.base_uom_id, SUM(A.qty),
  57.         B.product_code, B.product_name, B.ctgr_product_id, B.sub_ctgr_product_id       
  58.     FROM in_product_balance_stock A
  59.         INNER JOIN m_product B ON A.product_id = B.product_id
  60.         INNER JOIN m_warehouse_ou C ON C.warehouse_id = A.warehouse_id
  61.         INNER JOIN m_ou_structure D ON D.ou_id = C.ou_id
  62.     WHERE A.tenant_id = pTenantId AND
  63.         D.ou_id = pOuId AND
  64.         A.qty <> 0
  65.     GROUP BY A.tenant_id, A.product_id, A.base_uom_id,
  66.         B.product_code, B.product_name, B.ctgr_product_id, B.sub_ctgr_product_id;      
  67.    
  68.     /**
  69.      * Adrian, Mar 27, 2017
  70.      * Insert tr_saldo_stok untuk Outlet jika OU yang dipilih bukan Outlet
  71.      */
  72.     INSERT INTO tr_saldo_stok
  73.     (session_id, tenant_id, product_id, base_uom_id, qty,
  74.     product_code, product_name, ctgr_product_id, sub_ctgr_product_id)
  75.     SELECT pSessionId, A.tenant_id, A.product_id, A.base_uom_id, SUM(A.qty),
  76.         B.product_code, B.product_name, B.ctgr_product_id, B.sub_ctgr_product_id       
  77.     FROM in_product_balance_stock A
  78.         INNER JOIN m_product B ON A.product_id = B.product_id
  79.         INNER JOIN m_warehouse_ou C ON C.warehouse_id = A.warehouse_id
  80.         INNER JOIN m_ou_structure D ON D.ou_id = C.ou_id
  81.     WHERE A.tenant_id = pTenantId AND
  82.         D.ou_bu_id = pOuId AND
  83.         D.ou_id <> D.ou_bu_id AND
  84.         A.qty <> 0
  85.     GROUP BY A.tenant_id, A.product_id, A.base_uom_id,
  86.         B.product_code, B.product_name, B.ctgr_product_id, B.sub_ctgr_product_id;
  87.        
  88.     /**
  89.      * Adrian, Mar 27, 2017
  90.      * tax percentage gross sell price di-set selalu 0 untuk flg tax amount Y
  91.      * Pada saat update:
  92.      * - tax amount dihitung terpisah  
  93.      */
  94.     INSERT INTO tr_sell_price
  95.     (session_id, tenant_id, product_id, ou_id,
  96.     curr_code, gross_sell_price, flg_tax_amount,
  97.     tax_percentage, tax_id)
  98.     SELECT pSessionId, A.tenant_id, A.product_id, B.ou_id,
  99.         B.curr_code, COALESCE(f_get_gross_price_from_nett_amount(B.amount, B.qty, B.flg_tax_amount, 0, vRoundingMode, f_get_digit_decimal_doc_curr(-99, B.curr_code)), 0), B.flg_tax_amount,
  100.         B.tax_percentage, B.tax_id
  101.     FROM tr_saldo_stok A, pu_monthly_price_product B
  102.     WHERE A.session_id = pSessionId AND
  103.         A.tenant_id = B.tenant_id AND
  104.         B.ou_id = vParentOuId AND
  105.         A.product_id = B.product_id AND
  106.         B.year_month_date = SUBSTRING(pDateTo, 1, 6) AND
  107.         B.flg_tax_amount = vYes;
  108.        
  109.     INSERT INTO tr_sell_price
  110.     (session_id, tenant_id, product_id, ou_id,
  111.     curr_code, gross_sell_price, flg_tax_amount,
  112.     tax_percentage, tax_id)
  113.     SELECT pSessionId, A.tenant_id, A.product_id, B.ou_id,
  114.         B.curr_code, COALESCE(f_get_gross_price_from_nett_amount(B.amount, B.qty, B.flg_tax_amount, B.tax_percentage, vRoundingMode, f_get_digit_decimal_doc_curr(-99, B.curr_code)), 0), B.flg_tax_amount,
  115.         B.tax_percentage, B.tax_id
  116.     FROM tr_saldo_stok A, pu_monthly_price_product B
  117.     WHERE A.session_id = pSessionId AND
  118.         A.tenant_id = B.tenant_id AND
  119.         B.ou_id = vParentOuId AND
  120.         A.product_id = B.product_id AND
  121.         B.year_month_date = SUBSTRING(pDateTo, 1, 6) AND
  122.         B.flg_tax_amount = vNo;
  123.  
  124.     INSERT INTO tr_sell_price
  125.     (session_id, tenant_id, product_id, ou_id,
  126.         curr_code, gross_sell_price, flg_tax_amount,
  127.         tax_percentage, tax_id)
  128.     SELECT pSessionId, A.tenant_id, A.product_id, pOuId,  
  129.         f_get_value_system_config_by_param_code(A.tenant_id, 'ValutaBuku'), 0, 'Y',
  130.         10.00, 1
  131.     FROM tr_saldo_stok A
  132.     WHERE A.session_id = pSessionId AND
  133.         NOT EXISTS (SELECT 1 FROM tr_sell_price C
  134.                     WHERE A.session_id = C.session_id AND
  135.                         A.tenant_id = C.tenant_id AND
  136.                         A.product_Id = C.product_id);
  137.  
  138.     UPDATE tr_sell_price Z
  139.     SET tax_amount = f_get_tax_amount(Z.tenant_id, A.qty * Z.gross_sell_price, Z.flg_tax_amount, Z.tax_percentage)
  140.     FROM tr_saldo_stok A
  141.     WHERE A.session_id = Z.session_id AND
  142.         A.tenant_id = Z.tenant_id AND
  143.         A.product_Id = Z.product_id;
  144.                        
  145.     Open pRefHeader FOR
  146.     SELECT B.ou_name AS outlet, fullName AS full_name, pDateTo AS date_to
  147.     FROM t_user A
  148.     INNER JOIN t_ou B ON A.tenant_id = B.tenant_id
  149.     WHERE user_id = pUserId AND B.ou_id = pOuId;
  150.    
  151.     RETURN NEXT pRefHeader;
  152.    
  153.     /**
  154.      * Adrian, Mar 27, 2017
  155.      * Add tax_amount, flg_tax_amount, tax_id
  156.      */
  157.     INSERT INTO tt_input_data
  158.     (session_id, id_data, data_group_1,
  159.     data_group_2, data_group_3, data_measure,
  160.     tax_amount, flg_tax_amount, tax_id,
  161.     data_group_4, data_group_5)
  162.     SELECT pSessionId, 'SALDO', B.curr_code,
  163.         C.ctgr_product_name, D.sub_ctgr_product_name, SUM(A.qty * B.gross_sell_price),
  164.         SUM(B.tax_amount), B.flg_tax_amount, B.tax_id,
  165.         B.flg_tax_amount, B.tax_id
  166.     FROM tr_saldo_stok A, tr_sell_price B, m_ctgr_product C, m_sub_ctgr_product D
  167.     WHERE A.session_id = pSessionId AND
  168.         A.session_id = B.session_id AND
  169.         A.tenant_id = B.tenant_id AND
  170.         A.product_id = B.product_id AND
  171.         A.ctgr_product_id = C.ctgr_product_id AND
  172.         A.sub_ctgr_product_id = D.sub_ctgr_product_id
  173.     GROUP BY B.curr_code, C.ctgr_product_name, D.sub_ctgr_product_name, B.flg_tax_amount, B.tax_id;
  174.    
  175.     SELECT f_agregate_percentage(pSessionId, 'SALDO', ';', 5, 1, 2) INTO vCount;
  176.    
  177.     /**
  178.      * Adrian, Mar 27, 2017
  179.      * update tax_name
  180.      */
  181.     UPDATE tt_output_data Z
  182.     SET tax_name = A.tax_name
  183.     FROM m_tax A
  184.     WHERE A.tax_id = Z.tax_id;
  185.    
  186.     UPDATE tt_output_data Z
  187.     SET tax_name = VNone
  188.     WHERE Z.tax_id = vEmptyId;
  189.    
  190.     Open pRefDetail FOR
  191.     SELECT A.data_group_1 AS curr_code, A.data_group_2 AS ctgr_product_name,
  192.         A.data_group_3 AS sub_ctgr_product_name, A.sum_measure AS saldo_amount, A.percentage_measure AS percentage,
  193.         A.tax_amount AS saldo_tax_amount,
  194.         CASE
  195.             WHEN A.flg_tax_amount = vYes THEN 'Yes'
  196.             ELSE 'No'
  197.         END AS flg_tax_amount,
  198.         A.tax_name
  199.     FROM tt_output_data A
  200.     WHERE A.session_id = pSessionId AND
  201.         A.id_data = 'SALDO';
  202.    
  203.     RETURN NEXT pRefDetail;
  204.  
  205.     DELETE FROM tr_saldo_stok WHERE session_id = pSessionId;
  206.     DELETE FROM tr_sell_price WHERE session_id = pSessionId;   
  207.     DELETE FROM tt_input_data WHERE session_id = pSessionId;   
  208.     DELETE FROM tt_output_data WHERE session_id = pSessionId;  
  209.    
  210. END;
  211. $BODY$
  212.   LANGUAGE plpgsql VOLATILE
  213.   COST 100
  214.   ROWS 1000;
  215.   /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement