Advertisement
Guest User

r_cash_projection

a guest
Feb 27th, 2020
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.24 KB | None | 0 0
  1. CREATE OR REPLACE FUNCTION r_cash_projection(bigint, bigint, bigint, character varying, character varying, character varying)
  2. RETURNS SETOF refcursor AS
  3. $BODY$
  4. DECLARE
  5. pRefHeader REFCURSOR := 'refHeader';
  6. pRefDetail REFCURSOR := 'refDetail';
  7. pRefDetail2 REFCURSOR := 'refDetail2';
  8. pRefDetail3 REFCURSOR := 'refDetail3';
  9. pTenantId ALIAS FOR $1;
  10. pOuId ALIAS FOR $2;
  11. pUserId ALIAS FOR $3;
  12. pDatetime ALIAS FOR $4;
  13. pSessionId ALIAS FOR $5;
  14. pFlgDueDateAr ALIAS FOR $6; -- new due date AR : N , original due date AR : O
  15.  
  16. vFlagYes character varying(1);
  17. vFlagNo character varying(1);
  18. vResult numeric;
  19. vEmptyId numeric;
  20. vCurrIdr character varying(3);
  21. vCurrUsd character varying(3);
  22. vAmount numeric;
  23. vTax numeric;
  24. BEGIN
  25. vFlagNo := 'N';
  26. vFlagYes := 'Y';
  27. vCurrIdr := 'IDR';
  28. vCurrUsd := 'USD';
  29. vAmount := 0;
  30. vTax := 0;
  31. vResult := 0;
  32. vEmptyId := -99;
  33.  
  34. /**
  35. *1. Ambil cash position idr & usd, letakkan di current, simpan di tt_report_cash_projection
  36. *2. Jumlahkan di total cash
  37. *3. Ambil data untuk projected cash in : Outstanding AR, Accr AR, outstanding Cash Bank In
  38. *4. Ambil data untuk projected cash out : Outstanding AP, Accr AP, outstanding Payment Order AP,
  39. * outstanding Payment Order Cash Bank
  40. **/
  41.  
  42.  
  43.  
  44. -- 1. Ambil cash position idr & usd, letakkan di current, simpan di tt_report_cash_projection
  45. -- cash position idr
  46. INSERT INTO tt_report_cash_projection(session_id, projected_transaction_type, projected_transaction_name,
  47. overdue_idr, overdue_usd, current_idr, current_usd, not_yet_due_idr, not_yet_due_usd, total_idr, total_usd)
  48. SELECT pSessionId AS session_id, 'Cash Position' AS projected_transaction_type,
  49. A.cashbank_name AS projected_transaction_name,
  50. 0 AS overdue_idr,
  51. 0 AS overdue_usd,
  52. f_get_cashbank_balance(A.cashbank_id, pDatetime) AS current_idr,
  53. 0 AS current_usd,
  54. 0 AS not_yet_due_idr,
  55. 0 AS not_yet_due_usd,
  56. 0 AS total_idr,
  57. 0 AS total_usd
  58. FROM m_cashbank A
  59. INNER JOIN m_cashbank_ou B ON A.cashbank_id = B.cashbank_id
  60. WHERE A.curr_code = vCurrIdr
  61. AND B.ou_id = pOuId;
  62.  
  63. -- cash position usd
  64. INSERT INTO tt_report_cash_projection(session_id, projected_transaction_type, projected_transaction_name,
  65. overdue_idr, overdue_usd, current_idr, current_usd, not_yet_due_idr, not_yet_due_usd, total_idr, total_usd)
  66. SELECT pSessionId AS session_id, 'Cash Position' AS projected_transaction_type,
  67. A.cashbank_name AS projected_transaction_name,
  68. 0 AS overdue_idr,
  69. 0 AS overdue_usd,
  70. 0 AS current_idr,
  71. f_get_cashbank_balance(A.cashbank_id, pDatetime) AS current_usd,
  72. 0 AS not_yet_due_idr,
  73. 0 AS not_yet_due_usd,
  74. 0 AS total_idr,
  75. 0 AS total_usd
  76. FROM m_cashbank A
  77. INNER JOIN m_cashbank_ou B ON A.cashbank_id = B.cashbank_id
  78. WHERE A.curr_code = vCurrUsd
  79. AND B.ou_id = pOuId;
  80.  
  81. --3. Ambil data untuk projected cash in : Outstanding AR, Accr AR
  82. --Outstanding AR
  83. INSERT INTO tt_report_cash_projection(session_id, projected_transaction_type, projected_transaction_name,
  84. overdue_idr, overdue_usd, current_idr, current_usd, not_yet_due_idr, not_yet_due_usd, total_idr, total_usd)
  85. SELECT pSessionId AS session_id, 'Projected Cash In' AS projected_transaction_type,
  86. 'Outstanding AR' AS projected_transaction_name,
  87. f_get_overdue_outstanding_ar_amount(pDatetime, vCurrIdr, pOuId, pFlgDueDateAr) AS overdue_idr,
  88. f_get_overdue_outstanding_ar_amount(pDatetime, vCurrUsd, pOuId, pFlgDueDateAr) AS overdue_usd,
  89. f_get_current_due_outstanding_ar_amount(pDatetime, vCurrIdr, pOuId, pFlgDueDateAr) AS current_idr,
  90. f_get_current_due_outstanding_ar_amount(pDatetime, vCurrUsd, pOuId, pFlgDueDateAr) AS current_usd,
  91. f_get_not_yet_due_outstanding_ar_amount(pDatetime, vCurrIdr, pOuId, pFlgDueDateAr) AS not_yet_due_idr,
  92. f_get_not_yet_due_outstanding_ar_amount(pDatetime, vCurrUsd, pOuId, pFlgDueDateAr) AS not_yet_due_usd,
  93. 0 AS total_idr,
  94. 0 AS total_usd;
  95.  
  96. --Accr AR
  97. INSERT INTO tt_report_cash_projection(session_id, projected_transaction_type, projected_transaction_name,
  98. overdue_idr, overdue_usd, current_idr, current_usd, not_yet_due_idr, not_yet_due_usd, total_idr, total_usd)
  99. SELECT pSessionId AS session_id, 'Projected Cash In' AS projected_transaction_type,
  100. 'Accr AR' AS projected_transaction_name,
  101. 0 AS overdue_idr,
  102. 0 AS overdue_usd,
  103. 0 AS current_idr,
  104. 0 AS current_usd,
  105. f_get_not_yet_due_accr_ar_amount(pDatetime, vCurrIdr, pOuId) AS not_yet_due_idr,
  106. f_get_not_yet_due_accr_ar_amount(pDatetime, vCurrUsd, pOuId) AS not_yet_due_usd,
  107. 0 AS total_idr,
  108. 0 AS total_usd;
  109.  
  110. --Accr POS Shop in Shop
  111. INSERT INTO tt_report_cash_projection(session_id, projected_transaction_type, projected_transaction_name,
  112. overdue_idr, overdue_usd, current_idr, current_usd, not_yet_due_idr, not_yet_due_usd, total_idr, total_usd)
  113. SELECT pSessionId AS session_id, 'Projected Cash In' AS projected_transaction_type,
  114. 'Accr POS Shop in Shop' AS projected_transaction_name,
  115. 0 AS overdue_idr,
  116. 0 AS overdue_usd,
  117. 0 AS current_idr,
  118. 0 AS current_usd,
  119. f_get_not_yet_due_accr_pos_shop_in_shop_amount(pDatetime, vCurrIdr, pOuId) AS not_yet_due_idr,
  120. f_get_not_yet_due_accr_pos_shop_in_shop_amount(pDatetime, vCurrUsd, pOuId) AS not_yet_due_usd,
  121. 0 AS total_idr,
  122. 0 AS total_usd;
  123.  
  124.  
  125. --outstanding CBI
  126. INSERT INTO tt_report_cash_projection(session_id, projected_transaction_type, projected_transaction_name,
  127. overdue_idr, overdue_usd, current_idr, current_usd, not_yet_due_idr, not_yet_due_usd, total_idr, total_usd)
  128. SELECT pSessionId AS session_id, 'Projected Cash In' AS projected_transaction_type,
  129. 'Outstanding Cash Bank In' AS projected_transaction_name,
  130. f_get_overdue_outstanding_cash_bank_in_amount(pDatetime, vCurrIdr, pOuId) *(-1),
  131. f_get_overdue_outstanding_cash_bank_in_amount(pDatetime, vCurrUsd, pOuId) *(-1),
  132. f_get_current_due_outstanding_cash_bank_in_amount(pDatetime, vCurrIdr, pOuId) *(-1),
  133. f_get_current_due_outstanding_cash_bank_in_amount(pDatetime, vCurrUsd, pOuId) *(-1),
  134. f_get_not_yet_due_outstanding_cash_bank_in_amount(pDatetime, vCurrIdr, pOuId) *(-1),
  135. f_get_not_yet_due_outstanding_cash_bank_in_amount(pDatetime, vCurrUsd, pOuId) *(-1),
  136. 0,
  137. 0;
  138.  
  139. --
  140. --4. Ambil data untuk projected cash out : Outstanding AP, Accr AP, outstanding Payment Order AP,
  141. --Outstanding AP
  142. INSERT INTO tt_report_cash_projection(session_id, projected_transaction_type, projected_transaction_name,
  143. overdue_idr, overdue_usd, current_idr, current_usd, not_yet_due_idr, not_yet_due_usd, total_idr, total_usd)
  144. SELECT pSessionId AS session_id, 'Projected Cash Out' AS projected_transaction_type,
  145. 'Outstanding AP' AS projected_transaction_name,
  146. f_get_overdue_outstanding_ap_amount(pDatetime, vCurrIdr, pOuId) AS overdue_idr,
  147. f_get_overdue_outstanding_ap_amount(pDatetime, vCurrUsd, pOuId) AS overdue_usd,
  148. f_get_current_due_outstanding_ap_amount(pDatetime, vCurrIdr, pOuId) AS current_idr,
  149. f_get_current_due_outstanding_ap_amount(pDatetime, vCurrUsd, pOuId) AS current_usd,
  150. f_get_not_yet_due_outstanding_ap_amount(pDatetime, vCurrIdr, pOuId) AS not_yet_due_idr,
  151. f_get_not_yet_due_outstanding_ap_amount(pDatetime, vCurrUsd, pOuId) AS not_yet_due_usd,
  152. 0 AS total_idr,
  153. 0 AS total_usd;
  154.  
  155. --Accr AP
  156. INSERT INTO tt_report_cash_projection(session_id, projected_transaction_type, projected_transaction_name,
  157. overdue_idr, overdue_usd, current_idr, current_usd, not_yet_due_idr, not_yet_due_usd, total_idr, total_usd)
  158. SELECT pSessionId AS session_id, 'Projected Cash Out' AS projected_transaction_type,
  159. 'Accr AP' AS projected_transaction_name,
  160. 0 AS overdue_idr,
  161. 0 AS overdue_usd,
  162. 0 AS current_idr,
  163. 0 AS current_usd,
  164. f_get_not_yet_due_accr_ap_amount(pDatetime, vCurrIdr, pOuId) AS not_yet_due_idr,
  165. f_get_not_yet_due_accr_ap_amount(pDatetime, vCurrUsd, pOuId) AS not_yet_due_usd,
  166. 0 AS total_idr,
  167. 0 AS total_usd;
  168.  
  169. --outstanding payment order AP
  170. INSERT INTO tt_report_cash_projection(session_id, projected_transaction_type, projected_transaction_name,
  171. overdue_idr, overdue_usd, current_idr, current_usd, not_yet_due_idr, not_yet_due_usd, total_idr, total_usd)
  172. SELECT pSessionId AS session_id, 'Projected Cash Out' AS projected_transaction_type,
  173. 'Outstanding Payment Order AP' AS projected_transaction_name,
  174. f_get_overdue_outstanding_payment_order_ap_amount(pDatetime, vCurrIdr, pOuId),
  175. f_get_overdue_outstanding_payment_order_ap_amount(pDatetime, vCurrUsd, pOuId),
  176. f_get_current_due_outstanding_payment_order_ap_amount(pDatetime, vCurrIdr, pOuId),
  177. f_get_current_due_outstanding_payment_order_ap_amount(pDatetime, vCurrUsd, pOuId),
  178. f_get_not_yet_due_outstanding_payment_order_ap_amount(pDatetime, vCurrIdr, pOuId),
  179. f_get_not_yet_due_outstanding_payment_order_ap_amount(pDatetime, vCurrUsd, pOuId),
  180. 0 AS total_idr,
  181. 0 AS total_usd;
  182.  
  183. --outstanding payment order cashbank
  184. INSERT INTO tt_report_cash_projection(session_id, projected_transaction_type, projected_transaction_name,
  185. overdue_idr, overdue_usd, current_idr, current_usd, not_yet_due_idr, not_yet_due_usd, total_idr, total_usd)
  186. SELECT pSessionId AS session_id, 'Projected Cash Out' AS projected_transaction_type,
  187. 'Outstanding Payment Order Cash/Bank' AS projected_transaction_name,
  188. f_get_overdue_outstanding_payment_order_cashbank_amount(pDatetime, vCurrIdr, pOuId),
  189. f_get_overdue_outstanding_payment_order_cashbank_amount(pDatetime, vCurrUsd, pOuId),
  190. f_get_current_due_outstanding_payment_order_cashbank_amount(pDatetime, vCurrIdr, pOuId),
  191. f_get_current_due_outstanding_payment_order_cashbank_amount(pDatetime, vCurrUsd, pOuId),
  192. f_get_not_yet_due_outstanding_payment_order_cashbank_amount(pDatetime, vCurrIdr, pOuId),
  193. f_get_not_yet_due_outstanding_payment_order_cashbank_amount(pDatetime, vCurrUsd, pOuId),
  194. 0 AS total_idr,
  195. 0 AS total_usd;
  196.  
  197. --2. Jumlahkan di total cash
  198. UPDATE tt_report_cash_projection SET total_idr = overdue_idr + current_idr + not_yet_due_idr;
  199. UPDATE tt_report_cash_projection SET total_usd = overdue_usd + current_usd + not_yet_due_usd;
  200.  
  201. Open pRefHeader FOR
  202. SELECT f_get_ou_name(pOuId) AS ou_name,
  203. f_get_username(pUserId) AS username,
  204. pDatetime AS datetime;
  205. RETURN NEXT pRefHeader;
  206.  
  207.  
  208. Open pRefDetail FOR
  209. SELECT session_id, projected_transaction_type, projected_transaction_name, overdue_idr,
  210. overdue_usd, current_idr, current_usd, not_yet_due_idr, not_yet_due_usd, total_idr, total_usd
  211. FROM tt_report_cash_projection WHERE projected_transaction_type = 'Cash Position'
  212. AND session_id = pSessionId;
  213. RETURN NEXT pRefDetail ;
  214.  
  215. Open pRefDetail2 FOR
  216. SELECT session_id, projected_transaction_type, projected_transaction_name, overdue_idr,
  217. overdue_usd, current_idr, current_usd, not_yet_due_idr, not_yet_due_usd, total_idr, total_usd
  218. FROM tt_report_cash_projection WHERE projected_transaction_type = 'Projected Cash In'
  219. AND session_id = pSessionId;
  220. RETURN NEXT pRefDetail2 ;
  221.  
  222. Open pRefDetail3 FOR
  223. SELECT session_id, projected_transaction_type, projected_transaction_name, overdue_idr,
  224. overdue_usd, current_idr, current_usd, not_yet_due_idr, not_yet_due_usd, total_idr, total_usd
  225. FROM tt_report_cash_projection WHERE projected_transaction_type = 'Projected Cash Out'
  226. AND session_id = pSessionId;
  227. RETURN NEXT pRefDetail3 ;
  228.  
  229. --kosongkan temp table tt_report_cash_projection
  230. DELETE FROM tt_report_cash_projection WHERE session_id = pSessionId;
  231.  
  232. END;
  233. $BODY$
  234. LANGUAGE plpgsql VOLATILE
  235. COST 100
  236. ROWS 1000;
  237. /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement