Advertisement
widana

in_submit_do_receipt_from_webclinic

Dec 17th, 2018
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 22.69 KB | None | 0 0
  1. CREATE OR REPLACE FUNCTION in_submit_do_receipt_from_webclinic(character varying, bigint, bigint, bigint, character varying)
  2. RETURNS void AS
  3. $BODY$
  4. DECLARE
  5. pSessionId ALIAS FOR $1;
  6. pTenantId ALIAS FOR $2;
  7. pDoReceiptId ALIAS FOR $3;
  8. pUserId ALIAS FOR $4;
  9. pDatetime ALIAS FOR $5;
  10.  
  11. vFlagInvoice character varying(1);
  12. vEmptyId bigint;
  13. vStatusRelease character varying(1);
  14. vStatusDraft character varying(1);
  15. vStatusFinal character varying(1);
  16. vStatusVoid character varying(1);
  17. vEmptyValue character varying(1);
  18. vProductStatus character varying(5);
  19. vSignDebit character varying(1);
  20. vSignCredit character varying(1);
  21. vTypeRate character varying(3);
  22. vProductCOA character varying(10);
  23. vSystemCOA character varying(10);
  24. vSoId bigint;
  25. vDoId bigint;
  26. vUnfinishedItem bigint;
  27. vParentOuId bigint;
  28. vJournalTrxId bigint;
  29. vJournalType character varying(20);
  30. vOuId bigint;
  31. vOuWarehouseId bigint;
  32.  
  33. vDocJournal DOC_JOURNAL%ROWTYPE;
  34. vOuStructure OU_BU_STRUCTURE%ROWTYPE;
  35. vOuStructureJournalItem OU_BU_STRUCTURE%ROWTYPE;
  36. result RECORD;
  37.  
  38. vDoReceiptDocTypeId bigint;
  39. vRoundingModeNonTax character varying(5);
  40. vDoDocTypeId bigint;
  41. vSoDocTypeId bigint;
  42. vSlsInvTempId bigint;
  43. vSlsInvTempDocTypeId bigint;
  44. vNo character varying(5);
  45.  
  46. pUserIdForGenerateDoc BIGINT;
  47. vRoleIdForGenerateDoc BIGINT;
  48. vSchema CHARACTER VARYING := 'EA25';
  49. vYes character varying := 'Y';
  50. vWorkflowStatus CHARACTER VARYING := 'APPROVED';
  51. vParamUserIdForGenerateDoc CHARACTER VARYING := 'created.user.document.for.webclinic';
  52. vParamRoleIdForGenerateDoc CHARACTER VARYING := 'created.role.document.for.webclinic';
  53. vFlowId BIGINT;
  54. vFlgUserRole CHARACTER VARYING := 'R';
  55. vCurrentDateTime character varying;
  56.  
  57. BEGIN
  58.  
  59. vFlagInvoice := 'N';
  60. vEmptyId := -99;
  61. vStatusRelease := 'R';
  62. vStatusVoid := 'V';
  63. vStatusDraft := 'D';
  64. vStatusFinal := 'F';
  65. vEmptyValue := ' ';
  66. vProductStatus := 'GOOD';
  67. vSignDebit := 'D';
  68. vSignCredit := 'C';
  69. vTypeRate := 'COM';
  70. vProductCOA := 'PRODUCT';
  71. vSystemCOA := 'SYSTEM';
  72. vUnfinishedItem := 0;
  73. vNo := 'N';
  74.  
  75. vDoReceiptDocTypeId = 525;
  76. vDoDocTypeId := 311;
  77. vSoDocTypeId := 301;
  78. vSlsInvTempDocTypeId := 361;
  79.  
  80. SELECT f_get_value_system_config_by_param_code(pTenantId, 'rounding.mode.non.tax') INTO vRoundingModeNonTax;
  81.  
  82. -- Set user id from sysconfig
  83. SELECT f_get_value_system_config_by_param_code(pTenantId, vParamUserIdForGenerateDoc)::bigint INTO pUserIdForGenerateDoc;
  84.  
  85. -- Set role id from sysconfig
  86. SELECT f_get_value_system_config_by_param_code(pTenantId, vParamRoleIdForGenerateDoc)::bigint INTO vRoleIdForGenerateDoc;
  87.  
  88. SELECT f_datetime((extract(epoch from now())*1000)::bigint) INTO vCurrentDateTime;
  89.  
  90. DELETE FROM tt_journal_trx_item WHERE session_id = pSessionId;
  91. /*
  92. * 1. update status doc in_do_receipt
  93. * 2. add sl_log_so_balance_item
  94. * 3. add sl_so_balance_invoice
  95. * 4. add sl_so_balance_invoice_tax
  96. * 5. update sl_so_balance_invoice untuk Do Id
  97. * 6. update sl_so_balance_invoice_tax untuk Do Id
  98. * 7. void sales invoice temporer untuk So Id
  99. * 8. delete data sales invoice temporer dari fi_invoice_ar_balance dan fi_invoice_tax_ar_balance
  100. * 9. add in_log_product_balance_stock
  101. * 10. update in_product_balance_stock
  102. * 11. update in_balance_do_item
  103. * 12. update sl_so_balance_item - status dan qty
  104. * 13. update status sl_so. Jika seluruh balance item sudah final/cancel, maka status menjadi Final.
  105. * 14. add gl_journal_trx
  106. * 15. add gl_journal_trx_item
  107. * 16. add gl_journal_trx_mapping
  108. *
  109. */
  110.  
  111. SELECT A.ref_id, f_get_ou_bu_structure(A.ou_id) AS ou, f_get_document_journal(A.doc_type_id) as doc
  112. FROM in_do_receipt A
  113. WHERE A.do_receipt_id = pDoReceiptId INTO result;
  114.  
  115. vDoId := result.ref_id;
  116. vOuStructure := result.ou;
  117. vDocJournal := result.doc;
  118.  
  119. SELECT ref_id INTO vSoId
  120. FROM sl_do
  121. WHERE do_id = vDoId;
  122.  
  123. /*
  124. * update status doc in_do_receipt menjadi Release
  125. */
  126. UPDATE in_do_receipt SET status_doc = vStatusRelease, version = version + 1, update_datetime = pDatetime, update_user_id = pUserId
  127. WHERE do_receipt_id = pDoReceiptId;
  128.  
  129. /*
  130. * buat data log sl_log_so_balance_item
  131. */
  132. INSERT INTO sl_log_so_balance_item
  133. (tenant_id, so_id, so_item_id, ref_doc_type_id, ref_id, ref_item_id,
  134. qty_trx, trx_uom_id, qty_int, base_uom_id, remark,
  135. "version", create_datetime, create_user_id, update_datetime, update_user_id)
  136. SELECT A.tenant_id, C.so_id, C.so_item_id, A.doc_type_id, A.do_receipt_id, B.do_receipt_item_id,
  137. B.qty_return * D.qty_so / D.qty_int, D.so_uom_id, B.qty_return, B.uom_id, B.remark,
  138. 0, pDatetime, pUserId, pDatetime, pUserId
  139. FROM in_do_receipt A, in_do_receipt_item B, in_balance_do_item C, sl_so_item D
  140. WHERE A.do_receipt_id = pDoReceiptId AND
  141. A.do_receipt_id = B.do_receipt_id AND
  142. B.ref_id = C.do_item_id AND
  143. C.so_item_id = D.so_item_id AND
  144. B.qty_return > 0;
  145.  
  146. /*
  147. * buat data sl_so_balance_Invoice
  148. * supaya dapat ditarik saat buat sales invoice
  149. */
  150. INSERT INTO sl_so_balance_invoice
  151. (tenant_id, ou_id, partner_id, so_id,
  152. ref_doc_type_id, ref_id, ref_doc_no, ref_doc_date, ref_item_id, qty_dlv_so, so_uom_id,
  153. curr_code, price_so, item_amount, flg_invoice, invoice_id,
  154. regular_disc_amount, promo_disc_amount, adj_regular_disc_amount, adj_promo_disc_amount,
  155. "version", create_datetime, create_user_id, update_datetime, update_user_id,
  156. do_receipt_item_id)
  157. SELECT A.tenant_id, A.ou_id, E.partner_bill_to_id, C.so_id,
  158. A.ref_doc_type_id, A.ref_id, F.doc_no, F.doc_date, B.ref_id, -1 * B.qty_return * D.qty_so / D.qty_int, D.so_uom_id,
  159. D.curr_code, f_get_price_before_tax_and_disc(D.gross_sell_price, ((G.regular_disc_amount / G.qty_dlv_so) + (G.promo_disc_amount / G.qty_dlv_so)), D.flg_tax_amount, D.tax_percentage, f_get_digit_decimal_doc_curr(vDoReceiptDocTypeId, D.curr_code), vRoundingModeNonTax),
  160. -1 * f_get_amount_before_tax_and_disc((B.qty_return * D.qty_so / D.qty_int) * D.gross_sell_price, (G.regular_disc_amount + G.promo_disc_amount) * (B.qty_return * D.qty_so / D.qty_int) / G.qty_dlv_so, D.flg_tax_amount, D.tax_percentage, f_get_digit_decimal_doc_curr(vDoReceiptDocTypeId, D.curr_code), vRoundingModeNonTax),
  161. vFlagInvoice, vEmptyId,
  162. -1 * G.regular_disc_amount * (B.qty_return * D.qty_so / D.qty_int) / G.qty_dlv_so, 0, 0, 0,
  163. 0, pDatetime, pUserId, pDatetime, pUserId,
  164. B.do_receipt_item_id
  165. FROM in_do_receipt A, in_do_receipt_item B, in_balance_do_item C, sl_so_item D, sl_so E, sl_do F, sl_so_balance_invoice G
  166. WHERE A.do_receipt_id = pDoReceiptId AND
  167. A.do_receipt_id = B.do_receipt_id AND
  168. B.ref_id = C.do_item_id AND
  169. C.so_item_id = D.so_item_id AND
  170. D.so_id = E.so_id AND
  171. A.ref_id = F.do_id AND
  172. G.ref_id = F.do_id AND
  173. G.ref_item_id = C.do_item_id AND
  174. B.qty_return > 0 AND G.do_receipt_item_id = -99;
  175.  
  176. /*
  177. * buat data sl_so_balance_invoice_tax
  178. * supaya dapat ditarik saat buat sales invoice
  179. */
  180. INSERT INTO sl_so_balance_invoice_tax
  181. (tenant_id, ou_id, partner_id, so_id,
  182. ref_doc_type_id, ref_id, ref_item_id, tax_id, flg_amount,
  183. tax_percentage, curr_code, base_amount, tax_amount, flg_invoice, invoice_id,
  184. "version", create_datetime, create_user_id, update_datetime, update_user_id,
  185. do_receipt_item_id)
  186. SELECT A.tenant_id, A.ou_id, F.partner_bill_to_id, C.so_id,
  187. A.ref_doc_type_id, A.ref_id, B.ref_id, D.tax_id, E.flg_amount,
  188. D.tax_percentage, D.curr_code,
  189. -1 * f_get_amount_before_tax_and_disc((B.qty_return * D.qty_so / D.qty_int) * D.gross_sell_price, (B.qty_return * D.qty_so / D.qty_int) * D.discount_amount, D.flg_tax_amount, D.tax_percentage, f_get_digit_decimal_doc_curr(vDoReceiptDocTypeId, D.curr_code), vRoundingModeNonTax),
  190. -1 * f_tax_rounding(A.tenant_id, f_get_amount_before_tax((B.qty_return * D.qty_so / D.qty_int) * (D.gross_sell_price - D.discount_amount), D.flg_tax_amount, D.tax_percentage, f_get_digit_decimal_doc_curr(vDoReceiptDocTypeId, D.curr_code), vRoundingModeNonTax), D.tax_percentage),
  191. vFlagInvoice, vEmptyId,
  192. 0, pDatetime, pUserId, pDatetime, pUserId,
  193. B.do_receipt_item_id
  194. FROM in_do_receipt A, in_do_receipt_item B, in_balance_do_item C, sl_so_item D, m_tax E, sl_so F
  195. WHERE A.do_receipt_id = pDoReceiptId AND
  196. A.do_receipt_id = B.do_receipt_id AND
  197. B.ref_id = C.do_item_id AND
  198. C.so_item_id = D.so_item_id AND
  199. D.tax_id = E.tax_id AND
  200. D.so_id = F.so_id AND
  201. B.qty_return > 0;
  202.  
  203. /*
  204. * update sl_so_balance_invoice, dan sl_so_balance_invoice_tax
  205. * yang sudah dibuat oleh sales invoice temporer
  206. */
  207. UPDATE sl_so_balance_invoice SET flg_invoice = vFlagInvoice, flg_invoice_temp = vFlagInvoice, invoice_id = vEmptyId
  208. WHERE ref_id = vDoId AND
  209. ref_doc_type_id = vDoDocTypeId;
  210.  
  211. UPDATE sl_so_balance_invoice_tax SET flg_invoice = vFlagInvoice, invoice_id = vEmptyId
  212. WHERE ref_id = vDoId AND
  213. ref_doc_type_id = vDoDocTypeId;
  214.  
  215. /*
  216. * void data sales invoice temporer yang menggunakan DO Item id yang sama dng Do Receipt :
  217. * 1. cari invoice temp id yang memiliki data DO Item yang sama dengan DO Receipt
  218. * 2. update status doc invoice temp sesuai id yang diperoleh di langkah ke 1
  219. */
  220. SELECT A.invoice_temp_id INTO vSlsInvTempId
  221. FROM sl_invoice_temp_item A, in_do_receipt_item B, in_do_receipt C, sl_invoice_temp D
  222. WHERE A.ref_doc_type_id = B.ref_doc_type_id AND
  223. A.ref_id = vDoId AND
  224. A.ref_item_id = B.ref_id AND
  225. B.do_receipt_id = C.do_receipt_id AND
  226. C.ref_id = A.ref_id AND
  227. B.do_receipt_id = pDoReceiptId AND
  228. A.invoice_temp_id = D.invoice_temp_id AND
  229. D.status_doc <> vStatusVoid;
  230.  
  231. UPDATE sl_invoice_temp SET status_doc = vStatusVoid, update_datetime = pDatetime, update_user_id = pUserId
  232. WHERE invoice_temp_id = vSlsInvTempId;
  233.  
  234. /*
  235. * advance invoice harus diupdate juga supaya bisa dipakai lagi
  236. */
  237. UPDATE sl_so_balance_advance_invoice B SET flg_invoice = vFlagInvoice, flg_invoice_temp = vFlagInvoice, invoice_id = vEmptyId
  238. WHERE B.so_id = vSoId
  239. AND EXISTS (
  240. SELECT 1 FROM sl_invoice_temp_advance A
  241. WHERE A.ref_id = B.ref_id
  242. AND A.ref_doc_type_id = B.ref_doc_type_id
  243. AND A.invoice_temp_id = vSlsInvTempId
  244. );
  245.  
  246.  
  247. /*
  248. * nomor faktur pajak boleh digunakan kembali untuk temp sales invoice yang di void gara2 DO Receipt
  249. *
  250. */
  251. UPDATE m_gen_tax_number A
  252. SET invoice_id = vEmptyId, invoice_doc_type_id = vEmptyId, invoice_doc_no = vEmptyValue, invoice_doc_date = vEmptyValue
  253. FROM sl_invoice_temp B
  254. WHERE A.invoice_doc_no = B.inv_doc_no
  255. AND A.invoice_doc_date = B.inv_doc_date
  256. AND A.invoice_doc_type_id = B.doc_type_id
  257. AND A.invoice_id = vSlsInvTempId
  258. AND B.invoice_temp_id = vSlsInvTempId;
  259.  
  260. /*
  261. * delete data sales invoice temporer dari fi_invoice_ar_balance dan fi_invoice_tax_ar_balance
  262. */
  263.  
  264. DELETE FROM fi_invoice_tax_ar_balance A
  265. WHERE A.tenant_id = pTenantId AND
  266. EXISTS (
  267. SELECT 1 FROM fi_invoice_ar_balance B
  268. WHERE A.tenant_id = B.tenant_id
  269. AND A.invoice_ar_balance_id = B.invoice_ar_balance_id
  270. AND B.doc_type_id = vSlsInvTempDocTypeId
  271. AND B.invoice_ar_id = vSlsInvTempId
  272. );
  273.  
  274. DELETE FROM fi_invoice_ar_balance A
  275. WHERE A.tenant_id = pTenantId AND
  276. A.doc_type_id = vSlsInvTempDocTypeId AND
  277. A.invoice_ar_id = vSlsInvTempId;
  278.  
  279.  
  280. /*
  281. * buat data log product balance stock
  282. * ref item id = do_receipt_id
  283. */
  284. INSERT INTO in_log_product_balance_stock
  285. (tenant_id, ou_id, doc_type_id, ref_id, doc_no, doc_date, partner_id,
  286. product_id, product_balance_id, warehouse_id, product_status, base_uom_id, qty,
  287. "version", create_datetime, create_user_id, update_datetime, update_user_id)
  288. SELECT A.tenant_id, E.ou_id, A.doc_type_id, A.do_receipt_id, A.doc_no, A.doc_date, D.partner_ship_to_id,
  289. C.product_id, C.product_balance_id, A.warehouse_id, C.product_status, C.uom_id, SUM(C.qty_return),
  290. 0, pDatetime, pUserId, pDatetime, pUserId
  291. FROM in_do_receipt A, in_do_receipt_item B, in_do_receipt_product C, sl_do D, m_warehouse_ou E
  292. WHERE A.do_receipt_id = pDoReceiptId AND
  293. A.do_receipt_id = B.do_receipt_id AND
  294. B.do_receipt_item_id = C.do_receipt_item_id AND
  295. A.ref_id = D.do_id AND
  296. A.warehouse_id = E.warehouse_id
  297. GROUP BY A.tenant_id, E.ou_id, A.doc_type_id, A.do_receipt_id, A.doc_no, A.doc_date, D.partner_ship_to_id,
  298. C.product_id, C.product_balance_id, A.warehouse_id, C.product_status, C.uom_id;
  299.  
  300. /*
  301. * update in_product_balance_stock
  302. * mod by Didit, 30 Des 2016
  303. * perbaiki jika ada 1 produk yang sama (product dan product balance) tapi ada lebih dari 1 record di tabel itemnya akan menjadi salah
  304. */
  305. WITH tt_in_product_balance_summary AS (
  306. SELECT C.product_id, C.tenant_id, A.warehouse_id, C.product_balance_id, C.product_status, SUM(C.qty_return) AS qty_return
  307. FROM in_do_receipt A, in_do_receipt_item B, in_do_receipt_product C
  308. WHERE A.do_receipt_id = pDoReceiptId
  309. AND A.do_receipt_id = B.do_receipt_id
  310. AND B.do_receipt_item_id = C.do_receipt_item_id
  311. AND C.qty_return > 0
  312. GROUP BY C.product_id, C.tenant_id, A.warehouse_id, C.product_balance_id, C.product_status
  313. )
  314. UPDATE in_product_balance_stock SET qty = qty + A.qty_return, update_datetime = pDatetime, update_user_id = pUserId, version = version + 1
  315. FROM tt_in_product_balance_summary A
  316. WHERE in_product_balance_stock.product_id = A.product_id AND
  317. in_product_balance_stock.tenant_id = A.tenant_id AND
  318. in_product_balance_stock.warehouse_id = A.warehouse_id AND
  319. in_product_balance_stock.product_balance_id = A.product_balance_id AND
  320. in_product_balance_stock.product_status = A.product_status;
  321.  
  322. /*
  323. * update data balance do item sehubungan dengan product yang dikembalian/tidak diterima oleh customer,
  324. * sehingga saat akan membuat return note, hanya barang yang memang diterima oleh customer
  325. */
  326. UPDATE in_balance_do_item SET qty_dlv_int = qty_dlv_int - A.qty_return,
  327. qty_dlv = in_balance_do_item.qty_dlv - (A.qty_return * in_balance_do_item.qty_dlv / in_balance_do_item.qty_dlv_int),
  328. status_item = vStatusRelease, update_datetime = pDatetime, update_user_id = pUserId
  329. FROM in_do_receipt_item A
  330. WHERE A.do_receipt_id = pDoReceiptId AND
  331. in_balance_do_item.do_item_id = A.ref_id AND
  332. A.qty_return > 0;
  333.  
  334. UPDATE in_balance_do_item
  335. SET status_item = vStatusRelease,
  336. update_datetime = pDatetime,
  337. update_user_id = pUserId
  338. FROM in_do_receipt A
  339. WHERE A.do_receipt_id = pDoReceiptId AND
  340. in_balance_do_item.do_id = A.ref_id AND
  341. A.ref_doc_type_id = vDoDocTypeId;
  342.  
  343. /*
  344. * update status SO seperti semula
  345. */
  346. UPDATE sl_so
  347. SET status_doc = flg_old_status,
  348. flg_old_status = vEmptyValue,
  349. update_datetime = pDatetime,
  350. update_user_id = pUserId,
  351. version = version + 1
  352. WHERE so_id = vSoId;
  353.  
  354. /*
  355. * update flg invoice so balance inv
  356. */
  357. UPDATE sl_so_balance_invoice
  358. SET flg_invoice = vNo,
  359. update_datetime = pDatetime,
  360. update_user_id = pUserId,
  361. version = version + 1
  362. WHERE so_id = vSoId
  363. AND ref_id = vDoId;
  364.  
  365. /*
  366. * update status so balance item
  367. */
  368. UPDATE sl_so_balance_item B
  369. SET status_item = B.flg_old_status,
  370. flg_old_status = vEmptyValue,
  371. update_datetime = pDatetime,
  372. update_user_id = pUserId,
  373. version = B.version + 1
  374. FROM sl_so A
  375. INNER JOIN sl_so_item C ON A.so_id = C.so_id
  376. INNER JOIN sl_do_item D ON D.ref_id = C.so_item_id
  377. WHERE B.so_item_id = C.so_item_id
  378. AND A.so_id = vSoId
  379. AND D.do_id = vDoId;
  380.  
  381. /*
  382. * status item SO akan berubah menjadi Release, karena ada nya barang yang dikembalikan oleh customer
  383. */
  384. UPDATE sl_so_balance_item SET qty_dlv = sl_so_balance_item.qty_dlv - (A.qty_return * sl_so_balance_item.qty_so / sl_so_balance_item.qty_so_int),
  385. qty_dlv_int = sl_so_balance_item.qty_dlv_int - A.qty_return,
  386. status_item = vStatusRelease
  387. FROM in_do_receipt_item A, in_balance_do_item B
  388. WHERE A.do_receipt_id = pDoReceiptId AND
  389. A.ref_id = B.do_item_id AND
  390. sl_so_balance_item.so_item_id = B.so_item_id AND
  391. A.qty_return > 0;
  392.  
  393. UPDATE sl_so SET status_doc = vStatusRelease
  394. WHERE so_id = vSoId;
  395.  
  396. /*
  397. * @author TKP, 9 Jun 2016
  398. * Cek jika OU pada warehouse sama dengan OU pada dokumen maka nilai ou_bu_id dan ou_sub_bu_id =-99
  399. * jika OU pada warehouse tidak sama dengan OU pada dokumen maka nilai ou_bu_id dan ou_sub_bu_id didapat pada f_get_ou_bu_structure;
  400. */
  401.  
  402. SELECT A.ou_id, B.ou_id INTO vOuId, vOuWarehouseId
  403. FROM in_do_receipt A
  404. INNER JOIN m_warehouse_ou B ON A.warehouse_id = B.warehouse_id
  405. WHERE A.do_receipt_id = pDoReceiptId;
  406.  
  407. IF (vOuId <> vOuWarehouseId) THEN
  408. SELECT f_get_ou_bu_structure(vOuWarehouseId) as ou_structure INTO result;
  409. vOuStructureJournalItem := result.ou_structure;
  410. ELSE
  411. vOuStructureJournalItem := ROW(-99, -99, -99);
  412. END IF;
  413.  
  414. /*
  415. * membuat data transaksi jurnal :
  416. * 1. buat admin
  417. * 2. buat temlate jurnal
  418. */
  419.  
  420. PERFORM gl_manage_admin_journal_trx(A.tenant_id, (vOuStructure).ou_bu_id, A.ou_id, (vDocJournal).journal_type, (vDocJournal).ledger_code, f_get_year_month_date(A.doc_date), 'MONTHLY', pDatetime, pUserId)
  421. FROM in_do_receipt A
  422. WHERE A.do_receipt_id = pDoReceiptId;
  423.  
  424. SELECT NEXTVAL('gl_journal_trx_seq') INTO vJournalTrxId;
  425.  
  426. INSERT INTO gl_journal_trx
  427. (journal_trx_id, tenant_id, journal_type, doc_type_id, doc_id, doc_no, doc_date,
  428. ou_bu_id, ou_branch_id, ou_sub_bu_id, partner_id, cashbank_id, warehouse_id, ext_doc_no, ext_doc_date,
  429. ref_doc_type_id, ref_id, due_date, curr_code, remark, status_doc, workflow_status,
  430. "version", create_datetime, create_user_id, update_datetime, update_user_id)
  431. SELECT vJournalTrxId, A.tenant_id, (vDocJournal).journal_type, A.doc_type_id, A.do_receipt_id, A.doc_no, A.doc_date,
  432. (vOuStructure).ou_bu_id, (vOuStructure).ou_branch_id, (vOuStructure).ou_sub_bu_id, B.partner_ship_to_id, vEmptyId, A.warehouse_id, A.ext_doc_no, A.ext_doc_date,
  433. A.ref_doc_type_id, A.ref_id, A.doc_date, C.curr_code, A.remark, vStatusDraft, 'DRAFT',
  434. 0, pDatetime, pUserId, pDatetime, pUserId
  435. FROM in_do_receipt A, sl_do B, sl_so C
  436. WHERE A.do_receipt_id = pDoReceiptId AND
  437. A.ref_id = B.do_id AND
  438. B.ref_id = C.so_id;
  439.  
  440. INSERT INTO tt_journal_trx_item
  441. (session_id, tenant_id, journal_trx_id, line_no,
  442. ref_doc_type_id, ref_id,
  443. partner_id, product_id, cashbank_id, ou_rc_id,
  444. segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  445. coa_id, curr_code, qty, uom_id,
  446. amount, journal_date, type_rate,
  447. numerator_rate, denominator_rate, journal_desc, remark)
  448. SELECT pSessionId, A.tenant_id, vJournalTrxId, 1,
  449. A.doc_type_id, B.do_receipt_item_id,
  450. C.partner_ship_to_id, B.product_id, vEmptyId, vEmptyId,
  451. vEmptyId, vSignDebit, vProductCOA, vEmptyId,
  452. f_get_product_coa_group_product(A.tenant_id, B.product_id), f_get_value_system_config_by_param_code(pTenantId, 'ValutaBuku'), B.qty_return, B.uom_id,
  453. 0, A.doc_date, vTypeRate,
  454. 1, 1, 'PRODUCT_STOCK', B.remark
  455. FROM in_do_receipt A, in_do_receipt_item B, sl_do C
  456. WHERE A.do_receipt_id = pDoReceiptId AND
  457. A.do_receipt_id = B.do_receipt_id AND
  458. A.ref_id = C.do_id;
  459.  
  460. INSERT INTO gl_journal_trx_item
  461. (tenant_id, journal_trx_id, line_no,
  462. ref_doc_type_id, ref_id,
  463. partner_id, product_id, cashbank_id, ou_rc_id,
  464. segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  465. coa_id, curr_code, qty, uom_id,
  466. amount, journal_date, type_rate,
  467. numerator_rate, denominator_rate, journal_desc, remark,
  468. "version", create_datetime, create_user_id, update_datetime, update_user_id,
  469. ou_branch_id, ou_sub_bu_id)
  470. SELECT A.tenant_id, A.journal_trx_id, ROW_NUMBER() OVER ( PARTITION BY A.journal_trx_id),
  471. A.ref_doc_type_id, A.ref_id,
  472. A.partner_id, A.product_id, A.cashbank_id, A.ou_rc_id,
  473. A.segmen_id, A.sign_journal, A.flg_source_coa, A.activity_gl_id,
  474. A.coa_id, A.curr_code, A.qty, A.uom_id,
  475. A.amount, A.journal_date, A.type_rate,
  476. A.numerator_rate, A.denominator_rate, A.journal_desc, A.remark,
  477. 0, pDatetime, pUserId, pDatetime, pUserId,
  478. (vOuStructureJournalItem).ou_branch_id, (vOuStructureJournalItem).ou_sub_bu_id
  479. FROM tt_journal_trx_item A
  480. WHERE A.session_id = pSessionId;
  481.  
  482. INSERT INTO gl_journal_trx_mapping
  483. (tenant_id, journal_trx_id, line_no,
  484. ref_doc_type_id, ref_id,
  485. partner_id, product_id, cashbank_id, ou_rc_id,
  486. segmen_id, sign_journal, flg_source_coa, activity_gl_id,
  487. coa_id, curr_code, qty, uom_id,
  488. amount, journal_date, type_rate,
  489. numerator_rate, denominator_rate, journal_desc, remark,
  490. "version", create_datetime, create_user_id, update_datetime, update_user_id)
  491. SELECT A.tenant_id, A.journal_trx_id, ROW_NUMBER() OVER ( PARTITION BY A.journal_trx_id ),
  492. vEmptyId, vEmptyId,
  493. vEmptyId, vEmptyId, vEmptyId, vEmptyId,
  494. vEmptyId, vSignCredit, vSystemCOA, vEmptyId,
  495. f_get_system_coa_by_group_coa(A.tenant_id, 'HargaPokokPenjualan'), f_get_value_system_config_by_param_code(pTenantId, 'ValutaBuku'), 0, vEmptyId,
  496. 0, A.journal_date, A.type_rate,
  497. 1, 1, 'COGS', vEmptyValue,
  498. 0, pDatetime, pUserId, pDatetime, pUserId
  499. FROM tt_journal_trx_item A
  500. WHERE A.session_id = pSessionId
  501. GROUP BY A.tenant_id, A.journal_trx_id, A.journal_date, A.type_rate;
  502.  
  503. -- Mendapatkan default approval flow ID so
  504. SELECT awe_flow_id INTO vFlowId
  505. FROM awe_flow
  506. WHERE scheme = vSchema AND
  507. flg_validate = vYes AND
  508. active = vYes;
  509.  
  510. -- Generate data awe_currdoc_status so
  511. INSERT INTO awe_currdoc_status(
  512. req_id, tenant_id, scheme, doc_id, doc_no, doc_date, current_state,
  513. remark, current_user_id, current_role_id, flg_user_role, label,
  514. data, flow_id, create_datetime, create_user_id, create_role_id,
  515. update_datetime, update_user_id, update_role_id, version)
  516. SELECT A.do_receipt_id||'_'||A.doc_no, A.tenant_id, vSchema, A.do_receipt_id, A.doc_no, A.doc_date, vWorkflowStatus,
  517. A.remark, pUserIdForGenerateDoc, vRoleIdForGenerateDoc, vFlgUserRole, 'Delivery Order Receipt '||A.doc_no,
  518. '{}', vFlowId, vCurrentDateTime, pUserIdForGenerateDoc, vRoleIdForGenerateDoc,
  519. vCurrentDateTime, pUserIdForGenerateDoc, vRoleIdForGenerateDoc, 0
  520. FROM in_do_receipt A
  521. WHERE A.do_receipt_id = pDoReceiptId;
  522.  
  523. -- Generate data awe_historydoc so
  524. INSERT INTO awe_historydoc(
  525. tenant_id, req_id, doc_id, scheme, user_id, role_id,
  526. activity, previous_state, next_state, remark, next_user_id, next_role_id,
  527. flg_user_role, activity_datetime, version)
  528. SELECT pTenantId, B.req_id, A.do_receipt_id, vSchema, pUserIdForGenerateDoc, vRoleIdForGenerateDoc,
  529. 'AUTO GENERATE', '', '', A.remark, vEmptyId, vEmptyId,
  530. vFlgUserRole, vCurrentDateTime, 0
  531. FROM in_do_receipt A
  532. INNER JOIN awe_currdoc_status B ON B.doc_id = A.do_receipt_id AND B.doc_no = A.doc_no AND B.doc_date = A.doc_date
  533. WHERE A.do_receipt_id = pDoReceiptId;
  534.  
  535. DELETE FROM tt_journal_trx_item WHERE session_id = pSessionId;
  536. END;
  537. $BODY$
  538. LANGUAGE plpgsql VOLATILE
  539. COST 100;
  540. /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement