Advertisement
aadddrr

r_limit_detail_mou_for_salesman_csv 20180316

Mar 16th, 2018
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 32.03 KB | None | 0 0
  1. --Adrian, Mar 8, 2018
  2. --! Jika terjadi perubahan, sesuaikan juga r_limit_detail_mou !
  3.  
  4. CREATE OR REPLACE FUNCTION r_limit_detail_mou_for_salesman_csv(character varying, bigint, bigint, bigint, character varying, bigint, bigint, character varying, character varying)
  5. RETURNS SETOF refcursor AS
  6. $BODY$
  7. DECLARE
  8. pRefHeader REFCURSOR := 'refHeader';
  9. pRefDetail REFCURSOR := 'refDetail';
  10. pRefDetailGrandTotal REFCURSOR := 'refDetailGrandTotal';
  11. pSessionId ALIAS FOR $1;
  12. pTenantId ALIAS FOR $2;
  13. pUserId ALIAS FOR $3;
  14. pRoleId ALIAS FOR $4;
  15. pDatetime ALIAS FOR $5;
  16.  
  17. pOuId ALIAS FOR $6;
  18. pPartnerId ALIAS FOR $7;
  19. pPeriodFrom ALIAS FOR $8;
  20. pPeriodTo ALIAS FOR $9;
  21.  
  22. vPartnerCodeMou character varying(50);
  23. vPartnerNameMou character varying(100);
  24. vDocTypeIdSOByBrand bigint;
  25. vStatusReleased character varying(1);
  26. vStatusFinal character varying(1);
  27. vStatusInProgress character varying(1);
  28. vStatusDraft character varying(1);
  29. vTagKeyMOU character varying(10);
  30. vDocTypeIdReturnNote bigint;
  31. vDocTypeIdSalesInvoice bigint;
  32. vDocTypeIdInvoiceTemp bigint;
  33. vDocTypeIdConversionOfExchangeIn bigint;
  34. vDocTypeIdConversionOfExchangeOut bigint;
  35. vDocTypeIdRRS bigint;
  36. vStatusMapping character varying(1);
  37. vStatusApproved character varying(1);
  38. vRaw character varying(20);
  39. vSummary character varying(20);
  40. vEmptyId bigint;
  41. vOne integer := 1;
  42. vEmptyValue character varying;
  43. vParamCodeInsentif character varying := 'INCENTIVE';
  44. vActivityGLCodeInsentif character varying;
  45. vActivityGLInsentif bigint;
  46.  
  47. vFlagYes character varying(1) :='Y';
  48.  
  49. vDocNoMou character varying(50);
  50. i bigint;
  51. vSeparator character varying(1);
  52.  
  53. BEGIN
  54.  
  55. vPartnerCodeMou := ' ';
  56. vPartnerNameMou := ' ';
  57. vDocTypeIdSOByBrand := 398;
  58. vStatusReleased := 'R';
  59. vStatusFinal := 'F';
  60. vStatusInProgress := 'I';
  61. vStatusDraft := 'D';
  62. vTagKeyMOU := 'MOU';
  63. vDocTypeIdReturnNote := 502;
  64. vDocTypeIdSalesInvoice := 321;
  65. vDocTypeIdInvoiceTemp := 361;
  66. vDocTypeIdConversionOfExchangeIn := 394;
  67. vDocTypeIdConversionOfExchangeOut := 395;
  68. vDocTypeIdRRS :=381;
  69. vStatusMapping := 'M';
  70. vStatusApproved := 'A';
  71. vRaw := 'RAW';
  72. vSummary := 'SUMMARY';
  73. vEmptyId := -99;
  74. vEmptyValue := '';
  75. vDocNoMou := '';
  76. i := 1;
  77. vSeparator := ';';
  78.  
  79. SELECT partner_code INTO vPartnerCodeMou
  80. FROM m_partner
  81. WHERE partner_id = pPartnerId;
  82.  
  83. SELECT partner_name INTO vPartnerNameMou
  84. FROM m_partner
  85. WHERE partner_id = pPartnerId;
  86.  
  87. -- Get data-data activity gl code incentive dari system config value
  88. SELECT TRIM(REPLACE(f_get_value_system_config_by_param_code(pTenantId, vParamCodeInsentif), ';', ''',''')) INTO vActivityGLCodeInsentif;
  89.  
  90. /*
  91. --get data activity gl insentif
  92. SELECT B.parameter_value INTO vActivityGLCodeInsentif
  93. FROM t_parameter A
  94. INNER JOIN t_system_config B ON A.parameter_id = B.parameter_id
  95. WHERE A.parameter_code = vParamCodeInsentif
  96. AND B.tenant_id = pTenantId;
  97.  
  98. --get activity gl
  99. SELECT activity_gl_id INTO vActivityGLInsentif
  100. FROM m_activity_gl
  101. WHERE tenant_id = pTenantId
  102. AND activity_gl_code = vActivityGLCodeInsentif;
  103. */
  104.  
  105. --Menghapus semua table temporrer untuk mulai insert data baru
  106. DELETE FROM tt_sl_r_limit_detail_mou_list WHERE session_id = pSessionId;
  107. DELETE FROM tt_sl_mou_list WHERE session_id = pSessionId;
  108. DELETE FROM tt_sl_so WHERE session_id = pSessionId;
  109. DELETE FROM tt_sl_outstanding_so WHERE session_id = pSessionId;
  110. DELETE FROM tt_sl_r_limit_detail_mou_list_for_csv_detail WHERE session_id = pSessionId;
  111.  
  112. -- Mengambil data MOU sesuai dengan filter nya
  113. INSERT INTO tt_sl_mou_list(
  114. session_id ,mou_id,tenant_id ,ou_id ,doc_type_id ,doc_date,doc_no,period_from ,period_to ,partner_id ,
  115. curr_code ,plafon_amount ,status_doc ,workflow_status)
  116. SELECT pSessionId ,mou_id,tenant_id ,ou_id ,doc_type_id ,doc_date,doc_no,period_from ,period_to ,partner_id ,
  117. curr_code ,plafon_amount ,status_doc ,workflow_status
  118. FROM sl_mou
  119. WHERE tenant_id = pTenantId
  120. AND ou_id = pOuId
  121. AND partner_id = pPartnerId
  122. AND period_from BETWEEN pPeriodFrom AND pPeriodTo
  123. AND status_doc IN (vStatusReleased,vStatusFinal)
  124. AND f_authorize_user_role_policy_ou(pTenantId, pUserId, pRoleId, ou_id) = vOne
  125. AND f_authorize_user_role_policy_partner(pTenantId, pUserId, pRoleId, partner_id) = vOne;
  126.  
  127. -- Mengambil semua data SO By Brand yang tagging ke mou (semua status doc)
  128. INSERT INTO tt_sl_so(
  129. session_id ,so_id,tenant_id ,ou_id ,doc_type_id ,doc_date ,doc_no ,partner_id , mou_id, curr_code ,
  130. amount, amount_tax, status_doc ,workflow_status)
  131. SELECT pSessionId ,A.so_id,A.tenant_id ,A.ou_id ,A.doc_type_id ,A.doc_date,A.doc_no,A.partner_id ,C.mou_id, A.curr_code ,
  132. SUM(D.nett_brand_amount) AS amount, SUM(D.qty*D.tax_price) AS amount_tax ,A.status_doc ,A.workflow_status
  133. FROM sl_so A
  134. INNER JOIN sl_so_info B ON A.so_id = B.so_id
  135. INNER JOIN tt_sl_mou_list C ON B.mou_id = C.mou_id AND C.session_id = pSessionId
  136. INNER JOIN sl_so_brand_item D ON A.so_id = D.so_id
  137. WHERE A.tenant_id = pTenantId
  138. AND A.ou_id = pOuId
  139. AND A.doc_type_id = vDocTypeIdSOByBrand
  140. AND A.doc_date BETWEEN pPeriodFrom AND pPeriodTo
  141. AND f_authorize_user_role_policy_ou(pTenantId, pUserId, pRoleId, A.ou_id) = vOne
  142. AND f_authorize_user_role_policy_partner(pTenantId, pUserId, pRoleId, A.partner_id) = vOne
  143. AND NOT EXISTS (
  144. SELECT 1 FROM sl_so_balance_invoice Z
  145. WHERE Z.so_id = A.so_id
  146. GROUP BY Z.so_id
  147. HAVING SUM(Z.qty_dlv_so) <= 0
  148. )
  149. GROUP BY A.so_id,A.tenant_id ,A.ou_id ,A.doc_type_id ,A.doc_date,A.doc_no,A.partner_id ,C.mou_id,A.curr_code ,
  150. A.status_doc ,A.workflow_status;
  151.  
  152. -- Insert data so by brand ke table tt_sl_outstanding_so yang mana sudah tagging mou dan disubmit , status doc nya (R/F)
  153. INSERT INTO tt_sl_outstanding_so(session_id ,data_id ,so_id ,amount_so ,amount_tax_so)
  154. SELECT pSessionId, vRaw, A.so_id, A.amount, A.amount_tax
  155. FROM tt_sl_so A
  156. INNER JOIN sl_so_tagging B ON A.so_id = B.so_id AND B.tag_key = vTagKeyMOU
  157. WHERE A.session_id = pSessionId
  158. AND A.status_doc IN (vStatusReleased,vStatusFinal);
  159.  
  160. -- Insert data invoice temp ke table tt_sl_outstanding_so yang ref_id (dokumen so by brand) tagging ke mou
  161. INSERT INTO tt_sl_outstanding_so(session_id ,data_id ,so_id,invoice_temp_id ,amount_inv_temp ,amount_tax_inv_temp)
  162. SELECT pSessionId, vRaw, B.ref_id,B.invoice_temp_id, B.total_amount, COALESCE(C.tax_amount,0)
  163. FROM tt_sl_outstanding_so A
  164. INNER JOIN sl_invoice_temp B ON A.so_id = B.ref_id
  165. LEFT JOIN sl_invoice_temp_tax C ON B.invoice_temp_id = C.invoice_temp_id
  166. WHERE A.session_id = pSessionId
  167. AND B.tenant_id = pTenantId
  168. AND B.ou_id = pOuId
  169. AND B.status_doc = vStatusReleased
  170. AND B.doc_type_id = vDocTypeIdInvoiceTemp
  171. AND NOT EXISTS (SELECT 1 FROM sl_invoice D
  172. WHERE D.doc_no = B.inv_doc_no
  173. AND D.ref_id = B.ref_id
  174. AND D.doc_type_id = vDocTypeIdSalesInvoice
  175. AND D.status_doc = vStatusReleased);
  176.  
  177. -- Insert data invoice ke table tt_sl_outstanding_so yang ref_id (dokumen so by brand) tagging ke mou
  178. INSERT INTO tt_sl_outstanding_so(session_id ,data_id ,so_id,invoice_id ,amount_inv, amount_tax_inv)
  179. SELECT pSessionId, vRaw, B.ref_id, B.invoice_id, B.total_amount, COALESCE(D.tax_amount,0)
  180. FROM tt_sl_outstanding_so A
  181. INNER JOIN sl_invoice B ON A.so_id = B.ref_id
  182. INNER JOIN sl_invoice_tagging C ON B.invoice_id = C.invoice_id AND C.tag_key = vTagKeyMOU
  183. LEFT JOIN sl_invoice_tax D ON B.invoice_id = D.invoice_id
  184. WHERE A.session_id = pSessionId
  185. AND A.invoice_temp_id = vEmptyId
  186. AND B.tenant_id = pTenantId
  187. AND B.ou_id = pOuId
  188. AND B.status_doc = vStatusReleased
  189. AND B.doc_type_id = vDocTypeIdSalesInvoice;
  190.  
  191. -- Insert ke table tt_sl_outstanding_so untuk menghitung summary (untuk mengetahui outstading amount nya so by brand)
  192. INSERT INTO tt_sl_outstanding_so(session_id ,data_id ,so_id,amount_so, amount_tax_so,
  193. amount_inv, amount_tax_inv, amount_inv_temp,
  194. amount_tax_inv_temp, final_so,
  195. final_tax_so)
  196. SELECT pSessionId, vSummary, so_id, SUM(amount_so) AS amount_so, SUM(amount_tax_so) AS amount_tax_so,
  197. SUM(amount_inv) AS amount_inv, SUM(amount_tax_inv) AS amount_tax_inv, SUM(amount_inv_temp) AS amount_inv_temp ,
  198. SUM(amount_tax_inv_temp) AS amount_tax_inv_temp ,(SUM(amount_so) - SUM(amount_inv) - SUM(amount_inv_temp)) AS final_so,
  199. (SUM(amount_tax_so) - SUM(amount_tax_inv) - SUM(amount_tax_inv_temp)) AS final_tax_so
  200. FROM tt_sl_outstanding_so
  201. WHERE session_id = pSessionId
  202. GROUP BY so_id;
  203.  
  204. /*
  205. Insert data Invoice yang di mapping(di tarik manual ,sebelum nya SO by brand belum di tagging ke mou)
  206. dan status doc invoice = R -> ke table tt_sl_r_limit_detail_mou_list
  207. */
  208. INSERT INTO tt_sl_r_limit_detail_mou_list(
  209. session_id, tenant_id,ou_id ,mou_id ,doc_date_mou,doc_no_mou,
  210. period_from ,period_to,partner_id_mou ,curr_code_mou ,plafon_amount ,
  211. doc_id,doc_type_id,doc_no,doc_date,partner_id,curr_code ,usage_amount ,
  212. status_doc ,workflow_status ,status_doc_mou,
  213. usage_amount_tax, total_usage_amount)
  214. SELECT pSessionId, A.tenant_id, A.ou_id, A.mou_id, A.doc_date AS doc_date_mou, A.doc_no AS doc_no_mou,
  215. A.period_from, A.period_to, A.partner_id AS partner_id_mou, A.curr_code AS curr_code_mou, A.plafon_amount,
  216. C.invoice_id AS doc_id, C.doc_type_id, C.doc_no, C.doc_date, C.partner_id, C.curr_code, C.total_amount AS usage_amount,
  217. vStatusMapping AS status_doc_invoice, C.workflow_status, A.status_doc AS status_doc_mou,
  218. COALESCE(D.tax_amount, 0) AS usage_amount_tax, (C.total_amount + COALESCE(D.tax_amount, 0)) AS total_usage_amount
  219. FROM tt_sl_mou_list A
  220. INNER JOIN sl_invoice_tagging B ON A.mou_id = B.tag_doc_id AND B.tag_key = vTagKeyMou
  221. INNER JOIN sl_invoice C ON B.invoice_id = C.invoice_id
  222. LEFT JOIN sl_invoice_tax D ON C.invoice_id = D.invoice_id
  223. WHERE A.session_id = pSessionId
  224. AND C.doc_type_id = vDocTypeIdSalesInvoice
  225. AND C.status_doc = vStatusReleased
  226. AND NOT EXISTS(SELECT 1 FROM tt_sl_so D WHERE D.session_id = pSessionId AND D.so_id = C.ref_id);
  227.  
  228. -- Insert data Invoice (SO By Brand nya sudah di tagging ke MOU) dan status doc invoice = R -> ke table tt_sl_r_limit_detail_mou_list
  229. INSERT INTO tt_sl_r_limit_detail_mou_list(
  230. session_id, tenant_id,ou_id ,mou_id ,doc_date_mou,doc_no_mou,
  231. period_from ,period_to,partner_id_mou ,curr_code_mou ,plafon_amount ,
  232. doc_id,doc_type_id,doc_no,doc_date,partner_id,curr_code ,usage_amount ,
  233. status_doc ,workflow_status ,status_doc_mou,
  234. usage_amount_tax, total_usage_amount)
  235. SELECT pSessionId, A.tenant_id, A.ou_id, A.mou_id, A.doc_date AS doc_date_mou, A.doc_no AS doc_no_mou,
  236. A.period_from, A.period_to, A.partner_id AS partner_id_mou, A.curr_code AS curr_code_mou, A.plafon_amount,
  237. C.invoice_id AS doc_id, C.doc_type_id, C.doc_no, C.doc_date, C.partner_id, C.curr_code, C.total_amount AS usage_amount,
  238. vStatusApproved AS status_doc_invoice ,C.workflow_status, A.status_doc AS status_doc_mou,
  239. COALESCE(D.tax_amount, 0) AS usage_amount_tax, (C.total_amount + COALESCE(D.tax_amount, 0)) AS total_usage_amount
  240. FROM tt_sl_mou_list A
  241. INNER JOIN sl_invoice_tagging B ON A.mou_id = B.tag_doc_id AND B.tag_key = vTagKeyMou
  242. INNER JOIN sl_invoice C ON B.invoice_id = C.invoice_id
  243. LEFT JOIN sl_invoice_tax D ON C.invoice_id = D.invoice_id
  244. WHERE A.session_id = pSessionId
  245. AND C.doc_type_id = vDocTypeIdSalesInvoice
  246. AND C.status_doc = vStatusReleased
  247. AND EXISTS(SELECT 1 FROM tt_sl_outstanding_so D
  248. WHERE D.session_id = pSessionId
  249. AND D.data_id = vRaw AND D.invoice_id = C.invoice_id AND D.so_id = C.ref_id);
  250.  
  251. /*
  252. Insert data Invoice temp (SO By Brand nya sudah di tagging ke MOU) dan status doc invoice temp = R
  253. dan belum di convert ke invoice beneran yang mana status doc invoice beneran nya = R ke table tt_sl_r_limit_detail_mou_list
  254. */
  255. INSERT INTO tt_sl_r_limit_detail_mou_list(
  256. session_id, tenant_id,ou_id ,mou_id ,doc_date_mou,doc_no_mou,
  257. period_from ,period_to,partner_id_mou ,curr_code_mou ,plafon_amount ,
  258. doc_id,doc_type_id,doc_no,doc_date,partner_id,curr_code ,usage_amount ,
  259. status_doc ,workflow_status ,status_doc_mou,
  260. usage_amount_tax, total_usage_amount)
  261. SELECT pSessionId, A.tenant_id, A.ou_id, A.mou_id, A.doc_date AS doc_date_mou, A.doc_no AS doc_no_mou,
  262. A.period_from, A.period_to, A.partner_id AS partner_id_mou, A.curr_code AS curr_code_mou, A.plafon_amount,
  263. D.invoice_temp_id AS doc_id, D.doc_type_id, D.doc_no, D.doc_date, D.partner_id, D.curr_code, D.total_amount AS usage_amount,
  264. D.status_doc AS status_doc_invoice_temp ,D.workflow_status, A.status_doc AS status_doc_mou,
  265. COALESCE(E.tax_amount, 0) AS usage_amount_tax, (D.total_amount + COALESCE(E.tax_amount, 0)) AS total_usage_amount
  266. FROM tt_sl_mou_list A
  267. INNER JOIN sl_so_tagging B ON A.mou_id = B.tag_doc_id AND B.tag_key = vTagKeyMou
  268. INNER JOIN tt_sl_outstanding_so C ON B.so_id = C.so_id AND C.data_id = vRaw
  269. INNER JOIN sl_invoice_temp D ON C.invoice_temp_id = D.invoice_temp_id
  270. LEFT JOIN sl_invoice_temp_tax E ON D.invoice_temp_id = E.invoice_temp_id
  271. WHERE A.session_id = pSessionId
  272. AND C.session_id = pSessionId;
  273.  
  274. -- Insert data SO By Brand yang sudah di tagging dan status doc( D dan I) ke table tt_sl_r_limit_detail_mou_list
  275. INSERT INTO tt_sl_r_limit_detail_mou_list(
  276. session_id, tenant_id,ou_id ,mou_id ,doc_date_mou,doc_no_mou,
  277. period_from ,period_to,partner_id_mou ,curr_code_mou ,plafon_amount ,
  278. doc_id,doc_type_id,doc_no,doc_date,partner_id,curr_code ,usage_amount ,
  279. status_doc ,workflow_status ,status_doc_mou,
  280. usage_amount_tax, total_usage_amount)
  281. SELECT pSessionId, A.tenant_id, A.ou_id, A.mou_id, A.doc_date AS doc_date_mou, A.doc_no AS doc_no_mou,
  282. A.period_from, A.period_to, A.partner_id AS partner_id_mou, A.curr_code AS curr_code_mou, A.plafon_amount,
  283. B.so_id AS doc_id, B.doc_type_id, B.doc_no, B.doc_date, B.partner_id, B.curr_code, B.amount AS usage_amount,
  284. B.status_doc AS status_doc_so ,B.workflow_status, A.status_doc AS status_doc_mou,
  285. B.amount_tax AS usage_amount_tax, (B.amount + B.amount_tax) AS total_usage_amount
  286. FROM tt_sl_mou_list A
  287. INNER JOIN tt_sl_so B ON A.mou_id = B.mou_id AND B.session_id = pSessionId
  288. WHERE A.session_id = pSessionId
  289. AND B.status_doc IN (vStatusDraft,vStatusInProgress);
  290.  
  291. /* Insert data SO By Brand yang sudah di tagging dan status doc( R/F) ke table tt_sl_r_limit_detail_mou_list
  292. * UNTUK SO YG SUDAH SAMPAI DI INVOICE (STATUS R) TIDAK PERLU DIMUNCULKAN
  293. */
  294. INSERT INTO tt_sl_r_limit_detail_mou_list(
  295. session_id, tenant_id,ou_id ,mou_id ,doc_date_mou,doc_no_mou,
  296. period_from ,period_to,partner_id_mou ,curr_code_mou ,plafon_amount ,
  297. doc_id,doc_type_id,doc_no,doc_date,partner_id,curr_code ,usage_amount ,
  298. status_doc ,workflow_status ,status_doc_mou,
  299. usage_amount_tax, total_usage_amount)
  300. SELECT pSessionId, A.tenant_id, A.ou_id, A.mou_id, A.doc_date AS doc_date_mou, A.doc_no AS doc_no_mou,
  301. A.period_from, A.period_to, A.partner_id AS partner_id_mou, A.curr_code AS curr_code_mou, A.plafon_amount,
  302. B.so_id AS doc_id, B.doc_type_id, B.doc_no, B.doc_date, B.partner_id, B.curr_code, B.amount AS usage_amount,
  303. B.status_doc AS status_doc_so ,B.workflow_status, A.status_doc AS status_doc_mou,
  304. B.amount_tax AS usage_amount_tax, (B.amount + B.amount_tax) AS total_usage_amount
  305. FROM tt_sl_mou_list A
  306. INNER JOIN tt_sl_so B ON A.mou_id = B.mou_id AND B.session_id = pSessionId
  307. WHERE A.session_id = pSessionId
  308. AND B.status_doc IN (vStatusReleased,vStatusFinal)
  309. AND NOT EXISTS(SELECT 1 FROM sl_invoice_temp C WHERE B.so_id = C.ref_id AND C.status_doc = vStatusReleased)
  310. AND NOT EXISTS(SELECT 1 FROM sl_invoice D WHERE B.so_id = D.ref_id AND D.status_doc = vStatusReleased);
  311.  
  312. /*
  313. * TIDAK LAGI MENAMPILKAN OUTSTANDING SO -> KARENA SO YG SUDAH DI INVOICE (R) TIDAK PERLU DIMUNCULKAN
  314. * KRN di KATAMATA 1 SO 1 INVOICE
  315. *
  316. -- Menghapus data dr table tt_sl_outstanding_so yang mana data_id = RAW
  317. DELETE FROM tt_sl_outstanding_so WHERE session_id = pSessionId AND data_id = vRaw;
  318.  
  319. -- Insert data SO By Brand yang sudah di tagging ,status doc( R/F) ke table tt_sl_r_limit_detail_mou_list
  320. INSERT INTO tt_sl_r_limit_detail_mou_list(
  321. session_id, tenant_id,ou_id ,mou_id ,doc_date_mou,doc_no_mou,
  322. period_from ,period_to,partner_id_mou ,curr_code_mou ,plafon_amount ,
  323. doc_id,doc_type_id,doc_no,doc_date,partner_id,curr_code ,usage_amount ,
  324. status_doc ,workflow_status ,status_doc_mou,
  325. usage_amount_tax, total_usage_amount)
  326. SELECT pSessionId, A.tenant_id, A.ou_id, A.mou_id, A.doc_date AS doc_date_mou, A.doc_no AS doc_no_mou,
  327. A.period_from, A.period_to, A.partner_id AS partner_id_mou, A.curr_code AS curr_code_mou, A.plafon_amount,
  328. D.so_id AS doc_id, D.doc_type_id, D.doc_no, D.doc_date, D.partner_id, D.curr_code, C.final_so AS usage_amount,
  329. D.status_doc AS status_doc_so ,D.workflow_status, A.status_doc AS status_doc_mou,
  330. C.final_tax_so AS usage_amount_tax, (C.final_so + C.final_tax_so) AS total_usage_amount
  331. FROM tt_sl_mou_list A
  332. INNER JOIN sl_so_tagging B ON A.mou_id = B.tag_doc_id AND B.tag_key = vTagKeyMou
  333. INNER JOIN tt_sl_outstanding_so C ON B.so_id = C.so_id AND C.data_id = vSummary
  334. INNER JOIN tt_sl_so D ON C.so_id = D.so_id AND D.session_id = pSessionId
  335. WHERE A.session_id = pSessionId
  336. AND C.session_id = pSessionId;
  337. */
  338.  
  339. --INSERT data return yang sudah di submit (status doc R/F) ke tt_sl_r_limit_detail_mou_list
  340. INSERT INTO tt_sl_r_limit_detail_mou_list(
  341. session_id, tenant_id,ou_id ,mou_id ,doc_date_mou,doc_no_mou,
  342. period_from ,period_to,partner_id_mou ,curr_code_mou ,plafon_amount ,
  343. doc_id,doc_type_id,doc_no,doc_date,partner_id,curr_code ,
  344. usage_amount ,status_doc ,workflow_status ,status_doc_mou,
  345. usage_amount_tax,
  346. total_usage_amount)
  347. SELECT pSessionId, A.tenant_id, A.ou_id, A.mou_id, A.doc_date AS doc_date_mou, A.doc_no AS doc_no_mou,
  348. A.period_from, A.period_to, A.partner_id AS partner_id_mou, A.curr_code AS curr_code_mou, A.plafon_amount,
  349. C.inventory_id AS doc_id, C.doc_type_id, C.doc_no, C.doc_date, C.partner_id,G.curr_code,
  350. SUM(D.qty_realization * F.nett_sell_price) AS usage_amount,C.status_doc AS status_doc_return ,
  351. C.workflow_status, A.status_doc AS status_doc_mou,
  352. SUM(D.qty_realization * F.tax_price) AS usage_amount_tax,
  353. (SUM(D.qty_realization * F.nett_sell_price) + SUM(D.qty_realization * F.tax_price)) AS total_usage_amount
  354. FROM tt_sl_mou_list A
  355. INNER JOIN in_return_tagging B ON A.mou_id = B.tag_doc_id AND B.tag_key = vTagKeyMOU
  356. INNER JOIN in_inventory C ON B.inventory_id = C.inventory_id
  357. INNER JOIN in_inventory_item D ON C.inventory_id = D.inventory_id
  358. INNER JOIN sl_request_return_sales E ON C.ref_id = E.request_return_sales_id AND C.ref_doc_type_id = vDocTypeIdRRS
  359. INNER JOIN sl_request_return_sales_brand_item F ON E.request_return_sales_id = F.request_return_sales_id
  360. AND f_get_brand_by_product_id(D.product_id) = F.brand_id
  361. INNER JOIN tt_sl_so G ON E.ref_id = G.so_id AND E.ref_doc_type_id = vDocTypeIdSOByBrand AND G.session_id = pSessionId
  362. WHERE A.session_id = pSessionId
  363. AND C.doc_type_id = vDocTypeIdReturnNote
  364. AND C.status_doc IN (vStatusReleased,vStatusFinal)
  365. GROUP BY A.tenant_id, A.ou_id, A.mou_id, A.doc_date , A.doc_no,A.period_from, A.period_to, A.partner_id , A.curr_code ,
  366. A.plafon_amount,C.inventory_id , C.doc_type_id, C.doc_no, C.doc_date, C.partner_id,G.curr_code,
  367. C.status_doc ,C.workflow_status, A.status_doc;
  368.  
  369. --INSERT data return yang belum di submit (status doc D/I) ke tt_sl_r_limit_detail_mou_list
  370. INSERT INTO tt_sl_r_limit_detail_mou_list(
  371. session_id, tenant_id,ou_id ,mou_id ,doc_date_mou,doc_no_mou,
  372. period_from ,period_to,partner_id_mou ,curr_code_mou ,plafon_amount ,
  373. doc_id,doc_type_id,doc_no,doc_date,partner_id,curr_code ,
  374. usage_amount ,status_doc ,workflow_status ,status_doc_mou,
  375. usage_amount_tax,
  376. total_usage_amount)
  377. SELECT pSessionId, A.tenant_id, A.ou_id, A.mou_id, A.doc_date AS doc_date_mou, A.doc_no AS doc_no_mou,
  378. A.period_from, A.period_to, A.partner_id AS partner_id_mou, A.curr_code AS curr_code_mou, A.plafon_amount,
  379. C.inventory_id AS doc_id, C.doc_type_id, C.doc_no, C.doc_date, C.partner_id,G.curr_code,
  380. SUM(D.qty_realization * F.nett_sell_price) AS usage_amount,C.status_doc AS status_doc_return ,
  381. C.workflow_status, A.status_doc AS status_doc_mou,
  382. SUM(D.qty_realization * F.tax_price) AS usage_amount_tax,
  383. (SUM(D.qty_realization * F.nett_sell_price) + SUM(D.qty_realization * F.tax_price)) AS total_usage_amount
  384. FROM tt_sl_mou_list A
  385. INNER JOIN tt_sl_r_limit_detail_mou_list B ON A.mou_id = B.mou_id AND B.doc_type_id = vDocTypeIdSOByBrand
  386. INNER JOIN sl_request_return_sales E ON B.doc_id = E.ref_id AND E.ref_doc_type_id = vDocTypeIdSOByBrand
  387. INNER JOIN sl_request_return_sales_brand_item F ON E.request_return_sales_id = F.request_return_sales_id
  388. INNER JOIN in_inventory C ON C.ref_id = E.request_return_sales_id AND C.ref_doc_type_id = vDocTypeIdRRS
  389. INNER JOIN in_inventory_item D ON C.inventory_id = D.inventory_id
  390. INNER JOIN tt_sl_so G ON E.ref_id = G.so_id AND E.ref_doc_type_id = vDocTypeIdSOByBrand AND G.session_id = pSessionId
  391. WHERE A.session_id = pSessionId
  392. AND B.session_id = pSessionId
  393. AND C.doc_type_id = vDocTypeIdReturnNote
  394. AND C.status_doc IN (vStatusDraft,vStatusInProgress)
  395. GROUP BY A.tenant_id, A.ou_id, A.mou_id, A.doc_date , A.doc_no,A.period_from, A.period_to, A.partner_id , A.curr_code ,
  396. A.plafon_amount,C.inventory_id , C.doc_type_id, C.doc_no, C.doc_date, C.partner_id,G.curr_code,
  397. C.status_doc ,C.workflow_status, A.status_doc;
  398.  
  399. -- Insert data MOU yang sama sekali belum digunakan ke table tt_sl_r_limit_detail_mou_list
  400. INSERT INTO tt_sl_r_limit_detail_mou_list(
  401. session_id, tenant_id, ou_id, mou_id, doc_date_mou, doc_no_mou,
  402. period_from, period_to, partner_id_mou, curr_code_mou, plafon_amount,
  403. doc_id, doc_type_id, doc_no, doc_date, partner_id, curr_code, usage_amount,
  404. status_doc, workflow_status, status_doc_mou)
  405. SELECT pSessionId, A.tenant_id, A.ou_id, A.mou_id, A.doc_date AS doc_date_mou, A.doc_no AS doc_no_mou,
  406. A.period_from, A.period_to, A.partner_id AS partner_id_mou, A.curr_code AS curr_code_mou, A.plafon_amount,
  407. vEmptyId, vEmptyId, vEmptyValue, vEmptyValue, A.partner_id, vEmptyValue, 0 AS usage_amount,
  408. vEmptyValue, vEmptyValue, A.status_doc AS status_doc_mou
  409. FROM tt_sl_mou_list A
  410. WHERE A.session_id = pSessionId
  411. AND A.mou_id NOT IN (SELECT DISTINCT B.mou_id FROM tt_sl_r_limit_detail_mou_list B WHERE B.session_id = pSessionId);
  412.  
  413. /* Insert data CN AR non-insentif yang dimapping ke MOU */
  414. INSERT INTO tt_sl_r_limit_detail_mou_list(
  415. session_id, tenant_id,ou_id ,mou_id ,doc_date_mou,doc_no_mou,
  416. period_from ,period_to,partner_id_mou ,curr_code_mou ,plafon_amount ,
  417. doc_id,doc_type_id,doc_no,doc_date,partner_id,curr_code ,usage_amount ,
  418. status_doc ,workflow_status ,status_doc_mou,
  419. usage_amount_tax, total_usage_amount)
  420. SELECT pSessionId, A.tenant_id, A.ou_id, A.mou_id, A.doc_date AS doc_date_mou, A.doc_no AS doc_no_mou,
  421. A.period_from, A.period_to, A.partner_id AS partner_id_mou, A.curr_code AS curr_code_mou, A.plafon_amount,
  422. C.invoice_ar_id AS doc_id, C.doc_type_id, C.doc_no, C.doc_date, C.partner_id, C.curr_code, SUM(D.add_amount)*-1 AS usage_amount,
  423. vStatusMapping AS status_doc_so, C.workflow_status, A.status_doc AS status_doc_mou,
  424. SUM(D.tax_amount)*-1 AS usage_amount_tax, (SUM(D.add_amount) + SUM(D.tax_amount))*-1 AS total_usage_amount
  425. FROM tt_sl_mou_list A
  426. INNER JOIN fi_invoice_ar_tagging B ON A.mou_id = B.tag_doc_id AND B.tag_key = vTagKeyMOU
  427. INNER JOIN fi_invoice_ar C ON B.invoice_ar_id = C.invoice_ar_id
  428. INNER JOIN fi_invoice_ar_cost D ON C.invoice_ar_id = D.invoice_ar_id
  429. WHERE A.session_id = pSessionId
  430. AND C.status_doc IN (vStatusReleased,vStatusFinal)
  431. AND C.doc_type_id = 251
  432. AND f_is_invoice_ar_cost_unvalid_by_activity_gl_code(C.invoice_ar_id, vActivityGLCodeInsentif, A.tenant_id) = vFlagYes
  433. GROUP BY A.tenant_id, A.ou_id, A.mou_id, A.doc_date, A.doc_no,
  434. A.period_from, A.period_to, A.partner_id, A.curr_code, A.plafon_amount,
  435. C.invoice_ar_id, C.doc_type_id, C.doc_no, C.doc_date, C.partner_id, C.curr_code,
  436. C.workflow_status, A.status_doc;
  437.  
  438. /* Insert data DN AR yang dimapping ke MOU */
  439. INSERT INTO tt_sl_r_limit_detail_mou_list(
  440. session_id, tenant_id,ou_id ,mou_id ,doc_date_mou,doc_no_mou,
  441. period_from ,period_to,partner_id_mou ,curr_code_mou ,plafon_amount ,
  442. doc_id,doc_type_id,doc_no,doc_date,partner_id,curr_code ,usage_amount ,
  443. status_doc ,workflow_status ,status_doc_mou,
  444. usage_amount_tax, total_usage_amount)
  445. SELECT pSessionId, A.tenant_id, A.ou_id, A.mou_id, A.doc_date AS doc_date_mou, A.doc_no AS doc_no_mou,
  446. A.period_from, A.period_to, A.partner_id AS partner_id_mou, A.curr_code AS curr_code_mou, A.plafon_amount,
  447. C.invoice_ar_id AS doc_id, C.doc_type_id, C.doc_no, C.doc_date, C.partner_id, C.curr_code, C.total_amount AS usage_amount,
  448. vStatusMapping AS status_doc_so, C.workflow_status, A.status_doc AS status_doc_mou,
  449. C.tax_amount AS usage_amount_tax, (C.total_amount + C.tax_amount) AS total_usage_amount
  450. FROM tt_sl_mou_list A
  451. INNER JOIN fi_invoice_ar_tagging B ON A.mou_id = B.tag_doc_id AND B.tag_key = vTagKeyMOU
  452. INNER JOIN fi_invoice_ar C ON B.invoice_ar_id = C.invoice_ar_id
  453. WHERE A.session_id = pSessionId
  454. AND C.status_doc IN (vStatusReleased,vStatusFinal)
  455. AND C.doc_type_id = 241;
  456.  
  457. Open pRefHeader FOR
  458. SELECT 12 AS _COUNT, 'LAPORAN LIMIT CUSTOMER (DETAIL)',
  459. '', '', '', '', '', '',
  460. '', '', '', '', '',
  461. 1 AS ordial,
  462. vSeparator AS _separator
  463.  
  464. UNION
  465.  
  466. SELECT 12 AS _COUNT,
  467. '', '', '', '', '', '',
  468. '', '', '', '', '', '',
  469. 2 AS ordial,
  470. vSeparator AS _separator
  471.  
  472. UNION
  473.  
  474. SELECT 12 AS _COUNT, 'OU', ': ' || f_get_ou_name(pOuId),
  475. '', '', '', '',
  476. '', '', '', '',
  477. 'PRINT DATE', ': ' || pDatetime,
  478. 3 AS ordial,
  479. vSeparator AS _separator
  480.  
  481. UNION
  482.  
  483. SELECT 12 AS _COUNT, 'PERIOD', ': ' || TO_CHAR(TO_DATE(pPeriodFrom,'YYYYMMDD'), 'DD/MM/YYYY') || ' s/d ' || TO_CHAR(TO_DATE(pPeriodTo,'YYYYMMDD'), 'DD/MM/YYYY'),
  484. '', '', '', '',
  485. '', '', '', '',
  486. 'USER – ROLE', ': ' || f_get_username(pUserId) || ' - ' || f_get_role_name(pRoleId),
  487. 4 AS ordial,
  488. vSeparator AS _separator
  489.  
  490. UNION
  491.  
  492. SELECT 12 AS _COUNT, 'CUSTOMER', ': ' || vPartnerCodeMou || ' / ' || vPartnerNameMou,
  493. '', '', '', '',
  494. '', '', '', '', '', '',
  495. 5 AS ordial,
  496. vSeparator AS _separator
  497.  
  498. UNION
  499.  
  500. SELECT 12 AS _COUNT,
  501. '', '', '', '', '', '',
  502. '', '', '', '', '', '',
  503. 6 AS ordial,
  504. vSeparator AS _separator
  505.  
  506. UNION
  507.  
  508. SELECT 12 AS _COUNT,
  509. 'MOU No', 'MOU Date', 'Start Period', 'End Period',
  510. 'Nilai Paket', 'Doc No', 'Doc Date', 'Currency',
  511. 'Usage Amount', 'Sisa Plafon', 'Owner Code', 'Owner Name',
  512. 7 AS ordial,
  513. vSeparator AS _separator
  514.  
  515. ORDER BY ordial;
  516. RETURN NEXT pRefHeader;
  517.  
  518.  
  519. FOR vDocNoMou IN (
  520. SELECT A.doc_no_mou
  521. FROM tt_sl_r_limit_detail_mou_list A
  522. GROUP BY A.doc_no_mou
  523. ) LOOP
  524.  
  525. PERFORM SETVAL('tt_sl_r_limit_detail_mou_list_for_csv_detail_line_no_seq', 0);
  526.  
  527. INSERT INTO tt_sl_r_limit_detail_mou_list_for_csv_detail(
  528. session_id, doc_no_mou,
  529. doc_date_mou, period_from, period_to,
  530. curr_code_mou, plafon_amount,
  531. doc_no, doc_date,
  532. curr_code,
  533. total_usage_amount,
  534. remaining_plafon_amount, owner_code, owner_name,
  535. ordial, line_no)
  536. SELECT pSessionId, A.doc_no_mou,
  537. A.doc_date_mou, A.period_from, A.period_to,
  538. A.curr_code_mou, CAST(A.plafon_amount AS character varying) AS plafon_amount,
  539. A.doc_no, A.doc_date,
  540. A.curr_code,
  541. CAST((CASE WHEN A.doc_type_id = vDocTypeIdReturnNote THEN (A.total_usage_amount * -1)
  542. ELSE A.total_usage_amount
  543. END) AS character varying) AS total_usage_amount,
  544. '', B.partner_code AS owner_code, B.partner_name AS owner_name,
  545. i AS ordial, NEXTVAL('tt_sl_r_limit_detail_mou_list_for_csv_detail_line_no_seq') AS line_no
  546. FROM tt_sl_r_limit_detail_mou_list A
  547. INNER JOIN m_partner B ON A.partner_id = B.partner_id
  548. WHERE A.session_id = pSessionId AND
  549. A.doc_no_mou = vDocNoMou
  550. --AND A.usage_amount <> 0
  551. ORDER BY A.doc_no_mou,B.partner_code, A.doc_date_mou, A.doc_no, A.doc_type_id, A.doc_date ASC ;
  552.  
  553. INSERT INTO tt_sl_r_limit_detail_mou_list_for_csv_detail(
  554. session_id, doc_no_mou, doc_date_mou, period_from, period_to, curr_code_mou,
  555. plafon_amount, doc_no, doc_date, curr_code, total_usage_amount,
  556. remaining_plafon_amount, owner_code, owner_name, ordial, line_no)
  557. SELECT pSessionId, '', '', '', '', '',
  558. '', 'Sub Total', '',
  559. A.curr_code,
  560. CAST(SUM(A.total_usage_amount::numeric) AS character varying) AS total_usage_amount,
  561. CAST((A.plafon_amount::numeric - SUM(A.total_usage_amount::numeric)) AS character varying) AS remaining_plafon_amount,
  562. '', '',
  563. i AS ordial, NEXTVAL('tt_sl_r_limit_detail_mou_list_for_csv_detail_line_no_seq') AS line_no
  564. FROM tt_sl_r_limit_detail_mou_list_for_csv_detail A
  565. WHERE A.session_id = pSessionId AND
  566. A.doc_no_mou = vDocNoMou
  567. --AND A.usage_amount <> 0
  568. GROUP BY A.doc_no_mou, A.curr_code, A.plafon_amount;
  569.  
  570. INSERT INTO tt_sl_r_limit_detail_mou_list_for_csv_detail(
  571. session_id, doc_no_mou, doc_date_mou, period_from, period_to, curr_code_mou,
  572. plafon_amount, doc_no, doc_date, curr_code, total_usage_amount,
  573. remaining_plafon_amount, owner_code, owner_name, ordial, line_no)
  574. VALUES (pSessionId, '', '', '', '', '',
  575. '', '', '', '', '',
  576. '', '', '',
  577. i, NEXTVAL('tt_sl_r_limit_detail_mou_list_for_csv_detail_line_no_seq'));
  578.  
  579. i := i + 1;
  580. END LOOP;
  581.  
  582. PERFORM SETVAL('tt_sl_r_limit_detail_mou_list_for_csv_detail_line_no_seq', 0);
  583.  
  584. WITH tt_grouped_limit_mou AS(
  585. SELECT A.curr_code_mou,
  586. A.plafon_amount::numeric AS plafon_amount,
  587. A.curr_code,
  588. SUM(A.total_usage_amount::numeric) AS total_usage_amount
  589. FROM tt_sl_r_limit_detail_mou_list_for_csv_detail A
  590. WHERE A.session_id = pSessionId AND
  591. A.plafon_amount <> '' AND
  592. A.total_usage_amount <> ''
  593. --AND A.usage_amount <> 0
  594. GROUP BY A.curr_code_mou, A.curr_code, A.plafon_amount
  595. )
  596. INSERT INTO tt_sl_r_limit_detail_mou_list_for_csv_detail(
  597. session_id, doc_no_mou, doc_date_mou, period_from, period_to, curr_code_mou,
  598. plafon_amount, doc_no, doc_date, curr_code, total_usage_amount,
  599. remaining_plafon_amount, owner_code, owner_name, ordial, line_no)
  600. SELECT pSessionId, 'Grand Total', '', '', '', A.curr_code_mou,
  601. CAST(SUM(A.plafon_amount) AS character varying) AS plafon_amount, '', '',
  602. A.curr_code,
  603. CAST(SUM(A.total_usage_amount) AS character varying) AS total_usage_amount,
  604. CAST((SUM(A.plafon_amount) - SUM(A.total_usage_amount)) AS character varying) AS remaining_plafon_amount,
  605. '', '',
  606. i AS ordial, NEXTVAL('tt_sl_r_limit_detail_mou_list_for_csv_detail_line_no_seq') AS line_no
  607. FROM tt_grouped_limit_mou A
  608. --AND A.usage_amount <> 0
  609. GROUP BY A.curr_code_mou, A.curr_code
  610. ORDER BY A.curr_code_mou, A.curr_code;
  611.  
  612. Open pRefDetail FOR
  613.  
  614. SELECT 12 AS _COUNT, doc_no_mou, doc_date_mou, period_from, period_to,
  615. curr_code_mou || ' ' || plafon_amount, doc_no, doc_date, curr_code, total_usage_amount,
  616. remaining_plafon_amount, owner_code, owner_name, ordial
  617. FROM tt_sl_r_limit_detail_mou_list_for_csv_detail A
  618. WHERE A.session_id = pSessionId
  619. ORDER BY A.ordial, A.line_no;
  620.  
  621. RETURN NEXT pRefDetail;
  622.  
  623. --Menghapus semua table temporrer
  624. DELETE FROM tt_sl_r_limit_detail_mou_list WHERE session_id = pSessionId;
  625. DELETE FROM tt_sl_mou_list WHERE session_id = pSessionId;
  626. DELETE FROM tt_sl_so WHERE session_id = pSessionId;
  627. DELETE FROM tt_sl_outstanding_so WHERE session_id = pSessionId;
  628. DELETE FROM tt_sl_r_limit_detail_mou_list_for_csv_detail WHERE session_id = pSessionId;
  629.  
  630. END;
  631. $BODY$
  632. LANGUAGE plpgsql VOLATILE
  633. COST 100
  634. /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement