Advertisement
aadddrr

BACKUP REPORT MONTHLY OMZET BY CUSTOMER

Mar 29th, 2017
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.67 KB | None | 0 0
  1. CREATE OR REPLACE FUNCTION r_monthly_omzet_by_customer(character varying, bigint, character varying, bigint, bigint, character varying, character varying, bigint, character varying)
  2. RETURNS SETOF refcursor AS
  3. $BODY$
  4. DECLARE
  5. pRefHeader REFCURSOR := 'refHeader';
  6. pRefDetail REFCURSOR := 'refDetail';
  7. pSessionId ALIAS FOR $1;
  8. pTenantId ALIAS FOR $2;
  9. pYearMonthDate ALIAS FOR $3;
  10. pUserId ALIAS FOR $4;
  11. pPartnerId ALIAS FOR $5;
  12. pTglAwal ALIAS FOR $6;
  13. pTglAkhir ALIAS FOR $7;
  14. pOuId ALIAS FOR $8;
  15. pDatetime ALIAS FOR $9;
  16.  
  17. vEmptyValue character varying(1);
  18. vAwalTahun character varying(6);
  19. vAkhirRekap character varying(6);
  20. vAllId bigint;
  21. vEmptyId bigint;
  22. vRoundingMode character varying(5);
  23. vValutaBuku character varying(5);
  24. BEGIN
  25.  
  26. vEmptyValue := '';
  27. vAllId := -99;
  28. vEmptyId := -99;
  29. vAwalTahun := SUBSTRING(pYearMonthDate, 1, 4) || '01';
  30. vValutaBuku := 'IDR';
  31.  
  32. SELECT f_get_value_system_config_by_param_code(pTenantId, 'rounding.mode.non.tax') INTO vRoundingMode;
  33.  
  34. SELECT f_get_value_system_config_by_param_code(pTenantId, 'ValutaBuku') INTO vValutaBuku;
  35.  
  36. IF SUBSTRING(pYearMonthDate, 5, 2) = '01' THEN
  37. vAkhirRekap := pYearMonthDate;
  38. ELSE
  39. vAkhirRekap := TO_CHAR(to_date(pYearMonthDate, 'YYYYMM') - interval '1 month', 'YYYYMM');
  40. END IF;
  41.  
  42. DELETE FROM tr_sales_gross_profit WHERE session_id = pSessionId;
  43. DELETE FROM tr_current_sales_gross_profit WHERE session_id = pSessionId;
  44. DELETE FROM tr_rekap_sales_gross_profit WHERE session_id = pSessionId;
  45. DELETE FROM tr_sales_gross_profit_for_output WHERE session_id = pSessionId;
  46.  
  47. /*
  48. * ambil semua so balance invoice di main business unit yang tidak di do receipt
  49. * jika transaksi itu ada item assembly ambil berdasarkan core product id nya
  50. * ambil juga harga beli terakhir dari item itu sesuai dengan tahun bulan
  51. * v341, kolom nett_amount_item dan nett_sell_price sudah tidak nett lagi karena sudah ditambahkan tax
  52. */
  53. INSERT INTO tr_sales_gross_profit(
  54. session_id, tenant_id, ou_id, year_month_date, partner_id, partner_code, partner_name,
  55. doc_type_id, doc_no, doc_date,
  56. product_id, curr_code, qty, nett_sell_price,
  57. nett_amount_item,
  58. monthly_price_curr_code, monthly_price_amount
  59. )
  60. SELECT pSessionId, A.tenant_id, E.ou_bu_id, SUBSTRING(A.ref_doc_date, 1, 6), A.partner_id, f_get_partner_code(A.partner_id), f_get_partner_name(A.partner_id),
  61. A.ref_doc_type_id, A.ref_doc_no, A.ref_doc_date,
  62. B.product_id, A.curr_code, A.qty_dlv_so, (A.price_so + COALESCE(D.tax_price, 0)),
  63. SUM(A.item_amount + f_get_so_balance_invoice_tax_amount_by_unique(A.tenant_id, A.ou_id, A.partner_id, A.ref_doc_type_id, A.ref_id, A.ref_item_id, A.do_receipt_item_id)),
  64. '', 0
  65. FROM sl_so_balance_invoice A
  66. INNER JOIN sl_do_item B ON A.ref_item_id = B.do_item_id
  67. INNER JOIN sl_do C ON A.ref_doc_type_id = C.doc_type_id AND C.do_id = A.ref_id AND C.do_id = B.do_id
  68. INNER JOIN sl_so_item D ON B.ref_id = D.so_item_id
  69. INNER JOIN m_ou_structure E ON A.ou_id = E.ou_id
  70. WHERE A.tenant_id = pTenantId
  71. AND SUBSTRING(A.ref_doc_date, 1, 6) BETWEEN vAwalTahun AND pYearMonthDate
  72. AND E.ou_bu_id = pOuId
  73. GROUP BY A.tenant_id, E.ou_bu_id, A.ref_doc_date, A.partner_id, A.ref_doc_type_id, A.ref_doc_no, B.product_id,
  74. A.curr_code, A.qty_dlv_so, A.price_so, D.tax_price;
  75.  
  76. ANALYZE tr_sales_gross_profit;
  77.  
  78. /* v329 data yang diambil dari pu_monthly_price_product diubah
  79. * menjadi ambil dari table
  80. * tt_out_latest_purchasing_price_by_date menggunakan
  81. * pu_get_latest_purchasing_price_by_date yang sebelumnya datanya dimasukkan ke
  82. * tt_in_latest_purchasing_price_by_date */
  83.  
  84. INSERT INTO tt_in_latest_purchasing_price_by_date(session_id, tenant_id, ou_bu_id, doc_date, product_id)
  85. SELECT pSessionId, pTenantId, B.ou_bu_id, A.doc_date, A.product_id
  86. FROM tr_sales_gross_profit A
  87. INNER JOIN m_ou_structure B ON A.ou_id = B.ou_id
  88. WHERE A.tenant_id = pTenantId
  89. AND A.session_id = pSessionId
  90. GROUP BY B.ou_bu_id, A.doc_date, A.product_id;
  91.  
  92. PERFORM pu_get_latest_purchasing_price_by_date(pSessionId, pTenantId, pYearMonthDate, pOuId, pDatetime, pUserId);
  93.  
  94. /*sebelum v329
  95. UPDATE tr_sales_gross_profit
  96. --SET monthly_price_curr_code = A.curr_code, monthly_price_amount = ROUND(A.amount / A.qty)
  97. SET monthly_price_curr_code = COALESCE(A.curr_code, tr_sales_gross_profit.curr_code), monthly_price_amount = COALESCE(f_get_gross_price_from_nett_amount(A.amount, A.qty, A.flg_tax_amount, A.tax_percentage, vRoundingMode, f_get_digit_decimal_doc_curr(-99, A.curr_code)), 0)
  98. FROM pu_monthly_price_product A
  99. WHERE tr_sales_gross_profit.session_id = pSessionId
  100. AND tr_sales_gross_profit.product_id = A.product_id
  101. AND tr_sales_gross_profit.year_month_date = A.year_month_date
  102. AND tr_sales_gross_profit.ou_id = A.ou_id;*/
  103.  
  104. ANALYZE tt_out_latest_purchasing_price_by_date;
  105.  
  106. UPDATE tr_sales_gross_profit B
  107. --SET monthly_price_curr_code = A.curr_code, monthly_price_amount = ROUND(A.amount / A.qty)
  108. SET monthly_price_curr_code = COALESCE(A.gl_purch_curr_code, B.curr_code), monthly_price_amount = COALESCE(A.gl_purch_gross_price, 0)
  109. FROM tt_out_latest_purchasing_price_by_date A
  110. INNER JOIN m_ou_structure C ON C.ou_bu_id = A.ou_bu_id
  111. WHERE B.session_id = A.session_id
  112. AND B.tenant_id = A.tenant_id
  113. AND B.product_id = A.product_id
  114. AND B.doc_date = A.doc_date
  115. AND C.ou_id = B.ou_id;
  116.  
  117. ANALYZE tr_sales_gross_profit;
  118.  
  119. /*
  120. * update nilai harga beli terakhir menggunakan valuta penjualan (gunakan kurs komersial)
  121.  
  122. UPDATE tr_sales_gross_profit SET monthly_price_amount = monthly_price_amount * f_commercial_rate(tenant_id, doc_date, monthly_price_curr_code, vValutaBuku), monthly_price_curr_code = vValutaBuku
  123. WHERE monthly_price_curr_code <> vValutaBuku
  124. AND session_id = pSessionId AND monthly_price_curr_code <> ''; */
  125.  
  126. UPDATE tr_sales_gross_profit SET nett_amount_item = nett_amount_item * f_commercial_rate(tenant_id, doc_date, curr_code, vValutaBuku), curr_code = vValutaBuku
  127. WHERE curr_code <> vValutaBuku
  128. AND session_id = pSessionId AND curr_code <> '';
  129.  
  130. /*
  131. * pindahkan data tahun bulan yang diminta (sudah direkap per partner)
  132. */
  133. INSERT INTO tr_current_sales_gross_profit (
  134. session_id, tenant_id, ou_id, partner_id, partner_code, partner_name, curr_code,
  135. current_sales_amount, current_monthly_price_amount
  136. )
  137. SELECT pSessionId, tenant_id, ou_id, partner_id, partner_code, partner_name, curr_code,
  138. SUM(nett_amount_item) AS current_sales_amount, SUM(monthly_price_amount * qty) AS current_monthly_price_amount
  139. FROM tr_sales_gross_profit
  140. WHERE session_id = pSessionId
  141. AND year_month_date = pYearMonthDate
  142. AND doc_date BETWEEN pTglAwal AND pTglAkhir
  143. GROUP BY tenant_id, ou_id, partner_id, partner_code, partner_name, curr_code;
  144.  
  145. ANALYZE tr_current_sales_gross_profit;
  146.  
  147. /*
  148. * pindahkan data sebelum tahun bulan yang diminta (sudah direkap per partner)
  149. */
  150. INSERT INTO tr_rekap_sales_gross_profit (
  151. session_id, tenant_id, ou_id, partner_id, partner_code, partner_name, curr_code,
  152. rekap_sales_amount, rekap_monthly_price_amount
  153. )
  154. SELECT pSessionId, tenant_id, ou_id, partner_id, partner_code, partner_name, curr_code,
  155. SUM(nett_amount_item) AS rekap_sales_amount, SUM(monthly_price_amount * qty) AS rekap_monthly_price_amount
  156. FROM tr_sales_gross_profit
  157. WHERE session_id = pSessionId
  158. AND year_month_date <> pYearMonthDate
  159. GROUP BY tenant_id, ou_id, partner_id, partner_code, partner_name, curr_code;
  160.  
  161. ANALYZE tr_current_sales_gross_profit;
  162.  
  163. ANALYZE tr_rekap_sales_gross_profit;
  164.  
  165. ANALYZE tr_current_sales_gross_profit;
  166.  
  167. INSERT INTO tr_sales_gross_profit_for_output
  168. (session_id, tenant_id, ou_id, partner_id, partner_code, partner_name,
  169. curr_code,
  170. current_sales_amount,
  171. rekap_sales_amount)
  172. SELECT pSessionId, A.tenant_id, ou_id, A.partner_id, f_get_partner_code(A.partner_id), f_get_partner_name(A.partner_id),
  173. A.curr_code,
  174. A.current_sales_amount,
  175. 0
  176. FROM tr_current_sales_gross_profit A
  177. WHERE A.session_id = pSessionId;
  178.  
  179. ANALYZE tr_rekap_sales_gross_profit;
  180.  
  181. UPDATE tr_sales_gross_profit_for_output
  182. SET rekap_sales_amount = A.rekap_sales_amount
  183. FROM tr_rekap_sales_gross_profit A
  184. WHERE A.session_id = pSessionId AND tr_sales_gross_profit_for_output.partner_id = A.partner_id;
  185.  
  186. ANALYZE tr_rekap_sales_gross_profit;
  187.  
  188. INSERT INTO tr_sales_gross_profit_for_output
  189. (session_id, tenant_id, ou_id, partner_id, partner_code, partner_name,
  190. curr_code,
  191. current_sales_amount,
  192. rekap_sales_amount)
  193. SELECT pSessionId, A.tenant_id, A.ou_id, A.partner_id, f_get_partner_code(A.partner_id), f_get_partner_name(A.partner_id),
  194. A.curr_code,
  195. 0,
  196. A.rekap_sales_amount
  197. FROM tr_rekap_sales_gross_profit A
  198. WHERE A.session_id = pSessionId
  199. AND A.partner_id NOT IN ( SELECT B.partner_id FROM tr_sales_gross_profit_for_output B WHERE B.session_id = pSessionId );
  200.  
  201. ANALYZE tr_sales_gross_profit_for_output;
  202.  
  203. /*
  204. * return header
  205. */
  206. Open pRefHeader FOR
  207. SELECT A.fullname AS username, B.ou_name AS ou_name, pYearMonthDate AS current_month_year, vAwalTahun AS start_month_year, vAkhirRekap AS end_month_year,
  208. vValutaBuku AS valuta_buku, pDatetime AS datetime
  209. FROM t_user A
  210. INNER JOIN t_ou B ON A.tenant_id = B.tenant_id
  211. WHERE user_id = pUserId
  212. AND ou_id = pOuId;
  213.  
  214. RETURN NEXT pRefHeader;
  215.  
  216. IF (pPartnerId <> vEmptyId) THEN
  217. Open pRefDetail FOR
  218. SELECT A.partner_id AS partner_id, A.partner_code AS partner_code, A.partner_name AS partner_name,
  219. A.curr_code AS curr_code,
  220. A.current_sales_amount AS current_sales,
  221. A.rekap_sales_amount AS before_sales
  222. FROM tr_sales_gross_profit_for_output A
  223. WHERE A.session_id = pSessionId
  224. AND A.partner_id = pPartnerId
  225. ORDER BY curr_code, partner_name;
  226. ELSE
  227. Open pRefDetail FOR
  228. SELECT A.partner_id AS partner_id, A.partner_code AS partner_code, A.partner_name AS partner_name,
  229. A.curr_code AS curr_code,
  230. A.current_sales_amount AS current_sales,
  231. A.rekap_sales_amount AS before_sales
  232. FROM tr_sales_gross_profit_for_output A
  233. WHERE A.session_id = pSessionId
  234. ORDER BY curr_code, partner_name;
  235. END IF;
  236.  
  237. RETURN NEXT pRefDetail;
  238.  
  239. DELETE FROM tr_sales_gross_profit WHERE session_id = pSessionId;
  240. DELETE FROM tr_current_sales_gross_profit WHERE session_id = pSessionId;
  241. DELETE FROM tr_rekap_sales_gross_profit WHERE session_id = pSessionId;
  242. DELETE FROM tr_sales_gross_profit_for_output WHERE session_id = pSessionId;
  243. DELETE FROM tt_in_latest_purchasing_price_by_date WHERE session_id = pSessionId;
  244. DELETE FROM tt_out_latest_purchasing_price_by_date WHERE session_id = pSessionId;
  245.  
  246. END;
  247. $BODY$
  248. LANGUAGE plpgsql VOLATILE
  249. COST 100
  250. ROWS 1000;
  251. /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement