Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Task: Generate SI dari PO
- 1. Kondisi sekarang, otomatis buat DO setelah PO dibuatkan Goods Receive
- 2. Syaratnya, SI akan digenerate jika:
- 1. semua item PO diterima penuh di GR (rcv_qty - po_qty = 0)
- 2. terbentuk DO dari GR (flag_dropship = 'Y')
- 3. Script func generate SI akan dipanggil di func Submit GR (sama seperti DO)
- 4. Data untuk SI, ambil dari data DO dan SO
- Garis besar:
- 1. Submit Goods Receive
- 2. Cek flg dropship dari ref doc SO, jika flg_dropship = 'Y'
- 1. generate DO
- 2. jika sukses generate DO, cek: jika po_item.qty = receive_goods_item.qty_rcv (qty o/s SO = 0)
- 1. generate SI
- Langkah-langkah generate SI
- 1. trigger Approved Recevie Goods
- 1. prepare id dan docNo untuk SI (generate autonum dan docId)
- 2. set id dan docNo untuk SI sbg param (t_process_parameter)
- 2. func submit Receive Goods (pu_submit_receive_goods)
- 1. jika syarat terpenuhi untuk generate DO dan dokumen DO sukses generate
- 1. cek apakah ada item di GR dengan kondisi: po_item.qty <> receive_goods_item.qty_rcv (qty o/s SO != 0)
- 2. jika tidak ada, siapkan variabel untuk get docNo dan id SI dari t_process_parameter
- 3. panggil func generate SI (sl_automatic_create_sales_invoice)
- 3. func generate SI (sl_automatic_create_sales_invoice)
- 1. insert data ke sl_invoice
- 1. ext_doc_no = Customer Purchase Order No (bisa ambil dari ext doc No SO)
- 2. ref_id = referensi id dari SO
- 3. remark = set dgn value "auto generated from PO XXX for SO xxx"
- 4. ou_legal = ambil dari t_ou_legal
- 5. partner_id = ambil dari customer_id di SO
- 6. due_date = doc_date SO + m_cust_payment.due_payment_days
- 7. salesman_id = ambil ref dari salesman di SO
- 8. gross_amount = SUM(nett_item_amount) - SUM(regular_disc_amount) - SUM(promo_disc_amount) + totalTaxAmount
- 1. ambil data dari sl_so_balance_invoice
- 9. advance_amount = sl_so_balance_advance_invoice.advance_amount
- 10. tax_amount = sl_so_balance_invoice_tax.tax_amount
- 11. add_amount = 0
- 12. total_amount = SUM(item_amount) - advance_amount - SUM(regular_disc_amount) - SUM(promo_disc_amount)
- 1. ambil data dari sl_so_balance_invoice
- 13. discount_amount = SUM(regular_disc_amount) - SUM(promo_disc_amount)
- 1. ambil data dari sl_so_balance_invoice
- 14. ref_inv_temp_id = set -99
- 2. insert data ke sl_invoice_item
- 1. ref_id = id referensi untuk DO
- 2. ref_item_id = sl_so_balance_invoice.ref_item_id
- 3. ref_item_amount = sl_so_balance_invoice.ref_item_amount
- 4. do_receipt_item_id = sl_so_balance_invoice.do_receipt_item_id (krn tidak ada DO Receipt, pasti -99)
- 3. insert data ke sl_invoice_cost, jika total regular_disc_amount dan/atau promo_disc_amount nilainya lebih dari 0
- 1. ambil activity_gl_id untuk 'PROMO_DISC' dan/atau 'REGULAR_DISC'
- 2. ambil tax_id dan tax_percentage dari m_tax
- 4. insert data ke sl_invoice_tax
- 1. tax_no = set '00.000.000.0-000.000'
- 2. tax_percentage, base_amount, tax_amount ambil dari sl_so_balance_invoice_tax
- 3. doc_date = doc date dari dokumen DO
- 5. update data sl_so_balance_invoice
- 1. flg_invoice = 'I'
- 2. invoice_id = set id SI hasil generate
- 3. version =+1
- 6. update data sl_so_balance_invoice_tax
- 1. flg_invoice = 'I'
- 2. invoice_id = set id SI hasil generate
- 3. version =+1
- 7. generate process_message untuk proses submit SI
- 8. insert data awe_currdoc_status
- Submit GR -> flg_dropship = 'Y' => auto generate DO => compare if (qty item PO = item GR) == true => generate SI
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement