Advertisement
aadddrr

Untitled

Mar 24th, 2017
99
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.  * filter optional : category product, sub category product, product
  5.  * jika filter optional diisi -99 artinya data digunakan semua
  6.  */
  7. CREATE OR REPLACE FUNCTION r_outlet_saldo_stok_akhir_vs_harga_beli(character varying, bigint, bigint, character varying, bigint, bigint, bigint)
  8.   RETURNS SETOF refcursor AS
  9. $BODY$
  10. DECLARE
  11.     pRefHeader          REFCURSOR := 'refHeader';
  12.     pRefDetail          REFCURSOR := 'refDetail';  
  13.     pSessionId              ALIAS FOR $1;
  14.     pTenantId               ALIAS FOR $2;
  15.     pOuId                   ALIAS FOR $3;
  16.     pDateTo                 ALIAS FOR $4;
  17.     pCtgrProductId          ALIAS FOR $5;
  18.     pSubCtgrProductId       ALIAS FOR $6;
  19.     pUserId                 ALIAS FOR $7;
  20.    
  21.     vEmptyValue             character varying(1);
  22.     vEmptyId                bigint;
  23.     vAllId                  bigint;
  24.     vWarehouseId            bigint;
  25.     vParentOuId             bigint;
  26.     vRoundingMode           character varying(5);
  27.    
  28.     vYes                    character varying(1);
  29.     vNo                     character varying(1);
  30.    
  31. BEGIN
  32.    
  33.     vEmptyValue := ' ';
  34.     vEmptyId := -99;
  35.     vAllId := -99;
  36.     vParentOuId := f_get_parent_ou_bu(pTenantId, pOuId);
  37.     vYes := 'Y';
  38.     vNo := 'N';
  39.     SELECT f_get_value_system_config_by_param_code(pTenantId, 'rounding.mode.non.tax') INTO vRoundingMode;
  40.    
  41.     /* SELECT warehouse_id INTO vWarehouseId
  42.     FROM i_outlet
  43.     WHERE tenant_id = pTenantId AND ou_id = pOuId; */
  44.    
  45.     DELETE FROM tr_saldo_stok WHERE session_id = pSessionId;
  46.     DELETE FROM tr_sell_price WHERE session_id = pSessionId;   
  47.    
  48.     /**
  49.      * Adrian, Mar 24, 2017
  50.      * Insert tr_saldo_stok untuk OU yang dipilih
  51.      */
  52.     INSERT INTO tr_saldo_stok
  53.     (session_id, tenant_id, product_id, base_uom_id, qty,
  54.     product_code, product_name, ctgr_product_id, sub_ctgr_product_id)
  55.     SELECT pSessionId, A.tenant_id, A.product_id, A.base_uom_id, SUM(A.qty),
  56.         B.product_code, B.product_name, B.ctgr_product_id, B.sub_ctgr_product_id       
  57.     FROM in_product_balance_stock A
  58.         INNER JOIN m_product B ON A.product_id = B.product_id
  59.         INNER JOIN m_warehouse_ou C ON C.warehouse_id = A.warehouse_id
  60.         INNER JOIN m_ou_structure D ON D.ou_id = C.ou_id
  61.     WHERE A.tenant_id = pTenantId AND
  62.         D.ou_id = pOuId AND
  63.         A.qty <> 0
  64.     GROUP BY A.tenant_id, A.product_id, A.base_uom_id,
  65.         B.product_code, B.product_name, B.ctgr_product_id, B.sub_ctgr_product_id;
  66.        
  67.     /**
  68.      * Adrian, Mar 24, 2017
  69.      * Insert tr_saldo_stok untuk Outlet jika ada
  70.      */
  71.     INSERT INTO tr_saldo_stok
  72.     (session_id, tenant_id, product_id, base_uom_id, qty,
  73.     product_code, product_name, ctgr_product_id, sub_ctgr_product_id)
  74.     SELECT pSessionId, A.tenant_id, A.product_id, A.base_uom_id, SUM(A.qty),
  75.         B.product_code, B.product_name, B.ctgr_product_id, B.sub_ctgr_product_id       
  76.     FROM in_product_balance_stock A
  77.         INNER JOIN m_product B ON A.product_id = B.product_id
  78.         INNER JOIN m_warehouse_ou C ON C.warehouse_id = A.warehouse_id
  79.         INNER JOIN m_ou_structure D ON D.ou_id = C.ou_id
  80.     WHERE A.tenant_id = pTenantId AND
  81.         D.ou_bu_id = pOuId AND
  82.         D.ou_id <> D.ou_bu_id AND
  83.         A.qty <> 0
  84.     GROUP BY A.tenant_id, A.product_id, A.base_uom_id,
  85.         B.product_code, B.product_name, B.ctgr_product_id, B.sub_ctgr_product_id;
  86.        
  87.     /**
  88.      * Adrian, Mar 24, 2017
  89.      * tax percentage gross sell price di-set selalu 0 untuk flg tax amount Y
  90.      * Pada saat update:
  91.      * - tax amount dihitung terpisah  
  92.      */
  93.     INSERT INTO tr_sell_price
  94.     (session_id, tenant_id, ou_id, product_id,
  95.     curr_code, gross_sell_price, flg_tax_amount,
  96.     tax_percentage)
  97.     SELECT pSessionId, A.tenant_id, B.ou_id, A.product_id,
  98.         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,
  99.         B.tax_percentage
  100.     FROM tr_saldo_stok A, pu_monthly_price_product B
  101.     WHERE A.session_id = pSessionId AND
  102.         A.tenant_id = B.tenant_id AND
  103.         A.product_id = B.product_id AND
  104.         B.ou_id = vParentOuId AND
  105.         B.year_month_date = SUBSTRING(pDateTo, 1, 6) AND
  106.         B.flg_tax_amount = vYes;
  107.        
  108.     INSERT INTO tr_sell_price
  109.     (session_id, tenant_id, ou_id, product_id,
  110.     curr_code, gross_sell_price, flg_tax_amount,
  111.     tax_percentage)
  112.     SELECT pSessionId, A.tenant_id, B.ou_id, A.product_id,
  113.         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,
  114.         B.tax_percentage
  115.     FROM tr_saldo_stok A, pu_monthly_price_product B
  116.     WHERE A.session_id = pSessionId AND
  117.         A.tenant_id = B.tenant_id AND
  118.         A.product_id = B.product_id AND
  119.         B.ou_id = vParentOuId AND
  120.         B.year_month_date = SUBSTRING(pDateTo, 1, 6) AND
  121.         B.flg_tax_amount = vNo;
  122.    
  123.     INSERT INTO tr_sell_price
  124.     (session_id, tenant_id, ou_id, product_id,
  125.         curr_code, gross_sell_price, flg_tax_amount,
  126.         tax_percentage)
  127.     SELECT pSessionId, A.tenant_id, pOuId, A.product_id,
  128.         f_get_value_system_config_by_param_code(A.tenant_id, 'ValutaBuku'), 0, 'Y',
  129.         10.00
  130.     FROM tr_saldo_stok A
  131.     WHERE A.session_id = pSessionId AND
  132.         NOT EXISTS (SELECT 1 FROM tr_sell_price C
  133.                     WHERE A.session_id = C.session_id AND
  134.                         A.tenant_id = C.tenant_id AND
  135.                         A.product_Id = C.product_id);
  136.    
  137.     UPDATE tr_sell_price Z
  138.     SET tax_amount = f_get_tax_amount(Z.tenant_id, A.qty * Z.gross_sell_price, Z.flg_tax_amount, Z.tax_percentage)
  139.     FROM tr_saldo_stok A
  140.     WHERE A.session_id = Z.session_id AND
  141.         A.tenant_id = Z.tenant_id AND
  142.         A.product_Id = Z.product_id;
  143.  
  144.     IF pCtgrProductId <> vAllId THEN
  145.    
  146.         DELETE FROM tr_saldo_stok WHERE session_id = pSessionId AND ctgr_product_id <> pCtgrProductId;
  147.    
  148.     END IF;
  149.  
  150.     IF pSubCtgrProductId <> vAllId THEN
  151.    
  152.         DELETE FROM tr_saldo_stok WHERE session_id = pSessionId AND sub_ctgr_product_id <> pSubCtgrProductId;
  153.    
  154.     END IF;
  155.    
  156.     Open pRefHeader FOR
  157.     SELECT B.ou_name AS outlet, A.fullname AS full_name, pDateTo AS date_to, pCtgrProductId AS ctgr_product_id, pSubCtgrProductId AS sub_ctgr_product_id
  158.     FROM t_user A
  159.     INNER JOIN t_ou B ON A.tenant_id = B.tenant_id
  160.     WHERE A.user_id = pUserId AND B.ou_id = pOuId;
  161.    
  162.     RETURN NEXT pRefHeader;
  163.    
  164.     Open pRefDetail FOR
  165.     SELECT B.curr_code, C.ctgr_product_name AS ctgr_product_name, D.sub_ctgr_product_name AS sub_ctgr_product_name,
  166.         A.product_code AS product_code, A.product_name AS product_name, E.uom_code AS uom_code,
  167.         SUM(A.qty) AS qty, B.gross_sell_price AS gross_sell_price, SUM(A.qty * B.gross_sell_price) AS saldo_amount, SUM(B.tax_amount) AS saldo_tax_amount
  168.     FROM tr_saldo_stok A, tr_sell_price B, m_ctgr_product C, m_sub_ctgr_product D, m_uom E
  169.     WHERE A.session_id = pSessionId AND
  170.         A.session_id = B.session_id AND
  171.         A.tenant_id = B.tenant_id AND
  172.         A.product_id = B.product_id AND
  173.         A.ctgr_product_id = C.ctgr_product_id AND
  174.         A.sub_ctgr_product_id = D.sub_ctgr_product_id AND
  175.         A.base_uom_id = E.uom_id
  176.     GROUP BY B.curr_code, C.ctgr_product_name, D.sub_ctgr_product_name, A.product_code, A.product_name, E.uom_code, B.gross_sell_price
  177.     ORDER BY B.curr_code, C.ctgr_product_name, D.sub_ctgr_product_name, A.product_code;
  178.    
  179.     RETURN NEXT pRefDetail;
  180.  
  181.     DELETE FROM tr_saldo_stok WHERE session_id = pSessionId;
  182.     DELETE FROM tr_sell_price WHERE session_id = pSessionId;   
  183. END;
  184. $BODY$
  185.   LANGUAGE plpgsql VOLATILE
  186.   COST 100
  187.   ROWS 1000;
  188.   /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement