Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --Modified by Adrian, May 31, 2018
- --Menambahkan insert default flg_calculate_margin pada pu_po_balance_item_consignment_sold_manual
- CREATE OR REPLACE FUNCTION sl_submit_do(bigint, character varying, character varying)
- RETURNS void AS
- $BODY$
- DECLARE
- pTenantId ALIAS FOR $1;
- pSessionId ALIAS FOR $2;
- pProcessNo ALIAS FOR $3;
- vProcessId bigint;
- vDoId bigint;
- vUserId bigint;
- vDatetime character varying(14);
- vFlagInvoice character varying(1);
- vEmptyId bigint;
- vStatusRelease character varying(1);
- vStatusDraft character varying(1);
- vStatusFinal character varying(1);
- vEmptyValue character varying(1);
- vProductStatus character varying(5);
- vSignDebit character varying(1);
- vSignCredit character varying(1);
- vTypeRate character varying(3);
- vProductCOA character varying(10);
- vSystemCOA character varying(10);
- vPartnerIdKonsinyasiManual bigint;
- vSoId bigint;
- vUnfinishedItem bigint;
- vParentOuId bigint;
- vJournalTrxId bigint;
- vJournalType character varying(20);
- vDocJournal DOC_JOURNAL%ROWTYPE;
- vOuStructure OU_BU_STRUCTURE%ROWTYPE;
- result RECORD;
- vDeliveryOrderDocTypeId bigint;
- vSalesOrderDocTypeId bigint;
- vRoundingModeNonTax character varying(5);
- vFlgCalculateMargin character varying(2);
- BEGIN
- vFlagInvoice := 'N';
- vEmptyId := -99;
- vStatusRelease := 'R';
- vStatusDraft := 'D';
- vStatusFinal := 'F';
- vEmptyValue := ' ';
- vProductStatus := 'GOOD';
- vSignDebit := 'D';
- vSignCredit := 'C';
- vTypeRate := 'COM';
- vProductCOA := 'PRODUCT';
- vSystemCOA := 'SYSTEM';
- vUnfinishedItem := 0;
- vDeliveryOrderDocTypeId = 311;
- vSalesOrderDocTypeId = 301;
- vFlgCalculateMargin := 'SP';
- SELECT f_get_value_system_config_by_param_code(pTenantId, 'rounding.mode.non.tax') INTO vRoundingModeNonTax;
- SELECT A.process_message_id INTO vProcessId
- FROM t_process_message A
- WHERE A.tenant_id = pTenantId AND
- A.process_name = 'sl_submit_do' AND
- A.process_no = pProcessNo;
- SELECT CAST(A.process_parameter_value AS bigint) INTO vDoId
- FROM t_process_parameter A
- WHERE A.process_message_id = vProcessId AND
- A.process_parameter_key = 'doId';
- SELECT CAST(A.process_parameter_value AS bigint) INTO vUserId
- FROM t_process_parameter A
- WHERE A.process_message_id = vProcessId AND
- A.process_parameter_key = 'userId';
- SELECT CAST(A.process_parameter_value AS character varying(14)) INTO vDatetime
- FROM t_process_parameter A
- WHERE A.process_message_id = vProcessId AND
- A.process_parameter_key = 'datetime';
- DELETE FROM tt_journal_trx_item WHERE session_id = pSessionId;
- /*
- * 1. update status doc sl_do
- * 2. add sl_log_so_balance_item
- * 3. add sl_so_balance_invoice
- * 4. add sl_so_balance_invoice_tax
- * 5. add in_log_product_balance_stock
- * 6. add in_balance_do_item
- * 7. update status sl_so_balance_item
- * 8. update status sl_so. Jika seluruh balance item sudah final/cancel, maka status menjadi Final.
- * 9. add gl_journal_trx
- * 10. add gl_journal_trx_item
- * 11. add gl_journal_trx_mapping
- *
- */
- SELECT A.ref_id, f_get_ou_bu_structure(A.ou_id) AS ou, f_get_document_journal(A.doc_type_id) as doc
- FROM sl_do A
- WHERE A.do_id = vDoId INTO result;
- vSoId := result.ref_id;
- vOuStructure := result.ou;
- vDocJournal := result.doc;
- UPDATE sl_do SET status_doc = vStatusRelease, version = version + 1, update_datetime = vDatetime, update_user_id = vUserId
- WHERE do_id = vDoId;
- INSERT INTO sl_log_so_balance_item
- (tenant_id, so_id, so_item_id, ref_doc_type_id, ref_id, ref_item_id,
- qty_trx, trx_uom_id, qty_int, base_uom_id, remark,
- "version", create_datetime, create_user_id, update_datetime, update_user_id)
- SELECT A.tenant_id, C.so_id, C.so_item_id, A.doc_type_id, A.do_id, B.do_item_id,
- B.qty_dlv_so * -1, B.so_uom_id, B.qty_dlv_int *-1, B.base_uom_id, B.remark,
- 0, vDatetime, vUserId, vDatetime, vUserId
- FROM sl_do A, sl_do_item B, sl_so_item C
- WHERE A.do_id = vDoId AND
- A.do_id = B.do_id AND
- B.ref_id = C.so_item_id;
- INSERT INTO sl_so_balance_invoice
- (tenant_id, ou_id, partner_id, so_id,
- ref_doc_type_id, ref_id, ref_doc_no, ref_doc_date, ref_item_id, qty_dlv_so, so_uom_id,
- curr_code, price_so, item_amount, flg_invoice, invoice_id,
- "version", create_datetime, create_user_id, update_datetime, update_user_id)
- SELECT A.tenant_id, A.ou_id, D.partner_bill_to_id, A.ref_id,
- A.doc_type_id, A.do_id, A.doc_no, A.doc_date, B.do_item_id, B.qty_dlv_so, B.so_uom_id,
- C.curr_code, C.nett_sell_price,
- f_get_amount_before_tax(B.qty_dlv_so * (C.gross_sell_price - C.discount_amount), C.flg_tax_amount, C.tax_percentage, f_get_digit_decimal_doc_curr(vDeliveryOrderDocTypeId, C.curr_code), vRoundingModeNonTax),
- vFlagInvoice, vEmptyId,
- 0, vDatetime, vUserId, vDatetime, vUserId
- FROM sl_do A, sl_do_item B, sl_so_item C, sl_so D
- WHERE A.do_id = vDoId AND
- A.do_id = B.do_id AND
- B.ref_id = C.so_item_id AND
- C.so_id = D.so_id;
- INSERT INTO sl_so_balance_invoice_tax
- (tenant_id, ou_id, partner_id, so_id,
- ref_doc_type_id, ref_id, ref_item_id, tax_id, flg_amount,
- tax_percentage, curr_code, base_amount, tax_amount, flg_invoice, invoice_id,
- "version", create_datetime, create_user_id, update_datetime, update_user_id)
- SELECT A.tenant_id, A.ou_id, E.partner_bill_to_id, A.ref_id,
- A.doc_type_id, A.do_id, B.do_item_id, C.tax_id, D.flg_amount,
- C.tax_percentage, C.curr_code,
- f_get_amount_before_tax(B.qty_dlv_so * (C.gross_sell_price - C.discount_amount), C.flg_tax_amount, C.tax_percentage, f_get_digit_decimal_doc_curr(vDeliveryOrderDocTypeId, C.curr_code), vRoundingModeNonTax),
- f_tax_rounding(A.tenant_id, f_get_amount_before_tax(B.qty_dlv_so * (C.gross_sell_price - C.discount_amount), C.flg_tax_amount, C.tax_percentage, f_get_digit_decimal_doc_curr(vDeliveryOrderDocTypeId, C.curr_code), vRoundingModeNonTax), C.tax_percentage), vFlagInvoice, vEmptyId,
- 0, vDatetime, vUserId, vDatetime, vUserId
- FROM sl_do A, sl_do_item B, sl_so_item C, m_tax D, sl_so E
- WHERE A.do_id = vDoId AND
- A.do_id = B.do_id AND
- B.ref_id = C.so_item_id AND
- C.tax_id = D.tax_id AND
- C.so_id = E.so_id;
- /*
- * buat data log product balance stock
- * ref item id = do_product_id
- * NK, 14 Feb 2015
- * untuk product yang tidak beli dengan cara konsinyasi
- */
- INSERT INTO in_log_product_balance_stock
- (tenant_id, ou_id, doc_type_id, ref_id, doc_no, doc_date, partner_id,
- product_id, product_balance_id, warehouse_id, product_status, base_uom_id, qty,
- "version", create_datetime, create_user_id, update_datetime, update_user_id)
- SELECT A.tenant_id, A.ou_id, A.doc_type_id, A.do_id, A.doc_no, A.doc_date, A.partner_ship_to_id,
- C.product_id, C.product_balance_id, A.warehouse_id, C.product_status, C.base_uom_id, SUM(C.qty_dlv_int) * -1,
- 0, vDatetime, vUserId, vDatetime, vUserId
- FROM sl_do A, sl_do_item B, sl_do_product C, m_product D, m_product_custom E
- WHERE A.do_id = vDoId AND
- A.do_id = B.do_id AND
- B.do_item_id = C.do_item_id AND
- C.product_id = D.product_id AND
- D.product_id = E.product_id AND
- E.flg_buy_konsinyasi='N'
- GROUP BY A.tenant_id, A.ou_id, A.doc_type_id, A.do_id, A.doc_no, A.doc_date, A.partner_ship_to_id,
- C.product_id, C.product_balance_id, A.warehouse_id, C.product_status, C.base_uom_id;
- /*
- * buat data log product consignment balance stock
- * ref item id = do_product_id
- * NK, 14 Feb 2015
- * untuk product yang beli dengan cara konsinyasi
- */
- INSERT INTO in_log_product_consignment_balance_stock
- (tenant_id, ou_id, doc_type_id, ref_id, doc_no, doc_date, partner_id,
- product_id, product_balance_id, warehouse_id, product_status, base_uom_id, qty,
- "version", create_datetime, create_user_id, update_datetime, update_user_id)
- SELECT A.tenant_id, A.ou_id, A.doc_type_id, A.do_id, A.doc_no, A.doc_date, A.partner_ship_to_id,
- C.product_id, C.product_balance_id, A.warehouse_id, C.product_status, C.base_uom_id, SUM(C.qty_dlv_int) * -1,
- 0, vDatetime, vUserId, vDatetime, vUserId
- FROM sl_do A, sl_do_item B, sl_do_product C, m_product D, m_product_custom E
- WHERE A.do_id = vDoId AND
- A.do_id = B.do_id AND
- B.do_item_id = C.do_item_id AND
- C.product_id = D.product_id AND
- D.product_id = E.product_id AND
- E.flg_buy_konsinyasi = 'Y'
- GROUP BY A.tenant_id, A.ou_id, A.doc_type_id, A.do_id, A.doc_no, A.doc_date, A.partner_ship_to_id,
- C.product_id, C.product_balance_id, A.warehouse_id, C.product_status, C.base_uom_id;
- /*
- * add data balance do item yang akan digunakan di inventory untuk pembuatan return note,
- * saat akan membuat return note
- */
- INSERT INTO in_balance_do_item
- (do_item_id, tenant_id, ou_id, do_id, doc_no, doc_date, partner_id,
- so_id, so_no, so_date, so_item_id,
- qty_dlv, qty_return, so_uom_id, qty_dlv_int,
- qty_return_int, base_uom_id, status_item,
- "version", create_datetime, create_user_id, update_datetime, update_user_id)
- SELECT B.do_item_id, A.tenant_id, A.ou_id, A.do_id, A.doc_no, A.doc_date, A.partner_ship_to_id,
- A.ref_id, C.doc_no, C.doc_date, B.ref_id,
- SUM(B.qty_dlv_so), 0, B.so_uom_id, SUM(B.qty_dlv_int),
- 0, B.base_uom_id, vStatusRelease,
- 0, vDatetime, vUserId, vDatetime, vUserId
- FROM sl_do A, sl_do_item B, sl_so C
- WHERE A.do_id = vDoId AND
- A.do_id = B.do_id AND
- A.ref_id = C.so_id
- GROUP BY B.do_item_id, A.tenant_id, A.ou_id, A.do_id, A.doc_no, A.doc_date, A.partner_ship_to_id,
- A.ref_id, C.doc_no, C.doc_date, B.ref_id, B.so_uom_id, B.base_uom_id;
- UPDATE sl_so_balance_item SET status_item = vStatusRelease, update_datetime = vDatetime, update_user_id = vUserId
- FROM sl_do_item A
- WHERE sl_so_balance_item.so_item_id = A.ref_id AND
- sl_so_balance_item.tenant_id = A.tenant_id AND
- A.do_id = vDoId AND
- sl_so_balance_item.qty_so - sl_so_balance_item.qty_cancel + sl_so_balance_item.qty_add - sl_so_balance_item.qty_dlv > 0;
- UPDATE sl_so_balance_item SET status_item = vStatusFinal, update_datetime = vDatetime, update_user_id = vUserId
- FROM sl_do_item A
- WHERE sl_so_balance_item.so_item_id = A.ref_id AND
- sl_so_balance_item.tenant_id = A.tenant_id AND
- A.do_id = vDoId AND
- sl_so_balance_item.qty_so - sl_so_balance_item.qty_cancel + sl_so_balance_item.qty_add - sl_so_balance_item.qty_dlv <= 0;
- /*
- * Lakukan update qty product balance stock reserved.
- */
- UPDATE in_product_balance_stock_reserved Z
- SET qty = Z.qty - B.qty_dlv_int, qty_original = Z.qty_original-B.qty_dlv_int, version = Z.version+1, update_datetime = vDatetime, update_user_id = vUserId
- FROM sl_do A
- INNER JOIN sl_do_item B ON A.do_id = B.do_id
- INNER JOIN sl_so C ON A.ref_id = C.so_id
- AND A.ref_doc_type_id = C.doc_type_id
- INNER JOIN sl_so_item E ON B.ref_id = E.so_item_id
- AND C.so_id = E.so_id
- AND B.product_id = E.product_id
- WHERE A.do_id = vDoId
- AND Z.ref_doc_id = C.so_id
- AND Z.ref_doc_type_id = C.doc_type_id
- AND Z.ref_doc_item_id = E.so_item_id;
- /*
- * Delete jika qty product balance stock reserved sudah full dibuatkan DO.
- */
- DELETE
- FROM in_product_balance_stock_reserved Z
- WHERE EXISTS (
- SELECT 1
- FROM sl_do A
- INNER JOIN sl_do_item B ON A.do_id = B.do_id
- INNER JOIN sl_so C ON A.ref_id = C.so_id
- AND A.ref_doc_type_id = C.doc_type_id
- INNER JOIN sl_so_item E ON B.ref_id = E.so_item_id
- AND C.so_id = E.so_id
- AND B.product_id = E.product_id
- WHERE A.do_id = vDoId
- AND Z.ref_doc_id = C.so_id
- AND Z.ref_doc_type_id = C.doc_type_id
- AND Z.ref_doc_item_id = E.so_item_id
- AND Z.qty <= 0);
- SELECT COUNT(1) INTO vUnfinishedItem
- FROM sl_so_balance_item A, sl_so_item B
- WHERE A.so_item_id = B.so_item_id AND
- B.so_id = vSoId AND
- A.status_item = vStatusRelease;
- IF vUnfinishedItem = 0 THEN
- UPDATE sl_so SET status_doc = vStatusFinal
- WHERE so_id = vSoId;
- END IF;
- /*
- * NK, 15 Feb 2015
- * mencari data po yang masih release, untuk sebagai catatan ke supplier berapa jumlah barang yang dijual
- */
- /*
- * NK, 16 Feb 2015
- * diubah cara ambil data, karena saat submit so sudah membuat data pu_po_balance_item_consignment_sold
- INSERT INTO tt_do_po_item_consignment
- (session_id, doc_type_id, do_id, do_item_id,
- po_id, po_item_id, remark,
- qty_po, qty_sell, po_uom_id,
- qty_int_po, qty_int_sell, base_uom_id)
- SELECT pSessionId, A.doc_type_id, A.do_id, B.do_item_id,
- E.po_id, F.po_item_id, B.remark,
- F.qty_po, B.qty_dlv_int * F.qty_po / F.qty_int_po, F.po_uom_id,
- F.qty_int_po, B.qty_dlv_int, F.base_uom_id
- FROM sl_do A, sl_do_item B, m_product C, m_product_custom D, pu_po_item E, pu_po_balance_item_consignment F
- WHERE A.do_id = vDoId AND
- A.do_id = B.do_id AND
- B.product_id = C.product_id AND
- C.product_id = D.product_id AND
- D.flg_buy_konsinyasi = 'Y' AND
- B.product_id = E.product_id AND
- E.po_item_id = F.po_item_id AND
- F.status_item = vStatusRelease;
- */
- INSERT INTO tt_do_po_item_consignment
- (session_id, doc_type_id, do_id, do_item_id,
- po_id, po_item_id, remark,
- qty_po, qty_sell, po_uom_id,
- qty_int_po, qty_int_sell, base_uom_id)
- SELECT pSessionId, A.doc_type_id, A.do_id, B.do_item_id,
- C.po_id, C.po_item_id, B.remark,
- D.qty_po, B.qty_dlv_int * D.qty_po / D.qty_int_po, D.po_uom_id,
- D.qty_int_po, B.qty_dlv_int, D.base_uom_id
- FROM sl_do A, sl_do_item B, pu_po_balance_item_consignment_sold C, pu_po_balance_item_consignment D
- WHERE A.do_id = vDoId AND
- A.do_id = B.do_id AND
- A.ref_id = C.so_id AND
- B.ref_id = C.so_item_id AND
- C.po_item_id = D.po_item_id;
- UPDATE pu_po_balance_item_consignment B SET
- qty_int_sell = B.qty_int_sell + A.qty_int_sell, qty_sell = B.qty_sell + A.qty_sell,
- version = B.version + 1, update_datetime = vDatetime, update_user_id = vUserId
- FROM tt_do_po_item_consignment A
- WHERE A.session_id = pSessionId AND
- B.po_item_id = A.po_item_id;
- -- UPDATE pu_po_balance_item_consignment B SET
- -- update_datetime = vDatetime, update_user_id = vUserId
- -- FROM tt_do_po_item_consignment A
- -- WHERE A.session_id = pSessionId AND
- -- B.po_item_id = A.po_item_id AND
- -- B.qty_rcv - B.qty_sell <= 0;
- INSERT INTO pu_log_po_balance_item_consignment
- (tenant_id, po_id, po_item_id, ref_doc_type_id, ref_id, ref_item_id,
- qty_trx, trx_uom_id, qty_int, base_uom_id, remark,
- "version", create_datetime, create_user_id, update_datetime, update_user_id)
- SELECT pTenantId, A.po_id, A.po_item_id, A.doc_type_id, A.do_id, A.do_item_id,
- A.qty_sell, A.po_uom_id, A.qty_int_sell, A.base_uom_id, A.remark,
- 0, vDatetime, vUserId, vDatetime, vUserId
- FROM tt_do_po_item_consignment A
- WHERE A.session_id = pSessionId;
- /*
- * membuat data transaksi jurnal :
- * 1. buat admin
- * 2. buat temlate jurnal
- */
- 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', vDatetime, vUserId)
- FROM sl_do A
- WHERE A.do_id = vDoId;
- SELECT NEXTVAL('gl_journal_trx_seq') INTO vJournalTrxId;
- INSERT INTO gl_journal_trx
- (journal_trx_id, tenant_id, journal_type, doc_type_id, doc_id, doc_no, doc_date,
- ou_bu_id, ou_branch_id, ou_sub_bu_id, partner_id, cashbank_id, warehouse_id, ext_doc_no, ext_doc_date,
- ref_doc_type_id, ref_id, due_date, curr_code, remark, status_doc, workflow_status,
- "version", create_datetime, create_user_id, update_datetime, update_user_id)
- SELECT vJournalTrxId, A.tenant_id, (vDocJournal).journal_type, A.doc_type_id, A.do_id, A.doc_no, A.doc_date,
- (vOuStructure).ou_bu_id, (vOuStructure).ou_branch_id, (vOuStructure).ou_sub_bu_id, A.partner_ship_to_id, vEmptyId, A.warehouse_id, A.ext_doc_no, A.ext_doc_date,
- A.ref_doc_type_id, A.ref_id, A.doc_date, B.curr_code, A.remark, vStatusDraft, 'DRAFT',
- 0, vDatetime, vUserId, vDatetime, vUserId
- FROM sl_do A, sl_so B
- WHERE A.do_id = vDoId AND
- A.ref_doc_type_id = B.doc_type_id AND
- A.ref_id = B.so_id;
- INSERT INTO tt_journal_trx_item
- (session_id, tenant_id, journal_trx_id, line_no,
- ref_doc_type_id, ref_id,
- partner_id, product_id, cashbank_id, ou_rc_id,
- segmen_id, sign_journal, flg_source_coa, activity_gl_id,
- coa_id, curr_code, qty, uom_id,
- amount, journal_date, type_rate,
- numerator_rate, denominator_rate, journal_desc, remark)
- SELECT pSessionId, A.tenant_id, vJournalTrxId, 1,
- A.doc_type_id, B.do_item_id,
- A.partner_ship_to_id, B.product_id, vEmptyId, vEmptyId,
- vEmptyId, vSignCredit, vProductCOA, vEmptyId,
- f_get_product_coa_group_product(A.tenant_id, B.product_id), f_get_value_system_config_by_param_code(pTenantId, 'ValutaBuku'), B.qty_dlv_int, B.base_uom_id,
- 0, A.doc_date, vTypeRate,
- 1, 1, 'PRODUCT_STOCK', B.remark
- FROM sl_do A, sl_do_item B, sl_so_item C
- WHERE A.do_id = vDoId AND
- A.do_id = B.do_id AND
- B.ref_id = C.so_item_id;
- INSERT INTO gl_journal_trx_item
- (tenant_id, journal_trx_id, line_no,
- ref_doc_type_id, ref_id,
- partner_id, product_id, cashbank_id, ou_rc_id,
- segmen_id, sign_journal, flg_source_coa, activity_gl_id,
- coa_id, curr_code, qty, uom_id,
- amount, journal_date, type_rate,
- numerator_rate, denominator_rate, journal_desc, remark,
- "version", create_datetime, create_user_id, update_datetime, update_user_id)
- SELECT A.tenant_id, A.journal_trx_id, ROW_NUMBER() OVER ( PARTITION BY A.journal_trx_id),
- A.ref_doc_type_id, A.ref_id,
- A.partner_id, A.product_id, A.cashbank_id, A.ou_rc_id,
- A.segmen_id, A.sign_journal, A.flg_source_coa, A.activity_gl_id,
- A.coa_id, A.curr_code, A.qty, A.uom_id,
- A.amount, A.journal_date, A.type_rate,
- A.numerator_rate, A.denominator_rate, A.journal_desc, A.remark,
- 0, vDatetime, vUserId, vDatetime, vUserId
- FROM tt_journal_trx_item A
- WHERE A.session_id = pSessionId;
- INSERT INTO gl_journal_trx_mapping
- (tenant_id, journal_trx_id, line_no,
- ref_doc_type_id, ref_id,
- partner_id, product_id, cashbank_id, ou_rc_id,
- segmen_id, sign_journal, flg_source_coa, activity_gl_id,
- coa_id, curr_code, qty, uom_id,
- amount, journal_date, type_rate,
- numerator_rate, denominator_rate, journal_desc, remark,
- "version", create_datetime, create_user_id, update_datetime, update_user_id)
- SELECT A.tenant_id, A.journal_trx_id, ROW_NUMBER() OVER ( PARTITION BY A.journal_trx_id ),
- vEmptyId, vEmptyId,
- vEmptyId, vEmptyId, vEmptyId, vEmptyId,
- vEmptyId, vSignDebit, vSystemCOA, vEmptyId,
- f_get_system_coa_by_group_coa(A.tenant_id, 'HargaPokokPenjualan'), f_get_value_system_config_by_param_code(pTenantId, 'ValutaBuku'), 0, vEmptyId,
- 0, A.journal_date, A.type_rate,
- 1, 1, 'COGS', vEmptyValue,
- 0, vDatetime, vUserId, vDatetime, vUserId
- FROM tt_journal_trx_item A
- WHERE A.session_id = pSessionId
- GROUP BY A.tenant_id, A.journal_trx_id, A.journal_date, A.type_rate;
- -- insert ke pu_po_balance_item_consignment_sold
- INSERT INTO tt_pu_po_balance_item_consignment_sold(
- session_id, tenant_id, po_id, po_item_id, so_id, so_item_id,
- normal_price, sold_price, discount, margin_internal, margin_supp,
- sold_price_after_margin, qty_so, qty_return)
- SELECT pSessionId, pTenantId, B.po_id, B.po_item_id, C.so_id, C.so_item_id,
- B.gross_price_po, C.gross_sell_price,
- 0 as discount,
- 0 as margin_internal,
- 0 as margin_supp,
- 0 as sold_price_after_margin,
- C.qty_so,
- 0 as qty_return
- FROM pu_po_balance_item_consignment A
- JOIN pu_po_item B ON A.po_item_id = B.po_item_id AND A.status_item IN ('R', 'I')
- JOIN pu_po G ON G.po_id = B.po_id
- RIGHT JOIN sl_so_item C ON C.product_id = B.product_id
- JOIN m_product_custom E ON C.product_id = E.product_id
- JOIN m_product F ON F.product_id=C.product_id
- RIGHT JOIN sl_so D ON C.so_id=D.so_id
- WHERE
- C.so_id = vSoId AND
- E.flg_buy_konsinyasi = 'Y' AND
- B.gross_price_po IS NULL;
- IF EXISTS ( SELECT 1 FROM tt_pu_po_balance_item_consignment_sold WHERE session_id = pSessionId AND tenant_id = pTenantId AND so_id = vSoId ) THEN
- DELETE FROM tt_pu_po_balance_item_consignment_sold WHERE session_id = pSessionId AND tenant_id = pTenantId AND so_id = vSoId;
- RAISE EXCEPTION 'Order Magento % cannot be processed ', vSoNo
- USING HINT = 'There is sold product with no purchase data';
- ELSE
- DELETE FROM tt_pu_po_balance_item_consignment_sold WHERE session_id = pSessionId AND tenant_id = pTenantId AND so_id = vSoId;
- END IF;
- INSERT INTO tt_pu_po_balance_item_consignment_sold(
- session_id, tenant_id, supplier_id, po_id, po_item_id, so_id, so_item_id,
- normal_price, sold_price, discount, margin_internal, margin_supp,
- sold_price_after_margin, qty_so, qty_return, remark, do_id, do_item_id)
- SELECT pSessionId, pTenantId, G.partner_id, B.po_id, B.po_item_id, C.so_id, C.so_item_id,
- B.gross_price_po, C.gross_sell_price,
- 0 as discount,
- 0 as margin_internal,
- 0 as margin_supp,
- 0 as sold_price_after_margin,
- C.qty_so,
- 0 as qty_return,
- '' as remark,
- H.do_id,
- H.do_item_id
- FROM pu_po_balance_item_consignment A
- JOIN pu_po_item B ON A.po_item_id = B.po_item_id AND A.status_item IN ('R', 'I')
- JOIN pu_po G ON G.po_id = B.po_id
- JOIN sl_so_item C ON C.product_id = B.product_id
- JOIN m_product_custom E ON C.product_id = E.product_id
- JOIN m_product F ON F.product_id=C.product_id
- JOIN sl_so D ON C.so_id=D.so_id
- JOIN sl_do_item H ON H.ref_id = C.so_item_id AND H.do_id = vDoId
- WHERE
- C.so_id = vSoId AND
- E.flg_buy_konsinyasi = 'Y' AND B.gross_price_po IS NOT NULL;
- UPDATE tt_pu_po_balance_item_consignment_sold
- SET discount = ((normal_price-sold_price)/normal_price)*100
- WHERE session_id = pSessionId AND tenant_id = pTenantId AND so_id = vSoId;
- UPDATE tt_pu_po_balance_item_consignment_sold W SET
- margin_internal = Z.internal_percentage,
- margin_supp = Z.supplier_percentage
- FROM
- (select B.session_id, B.tenant_id, B.po_id, B.po_item_id, B.so_item_id, A.internal_percentage, A.supplier_percentage
- from pr_m_margin_sell_price A JOIN tt_pu_po_balance_item_consignment_sold B ON A.partner_id = B.supplier_id
- WHERE discount BETWEEN disc_from AND disc_to ) Z
- WHERE
- W.session_id = Z.session_id
- AND W.tenant_id = Z.tenant_id
- AND W.po_id = Z.po_id
- AND W.po_item_id = Z.po_item_id
- AND W.so_item_id = Z.so_item_id;
- UPDATE tt_pu_po_balance_item_consignment_sold SET
- remark = 'MARGIN NOT SET UP'
- WHERE session_id = pSessionId
- AND tenant_id = pTenantId
- AND margin_internal=0
- AND margin_supp=0;
- UPDATE tt_pu_po_balance_item_consignment_sold SET sold_price_after_margin = margin_supp * 0.01 * sold_price
- WHERE session_id = pSessionId AND tenant_id = pTenantId;
- --Cek Partner Id ke Master Partner Konsinyasi Manual
- SELECT partner_id INTO vPartnerIdKonsinyasiManual
- FROM sl_so A
- INNER JOIN sl_do b ON a.so_id = b.ref_id
- WHERE b.ref_doc_type_id = vSalesOrderDocTypeId AND b.ref_id = vSoId;
- IF EXISTS ( SELECT 1 FROM m_partner_konsinyasi_manual WHERE partner_id = vPartnerIdKonsinyasiManual AND active <> 'N') AND
- EXISTS (SELECT 1 FROM sl_so_ext WHERE so_id = vSoId AND flg_manual_consignment = 'Y') THEN
- INSERT INTO pu_po_balance_item_consignment_sold_manual(
- tenant_id, supplier_id, po_id, po_item_id, so_id, so_item_id,
- normal_price, normal_price_correction, sold_price, sold_price_used, discount, margin_internal, margin_supp, margin_supp_correction,
- sold_price_after_margin, qty_so, qty_return, version, create_datetime, create_user_id, update_datetime, update_user_id, remark,
- do_id, do_item_id,
- flg_calculate_margin)
- SELECT tenant_id, supplier_id, po_id, po_item_id, so_id, so_item_id,
- normal_price, normal_price, sold_price, sold_price, discount, margin_internal, margin_supp, margin_supp,
- sold_price_after_margin, qty_so, qty_return, 0, vDatetime, vUserId, vDatetime, vUserId, remark, do_id, do_item_id,
- vFlgCalculateMargin
- FROM tt_pu_po_balance_item_consignment_sold
- WHERE session_id = pSessionId AND tenant_id = pTenantId;
- ELSE
- INSERT INTO pu_po_balance_item_consignment_sold(
- tenant_id, supplier_id, po_id, po_item_id, so_id, so_item_id,
- normal_price, normal_price_correction, sold_price, sold_price_used, discount, margin_internal, margin_supp, margin_supp_correction,
- sold_price_after_margin, qty_so, qty_return, version, create_datetime, create_user_id, update_datetime, update_user_id, remark)
- SELECT tenant_id, supplier_id, po_id, po_item_id, so_id, so_item_id,
- normal_price, normal_price, sold_price, sold_price, discount, margin_internal, margin_supp, margin_supp,
- sold_price_after_margin, qty_so, qty_return, 0, vDatetime, vUserId, vDatetime, vUserId, remark
- FROM tt_pu_po_balance_item_consignment_sold
- WHERE session_id = pSessionId AND tenant_id = pTenantId;
- END IF;
- DELETE FROM tt_pu_po_balance_item_consignment_sold WHERE session_id = pSessionId AND tenant_id = pTenantId;
- DELETE FROM tt_journal_trx_item WHERE session_id = pSessionId;
- END;
- $BODY$
- LANGUAGE plpgsql VOLATILE
- COST 100;
- /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement