abirama62

process_func_generate_si

Jun 21st, 2021
701
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Task: Generate SI dari PO
  2. 1. Kondisi sekarang, otomatis buat DO setelah PO dibuatkan Goods Receive
  3. 2. Syaratnya, SI akan digenerate jika:
  4.   1. semua item PO diterima penuh di GR (rcv_qty - po_qty = 0)
  5.   2. terbentuk DO dari GR (flag_dropship = 'Y')
  6. 3. Script func generate SI akan dipanggil di func Submit GR (sama seperti DO)
  7. 4. Data untuk SI, ambil dari data DO dan SO
  8.  
  9. Garis besar:
  10. 1. Submit Goods Receive
  11. 2. Cek flg dropship dari ref doc SO, jika flg_dropship = 'Y'
  12.   1. generate DO
  13.   2. jika sukses generate DO, cek: jika po_item.qty = receive_goods_item.qty_rcv (qty o/s SO = 0)
  14.     1. generate SI
  15.  
  16. Langkah-langkah generate SI
  17. 1. trigger Approved Recevie Goods
  18.   1. prepare id dan docNo untuk SI (generate autonum dan docId)
  19.   2. set id dan docNo untuk SI sbg param (t_process_parameter)
  20.  
  21. 2. func submit Receive Goods (pu_submit_receive_goods)
  22.   1. jika syarat terpenuhi untuk generate DO dan dokumen DO sukses generate
  23.     1. cek apakah ada item di GR dengan kondisi: po_item.qty <> receive_goods_item.qty_rcv (qty o/s SO != 0)
  24.     2. jika tidak ada, siapkan variabel untuk get docNo dan id SI dari t_process_parameter
  25.     3. panggil func generate SI (sl_automatic_create_sales_invoice)
  26. 3. func generate SI (sl_automatic_create_sales_invoice)
  27.   1. insert data ke sl_invoice
  28.     1. ext_doc_no = Customer Purchase Order No (bisa ambil dari ext doc No SO)
  29.     2. ref_id = referensi id dari SO
  30.     3. remark = set dgn value "auto generated from PO XXX for SO xxx"
  31.     4. ou_legal = ambil dari t_ou_legal
  32.     5. partner_id = ambil dari customer_id di SO
  33.     6. due_date = doc_date SO + m_cust_payment.due_payment_days
  34.     7. salesman_id = ambil ref dari salesman di SO
  35.     8. gross_amount = SUM(nett_item_amount) - SUM(regular_disc_amount) - SUM(promo_disc_amount) + totalTaxAmount
  36.       1. ambil data dari sl_so_balance_invoice
  37.     9. advance_amount = sl_so_balance_advance_invoice.advance_amount
  38.     10. tax_amount = sl_so_balance_invoice_tax.tax_amount
  39.     11. add_amount = 0
  40.     12. total_amount = SUM(item_amount) - advance_amount - SUM(regular_disc_amount) - SUM(promo_disc_amount)
  41.       1. ambil data dari sl_so_balance_invoice
  42.     13. discount_amount = SUM(regular_disc_amount) - SUM(promo_disc_amount)
  43.         1. ambil data dari sl_so_balance_invoice
  44.     14. ref_inv_temp_id = set -99
  45.  
  46.   2. insert data ke sl_invoice_item
  47.     1. ref_id = id referensi untuk DO
  48.     2. ref_item_id = sl_so_balance_invoice.ref_item_id
  49.     3. ref_item_amount = sl_so_balance_invoice.ref_item_amount
  50.     4. do_receipt_item_id = sl_so_balance_invoice.do_receipt_item_id (krn tidak ada DO Receipt, pasti -99)
  51.  
  52.   3. insert data ke sl_invoice_cost, jika total regular_disc_amount dan/atau promo_disc_amount nilainya lebih dari 0
  53.     1. ambil activity_gl_id untuk 'PROMO_DISC' dan/atau 'REGULAR_DISC'
  54.     2. ambil tax_id dan tax_percentage dari m_tax
  55.  
  56.   4. insert data ke sl_invoice_tax
  57.     1. tax_no = set '00.000.000.0-000.000'
  58.     2. tax_percentage, base_amount, tax_amount ambil dari sl_so_balance_invoice_tax
  59.     3. doc_date = doc date dari dokumen DO
  60.  
  61.   5. update data sl_so_balance_invoice
  62.     1. flg_invoice = 'I'
  63.     2. invoice_id = set id SI hasil generate
  64.     3. version =+1
  65.  
  66.   6. update data sl_so_balance_invoice_tax
  67.     1. flg_invoice = 'I'
  68.     2. invoice_id = set id SI hasil generate
  69.     3. version =+1
  70.  
  71.   7. generate process_message untuk proses submit SI
  72.   8. insert data awe_currdoc_status
  73.  
  74.  
  75. Submit GR -> flg_dropship = 'Y' => auto generate DO => compare if (qty item PO = item GR) == true => generate SI
RAW Paste Data