aadddrr

Untitled

Mar 24th, 2017
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.03 KB | None | 0 0
  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
  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
  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. /
Add Comment
Please, Sign In to add comment