Advertisement
aadddrr

R OUT:LET SALDO STOK AKHIR VS HARGA BELI

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