/*--============================================ZORAN instace logic added on 17OCT2011========================
ELSIF p_instance_name = 'ZORAN' THEN
FND_FILE.PUT_LINE(FND_FILE.LOG,'Importing ZORAN instace');
import_zoran(p_rec_status => 'E'
,p_instance_name => p_instance_name
,x_errbuf => lc_errbuf
,x_retcode => ln_retcode
,x_header_cnt => ln_po_header_cnt
,x_lines_cnt => ln_po_lines_cnt
,x_dist_cnt => ln_po_dist_cnt
,x_req_id => ln_imp_req_id);
*/
CREATE OR REPLACE PACKAGE XXCSR_PO_PUR_ORDR_IMPORT_PKG AS
-- +==============================================================================+
-- | Oracle Solution Services India PvMSIT. Ltd., India |
-- +==============================================================================+
-- | |
-- |$Id:$ |
-- | FILENAME |
-- | XXCSR_PO_PUR_ORDR_IMPORT_PKG.sql |
-- | |
-- | Description: |
-- | Package specification to import Purchase Orders data |
-- | |
-- | NOTES |
-- | Created by Amod Joshi |
-- | |
-- | History: |
-- | |
-- | Version Date Author Remarks |
-- | Draft 1A 25-SEP-2009 Amod Joshi Initial draft version |
-- +==============================================================================+
PROCEDURE interface_table_summary(x_errbuf OUT VARCHAR2
,x_retcode OUT NUMBER
,p_interface_table IN VARCHAR2
,p_request_id IN NUMBER
,p_total_record_count IN NUMBER);
PROCEDURE main
(x_errbuf OUT NOCOPY VARCHAR2
,x_retcode OUT NOCOPY NUMBER
,p_data_file1 IN VARCHAR2
,p_data_file2 IN VARCHAR2
,p_data_file3 IN VARCHAR2
,p_instance_name IN VARCHAR2
,p_process_error IN VARCHAR2
);
END XXCSR_PO_PUR_ORDR_IMPORT_PKG;
/
SHOW ERRORS;
---EXIT;
-- +=================================================================+
-- | End of Script |
-- +=================================================================+
create or replace
PACKAGE BODY XXCSR_PO_PUR_ORDR_IMPORT_PKG AS
-- +==============================================================================+
-- | Oracle Solution Services India PvMSIT. Ltd., India |
-- +==============================================================================+
-- | |
-- |$Id:$ |
-- | FILENAME |
-- | XXCSR_PO_PUR_ORDR_IMPORT_PKG.sql |
-- | |
-- | Description: |
-- | Package body to import Purchase Orders data |
-- | |
-- | NOTES |
-- | Created by Amod Joshi |
-- | |
-- | History: |
-- | |
-- | Version Date Author Remarks |
-- | Draft 1A 25-SEP-2009 Amod Joshi Initial draft version |
-- | Draft 1B 02-FEB-2010 Nishka K.S Based on MDT 1.17 |
-- | Draft 1C 02-FEB-2010 Nishka K.S Based on MDT 1.18 |
-- | Draft 1D 12-FEB-2010 Nishka K.S Based on MDT 1.19 |
-- | Draft 1E 18-FEB-2010 Nishka K.S Based on MDT 1.20 |
-- | Draft 1F 19-FEB-2010 Nishka K.S Based on MDT 1.21 |
-- | Draft 1G 21-FEB-2010 Nishka K.S Based on MDT 1.22 |
-- | Draft 1H 23-FEB-2010 Nishka K.S Based on MDT 1.23 |
-- +==============================================================================+
gn_conc_req_id NUMBER := FND_GLOBAL.CONC_REQUEST_ID;
PROCEDURE interface_table_summary(x_errbuf OUT VARCHAR2
,x_retcode OUT NUMBER
,p_interface_table IN VARCHAR2
,p_request_id IN NUMBER
,p_total_record_count IN NUMBER)
-- +====================================================================+
-- | Name : interface_table_summary |
-- | |
-- | Description : This procedure is used to produce table data summary |
-- | |
-- | Parameters : p_interface_table IN VARCHAR2 |
-- | p_request_id IN NUMBER |
-- | p_total_record_count IN NUMBER |
-- | |
-- | Returns : None |
-- | |
-- +====================================================================+
IS
lv_stmt VARCHAR2(1500);
ln_error NUMBER := 0;
ln_valid NUMBER := 0;
ln_success NUMBER := 0;
ln_total NUMBER := 0;
ln_process NUMBER := 0;
TYPE lcu_summary_type IS REF CURSOR;
lcu_summary_rec lcu_summary_type;
gn_request_id NUMBER(15) := FND_GLOBAL.CONC_REQUEST_ID;
BEGIN
x_retcode := 0;
ln_total := p_total_record_count;
lv_stmt := 'SELECT count(*) '||
--',SUM(DECODE(record_status,''E'',1,0))'||
--',SUM(DECODE(record_status,''C'',1,0) + DECODE(record_status,''P'',1,0))'||
--',SUM(DECODE(record_status,record_status,1)) '||
' FROM '||p_interface_table||
' WHERE request_id ='||p_request_id||
' AND process_code != ''ACCEPTED''';
OPEN lcu_summary_rec FOR lv_stmt;
LOOP
EXIT WHEN lcu_summary_rec%NOTFOUND;
FETCH lcu_summary_rec INTO ln_error;
END loop;
CLOSE lcu_summary_rec;
--ln_process := ln_success + ln_valid;
FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'=====================================================');
FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'Summary for interim table : '||p_interface_table);
FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'=====================================================');
FND_FILE.PUT_LINE(FND_FILE.OUTPUT,' Records Loaded : '||NVL(ln_total,0));
FND_FILE.PUT_LINE(FND_FILE.OUTPUT,' Records Errored : '||NVL(ln_error,0));
FND_FILE.PUT_LINE(FND_FILE.OUTPUT,' Records Processed : '||NVL((ln_total-ln_error),0));
FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'=====================================================');
IF ln_error = ln_total AND ln_error > 0 THEN
x_errbuf := 'All records have errored';
x_retcode := 2;
ELSIF ln_error > 0 THEN
x_errbuf := 'Some records have errored';
x_retcode := 1;
ELSIF ln_success = ln_total THEN
x_retcode := 0;
END IF;
EXCEPTION
WHEN OTHERS THEN
x_retcode := 2;
x_errbuf := SUBSTR(SQLERRM,1,500);
FND_FILE.PUT_LINE(FND_FILE.OUTPUT, x_errbuf);
END interface_table_summary;
PROCEDURE import_sirf
(p_rec_status IN VARCHAR2
,p_instance_name IN VARCHAR2
,x_errbuf OUT NOCOPY VARCHAR2
,x_retcode OUT NOCOPY NUMBER
,x_header_cnt OUT NOCOPY NUMBER
,x_lines_cnt OUT NOCOPY NUMBER
,x_dist_cnt OUT NOCOPY NUMBER
,x_req_id OUT NOCOPY NUMBER
)
IS
--
CURSOR lcu_po_header_data (pv_rec_status VARCHAR2)
IS
SELECT XHEC.rowid,XHEC.*
FROM xxcsr_po_headers_int XHEC
WHERE XHEC.record_status = pv_rec_status
AND XHEC.request_id = gn_conc_req_id
AND XHEC.source_instance = p_instance_name;
CURSOR lcu_po_lines_data (pv_rec_status VARCHAR2)
IS
SELECT XHEC.rowid,XHEC.*
FROM xxcsr_po_lines_int XHEC
WHERE XHEC.record_status = pv_rec_status
AND XHEC.request_id = gn_conc_req_id
AND XHEC.source_instance = p_instance_name;
CURSOR lcu_po_dist_data (pv_rec_status VARCHAR2)
IS
SELECT XHEC.rowid,XHEC.*
FROM xxcsr_po_distributions_int XHEC
WHERE XHEC.record_status = pv_rec_status
AND XHEC.request_id = gn_conc_req_id
AND XHEC.source_instance = p_instance_name;
CURSOR lcu_chk_currency (pv_currency_code VARCHAR2)
IS
SELECT currency_code
FROM fnd_currencies
WHERE currency_code = pv_currency_code;
CURSOR lcu_item_cat_id (pv_seg1 VARCHAR2,pv_seg2 VARCHAR2,pv_seg3 VARCHAR2,pv_seg4 VARCHAR2,pv_seg5 VARCHAR2)
IS
SELECT category_id
FROM mtl_categories
WHERE segment1 = pv_seg1
AND segment2 = pv_seg2
AND segment3 = pv_seg3
AND segment4 = pv_seg4
AND segment5 = pv_seg5;
CURSOR lcu_get_int_header_id (pv_po_number VARCHAR2)
IS
SELECT interface_header_id
FROM po_headers_interface
WHERE document_num = pv_po_number
ORDER BY 1 DESC;
CURSOR lcu_get_int_line_id (pv_po_number VARCHAR2
,pv_po_line_number VARCHAR2
,p_shipment_num VARCHAR2)
IS
SELECT interface_line_id
FROM po_lines_interface
WHERE document_num = pv_po_number
AND line_num = pv_po_line_number
AND shipment_num = p_shipment_num;
CURSOR lcu_account_id (pv_seg1 VARCHAR2,pv_seg2 VARCHAR2,pv_seg3 VARCHAR2,pv_seg4 VARCHAR2,pv_seg5 VARCHAR2,pv_seg6 VARCHAR2,pv_seg7 VARCHAR2)
IS
SELECT code_combination_id
FROM gl_code_combinations_kfv
WHERE segment1 = pv_seg1
AND segment2 = pv_seg2
AND segment3 = pv_seg3
AND segment4 = pv_seg4
AND segment5 = pv_seg5
AND segment6 = pv_seg6
AND segment7 = pv_seg7;
CURSOR lcu_charge_account_id (p_ship_location NUMBER, p_second_inv VARCHAR2)
IS
SELECT GCC.code_combination_id
FROM gl_code_combinations gcc
,mtl_secondary_inventories msi
,hr_locations hl
WHERE MSI.material_account = GCC.code_combination_id
AND MSI.secondary_inventory_name = p_second_inv
AND MSI.organization_id = HL.inventory_organization_id
AND HL.location_id = p_ship_location;
CURSOR lcu_get_sob_id (pv_sob_name VARCHAR2)
IS
SELECT set_of_books_id
FROM gl_sets_of_books
WHERE name = pv_sob_name;
--sjacob commented below
CURSOR lcu_location_id (pv_loc_code VARCHAR2)
IS
SELECT location_id
FROM hr_locations
WHERE location_code = pv_loc_code;
CURSOR lcu_item_id(p_seg1 IN VARCHAR2
,p_seg2 IN VARCHAR2
,p_inv_org IN VARCHAR2)
IS
SELECT MSIB.inventory_item_id
FROM mtl_system_items_b MSIB
,mtl_parameters MP
WHERE MP.organization_id = MSIB.organization_id
AND MSIB.segment1 = p_seg1
AND NVL(MSIB.segment2,-99) = NVL(p_seg2,-99)
AND MP.organization_code = p_inv_org;
CURSOR lcu_item_attr17(p_seg1 IN VARCHAR2
,p_seg2 IN VARCHAR2)
IS
SELECT MSI.attribute17
FROM mtl_system_items MSI
,mtl_parameters MP
WHERE MP.organization_id = MSI.organization_id
AND MSI.segment1 = p_seg1
AND MP.organization_id = MP.master_organization_id
AND NVL(MSI.segment2,'XX') = NVL(p_seg2,'XX');
/*
CURSOR lcu_vendor_der(p_vendor IN VARCHAR2)
IS
SELECT vendor_id
FROM po_vendors
WHERE attribute15 = p_vendor;
*/
CURSOR lcu_vendor_tsmc(p_vendor IN VARCHAR2)
IS
SELECT vendor_id
FROM po_vendors
WHERE vendor_name = p_vendor;
CURSOR lcu_vendor_der(p_srf_segment1 IN VARCHAR2)
IS
SELECT PV.vendor_id
FROM po_vendors PV
,fnd_lookup_values FLV
WHERE PV.segment1 = FLV.description
AND FLV.meaning = p_srf_segment1
AND PV.enabled_flag = 'Y'
AND SYSDATE BETWEEN NVL(PV.start_date_active,SYSDATE) AND NVL(PV.end_date_active,SYSDATE)
AND SYSDATE BETWEEN NVL(FLV.start_date_active,SYSDATE) AND NVL(FLV.end_date_active,SYSDATE)
AND FLV.enabled_flag = 'Y'
AND FLV.lookup_type = 'XXSIRF_CNV_SUPPLIER_NUMBERS';
CURSOR lcu_hr_loc(p_location_code IN VARCHAR2)
IS
SELECT HLA.location_id
FROM hr_locations_all HLA
WHERE HLA.location_code = p_location_code;
CURSOR lcu_hr_loc_org(p_location_code IN VARCHAR2)
IS
SELECT HLA.location_id
,OOD.organization_code
FROM hr_locations_all HLA
,org_organization_definitions OOD
WHERE HLA.location_code = p_location_code
AND OOD.organization_id = HLA.inventory_organization_id;
CURSOR lcu_ship_po_line(p_po_number IN VARCHAR2
,p_shipment_num IN NUMBER
,p_line_num IN NUMBER)
IS
SELECT ship_to_location
FROM xxcsr_po_lines_int XPLI
WHERE XPLI.po_number = p_po_number
AND XPLI.shipment_num = p_shipment_num
AND XPLI.line_num = p_line_num
AND XPLI.source_instance = p_instance_name;
CURSOR lcu_func_curr(p_org_id IN NUMBER)
IS
SELECT GL.currency_code
FROM hr_operating_units HOU
,gl_ledgers GL
WHERE GL.ledger_id = HOU.set_of_books_id
AND HOU.organization_id = p_org_id;
CURSOR lcu_get_segment2 (pc_item_type VARCHAR2
,pc_org_code VARCHAR2
,pc_product_family VARCHAR2
)
IS
SELECT item_segment2
-- ,bom_check
--,template_name
FROM xxcsr_item_conv_map_int
WHERE item_type = pc_item_type
AND organization_code = pc_org_code
AND product_family = pc_product_family
AND instance_name = 'SIRF'
AND bom_check IS NULL;
CURSOR lcu_po_item_line(p_po_number IN VARCHAR2)
IS
SELECT XPLI.itm_seg1_item_num
,XPLI.attr18
,XPLI.item_type
,XPLI.item_org_name
FROM xxcsr_po_lines_int XPLI
WHERE XPLI.po_number = p_po_number
AND XPLI.itm_seg1_item_num IS NOT NULL
AND XPLI.source_instance = p_instance_name;
CURSOR lcu_get_product_family (pc_seg1 VARCHAR2)
IS
SELECT MSIB.attribute18
FROM mtl_system_items_b MSIB
,org_organization_definitions OOD
WHERE MSIB.organization_id = OOD.organization_id
AND OOD.organization_code = 'CMO'
AND MSIB.segment1 = pc_seg1;
CURSOR lcu_check_lines(p_po_number IN VARCHAR2)
IS
SELECT 1
FROM xxcsr_po_lines_int XPLI
WHERE XPLI.po_number = p_po_number;
CURSOR lcu_prim_uom(p_org_code IN VARCHAR2
,p_item_id IN NUMBER)
IS
SELECT MSIB.primary_unit_of_measure
FROM mtl_system_items_b MSIB
,mtl_parameters MP
WHERE MSIB.inventory_item_id = p_item_id
AND MSIB.organization_id = MP.master_organization_id
AND MP.organization_code = p_org_code;
CURSOR lcu_vendor_site(p_vendor_id IN NUMBER
,p_org_id IN NUMBER)
IS
SELECT POVS.vendor_site_code,POVS.vendor_site_id
FROM po_vendor_sites_all POVS
WHERE POVS.vendor_id = p_vendor_id
AND POVS.org_id = p_org_id;
CURSOR lcu_supsite_attr15(p_doc_num VARCHAR2
,p_lin_num VARCHAR2
,p_shp_num VARCHAR2)
IS
SELECT PVS.attribute15
FROM po_headers_interface PHI
,po_lines_interface PLI
,po_vendor_sites_all PVS
WHERE PHI.interface_header_id = PLI.interface_header_id
AND PHI.vendor_id = PVS.vendor_id
AND PHI.vendor_id = PVS.vendor_id
AND PVS.org_id = PHI.org_id
AND PVS.vendor_site_code = PHI.vendor_site_code
AND PLI.document_num = p_doc_num
AND PLI.line_num = p_lin_num
AND PLI.shipment_num = p_shp_num;
lc_itm_chk_flag VARCHAR2(1);
lr_po_header_data lcu_po_header_data%ROWTYPE;
lr_po_lines_data lcu_po_lines_data%ROWTYPE;
lr_po_dist_data lcu_po_dist_data%ROWTYPE;
lc_errmsg VARCHAR2(2000);
lc_errloc VARCHAR2(1000);
ln_request_id NUMBER;
lc_phase VARCHAR2(500);
lc_status VARCHAR2(500);
lc_devpha VARCHAR2(500);
lc_devsta VARCHAR2(500);
lc_mesg VARCHAR2(50);
lb_wait BOOLEAN;
ln_org_id NUMBER;
ln_item_org_id NUMBER;
ln_agent_id NUMBER;
lc_currency_code VARCHAR2(15);
ln_vendor_id NUMBER;
lc_payment_terms VARCHAR2(50);
lc_freight_terms VARCHAR2(25);
ln_item_id NUMBER;
lc_item_seg2 VARCHAR2(40);
lc_cat_seg1 VARCHAR2(40);
lc_cat_seg2 VARCHAR2(40);
lc_cat_seg3 VARCHAR2(40);
lc_cat_seg4 VARCHAR2(40);
lc_cat_seg5 VARCHAR2(40);
lc_inv_org_code VARCHAR2(30);
ln_cat_id NUMBER;
ln_po_int_header_id NUMBER;
ln_po_int_line_id NUMBER;
ln_tax_code_id NUMBER;
ln_charge_acct_id NUMBER;
ln_budget_acct_id NUMBER;
ln_accrual_acct_id NUMBER;
ln_variance_acct_id NUMBER;
ln_sob_id NUMBER;
ln_location_id NUMBER;
ln_person_org_id NUMBER;
ln_person_id NUMBER;
ln_bu_id NUMBER;
lc_chr_acc_seg1 VARCHAR2(40);
lc_chr_acc_seg2 VARCHAR2(40);
lc_chr_acc_seg3 VARCHAR2(40);
lc_chr_acc_seg4 VARCHAR2(40);
lc_chr_acc_seg5 VARCHAR2(40);
lc_chr_acc_seg6 VARCHAR2(40);
lc_chr_acc_seg7 VARCHAR2(40);
lc_bud_acc_seg1 VARCHAR2(40);
lc_bud_acc_seg2 VARCHAR2(40);
lc_bud_acc_seg3 VARCHAR2(40);
lc_bud_acc_seg4 VARCHAR2(40);
lc_bud_acc_seg5 VARCHAR2(40);
lc_bud_acc_seg6 VARCHAR2(40);
lc_bud_acc_seg7 VARCHAR2(40);
lc_accr_acc_seg1 VARCHAR2(40);
lc_accr_acc_seg2 VARCHAR2(40);
lc_accr_acc_seg3 VARCHAR2(40);
lc_accr_acc_seg4 VARCHAR2(40);
lc_accr_acc_seg5 VARCHAR2(40);
lc_accr_acc_seg6 VARCHAR2(40);
lc_accr_acc_seg7 VARCHAR2(40);
lc_var_acc_seg1 VARCHAR2(40);
lc_var_acc_seg2 VARCHAR2(40);
lc_var_acc_seg3 VARCHAR2(40);
lc_var_acc_seg4 VARCHAR2(40);
lc_var_acc_seg5 VARCHAR2(40);
lc_var_acc_seg6 VARCHAR2(40);
lc_var_acc_seg7 VARCHAR2(40);
lc_seg3_value VARCHAR2(40);
lc_seg5_value VARCHAR2(40);
lb_success BOOLEAN;
lc_error_details VARCHAR2(4000);
lc_error VARCHAR2(4000);
lc_errbuf VARCHAR2(240);
ln_retcode NUMBER;
ln_header_cnt NUMBER;
ln_lines_cnt NUMBER;
ln_dist_cnt NUMBER;
ln_cur_org_id NUMBER;
lc_new_orgname VARCHAR2(240);
lc_item_segment2 VARCHAR2(40);
lc_new_glacct VARCHAR2(240);
lc_new_cat VARCHAR2(2000);
lc_new_del VARCHAR2(240);
lc_new_org_name VARCHAR2(270);
lc_new_sobname VARCHAR2(270);
lc_business_group VARCHAR2(270);
ln_bill_loc_id NUMBER;
ln_ship_loc_id NUMBER;
lc_inv_po_chk VARCHAR2(270);
lc_func_curr VARCHAR2(15);
lc_rate_type VARCHAR2(30);
ln_rate NUMBER;
lc_vendor_site_id NUMBER;
ld_rate_date DATE;
lc_new_ship VARCHAR2(240);
lc_new_bill VARCHAR2(240);
--lc_vendor_csr VARCHAR2(240);
lc_product_family VARCHAR2(240);
lc_line_exists VARCHAR2(1);
lc_vendor_site_code VARCHAR2(150);
lc_primary_uom VARCHAR2(25);
lc_line_ship_loc VARCHAR2(60);
lc_ship_org VARCHAR2(3);
lc_item_attr17 VARCHAR2(50);
lc_ship_via_lookup_code VARCHAR2(25);
ex_conc_error EXCEPTION;
--
BEGIN
ln_header_cnt := 0;
--Process Purchase Orders data
lc_errloc := 'Process purchase orders data';
FOR lr_po_header_data IN lcu_po_header_data (p_rec_status) LOOP
ln_org_id := NULL;
ln_agent_id := NULL;
ln_bu_id := NULL;
lc_currency_code := NULL;
ln_vendor_id := NULL;
lc_payment_terms := NULL;
lc_freight_terms := NULL;
lc_error_details := NULL;
lc_new_orgname := NULL;
lc_business_group := NULL;
ln_bill_loc_id := NULL;
ln_ship_loc_id := NULL;
lc_inv_po_chk := NULL;
lc_func_curr := NULL;
lc_rate_type := NULL;
ln_rate := NULL;
ld_rate_date := NULL;
lc_new_ship := NULL;
lc_new_bill := NULL;
--lc_vendor_csr := NULL;
lc_line_exists := NULL;
lc_vendor_site_code := NULL;
lc_vendor_site_id := NULL;
-- check if lines exist for this PO
OPEN lcu_check_lines(lr_po_header_data.po_number);
FETCH lcu_check_lines
INTO lc_line_exists;
CLOSE lcu_check_lines;
IF lc_line_exists IS NULL THEN
lc_error_details := lc_error_details||'No lines were found in the staging table for the given PO. ';
END IF;
lc_errloc := 'Operating unit related derivations';
lc_new_orgname := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_OPERATING_UNIT'
,'XXSIRF_CNV_OPERATING_UNIT'
,lr_po_header_data.operating_unit
);
IF lc_new_orgname IS NULL THEN
lc_error_details := lc_error_details||'Could not derive new operating unit for '||lr_po_header_data.operating_unit||'. ';
ELSE
ln_org_id := XXCSR_COMMON_PKG.get_organization_id(lc_new_orgname);
IF ln_org_id IS NULL THEN
lc_error_details := lc_error_details||'Could not derive org id for new operating unit '||lc_new_orgname||'. ';
ELSE
-- Compare functional and document currency
OPEN lcu_func_curr(ln_org_id);
FETCH lcu_func_curr
INTO lc_func_curr;
CLOSE lcu_func_curr;
IF lc_func_curr = lr_po_header_data.currency_code THEN
lc_rate_type := NULL;
ln_rate := NULL;
ld_rate_date := NULL;
ELSE
lc_rate_type := lr_po_header_data.rate_type;
ln_rate := lr_po_header_data.rate;
ld_rate_date := lr_po_header_data.rate_date;
END IF;
END IF;
END IF;
lc_errloc := 'Checking for inventory purchase orders';
lc_inv_po_chk := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_INV_SUPPLIERS'
,'XXSIRF_CNV_INV_SUPPLIERS'
,lr_po_header_data.vendor_name
);
IF lc_inv_po_chk IS NULL THEN
lc_error_details := lc_error_details||'Only inventory purchase orders will be migrated';
END IF;
IF lr_po_header_data.emp_bu_name IN ( 'CSR United States','CSR United Kingdom') THEN
lc_business_group := lr_po_header_data.emp_bu_name;
ELSE
lc_business_group := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_HR_BG'
,'XXSIRF_CNV_HR_BG'
,lr_po_header_data.emp_bu_name
);
END IF;
IF lc_business_group IS NULL THEN
lc_error_details := lc_error_details||'Mapping for Business Group '||lr_po_header_data.emp_bu_name||' could not be found. ';
ELSE
ln_bu_id := XXCSR_COMMON_PKG.get_business_group_id(lc_business_group);
IF ln_bu_id IS NULL THEN
lc_error_details:= lc_error_details||' Business Group ID for '||lc_business_group||' could not be derived. ';
ELSE
--Derive agent id
lc_errloc := 'Derive agent id';
ln_agent_id := XXCSR_COMMON_PKG.get_person_id (p_first_name => lr_po_header_data.emp_fname
,p_last_name => lr_po_header_data.emp_lname
,p_date_of_birth => lr_po_header_data.emp_dob
,p_business_group_id => ln_bu_id
);
IF ln_agent_id IS NULL THEN
lc_error_details := lc_error_details || ' Invalid agent (employee) details.';
END IF;
END IF;
END IF;
--Check currency code
lc_errloc := 'Check currency code';
OPEN lcu_chk_currency (lr_po_header_data.currency_code);
FETCH lcu_chk_currency
INTO lc_currency_code;
IF lcu_chk_currency%NOTFOUND THEN
lc_error_details := lc_error_details || ' Invalid currency code.';
END IF;
CLOSE lcu_chk_currency;
--Derive vendor id
lc_errloc := 'Derive vendor id';
IF lr_po_header_data.vendor_name_actual <> 'TSMC Ltd.' THEN
/*
lc_vendor_csr := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'NULL'
,p_sirf_lookup => 'XXSIRF_CNV_SUPPLIER_NUMBERS'
,p_old_value => lr_po_header_data.vendor_name
);
*/
IF lr_po_header_data.vendor_name IS NOT NULL THEN
OPEN lcu_vendor_der(lr_po_header_data.vendor_name);
FETCH lcu_vendor_der
INTO ln_vendor_id;
CLOSE lcu_vendor_der;
IF ln_vendor_id IS NULL THEN
lc_error_details := lc_error_details || ' Vendor not migrated.';
ELSE
OPEN lcu_vendor_site(ln_vendor_id,ln_org_id);
FETCH lcu_vendor_site INTO lc_vendor_site_code,lc_vendor_site_id;
CLOSE lcu_vendor_site;
IF lc_vendor_site_code IS NULL THEN
lc_error_details := lc_error_details || ' Vendor site code not found for vendor '||lr_po_header_data.vendor_name ||'. ';
END IF;
END IF;
END IF;
ELSE
OPEN lcu_vendor_tsmc('TAIWAN SEMICONDUCTOR MANUFACTURING CO LTD');
FETCH lcu_vendor_tsmc
INTO ln_vendor_id;
CLOSE lcu_vendor_tsmc;
IF ln_vendor_id IS NULL THEN
lc_error_details := lc_error_details || ' Vendor not migrated.';
END IF;
lc_vendor_site_code := 'ROC';
END IF;
lc_errloc := 'Check payment terms';
IF lr_po_header_data.payment_terms IS NOT NULL THEN
lc_payment_terms := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_SUPPLIER_PAYTERMS'
,p_sirf_lookup => 'XXSIRF_CNV_SUPPLIER_PAYTERMS'
,p_old_value => lr_po_header_data.payment_terms
);
IF lc_payment_terms IS NULL THEN
lc_error_details := lc_error_details || ' Invalid payment terms.';
END IF;
END IF;
--Check freight terms
lc_errloc := 'Check freight terms';
IF lr_po_header_data.freight_terms IS NOT NULL THEN
lc_freight_terms := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_FREIGHT_TERMS'
,p_sirf_lookup => 'XXSIRF_CNV_FREIGHT_TERMS'
,p_old_value => lr_po_header_data.freight_terms
);
IF lc_freight_tebms IS NULL THEN
lc_error_details := lc_error_details || ' Invalid freight terms.';
END IF;
END IF;
 { IF lr_po_header_data.ship_to_location IS NOT NULL THEN
lc_new_ship := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
&nbcp; &nbst; ,'XXCSR_CNV_DELIVER_LOCATIONS'
,'XXSIRF_CNV_DELIVER_LOCATIONS'
,lr_po_header_data.ship_to_location
);
IF lc_new_ship IS NULL THEN
lc_error_details := lc_error_details||'Could not derive new ship to location for '||lr_po_header_data.ship_to_location||' in XXSIRF_CNV_DELIVER_LOCATIONS. ';
ELSE
OPEN lcu_hr_loc(lc_new_ship);
FETCH lcu_hr_loc
INTO ln_ship_loc_id;
CLOSE lcu_hr_loc;
IF ln_ship_loc_id IS NULL THEN
lc_error_details := lc_error_details || 'Ship to location id could not be derived for '||lr_po_header_data.ship_to_location;
END IF;
END IF;
END IF;
IF lr_po_header_data.bill_to_location IS NOT NULL THEN
lc_new_bill := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_BILLTO_LOCATIONS'
,'XXSIRF_CNV_BILLTO_LOCATIONS'
,lr_po_header_data.bill_to_location
);
IF lc_new_bill IS NULL THEN
lc_error_details := lc_error_details||'Could not derive new bill to location for '||lr_po_header_data.bill_to_location||' in XXSIRF_CNV_BILLTO_LOCATIONS. ';
ELSE
OPEN lcu_hr_loc(lc_new_bill);
FETCH lcu_hr_loc
INTO ln_bill_loc_id;
CLOSE lcu_hr_loc;
IF ln_bill_loc_id IS NULL THEN
lc_error_details := lc_error_details || 'Bill to location id could not be derived for '||lr_po_header_data.bill_to_location;
END IF;
END IF;
END IF;
lc_ship_via_lookup_code := NULL;
IF lr_po_header_data.ship_via_lookup_code IS NOT NULL THEN
lc_ship_via_lookup_code := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_FREIGHT_CARRIER'
,'XXCSR_CNV_FREIGHT_CARRIER'
,lr_po_header_data.ship_via_lookup_code
);
END IF;
IF lc_error_details IS NULL THEN
--Insert purchase order header data in interface table
lc_errloc := 'Insert purchase order header data in interface table';
INSERT INTO po_headers_interface
(interface_header_id
,batch_id
,interface_source_code
,action
,process_code
,org_id
,document_type_code
,currency_code
,rate_type
,rate_date
,rate
,agent_id
,vendor_id
,vendor_site_code
,vendor_site_id
,ship_to_location_id
,bill_to_location_id
,payment_terms
,freight_terms
,approval_status
,approved_date
-- ,revised_date
-- ,revision_num
,confirming_order_flag
,comments
,acceptance_required_flag
,print_count
-- ,printed_date
,frozen_flag
,closed_code
,from_rfq_num
,from_type_lookup_code
,attribute_category
--,attribute1
-- ,attribute2
-- ,attribute3
--,global_attribute1
,pay_on_code
,last_update_date
,last_updated_by
,creation_date
,created_by
,document_num
,freight_carrier
)
VALUES
(po_headers_interface_s.nextval
,1
,'XXSIRF Conversion'
,'ORIGINAL'
,'PENDING'
,ln_org_id
,'STANDARD' -- lr_po_header_data.document_type_code
,lr_po_header_data.currency_code
,DECODE(lc_rate_type,'Corporate','User',lc_rate_type)
,ld_rate_date
,ln_rate
,ln_agent_id
,ln_vendor_id
,lc_vendor_site_code -- lr_po_header_data.vendor_site_code
,lc_vendor_site_id
,ln_ship_loc_id -- lr_po_header_data.ship_to_location
,ln_bill_loc_id -- lr_po_header_data.bill_to_location
,lc_payment_terms
,lc_freight_terms
,DECODE(lr_po_header_data.approval_status,'REQUIRES REAPPROVAL','INCOMPLETE',lr_po_header_data.approval_status)
,lr_po_header_data.approved_date
-- ,lr_po_header_data.revised_date
-- ,lr_po_header_data.revision_num
,lr_po_header_data.confirming_order_flag
,lr_po_header_data.comments
,lr_po_header_data.acceptance_required_flag
--,DECODE(lr_po_header_data.approval_status,'APPROVED',lr_po_header_data.print_count,0)
,DECODE(lr_po_header_data.approval_status,'APPROVED',1,0)
-- ,lr_po_header_data.printed_date
,lr_po_header_data.frozen_flag
,lr_po_header_data.closed_code
,lr_po_header_data.from_requisition_num
,lr_po_header_data.from_type_lookup_code
,lr_po_header_data.attribute_category
--,lr_po_header_data.sourcing_rule
-- ,lr_po_header_data.osp_flag
--,lr_po_header_data.mrp_flag
--,lr_po_header_data.po_total_plus_ipi_tax
,lr_po_header_data.pay_on_code
,SYSDATE
,fnd_global.user_id
,SYSDATE
,fnd_global.user_id
,lr_po_header_data.po_number
,lc_ship_via_lookup_code
);
UPDATE xxcsr_po_headers_int
SET record_status = 'C'
,request_id = FND_GLOBAL.conc_request_id
,error_message = NULL
WHERE rowid = lr_po_header_data.rowid;
COMMIT;
ln_header_cnt := ln_header_cnt + 1;
ELSE
UPDATE xxcsr_po_headers_int
SET record_status = 'E'
,request_id = FND_GLOBAL.conc_request_id
,error_message = lc_error_details
WHERE rowid = lr_po_header_data.rowid;
END IF; --lc_error_details IS NULL
COMMIT;
END LOOP;
COMMIT;
ln_lines_cnt := 0;
--Process Purchase Order Lines data
lc_errloc := 'Process purchase order lines data';
FOR lr_po_lines_data IN lcu_po_lines_data (p_rec_status)
LOOP
ln_org_id := NULL;
ln_item_org_id := NULL;
ln_item_id := NULL;
lc_item_seg2 := NULL;
lc_cat_seg1 := NULL;
lc_cat_seg2 := NULL;
lc_cat_seg3 := NULL;
lc_cat_seg4 := NULL;
lc_cat_seg5 := NULL;
ln_cat_id := NULL;
ln_po_int_header_id := NULL;
ln_tax_code_id := NULL;
lc_error_details := NULL;
lc_new_orgname := NULL;
lc_item_segment2 := NULL;
lc_new_glacct := NULL;
lc_new_cat := NULL;
lc_new_ship := NULL;
ln_ship_loc_id := NULL;
lc_new_org_name := NULL;
lc_primary_uom := NULL;
--Derive interface header id
lc_errloc := 'Derive interface header id';
OPEN lcu_get_int_header_id (lr_po_lines_data.po_number);
FETCH lcu_get_int_header_id
INTO ln_po_int_header_id;
CLOSE lcu_get_int_header_id;
IF ln_po_int_header_id IS NULL THEN
lc_error_details := lc_error_details || 'Could not derive interface header id. Header record may have error. ';
END IF;
FND_FILE.PUT_LINE(FND_FILE.LOG,'ln_po_int_header_id : ' || ln_po_int_header_id);
lc_errloc := 'Operating unit related derivations';
lc_new_orgname := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_OPERATING_UNIT'
,'XXSIRF_CNV_OPERATING_UNIT'
,lr_po_lines_data.org_name
);
IF lc_new_orgname IS NULL THEN
lc_error_details := lc_error_details||'Could not derive new operating unit for '||lr_po_lines_data.org_name||'. ';
ELSE
ln_org_id := XXCSR_COMMON_PKG.get_organization_id(lc_new_orgname);
IF ln_org_id IS NULL THEN
lc_error_details := lc_error_details||'Could not derive org id for new operating unit '||lc_new_orgname||'. ';
END IF;
END IF;
IF lr_po_lines_data.ship_to_location IS NOT NULL THEN
lc_new_ship := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_DELIVER_LOCATIONS'
,'XXSIRF_CNV_DELIVER_LOCATIONS'
,lr_po_lines_data.ship_to_location
);
IF lc_new_ship IS NULL THEN
lc_error_details := lc_error_details||'Could not derive new ship to location for '||lr_po_lines_data.ship_to_location||' in XXSIRF_CNV_DELIVER_LOCATIONS. ';
ELSE
OPEN lcu_hr_loc(lc_new_ship);
FETCH lcu_hr_loc
INTO ln_ship_loc_id;
CLOSE lcu_hr_loc;
IF ln_ship_loc_id IS NULL THEN
lc_error_details := lc_error_details || 'Ship to location id could not be derived for '||lr_po_lines_data.ship_to_location;
END IF;
END IF;
END IF;
IF lr_po_lines_data.ship_to_org IS NOT NULL THEN
lc_new_org_name := XXCSR_COMMON_PKG.get_organization_code (p_instance_name
,lr_po_lines_data.ship_to_org);
IF lc_new_org_name IS NULL THEN
lc_error_details := lc_error_details||'Mapping for organization '||lr_po_lines_data.ship_to_org||' not found in the table XXCSR_CNV_ORG_MAPPINGS. ';
END IF;
END IF;
lc_product_family := NULL;
-- IF lr_po_lines_data.itm_seg1_item_num IS NOT NULL THEN
lc_errloc := 'Derive inventory item id';
IF lr_po_lines_data.attr18 IS NULL THEN
OPEN lcu_get_product_family (lr_po_lines_data.itm_seg1_item_num);
FETCH lcu_get_product_family
INTO lc_product_family;
CLOSE lcu_get_product_family;
ELSE
lc_product_family := lr_po_lines_data.attr18;
END IF;
/*
OPEN lcu_get_segment2 (lr_po_lines_data.item_type
,lr_po_lines_data.item_org_name
,lc_product_family
);
FETCH lcu_get_segment2
INTO lc_item_segment2;
CLOSE lcu_get_segment2;
*/
IF lr_po_lines_data.item_type = 'DIE' THEN
lc_item_segment2 := 'PD';
ELSIF lr_po_lines_data.item_type = 'HYBRID' THEN
lc_item_segment2 := 'HY';
ELSIF lr_po_lines_data.item_type = 'SORTED-DIE' THEN
lc_item_segment2 := 'DI';
ELSIF lr_po_lines_data.item_type = 'WAFER' THEN
lc_item_segment2 := 'UW';
ELSIF lr_po_lines_data.item_type = 'SORTED-WAFER' THEN
lc_item_segment2 := 'WF';
ELSE
lc_item_segment2 := NULL;
END IF;
ln_item_id := NULL;
OPEN lcu_item_id(lr_po_lines_data.itm_seg1_item_num
,lc_item_segment2
,lc_new_org_name);
--,lr_po_lines_data.item_org_name);
FETCH lcu_item_id INTO ln_item_id;
CLOSE lcu_item_id;
IF ln_item_id IS NULL THEN
lc_error_details := lc_error_details || ' Inventory Item Not found - '|| NVL(lc_item_attr17,lr_po_lines_data.itm_seg1_item_num)||'.';
ELSE
-- DERIVE primary UOM for master item
IF lc_new_org_name IS NOT NULL THEN
OPEN lcu_prim_uom(lc_new_org_name
,ln_item_id);
FETCH lcu_prim_uom
INTO lc_primary_uom;
CLOSE lcu_prim_uom;
IF lc_primary_uom IS NULL THEN
lc_error_details := lc_error_details || 'Primary UOM code for the master item could not be derived';
END IF;
END IF;
END IF;
-- END IF;
lc_errloc := 'Derive new GL account';
lc_new_cat := 'INVENTORY.';
IF lr_po_lines_data.inventory_item_flag = 'N' THEN
UPDATE xxcsr_po_distributions_int
SET destination_type_code = 'EXPENSE'
WHERE po_number = lr_po_lines_data.po_number
AND po_line_number = lr_po_lines_data.line_num
AND shipment_num = lr_po_lines_data.shipment_num
AND source_instance = p_instance_name;
ELSE
UPDATE xxcsr_po_distributions_int
SET destination_type_code = 'INVENTORY'
WHERE po_number = lr_po_lines_data.po_number
AND po_line_number = lr_po_lines_data.line_num
AND shipment_num = lr_po_lines_data.shipment_num
AND source_instance = p_instance_name;
END IF;
IF lc_error_details IS NULL THEN
--Insert purchase order lines data in interface table
lc_errloc := 'Insert purchase order lines data in interface table';
FND_FILE.PUT_LINE(FND_FILE.LOG,'Inserting in lines');
INSERT INTO po_lines_interface
(interface_line_id
,interface_header_id
,action
,process_code
,document_num
,line_num
,organization_id
,shipment_num
,shipment_type
,contract_num
,line_type
,item_id
,category
,item_description
,vendor_product_num
,unit_of_measure
,quantity
,unit_price
,list_price_per_unit
,allow_price_override_flag
,negotiated_by_preparer_flag
,note_to_vendor
,taxable_flag
-- ,tax_name
,type_1099
,capital_expense_flag
,price_type
,closed_code
,closed_reason
,closed_date
,closed_by
,over_tolerance_error_flag
,line_attribute_category_lines
-- ,line_attribute1
-- ,line_attribute2
-- ,line_attribute3
-- ,line_attribute4
-- ,line_attribute5
-- ,line_attribute6
-- ,line_attribute7
-- ,line_attribute8
-- ,line_attribute9
--,global_attribute1
-- ,tax_code_id
,secondary_unit_of_measure
,secondary_quantity
,inspection_required_flag
,receipt_required_flag
,invoice_close_tolerance
,receive_close_tolerance
,need_by_date
,promised_date
,consigned_flag
,base_unit_price
,last_update_date
,last_updated_by
,creation_date
,created_by
,ship_to_location_id
,ship_to_organization_code
)
VALUES
(po_lines_interface_s.nextval
,ln_po_int_header_id
,'ORIGINAL'
,'PENDING'
,lr_po_lines_data.po_number
,lr_po_lines_data.line_num
,ln_org_id
,lr_po_lines_data.shipment_num
,lr_po_lines_data.shipment_type
,lr_po_lines_data.contract_num
,lr_po_lines_data.line_type
,ln_item_id
,lc_new_cat
,lr_po_lines_data.item_description
,lr_po_lines_data.vendor_product_num
,lc_primary_uom -- lr_po_lines_data.unit_of_measure
,lr_po_lines_data.quantity
,lr_po_lines_data.unit_price
,lr_po_lines_data.list_price_per_unit
,lr_po_lines_data.allow_price_override_flag
,lr_po_lines_data.negotiated_by_preparer_flag
,lr_po_lines_data.note_to_vendor
,lr_po_lines_data.taxable_flag
-- ,lr_po_lines_data.tax_name
,lr_po_lines_data.type_1099
,lr_po_lines_data.capital_expense_flag
,lr_po_lines_data.price_type
,lr_po_lines_data.closed_code
,lr_po_lines_data.closed_reason
,lr_po_lines_data.closed_date
,lr_po_lines_data.closed_by
,lr_po_lines_data.over_tolerance_error_flag
,lr_po_lines_data.line_attribute_category_lines
-- ,lr_po_lines_data.att1_item_number
-- ,lr_po_lines_data.att2_manufacturer
-- ,lr_po_lines_data.att3_manufacturer_part_no
-- ,lr_po_lines_data.att4_vendor_name
-- ,lr_po_lines_data.att5_last_po_price
-- ,lr_po_lines_data.att6_last_transaction_qty
-- ,lr_po_lines_data.att7_last_vendor_name
-- ,lr_po_lines_data.att8_item_id
-- ,lr_po_lines_data.att9_vendor_name
--,lr_po_lines_data.fisc_classification_code
-- ,ln_tax_code_id commented as per R04
,lr_po_lines_data.secondary_unit_of_measure
,lr_po_lines_data.secondary_quantity
,lr_po_lines_data.inspection_required_flag
,lr_po_lines_data.receipt_required_flag
,lr_po_lines_data.invoice_close_tolerance
,lr_po_lines_data.receive_close_tolerance
,lr_po_lines_data.need_by_date
,lr_po_lines_data.promised_date
,lr_po_lines_data.consigned_flag
,lr_po_lines_data.base_unit_price
,SYSDATE
,fnd_global.user_id
,SYSDATE
,fnd_global.user_id
,ln_ship_loc_id
,lc_new_org_name
);
UPDATE xxcsr_po_lines_int
SET record_status = 'C'
,request_id = FND_GLOBAL.conc_request_id
,error_message = NULL
WHERE rowid = lr_po_lines_data.rowid;
COMMIT;
ln_lines_cnt := ln_lines_cnt + 1;
ELSE
UPDATE xxcsr_po_lines_int
SET record_status = 'E'
,request_id = FND_GLOBAL.conc_request_id
,error_message = lc_error_details
WHERE rowid = lr_po_lines_data.rowid;
IF ln_po_int_header_id IS NOT NULL THEN
UPDATE xxcsr_po_headers_int
SET record_status = 'E'
,error_message = error_message||'error in lines record'
WHERE po_number = lr_po_lines_data.po_number
AND source_instance = p_instance_name;
DELETE FROM po_headers_interface
WHERE interface_header_id = ln_po_int_header_id;
ln_header_cnt := ln_header_cnt - 1;
END IF;
END IF; --lc_error_details IS NULL
COMMIT;
END LOOP;
COMMIT;
ln_dist_cnt := 0;
--Process Purchase Order distributions data
lc_errloc := 'Process purchase order distributions data';
FOR lr_po_dist_data IN lcu_po_dist_data (p_rec_status)
LOOP
ln_org_id := NULL;
ln_sob_id := NULL;
ln_location_id := NULL;
lc_inv_org_code := NULL;
ln_person_org_id := NULL;
ln_person_id := NULL;
lc_error_details := NULL;
lc_new_orgname := NULL;
lc_new_del := NULL;
lc_new_org_name := NULL;
lc_new_sobname := NULL;
ln_po_int_line_id := NULL;
ln_po_int_header_id := NULL;
lc_business_group := NULL;
ln_bu_id := NULL;
lc_chr_acc_seg1 := NULL;
lc_chr_acc_seg2 := NULL;
lc_chr_acc_seg3 := NULL;
lc_chr_acc_seg4 := NULL;
lc_chr_acc_seg5 := NULL;
lc_chr_acc_seg6 := NULL;
lc_chr_acc_seg7 := NULL;
lc_bud_acc_seg1 := NULL;
lc_bud_acc_seg2 := NULL;
lc_bud_acc_seg3 := NULL;
lc_bud_acc_seg4 := NULL;
lc_bud_acc_seg5 := NULL;
lc_bud_acc_seg6 := NULL;
lc_bud_acc_seg7 := NULL;
lc_accr_acc_seg1 := NULL;
lc_accr_acc_seg2 := NULL;
lc_accr_acc_seg3 := NULL;
lc_accr_acc_seg4 := NULL;
lc_accr_acc_seg5 := NULL;
lc_accr_acc_seg6 := NULL;
lc_accr_acc_seg7 := NULL;
lc_var_acc_seg1 := NULL;
lc_var_acc_seg2 := NULL;
lc_var_acc_seg3 := NULL;
lc_var_acc_seg4 := NULL;
lc_var_acc_seg5 := NULL;
lc_var_acc_seg6 := NULL;
lc_var_acc_seg7 := NULL;
ln_charge_acct_id := NULL;
ln_budget_acct_id := NULL;
ln_accrual_acct_id := NULL;
ln_variance_acct_id := NULL;
lc_seg3_value := NULL;
lc_seg5_value := NULL;
--Derive interface header id
lc_errloc := 'Derive interface header id';
OPEN lcu_get_int_header_id (lr_po_dist_data.po_number);
FETCH lcu_get_int_header_id
INTO ln_po_int_header_id;
CLOSE lcu_get_int_header_id;
IF ln_po_int_header_id IS NULL THEN
lc_error_details := lc_error_details || 'Could not derive interface header id. Header record may have error. ';
END IF;
--Derive interface line id
lc_errloc := 'Derive interface line id';
OPEN lcu_get_int_line_id (lr_po_dist_data.po_number
,lr_po_dist_data.po_line_number
,lr_po_dist_data.shipment_num);
FETCH lcu_get_int_line_id
INTO ln_po_int_line_id;
CLOSE lcu_get_int_line_id;
IF ln_po_int_line_id IS NULL THEN
lc_error_details := lc_error_details || 'Could not derive interface line id. Header/Line record may have error. ';
END IF;
lc_errloc := 'Operating unit related derivations';
lc_new_orgname := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_OPERATING_UNIT'
,'XXSIRF_CNV_OPERATING_UNIT'
,lr_po_dist_data.org_name
);
IF lc_new_orgname IS NULL THEN
lc_error_details := lc_error_details||'Could not derive new operating unit for '||lr_po_dist_data.org_name||'. ';
ELSE
ln_org_id := XXCSR_COMMON_PKG.get_organization_id(lc_new_orgname);
IF ln_org_id IS NULL THEN
lc_error_details := lc_error_details||'Could not derive org id for new operating unit '||lc_new_orgname||'. ';
END IF;
END IF;
--Derive sob id
lc_new_sobname := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_SOB_NAME'
,'XXSIRF_CNV_SOB_NAME'
,lr_po_dist_data.set_of_books
);
IF lc_new_sobname IS NULL THEN
lc_error_details := lc_error_details||'Could not derive new sob for '||lr_po_dist_data.set_of_books||' in XXSIRF_CNV_SOB_NAME. ';
ELSE
lc_errloc := 'Derive sob id';
OPEN lcu_get_sob_id (lc_new_sobname);
FETCH lcu_get_sob_id
INTO ln_sob_id;
CLOSE lcu_get_sob_id;
IF ln_sob_id IS NULL THEN
lc_error_details := lc_error_details || ' Invalid sets of books name- '||lc_new_sobname;
END IF;
END IF;
IF lr_po_dist_data.deliver_to_location IS NOT NULL THEN
lc_new_del := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_DELIVER_LOCATIONS'
,'XXSIRF_CNV_DELIVER_LOCATIONS'
,lr_po_dist_data.deliver_to_location
);
IF lc_new_del IS NULL THEN
lc_error_details := lc_error_details||'Could not derive new deliver to location for '||lr_po_dist_data.deliver_to_location||' in XXSIRF_CNV_DELIVER_LOCATIONS. ';
ELSE
--Derive deliver to location id
lc_errloc := 'Derive deliver to location id';
OPEN lcu_location_id (lc_new_del);
FETCH lcu_location_id
INTO ln_location_id;
CLOSE lcu_location_id;
IF ln_location_id IS NULL THEN
lc_error_details := lc_error_details || ' Invalid deliver to location code.';
END IF;
END IF;
END IF;
IF lr_po_dist_data.destination_organization IS NOT NULL THEN
lc_new_org_name := XXCSR_COMMON_PKG.get_organization_code (p_instance_name
,lr_po_dist_data.destination_organization);
IF lc_new_org_name IS NULL THEN
lc_error_details := lc_error_details||'Mapping for organization '||lr_po_dist_data.destination_organization||' not found in the table XXCSR_CNV_ORG_MAPPINGS. ';
END IF;
END IF;
--Derive deliver to person id
IF lr_po_dist_data.delv_per_fname IS NOT NULL THEN
lc_business_group := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_HR_BG'
,'XXSIRF_CNV_HR_BG'
,lr_po_dist_data.delv_per_org_name
);
IF lc_business_group IS NULL THEN
lc_error_details := lc_error_details||'Mapping for Business Group '||lr_po_dist_data.delv_per_org_name||' could not be found. ';
ELSE
ln_bu_id := XXCSR_COMMON_PKG.get_business_group_id(lc_business_group);
IF ln_bu_id IS NULL THEN
lc_error_details:= lc_error_details||' Business Group ID for '||lc_business_group||' could not be derived. ';
--Derive deliver to person id
lc_errloc := 'Derive deliver to person id';
ln_person_id := XXCSR_COMMON_PKG.get_person_id (p_first_name => lr_po_dist_data.delv_per_fname
,p_last_name => lr_po_dist_data.delv_per_lname
,p_date_of_birth => lr_po_dist_data.delv_per_dob
,p_business_group_id => ln_bu_id
);
IF ln_person_id IS NULL THEN
lc_error_details := lc_error_details || ' Invalid agent (employee) details.';
END IF;
END IF;
END IF;
END IF;
--BUDGET ACCOUNT
--Derive budget account segment1 from lookup
lc_errloc := 'Derive budget account segment1 from lookup';
lc_bud_acc_seg1 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_COMPANY'
,p_sirf_lookup => 'XXSIRF_CNV_GL_COMPANY'
,p_old_value => lr_po_dist_data.bud_acc_seg1
);
--Derive budget account segment2 from lookup
lc_errloc := 'Derive budget account segment2 from lookup';
lc_bud_acc_seg2 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_ACCOUNT'
,p_sirf_lookup => 'XXSIRF_CNV_GL_ACCOUNT'
,p_old_value => lr_po_dist_data.bud_acc_seg2
);
--Derive budget account segment3 from lookup
lc_errloc := 'Derive budget account segment3 from lookup';
lc_bud_acc_seg3 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_BU'
,p_sirf_lookup => 'XXSIRF_CNV_GL_BU'
,p_old_value => lr_po_dist_data.bud_acc_seg3
);
--Derive budget account segment4 from lookup
lc_errloc := 'Derive budget account segment4 from lookup';
lc_bud_acc_seg4 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_DEPARTMENT'
,p_sirf_lookup => 'XXSIRF_CNV_GL_DEPARTMENT'
,p_old_value => lr_po_dist_data.bud_acc_seg4
);
--Derive budget account segment5 from lookup
lc_errloc := 'Derive budget account segment5 from lookup';
lc_bud_acc_seg5 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_PRODPROJ'
,p_sirf_lookup => 'XXSIRF_CNV_GL_PRODPROJ'
,p_old_value => lr_po_dist_data.bud_acc_seg5
);
--Derive budget account segment6 from lookup
lc_errloc := 'Derive budget account segment6 from lookup';
lc_bud_acc_seg6 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_INTERCO'
,p_sirf_lookup => 'XXSIRF_CNV_GL_INTERCO'
,p_old_value => lr_po_dist_data.bud_acc_seg6
);
--Derive budget account segment7 from lookup
lc_errloc := 'Derive budget account segment7 from lookup';
/* lc_bud_acc_seg7 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_BUD_ACC7_LKUP'
,p_sirf_lookup => 'XXSIRF_BUD_ACC7_LKUP'
,p_old_value => lr_po_dist_data.bud_acc_seg7
); */
lc_bud_acc_seg7 := '00000';
--ACCRUAL ACCOUNT
--Derive accrual account segment1 from lookup
lc_errloc := 'Derive accrual account segment1 from lookup';
lc_accr_acc_seg1 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_COMPANY'
,p_sirf_lookup => 'XXSIRF_CNV_GL_COMPANY'
,p_old_value => lr_po_dist_data.accr_acc_seg1
);
/*
--Derive accrual account segment2 from lookup
lc_errloc := 'Derive accrual account segment2 from lookup';
IF lr_po_dist_data.vendor_site_attr3 IS NOT NULL THEN
lc_accr_acc_seg2 := lr_po_dist_data.vendor_site_attr3;
ELSE
lc_accr_acc_seg2 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_ACCOUNT'
,p_sirf_lookup => 'XXSIRF_CNV_GL_ACCOUNT'
,p_old_value => lr_po_dist_data.accr_acc_seg2
);
END IF;
*/
--Derive accrual account segment2 from lookup
lc_errloc := 'Derive accrual account segment2 from lookup';
lc_accr_acc_seg2 := NULL;
OPEN lcu_supsite_attr15(lr_po_dist_data.po_number
,lr_po_dist_data.po_line_number
,lr_po_dist_data.shipment_num);
FETCH lcu_supsite_attr15 INTO lc_accr_acc_seg2;
CLOSE lcu_supsite_attr15;
IF lc_accr_acc_seg2 IS NULL THEN
lc_accr_acc_seg2 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_ACCOUNT'
,p_sirf_lookup => 'XXSIRF_CNV_GL_ACCOUNT'
,p_old_value => lr_po_dist_data.accr_acc_seg2
);
END IF;
--Derive accrual account segment3 from lookup
lc_errloc := 'Derive accrual account segment3 from lookup';
lc_accr_acc_seg3 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_BU'
,p_sirf_lookup => 'XXSIRF_CNV_GL_BU'
,p_old_value => lr_po_dist_data.accr_acc_seg6
);
--Derive accrual account segment4 from lookup
lc_errloc := 'Derive accrual account segment4 from lookup';
lc_accr_acc_seg4 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_DEPARTMENT'
,p_sirf_lookup => 'XXSIRF_CNV_GL_DEPARTMENT'
,p_old_value => lr_po_dist_data.accr_acc_seg3
);
--Derive accrual account segment5 from lookup
lc_errloc := 'Derive accrual account segment5 from lookup';
lc_accr_acc_seg5 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_PRODPROJ'
,p_sirf_lookup => 'XXSIRF_CNV_GL_PRODPROJ'
,p_old_value => lr_po_dist_data.accr_acc_seg4
);
--Derive accrual account segment6 from lookup
lc_errloc := 'Derive accrual account segment6 from lookup';
lc_accr_acc_seg6 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_INTERCO'
,p_sirf_lookup => 'XXSIRF_CNV_GL_INTERCO'
,p_old_value => lr_po_dist_data.accr_acc_seg5
);
--Derive accrual account segment7 from lookup
lc_errloc := 'Derive accrual account segment7 from lookup';
/* lc_accr_acc_seg7 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_ACCR_ACC7_LKUP'
,p_sirf_lookup => 'XXSIRF_ACCR_ACC7_LKUP'
,p_old_value => lr_po_dist_data.accr_acc_seg7
); */
lc_accr_acc_seg7 := '00000';
--VARIANCE ACCOUNT
--Derive variance account segment1 from lookup
lc_errloc := 'Derive variance account segment1 from lookup';
lc_var_acc_seg1 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_COMPANY'
,p_sirf_lookup => 'XXSIRF_CNV_GL_COMPANY'
,p_old_value => lr_po_dist_data.var_acc_seg1
);
--Derive variance account segment2 from lookup
lc_errloc := 'Derive variance account segment2 from lookup';
lc_var_acc_seg2 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_ACCOUNT'
,p_sirf_lookup => 'XXSIRF_CNV_GL_ACCOUNT'
,p_old_value => lr_po_dist_data.var_acc_seg2
);
--Derive variance account segment3 from lookup
lc_errloc := 'Derive variance account segment3 from lookup';
lc_var_acc_seg3 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_BU'
,p_sirf_lookup => 'XXSIRF_CNV_GL_BU'
,p_old_value => lr_po_dist_data.var_acc_seg3
);
--Derive variance account segment4 from lookup
lc_errloc := 'Derive variance account segment4 from lookup';
lc_var_acc_seg4 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_DEPARTMENT'
,p_sirf_lookup => 'XXSIRF_CNV_GL_DEPARTMENT'
,p_old_value => lr_po_dist_data.var_acc_seg4
);
--Derive variance account segment5 from lookup
lc_errloc := 'Derive variance account segment5 from lookup';
lc_var_acc_seg5 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_PRODPROJ'
,p_sirf_lookup => 'XXSIRF_CNV_GL_PRODPROJ'
,p_old_value => lr_po_dist_data.var_acc_seg5
);
--Derive variance account segment6 from lookup
lc_errloc := 'Derive variance account segment6 from lookup';
lc_var_acc_seg6 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_INTERCO'
,p_sirf_lookup => 'XXSIRF_CNV_GL_INTERCO'
,p_old_value => lr_po_dist_data.var_acc_seg6
);
--Derive variance account segment7 from lookup
lc_errloc := 'Derive variance account segment7 from lookup';
/* lc_var_acc_seg7 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_VAR_ACC7_LKUP'
,p_sirf_lookup => 'XXSIRF_VAR_ACC7_LKUP'
,p_old_value => lr_po_dist_data.var_acc_seg7
); */
lc_var_acc_seg7 := '00000';
/* sjacob commented
--Derive charge account id
lc_errloc := 'Derive charge account id';
OPEN lcu_account_id (lc_chr_acc_seg1
,lc_chr_acc_seg2
,lc_chr_acc_seg3
,lc_chr_acc_seg4
,lc_chr_acc_seg5
,lc_chr_acc_seg6
,lc_chr_acc_seg7);
FETCH lcu_account_id
INTO ln_charge_acct_id;
CLOSE lcu_account_id;
IF ln_charge_acct_id IS NULL THEN
lc_error_details := lc_error_details || 'Could not derive charge of accounts id :-'||lc_chr_acc_seg1||'-'||lc_chr_acc_seg2||'-'||lc_chr_acc_seg3||'-'||lc_chr_acc_seg4||'-'||lc_chr_acc_seg5||'-'||lc_chr_acc_seg6||'-'||lc_chr_acc_seg7;
END IF;
*/
lc_line_ship_loc := NULL;
lc_new_ship := NULL;
ln_ship_loc_id := NULL;
lc_ship_org := NULL;
OPEN lcu_ship_po_line(lr_po_dist_data.po_number
,lr_po_dist_data.shipment_num
,lr_po_dist_data.po_line_number);
FETCH lcu_ship_po_line
INTO lc_line_ship_loc;
CLOSE lcu_ship_po_line;
lc_new_ship := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_DELIVER_LOCATIONS'
,'XXSIRF_CNV_DELIVER_LOCATIONS'
,lc_line_ship_loc
);
OPEN lcu_hr_loc_org(lc_new_ship);
FETCH lcu_hr_loc_org
INTO ln_ship_loc_id
,lc_ship_org;
CLOSE lcu_hr_loc_org;
--sjacob added
--Derive charge account id
IF lc_ship_org = 'CSD' THEN
OPEN lcu_charge_account_id(ln_ship_loc_id,'UK_MAIN');
FETCH lcu_charge_account_id INTO ln_charge_acct_id ;
CLOSE lcu_charge_account_id;
IF ln_charge_acct_id IS NULL THEN
lc_error_details := lc_error_details || 'Could not derive charge of accounts id ';
END IF;
ELSIF lc_ship_org = 'CSI' THEN
OPEN lcu_charge_account_id(ln_ship_loc_id,'CSI_MAIN');
FETCH lcu_charge_account_id INTO ln_charge_acct_id ;
CLOSE lcu_charge_account_id;
IF ln_charge_acct_id IS NULL THEN
lc_error_details := lc_error_details || 'Could not derive charge of accounts id ';
END IF;
ELSIF lc_ship_org = 'CSL' THEN
OPEN lcu_charge_account_id(ln_ship_loc_id,'CSL_MAIN');
FETCH lcu_charge_account_id INTO ln_charge_acct_id ;
CLOSE lcu_charge_account_id;
IF ln_charge_acct_id IS NULL THEN
lc_error_details := lc_error_details || 'Could not derive charge of accounts id ';
END IF;
ELSIF lc_ship_org = 'CDC' THEN
OPEN lcu_charge_account_id(ln_ship_loc_id,'AK1_COM');
FETCH lcu_charge_account_id INTO ln_charge_acct_id ;
CLOSE lcu_charge_account_id;
IF ln_charge_acct_id IS NULL THEN
lc_error_details := lc_error_details || 'Could not derive charge of accounts id ';
END IF;
ELSE
OPEN lcu_charge_account_id(ln_ship_loc_id,'RM_COM');
FETCH lcu_charge_account_id INTO ln_charge_acct_id ;
CLOSE lcu_charge_account_id;
IF ln_charge_acct_id IS NULL THEN
lc_error_details := lc_error_details || 'Could not derive charge of accounts id ';
END IF;
END IF;
--Derive budget account id
lc_errloc := 'Derive budget account id';
OPEN lcu_account_id (lc_bud_acc_seg1
,lc_bud_acc_seg2
,lc_bud_acc_seg3
,lc_bud_acc_seg4
,lc_bud_acc_seg5
,lc_bud_acc_seg6
,lc_bud_acc_seg7);
FETCH lcu_account_id
INTO ln_budget_acct_id;
CLOSE lcu_account_id;
--Derive accrual account id
lc_errloc := 'Derive accrual account id';
OPEN lcu_account_id (lc_accr_acc_seg1
,lc_accr_acc_seg2
,lc_accr_acc_seg3
,lc_accr_acc_seg4
,lc_accr_acc_seg5
,lc_accr_acc_seg6
,lc_accr_acc_seg7);
FETCH lcu_account_id
INTO ln_accrual_acct_id;
CLOSE lcu_account_id;
--Derive variance account id
lc_errloc := 'Derive variance account id';
OPEN lcu_account_id (lc_var_acc_seg1
,lc_var_acc_seg2
,lc_var_acc_seg3
,lc_var_acc_seg4
,lc_var_acc_seg5
,lc_var_acc_seg6
,lc_var_acc_seg7);
FETCH lcu_account_id
INTO ln_variance_acct_id;
CLOSE lcu_account_id;
IF lc_error_details IS NULL THEN
--Insert purchase order distrbutions data in interface table
lc_errloc := 'Insert purchase order distrbutions data in interface table';
INSERT INTO po_distributions_interface
(interface_line_id
,interface_header_id
,interface_distribution_id
,process_code
,distribution_num
,org_id
,quantity_ordered
,quantity_delivered
,quantity_billed
,quantity_cancelled
,rate_date
,rate
,deliver_to_location_id
,deliver_to_person_id
,destination_type_code
,destination_organization
,destination_context
,set_of_books
,charge_account_id
,budget_account_id
,accrual_account_id
,variance_account_id
,amount_billed
,accrue_on_receipt_flag
,accrued_flag
,prevent_encumbrance_flag
,encumbered_flag
,gl_cancelled_date
--,requisition_num
--,requisition_line_num
--,req_distribution_num
,project_accounting_context
,recoverable_tax
,nonrecoverable_tax
-- ,recovery_rate
-- ,tax_recovery_override_flag
,last_update_date
,last_updated_by
,creation_date
,created_by
)
VALUES
(ln_po_int_line_id
,ln_po_int_header_id
,po_distributions_interface_s.nextval
,'PENDING'
,lr_po_dist_data.distribution_num
,ln_org_id
,(lr_po_dist_data.quantity_ordered - lr_po_dist_data.quantity_delivered - lr_po_dist_data.quantity_cancelled)
,0 --lr_po_dist_data.quantity_delivered
,0 --lr_po_dist_data.quantity_billed
,0 --lr_po_dist_data.quantity_cancelled
,lr_po_dist_data.rate_date
,lr_po_dist_data.rate
,ln_location_id
,ln_person_id
,lr_po_dist_data.destination_type_code
,lc_new_org_name --lr_po_dist_data.destination_organization
,lr_po_dist_data.destination_context
,ln_sob_id
,ln_charge_acct_id
,ln_budget_acct_id
,ln_accrual_acct_id
,ln_variance_acct_id
,lr_po_dist_data.amount_billed
,'Y' -- lr_po_dist_data.accrue_on_receipt_flag as per MDT version 1.23
,lr_po_dist_data.accrued_flag
,lr_po_dist_data.prevent_encumbrance_flag
,lr_po_dist_data.encumbered_flag
,lr_po_dist_data.gl_cancelled_date
--,lr_po_dist_data.requisition_num
--,lr_po_dist_data.requisition_line_num
--,lr_po_dist_data.req_distribution_num
,lr_po_dist_data.project_accounting_context
,lr_po_dist_data.recoverable_tax
,lr_po_dist_data.nonrecoverable_tax
-- ,lr_po_dist_data.recovery_rate
-- ,lr_po_dist_data.tax_recovery_override_flag
,SYSDATE
,fnd_global.user_id
,SYSDATE
,fnd_global.user_id
);
UPDATE xxcsr_po_distributions_int
SET record_status = 'C'
,request_id = FND_GLOBAL.conc_request_id
,error_message = NULL
WHERE rowid = lr_po_dist_data.rowid;
ln_dist_cnt := ln_dist_cnt + 1;
ELSE
UPDATE xxcsr_po_distributions_int
SET record_status = 'E'
,request_id = FND_GLOBAL.conc_request_id
,error_message = lc_error_details
WHERE rowid = lr_po_dist_data.rowid;
IF ln_po_int_line_id IS NOT NULL THEN
UPDATE xxcsr_po_lines_int
SET record_status = 'E'
,error_message = error_message||'error in distribution record'
WHERE po_number = lr_po_dist_data.po_number
AND line_num = lr_po_dist_data.po_line_number
AND shipment_num = lr_po_dist_data.shipment_num
AND source_instance = p_instance_name;
DELETE FROM po_lines_interface
WHERE interface_line_id = ln_po_int_line_id;
ln_lines_cnt := ln_lines_cnt - 1;
END IF;
IF ln_po_int_header_id IS NOT NULL THEN
UPDATE xxcsr_po_headers_int
SET record_status = 'E'
,error_message = error_message||'error in distribution record'
WHERE po_number = lr_po_dist_data.po_number
AND source_instance = p_instance_name;
DELETE FROM po_headers_interface
WHERE interface_header_id = ln_po_int_header_id;
ln_header_cnt := ln_header_cnt - 1;
END IF;
END IF; --lc_error_details IS NULL
COMMIT;
END LOOP;
COMMIT;
IF ln_header_cnt > 0 THEN
--Calling Import Standard Purchase Orders program
lc_errloc := 'Call Import Standard Purchase Orders program';
FND_FILE.PUT_LINE(FND_FILE.LOG,'Submitting Import Standard Purchase Orders concurrent program.');
ln_cur_org_id := FND_PROFILE.VALUE('ORG_ID');
FND_FILE.PUT_LINE(FND_FILE.LOG,'ln_cur_org_id : ' || ln_cur_org_id);
ln_request_id := FND_REQUEST.SUBMIT_REQUEST (
application => 'PO'
,program => 'POXPOPDOI'
,description => 'Import Standard Purchase Orders'
,start_time => SYSDATE
,sub_request => FALSE
,argument1 => NULL --Default Buyer
,argument2 => 'STANDARD' --Document Type
,argument3 => NULL --Document SubType
,argument4 => 'N' --Create or Update Items
,argument5 => NULL --Create Sourcing Rules
,argument6 => 'APPROVED' --Approval Status
,argument7 => NULL --Release Generation Method
,argument8 => NULL --Batch Id
,argument9 => ln_cur_org_id --Operating Unit
,argument10 => NULL --Global Agreement
,argument11 => NULL --Enable Sourcing Level
,argument12 => NULL --Sourcing Level
,argument13 => NULL --Inv Org Enable
,argument14 => NULL --Inventory Organization
);
COMMIT;
IF ln_request_id = 0 THEN
lc_error := 'Error submitting Import Standard Purchase Orders concurrent program.';
RAISE ex_conc_error;
END IF;
FND_FILE.PUT_LINE(FND_FILE.LOG,'Import Standard Purchase Orders concurrent program submitted. Request_id : ' || ln_request_id);
--Wait for the request to complete
lb_wait := FND_CONCURRENT.WAIT_FOR_REQUEST
(
request_id => ln_request_id
,interval => 2
,phase => lc_phase
,status => lc_status
,dev_phase => lc_devpha
,dev_status => lc_devsta
,message => lc_mesg
);
END IF; --ln_header_cnt > 0
x_header_cnt := ln_header_cnt;
x_lines_cnt := ln_lines_cnt;
x_dist_cnt := ln_dist_cnt;
x_req_id := ln_request_id;
--
EXCEPTION
WHEN EX_CONC_ERROR THEN
x_retcode := 2;
x_errbuf := lc_errmsg;
FND_FILE.PUT_LINE(FND_FILE.LOG,lc_errmsg);
WHEN OTHERS THEN
x_errbuf := SUBSTR(SQLERRM,1,200);
x_retcode := 2;
FND_FILE.PUT_LINE(FND_FILE.LOG,'Unexpected error occurred in import procedure at ' || lc_errloc || ' Error : ' || SQLERRM);
END import_sirf;
--Import Routine
PROCEDURE import_csr
(p_rec_status IN VARCHAR2
,p_instance_name IN VARCHAR2
,x_errbuf OUT NOCOPY VARCHAR2
,x_retcode OUT NOCOPY NUMBER
,x_header_cnt OUT NOCOPY NUMBER
,x_lines_cnt OUT NOCOPY NUMBER
,x_dist_cnt OUT NOCOPY NUMBER
,x_req_id OUT NOCOPY NUMBER
)
IS
--
CURSOR lcu_po_header_data (pv_rec_status VARCHAR2)
IS
SELECT XHEC.rowid,XHEC.*
FROM xxcsr_po_headers_int XHEC
WHERE XHEC.record_status = pv_rec_status
AND XHEC.request_id = gn_conc_req_id
AND XHEC.source_instance = p_instance_name
AND XHEC.document_type_code <> 'CONTRACT';
CURSOR lcu_po_header_contr (pv_rec_status VARCHAR2)
IS
SELECT XHEC.rowid,XHEC.*
FROM xxcsr_po_headers_int XHEC
WHERE XHEC.record_status = pv_rec_status
AND XHEC.request_id = gn_conc_req_id
AND XHEC.source_instance = p_instance_name
AND XHEC.document_type_code = 'CONTRACT';
CURSOR lcu_po_lines_data (pv_rec_status VARCHAR2)
IS
SELECT XHEC.rowid,XHEC.*
FROM xxcsr_po_lines_int XHEC
WHERE XHEC.record_status = pv_rec_status
AND XHEC.request_id = gn_conc_req_id
AND XHEC.source_instance = p_instance_name;
CURSOR lcu_po_dist_data (pv_rec_status VARCHAR2)
IS
SELECT XHEC.rowid,XHEC.*
FROM xxcsr_po_distributions_int XHEC
WHERE XHEC.record_status = pv_rec_status
AND XHEC.request_id = gn_conc_req_id
AND XHEC.source_instance = p_instance_name;
CURSOR lcu_chk_currency (pv_currency_code VARCHAR2)
IS
SELECT currency_code
FROM fnd_currencies
WHERE currency_code = pv_currency_code
AND enabled_flag = 'Y'
AND SYSDATE BETWEEN NVL(START_DATE_ACTIVE, SYSDATE) AND NVL(END_DATE_ACTIVE, SYSDATE);
CURSOR lcu_item_cat_id (pv_seg1 VARCHAR2,pv_seg2 VARCHAR2,pv_seg3 VARCHAR2,pv_seg4 VARCHAR2,pv_seg5 VARCHAR2)
IS
SELECT category_id
FROM mtl_categories
WHERE segment1 = pv_seg1
AND segment2 = pv_seg2
AND segment3 = pv_seg3
AND segment4 = pv_seg4
AND segment5 = pv_seg5
AND enabled_flag = 'Y'
AND SYSDATE BETWEEN NVL(START_DATE_ACTIVE, SYSDATE) AND NVL(END_DATE_ACTIVE, SYSDATE);
CURSOR lcu_get_int_header_id (pv_po_number VARCHAR2)
IS
SELECT interface_header_id
FROM po_headers_interface
WHERE document_num = pv_po_number
ORDER BY 1 DESC;
CURSOR lcu_get_int_line_id (pv_po_number VARCHAR2
,pv_po_line_number VARCHAR2
,p_shipment_num VARCHAR2)
IS
SELECT interface_line_id
FROM po_lines_interface
WHERE document_num = pv_po_number
AND line_num = pv_po_line_number
AND shipment_num = p_shipment_num;
CURSOR lcu_account_id (pv_seg1 VARCHAR2,pv_seg2 VARCHAR2,pv_seg3 VARCHAR2,pv_seg4 VARCHAR2,pv_seg5 VARCHAR2,pv_seg6 VARCHAR2,pv_seg7 VARCHAR2)
IS
SELECT code_combination_id
FROM gl_code_combinations_kfv
WHERE segment1 = pv_seg1
AND segment2 = pv_seg2
AND segment3 = pv_seg3
AND segment4 = pv_seg4
AND segment5 = pv_seg5
AND segment6 = pv_seg6
AND segment7 = pv_seg7;
CURSOR lcu_charge_account_id (p_ship_location NUMBER, p_second_inv VARCHAR2)
IS
SELECT GCC.code_combination_id
FROM gl_code_combinations gcc
,mtl_secondary_inventories msi
,hr_locations hl
WHERE MSI.material_account = GCC.code_combination_id
AND MSI.secondary_inventory_name = p_second_inv
AND MSI.organization_id = HL.inventory_organization_id
AND HL.location_id = p_ship_location;
CURSOR lcu_get_sob_id (pv_sob_name VARCHAR2)
IS
SELECT set_of_books_id
FROM gl_sets_of_books
WHERE name = pv_sob_name;
--sjacob commented below
CURSOR lcu_location_id (pv_loc_code VARCHAR2)
IS
SELECT location_id
FROM hr_locations
WHERE location_code = pv_loc_code;
CURSOR lcu_item_id(p_seg1 IN VARCHAR2
,p_seg2 IN VARCHAR2
,p_seg3 IN VARCHAR2 -- sjacob commented as per Siva's mail
)
IS
SELECT MSIB.inventory_item_id
FROM mtl_system_items_b MSIB
WHERE MSIB.segment1 = p_seg1
AND NVL(MSIB.segment2,-99) = NVL(p_seg2,-99)
AND NVL(MSIB.segment3,-99) = NVL(p_seg3,-99) -- sjacob commented as per Siva's mail
AND ROWNUM <= 1;
CURSOR lcu_vendor_der(p_vendor IN VARCHAR2)
IS
SELECT vendor_id
FROM po_vendors
WHERE attribute15 = p_vendor;
CURSOR lcu_hr_loc(p_location_code IN VARCHAR2)
IS
SELECT HLA.location_id
FROM hr_locations_all HLA
WHERE HLA.location_code = p_location_code;
CURSOR lcu_hr_loc_org(p_location_code IN VARCHAR2)
IS
SELECT HLA.location_id
,OOD.organization_code
FROM hr_locations_all HLA
,org_organization_definitions OOD
WHERE HLA.location_code = p_location_code
AND OOD.organization_id = HLA.inventory_organization_id;
CURSOR lcu_ship_po_line(p_po_number IN VARCHAR2
,p_shipment_num IN NUMBER
,p_line_num IN NUMBER)
IS
SELECT ship_to_location
FROM xxcsr_po_lines_int XPLI
WHERE XPLI.po_number = p_po_number
AND XPLI.shipment_num = p_shipment_num
AND XPLI.line_num = p_line_num
AND XPLI.source_instance = p_instance_name;
CURSOR lcu_func_curr(p_org_id IN NUMBER)
IS
SELECT GL.currency_code
FROM hr_operating_units HOU
,gl_ledgers GL
WHERE GL.ledger_id = HOU.set_of_books_id
AND HOU.organization_id = p_org_id;
CURSOR lcu_po_line_itm(p_po_num IN VARCHAR2)
IS
SELECT count('x')
FROM xxcsr_po_lines_int XPLI
WHERE XPLI.po_number = p_po_num
AND XPLI.itm_seg1_item_num IS NOT NULL
AND XPLI.source_instance = p_instance_name;
CURSOR lcu_vendor_site(p_vendor_site_code IN VARCHAR2
,p_vendor_id IN NUMBER)
IS
SELECT POVS.vendor_site_id
FROM po_vendor_sites_all POVS
WHERE POVS.vendor_site_code = p_vendor_site_code
AND POVS.vendor_id = p_vendor_id;
CURSOR lcu_vendor_contact(p_vendor_site_id IN NUMBER)
IS
SELECT PVC.vendor_contact_id
FROM po_vendor_contacts PVC
WHERE PVC.vendor_site_id = p_vendor_site_id;
CURSOR lcu_pay_term(p_payterm IN VARCHAR2)
IS
SELECT APT.term_id
FROM ap_terms APT
WHERE APT.name = p_payterm;
CURSOR lcu_check_po_exists(p_po_number IN VARCHAR2)
IS
SELECT 1
FROM po_headers_all PHA
WHERE PHA.segment1 = p_po_number;
CURSOR lcu_check_lines(p_po_number IN VARCHAR2)
IS
SELECT 1
FROM xxcsr_po_lines_int XPLI
WHERE XPLI.po_number = p_po_number;
CURSOR lcu_prim_uom(p_org_code IN VARCHAR2
,p_item_id IN NUMBER)
IS
SELECT MSIB.primary_unit_of_measure
FROM mtl_system_items_b MSIB
,mtl_parameters MP
WHERE MSIB.inventory_item_id = p_item_id
AND MSIB.organization_id = MP.master_organization_id
AND MP.organization_code = p_org_code;
CURSOR lcu_supsite_attr15(p_doc_num VARCHAR2
,p_lin_num VARCHAR2
,p_shp_num VARCHAR2)
IS
SELECT PVS.attribute15
FROM po_headers_interface PHI
,po_lines_interface PLI
,po_vendor_sites_all PVS
WHERE PHI.interface_header_id = PLI.interface_header_id
AND PHI.vendor_id = PVS.vendor_id
AND PHI.vendor_id = PVS.vendor_id
AND PVS.org_id = PHI.org_id
AND PVS.vendor_site_code = PHI.vendor_site_code
AND PLI.document_num = p_doc_num
AND PLI.line_num = p_lin_num
AND PLI.shipment_num = p_shp_num;
lr_po_header_data lcu_po_header_data%ROWTYPE;
lr_po_lines_data lcu_po_lines_data%ROWTYPE;
lr_po_dist_data lcu_po_dist_data%ROWTYPE;
lc_errmsg VARCHAR2(2000);
lc_errloc VARCHAR2(1000);
ln_request_id NUMBER;
lc_phase VARCHAR2(500);
lc_status VARCHAR2(500);
lc_devpha VARCHAR2(500);
lc_devsta VARCHAR2(500);
lc_mesg VARCHAR2(50);
lb_wait BOOLEAN;
ln_org_id NUMBER;
ln_item_org_id NUMBER;
ln_agent_id NUMBER;
lc_currency_code VARCHAR2(15);
ln_vendor_id NUMBER;
lc_payment_terms VARCHAR2(50);
lc_freight_terms VARCHAR2(25);
ln_item_id NUMBER;
lc_item_seg2 VARCHAR2(40);
lc_cat_seg1 VARCHAR2(40);
lc_cat_seg2 VARCHAR2(40);
lc_cat_seg3 VARCHAR2(40);
lc_cat_seg4 VARCHAR2(40);
lc_cat_seg5 VARCHAR2(40);
lc_inv_org_code VARCHAR2(30);
ln_cat_id NUMBER;
ln_po_int_header_id NUMBER;
ln_po_int_line_id NUMBER;
ln_tax_code_id NUMBER;
ln_charge_acct_id NUMBER;
ln_budget_acct_id NUMBER;
ln_accrual_acct_id NUMBER;
ln_variance_acct_id NUMBER;
ln_sob_id NUMBER;
ln_location_id NUMBER;
ln_person_org_id NUMBER;
ln_person_id NUMBER;
ln_bu_id NUMBER;
lc_chr_acc_seg1 VARCHAR2(40);
lc_chr_acc_seg2 VARCHAR2(40);
lc_chr_acc_seg3 VARCHAR2(40);
lc_chr_acc_seg4 VARCHAR2(40);
lc_chr_acc_seg5 VARCHAR2(40);
lc_chr_acc_seg6 VARCHAR2(40);
lc_chr_acc_seg7 VARCHAR2(40);
lc_bud_acc_seg1 VARCHAR2(40);
lc_bud_acc_seg2 VARCHAR2(40);
lc_bud_acc_seg3 VARCHAR2(40);
lc_bud_acc_seg4 VARCHAR2(40);
lc_bud_acc_seg5 VARCHAR2(40);
lc_bud_acc_seg6 VARCHAR2(40);
lc_bud_acc_seg7 VARCHAR2(40);
lc_accr_acc_seg1 VARCHAR2(40);
lc_accr_acc_seg2 VARCHAR2(40);
lc_accr_acc_seg3 VARCHAR2(40);
lc_accr_acc_seg4 VARCHAR2(40);
lc_accr_acc_seg5 VARCHAR2(40);
lc_accr_acc_seg6 VARCHAR2(40);
lc_accr_acc_seg7 VARCHAR2(40);
lc_var_acc_seg1 VARCHAR2(40);
lc_var_acc_seg2 VARCHAR2(40);
lc_var_acc_seg3 VARCHAR2(40);
lc_var_acc_seg4 VARCHAR2(40);
lc_var_acc_seg5 VARCHAR2(40);
lc_var_acc_seg6 VARCHAR2(40);
lc_var_acc_seg7 VARCHAR2(40);
lc_seg3_value VARCHAR2(40);
lc_seg5_value VARCHAR2(40);
lb_success BOOLEAN;
lc_error_details VARCHAR2(4000);
lc_error VARCHAR2(4000);
lc_errbuf VARCHAR2(240);
ln_retcode NUMBER;
ln_header_cnt NUMBER;
ln_lines_cnt NUMBER;
ln_dist_cnt NUMBER;
ln_cur_org_id NUMBER;
lc_new_orgname VARCHAR2(240);
lc_item_segment2 VARCHAR2(40);
lc_item_segment3 VARCHAR2(40);
lc_new_glacct VARCHAR2(240);
lc_new_cat VARCHAR2(2000);
lc_new_del VARCHAR2(240);
lc_new_org_name VARCHAR2(270);
lc_new_sobname VARCHAR2(270);
lc_business_group VARCHAR2(270);
ln_bill_loc_id NUMBER;
ln_ship_loc_id NUMBER;
lc_inv_po_chk VARCHAR2(270);
lc_func_curr VARCHAR2(15);
lc_rate_type VARCHAR2(30);
ln_rate NUMBER;
ld_rate_date DATE;
lc_new_ship VARCHAR2(240);
lc_new_bill VARCHAR2(240);
ln_line_item_cnt NUMBER;
ln_po_item_chk NUMBER;
ln_vendor_site_id NUMBER;
ln_vendor_contact_id NUMBER;
ln_term_id NUMBER;
lc_po_exists VARCHAR2(1);
lc_line_exists VARCHAR2(1);
lc_primary_uom VARCHAR2(25);
lc_ship_via_lookup_code VARCHAR2(25);
lc_line_ship_loc VARCHAR2(60);
lc_ship_org VARCHAR2(3);
ln_po_header_id NUMBER;
ex_conc_error EXCEPTION;
--
BEGIN
ln_header_cnt := 0;
--Process Purchase Orders data
lc_errloc := 'Process purchase orders data';
FOR lr_po_header_data IN lcu_po_header_data (p_rec_status)
LOOP
ln_org_id := NULL;
ln_agent_id := NULL;
ln_bu_id := NULL;
lc_currency_code := NULL;
ln_vendor_id := NULL;
lc_payment_terms := NULL;
lc_freight_terms := NULL;
lc_error_details := NULL;
lc_new_orgname := NULL;
lc_business_group := NULL;
ln_bill_loc_id := NULL;
ln_ship_loc_id := NULL;
lc_inv_po_chk := NULL;
lc_func_curr := NULL;
lc_rate_type := NULL;
ln_rate := NULL;
ld_rate_date := NULL;
lc_new_ship := NULL;
lc_new_bill := NULL;
lc_line_exists := NULL;
lc_primary_uom := NULL;
-- check if lines exist for this PO
OPEN lcu_check_lines(lr_po_header_data.po_number);
FETCH lcu_check_lines
INTO lc_line_exists;
CLOSE lcu_check_lines;
IF lc_line_exists IS NULL THEN
lc_error_details := lc_error_details||'No lines were found in the staging table for the given PO. ';
END IF;
lc_errloc := 'Operating unit related derivations';
lc_new_orgname := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_OPERATING_UNIT'
,'XXSIRF_CNV_OPERATING_UNIT'
,lr_po_header_data.operating_unit
);
IF lc_new_orgname IS NULL THEN
lc_error_details := lc_error_details||'Could not derive new operating unit for '||lr_po_header_data.operating_unit||'. ';
ELSE
ln_org_id := XXCSR_COMMON_PKG.get_organization_id(lc_new_orgname);
IF ln_org_id IS NULL THEN
lc_error_details := lc_error_details||'Could not derive org id for new operating unit '||lc_new_orgname||'. ';
ELSE
-- Compare functional and document currency
OPEN lcu_func_curr(ln_org_id);
FETCH lcu_func_curr
INTO lc_func_curr;
CLOSE lcu_func_curr;
IF lc_func_curr = lr_po_header_data.currency_code THEN
lc_rate_type := NULL;
ln_rate := NULL;
ld_rate_date := NULL;
ELSE
lc_rate_type := lr_po_header_data.rate_type;
ln_rate := lr_po_header_data.rate;
ld_rate_date := lr_po_header_data.rate_date;
END IF;
END IF;
END IF;
lc_errloc := 'Checking for inventory purchase orders';
lc_inv_po_chk := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_INV_SUPPLIERS'
,'XXSIRF_CNV_INV_SUPPLIERS'
,lr_po_header_data.vendor_name
);
IF lc_inv_po_chk IS NULL THEN
lc_error_details := lc_error_details||'Only inventory purchase orders will be migrated';
END IF;
IF lr_po_header_data.emp_bu_name IN ( 'CSR United States','CSR United Kingdom') THEN
lc_business_group := lr_po_header_data.emp_bu_name;
ELSE
lc_business_group := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_HR_BG'
,'XXSIRF_CNV_HR_BG'
,lr_po_header_data.emp_bu_name
);
END IF;
IF lc_business_group IS NULL THEN
lc_error_details := lc_error_details||'Mapping for Business Group '||lr_po_header_data.emp_bu_name||' could not be found. ';
ELSE
ln_bu_id := XXCSR_COMMON_PKG.get_business_group_id(lc_business_group);
IF ln_bu_id IS NULL THEN
lc_error_details:= lc_error_details||' Business Group ID for '||lc_business_group||' could not be derived. ';
ELSE
--Derive agent id
lc_errloc := 'Derive agent id';
ln_agent_id := XXCSR_COMMON_PKG.get_person_id (p_first_name => lr_po_header_data.emp_fname
,p_last_name => lr_po_header_data.emp_lname
,p_date_of_birth => lr_po_header_data.emp_dob
,p_business_group_id => ln_bu_id
);
IF ln_agent_id IS NULL THEN
lc_error_details := lc_error_details || ' Invalid agent (employee) details.';
END IF;
END IF;
END IF;
--Check currency code
lc_errloc := 'Check currency code';
OPEN lcu_chk_currency (lr_po_header_data.currency_code);
FETCH lcu_chk_currency
INTO lc_currency_code;
IF lcu_chk_currency%NOTFOUND THEN
lc_error_details := lc_error_details || ' Invalid currency code.';
END IF;
CLOSE lcu_chk_currency;
--Derive vendor id
lc_errloc := 'Derive vendor id';
IF lr_po_header_data.vendor_name IS NOT NULL THEN
OPEN lcu_vendor_der(lr_po_header_data.vendor_name);
FETCH lcu_vendor_der
INTO ln_vendor_id;
CLOSE lcu_vendor_der;
IF ln_vendor_id IS NULL THEN
lc_error_details := lc_error_details || ' Vendor not migrated.';
END IF;
END IF;
lc_errloc := 'Check payment terms';
IF lr_po_header_data.payment_terms IS NOT NULL THEN
lc_payment_terms := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_SUPPLIER_PAYTERMS'
,p_sirf_lookup => 'XXSIRF_CNV_SUPPLIER_PAYTERMS'
,p_old_value => lr_po_header_data.payment_terms
);
IF lc_payment_terms IS NULL THEN
lc_error_details := lc_error_details || ' Invalid payment terms.';
END IF;
END IF;
--Check freight terms
lc_errloc := 'Check freight terms';
IF lr_po_header_data.freight_terms IS NOT NULL THEN
lc_freight_terms := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_FREIGHT_TERMS'
,p_sirf_lookup => 'XXSIRF_CNV_FREIGHT_TERMS'
,p_old_value => lr_po_header_data.freight_terms
);
IF lc_freight_terms IS NULL THEN
lc_error_details := lc_error_details || ' Invalid freight terms.';
END IF;
END IF;
IF lr_po_header_data.ship_to_location IS NOT NULL THEN
lc_new_ship := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_DELIVER_LOCATIONS'
,'XXSIRF_CNV_DELIVER_LOCATIONS'
,lr_po_header_data.ship_to_location
);
IF lc_new_ship IS NULL THEN
lc_error_details := lc_error_details||'Could not derive new ship to location for '||lr_po_header_data.ship_to_location||' in XXCSR_CNV_DELIVER_LOCATIONS. ';
ELSE
OPEN lcu_hr_loc(lc_new_ship);
FETCH lcu_hr_loc
INTO ln_ship_loc_id;
CLOSE lcu_hr_loc;
IF ln_ship_loc_id IS NULL THEN
lc_error_details := lc_error_details || 'Ship to location id could not be derived for '||lr_po_header_data.ship_to_location;
END IF;
END IF;
END IF;
IF lr_po_header_data.bill_to_location IS NOT NULL THEN
lc_new_bill := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_BILLTO_LOCATIONS'
,'XXSIRF_CNV_BILLTO_LOCATIONS'
,lr_po_header_data.bill_to_location
);
IF lc_new_bill IS NULL THEN
lc_error_details := lc_error_details||'Could not derive new bill to location for '||lr_po_header_data.bill_to_location||' in XXCSR_CNV_BILLTO_LOCATIONS. ';
ELSE
OPEN lcu_hr_loc(lc_new_bill);
FETCH lcu_hr_loc
INTO ln_bill_loc_id;
CLOSE lcu_hr_loc;
IF ln_bill_loc_id IS NULL THEN
lc_error_details := lc_error_details || 'Bill to location id could not be derived for '||lr_po_header_data.bill_to_location;
END IF;
END IF;
END IF;
lc_ship_via_lookup_code := NULL;
IF lr_po_header_data.ship_via_lookup_code IS NOT NULL THEN
lc_ship_via_lookup_code := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_FREIGHT_CARRIER'
,'XXCSR_CNV_FREIGHT_CARRIER'
,lr_po_header_data.ship_via_lookup_code
);
END IF;
IF lc_error_details IS NULL THEN
--Insert purchase order header data in interface table
lc_errloc := 'Insert purchase order header data in interface table';
INSERT INTO po_headers_interface
(interface_header_id
,batch_id
,interface_source_code
,action
,process_code
,org_id
,document_type_code
,currency_code
,rate_type
,rate_date
,rate
,agent_id
,vendor_id
,vendor_site_code
,ship_to_location_id
,bill_to_location_id
,payment_terms
,freight_terms
,approval_status
,approved_date
-- ,revised_date
-- ,revision_num
,confirming_order_flag
,comments
,acceptance_required_flag
,print_count
-- ,printed_date
,frozen_flag
,closed_code
,from_rfq_num
,from_type_lookup_code
,attribute_category
--,attribute1
,attribute2
-- ,attribute3
--,global_attribute1
,pay_on_code
,last_update_date
,last_updated_by
,creation_date
,created_by
,document_num
,freight_carrier
)
VALUES
(po_headers_interface_s.nextval
,1
,'XXCSR Conversion'
,'ORIGINAL'
,'PENDING'
,ln_org_id
,lr_po_header_data.document_type_code -- 'STANDARD'
,lr_po_header_data.currency_code
,DECODE(lc_rate_type,'Corporate','User',lc_rate_type)
,ld_rate_date
,ln_rate
,ln_agent_id
,ln_vendor_id
,lr_po_header_data.vendor_site_code
,ln_ship_loc_id -- lr_po_header_data.ship_to_location
,ln_bill_loc_id -- lr_po_header_data.bill_to_location
,lc_payment_terms
,lc_freight_terms
,DECODE(lr_po_header_data.approval_status,'REQUIRES REAPPROVAL','INCOMPLETE',lr_po_header_data.approval_status)
,lr_po_header_data.approved_date
-- ,lr_po_header_data.revised_date
-- ,lr_po_header_data.revision_num
,lr_po_header_data.confirming_order_flag
,lr_po_header_data.comments
,lr_po_header_data.acceptance_required_flag
--,DECODE(lr_po_header_data.approval_status,'APPROVED',lr_po_header_data.print_count,0)
,DECODE(lr_po_header_data.approval_status,'APPROVED',1,0)
-- ,lr_po_header_data.printed_date
,lr_po_header_data.frozen_flag
,lr_po_header_data.closed_code
,lr_po_header_data.from_requisition_num
,lr_po_header_data.from_type_lookup_code
,lr_po_header_data.attribute_category
--,lr_po_header_data.sourcing_rule
,lr_po_header_data.osp_flag
--,lr_po_header_data.mrp_flag
--,lr_po_header_data.po_total_plus_ipi_tax
,lr_po_header_data.pay_on_code
,SYSDATE
,fnd_global.user_id
,SYSDATE
,fnd_global.user_id
,lr_po_header_data.po_number
,lc_ship_via_lookup_code
);
UPDATE xxcsr_po_headers_int
SET record_status = 'C'
,request_id = FND_GLOBAL.conc_request_id
,error_message = NULL
WHERE rowid = lr_po_header_data.rowid;
COMMIT;
ln_header_cnt := ln_header_cnt + 1;
ELSE
UPDATE xxcsr_po_headers_int
SET record_status = 'E'
,request_id = FND_GLOBAL.conc_request_id
,error_message = lc_error_details
WHERE rowid = lr_po_header_data.rowid;
END IF; --lc_error_details IS NULL
COMMIT;
END LOOP;
--COMMIT;
ln_lines_cnt := 0;
--Process Purchase Order Lines data
lc_errloc := 'Process purchase order lines data';
FOR lr_po_lines_data IN lcu_po_lines_data (p_rec_status)
LOOP
ln_org_id := NULL;
ln_item_org_id := NULL;
ln_item_id := NULL;
lc_item_seg2 := NULL;
lc_cat_seg1 := NULL;
lc_cat_seg2 := NULL;
lc_cat_seg3 := NULL;
lc_cat_seg4 := NULL;
lc_cat_seg5 := NULL;
ln_cat_id := NULL;
ln_po_int_header_id := NULL;
ln_tax_code_id := NULL;
lc_error_details := NULL;
lc_new_orgname := NULL;
lc_item_segment2 := NULL;
lc_new_glacct := NULL;
lc_new_cat := NULL;
lc_new_ship := NULL;
ln_ship_loc_id := NULL;
lc_new_org_name := NULL;
--Derive interface header id
lc_errloc := 'Derive interface header id';
OPEN lcu_get_int_header_id (lr_po_lines_data.po_number);
FETCH lcu_get_int_header_id
INTO ln_po_int_header_id;
CLOSE lcu_get_int_header_id;
IF ln_po_int_header_id IS NULL THEN
lc_error_details := lc_error_details || 'Could not derive interface header id. Header record may have error. ';
END IF;
FND_FILE.PUT_LINE(FND_FILE.LOG,'ln_po_int_header_id : ' || ln_po_int_header_id);
lc_errloc := 'Operating unit related derivations';
lc_new_orgname := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_OPERATING_UNIT'
,'XXSIRF_CNV_OPERATING_UNIT'
,lr_po_lines_data.org_name
);
IF lc_new_orgname IS NULL THEN
lc_error_details := lc_error_details||'Could not derive new operating unit for '||lr_po_lines_data.org_name||'. ';
ELSE
ln_org_id := XXCSR_COMMON_PKG.get_organization_id(lc_new_orgname);
IF ln_org_id IS NULL THEN
lc_error_details := lc_error_details||'Could not derive org id for new operating unit '||lc_new_orgname||'. ';
END IF;
END IF;
IF lr_po_lines_data.ship_to_location IS NOT NULL THEN
lc_new_ship := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_DELIVER_LOCATIONS'
,'XXSIRF_CNV_DELIVER_LOCATIONS'
,lr_po_lines_data.ship_to_location
);
IF lc_new_ship IS NULL THEN
lc_error_details := lc_error_details||'Could not derive new ship to location for '||lr_po_lines_data.ship_to_location||' in XXCSR_CNV_DELIVER_LOCATIONS. ';
ELSE
OPEN lcu_hr_loc(lc_new_ship);
FETCH lcu_hr_loc
INTO ln_ship_loc_id;
CLOSE lcu_hr_loc;
IF ln_ship_loc_id IS NULL THEN
lc_error_details := lc_error_details || 'Ship to location id could not be derived for '||lr_po_lines_data.ship_to_location;
END IF;
END IF;
END IF;
IF lr_po_lines_data.ship_to_org IS NOT NULL THEN
lc_new_org_name := XXCSR_COMMON_PKG.get_organization_code (p_instance_name
,lr_po_lines_data.ship_to_org);
IF lc_new_org_name IS NULL THEN
lc_error_details := lc_error_details||'Mapping for organization '||lr_po_lines_data.ship_to_org||' not found in the table XXCSR_CNV_ORG_MAPPINGS. ';
END IF;
END IF;
lc_item_segment3 := NULL;
IF lr_po_lines_data.itm_seg3_item_type = 'MT' THEN
lc_item_segment2 := 'MT';
lc_item_segment3 := NULL;
ELSIF lr_po_lines_data.itm_seg3_item_type = 'FL' THEN
lc_item_segment2 := 'PD';
lc_item_segment3 := NULL;
ELSE
lc_item_segment2 := lr_po_lines_data.itm_seg2_bom_level;
lc_item_segment3 := lr_po_lines_data.itm_seg3_item_type;
END IF;
lc_errloc := 'Derive inventory item id';
-- IF lr_po_lines_data.itm_seg1_item_num IS NOT NULL THEN
OPEN lcu_item_id(lr_po_lines_data.itm_seg1_item_num
,lc_item_segment2
,lc_item_segment3); --sjacob commented as per Siva's mail lr_po_lines_data.itm_seg3_item_type
FETCH lcu_item_id
INTO ln_item_id;
CLOSE lcu_item_id;
IF ln_item_id IS NULL THEN
lc_error_details := lc_error_details || ' Item number could not be derived.';
ELSE
-- DERIVE primary UOM for master item
IF lc_new_org_name IS NOT NULL THEN
OPEN lcu_prim_uom(lc_new_org_name
,ln_item_id);
FETCH lcu_prim_uom
INTO lc_primary_uom;
CLOSE lcu_prim_uom;
IF lc_primary_uom IS NULL THEN
lc_error_details := lc_error_details || 'Primary UOM code for the master item could not be derived';
END IF;
END IF;
END IF;
-- END IF;
lc_errloc := 'Derive new GL account';
lc_new_glacct := XXCSR_COMMON_PKG.get_lookup_meaning(p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_ACCOUNT'
,p_sirf_lookup => 'XXCSR_CNV_GL_ACCOUNT'
,p_old_value => lr_po_lines_data.gl_account
);
lc_new_cat := XXCSR_COMMON_PKG.get_lookup_meaning(p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_PO_CATEGORY'
,p_sirf_lookup => 'XXCSR_CNV_PO_CATEGORY'
,p_old_value => lc_new_glacct
);
IF lc_new_cat IS NULL THEN
lc_new_cat := 'MISCELLANEOUS.MISCELLANEOUS';
END IF;
IF lr_po_lines_data.inventory_item_flag = 'N' THEN
UPDATE xxcsr_po_distributions_int
SET destination_type_code = 'EXPENSE'
WHERE po_number = lr_po_lines_data.po_number
AND po_line_number = lr_po_lines_data.line_num
AND shipment_num = lr_po_lines_data.shipment_num
AND source_instance = p_instance_name;
ELSE
UPDATE xxcsr_po_distributions_int
SET destination_type_code = 'INVENTORY'
WHERE po_number = lr_po_lines_data.po_number
AND po_line_number = lr_po_lines_data.line_num
AND shipment_num = lr_po_lines_data.shipment_num
AND source_instance = p_instance_name;
END IF;
IF lc_error_details IS NULL THEN
--Insert purchase order lines data in interface table
lc_errloc := 'Insert purchase order lines data in interface table';
FND_FILE.PUT_LINE(FND_FILE.LOG,'Inserting in lines');
INSERT INTO po_lines_interface
(interface_line_id
,interface_header_id
,action
,process_code
,document_num
,line_num
,organization_id
,shipment_num
,shipment_type
,contract_num
,line_type
,item_id
,category
,item_description
,vendor_product_num
,unit_of_measure
,quantity
,unit_price
,list_price_per_unit
,allow_price_override_flag
,negotiated_by_preparer_flag
,note_to_vendor
,taxable_flag
-- ,tax_name
,type_1099
,capital_expense_flag
,price_type
,closed_code
,closed_reason
,closed_date
,closed_by
,over_tolerance_error_flag
,line_attribute_category_lines
-- ,line_attribute1
-- ,line_attribute2
-- ,line_attribute3
-- ,line_attribute4
-- ,line_attribute5
-- ,line_attribute6
-- ,line_attribute7
-- ,line_attribute8
-- ,line_attribute9
--,global_attribute1
-- ,tax_code_id
,secondary_unit_of_measure
,secondary_quantity
,inspection_required_flag
,receipt_required_flag
,invoice_close_tolerance
,receive_close_tolerance
,need_by_date
,promised_date
,consigned_flag
,base_unit_price
,last_update_date
,last_updated_by
,creation_date
,created_by
,ship_to_location_id
,ship_to_organization_code
)
VALUES
(po_lines_interface_s.nextval
,ln_po_int_header_id
,'ORIGINAL'
,'PENDING'
,lr_po_lines_data.po_number
,lr_po_lines_data.line_num
,ln_org_id
,lr_po_lines_data.shipment_num
,lr_po_lines_data.shipment_type
,lr_po_lines_data.contract_num
,lr_po_lines_data.line_type
,ln_item_id
,lc_new_cat
,lr_po_lines_data.item_description
,lr_po_lines_data.vendor_product_num
,lc_primary_uom --lr_po_lines_data.unit_of_measure
,lr_po_lines_data.quantity
,lr_po_lines_data.unit_price
,lr_po_lines_data.list_price_per_unit
,lr_po_lines_data.allow_price_override_flag
,lr_po_lines_data.negotiated_by_preparer_flag
,lr_po_lines_data.note_to_vendor
,lr_po_lines_data.taxable_flag
-- ,lr_po_lines_data.tax_name
,lr_po_lines_data.type_1099
,lr_po_lines_data.capital_expense_flag
,lr_po_lines_data.price_type
,lr_po_lines_data.closed_code
,lr_po_lines_data.closed_reason
,lr_po_lines_data.closed_date
,lr_po_lines_data.closed_by
,lr_po_lines_data.over_tolerance_error_flag
,lr_po_lines_data.line_attribute_category_lines
-- ,lr_po_lines_data.att1_item_number
-- ,lr_po_lines_data.att2_manufacturer
-- ,lr_po_lines_data.att3_manufacturer_part_no
-- ,lr_po_lines_data.att4_vendor_name
-- ,lr_po_lines_data.att5_last_po_price
-- ,lr_po_lines_data.att6_last_transaction_qty
-- ,lr_po_lines_data.att7_last_vendor_name
-- ,lr_po_lines_data.att8_item_id
-- ,lr_po_lines_data.att9_vendor_name
--,lr_po_lines_data.fisc_classification_code
-- ,ln_tax_code_id commented as per R04
,lr_po_lines_data.secondary_unit_of_measure
,lr_po_lines_data.secondary_quantity
,lr_po_lines_data.inspection_required_flag
,lr_po_lines_data.receipt_required_flag
,lr_po_lines_data.invoice_close_tolerance
,lr_po_lines_data.receive_close_tolerance
,lr_po_lines_data.need_by_date
,lr_po_lines_data.promised_date
,lr_po_lines_data.consigned_flag
,lr_po_lines_data.base_unit_price
,SYSDATE
,fnd_global.user_id
,SYSDATE
,fnd_global.user_id
,ln_ship_loc_id
,lc_new_org_name
);
UPDATE xxcsr_po_lines_int
SET record_status = 'C'
,request_id = FND_GLOBAL.conc_request_id
,error_message = NULL
WHERE rowid = lr_po_lines_data.rowid;
COMMIT;
ln_lines_cnt := ln_lines_cnt + 1;
ELSE
UPDATE xxcsr_po_lines_int
SET record_status = 'E'
,request_id = FND_GLOBAL.conc_request_id
,error_message = lc_error_details
WHERE rowid = lr_po_lines_data.rowid;
IF ln_po_int_header_id IS NOT NULL THEN
UPDATE xxcsr_po_headers_int
SET record_status = 'E'
,error_message = error_message||'error in lines record'
WHERE po_number = lr_po_lines_data.po_number
AND source_instance = p_instance_name;
DELETE FROM po_headers_interface
WHERE interface_header_id = ln_po_int_header_id;
ln_header_cnt := ln_header_cnt - 1;
END IF;
END IF; --lc_error_details IS NULL
COMMIT;
END LOOP;
--COMMIT;
ln_dist_cnt := 0;
--Process Purchase Order distributions data
lc_errloc := 'Process purchase order distributions data';
FOR lr_po_dist_data IN lcu_po_dist_data (p_rec_status)
LOOP
ln_org_id := NULL;
ln_sob_id := NULL;
ln_location_id := NULL;
lc_inv_org_code := NULL;
ln_person_org_id := NULL;
ln_person_id := NULL;
lc_error_details := NULL;
lc_new_orgname := NULL;
lc_new_del := NULL;
lc_new_org_name := NULL;
lc_new_sobname := NULL;
ln_po_int_line_id := NULL;
ln_po_int_header_id := NULL;
lc_business_group := NULL;
ln_bu_id := NULL;
lc_chr_acc_seg1 := NULL;
lc_chr_acc_seg2 := NULL;
lc_chr_acc_seg3 := NULL;
lc_chr_acc_seg4 := NULL;
lc_chr_acc_seg5 := NULL;
lc_chr_acc_seg6 := NULL;
lc_chr_acc_seg7 := NULL;
lc_bud_acc_seg1 := NULL;
lc_bud_acc_seg2 := NULL;
lc_bud_acc_seg3 := NULL;
lc_bud_acc_seg4 := NULL;
lc_bud_acc_seg5 := NULL;
lc_bud_acc_seg6 := NULL;
lc_bud_acc_seg7 := NULL;
lc_accr_acc_seg1 := NULL;
lc_accr_acc_seg2 := NULL;
lc_accr_acc_seg3 := NULL;
lc_accr_acc_seg4 := NULL;
lc_accr_acc_seg5 := NULL;
lc_accr_acc_seg6 := NULL;
lc_accr_acc_seg7 := NULL;
lc_var_acc_seg1 := NULL;
lc_var_acc_seg2 := NULL;
lc_var_acc_seg3 := NULL;
lc_var_acc_seg4 := NULL;
lc_var_acc_seg5 := NULL;
lc_var_acc_seg6 := NULL;
lc_var_acc_seg7 := NULL;
ln_charge_acct_id := NULL;
ln_budget_acct_id := NULL;
ln_accrual_acct_id := NULL;
ln_variance_acct_id := NULL;
lc_seg3_value := NULL;
lc_seg5_value := NULL;
--Derive interface header id
lc_errloc := 'Derive interface header id';
OPEN lcu_get_int_header_id (lr_po_dist_data.po_number);
FETCH lcu_get_int_header_id
INTO ln_po_int_header_id;
CLOSE lcu_get_int_header_id;
IF ln_po_int_header_id IS NULL THEN
lc_error_details := lc_error_details || 'Could not derive interface header id. Header record may have error. ';
END IF;
--Derive interface line id
lc_errloc := 'Derive interface line id';
OPEN lcu_get_int_line_id (lr_po_dist_data.po_number
,lr_po_dist_data.po_line_number
,lr_po_dist_data.shipment_num);
FETCH lcu_get_int_line_id
INTO ln_po_int_line_id;
CLOSE lcu_get_int_line_id;
IF ln_po_int_line_id IS NULL THEN
lc_error_details := lc_error_details || 'Could not derive interface line id. Header/Line record may have error. ';
END IF;
lc_errloc := 'Operating unit related derivations';
lc_new_orgname := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_OPERATING_UNIT'
,'XXSIRF_CNV_OPERATING_UNIT'
,lr_po_dist_data.org_name
);
IF lc_new_orgname IS NULL THEN
lc_error_details := lc_error_details||'Could not derive new operating unit for '||lr_po_dist_data.org_name||'. ';
ELSE
ln_org_id := XXCSR_COMMON_PKG.get_organization_id(lc_new_orgname);
IF ln_org_id IS NULL THEN
lc_error_details := lc_error_details||'Could not derive org id for new operating unit '||lc_new_orgname||'. ';
END IF;
END IF;
--Derive sob id
lc_new_sobname := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_SOB_NAME'
,'XXSIRF_CNV_SOB_NAME'
,lr_po_dist_data.set_of_books
);
IF lc_new_sobname IS NULL THEN
lc_error_details := lc_error_details||'Could not derive new sob for '||lr_po_dist_data.set_of_books||' in XXCSR_CNV_SOB_NAME. ';
ELSE
lc_errloc := 'Derive sob id';
OPEN lcu_get_sob_id (lc_new_sobname);
FETCH lcu_get_sob_id
INTO ln_sob_id;
CLOSE lcu_get_sob_id;
IF ln_sob_id IS NULL THEN
lc_error_details := lc_error_details || ' Invalid sets of books name- '||lc_new_sobname;
END IF;
END IF;
IF lr_po_dist_data.deliver_to_location IS NOT NULL THEN
lc_new_del := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_DELIVER_LOCATIONS'
,'XXSIRF_CNV_DELIVER_LOCATIONS'
,lr_po_dist_data.deliver_to_location
);
IF lc_new_del IS NULL THEN
lc_error_details := lc_error_details||'Could not derive new deliver to location for '||lr_po_dist_data.deliver_to_location||' in XXCSR_CNV_DELIVER_LOCATIONS. ';
ELSE
--Derive deliver to location id
lc_errloc := 'Derive deliver to location id';
OPEN lcu_location_id (lc_new_del);
FETCH lcu_location_id
INTO ln_location_id;
CLOSE lcu_location_id;
IF ln_location_id IS NULL THEN
lc_error_details := lc_error_details || ' Invalid deliver to location code.';
END IF;
END IF;
END IF;
IF lr_po_dist_data.destination_organization IS NOT NULL THEN
lc_new_org_name := XXCSR_COMMON_PKG.get_organization_code (p_instance_name
,lr_po_dist_data.destination_organization);
IF lc_new_org_name IS NULL THEN
lc_error_details := lc_error_details||'Mapping for organization '||lr_po_dist_data.destination_organization||' not found in the table XXCSR_CNV_ORG_MAPPINGS. ';
END IF;
END IF;
--Derive deliver to person id
IF lr_po_dist_data.delv_per_fname IS NOT NULL THEN
lc_business_group := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_HR_BG'
,'XXSIRF_CNV_HR_BG'
,lr_po_dist_data.delv_per_org_name
);
IF lc_business_group IS NULL THEN
lc_error_details := lc_error_details||'Mapping for Business Group '||lr_po_dist_data.delv_per_org_name||' could not be found. ';
ELSE
ln_bu_id := XXCSR_COMMON_PKG.get_business_group_id(lc_business_group);
IF ln_bu_id IS NULL THEN
lc_error_details:= lc_error_details||' Business Group ID for '||lc_business_group||' could not be derived. ';
--Derive deliver to person id
lc_errloc := 'Derive deliver to person id';
ln_person_id := XXCSR_COMMON_PKG.get_person_id (p_first_name => lr_po_dist_data.delv_per_fname
,p_last_name => lr_po_dist_data.delv_per_lname
,p_date_of_birth => lr_po_dist_data.delv_per_dob
,p_business_group_id => ln_bu_id
);
IF ln_person_id IS NULL THEN
lc_error_details := lc_error_details || ' Invalid agent (employee) details.';
END IF;
END IF;
END IF;
END IF;
--BUDGET ACCOUNT
--Derive budget account segment1 from lookup
lc_errloc := 'Derive budget account segment1 from lookup';
IF (lr_po_dist_data.bud_acc_seg1 IS NOT NULL OR lr_po_dist_data.bud_acc_seg2 IS NOT NULL OR
lr_po_dist_data.bud_acc_seg3 IS NOT NULL OR lr_po_dist_data.bud_acc_seg4 IS NOT NULL OR
lr_po_dist_data.bud_acc_seg5 IS NOT NULL OR lr_po_dist_data.bud_acc_seg6 IS NOT NULL OR
lr_po_dist_data.bud_acc_seg7 IS NOT NULL) THEN
lc_bud_acc_seg1 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_COMPANY'
,p_sirf_lookup => 'XXSIRF_CNV_GL_COMPANY'
,p_old_value => lr_po_dist_data.bud_acc_seg1
);
--Derive budget account segment2 from lookup
lc_errloc := 'Derive budget account segment2 from lookup';
lc_bud_acc_seg2 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_ACCOUNT'
,p_sirf_lookup => 'XXSIRF_CNV_GL_ACCOUNT'
,p_old_value => lr_po_dist_data.bud_acc_seg2
);
--Derive budget account segment3 from lookup
lc_errloc := 'Derive budget account segment3 from lookup';
/* lc_bud_acc_seg3 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_BU'
,p_sirf_lookup => 'XXSIRF_CNV_GL_BU'
,p_old_value => lr_po_dist_data.bud_acc_seg4
); */
lc_seg3_value := NULL;
IF UPPER(lr_po_dist_data.bud_acc_seg4) = LOWER(lr_po_dist_data.bud_acc_seg4) THEN
lc_seg3_value := lr_po_dist_data.bud_acc_seg3;
ELSE
lc_seg3_value := lr_po_dist_data.bud_acc_seg4;
END IF;
lc_bud_acc_seg3 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_BU'
,p_sirf_lookup => 'XXSIRF_CNV_GL_BU'
,p_old_value => lc_seg3_value
);
--Derive budget account segment4 from lookup
lc_errloc := 'Derive budget account segment4 from lookup';
lc_bud_acc_seg4 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_DEPARTMENT'
,p_sirf_lookup => 'XXSIRF_CNV_GL_DEPARTMENT'
,p_old_value => lr_po_dist_data.bud_acc_seg4
);
--Derive budget account segment5 from lookup
lc_errloc := 'Derive budget account segment5 from lookup';
/* lc_bud_acc_seg5 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_PRODPROJ'
,p_sirf_lookup => 'XXSIRF_CNV_GL_PRODPROJ'
,p_old_value => lr_po_dist_data.bud_acc_seg5
); */
lc_seg5_value := NULL;
/* Segments 5 and 6 in the legacy instance both map onto Segment 5 in the target instance.
When mapping the data, take whichever one of the legacy instance values
in non-zero and map using lookup XXCSR_CNV_GL_PRODPROJ.
If both legacy values are zero, use the default of '000000' for Segment 5 of the target GL Account. */
IF UPPER(lr_po_dist_data.bud_acc_seg5) = LOWER(lr_po_dist_data.bud_acc_seg5) THEN -- 5 numeric
IF TO_NUMBER(lr_po_dist_data.bud_acc_seg5) = 0 THEN -- 5 is zero
IF UPPER(lr_po_dist_data.bud_acc_seg6) != LOWER(lr_po_dist_data.bud_acc_seg6) THEN
lc_seg5_value := lr_po_dist_data.bud_acc_seg6;
ELSIF TO_NUMBER(lr_po_dist_data.bud_acc_seg6) = 0 THEN -- 6 is zero
lc_seg5_value := '000000';
ELSE
lc_seg5_value := lr_po_dist_data.bud_acc_seg6;
END IF;
ELSE
IF UPPER(lr_po_dist_data.bud_acc_seg6) != LOWER(lr_po_dist_data.bud_acc_seg6) THEN
lc_error_details := lc_error_details || 'Both segment5('||lr_po_dist_data.bud_acc_seg5||') and segment6('||lr_po_dist_data.bud_acc_seg6||') cannot be non zero';
ELSIF TO_NUMBER(lr_po_dist_data.bud_acc_seg6) = 0 THEN -- 6 is zero
lc_seg5_value := lr_po_dist_data.bud_acc_seg5;
ELSE
lc_error_details := lc_error_details || 'Both segment5('||lr_po_dist_data.bud_acc_seg5||') and segment6('||lr_po_dist_data.bud_acc_seg6||') cannot be non zero';
END IF;
END IF;
ELSE -- 5 non numeric
IF UPPER(lr_po_dist_data.bud_acc_seg6) != LOWER(lr_po_dist_data.bud_acc_seg6) THEN
lc_error_details := lc_error_details || 'Both segment5('||lr_po_dist_data.bud_acc_seg5||') and segment6('||lr_po_dist_data.bud_acc_seg6||') cannot be non zero';
ELSIF TO_NUMBER(lr_po_dist_data.bud_acc_seg6) = 0 THEN -- 6 is zero
lc_seg5_value := lr_po_dist_data.bud_acc_seg5;
ELSE
lc_error_details := lc_error_details || 'Both segment5('||lr_po_dist_data.bud_acc_seg5||') and segment6('||lr_po_dist_data.bud_acc_seg6||') cannot be non zero';
END IF;
END IF;
IF lc_seg5_value IS NOT NULL AND lc_seg5_value != '000000' THEN
lc_bud_acc_seg5 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_PRODPROJ'
,p_sirf_lookup => 'XXSIRF_CNV_GL_PRODPROJ'
,p_old_value => lc_seg5_value
);
ELSIF lc_seg5_value IS NOT NULL AND lc_seg5_value = '000000' THEN
lc_bud_acc_seg5 := lc_seg5_value;
END IF;
--Derive budget account segment6 from lookup
lc_errloc := 'Derive budget account segment6 from lookup';
/* lc_bud_acc_seg6 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_INTERCO'
,p_sirf_lookup => 'XXSIRF_CNV_GL_INTERCO'
,p_old_value => lr_po_dist_data.bud_acc_seg6
); */
lc_bud_acc_seg6 := '000';
--Derive budget account segment7 from lookup
lc_errloc := 'Derive budget account segment7 from lookup';
/* lc_bud_acc_seg7 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_BUD_ACC7_LKUP'
,p_sirf_lookup => 'XXSIRF_BUD_ACC7_LKUP'
,p_old_value => lr_po_dist_data.bud_acc_seg7
); */
lc_bud_acc_seg7 := '00000';
END IF;
IF (lr_po_dist_data.accr_acc_seg1 IS NOT NULL OR lr_po_dist_data.accr_acc_seg2 IS NOT NULL OR
lr_po_dist_data.accr_acc_seg3 IS NOT NULL OR lr_po_dist_data.accr_acc_seg4 IS NOT NULL OR
lr_po_dist_data.accr_acc_seg5 IS NOT NULL OR lr_po_dist_data.accr_acc_seg6 IS NOT NULL OR
lr_po_dist_data.accr_acc_seg7 IS NOT NULL) THEN
--ACCRUAL ACCOUNT
--Derive accrual account segment1 from lookup
lc_errloc := 'Derive accrual account segment1 from lookup';
lc_accr_acc_seg1 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_COMPANY'
,p_sirf_lookup => 'XXSIRF_CNV_GL_COMPANY'
,p_old_value => lr_po_dist_data.accr_acc_seg1
);
-- Change by manishar 12/04/10 as per mdt v1.26
-- Deriving Attribute15 of the corresponding Suppliers Address
lc_errloc := 'Derive accrual account segment2 from lookup';
lc_accr_acc_seg2 := NULL;
OPEN lcu_supsite_attr15(lr_po_dist_data.po_number
,lr_po_dist_data.po_line_number
,lr_po_dist_data.shipment_num);
FETCH lcu_supsite_attr15 INTO lc_accr_acc_seg2;
CLOSE lcu_supsite_attr15;
--Derive accrual account segment2 from lookup
IF lc_accr_acc_seg2 IS NULL THEN
lc_accr_acc_seg2 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_ACCOUNT'
,p_sirf_lookup => 'XXSIRF_CNV_GL_ACCOUNT'
,p_old_value => lr_po_dist_data.accr_acc_seg2
);
END IF;
--Derive accrual account segment3 from lookup
lc_errloc := 'Derive accrual account segment3 from lookup';
lc_accr_acc_seg3 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_BU'
,p_sirf_lookup => 'XXSIRF_CNV_GL_BU'
,p_old_value => lr_po_dist_data.accr_acc_seg3
);
--Derive accrual account segment4 from lookup
lc_errloc := 'Derive accrual account segment4 from lookup';
/* lc_accr_acc_seg4 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_DEPARTMENT'
,p_sirf_lookup => 'XXSIRF_CNV_GL_DEPARTMENT'
,p_old_value => lr_po_dist_data.accr_acc_seg4
); */
--Derive budget account segment4 from lookup
lc_errloc := 'Derive budget account segment4 from lookup';
lc_accr_acc_seg4 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_DEPARTMENT'
,p_sirf_lookup => 'XXSIRF_CNV_GL_DEPARTMENT'
,p_old_value => lr_po_dist_data.accr_acc_seg4
);
--Derive accrual account segment5 from lookup
lc_errloc := 'Derive accrual account segment5 from lookup';
lc_accr_acc_seg5 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_PRODPROJ'
,p_sirf_lookup => 'XXSIRF_CNV_GL_PRODPROJ'
,p_old_value => lr_po_dist_data.accr_acc_seg5
);
--Derive accrual account segment6 from lookup
lc_errloc := 'Derive accrual account segment6 from lookup';
/* lc_accr_acc_seg6 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_INTERCO'
,p_sirf_lookup => 'XXSIRF_CNV_GL_INTERCO'
,p_old_value => lr_po_dist_data.accr_acc_seg6
); */
lc_accr_acc_seg6 := '000';
--Derive accrual account segment7 from lookup
lc_errloc := 'Derive accrual account segment7 from lookup';
/* lc_accr_acc_seg7 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_ACCR_ACC7_LKUP'
,p_sirf_lookup => 'XXSIRF_ACCR_ACC7_LKUP'
,p_old_value => lr_po_dist_data.accr_acc_seg7
); */
lc_accr_acc_seg7 := '00000';
END IF;
IF (lr_po_dist_data.var_acc_seg1 IS NOT NULL OR lr_po_dist_data.var_acc_seg2 IS NOT NULL OR
lr_po_dist_data.var_acc_seg3 IS NOT NULL OR lr_po_dist_data.var_acc_seg4 IS NOT NULL OR
lr_po_dist_data.var_acc_seg5 IS NOT NULL OR lr_po_dist_data.var_acc_seg6 IS NOT NULL OR
lr_po_dist_data.var_acc_seg7 IS NOT NULL) THEN
--VARIANCE ACCOUNT
--Derive variance account segment1 from lookup
lc_errloc := 'Derive variance account segment1 from lookup';
lc_var_acc_seg1 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_COMPANY'
,p_sirf_lookup => 'XXSIRF_CNV_GL_COMPANY'
,p_old_value => lr_po_dist_data.var_acc_seg1
);
--Derive variance account segment2 from lookup
lc_errloc := 'Derive variance account segment2 from lookup';
lc_var_acc_seg2 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_ACCOUNT'
,p_sirf_lookup => 'XXSIRF_CNV_GL_ACCOUNT'
,p_old_value => lr_po_dist_data.var_acc_seg2
);
--Derive variance account segment3 from lookup
lc_errloc := 'Derive variance account segment3 from lookup';
lc_var_acc_seg3 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_BU'
,p_sirf_lookup => 'XXSIRF_CNV_GL_BU'
,p_old_value => lr_po_dist_data.var_acc_seg4
);
--Derive variance account segment4 from lookup
lc_errloc := 'Derive variance account segment4 from lookup';
/* lc_var_acc_seg4 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_DEPARTMENT'
,p_sirf_lookup => 'XXSIRF_CNV_GL_DEPARTMENT'
,p_old_value => lr_po_dist_data.var_acc_seg4
); */
lc_seg3_value := NULL;
IF UPPER(lr_po_dist_data.var_acc_seg4) = LOWER(lr_po_dist_data.var_acc_seg4) THEN
lc_seg3_value := lr_po_dist_data.var_acc_seg3;
ELSE
lc_seg3_value := lr_po_dist_data.var_acc_seg4;
END IF;
lc_var_acc_seg3 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_BU'
,p_sirf_lookup => 'XXSIRF_CNV_GL_BU'
,p_old_value => lc_seg3_value
);
--Derive budget account segment4 from lookup
lc_errloc := 'Derive budget account segment4 from lookup';
lc_var_acc_seg4 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_DEPARTMENT'
,p_sirf_lookup => 'XXSIRF_CNV_GL_DEPARTMENT'
,p_old_value => lr_po_dist_data.var_acc_seg4
);
--Derive variance account segment5 from lookup
lc_errloc := 'Derive variance account segment5 from lookup';
/* lc_var_acc_seg5 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_PRODPROJ'
,p_sirf_lookup => 'XXSIRF_CNV_GL_PRODPROJ'
,p_old_value => lr_po_dist_data.var_acc_seg5
); */
lc_seg5_value := NULL;
/* Segments 5 and 6 in the legacy instance both map onto Segment 5 in the target instance.
When mapping the data, take whichever one of the legacy instance values
in non-zero and map using lookup XXCSR_CNV_GL_PRODPROJ.
If both legacy values are zero, use the default of '000000' for Segment 5 of the target GL Account. */
IF UPPER(lr_po_dist_data.var_acc_seg5) = LOWER(lr_po_dist_data.var_acc_seg5) THEN -- 5 numeric
IF TO_NUMBER(lr_po_dist_data.var_acc_seg5) = 0 THEN -- 5 is zero
IF UPPER(lr_po_dist_data.var_acc_seg6) != LOWER(lr_po_dist_data.var_acc_seg6) THEN
lc_seg5_value := lr_po_dist_data.var_acc_seg6;
ELSIF TO_NUMBER(lr_po_dist_data.var_acc_seg6) = 0 THEN -- 6 is zero
lc_seg5_value := '000000';
ELSE
lc_seg5_value := lr_po_dist_data.var_acc_seg6;
END IF;
ELSE
IF UPPER(lr_po_dist_data.var_acc_seg6) != LOWER(lr_po_dist_data.var_acc_seg6) THEN
lc_error_details := lc_error_details || 'Both segment5('||lr_po_dist_data.var_acc_seg5||') and segment6('||lr_po_dist_data.var_acc_seg6||') cannot be non zero';
ELSIF TO_NUMBER(lr_po_dist_data.var_acc_seg6) = 0 THEN -- 6 is zero
lc_seg5_value := lr_po_dist_data.var_acc_seg5;
ELSE
lc_error_details := lc_error_details || 'Both segment5('||lr_po_dist_data.var_acc_seg5||') and segment6('||lr_po_dist_data.var_acc_seg6||') cannot be non zero';
END IF;
END IF;
ELSE -- 5 non numeric
IF UPPER(lr_po_dist_data.var_acc_seg6) != LOWER(lr_po_dist_data.var_acc_seg6) THEN
lc_error_details := lc_error_details || 'Both segment5('||lr_po_dist_data.var_acc_seg5||') and segment6('||lr_po_dist_data.var_acc_seg6||') cannot be non zero';
ELSIF TO_NUMBER(lr_po_dist_data.var_acc_seg6) = 0 THEN -- 6 is zero
lc_seg5_value := lr_po_dist_data.var_acc_seg5;
ELSE
lc_error_details := lc_error_details || 'Both segment5('||lr_po_dist_data.var_acc_seg5||') and segment6('||lr_po_dist_data.var_acc_seg6||') cannot be non zero';
END IF;
END IF;
IF lc_seg5_value IS NOT NULL AND lc_seg5_value != '000000' THEN
lc_var_acc_seg5 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_PRODPROJ'
,p_sirf_lookup => 'XXSIRF_CNV_GL_PRODPROJ'
,p_old_value => lc_seg5_value
);
ELSIF lc_seg5_value IS NOT NULL AND lc_seg5_value = '000000' THEN
lc_var_acc_seg5 := lc_seg5_value;
END IF;
--Derive variance account segment6 from lookup
lc_errloc := 'Derive variance account segment6 from lookup';
/* lc_var_acc_seg6 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_INTERCO'
,p_sirf_lookup => 'XXSIRF_CNV_GL_INTERCO'
,p_old_value => lr_po_dist_data.var_acc_seg6
); */
lc_var_acc_seg6 := '000';
--Derive variance account segment7 from lookup
lc_errloc := 'Derive variance account segment7 from lookup';
/* lc_var_acc_seg7 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_VAR_ACC7_LKUP'
,p_sirf_lookup => 'XXSIRF_VAR_ACC7_LKUP'
,p_old_value => lr_po_dist_data.var_acc_seg7
); */
lc_var_acc_seg7 := '00000';
END IF;
/*
--Derive charge account id
lc_errloc := 'Derive charge account id';
OPEN lcu_account_id (lc_chr_acc_seg1
,lc_chr_acc_seg2
,lc_chr_acc_seg3
,lc_chr_acc_seg4
,lc_chr_acc_seg5
,lc_chr_acc_seg6
,lc_chr_acc_seg7);
FETCH lcu_account_id
INTO ln_charge_acct_id;
CLOSE lcu_account_id;
IF ln_charge_acct_id IS NULL THEN
lc_error_details := lc_error_details || 'Could not derive charge of accounts id :-'||lc_chr_acc_seg1||'-'||lc_chr_acc_seg2||'-'||lc_chr_acc_seg3||'-'||lc_chr_acc_seg4||'-'||lc_chr_acc_seg5||'-'||lc_chr_acc_seg6||'-'||lc_chr_acc_seg7;
END IF;
*/
lc_line_ship_loc := NULL;
lc_new_ship := NULL;
ln_ship_loc_id := NULL;
lc_ship_org := NULL;
OPEN lcu_ship_po_line(lr_po_dist_data.po_number
,lr_po_dist_data.shipment_num
,lr_po_dist_data.po_line_number);
FETCH lcu_ship_po_line
INTO lc_line_ship_loc;
CLOSE lcu_ship_po_line;
lc_new_ship := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_DELIVER_LOCATIONS'
,'XXSIRF_CNV_DELIVER_LOCATIONS'
,lc_line_ship_loc
);
OPEN lcu_hr_loc_org(lc_new_ship);
FETCH lcu_hr_loc_org
INTO ln_ship_loc_id
,lc_ship_org;
CLOSE lcu_hr_loc_org;
IF lc_ship_org = 'CSD' THEN
OPEN lcu_charge_account_id(ln_ship_loc_id,'UK_MAIN');
FETCH lcu_charge_account_id INTO ln_charge_acct_id ;
CLOSE lcu_charge_account_id;
IF ln_charge_acct_id IS NULL THEN
lc_error_details := lc_error_details || 'Could not derive charge of accounts id ';
END IF;
ELSIF lc_ship_org = 'CSI' THEN
OPEN lcu_charge_account_id(ln_ship_loc_id,'CSI_MAIN');
FETCH lcu_charge_account_id INTO ln_charge_acct_id ;
CLOSE lcu_charge_account_id;
IF ln_charge_acct_id IS NULL THEN
lc_error_details := lc_error_details || 'Could not derive charge of accounts id ';
END IF;
ELSIF lc_ship_org = 'CSL' THEN
OPEN lcu_charge_account_id(ln_ship_loc_id,'CSL_MAIN');
FETCH lcu_charge_account_id INTO ln_charge_acct_id ;
CLOSE lcu_charge_account_id;
IF ln_charge_acct_id IS NULL THEN
lc_error_details := lc_error_details || 'Could not derive charge of accounts id ';
END IF;
ELSIF lc_ship_org = 'CDC' THEN
OPEN lcu_charge_account_id(ln_ship_loc_id,'AK1_COM');
FETCH lcu_charge_account_id INTO ln_charge_acct_id ;
CLOSE lcu_charge_account_id;
IF ln_charge_acct_id IS NULL THEN
lc_error_details := lc_error_details || 'Could not derive charge of accounts id ';
END IF;
ELSE
OPEN lcu_charge_account_id(ln_ship_loc_id,'RM_COM');
FETCH lcu_charge_account_id INTO ln_charge_acct_id ;
CLOSE lcu_charge_account_id;
IF ln_charge_acct_id IS NULL THEN
lc_error_details := lc_error_details || 'Could not derive charge of accounts id ';
END IF;
END IF;
--Derive budget account id
lc_errloc := 'Derive budget account id';
OPEN lcu_account_id (lc_bud_acc_seg1
,lc_bud_acc_seg2
,lc_bud_acc_seg3
,lc_bud_acc_seg4
,lc_bud_acc_seg5
,lc_bud_acc_seg6
,lc_bud_acc_seg7);
FETCH lcu_account_id
INTO ln_budget_acct_id;
CLOSE lcu_account_id;
--Derive accrual account id
lc_errloc := 'Derive accrual account id';
OPEN lcu_account_id (lc_accr_acc_seg1
,lc_accr_acc_seg2
,lc_accr_acc_seg3
,lc_accr_acc_seg4
,lc_accr_acc_seg5
,lc_accr_acc_seg6
,lc_accr_acc_seg7);
FETCH lcu_account_id
INTO ln_accrual_acct_id;
CLOSE lcu_account_id;
--Derive variance account id
lc_errloc := 'Derive variance account id';
OPEN lcu_account_id (lc_var_acc_seg1
,lc_var_acc_seg2
,lc_var_acc_seg3
,lc_var_acc_seg4
,lc_var_acc_seg5
,lc_var_acc_seg6
,lc_var_acc_seg7);
FETCH lcu_account_id
INTO ln_variance_acct_id;
CLOSE lcu_account_id;
IF lc_error_details IS NULL THEN
--Insert purchase order distrbutions data in interface table
lc_errloc := 'Insert purchase order distrbutions data in interface table';
INSERT INTO po_distributions_interface
(interface_line_id
,interface_header_id
,interface_distribution_id
,process_code
,distribution_num
,org_id
,quantity_ordered
,quantity_delivered
,quantity_billed
,quantity_cancelled
,rate_date
,rate
,deliver_to_location_id
,deliver_to_person_id
,destination_type_code
,destination_organization
,destination_context
,set_of_books
,charge_account_id
,budget_account_id
,accrual_account_id
,variance_account_id
,amount_billed
,accrue_on_receipt_flag
,accrued_flag
,prevent_encumbrance_flag
,encumbered_flag
,gl_cancelled_date
--,requisition_num
--,requisition_line_num
--,req_distribution_num
,project_accounting_context
,recoverable_tax
,nonrecoverable_tax
-- ,recovery_rate
-- ,tax_recovery_override_flag
,last_update_date
,last_updated_by
,creation_date
,created_by
)
VALUES
(ln_po_int_line_id
,ln_po_int_header_id
,po_distributions_interface_s.nextval
,'PENDING'
,lr_po_dist_data.distribution_num
,ln_org_id
,(lr_po_dist_data.quantity_ordered - lr_po_dist_data.quantity_delivered - lr_po_dist_data.quantity_cancelled)
,0 --lr_po_dist_data.quantity_delivered
,0 --lr_po_dist_data.quantity_billed
,0 --lr_po_dist_data.quantity_cancelled
,lr_po_dist_data.rate_date
,lr_po_dist_data.rate
,ln_location_id
,ln_person_id
,lr_po_dist_data.destination_type_code
,lc_new_org_name --lr_po_dist_data.destination_organization
,lr_po_dist_data.destination_context
,ln_sob_id
,ln_charge_acct_id
,ln_budget_acct_id
,ln_accrual_acct_id
,ln_variance_acct_id
,lr_po_dist_data.amount_billed
,'Y' -- lr_po_dist_data.accrue_on_receipt_flag as per MDT version 1.23
,lr_po_dist_data.accrued_flag
,lr_po_dist_data.prevent_encumbrance_flag
,lr_po_dist_data.encumbered_flag
,lr_po_dist_data.gl_cancelled_date
--,lr_po_dist_data.requisition_num
--,lr_po_dist_data.requisition_line_num
--,lr_po_dist_data.req_distribution_num
,lr_po_dist_data.project_accounting_context
,lr_po_dist_data.recoverable_tax
,lr_po_dist_data.nonrecoverable_tax
-- ,lr_po_dist_data.recovery_rate
-- ,lr_po_dist_data.tax_recovery_override_flag
,SYSDATE
,fnd_global.user_id
,SYSDATE
,fnd_global.user_id
);
UPDATE xxcsr_po_distributions_int
SET record_status = 'C'
,request_id = FND_GLOBAL.conc_request_id
,error_message = NULL
WHERE rowid = lr_po_dist_data.rowid;
COMMIT;
ln_dist_cnt := ln_dist_cnt + 1;
ELSE
UPDATE xxcsr_po_distributions_int
SET record_status = 'E'
,request_id = FND_GLOBAL.conc_request_id
,error_message = lc_error_details
WHERE rowid = lr_po_dist_data.rowid;
IF ln_po_int_line_id IS NOT NULL THEN
UPDATE xxcsr_po_lines_int
SET record_status = 'E'
,error_message = error_message||'error in distribution record'
WHERE po_number = lr_po_dist_data.po_number
AND line_num = lr_po_dist_data.po_line_number
AND shipment_num = lr_po_dist_data.shipment_num
AND source_instance = p_instance_name;
DELETE FROM po_lines_interface
WHERE interface_line_id = ln_po_int_line_id;
ln_lines_cnt := ln_lines_cnt - 1;
END IF;
IF ln_po_int_header_id IS NOT NULL THEN
UPDATE xxcsr_po_headers_int
SET record_status = 'E'
,error_message = error_message||'error in distribution record'
WHERE po_number = lr_po_dist_data.po_number
AND source_instance = p_instance_name;
DELETE FROM po_headers_interface
WHERE interface_header_id = ln_po_int_header_id;
ln_header_cnt := ln_header_cnt - 1;
END IF;
END IF; --lc_error_details IS NULL
COMMIT;
END LOOP;
COMMIT;
IF ln_header_cnt > 0 THEN
--Calling Import Standard Purchase Orders program
lc_errloc := 'Call Import Standard Purchase Orders program';
FND_FILE.PUT_LINE(FND_FILE.LOG,'Submitting Import Standard Purchase Orders concurrent program.');
ln_cur_org_id := FND_PROFILE.VALUE('ORG_ID');
FND_FILE.PUT_LINE(FND_FILE.LOG,'ln_cur_org_id : ' || ln_cur_org_id);
ln_request_id := FND_REQUEST.SUBMIT_REQUEST (
application => 'PO'
,program => 'POXPOPDOI'
,description => 'Import Standard Purchase Orders'
,start_time => SYSDATE
,sub_request => FALSE
,argument1 => NULL --Default Buyer
,argument2 => 'STANDARD' --Document Type
,argument3 => NULL --Document SubType
,argument4 => 'N' --Create or Update Items
,argument5 => NULL --Create Sourcing Rules
,argument6 => 'APPROVED' --Approval Status
,argument7 => NULL --Release Generation Method
,argument8 => NULL --Batch Id
,argument9 => ln_cur_org_id --Operating Unit
,argument10 => NULL --Global Agreement
,argument11 => NULL --Enable Sourcing Level
,argument12 => NULL --Sourcing Level
,argument13 => NULL --Inv Org Enable
,argument14 => NULL --Inventory Organization
);
COMMIT;
IF ln_request_id = 0 THEN
lc_error := 'Error submitting Import Standard Purchase Orders concurrent program.';
RAISE ex_conc_error;
END IF;
FND_FILE.PUT_LINE(FND_FILE.LOG,'Import Standard Purchase Orders concurrent program submitted. Request_id : ' || ln_request_id);
--Wait for the request to complete
lb_wait := FND_CONCURRENT.WAIT_FOR_REQUEST
(
request_id => ln_request_id
,interval => 2
,phase => lc_phase
,status => lc_status
,dev_phase => lc_devpha
,dev_status => lc_devsta
,message => lc_mesg
);
END IF; --ln_header_cnt > 0
x_header_cnt := ln_header_cnt;
x_lines_cnt := ln_lines_cnt;
x_dist_cnt := ln_dist_cnt;
x_req_id := ln_request_id;
-- Contracts import
FOR lr_po_header_contr IN lcu_po_header_contr (p_rec_status)
LOOP
ln_org_id := NULL;
ln_agent_id := NULL;
ln_bu_id := NULL;
lc_currency_code := NULL;
ln_vendor_id := NULL;
lc_payment_terms := NULL;
lc_freight_terms := NULL;
lc_error_details := NULL;
lc_new_orgname := NULL;
lc_business_group := NULL;
ln_bill_loc_id := NULL;
ln_ship_loc_id := NULL;
lc_inv_po_chk := NULL;
lc_func_curr := NULL;
lc_rate_type := NULL;
ln_rate := NULL;
ld_rate_date := NULL;
lc_new_ship := NULL;
lc_new_bill := NULL;
ln_vendor_site_id := NULL;
ln_vendor_contact_id := NULL;
ln_term_id := NULL;
lc_po_exists := NULL;
-- check if PO already exists
OPEN lcu_check_po_exists(lr_po_header_contr.po_number);
FETCH lcu_check_po_exists
INTO lc_po_exists;
CLOSE lcu_check_po_exists;
IF lc_po_exists IS NOT NULL THEN
lc_error_details := lc_error_details||'PO already exists';
END IF;
lc_errloc := 'Operating unit related derivations';
lc_new_orgname := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_OPERATING_UNIT'
,'XXSIRF_CNV_OPERATING_UNIT'
,lr_po_header_contr.operating_unit
);
IF lc_new_orgname IS NULL THEN
lc_error_details := lc_error_details||'Could not derive new operating unit for '||lr_po_header_contr.operating_unit||'. ';
ELSE
ln_org_id := XXCSR_COMMON_PKG.get_organization_id(lc_new_orgname);
IF ln_org_id IS NULL THEN
lc_error_details := lc_error_details||'Could not derive org id for new operating unit '||lc_new_orgname||'. ';
ELSE
-- Compare functional and document currency
OPEN lcu_func_curr(ln_org_id);
FETCH lcu_func_curr
INTO lc_func_curr;
CLOSE lcu_func_curr;
IF lc_func_curr = lr_po_header_contr.currency_code THEN
lc_rate_type := NULL;
ln_rate := NULL;
ld_rate_date := NULL;
ELSE
lc_rate_type := lr_po_header_contr.rate_type;
ln_rate := lr_po_header_contr.rate;
ld_rate_date := lr_po_header_contr.rate_date;
END IF;
END IF;
END IF;
/* lc_errloc := 'Checking for inventory purchase orders';
lc_inv_po_chk := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_INV_SUPPLIERS'
,'XXSIRF_CNV_INV_SUPPLIERS'
,lr_po_header_contr.vendor_name
);
IF lc_inv_po_chk IS NULL THEN
lc_error_details := lc_error_details||'Only inventory purchase orders will be migrated';
END IF; */
/* Commented by Nishka, added the above derivation
--Derive org id
lc_errloc := 'Derive org id';
ln_org_id := XXCSR_COMMON_PKG.get_organization_id(lr_po_header_contr.operating_unit);
IF ln_org_id IS NULL THEN
lc_error_details := 'Invalid operating unit name.';
END IF; */
/* OPEN lcu_bu_id (lr_po_header_contr.emp_bu_name);
FETCH lcu_bu_id
INTO ln_bu_id;
CLOSE lcu_bu_id; */
IF lr_po_header_contr.emp_bu_name IN ( 'CSR United States','CSR United Kingdom') THEN
lc_business_group := lr_po_header_contr.emp_bu_name;
ELSE
lc_business_group := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_HR_BG'
,'XXSIRF_CNV_HR_BG'
,lr_po_header_contr.emp_bu_name
);
END IF;
IF lc_business_group IS NULL THEN
lc_error_details := lc_error_details||'Mapping for Business Group '||lr_po_header_contr.emp_bu_name||' could not be found. ';
ELSE
ln_bu_id := XXCSR_COMMON_PKG.get_business_group_id(lc_business_group);
IF ln_bu_id IS NULL THEN
lc_error_details:= lc_error_details||' Business Group ID for '||lc_business_group||' could not be derived. ';
ELSE
--Derive agent id
lc_errloc := 'Derive agent id';
ln_agent_id := XXCSR_COMMON_PKG.get_person_id (p_first_name => lr_po_header_contr.emp_fname
,p_last_name => lr_po_header_contr.emp_lname
,p_date_of_birth => lr_po_header_contr.emp_dob
,p_business_group_id => ln_bu_id
);
IF ln_agent_id IS NULL THEN
lc_error_details := lc_error_details || ' Invalid agent (employee) details.';
END IF;
END IF;
END IF;
--Check currency code
lc_errloc := 'Check currency code';
OPEN lcu_chk_currency (lr_po_header_contr.currency_code);
FETCH lcu_chk_currency
INTO lc_currency_code;
IF lcu_chk_currency%NOTFOUND THEN
lc_error_details := lc_error_details || ' Invalid currency code.';
END IF;
CLOSE lcu_chk_currency;
--Derive vendor id
lc_errloc := 'Derive vendor id';
IF lr_po_header_contr.vendor_name IS NOT NULL THEN
OPEN lcu_vendor_der(lr_po_header_contr.vendor_name);
FETCH lcu_vendor_der
INTO ln_vendor_id;
CLOSE lcu_vendor_der;
IF ln_vendor_id IS NULL THEN
lc_error_details := lc_error_details || ' Vendor not migrated.';
END IF;
END IF;
lc_errloc := 'Check payment terms';
IF lr_po_header_contr.payment_terms IS NOT NULL THEN
lc_payment_terms := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_SUPPLIER_PAYTERMS'
,p_sirf_lookup => 'XXSIRF_CNV_SUPPLIER_PAYTERMS'
,p_old_value => lr_po_header_contr.payment_terms
);
IF lc_payment_terms IS NULL THEN
lc_error_details := lc_error_details || ' Invalid payment terms.';
ELSE
OPEN lcu_pay_term(lc_payment_terms);
FETCH lcu_pay_term
INTO ln_term_id;
CLOSE lcu_pay_term;
IF ln_term_id IS NULL THEN
lc_error_details := lc_error_details || 'Could not derive payment term id for '||lc_payment_terms;
END IF;
END IF;
END IF;
--Check freight terms
lc_errloc := 'Check freight terms';
IF lr_po_header_contr.freight_terms IS NOT NULL THEN
lc_freight_terms := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_FREIGHT_TERMS'
,p_sirf_lookup => 'XXSIRF_CNV_FREIGHT_TERMS'
,p_old_value => lr_po_header_contr.freight_terms
);
IF lc_freight_terms IS NULL THEN
lc_error_details := lc_error_details || ' Invalid freight terms.';
END IF;
END IF;
IF lr_po_header_contr.ship_to_location IS NOT NULL THEN
lc_new_ship := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_DELIVER_LOCATIONS'
,'XXSIRF_CNV_DELIVER_LOCATIONS'
,lr_po_header_contr.ship_to_location
);
IF lc_new_ship IS NULL THEN
lc_error_details := lc_error_details||'Could not derive new ship to location for '||lr_po_header_contr.ship_to_location||' in XXCSR_CNV_DELIVER_LOCATIONS. ';
ELSE
OPEN lcu_hr_loc(lc_new_ship);
FETCH lcu_hr_loc
INTO ln_ship_loc_id;
CLOSE lcu_hr_loc;
IF ln_ship_loc_id IS NULL THEN
lc_error_details := lc_error_details || 'Ship to location id could not be derived for '||lr_po_header_contr.ship_to_location;
END IF;
END IF;
END IF;
IF lr_po_header_contr.bill_to_location IS NOT NULL THEN
lc_new_bill := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_BILLTO_LOCATIONS'
,'XXSIRF_CNV_BILLTO_LOCATIONS'
,lr_po_header_contr.bill_to_location
);
IF lc_new_bill IS NULL THEN
lc_error_details := lc_error_details||'Could not derive new bill to location for '||lr_po_header_contr.bill_to_location||' in XXCSR_CNV_BILLTO_LOCATIONS. ';
ELSE
OPEN lcu_hr_loc(lc_new_bill);
FETCH lcu_hr_loc
INTO ln_bill_loc_id;
CLOSE lcu_hr_loc;
IF ln_bill_loc_id IS NULL THEN
lc_error_details := lc_error_details || 'Bill to location id could not be derived for '||lr_po_header_contr.bill_to_location;
END IF;
END IF;
END IF;
OPEN lcu_vendor_site(lr_po_header_contr.vendor_site_code
,ln_vendor_id);
FETCH lcu_vendor_site
INTO ln_vendor_site_id;
CLOSE lcu_vendor_site;
OPEN lcu_vendor_contact(ln_vendor_site_id);
FETCH lcu_vendor_contact
INTO ln_vendor_contact_id;
CLOSE lcu_vendor_contact;
/* ln_line_item_cnt := NULL;
ln_po_item_chk := NULL;
-- Check whether the po line has valid items.
OPEN lcu_po_line_itm(lr_po_header_contr.po_number);
FETCH lcu_po_line_itm
INTO ln_line_item_cnt;
CLOSE lcu_po_line_itm;
IF ln_line_item_cnt != 0 THEN
OPEN lcu_po_itm_chk(lr_po_header_contr.po_number);
FETCH lcu_po_itm_chk
INTO ln_po_item_chk;
CLOSE lcu_po_itm_chk;
IF ln_po_item_chk = 0 THEN
lc_error_details := lc_error_details || 'Inventory item id for po line could not be derived';
END IF;
END IF; */
IF lc_error_details IS NULL THEN
--Insert purchase order header data in interface table
lc_errloc := 'Insert purchase order header data in interface table';
BEGIN
ln_po_header_id := NULL;
ln_po_header_id := PO_HEADERS_S.nextval;
INSERT INTO po_headers_all (
po_header_id
,agent_id
,type_lookup_code
,created_by
,creation_date
,last_update_date
,last_updated_by
,last_update_login
,request_id
,segment1
,summary_flag
,enabled_flag
,vendor_id
,vendor_site_id
,vendor_contact_id
,ship_to_location_id
,bill_to_location_id
,terms_id
,currency_code
,rate_type
,rate_date
,rate
,authorization_status
,revision_num
,approved_flag
,approved_date
,print_count
,confirming_order_flag
,comments
,acceptance_required_flag
,cancel_flag
,frozen_flag
,closed_code
,org_id
,interface_source_code
-- ,wf_item_type
-- ,wf_item_key
,xml_flag
,document_creation_method
,submit_date
,style_id
,freight_terms_lookup_code
,attribute_category
,pay_on_code
,global_agreement_flag
)
VALUES
(
ln_po_header_id
,ln_agent_id
,'CONTRACT'
,FND_GLOBAL.USER_ID
,SYSDATE
,SYSDATE
,FND_GLOBAL.USER_ID
,FND_GLOBAL.LOGIN_ID
,gn_conc_req_id
,lr_po_header_contr.po_number
,'N'
,'Y'
,ln_vendor_id
,ln_vendor_site_id
,ln_vendor_contact_id
,ln_ship_loc_id -- lr_po_header_contr.ship_to_location
,ln_bill_loc_id -- lr_po_header_contr.bill_to_location
,ln_term_id
,lr_po_header_contr.currency_code
,DECODE(lc_rate_type,'Corporate','User',lc_rate_type)
,ld_rate_date
,ln_rate
,DECODE(lr_po_header_contr.approval_status,'REQUIRES REAPPROVAL','INCOMPLETE',lr_po_header_contr.approval_status)
,0
,lr_po_header_contr.approved_flag
,lr_po_header_contr.approved_date
--,DECODE(lr_po_header_contr.approval_status,'APPROVED',lr_po_header_contr.print_count,0)
,DECODE(lr_po_header_contr.approval_status,'APPROVED',1,0)
,lr_po_header_contr.confirming_order_flag
,lr_po_header_contr.comments
,lr_po_header_contr.acceptance_required_flag
,'N'
,lr_po_header_contr.frozen_flag
,lr_po_header_contr.closed_code
,ln_org_id
,'XXCSR Conversion'
-- ,-- wf_item_type
-- ,-- wf_item_key
,'N'
,'PDOI'
,SYSDATE
, 1 -- style_id
,lc_freight_terms
,lr_po_header_contr.attribute_category
,lr_po_header_contr.pay_on_code
,'Y'
);
INSERT INTO PO_GA_ORG_ASSIGNMENTS(PO_HEADER_ID
,ORGANIZATION_ID
,ENABLED_FLAG
,VENDOR_SITE_ID
,LAST_UPDATE_DATE
,LAST_UPDATED_BY
,CREATION_DATE
,CREATED_BY
,LAST_UPDATE_LOGIN
,PURCHASING_ORG_ID
,ORG_ASSIGNMENT_ID
)
VALUES (ln_po_header_id
,ln_org_id
,'Y'
,ln_vendor_site_id
,SYSDATE
,FND_GLOBAL.USER_ID
,SYSDATE
,FND_GLOBAL.USER_ID
,FND_GLOBAL.LOGIN_ID
,ln_org_id
,PO_GA_ORG_ASSIGNMENTS_S.NEXTVAL
);
UPDATE xxcsr_po_headers_int
SET record_status = 'C'
,request_id = FND_GLOBAL.conc_request_id
,error_message = NULL
WHERE rowid = lr_po_header_contr.rowid;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
lc_error_details := SQLERRM;
UPDATE xxcsr_po_headers_int
SET record_status = 'E'
,request_id = FND_GLOBAL.conc_request_id
,error_message = lc_error_details
WHERE rowid = lr_po_header_contr.rowid;
END;
-- ln_header_cnt := ln_header_cnt + 1;
ELSE
UPDATE xxcsr_po_headers_int
SET record_status = 'E'
,request_id = FND_GLOBAL.conc_request_id
,error_message = lc_error_details
WHERE rowid = lr_po_header_contr.rowid;
END IF; --lc_error_details IS NULL
COMMIT;
END LOOP;
COMMIT;
--
EXCEPTION
WHEN EX_CONC_ERROR THEN
x_retcode := 2;
x_errbuf := lc_errmsg;
FND_FILE.PUT_LINE(FND_FILE.LOG,lc_errmsg);
WHEN OTHERS THEN
x_errbuf := SUBSTR(SQLERRM,1,200);
x_retcode := 2;
FND_FILE.PUT_LINE(FND_FILE.LOG,'Unexpected error occurred in import procedure at ' || lc_errloc || ' Error : ' || SQLERRM);
END import_csr;
-----=========================Import ZORAN procedure=========================
PROCEDURE import_zoran
(p_rec_status IN VARCHAR2
,p_instance_name IN VARCHAR2
,x_errbuf OUT NOCOPY VARCHAR2
,x_retcode OUT NOCOPY NUMBER
,x_header_cnt OUT NOCOPY NUMBER
,x_lines_cnt OUT NOCOPY NUMBER
,x_dist_cnt OUT NOCOPY NUMBER
,x_req_id OUT NOCOPY NUMBER
)
IS
--
CURSOR lcu_po_header_data (pv_rec_status VARCHAR2)
IS
SELECT XHEC.rowid,XHEC.*
FROM xxcsr_po_headers_int XHEC
WHERE XHEC.record_status = pv_rec_status
AND XHEC.request_id = gn_conc_req_id
AND XHEC.source_instance = p_instance_name
AND XHEC.document_type_code <> 'CONTRACT';
CURSOR lcu_po_header_contr (pv_rec_status VARCHAR2)
IS
SELECT XHEC.rowid,XHEC.*
FROM xxcsr_po_headers_int XHEC
WHERE XHEC.record_status = pv_rec_status
AND XHEC.request_id = gn_conc_req_id
AND XHEC.source_instance = p_instance_name
AND XHEC.document_type_code = 'CONTRACT';
CURSOR lcu_po_lines_data (pv_rec_status VARCHAR2)
IS
SELECT XHEC.rowid,XHEC.*
FROM xxcsr_po_lines_int XHEC
WHERE XHEC.record_status = pv_rec_status
AND XHEC.request_id = gn_conc_req_id
AND XHEC.source_instance = p_instance_name;
CURSOR lcu_po_dist_data (pv_rec_status VARCHAR2)
IS
SELECT XHEC.rowid,XHEC.*
FROM xxcsr_po_distributions_int XHEC
WHERE XHEC.record_status = pv_rec_status
AND XHEC.request_id = gn_conc_req_id
AND XHEC.source_instance = p_instance_name;
CURSOR lcu_chk_currency (pv_currency_code VARCHAR2)
IS
SELECT currency_code
FROM fnd_currencies
WHERE currency_code = pv_currency_code
AND enabled_flag = 'Y'
AND SYSDATE BETWEEN NVL(START_DATE_ACTIVE, SYSDATE) AND NVL(END_DATE_ACTIVE, SYSDATE);
CURSOR lcu_item_cat_id (pv_seg1 VARCHAR2,pv_seg2 VARCHAR2,pv_seg3 VARCHAR2,pv_seg4 VARCHAR2,pv_seg5 VARCHAR2)
IS
SELECT category_id
FROM mtl_categories
WHERE segment1 = pv_seg1
AND segment2 = pv_seg2
AND segment3 = pv_seg3
AND segment4 = pv_seg4
AND segment5 = pv_seg5
AND enabled_flag = 'Y'
AND SYSDATE BETWEEN NVL(START_DATE_ACTIVE, SYSDATE) AND NVL(END_DATE_ACTIVE, SYSDATE);
CURSOR lcu_get_int_header_id (pv_po_number VARCHAR2)
IS
SELECT interface_header_id
FROM po_headers_interface
WHERE document_num = pv_po_number
ORDER BY 1 DESC;
CURSOR lcu_get_int_line_id (pv_po_number VARCHAR2
,pv_po_line_number VARCHAR2
,p_shipment_num VARCHAR2)
IS
SELECT interface_line_id
FROM po_lines_interface
WHERE document_num = pv_po_number
AND line_num = pv_po_line_number
AND shipment_num = p_shipment_num;
CURSOR lcu_account_id (pv_seg1 VARCHAR2,pv_seg2 VARCHAR2,pv_seg3 VARCHAR2,pv_seg4 VARCHAR2,pv_seg5 VARCHAR2,pv_seg6 VARCHAR2,pv_seg7 VARCHAR2)
IS
SELECT code_combination_id
FROM gl_code_combinations_kfv
WHERE segment1 = pv_seg1
AND segment2 = pv_seg2
AND segment3 = pv_seg3
AND segment4 = pv_seg4
AND segment5 = pv_seg5
AND segment6 = pv_seg6
AND segment7 = pv_seg7;
CURSOR lcu_charge_account_id (p_ship_location NUMBER, p_second_inv VARCHAR2)
IS
SELECT GCC.code_combination_id
FROM gl_code_combinations gcc
,mtl_secondary_inventories msi
,hr_locations hl
WHERE MSI.material_account = GCC.code_combination_id
AND MSI.secondary_inventory_name = p_second_inv
AND MSI.organization_id = HL.inventory_organization_id
AND HL.location_id = p_ship_location;
CURSOR lcu_get_sob_id (pv_sob_name VARCHAR2)
IS
SELECT set_of_books_id
FROM gl_sets_of_books
WHERE name = pv_sob_name;
--sjacob commented below
CURSOR lcu_location_id (pv_loc_code VARCHAR2)
IS
SELECT location_id
FROM hr_locations
WHERE location_code = pv_loc_code;
CURSOR lcu_item_id(p_seg1 IN VARCHAR2
,p_seg2 IN VARCHAR2
,p_seg3 IN VARCHAR2 -- sjacob commented as per Siva's mail
)
IS
SELECT MSIB.inventory_item_id
FROM mtl_system_items_b MSIB
WHERE MSIB.segment1 = p_seg1
AND NVL(MSIB.segment2,-99) = NVL(p_seg2,-99)
AND NVL(MSIB.segment3,-99) = NVL(p_seg3,-99) -- sjacob commented as per Siva's mail
AND ROWNUM <= 1;
----------1)change
CURSOR lcu_vendor_der(p_vendor IN VARCHAR2)
IS
SELECT vendor_id
FROM AP_SUPPLIERS
WHERE attribute15 = p_vendor;
CURSOR lcu_hr_loc(p_location_code IN VARCHAR2)
IS
SELECT HLA.location_id
FROM hr_locations_all HLA
WHERE HLA.location_code = p_location_code;
CURSOR lcu_hr_loc_org(p_location_code IN VARCHAR2)
IS
SELECT HLA.location_id
,OOD.organization_code
FROM hr_locations_all HLA
,org_organization_definitions OOD
WHERE HLA.location_code = p_location_code
AND OOD.organization_id = HLA.inventory_organization_id;
CURSOR lcu_ship_po_line(p_po_number IN VARCHAR2
,p_shipment_num IN NUMBER
,p_line_num IN NUMBER)
IS
SELECT ship_to_location
FROM xxcsr_po_lines_int XPLI
WHERE XPLI.po_number = p_po_number
AND XPLI.shipment_num = p_shipment_num
AND XPLI.line_num = p_line_num
AND XPLI.source_instance = p_instance_name;
CURSOR lcu_func_curr(p_org_id IN NUMBER)
IS
SELECT GL.currency_code
FROM hr_operating_units HOU
,gl_ledgers GL
WHERE GL.ledger_id = HOU.set_of_books_id
AND HOU.organization_id = p_org_id;
CURSOR lcu_po_line_itm(p_po_num IN VARCHAR2)
IS
SELECT count('x')
FROM xxcsr_po_lines_int XPLI
WHERE XPLI.po_number = p_po_num
AND XPLI.itm_seg1_item_num IS NOT NULL
AND XPLI.source_instance = p_instance_name;
---------2)change
CURSOR lcu_vendor_site(p_vendor_site_code IN VARCHAR2
,p_vendor_id IN NUMBER)
IS
SELECT POVS.vendor_site_id
FROM AP_SUPPLIER_SITES_ALL POVS
WHERE POVS.vendor_site_code = p_vendor_site_code
AND POVS.vendor_id = p_vendor_id;
---------3)change
CURSOR lcu_vendor_contact(p_vendor_site_id IN NUMBER)
IS
SELECT PVC.vendor_contact_id
FROM AP_SUPPLIER_CONTACTS PVC
WHERE PVC.vendor_site_id = p_vendor_site_id;
CURSOR lcu_pay_term(p_payterm IN VARCHAR2)
IS
SELECT APT.term_id
FROM ap_terms APT
WHERE APT.name = p_payterm;
CURSOR lcu_check_po_exists(p_po_number IN VARCHAR2)
IS
SELECT 1
FROM po_headers_all PHA
WHERE PHA.segment1 = p_po_number;
CURSOR lcu_check_lines(p_po_number IN VARCHAR2)
IS
SELECT 1
FROM xxcsr_po_lines_int XPLI
WHERE XPLI.po_number = p_po_number;
CURSOR lcu_prim_uom(p_org_code IN VARCHAR2
,p_item_id IN NUMBER)
IS
SELECT MSIB.primary_unit_of_measure
FROM mtl_system_items_b MSIB
,mtl_parameters MP
WHERE MSIB.inventory_item_id = p_item_id
AND MSIB.organization_id = MP.master_organization_id
AND MP.organization_code = p_org_code;
--------4)change
CURSOR lcu_supsite_attr15(p_doc_num VARCHAR2
,p_lin_num VARCHAR2
,p_shp_num VARCHAR2)
IS
SELECT PVS.attribute15
FROM po_headers_interface PHI
,po_lines_interface PLI
,AP_SUPPLIER_SITES_ALL PVS
WHERE PHI.interface_header_id = PLI.interface_header_id
AND PHI.vendor_id = PVS.vendor_id
AND PHI.vendor_id = PVS.vendor_id
AND PVS.org_id = PHI.org_id
AND PVS.vendor_site_code = PHI.vendor_site_code
AND PLI.document_num = p_doc_num
AND PLI.line_num = p_lin_num
AND PLI.shipment_num = p_shp_num;
lr_po_header_data lcu_po_header_data%ROWTYPE;
lr_po_lines_data lcu_po_lines_data%ROWTYPE;
lr_po_dist_data lcu_po_dist_data%ROWTYPE;
lc_errmsg VARCHAR2(2000);
lc_errloc VARCHAR2(1000);
ln_request_id NUMBER;
lc_phase VARCHAR2(500);
lc_status VARCHAR2(500);
lc_devpha VARCHAR2(500);
lc_devsta VARCHAR2(500);
lc_mesg VARCHAR2(50);
lb_wait BOOLEAN;
ln_org_id NUMBER;
ln_item_org_id NUMBER;
ln_agent_id NUMBER;
lc_currency_code VARCHAR2(15);
ln_vendor_id NUMBER;
lc_payment_terms VARCHAR2(50);
lc_freight_terms VARCHAR2(25);
ln_item_id NUMBER;
lc_item_seg2 VARCHAR2(40);
lc_cat_seg1 VARCHAR2(40);
lc_cat_seg2 VARCHAR2(40);
lc_cat_seg3 VARCHAR2(40);
lc_cat_seg4 VARCHAR2(40);
lc_cat_seg5 VARCHAR2(40);
lc_inv_org_code VARCHAR2(30);
ln_cat_id NUMBER;
ln_po_int_header_id NUMBER;
ln_po_int_line_id NUMBER;
ln_tax_code_id NUMBER;
ln_charge_acct_id NUMBER;
ln_budget_acct_id NUMBER;
ln_accrual_acct_id NUMBER;
ln_variance_acct_id NUMBER;
ln_sob_id NUMBER;
ln_location_id NUMBER;
ln_person_org_id NUMBER;
ln_person_id NUMBER;
ln_bu_id NUMBER;
lc_chr_acc_seg1 VARCHAR2(40);
lc_chr_acc_seg2 VARCHAR2(40);
lc_chr_acc_seg3 VARCHAR2(40);
lc_chr_acc_seg4 VARCHAR2(40);
lc_chr_acc_seg5 VARCHAR2(40);
lc_chr_acc_seg6 VARCHAR2(40);
lc_chr_acc_seg7 VARCHAR2(40);
lc_bud_acc_seg1 VARCHAR2(40);
lc_bud_acc_seg2 VARCHAR2(40);
lc_bud_acc_seg3 VARCHAR2(40);
lc_bud_acc_seg4 VARCHAR2(40);
lc_bud_acc_seg5 VARCHAR2(40);
lc_bud_acc_seg6 VARCHAR2(40);
lc_bud_acc_seg7 VARCHAR2(40);
lc_accr_acc_seg1 VARCHAR2(40);
lc_accr_acc_seg2 VARCHAR2(40);
lc_accr_acc_seg3 VARCHAR2(40);
lc_accr_acc_seg4 VARCHAR2(40);
lc_accr_acc_seg5 VARCHAR2(40);
lc_accr_acc_seg6 VARCHAR2(40);
lc_accr_acc_seg7 VARCHAR2(40);
lc_var_acc_seg1 VARCHAR2(40);
lc_var_acc_seg2 VARCHAR2(40);
lc_var_acc_seg3 VARCHAR2(40);
lc_var_acc_seg4 VARCHAR2(40);
lc_var_acc_seg5 VARCHAR2(40);
lc_var_acc_seg6 VARCHAR2(40);
lc_var_acc_seg7 VARCHAR2(40);
lc_seg3_value VARCHAR2(40);
lc_seg5_value VARCHAR2(40);
lb_success BOOLEAN;
lc_error_details VARCHAR2(4000);
lc_error VARCHAR2(4000);
lc_errbuf VARCHAR2(240);
ln_retcode NUMBER;
ln_header_cnt NUMBER;
ln_lines_cnt NUMBER;
ln_dist_cnt NUMBER;
ln_cur_org_id NUMBER;
lc_new_orgname VARCHAR2(240);
lc_item_segment2 VARCHAR2(40);
lc_item_segment3 VARCHAR2(40);
lc_new_glacct VARCHAR2(240);
lc_new_cat VARCHAR2(2000);
lc_new_del VARCHAR2(240);
lc_new_org_name VARCHAR2(270);
lc_new_sobname VARCHAR2(270);
lc_business_group VARCHAR2(270);
ln_bill_loc_id NUMBER;
ln_ship_loc_id NUMBER;
lc_inv_po_chk VARCHAR2(270);
lc_func_curr VARCHAR2(15);
lc_rate_type VARCHAR2(30);
ln_rate NUMBER;
ld_rate_date DATE;
lc_new_ship VARCHAR2(240);
lc_new_bill VARCHAR2(240);
ln_line_item_cnt NUMBER;
ln_po_item_chk NUMBER;
ln_vendor_site_id NUMBER;
ln_vendor_contact_id NUMBER;
ln_term_id NUMBER;
lc_po_exists VARCHAR2(1);
lc_line_exists VARCHAR2(1);
lc_primary_uom VARCHAR2(25);
lc_ship_via_lookup_code VARCHAR2(25);
lc_line_ship_loc VARCHAR2(60);
lc_ship_org VARCHAR2(3);
ln_po_header_id NUMBER;
ex_conc_error EXCEPTION;
--
BEGIN
ln_header_cnt := 0;
--Process Purchase Orders data
lc_errloc := 'Process purchase orders data';
FOR lr_po_header_data IN lcu_po_header_data (p_rec_status)
LOOP
ln_org_id := NULL;
ln_agent_id := NULL;
ln_bu_id := NULL;
lc_currency_code := NULL;
ln_vendor_id := NULL;
lc_payment_terms := NULL;
lc_freight_terms := NULL;
lc_error_details := NULL;
lc_new_orgname := NULL;
lc_business_group := NULL;
ln_bill_loc_id := NULL;
ln_ship_loc_id := NULL;
lc_inv_po_chk := NULL;
lc_func_curr := NULL;
lc_rate_type := NULL;
ln_rate := NULL;
ld_rate_date := NULL;
lc_new_ship := NULL;
lc_new_bill := NULL;
lc_line_exists := NULL;
lc_primary_uom := NULL;
-- check if lines exist for this PO
OPEN lcu_check_lines(lr_po_header_data.po_number);
FETCH lcu_check_lines
INTO lc_line_exists;
CLOSE lcu_check_lines;
IF lc_line_exists IS NULL THEN
lc_error_details := lc_error_details||'No lines were found in the staging table for the given PO. ';
END IF;
lc_errloc := 'Operating unit related derivations';
lc_new_orgname := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_OPERATING_UNIT'
,'XXSIRF_CNV_OPERATING_UNIT'
,lr_po_header_data.operating_unit
);
IF lc_new_orgname IS NULL THEN
lc_error_details := lc_error_details||'Could not derive new operating unit for '||lr_po_header_data.operating_unit||'. ';
ELSE
ln_org_id := XXCSR_COMMON_PKG.get_organization_id(lc_new_orgname);
IF ln_org_id IS NULL THEN
lc_error_details := lc_error_details||'Could not derive org id for new operating unit '||lc_new_orgname||'. ';
ELSE
-- Compare functional and document currency
OPEN lcu_func_curr(ln_org_id);
FETCH lcu_func_curr
INTO lc_func_curr;
CLOSE lcu_func_curr;
IF lc_func_curr = lr_po_header_data.currency_code THEN
lc_rate_type := NULL;
ln_rate := NULL;
ld_rate_date := NULL;
ELSE
lc_rate_type := lr_po_header_data.rate_type;
ln_rate := lr_po_header_data.rate;
ld_rate_date := lr_po_header_data.rate_date;
END IF;
END IF;
END IF;
lc_errloc := 'Checking for inventory purchase orders';
lc_inv_po_chk := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_INV_SUPPLIERS'
,'XXSIRF_CNV_INV_SUPPLIERS'
,lr_po_header_data.vendor_name
);
IF lc_inv_po_chk IS NULL THEN
lc_error_details := lc_error_details||'Only inventory purchase orders will be migrated';
END IF;
IF lr_po_header_data.emp_bu_name IN ( 'CSR United States','CSR United Kingdom') THEN
lc_business_group := lr_po_header_data.emp_bu_name;
ELSE
lc_business_group := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_HR_BG'
,'XXSIRF_CNV_HR_BG'
,lr_po_header_data.emp_bu_name
);
END IF;
IF lc_business_group IS NULL THEN
lc_error_details := lc_error_details||'Mapping for Business Group '||lr_po_header_data.emp_bu_name||' could not be found. ';
ELSE
ln_bu_id := XXCSR_COMMON_PKG.get_business_group_id(lc_business_group);
IF ln_bu_id IS NULL THEN
lc_error_details:= lc_error_details||' Business Group ID for '||lc_business_group||' could not be derived. ';
ELSE
--Derive agent id
lc_errloc := 'Derive agent id';
ln_agent_id := XXCSR_COMMON_PKG.get_person_id (p_first_name => lr_po_header_data.emp_fname
,p_last_name => lr_po_header_data.emp_lname
,p_date_of_birth => lr_po_header_data.emp_dob
,p_business_group_id => ln_bu_id
);
IF ln_agent_id IS NULL THEN
lc_error_details := lc_error_details || ' Invalid agent (employee) details.';
END IF;
END IF;
END IF;
--Check currency code
lc_errloc := 'Check currency code';
OPEN lcu_chk_currency (lr_po_header_data.currency_code);
FETCH lcu_chk_currency
INTO lc_currency_code;
IF lcu_chk_currency%NOTFOUND THEN
lc_error_details := lc_error_details || ' Invalid currency code.';
END IF;
CLOSE lcu_chk_currency;
--Derive vendor id
lc_errloc := 'Derive vendor id';
IF lr_po_header_data.vendor_name IS NOT NULL THEN
OPEN lcu_vendor_der(lr_po_header_data.vendor_name);
FETCH lcu_vendor_der
INTO ln_vendor_id;
CLOSE lcu_vendor_der;
IF ln_vendor_id IS NULL THEN
lc_error_details := lc_error_details || ' Vendor not migrated.';
END IF;
END IF;
lc_errloc := 'Check payment terms';
IF lr_po_header_data.payment_terms IS NOT NULL THEN
lc_payment_terms := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_SUPPLIER_PAYTERMS'
,p_sirf_lookup => 'XXSIRF_CNV_SUPPLIER_PAYTERMS'
,p_old_value => lr_po_header_data.payment_terms
);
IF lc_payment_terms IS NULL THEN
lc_error_details := lc_error_details || ' Invalid payment terms.';
END IF;
END IF;
--Check freight terms
lc_errloc := 'Check freight terms';
IF lr_po_header_data.freight_terms IS NOT NULL THEN
lc_freight_terms := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_FREIGHT_TERMS'
,p_sirf_lookup => 'XXSIRF_CNV_FREIGHT_TERMS'
,p_old_value => lr_po_header_data.freight_terms
);
IF lc_freight_terms IS NULL THEN
lc_error_details := lc_error_details || ' Invalid freight terms.';
END IF;
END IF;
IF lr_po_header_data.ship_to_location IS NOT NULL THEN
lc_new_ship := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_DELIVER_LOCATIONS'
,'XXSIRF_CNV_DELIVER_LOCATIONS'
,lr_po_header_data.ship_to_location
);
IF lc_new_ship IS NULL THEN
lc_error_details := lc_error_details||'Could not derive new ship to location for '||lr_po_header_data.ship_to_location||' in XXCSR_CNV_DELIVER_LOCATIONS. ';
ELSE
OPEN lcu_hr_loc(lc_new_ship);
FETCH lcu_hr_loc
INTO ln_ship_loc_id;
CLOSE lcu_hr_loc;
IF ln_ship_loc_id IS NULL THEN
lc_error_details := lc_error_details || 'Ship to location id could not be derived for '||lr_po_header_data.ship_to_location;
END IF;
END IF;
END IF;
IF lr_po_header_data.bill_to_location IS NOT NULL THEN
lc_new_bill := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_BILLTO_LOCATIONS'
,'XXSIRF_CNV_BILLTO_LOCATIONS'
,lr_po_header_data.bill_to_location
);
IF lc_new_bill IS NULL THEN
lc_error_details := lc_error_details||'Could not derive new bill to location for '||lr_po_header_data.bill_to_location||' in XXCSR_CNV_BILLTO_LOCATIONS. ';
ELSE
OPEN lcu_hr_loc(lc_new_bill);
FETCH lcu_hr_loc
INTO ln_bill_loc_id;
CLOSE lcu_hr_loc;
IF ln_bill_loc_id IS NULL THEN
lc_error_details := lc_error_details || 'Bill to location id could not be derived for '||lr_po_header_data.bill_to_location;
END IF;
END IF;
END IF;
lc_ship_via_lookup_code := NULL;
IF lr_po_header_data.ship_via_lookup_code IS NOT NULL THEN
lc_ship_via_lookup_code := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_FREIGHT_CARRIER'
,'XXCSR_CNV_FREIGHT_CARRIER'
,lr_po_header_data.ship_via_lookup_code
);
END IF;
IF lc_error_details IS NULL THEN
--Insert purchase order header data in interface table
lc_errloc := 'Insert purchase order header data in interface table';
INSERT INTO po_headers_interface
(interface_header_id
,batch_id
,interface_source_code
,action
,process_code
,org_id
,document_type_code
,currency_code
,rate_type
,rate_date
,rate
,agent_id
,vendor_id
,vendor_site_code
,ship_to_location_id
,bill_to_location_id
,payment_terms
,freight_terms
,approval_status
,approved_date
-- ,revised_date
-- ,revision_num
,confirming_order_flag
,comments
,acceptance_required_flag
,print_count
-- ,printed_date
,frozen_flag
,closed_code
,from_rfq_num
,from_type_lookup_code
,attribute_category
--,attribute1
,attribute2
-- ,attribute3
--,global_attribute1
,pay_on_code
,last_update_date
,last_updated_by
,creation_date
,created_by
,document_num
,freight_carrier
)
VALUES
(po_headers_interface_s.nextval
,1
,'XXCSR Conversion'
,'ORIGINAL'
,'PENDING'
,ln_org_id
,lr_po_header_data.document_type_code -- 'STANDARD'
,lr_po_header_data.currency_code
,DECODE(lc_rate_type,'Corporate','User',lc_rate_type)
,ld_rate_date
,ln_rate
,ln_agent_id
,ln_vendor_id
,lr_po_header_data.vendor_site_code
,ln_ship_loc_id -- lr_po_header_data.ship_to_location
,ln_bill_loc_id -- lr_po_header_data.bill_to_location
,lc_payment_terms
,lc_freight_terms
,DECODE(lr_po_header_data.approval_status,'REQUIRES REAPPROVAL','INCOMPLETE',lr_po_header_data.approval_status)
,lr_po_header_data.approved_date
-- ,lr_po_header_data.revised_date
-- ,lr_po_header_data.revision_num
,lr_po_header_data.confirming_order_flag
,lr_po_header_data.comments
,lr_po_header_data.acceptance_required_flag
--,DECODE(lr_po_header_data.approval_status,'APPROVED',lr_po_header_data.print_count,0)
,DECODE(lr_po_header_data.approval_status,'APPROVED',1,0)
-- ,lr_po_header_data.printed_date
,lr_po_header_data.frozen_flag
,lr_po_header_data.closed_code
,lr_po_header_data.from_requisition_num
,lr_po_header_data.from_type_lookup_code
,lr_po_header_data.attribute_category
--,lr_po_header_data.sourcing_rule
,lr_po_header_data.osp_flag
--,lr_po_header_data.mrp_flag
--,lr_po_header_data.po_total_plus_ipi_tax
,lr_po_header_data.pay_on_code
,SYSDATE
,fnd_global.user_id
,SYSDATE
,fnd_global.user_id
,lr_po_header_data.po_number
,lc_ship_via_lookup_code
);
UPDATE xxcsr_po_headers_int
SET record_status = 'C'
,request_id = FND_GLOBAL.conc_request_id
,error_message = NULL
WHERE rowid = lr_po_header_data.rowid;
COMMIT;
ln_header_cnt := ln_header_cnt + 1;
ELSE
UPDATE xxcsr_po_headers_int
SET record_status = 'E'
,request_id = FND_GLOBAL.conc_request_id
,error_message = lc_error_details
WHERE rowid = lr_po_header_data.rowid;
END IF; --lc_error_details IS NULL
COMMIT;
END LOOP;
--COMMIT;
ln_lines_cnt := 0;
--Process Purchase Order Lines data
lc_errloc := 'Process purchase order lines data';
FOR lr_po_lines_data IN lcu_po_lines_data (p_rec_status)
LOOP
ln_org_id := NULL;
ln_item_org_id := NULL;
ln_item_id := NULL;
lc_item_seg2 := NULL;
lc_cat_seg1 := NULL;
lc_cat_seg2 := NULL;
lc_cat_seg3 := NULL;
lc_cat_seg4 := NULL;
lc_cat_seg5 := NULL;
ln_cat_id := NULL;
ln_po_int_header_id := NULL;
ln_tax_code_id := NULL;
lc_error_details := NULL;
lc_new_orgname := NULL;
lc_item_segment2 := NULL;
lc_new_glacct := NULL;
lc_new_cat := NULL;
lc_new_ship := NULL;
ln_ship_loc_id := NULL;
lc_new_org_name := NULL;
--Derive interface header id
lc_errloc := 'Derive interface header id';
OPEN lcu_get_int_header_id (lr_po_lines_data.po_number);
FETCH lcu_get_int_header_id
INTO ln_po_int_header_id;
CLOSE lcu_get_int_header_id;
IF ln_po_int_header_id IS NULL THEN
lc_error_details := lc_error_details || 'Could not derive interface header id. Header record may have error. ';
END IF;
FND_FILE.PUT_LINE(FND_FILE.LOG,'ln_po_int_header_id : ' || ln_po_int_header_id);
lc_errloc := 'Operating unit related derivations';
lc_new_orgname := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_OPERATING_UNIT'
,'XXSIRF_CNV_OPERATING_UNIT'
,lr_po_lines_data.org_name
);
IF lc_new_orgname IS NULL THEN
lc_error_details := lc_error_details||'Could not derive new operating unit for '||lr_po_lines_data.org_name||'. ';
ELSE
ln_org_id := XXCSR_COMMON_PKG.get_organization_id(lc_new_orgname);
IF ln_org_id IS NULL THEN
lc_error_details := lc_error_details||'Could not derive org id for new operating unit '||lc_new_orgname||'. ';
END IF;
END IF;
IF lr_po_lines_data.ship_to_location IS NOT NULL THEN
lc_new_ship := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_DELIVER_LOCATIONS'
,'XXSIRF_CNV_DELIVER_LOCATIONS'
,lr_po_lines_data.ship_to_location
);
IF lc_new_ship IS NULL THEN
lc_error_details := lc_error_details||'Could not derive new ship to location for '||lr_po_lines_data.ship_to_location||' in XXCSR_CNV_DELIVER_LOCATIONS. ';
ELSE
OPEN lcu_hr_loc(lc_new_ship);
FETCH lcu_hr_loc
INTO ln_ship_loc_id;
CLOSE lcu_hr_loc;
IF ln_ship_loc_id IS NULL THEN
lc_error_details := lc_error_details || 'Ship to location id could not be derived for '||lr_po_lines_data.ship_to_location;
END IF;
END IF;
END IF;
IF lr_po_lines_data.ship_to_org IS NOT NULL THEN
lc_new_org_name := XXCSR_COMMON_PKG.get_organization_code (p_instance_name
,lr_po_lines_data.ship_to_org);
IF lc_new_org_name IS NULL THEN
lc_error_details := lc_error_details||'Mapping for organization '||lr_po_lines_data.ship_to_org||' not found in the table XXCSR_CNV_ORG_MAPPINGS. ';
END IF;
END IF;
lc_item_segment3 := NULL;
IF lr_po_lines_data.itm_seg3_item_type = 'MT' THEN
lc_item_segment2 := 'MT';
lc_item_segment3 := NULL;
ELSIF lr_po_lines_data.itm_seg3_item_type = 'FL' THEN
lc_item_segment2 := 'PD';
lc_item_segment3 := NULL;
ELSE
lc_item_segment2 := lr_po_lines_data.itm_seg2_bom_level;
lc_item_segment3 := lr_po_lines_data.itm_seg3_item_type;
END IF;
lc_errloc := 'Derive inventory item id';
-- IF lr_po_lines_data.itm_seg1_item_num IS NOT NULL THEN
OPEN lcu_item_id(lr_po_lines_data.itm_seg1_item_num
,lc_item_segment2
,lc_item_segment3); --sjacob commented as per Siva's mail lr_po_lines_data.itm_seg3_item_type
FETCH lcu_item_id
INTO ln_item_id;
CLOSE lcu_item_id;
IF ln_item_id IS NULL THEN
lc_error_details := lc_error_details || ' Item number could not be derived.';
ELSE
-- DERIVE primary UOM for master item
IF lc_new_org_name IS NOT NULL THEN
OPEN lcu_prim_uom(lc_new_org_name
,ln_item_id);
FETCH lcu_prim_uom
INTO lc_primary_uom;
CLOSE lcu_prim_uom;
IF lc_primary_uom IS NULL THEN
lc_error_details := lc_error_details || 'Primary UOM code for the master item could not be derived';
END IF;
END IF;
END IF;
-- END IF;
lc_errloc := 'Derive new GL account';
lc_new_glacct := XXCSR_COMMON_PKG.get_lookup_meaning(p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_ACCOUNT'
,p_sirf_lookup => 'XXCSR_CNV_GL_ACCOUNT'
,p_old_value => lr_po_lines_data.gl_account
);
lc_new_cat := XXCSR_COMMON_PKG.get_lookup_meaning(p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_PO_CATEGORY'
,p_sirf_lookup => 'XXCSR_CNV_PO_CATEGORY'
,p_old_value => lc_new_glacct
);
IF lc_new_cat IS NULL THEN
lc_new_cat := 'MISCELLANEOUS.MISCELLANEOUS';
END IF;
IF lr_po_lines_data.inventory_item_flag = 'N' THEN
UPDATE xxcsr_po_distributions_int
SET destination_type_code = 'EXPENSE'
WHERE po_number = lr_po_lines_data.po_number
AND po_line_number = lr_po_lines_data.line_num
AND shipment_num = lr_po_lines_data.shipment_num
AND source_instance = p_instance_name;
ELSE
UPDATE xxcsr_po_distributions_int
SET destination_type_code = 'INVENTORY'
WHERE po_number = lr_po_lines_data.po_number
AND po_line_number = lr_po_lines_data.line_num
AND shipment_num = lr_po_lines_data.shipment_num
AND source_instance = p_instance_name;
END IF;
IF lc_error_details IS NULL THEN
--Insert purchase order lines data in interface table
lc_errloc := 'Insert purchase order lines data in interface table';
FND_FILE.PUT_LINE(FND_FILE.LOG,'Inserting in lines');
INSERT INTO po_lines_interface
(interface_line_id
,interface_header_id
,action
,process_code
,document_num
,line_num
,organization_id
,shipment_num
,shipment_type
,contract_num
,line_type
,item_id
,category
,item_description
,vendor_product_num
,unit_of_measure
,quantity
,unit_price
,list_price_per_unit
,allow_price_override_flag
,negotiated_by_preparer_flag
,note_to_vendor
,taxable_flag
-- ,tax_name
,type_1099
,capital_expense_flag
,price_type
,closed_code
,closed_reason
,closed_date
,closed_by
,over_tolerance_error_flag
,line_attribute_category_lines
-- ,line_attribute1
-- ,line_attribute2
-- ,line_attribute3
-- ,line_attribute4
-- ,line_attribute5
-- ,line_attribute6
-- ,line_attribute7
-- ,line_attribute8
-- ,line_attribute9
--,global_attribute1
-- ,tax_code_id
,secondary_unit_of_measure
,secondary_quantity
,inspection_required_flag
,receipt_required_flag
,invoice_close_tolerance
,receive_close_tolerance
,need_by_date
,promised_date
,consigned_flag
,base_unit_price
,last_update_date
,last_updated_by
,creation_date
,created_by
,ship_to_location_id
,ship_to_organization_code
)
VALUES
(po_lines_interface_s.nextval
,ln_po_int_header_id
,'ORIGINAL'
,'PENDING'
,lr_po_lines_data.po_number
,lr_po_lines_data.line_num
,ln_org_id
,lr_po_lines_data.shipment_num
,lr_po_lines_data.shipment_type
,lr_po_lines_data.contract_num
,lr_po_lines_data.line_type
,ln_item_id
,lc_new_cat
,lr_po_lines_data.item_description
,lr_po_lines_data.vendor_product_num
,lc_primary_uom --lr_po_lines_data.unit_of_measure
,lr_po_lines_data.quantity
,lr_po_lines_data.unit_price
,lr_po_lines_data.list_price_per_unit
,lr_po_lines_data.allow_price_override_flag
,lr_po_lines_data.negotiated_by_preparer_flag
,lr_po_lines_data.note_to_vendor
,lr_po_lines_data.taxable_flag
-- ,lr_po_lines_data.tax_name
,lr_po_lines_data.type_1099
,lr_po_lines_data.capital_expense_flag
,lr_po_lines_data.price_type
,lr_po_lines_data.closed_code
,lr_po_lines_data.closed_reason
,lr_po_lines_data.closed_date
,lr_po_lines_data.closed_by
,lr_po_lines_data.over_tolerance_error_flag
,lr_po_lines_data.line_attribute_category_lines
-- ,lr_po_lines_data.att1_item_number
-- ,lr_po_lines_data.att2_manufacturer
-- ,lr_po_lines_data.att3_manufacturer_part_no
-- ,lr_po_lines_data.att4_vendor_name
-- ,lr_po_lines_data.att5_last_po_price
-- ,lr_po_lines_data.att6_last_transaction_qty
-- ,lr_po_lines_data.att7_last_vendor_name
-- ,lr_po_lines_data.att8_item_id
-- ,lr_po_lines_data.att9_vendor_name
--,lr_po_lines_data.fisc_classification_code
-- ,ln_tax_code_id commented as per R04
,lr_po_lines_data.secondary_unit_of_measure
,lr_po_lines_data.secondary_quantity
,lr_po_lines_data.inspection_required_flag
,lr_po_lines_data.receipt_required_flag
,lr_po_lines_data.invoice_close_tolerance
,lr_po_lines_data.receive_close_tolerance
,lr_po_lines_data.need_by_date
,lr_po_lines_data.promised_date
,lr_po_lines_data.consigned_flag
,lr_po_lines_data.base_unit_price
,SYSDATE
,fnd_global.user_id
,SYSDATE
,fnd_global.user_id
,ln_ship_loc_id
,lc_new_org_name
);
UPDATE xxcsr_po_lines_int
SET record_status = 'C'
,request_id = FND_GLOBAL.conc_request_id
,error_message = NULL
WHERE rowid = lr_po_lines_data.rowid;
COMMIT;
ln_lines_cnt := ln_lines_cnt + 1;
ELSE
UPDATE xxcsr_po_lines_int
SET record_status = 'E'
,request_id = FND_GLOBAL.conc_request_id
,error_message = lc_error_details
WHERE rowid = lr_po_lines_data.rowid;
IF ln_po_int_header_id IS NOT NULL THEN
UPDATE xxcsr_po_headers_int
SET record_status = 'E'
,error_message = error_message||'error in lines record'
WHERE po_number = lr_po_lines_data.po_number
AND source_instance = p_instance_name;
DELETE FROM po_headers_interface
WHERE interface_header_id = ln_po_int_header_id;
ln_header_cnt := ln_header_cnt - 1;
END IF;
END IF; --lc_error_details IS NULL
COMMIT;
END LOOP;
--COMMIT;
ln_dist_cnt := 0;
--Process Purchase Order distributions data
lc_errloc := 'Process purchase order distributions data';
FOR lr_po_dist_data IN lcu_po_dist_data (p_rec_status)
LOOP
ln_org_id := NULL;
ln_sob_id := NULL;
ln_location_id := NULL;
lc_inv_org_code := NULL;
ln_person_org_id := NULL;
ln_person_id := NULL;
lc_error_details := NULL;
lc_new_orgname := NULL;
lc_new_del := NULL;
lc_new_org_name := NULL;
lc_new_sobname := NULL;
ln_po_int_line_id := NULL;
ln_po_int_header_id := NULL;
lc_business_group := NULL;
ln_bu_id := NULL;
lc_chr_acc_seg1 := NULL;
lc_chr_acc_seg2 := NULL;
lc_chr_acc_seg3 := NULL;
lc_chr_acc_seg4 := NULL;
lc_chr_acc_seg5 := NULL;
lc_chr_acc_seg6 := NULL;
lc_chr_acc_seg7 := NULL;
lc_bud_acc_seg1 := NULL;
lc_bud_acc_seg2 := NULL;
lc_bud_acc_seg3 := NULL;
lc_bud_acc_seg4 := NULL;
lc_bud_acc_seg5 := NULL;
lc_bud_acc_seg6 := NULL;
lc_bud_acc_seg7 := NULL;
lc_accr_acc_seg1 := NULL;
lc_accr_acc_seg2 := NULL;
lc_accr_acc_seg3 := NULL;
lc_accr_acc_seg4 := NULL;
lc_accr_acc_seg5 := NULL;
lc_accr_acc_seg6 := NULL;
lc_accr_acc_seg7 := NULL;
lc_var_acc_seg1 := NULL;
lc_var_acc_seg2 := NULL;
lc_var_acc_seg3 := NULL;
lc_var_acc_seg4 := NULL;
lc_var_acc_seg5 := NULL;
lc_var_acc_seg6 := NULL;
lc_var_acc_seg7 := NULL;
ln_charge_acct_id := NULL;
ln_budget_acct_id := NULL;
ln_accrual_acct_id := NULL;
ln_variance_acct_id := NULL;
lc_seg3_value := NULL;
lc_seg5_value := NULL;
--Derive interface header id
lc_errloc := 'Derive interface header id';
OPEN lcu_get_int_header_id (lr_po_dist_data.po_number);
FETCH lcu_get_int_header_id
INTO ln_po_int_header_id;
CLOSE lcu_get_int_header_id;
IF ln_po_int_header_id IS NULL THEN
lc_error_details := lc_error_details || 'Could not derive interface header id. Header record may have error. ';
END IF;
--Derive interface line id
lc_errloc := 'Derive interface line id';
OPEN lcu_get_int_line_id (lr_po_dist_data.po_number
,lr_po_dist_data.po_line_number
,lr_po_dist_data.shipment_num);
FETCH lcu_get_int_line_id
INTO ln_po_int_line_id;
CLOSE lcu_get_int_line_id;
IF ln_po_int_line_id IS NULL THEN
lc_error_details := lc_error_details || 'Could not derive interface line id. Header/Line record may have error. ';
END IF;
lc_errloc := 'Operating unit related derivations';
lc_new_orgname := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_OPERATING_UNIT'
,'XXSIRF_CNV_OPERATING_UNIT'
,lr_po_dist_data.org_name
);
IF lc_new_orgname IS NULL THEN
lc_error_details := lc_error_details||'Could not derive new operating unit for '||lr_po_dist_data.org_name||'. ';
ELSE
ln_org_id := XXCSR_COMMON_PKG.get_organization_id(lc_new_orgname);
IF ln_org_id IS NULL THEN
lc_error_details := lc_error_details||'Could not derive org id for new operating unit '||lc_new_orgname||'. ';
END IF;
END IF;
--Derive sob id
lc_new_sobname := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_SOB_NAME'
,'XXSIRF_CNV_SOB_NAME'
,lr_po_dist_data.set_of_books
);
IF lc_new_sobname IS NULL THEN
lc_error_details := lc_error_details||'Could not derive new sob for '||lr_po_dist_data.set_of_books||' in XXCSR_CNV_SOB_NAME. ';
ELSE
lc_errloc := 'Derive sob id';
OPEN lcu_get_sob_id (lc_new_sobname);
FETCH lcu_get_sob_id
INTO ln_sob_id;
CLOSE lcu_get_sob_id;
IF ln_sob_id IS NULL THEN
lc_error_details := lc_error_details || ' Invalid sets of books name- '||lc_new_sobname;
END IF;
END IF;
IF lr_po_dist_data.deliver_to_location IS NOT NULL THEN
lc_new_del := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_DELIVER_LOCATIONS'
,'XXSIRF_CNV_DELIVER_LOCATIONS'
,lr_po_dist_data.deliver_to_location
);
IF lc_new_del IS NULL THEN
lc_error_details := lc_error_details||'Could not derive new deliver to location for '||lr_po_dist_data.deliver_to_location||' in XXCSR_CNV_DELIVER_LOCATIONS. ';
ELSE
--Derive deliver to location id
lc_errloc := 'Derive deliver to location id';
OPEN lcu_location_id (lc_new_del);
FETCH lcu_location_id
INTO ln_location_id;
CLOSE lcu_location_id;
IF ln_location_id IS NULL THEN
lc_error_details := lc_error_details || ' Invalid deliver to location code.';
END IF;
END IF;
END IF;
IF lr_po_dist_data.destination_organization IS NOT NULL THEN
lc_new_org_name := XXCSR_COMMON_PKG.get_organization_code (p_instance_name
,lr_po_dist_data.destination_organization);
IF lc_new_org_name IS NULL THEN
lc_error_details := lc_error_details||'Mapping for organization '||lr_po_dist_data.destination_organization||' not found in the table XXCSR_CNV_ORG_MAPPINGS. ';
END IF;
END IF;
--Derive deliver to person id
IF lr_po_dist_data.delv_per_fname IS NOT NULL THEN
lc_business_group := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_HR_BG'
,'XXSIRF_CNV_HR_BG'
,lr_po_dist_data.delv_per_org_name
);
IF lc_business_group IS NULL THEN
lc_error_details := lc_error_details||'Mapping for Business Group '||lr_po_dist_data.delv_per_org_name||' could not be found. ';
ELSE
ln_bu_id := XXCSR_COMMON_PKG.get_business_group_id(lc_business_group);
IF ln_bu_id IS NULL THEN
lc_error_details:= lc_error_details||' Business Group ID for '||lc_business_group||' could not be derived. ';
--Derive deliver to person id
lc_errloc := 'Derive deliver to person id';
ln_person_id := XXCSR_COMMON_PKG.get_person_id (p_first_name => lr_po_dist_data.delv_per_fname
,p_last_name => lr_po_dist_data.delv_per_lname
,p_date_of_birth => lr_po_dist_data.delv_per_dob
,p_business_group_id => ln_bu_id
);
IF ln_person_id IS NULL THEN
lc_error_details := lc_error_details || ' Invalid agent (employee) details.';
END IF;
END IF;
END IF;
END IF;
--BUDGET ACCOUNT
--Derive budget account segment1 from lookup
lc_errloc := 'Derive budget account segment1 from lookup';
IF (lr_po_dist_data.bud_acc_seg1 IS NOT NULL OR lr_po_dist_data.bud_acc_seg2 IS NOT NULL OR
lr_po_dist_data.bud_acc_seg3 IS NOT NULL OR lr_po_dist_data.bud_acc_seg4 IS NOT NULL OR
lr_po_dist_data.bud_acc_seg5 IS NOT NULL OR lr_po_dist_data.bud_acc_seg6 IS NOT NULL OR
lr_po_dist_data.bud_acc_seg7 IS NOT NULL) THEN
lc_bud_acc_seg1 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_COMPANY'
,p_sirf_lookup => 'XXSIRF_CNV_GL_COMPANY'
,p_old_value => lr_po_dist_data.bud_acc_seg1
);
--Derive budget account segment2 from lookup
lc_errloc := 'Derive budget account segment2 from lookup';
lc_bud_acc_seg2 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_ACCOUNT'
,p_sirf_lookup => 'XXSIRF_CNV_GL_ACCOUNT'
,p_old_value => lr_po_dist_data.bud_acc_seg2
);
--Derive budget account segment3 from lookup
lc_errloc := 'Derive budget account segment3 from lookup';
/* lc_bud_acc_seg3 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_BU'
,p_sirf_lookup => 'XXSIRF_CNV_GL_BU'
,p_old_value => lr_po_dist_data.bud_acc_seg4
); */
lc_seg3_value := NULL;
IF UPPER(lr_po_dist_data.bud_acc_seg4) = LOWER(lr_po_dist_data.bud_acc_seg4) THEN
lc_seg3_value := lr_po_dist_data.bud_acc_seg3;
ELSE
lc_seg3_value := lr_po_dist_data.bud_acc_seg4;
END IF;
lc_bud_acc_seg3 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_BU'
,p_sirf_lookup => 'XXSIRF_CNV_GL_BU'
,p_old_value => lc_seg3_value
);
--Derive budget account segment4 from lookup
lc_errloc := 'Derive budget account segment4 from lookup';
lc_bud_acc_seg4 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_DEPARTMENT'
,p_sirf_lookup => 'XXSIRF_CNV_GL_DEPARTMENT'
,p_old_value => lr_po_dist_data.bud_acc_seg4
);
--Derive budget account segment5 from lookup
lc_errloc := 'Derive budget account segment5 from lookup';
/* lc_bud_acc_seg5 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_PRODPROJ'
,p_sirf_lookup => 'XXSIRF_CNV_GL_PRODPROJ'
,p_old_value => lr_po_dist_data.bud_acc_seg5
); */
lc_seg5_value := NULL;
/* Segments 5 and 6 in the legacy instance both map onto Segment 5 in the target instance.
When mapping the data, take whichever one of the legacy instance values
in non-zero and map using lookup XXCSR_CNV_GL_PRODPROJ.
If both legacy values are zero, use the default of '000000' for Segment 5 of the target GL Account. */
IF UPPER(lr_po_dist_data.bud_acc_seg5) = LOWER(lr_po_dist_data.bud_acc_seg5) THEN -- 5 numeric
IF TO_NUMBER(lr_po_dist_data.bud_acc_seg5) = 0 THEN -- 5 is zero
IF UPPER(lr_po_dist_data.bud_acc_seg6) != LOWER(lr_po_dist_data.bud_acc_seg6) THEN
lc_seg5_value := lr_po_dist_data.bud_acc_seg6;
ELSIF TO_NUMBER(lr_po_dist_data.bud_acc_seg6) = 0 THEN -- 6 is zero
lc_seg5_value := '000000';
ELSE
lc_seg5_value := lr_po_dist_data.bud_acc_seg6;
END IF;
ELSE
IF UPPER(lr_po_dist_data.bud_acc_seg6) != LOWER(lr_po_dist_data.bud_acc_seg6) THEN
lc_error_details := lc_error_details || 'Both segment5('||lr_po_dist_data.bud_acc_seg5||') and segment6('||lr_po_dist_data.bud_acc_seg6||') cannot be non zero';
ELSIF TO_NUMBER(lr_po_dist_data.bud_acc_seg6) = 0 THEN -- 6 is zero
lc_seg5_value := lr_po_dist_data.bud_acc_seg5;
ELSE
lc_error_details := lc_error_details || 'Both segment5('||lr_po_dist_data.bud_acc_seg5||') and segment6('||lr_po_dist_data.bud_acc_seg6||') cannot be non zero';
END IF;
END IF;
ELSE -- 5 non numeric
IF UPPER(lr_po_dist_data.bud_acc_seg6) != LOWER(lr_po_dist_data.bud_acc_seg6) THEN
lc_error_details := lc_error_details || 'Both segment5('||lr_po_dist_data.bud_acc_seg5||') and segment6('||lr_po_dist_data.bud_acc_seg6||') cannot be non zero';
ELSIF TO_NUMBER(lr_po_dist_data.bud_acc_seg6) = 0 THEN -- 6 is zero
lc_seg5_value := lr_po_dist_data.bud_acc_seg5;
ELSE
lc_error_details := lc_error_details || 'Both segment5('||lr_po_dist_data.bud_acc_seg5||') and segment6('||lr_po_dist_data.bud_acc_seg6||') cannot be non zero';
END IF;
END IF;
IF lc_seg5_value IS NOT NULL AND lc_seg5_value != '000000' THEN
lc_bud_acc_seg5 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_PRODPROJ'
,p_sirf_lookup => 'XXSIRF_CNV_GL_PRODPROJ'
,p_old_value => lc_seg5_value
);
ELSIF lc_seg5_value IS NOT NULL AND lc_seg5_value = '000000' THEN
lc_bud_acc_seg5 := lc_seg5_value;
END IF;
--Derive budget account segment6 from lookup
lc_errloc := 'Derive budget account segment6 from lookup';
/* lc_bud_acc_seg6 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_INTERCO'
,p_sirf_lookup => 'XXSIRF_CNV_GL_INTERCO'
,p_old_value => lr_po_dist_data.bud_acc_seg6
); */
lc_bud_acc_seg6 := '000';
--Derive budget account segment7 from lookup
lc_errloc := 'Derive budget account segment7 from lookup';
/* lc_bud_acc_seg7 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_BUD_ACC7_LKUP'
,p_sirf_lookup => 'XXSIRF_BUD_ACC7_LKUP'
,p_old_value => lr_po_dist_data.bud_acc_seg7
); */
lc_bud_acc_seg7 := '00000';
END IF;
IF (lr_po_dist_data.accr_acc_seg1 IS NOT NULL OR lr_po_dist_data.accr_acc_seg2 IS NOT NULL OR
lr_po_dist_data.accr_acc_seg3 IS NOT NULL OR lr_po_dist_data.accr_acc_seg4 IS NOT NULL OR
lr_po_dist_data.accr_acc_seg5 IS NOT NULL OR lr_po_dist_data.accr_acc_seg6 IS NOT NULL OR
lr_po_dist_data.accr_acc_seg7 IS NOT NULL) THEN
--ACCRUAL ACCOUNT
--Derive accrual account segment1 from lookup
lc_errloc := 'Derive accrual account segment1 from lookup';
lc_accr_acc_seg1 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_COMPANY'
,p_sirf_lookup => 'XXSIRF_CNV_GL_COMPANY'
,p_old_value => lr_po_dist_data.accr_acc_seg1
);
-- Change by manishar 12/04/10 as per mdt v1.26
-- Deriving Attribute15 of the corresponding Suppliers Address
lc_errloc := 'Derive accrual account segment2 from lookup';
lc_accr_acc_seg2 := NULL;
OPEN lcu_supsite_attr15(lr_po_dist_data.po_number
,lr_po_dist_data.po_line_number
,lr_po_dist_data.shipment_num);
FETCH lcu_supsite_attr15 INTO lc_accr_acc_seg2;
CLOSE lcu_supsite_attr15;
--Derive accrual account segment2 from lookup
IF lc_accr_acc_seg2 IS NULL THEN
lc_accr_acc_seg2 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_ACCOUNT'
,p_sirf_lookup => 'XXSIRF_CNV_GL_ACCOUNT'
,p_old_value => lr_po_dist_data.accr_acc_seg2
);
END IF;
--Derive accrual account segment3 from lookup
lc_errloc := 'Derive accrual account segment3 from lookup';
lc_accr_acc_seg3 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_BU'
,p_sirf_lookup => 'XXSIRF_CNV_GL_BU'
,p_old_value => lr_po_dist_data.accr_acc_seg3
);
--Derive accrual account segment4 from lookup
lc_errloc := 'Derive accrual account segment4 from lookup';
/* lc_accr_acc_seg4 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_DEPARTMENT'
,p_sirf_lookup => 'XXSIRF_CNV_GL_DEPARTMENT'
,p_old_value => lr_po_dist_data.accr_acc_seg4
); */
--Derive budget account segment4 from lookup
lc_errloc := 'Derive budget account segment4 from lookup';
lc_accr_acc_seg4 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_DEPARTMENT'
,p_sirf_lookup => 'XXSIRF_CNV_GL_DEPARTMENT'
,p_old_value => lr_po_dist_data.accr_acc_seg4
);
--Derive accrual account segment5 from lookup
lc_errloc := 'Derive accrual account segment5 from lookup';
lc_accr_acc_seg5 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_PRODPROJ'
,p_sirf_lookup => 'XXSIRF_CNV_GL_PRODPROJ'
,p_old_value => lr_po_dist_data.accr_acc_seg5
);
--Derive accrual account segment6 from lookup
lc_errloc := 'Derive accrual account segment6 from lookup';
/* lc_accr_acc_seg6 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_INTERCO'
,p_sirf_lookup => 'XXSIRF_CNV_GL_INTERCO'
,p_old_value => lr_po_dist_data.accr_acc_seg6
); */
lc_accr_acc_seg6 := '000';
--Derive accrual account segment7 from lookup
lc_errloc := 'Derive accrual account segment7 from lookup';
/* lc_accr_acc_seg7 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_ACCR_ACC7_LKUP'
,p_sirf_lookup => 'XXSIRF_ACCR_ACC7_LKUP'
,p_old_value => lr_po_dist_data.accr_acc_seg7
); */
lc_accr_acc_seg7 := '00000';
END IF;
IF (lr_po_dist_data.var_acc_seg1 IS NOT NULL OR lr_po_dist_data.var_acc_seg2 IS NOT NULL OR
lr_po_dist_data.var_acc_seg3 IS NOT NULL OR lr_po_dist_data.var_acc_seg4 IS NOT NULL OR
lr_po_dist_data.var_acc_seg5 IS NOT NULL OR lr_po_dist_data.var_acc_seg6 IS NOT NULL OR
lr_po_dist_data.var_acc_seg7 IS NOT NULL) THEN
--VARIANCE ACCOUNT
--Derive variance account segment1 from lookup
lc_errloc := 'Derive variance account segment1 from lookup';
lc_var_acc_seg1 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_COMPANY'
,p_sirf_lookup => 'XXSIRF_CNV_GL_COMPANY'
,p_old_value => lr_po_dist_data.var_acc_seg1
);
--Derive variance account segment2 from lookup
lc_errloc := 'Derive variance account segment2 from lookup';
lc_var_acc_seg2 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_ACCOUNT'
,p_sirf_lookup => 'XXSIRF_CNV_GL_ACCOUNT'
,p_old_value => lr_po_dist_data.var_acc_seg2
);
--Derive variance account segment3 from lookup
lc_errloc := 'Derive variance account segment3 from lookup';
lc_var_acc_seg3 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_BU'
,p_sirf_lookup => 'XXSIRF_CNV_GL_BU'
,p_old_value => lr_po_dist_data.var_acc_seg4
);
--Derive variance account segment4 from lookup
lc_errloc := 'Derive variance account segment4 from lookup';
/* lc_var_acc_seg4 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_DEPARTMENT'
,p_sirf_lookup => 'XXSIRF_CNV_GL_DEPARTMENT'
,p_old_value => lr_po_dist_data.var_acc_seg4
); */
lc_seg3_value := NULL;
IF UPPER(lr_po_dist_data.var_acc_seg4) = LOWER(lr_po_dist_data.var_acc_seg4) THEN
lc_seg3_value := lr_po_dist_data.var_acc_seg3;
ELSE
lc_seg3_value := lr_po_dist_data.var_acc_seg4;
END IF;
lc_var_acc_seg3 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_BU'
,p_sirf_lookup => 'XXSIRF_CNV_GL_BU'
,p_old_value => lc_seg3_value
);
--Derive budget account segment4 from lookup
lc_errloc := 'Derive budget account segment4 from lookup';
lc_var_acc_seg4 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_DEPARTMENT'
,p_sirf_lookup => 'XXSIRF_CNV_GL_DEPARTMENT'
,p_old_value => lr_po_dist_data.var_acc_seg4
);
--Derive variance account segment5 from lookup
lc_errloc := 'Derive variance account segment5 from lookup';
/* lc_var_acc_seg5 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_PRODPROJ'
,p_sirf_lookup => 'XXSIRF_CNV_GL_PRODPROJ'
,p_old_value => lr_po_dist_data.var_acc_seg5
); */
lc_seg5_value := NULL;
/* Segments 5 and 6 in the legacy instance both map onto Segment 5 in the target instance.
When mapping the data, take whichever one of the legacy instance values
in non-zero and map using lookup XXCSR_CNV_GL_PRODPROJ.
If both legacy values are zero, use the default of '000000' for Segment 5 of the target GL Account. */
IF UPPER(lr_po_dist_data.var_acc_seg5) = LOWER(lr_po_dist_data.var_acc_seg5) THEN -- 5 numeric
IF TO_NUMBER(lr_po_dist_data.var_acc_seg5) = 0 THEN -- 5 is zero
IF UPPER(lr_po_dist_data.var_acc_seg6) != LOWER(lr_po_dist_data.var_acc_seg6) THEN
lc_seg5_value := lr_po_dist_data.var_acc_seg6;
ELSIF TO_NUMBER(lr_po_dist_data.var_acc_seg6) = 0 THEN -- 6 is zero
lc_seg5_value := '000000';
ELSE
lc_seg5_value := lr_po_dist_data.var_acc_seg6;
END IF;
ELSE
IF UPPER(lr_po_dist_data.var_acc_seg6) != LOWER(lr_po_dist_data.var_acc_seg6) THEN
lc_error_details := lc_error_details || 'Both segment5('||lr_po_dist_data.var_acc_seg5||') and segment6('||lr_po_dist_data.var_acc_seg6||') cannot be non zero';
ELSIF TO_NUMBER(lr_po_dist_data.var_acc_seg6) = 0 THEN -- 6 is zero
lc_seg5_value := lr_po_dist_data.var_acc_seg5;
ELSE
lc_error_details := lc_error_details || 'Both segment5('||lr_po_dist_data.var_acc_seg5||') and segment6('||lr_po_dist_data.var_acc_seg6||') cannot be non zero';
END IF;
END IF;
ELSE -- 5 non numeric
IF UPPER(lr_po_dist_data.var_acc_seg6) != LOWER(lr_po_dist_data.var_acc_seg6) THEN
lc_error_details := lc_error_details || 'Both segment5('||lr_po_dist_data.var_acc_seg5||') and segment6('||lr_po_dist_data.var_acc_seg6||') cannot be non zero';
ELSIF TO_NUMBER(lr_po_dist_data.var_acc_seg6) = 0 THEN -- 6 is zero
lc_seg5_value := lr_po_dist_data.var_acc_seg5;
ELSE
lc_error_details := lc_error_details || 'Both segment5('||lr_po_dist_data.var_acc_seg5||') and segment6('||lr_po_dist_data.var_acc_seg6||') cannot be non zero';
END IF;
END IF;
IF lc_seg5_value IS NOT NULL AND lc_seg5_value != '000000' THEN
lc_var_acc_seg5 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_PRODPROJ'
,p_sirf_lookup => 'XXSIRF_CNV_GL_PRODPROJ'
,p_old_value => lc_seg5_value
);
ELSIF lc_seg5_value IS NOT NULL AND lc_seg5_value = '000000' THEN
lc_var_acc_seg5 := lc_seg5_value;
END IF;
--Derive variance account segment6 from lookup
lc_errloc := 'Derive variance account segment6 from lookup';
/* lc_var_acc_seg6 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_INTERCO'
,p_sirf_lookup => 'XXSIRF_CNV_GL_INTERCO'
,p_old_value => lr_po_dist_data.var_acc_seg6
); */
lc_var_acc_seg6 := '000';
--Derive variance account segment7 from lookup
lc_errloc := 'Derive variance account segment7 from lookup';
/* lc_var_acc_seg7 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_VAR_ACC7_LKUP'
,p_sirf_lookup => 'XXSIRF_VAR_ACC7_LKUP'
,p_old_value => lr_po_dist_data.var_acc_seg7
); */
lc_var_acc_seg7 := '00000';
END IF;
/*
--Derive charge account id
lc_errloc := 'Derive charge account id';
OPEN lcu_account_id (lc_chr_acc_seg1
,lc_chr_acc_seg2
,lc_chr_acc_seg3
,lc_chr_acc_seg4
,lc_chr_acc_seg5
,lc_chr_acc_seg6
,lc_chr_acc_seg7);
FETCH lcu_account_id
INTO ln_charge_acct_id;
CLOSE lcu_account_id;
IF ln_charge_acct_id IS NULL THEN
lc_error_details := lc_error_details || 'Could not derive charge of accounts id :-'||lc_chr_acc_seg1||'-'||lc_chr_acc_seg2||'-'||lc_chr_acc_seg3||'-'||lc_chr_acc_seg4||'-'||lc_chr_acc_seg5||'-'||lc_chr_acc_seg6||'-'||lc_chr_acc_seg7;
END IF;
*/
lc_line_ship_loc := NULL;
lc_new_ship := NULL;
ln_ship_loc_id := NULL;
lc_ship_org := NULL;
OPEN lcu_ship_po_line(lr_po_dist_data.po_number
,lr_po_dist_data.shipment_num
,lr_po_dist_data.po_line_number);
FETCH lcu_ship_po_line
INTO lc_line_ship_loc;
CLOSE lcu_ship_po_line;
lc_new_ship := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_DELIVER_LOCATIONS'
,'XXSIRF_CNV_DELIVER_LOCATIONS'
,lc_line_ship_loc
);
OPEN lcu_hr_loc_org(lc_new_ship);
FETCH lcu_hr_loc_org
INTO ln_ship_loc_id
,lc_ship_org;
CLOSE lcu_hr_loc_org;
IF lc_ship_org = 'CSD' THEN
OPEN lcu_charge_account_id(ln_ship_loc_id,'UK_MAIN');
FETCH lcu_charge_account_id INTO ln_charge_acct_id ;
CLOSE lcu_charge_account_id;
IF ln_charge_acct_id IS NULL THEN
lc_error_details := lc_error_details || 'Could not derive charge of accounts id ';
END IF;
ELSIF lc_ship_org = 'CSI' THEN
OPEN lcu_charge_account_id(ln_ship_loc_id,'CSI_MAIN');
FETCH lcu_charge_account_id INTO ln_charge_acct_id ;
CLOSE lcu_charge_account_id;
IF ln_charge_acct_id IS NULL THEN
lc_error_details := lc_error_details || 'Could not derive charge of accounts id ';
END IF;
ELSIF lc_ship_org = 'CSL' THEN
OPEN lcu_charge_account_id(ln_ship_loc_id,'CSL_MAIN');
FETCH lcu_charge_account_id INTO ln_charge_acct_id ;
CLOSE lcu_charge_account_id;
IF ln_charge_acct_id IS NULL THEN
lc_error_details := lc_error_details || 'Could not derive charge of accounts id ';
END IF;
ELSIF lc_ship_org = 'CDC' THEN
OPEN lcu_charge_account_id(ln_ship_loc_id,'AK1_COM');
FETCH lcu_charge_account_id INTO ln_charge_acct_id ;
CLOSE lcu_charge_account_id;
IF ln_charge_acct_id IS NULL THEN
lc_error_details := lc_error_details || 'Could not derive charge of accounts id ';
END IF;
ELSE
OPEN lcu_charge_account_id(ln_ship_loc_id,'RM_COM');
FETCH lcu_charge_account_id INTO ln_charge_acct_id ;
CLOSE lcu_charge_account_id;
IF ln_charge_acct_id IS NULL THEN
lc_error_details := lc_error_details || 'Could not derive charge of accounts id ';
END IF;
END IF;
--Derive budget account id
lc_errloc := 'Derive budget account id';
OPEN lcu_account_id (lc_bud_acc_seg1
,lc_bud_acc_seg2
,lc_bud_acc_seg3
,lc_bud_acc_seg4
,lc_bud_acc_seg5
,lc_bud_acc_seg6
,lc_bud_acc_seg7);
FETCH lcu_account_id
INTO ln_budget_acct_id;
CLOSE lcu_account_id;
--Derive accrual account id
lc_errloc := 'Derive accrual account id';
OPEN lcu_account_id (lc_accr_acc_seg1
,lc_accr_acc_seg2
,lc_accr_acc_seg3
,lc_accr_acc_seg4
,lc_accr_acc_seg5
,lc_accr_acc_seg6
,lc_accr_acc_seg7);
FETCH lcu_account_id
INTO ln_accrual_acct_id;
CLOSE lcu_account_id;
--Derive variance account id
lc_errloc := 'Derive variance account id';
OPEN lcu_account_id (lc_var_acc_seg1
,lc_var_acc_seg2
,lc_var_acc_seg3
,lc_var_acc_seg4
,lc_var_acc_seg5
,lc_var_acc_seg6
,lc_var_acc_seg7);
FETCH lcu_account_id
INTO ln_variance_acct_id;
CLOSE lcu_account_id;
IF lc_error_details IS NULL THEN
--Insert purchase order distrbutions data in interface table
lc_errloc := 'Insert purchase order distrbutions data in interface table';
INSERT INTO po_distributions_interface
(interface_line_id
,interface_header_id
,interface_distribution_id
,process_code
,distribution_num
,org_id
,quantity_ordered
,quantity_delivered
,quantity_billed
,quantity_cancelled
,rate_date
,rate
,deliver_to_location_id
,deliver_to_person_id
,destination_type_code
,destination_organization
,destination_context
,set_of_books
,charge_account_id
,budget_account_id
,accrual_account_id
,variance_account_id
,amount_billed
,accrue_on_receipt_flag
,accrued_flag
,prevent_encumbrance_flag
,encumbered_flag
,gl_cancelled_date
--,requisition_num
--,requisition_line_num
--,req_distribution_num
,project_accounting_context
,recoverable_tax
,nonrecoverable_tax
-- ,recovery_rate
-- ,tax_recovery_override_flag
,last_update_date
,last_updated_by
,creation_date
,created_by
)
VALUES
(ln_po_int_line_id
,ln_po_int_header_id
,po_distributions_interface_s.nextval
,'PENDING'
,lr_po_dist_data.distribution_num
,ln_org_id
,(lr_po_dist_data.quantity_ordered - lr_po_dist_data.quantity_delivered - lr_po_dist_data.quantity_cancelled)
,0 --lr_po_dist_data.quantity_delivered
,0 --lr_po_dist_data.quantity_billed
,0 --lr_po_dist_data.quantity_cancelled
,lr_po_dist_data.rate_date
,lr_po_dist_data.rate
,ln_location_id
,ln_person_id
,lr_po_dist_data.destination_type_code
,lc_new_org_name --lr_po_dist_data.destination_organization
,lr_po_dist_data.destination_context
,ln_sob_id
,ln_charge_acct_id
,ln_budget_acct_id
,ln_accrual_acct_id
,ln_variance_acct_id
,lr_po_dist_data.amount_billed
,'Y' -- lr_po_dist_data.accrue_on_receipt_flag as per MDT version 1.23
,lr_po_dist_data.accrued_flag
,lr_po_dist_data.prevent_encumbrance_flag
,lr_po_dist_data.encumbered_flag
,lr_po_dist_data.gl_cancelled_date
--,lr_po_dist_data.requisition_num
--,lr_po_dist_data.requisition_line_num
--,lr_po_dist_data.req_distribution_num
,lr_po_dist_data.project_accounting_context
,lr_po_dist_data.recoverable_tax
,lr_po_dist_data.nonrecoverable_tax
-- ,lr_po_dist_data.recovery_rate
-- ,lr_po_dist_data.tax_recovery_override_flag
,SYSDATE
,fnd_global.user_id
,SYSDATE
,fnd_global.user_id
);
UPDATE xxcsr_po_distributions_int
SET record_status = 'C'
,request_id = FND_GLOBAL.conc_request_id
,error_message = NULL
WHERE rowid = lr_po_dist_data.rowid;
COMMIT;
ln_dist_cnt := ln_dist_cnt + 1;
ELSE
UPDATE xxcsr_po_distributions_int
SET record_status = 'E'
,request_id = FND_GLOBAL.conc_request_id
,error_message = lc_error_details
WHERE rowid = lr_po_dist_data.rowid;
IF ln_po_int_line_id IS NOT NULL THEN
UPDATE xxcsr_po_lines_int
SET record_status = 'E'
,error_message = error_message||'error in distribution record'
WHERE po_number = lr_po_dist_data.po_number
AND line_num = lr_po_dist_data.po_line_number
AND shipment_num = lr_po_dist_data.shipment_num
AND source_instance = p_instance_name;
DELETE FROM po_lines_interface
WHERE interface_line_id = ln_po_int_line_id;
ln_lines_cnt := ln_lines_cnt - 1;
END IF;
IF ln_po_int_header_id IS NOT NULL THEN
UPDATE xxcsr_po_headers_int
SET record_status = 'E'
,error_message = error_message||'error in distribution record'
WHERE po_number = lr_po_dist_data.po_number
AND source_instance = p_instance_name;
DELETE FROM po_headers_interface
WHERE interface_header_id = ln_po_int_header_id;
ln_header_cnt := ln_header_cnt - 1;
END IF;
END IF; --lc_error_details IS NULL
COMMIT;
END LOOP;
COMMIT;
IF ln_header_cnt > 0 THEN
--Calling Import Standard Purchase Orders program
lc_errloc := 'Call Import Standard Purchase Orders program';
FND_FILE.PUT_LINE(FND_FILE.LOG,'Submitting Import Standard Purchase Orders concurrent program.');
ln_cur_org_id := FND_PROFILE.VALUE('ORG_ID');
FND_FILE.PUT_LINE(FND_FILE.LOG,'ln_cur_org_id : ' || ln_cur_org_id);
ln_request_id := FND_REQUEST.SUBMIT_REQUEST (
application => 'PO'
,program => 'POXPOPDOI'
,description => 'Import Standard Purchase Orders'
,start_time => SYSDATE
,sub_request => FALSE
,argument1 => NULL --Default Buyer
,argument2 => 'STANDARD' --Document Type
,argument3 => NULL --Document SubType
,argument4 => 'N' --Create or Update Items
,argument5 => NULL --Create Sourcing Rules
,argument6 => 'APPROVED' --Approval Status
,argument7 => NULL --Release Generation Method
,argument8 => NULL --Batch Id
,argument9 => ln_cur_org_id --Operating Unit
,argument10 => NULL --Global Agreement
,argument11 => NULL --Enable Sourcing Level
,argument12 => NULL --Sourcing Level
,argument13 => NULL --Inv Org Enable
,argument14 => NULL --Inventory Organization
);
COMMIT;
IF ln_request_id = 0 THEN
lc_error := 'Error submitting Import Standard Purchase Orders concurrent program.';
RAISE ex_conc_error;
END IF;
FND_FILE.PUT_LINE(FND_FILE.LOG,'Import Standard Purchase Orders concurrent program submitted. Request_id : ' || ln_request_id);
--Wait for the request to complete
lb_wait := FND_CONCURRENT.WAIT_FOR_REQUEST
(
request_id => ln_request_id
,interval => 2
,phase => lc_phase
,status => lc_status
,dev_phase => lc_devpha
,dev_status => lc_devsta
,message => lc_mesg
);
END IF; --ln_header_cnt > 0
x_header_cnt := ln_header_cnt;
x_lines_cnt := ln_lines_cnt;
x_dist_cnt := ln_dist_cnt;
x_req_id := ln_request_id;
-- Contracts import
FOR lr_po_header_contr IN lcu_po_header_contr (p_rec_status)
LOOP
ln_org_id := NULL;
ln_agent_id := NULL;
ln_bu_id := NULL;
lc_currency_code := NULL;
ln_vendor_id := NULL;
lc_payment_terms := NULL;
lc_freight_terms := NULL;
lc_error_details := NULL;
lc_new_orgname := NULL;
lc_business_group := NULL;
ln_bill_loc_id := NULL;
ln_ship_loc_id := NULL;
lc_inv_po_chk := NULL;
lc_func_curr := NULL;
lc_rate_type := NULL;
ln_rate := NULL;
ld_rate_date := NULL;
lc_new_ship := NULL;
lc_new_bill := NULL;
ln_vendor_site_id := NULL;
ln_vendor_contact_id := NULL;
ln_term_id := NULL;
lc_po_exists := NULL;
-- check if PO already exists
OPEN lcu_check_po_exists(lr_po_header_contr.po_number);
FETCH lcu_check_po_exists
INTO lc_po_exists;
CLOSE lcu_check_po_exists;
IF lc_po_exists IS NOT NULL THEN
lc_error_details := lc_error_details||'PO already exists';
END IF;
lc_errloc := 'Operating unit related derivations';
lc_new_orgname := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_OPERATING_UNIT'
,'XXSIRF_CNV_OPERATING_UNIT'
,lr_po_header_contr.operating_unit
);
IF lc_new_orgname IS NULL THEN
lc_error_details := lc_error_details||'Could not derive new operating unit for '||lr_po_header_contr.operating_unit||'. ';
ELSE
ln_org_id := XXCSR_COMMON_PKG.get_organization_id(lc_new_orgname);
IF ln_org_id IS NULL THEN
lc_error_details := lc_error_details||'Could not derive org id for new operating unit '||lc_new_orgname||'. ';
ELSE
-- Compare functional and document currency
OPEN lcu_func_curr(ln_org_id);
FETCH lcu_func_curr
INTO lc_func_curr;
CLOSE lcu_func_curr;
IF lc_func_curr = lr_po_header_contr.currency_code THEN
lc_rate_type := NULL;
ln_rate := NULL;
ld_rate_date := NULL;
ELSE
lc_rate_type := lr_po_header_contr.rate_type;
ln_rate := lr_po_header_contr.rate;
ld_rate_date := lr_po_header_contr.rate_date;
END IF;
END IF;
END IF;
/* lc_errloc := 'Checking for inventory purchase orders';
lc_inv_po_chk := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_INV_SUPPLIERS'
,'XXSIRF_CNV_INV_SUPPLIERS'
,lr_po_header_contr.vendor_name
);
IF lc_inv_po_chk IS NULL THEN
lc_error_details := lc_error_details||'Only inventory purchase orders will be migrated';
END IF; */
/* Commented by Nishka, added the above derivation
--Derive org id
lc_errloc := 'Derive org id';
ln_org_id := XXCSR_COMMON_PKG.get_organization_id(lr_po_header_contr.operating_unit);
IF ln_org_id IS NULL THEN
lc_error_details := 'Invalid operating unit name.';
END IF; */
/* OPEN lcu_bu_id (lr_po_header_contr.emp_bu_name);
FETCH lcu_bu_id
INTO ln_bu_id;
CLOSE lcu_bu_id; */
-------------- IF lr_po_header_contr.emp_bu_name IN ( 'CSR United States','CSR United Kingdom') THEN ----------commented on 17oct2011
IF lr_po_header_contr.emp_bu_name IN ( 'CSR United States','CSR United Kingdom') THEN
lc_business_group := lr_po_header_contr.emp_bu_name;
ELSE
lc_business_group := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_HR_BG'
,'XXSIRF_CNV_HR_BG'
,lr_po_header_contr.emp_bu_name
);
END IF;
IF lc_business_group IS NULL THEN
lc_error_details := lc_error_details||'Mapping for Business Group '||lr_po_header_contr.emp_bu_name||' could not be found. ';
ELSE
ln_bu_id := XXCSR_COMMON_PKG.get_business_group_id(lc_business_group);
IF ln_bu_id IS NULL THEN
lc_error_details:= lc_error_details||' Business Group ID for '||lc_business_group||' could not be derived. ';
ELSE
--Derive agent id
lc_errloc := 'Derive agent id';
ln_agent_id := XXCSR_COMMON_PKG.get_person_id (p_first_name => lr_po_header_contr.emp_fname
,p_last_name => lr_po_header_contr.emp_lname
,p_date_of_birth => lr_po_header_contr.emp_dob
,p_business_group_id => ln_bu_id
);
IF ln_agent_id IS NULL THEN
lc_error_details := lc_error_details || ' Invalid agent (employee) details.';
END IF;
END IF;
END IF;
--Check currency code
lc_errloc := 'Check currency code';
OPEN lcu_chk_currency (lr_po_header_contr.currency_code);
FETCH lcu_chk_currency
INTO lc_currency_code;
IF lcu_chk_currency%NOTFOUND THEN
lc_error_details := lc_error_details || ' Invalid currency code.';
END IF;
CLOSE lcu_chk_currency;
--Derive vendor id
lc_errloc := 'Derive vendor id';
IF lr_po_header_contr.vendor_name IS NOT NULL THEN
OPEN lcu_vendor_der(lr_po_header_contr.vendor_name);
FETCH lcu_vendor_der
INTO ln_vendor_id;
CLOSE lcu_vendor_der;
IF ln_vendor_id IS NULL THEN
lc_error_details := lc_error_details || ' Vendor not migrated.';
END IF;
END IF;
lc_errloc := 'Check payment terms';
IF lr_po_header_contr.payment_terms IS NOT NULL THEN
lc_payment_terms := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_SUPPLIER_PAYTERMS'
,p_sirf_lookup => 'XXSIRF_CNV_SUPPLIER_PAYTERMS'
,p_old_value => lr_po_header_contr.payment_terms
);
IF lc_payment_terms IS NULL THEN
lc_error_details := lc_error_details || ' Invalid payment terms.';
ELSE
OPEN lcu_pay_term(lc_payment_terms);
FETCH lcu_pay_term
INTO ln_term_id;
CLOSE lcu_pay_term;
IF ln_term_id IS NULL THEN
lc_error_details := lc_error_details || 'Could not derive payment term id for '||lc_payment_terms;
END IF;
END IF;
END IF;
--Check freight terms
lc_errloc := 'Check freight terms';
IF lr_po_header_contr.freight_terms IS NOT NULL THEN
lc_freight_terms := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_FREIGHT_TERMS'
,p_sirf_lookup => 'XXSIRF_CNV_FREIGHT_TERMS'
,p_old_value => lr_po_header_contr.freight_terms
);
IF lc_freight_terms IS NULL THEN
lc_error_details := lc_error_details || ' Invalid freight terms.';
END IF;
END IF;
IF lr_po_header_contr.ship_to_location IS NOT NULL THEN
lc_new_ship := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_DELIVER_LOCATIONS'
,'XXSIRF_CNV_DELIVER_LOCATIONS'
,lr_po_header_contr.ship_to_location
);
IF lc_new_ship IS NULL THEN
lc_error_details := lc_error_details||'Could not derive new ship to location for '||lr_po_header_contr.ship_to_location||' in XXCSR_CNV_DELIVER_LOCATIONS. ';
ELSE
OPEN lcu_hr_loc(lc_new_ship);
FETCH lcu_hr_loc
INTO ln_ship_loc_id;
CLOSE lcu_hr_loc;
IF ln_ship_loc_id IS NULL THEN
lc_error_details := lc_error_details || 'Ship to location id could not be derived for '||lr_po_header_contr.ship_to_location;
END IF;
END IF;
END IF;
IF lr_po_header_contr.bill_to_location IS NOT NULL THEN
lc_new_bill := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_BILLTO_LOCATIONS'
,'XXSIRF_CNV_BILLTO_LOCATIONS'
,lr_po_header_contr.bill_to_location
);
IF lc_new_bill IS NULL THEN
lc_error_details := lc_error_details||'Could not derive new bill to location for '||lr_po_header_contr.bill_to_location||' in XXCSR_CNV_BILLTO_LOCATIONS. ';
ELSE
OPEN lcu_hr_loc(lc_new_bill);
FETCH lcu_hr_loc
INTO ln_bill_loc_id;
CLOSE lcu_hr_loc;
IF ln_bill_loc_id IS NULL THEN
lc_error_details := lc_error_details || 'Bill to location id could not be derived for '||lr_po_header_contr.bill_to_location;
END IF;
END IF;
END IF;
OPEN lcu_vendor_site(lr_po_header_contr.vendor_site_code
,ln_vendor_id);
FETCH lcu_vendor_site
INTO ln_vendor_site_id;
CLOSE lcu_vendor_site;
OPEN lcu_vendor_contact(ln_vendor_site_id);
FETCH lcu_vendor_contact
INTO ln_vendor_contact_id;
CLOSE lcu_vendor_contact;
/* ln_line_item_cnt := NULL;
ln_po_item_chk := NULL;
-- Check whether the po line has valid items.
OPEN lcu_po_line_itm(lr_po_header_contr.po_number);
FETCH lcu_po_line_itm
INTO ln_line_item_cnt;
CLOSE lcu_po_line_itm;
IF ln_line_item_cnt != 0 THEN
OPEN lcu_po_itm_chk(lr_po_header_contr.po_number);
FETCH lcu_po_itm_chk
INTO ln_po_item_chk;
CLOSE lcu_po_itm_chk;
IF ln_po_item_chk = 0 THEN
lc_error_details := lc_error_details || 'Inventory item id for po line could not be derived';
END IF;
END IF; */
IF lc_error_details IS NULL THEN
--Insert purchase order header data in interface table
lc_errloc := 'Insert purchase order header data in interface table';
BEGIN
ln_po_header_id := NULL;
ln_po_header_id := PO_HEADERS_S.nextval;
INSERT INTO po_headers_all (
po_header_id
,agent_id
,type_lookup_code
,created_by
,creation_date
,last_update_date
,last_updated_by
,last_update_login
,request_id
,segment1
,summary_flag
,enabled_flag
,vendor_id
,vendor_site_id
,vendor_contact_id
,ship_to_location_id
,bill_to_location_id
,terms_id
,currency_code
,rate_type
,rate_date
,rate
,authorization_status
,revision_num
,approved_flag
,approved_date
,print_count
,confirming_order_flag
,comments
,acceptance_required_flag
,cancel_flag
,frozen_flag
,closed_code
,org_id
,interface_source_code
-- ,wf_item_type
-- ,wf_item_key
,xml_flag
,document_creation_method
,submit_date
,style_id
,freight_terms_lookup_code
,attribute_category
,pay_on_code
,global_agreement_flag
)
VALUES
(
ln_po_header_id
,ln_agent_id
,'CONTRACT'
,FND_GLOBAL.USER_ID
,SYSDATE
,SYSDATE
,FND_GLOBAL.USER_ID
,FND_GLOBAL.LOGIN_ID
,gn_conc_req_id
,lr_po_header_contr.po_number
,'N'
,'Y'
,ln_vendor_id
,ln_vendor_site_id
,ln_vendor_contact_id
,ln_ship_loc_id -- lr_po_header_contr.ship_to_location
,ln_bill_loc_id -- lr_po_header_contr.bill_to_location
,ln_term_id
,lr_po_header_contr.currency_code
,DECODE(lc_rate_type,'Corporate','User',lc_rate_type)
,ld_rate_date
,ln_rate
,DECODE(lr_po_header_contr.approval_status,'REQUIRES REAPPROVAL','INCOMPLETE',lr_po_header_contr.approval_status)
,0
,lr_po_header_contr.approved_flag
,lr_po_header_contr.approved_date
--,DECODE(lr_po_header_contr.approval_status,'APPROVED',lr_po_header_contr.print_count,0)
,DECODE(lr_po_header_contr.approval_status,'APPROVED',1,0)
,lr_po_header_contr.confirming_order_flag
,lr_po_header_contr.comments
,lr_po_header_contr.acceptance_required_flag
,'N'
,lr_po_header_contr.frozen_flag
,lr_po_header_contr.closed_code
,ln_org_id
,'XXCSR Conversion'
-- ,-- wf_item_type
-- ,-- wf_item_key
,'N'
,'PDOI'
,SYSDATE
, 1 -- style_id
,lc_freight_terms
,lr_po_header_contr.attribute_category
,lr_po_header_contr.pay_on_code
,'Y'
);
INSERT INTO PO_GA_ORG_ASSIGNMENTS(PO_HEADER_ID
,ORGANIZATION_ID
,ENABLED_FLAG
,VENDOR_SITE_ID
,LAST_UPDATE_DATE
,LAST_UPDATED_BY
,CREATION_DATE
,CREATED_BY
,LAST_UPDATE_LOGIN
,PURCHASING_ORG_ID
,ORG_ASSIGNMENT_ID
)
VALUES (ln_po_header_id
,ln_org_id
,'Y'
,ln_vendor_site_id
,SYSDATE
,FND_GLOBAL.USER_ID
,SYSDATE
,FND_GLOBAL.USER_ID
,FND_GLOBAL.LOGIN_ID
,ln_org_id
,PO_GA_ORG_ASSIGNMENTS_S.NEXTVAL
);
UPDATE xxcsr_po_headers_int
SET record_status = 'C'
,request_id = FND_GLOBAL.conc_request_id
,error_message = NULL
WHERE rowid = lr_po_header_contr.rowid;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
lc_error_details := SQLERRM;
UPDATE xxcsr_po_headers_int
SET record_status = 'E'
,request_id = FND_GLOBAL.conc_request_id
,error_message = lc_error_details
WHERE rowid = lr_po_header_contr.rowid;
END;
-- ln_header_cnt := ln_header_cnt + 1;
ELSE
UPDATE xxcsr_po_headers_int
SET record_status = 'E'
,request_id = FND_GLOBAL.conc_request_id
,error_message = lc_error_details
WHERE rowid = lr_po_header_contr.rowid;
END IF; --lc_error_details IS NULL
COMMIT;
END LOOP;
COMMIT;
--
EXCEPTION
WHEN EX_CONC_ERROR THEN
x_retcode := 2;
x_errbuf := lc_errmsg;
FND_FILE.PUT_LINE(FND_FILE.LOG,lc_errmsg);
WHEN OTHERS THEN
x_errbuf := SUBSTR(SQLERRM,1,200);
x_retcode := 2;
FND_FILE.PUT_LINE(FND_FILE.LOG,'Unexpected error occurred in import procedure at ' || lc_errloc || ' Error : ' || SQLERRM);
END import_zoran;
-----=========================End Import ZORAN procedure=====================
--Main Routine
PROCEDURE main
(x_errbuf OUT NOCOPY VARCHAR2
,x_retcode OUT NOCOPY NUMBER
,p_data_file1 IN VARCHAR2
,p_data_file2 IN VARCHAR2
,p_data_file3 IN VARCHAR2
,p_instance_name IN VARCHAR2
,p_process_error IN VARCHAR2
)
IS
--
CURSOR lcu_get_conc_info(pn_request_id NUMBER)
IS
SELECT FCR.status_code
,FCR.phase_code
FROM fnd_concurrent_requests FCR
WHERE FCR.request_id = pn_request_id;
lc_errloc VARCHAR2(1000);
ln_load_req_id NUMBER;
ln_load2_req_id NUMBER;
ln_imp_req_id NUMBER;
lc_errmsg VARCHAR2(2000);
lc_phase VARCHAR2(500);
lc_status VARCHAR2(500);
lc_devpha VARCHAR2(500);
lc_devsta VARCHAR2(500);
lc_mesg VARCHAR2(50);
lb_wait BOOLEAN;
lc_errbuf VARCHAR2(500);
ln_hdr_tab_retcode NUMBER;
ln_lin_tab_retcode NUMBER;
ln_dist_tab_retcode NUMBER;
ln_hdr_stg_retcode NUMBER;
ln_lin_stg_retcode NUMBER;
ln_dist_stg_retcode NUMBER;
ln_tab_retcode NUMBER;
ln_retcode NUMBER;
ln_po_header_cnt NUMBER;
ln_po_lines_cnt NUMBER;
ln_po_dist_cnt NUMBER;
ex_conc_error EXCEPTION;
ex_cust_error EXCEPTION;
BEGIN
--Check if process error is set to Yes
IF p_process_error = 'Y' THEN
UPDATE xxcsr_po_headers_int
SET request_id = gn_conc_req_id
WHERE record_status ='E'
AND source_instance = p_instance_name;
UPDATE xxcsr_po_lines_int
SET request_id = gn_conc_req_id
WHERE record_status ='E'
AND source_instance = p_instance_name;
UPDATE xxcsr_po_distributions_int
SET request_id = gn_conc_req_id
WHERE record_status ='E'
AND source_instance = p_instance_name;
update xxcsr_po_headers_int
set emp_fname = 'Scott'
, emp_lname = 'Simpson'
, emp_dob = to_date('02/26/1972','MM/DD/RRRR')
, emp_bu_name = 'CSR United Kingdom'
where emp_fname = 'Person'
and emp_lname = 'Migration 2'
AND source_instance = p_instance_name;
update xxcsr_po_headers_int
set emp_fname = 'Mary'
, emp_lname = 'Benak'
, emp_dob = to_date('12/04/1964','MM/DD/RRRR')
, emp_bu_name = 'CSR United States'
where emp_fname = 'Wee Kee'
and emp_lname = 'Lim'
AND source_instance = p_instance_name;
COMMIT;
--Call Import routine for processing of error records
IF p_instance_name = 'CSR' THEN
import_csr(p_rec_status => 'E'
,p_instance_name => p_instance_name
,x_errbuf => lc_errbuf
,x_retcode => ln_retcode
,x_header_cnt => ln_po_header_cnt
,x_lines_cnt => ln_po_lines_cnt
,x_dist_cnt => ln_po_dist_cnt
,x_req_id => ln_imp_req_id);
--import_csr('E',p_instance_name,lc_errbuf,ln_retcode,ln_po_header_cnt,ln_po_lines_cnt,ln_po_dist_cnt,ln_imp_req_id);
--============================================ZORAN instace logic added on 17OCT2011========================
ELSIF p_instance_name = 'ZORAN' THEN
FND_FILE.PUT_LINE(FND_FILE.LOG,'Importing ZORAN instace');
import_zoran(p_rec_status => 'E'
,p_instance_name => p_instance_name
,x_errbuf => lc_errbuf
,x_retcode => ln_retcode
,x_header_cnt => ln_po_header_cnt
,x_lines_cnt => ln_po_lines_cnt
,x_dist_cnt => ln_po_dist_cnt
,x_req_id => ln_imp_req_id);
ELSE
import_sirf(p_rec_status => 'E'
,p_instance_name => p_instance_name
,x_errbuf => lc_errbuf
,x_retcode => ln_retcode
,x_header_cnt => ln_po_header_cnt
,x_lines_cnt => ln_po_lines_cnt
,x_dist_cnt => ln_po_dist_cnt
,x_req_id => ln_imp_req_id);
--import_sirf('E',p_instance_name,lc_errbuf,ln_retcode,ln_po_header_cnt,ln_po_lines_cnt,ln_po_dist_cnt,ln_imp_req_id);
END IF;
ELSE
--Check and call loader for purchase order headers data file
IF p_data_file1 IS NOT NULL THEN
lc_errloc := 'Calling common loader program for data file : ' || p_data_file1;
ln_load_req_id := FND_REQUEST.SUBMIT_REQUEST (
application => 'XXCSR'
,program => 'XXCSRLOAD'
,description => NULL
,start_time => SYSDATE
,sub_request => FALSE
,argument1 => p_data_file1
,argument2 => 'XXCSR_PO_PUR_ORDR_HDR_IMPORT.ctl'
,argument3 => FND_PROFILE.VALUE('XXCSR_DIRECTORY_PATH')
);
COMMIT;
IF ln_load_req_id = 0 THEN
lc_errmsg := 'Error submitting loader concurrent program for data file ' || p_data_file1;
RAISE ex_conc_error;
END IF;
FND_FILE.PUT_LINE(FND_FILE.LOG,'Common loader program submitted for data file : ' || p_data_file1 || ' Request_id : ' || ln_load_req_id);
--Wait for the request to complete
lb_wait := FND_CONCURRENT.WAIT_FOR_REQUEST
(
request_id => ln_load_req_id
,interval => 2
,phase => lc_phase
,status => lc_status
,dev_phase => lc_devpha
,dev_status => lc_devsta
,message => lc_mesg
);
-- Check if the load program completed execution normally. If not, stop further execution.
IF (lcu_get_conc_info%ISOPEN) THEN
CLOSE lcu_get_conc_info;
END IF;
OPEN lcu_get_conc_info(ln_load_req_id);
FETCH lcu_get_conc_info
INTO lc_devsta
,lc_devpha;
CLOSE lcu_get_conc_info;
IF lc_devpha = 'C' AND lc_devsta <> 'C' THEN
DELETE FROM xxcsr_po_headers_int
WHERE record_status = 'N'
AND source_instance = p_instance_name;
COMMIT;
lc_errmsg := 'Loader program Failed. Please check Log file for request ID '|| ln_load_req_id;
RAISE ex_conc_error;
END IF;
ELSE
FND_FILE.PUT_LINE(FND_FILE.LOG,'Purchase Orders data file name is empty. No Purchase Orders created.');
END IF; --p_data_file1 IS NOT NULL
--Check and call loader for purchase order lines data file
IF p_data_file2 IS NOT NULL THEN
lc_errloc := 'Calling common loader program for data file : ' || p_data_file2;
ln_load_req_id := FND_REQUEST.SUBMIT_REQUEST (
application => 'XXCSR'
,program => 'XXCSRLOAD'
,description => NULL
,start_time => SYSDATE
,sub_request => FALSE
,argument1 => p_data_file2
,argument2 => 'XXCSR_PO_PUR_ORDR_LIN_IMPORT.ctl'
,argument3 => FND_PROFILE.VALUE('XXCSR_DIRECTORY_PATH')
);
COMMIT;
IF ln_load_req_id = 0 THEN
lc_errmsg := 'Error submitting loader concurrent program for data file ' || p_data_file2;
RAISE ex_conc_error;
END IF;
FND_FILE.PUT_LINE(FND_FILE.LOG,'Common loader program submitted for data file : ' || p_data_file2 || ' Request_id : ' || ln_load_req_id);
--Wait for the request to complete
lb_wait := FND_CONCURRENT.WAIT_FOR_REQUEST
(
request_id => ln_load_req_id
,interval => 2
,phase => lc_phase
,status => lc_status
,dev_phase => lc_devpha
,dev_status => lc_devsta
,message => lc_mesg
);
-- Check if the load program completed execution normally. If not, stop further execution.
IF (lcu_get_conc_info%ISOPEN) THEN
CLOSE lcu_get_conc_info;
END IF;
OPEN lcu_get_conc_info(ln_load_req_id);
FETCH lcu_get_conc_info
INTO lc_devsta
,lc_devpha;
CLOSE lcu_get_conc_info;
IF lc_devpha = 'C' AND lc_devsta <> 'C' THEN
DELETE FROM xxcsr_po_headers_int
WHERE record_status = 'N'
AND source_instance = p_instance_name;
DELETE FROM xxcsr_po_lines_int
WHERE record_status = 'N'
AND source_instance = p_instance_name;
COMMIT;
lc_errmsg := 'Loader program Failed. Please check Log file for request ID '|| ln_load_req_id;
RAISE ex_conc_error;
END IF;
ELSE
FND_FILE.PUT_LINE(FND_FILE.LOG,'Purchase Order Lines data file name is empty. No Purchase Order Lines created.');
END IF; --p_data_file2 IS NOT NULL
--Check and call loader for purchase order distributions data file
IF p_data_file3 IS NOT NULL THEN
lc_errloc := 'Calling common loader program for data file : ' || p_data_file3;
ln_load_req_id := FND_REQUEST.SUBMIT_REQUEST (
application => 'XXCSR'
,program => 'XXCSRLOAD'
,description => NULL
,start_time => SYSDATE
,sub_request => FALSE
,argument1 => p_data_file3
,argument2 => 'XXCSR_PO_PUR_ORDR_DIST_IMPORT.ctl'
,argument3 => FND_PROFILE.VALUE('XXCSR_DIRECTORY_PATH')
);
COMMIT;
IF ln_load_req_id = 0 THEN
lc_errmsg := 'Error submitting loader concurrent program for data file ' || p_data_file3;
RAISE ex_conc_error;
END IF;
FND_FILE.PUT_LINE(FND_FILE.LOG,'Common loader program submitted for data file : ' || p_data_file3 || ' Request_id : ' || ln_load_req_id);
--Wait for the request to complete
lb_wait := FND_CONCURRENT.WAIT_FOR_REQUEST
(
request_id => ln_load_req_id
,interval => 2
,phase => lc_phase
,status => lc_status
,dev_phase => lc_devpha
,dev_status => lc_devsta
,message => lc_mesg
);
-- Check if the load program completed execution normally. If not, stop further execution.
IF (lcu_get_conc_info%ISOPEN) THEN
CLOSE lcu_get_conc_info;
END IF;
OPEN lcu_get_conc_info(ln_load_req_id);
FETCH lcu_get_conc_info
INTO lc_devsta
,lc_devpha;
CLOSE lcu_get_conc_info;
IF lc_devpha = 'C' AND lc_devsta <> 'C' THEN
DELETE FROM xxcsr_po_headers_int
WHERE record_status = 'N'
AND source_instance = p_instance_name;
DELETE FROM xxcsr_po_lines_int
WHERE record_status = 'N'
AND source_instance = p_instance_name;
DELETE FROM xxcsr_po_distributions_int
WHERE record_status = 'N'
AND source_instance = p_instance_name;
COMMIT;
lc_errmsg := 'Loader program Failed. Please check Log file for request ID '|| ln_load_req_id;
RAISE ex_conc_error;
END IF;
ELSE
FND_FILE.PUT_LINE(FND_FILE.LOG,'Purchase Order Distributions data file name is empty. No Purchase Order distributions created.');
END IF; --p_data_file3 IS NOT NULL
--Update the staging tables with request_id
UPDATE xxcsr_po_headers_int
SET request_id = gn_conc_req_id
WHERE record_status = 'N'
AND source_instance = p_instance_name;
UPDATE xxcsr_po_lines_int
SET request_id = gn_conc_req_id
WHERE record_status = 'N'
AND source_instance = p_instance_name;
UPDATE xxcsr_po_distributions_int
SET request_id = gn_conc_req_id
WHERE record_status = 'N'
AND source_instance = p_instance_name;
COMMIT;
update xxcsr_po_headers_int
set emp_fname = 'Scott'
, emp_lname = 'Simpson'
, emp_dob = to_date('02/26/1972','MM/DD/RRRR')
, emp_bu_name = 'CSR United Kingdom'
where emp_fname = 'Person'
and emp_lname = 'Migration 2'
AND source_instance = p_instance_name;
update xxcsr_po_headers_int
set emp_fname = 'Mary'
, emp_lname = 'Benak'
, emp_dob = to_date('12/04/1964','MM/DD/RRRR')
, emp_bu_name = 'CSR United States'
where emp_fname = 'Wee Kee'
and emp_lname = 'Lim'
AND source_instance = p_instance_name;
COMMIT;
--Call Import program if all data is loaded successfully
IF p_instance_name = 'CSR' THEN
import_csr(p_rec_status => 'N'
,p_instance_name => p_instance_name
,x_errbuf => lc_errbuf
,x_retcode => ln_retcode
,x_header_cnt => ln_po_header_cnt
,x_lines_cnt => ln_po_lines_cnt
,x_dist_cnt => ln_po_dist_cnt
,x_req_id => ln_imp_req_id);
--import_csr('E',p_instance_name,lc_errbuf,ln_retcode,ln_po_header_cnt,ln_po_lines_cnt,ln_po_dist_cnt,ln_imp_req_id);
ELSE
import_sirf(p_rec_status => 'N'
,p_instance_name => p_instance_name
,x_errbuf => lc_errbuf
,x_retcode => ln_retcode
,x_header_cnt => ln_po_header_cnt
,x_lines_cnt => ln_po_lines_cnt
,x_dist_cnt => ln_po_dist_cnt
,x_req_id => ln_imp_req_id);
--import_sirf('N',p_instance_name,lc_errbuf,ln_retcode,ln_po_header_cnt,ln_po_lines_cnt,ln_po_dist_cnt,ln_imp_req_id);
END IF;
END IF; --p_process_error = 'Y'
FND_FILE.PUT_LINE(FND_FILE.LOG,'ln_po_header_cnt : ' || ln_po_header_cnt);
FND_FILE.PUT_LINE(FND_FILE.LOG,'ln_po_lines_cnt : ' || ln_po_lines_cnt);
FND_FILE.PUT_LINE(FND_FILE.LOG,'ln_po_dist_cnt : ' || ln_po_dist_cnt);
IF ln_imp_req_id IS NOT NULL THEN
lc_errloc := 'Calling common routine : XXCSR_COMMON_PKG.interface_table_summary for xxcsr_po_headers_int';
interface_table_summary(x_errbuf => lc_errbuf
,x_retcode => ln_hdr_tab_retcode
,p_interface_table => 'po_headers_interface'
,p_request_id => ln_imp_req_id
,p_total_record_count => ln_po_header_cnt
);
lc_errloc := 'Calling common routine : XXCSR_COMMON_PKG.interface_table_summary for xxcsr_po_lines_int';
interface_table_summary(x_errbuf => lc_errbuf
,x_retcode => ln_lin_tab_retcode
,p_interface_table => 'po_lines_interface'
,p_request_id => ln_imp_req_id
,p_total_record_count => ln_po_lines_cnt
);
lc_errloc := 'Calling common routine : XXCSR_COMMON_PKG.interface_table_summary for xxcsr_po_distributions_int';
interface_table_summary(x_errbuf => lc_errbuf
,x_retcode => ln_dist_tab_retcode
,p_interface_table => 'po_distributions_interface'
,p_request_id => ln_imp_req_id
,p_total_record_count => ln_po_dist_cnt
);
END IF;
lc_errloc := 'Calling common routine : XXCSR_COMMON_PKG.table_summary for XXCSR_PO_HEADERS_INT';
XXCSR_COMMON_PKG.table_summary(lc_errbuf
,ln_hdr_stg_retcode
,'XXCSR_PO_HEADERS_INT'
,FND_GLOBAL.conc_request_id);
lc_errloc := 'Calling common routine : XXCSR_COMMON_PKG.print_error for xxcsr_po_headers_int';
XXCSR_COMMON_PKG.print_error(lc_errbuf,ln_retcode,'line_number','po_number','xxcsr_po_headers_int',FND_GLOBAL.conc_request_id,'XXCSR_PO_HEADERS_INT','LINE NUMBER','PURCHASE ORDER NUMBER');
lc_errloc := 'Calling common routine : XXCSR_COMMON_PKG.table_summary for xxcsr_po_lines_int';
XXCSR_COMMON_PKG.table_summary(lc_errbuf
,ln_lin_stg_retcode
,'XXCSR_PO_LINES_INT'
,FND_GLOBAL.conc_request_id);
lc_errloc := 'Calling common routine : XXCSR_COMMON_PKG.print_error for xxcsr_po_lines_int';
XXCSR_COMMON_PKG.print_error(lc_errbuf,ln_retcode,'line_number','po_number','xxcsr_po_lines_int',FND_GLOBAL.conc_request_id,'XXCSR_PO_LINES_INT','LINE NUMBER','PURCHASE ORDER NUMBER');
lc_errloc := 'Calling common routine : XXCSR_COMMON_PKG.table_summary for xxcsr_po_distributions_int';
XXCSR_COMMON_PKG.table_summary(lc_errbuf
,ln_dist_stg_retcode
,'XXCSR_PO_DISTRIBUTIONS_INT'
,FND_GLOBAL.conc_request_id);
lc_errloc := 'Calling common routine : XXCSR_COMMON_PKG.print_error for xxcsr_po_distributions_int';
XXCSR_COMMON_PKG.print_error(lc_errbuf,ln_retcode,'line_number','po_number','xxcsr_po_distributions_int',FND_GLOBAL.conc_request_id,'XXCSR_PO_DISTRIBUTIONS_INT','LINE NUMBER','PURCHASE ORDER NUMBER');
IF ln_hdr_tab_retcode = 2 OR ln_lin_tab_retcode = 2 OR ln_dist_tab_retcode = 2 OR ln_hdr_stg_retcode = 2 OR ln_lin_stg_retcode = 2 OR ln_dist_stg_retcode = 2 THEN
lc_errmsg := NULL;
ln_tab_retcode := 2;
RAISE ex_cust_error;
END IF;
IF ln_hdr_tab_retcode = 1 OR ln_lin_tab_retcode = 1 OR ln_dist_tab_retcode = 1 OR ln_hdr_stg_retcode = 1 OR ln_lin_stg_retcode = 1 OR ln_dist_stg_retcode = 1 THEN
lc_errmsg := NULL;
ln_tab_retcode := 1;
RAISE ex_cust_error;
END IF;
IF ln_hdr_tab_retcode = 0 AND ln_lin_tab_retcode = 0 AND ln_dist_tab_retcode = 0 OR ln_hdr_stg_retcode = 0 OR ln_lin_stg_retcode = 0 OR ln_dist_stg_retcode = 0 THEN
lc_errmsg := NULL;
ln_tab_retcode := 0;
RAISE ex_cust_error;
END IF;
--
EXCEPTION
WHEN EX_CONC_ERROR THEN
x_retcode := 2;
x_errbuf := lc_errmsg;
FND_FILE.PUT_LINE(FND_FILE.LOG,lc_errmsg);
WHEN EX_CUST_ERROR THEN
x_retcode := ln_tab_retcode;
x_errbuf := lc_errmsg;
WHEN OTHERS THEN
x_errbuf := SUBSTR(SQLERRM,1,200);
x_retcode := 2;
FND_FILE.PUT_LINE(FND_FILE.LOG,'Unexpected error occurred in import procedure at ' || lc_errloc || ' Error : ' || SQLERRM);
END main;
END XXCSR_PO_PUR_ORDR_IMPORT_PKG;
/
SHOW ERRORS;
----EXIT;
-- +=================================================================+
-- | End of Script |
-- +=================================================================+
ELSIF p_instance_name = 'ZORAN' THEN
FND_FILE.PUT_LINE(FND_FILE.LOG,'Importing ZORAN instace');
import_zoran(p_rec_status => 'E'
,p_instance_name => p_instance_name
,x_errbuf => lc_errbuf
,x_retcode => ln_retcode
,x_header_cnt => ln_po_header_cnt
,x_lines_cnt => ln_po_lines_cnt
,x_dist_cnt => ln_po_dist_cnt
,x_req_id => ln_imp_req_id);
*/
CREATE OR REPLACE PACKAGE XXCSR_PO_PUR_ORDR_IMPORT_PKG AS
-- +==============================================================================+
-- | Oracle Solution Services India PvMSIT. Ltd., India |
-- +==============================================================================+
-- | |
-- |$Id:$ |
-- | FILENAME |
-- | XXCSR_PO_PUR_ORDR_IMPORT_PKG.sql |
-- | |
-- | Description: |
-- | Package specification to import Purchase Orders data |
-- | |
-- | NOTES |
-- | Created by Amod Joshi |
-- | |
-- | History: |
-- | |
-- | Version Date Author Remarks |
-- | Draft 1A 25-SEP-2009 Amod Joshi Initial draft version |
-- +==============================================================================+
PROCEDURE interface_table_summary(x_errbuf OUT VARCHAR2
,x_retcode OUT NUMBER
,p_interface_table IN VARCHAR2
,p_request_id IN NUMBER
,p_total_record_count IN NUMBER);
PROCEDURE main
(x_errbuf OUT NOCOPY VARCHAR2
,x_retcode OUT NOCOPY NUMBER
,p_data_file1 IN VARCHAR2
,p_data_file2 IN VARCHAR2
,p_data_file3 IN VARCHAR2
,p_instance_name IN VARCHAR2
,p_process_error IN VARCHAR2
);
END XXCSR_PO_PUR_ORDR_IMPORT_PKG;
/
SHOW ERRORS;
---EXIT;
-- +=================================================================+
-- | End of Script |
-- +=================================================================+
create or replace
PACKAGE BODY XXCSR_PO_PUR_ORDR_IMPORT_PKG AS
-- +==============================================================================+
-- | Oracle Solution Services India PvMSIT. Ltd., India |
-- +==============================================================================+
-- | |
-- |$Id:$ |
-- | FILENAME |
-- | XXCSR_PO_PUR_ORDR_IMPORT_PKG.sql |
-- | |
-- | Description: |
-- | Package body to import Purchase Orders data |
-- | |
-- | NOTES |
-- | Created by Amod Joshi |
-- | |
-- | History: |
-- | |
-- | Version Date Author Remarks |
-- | Draft 1A 25-SEP-2009 Amod Joshi Initial draft version |
-- | Draft 1B 02-FEB-2010 Nishka K.S Based on MDT 1.17 |
-- | Draft 1C 02-FEB-2010 Nishka K.S Based on MDT 1.18 |
-- | Draft 1D 12-FEB-2010 Nishka K.S Based on MDT 1.19 |
-- | Draft 1E 18-FEB-2010 Nishka K.S Based on MDT 1.20 |
-- | Draft 1F 19-FEB-2010 Nishka K.S Based on MDT 1.21 |
-- | Draft 1G 21-FEB-2010 Nishka K.S Based on MDT 1.22 |
-- | Draft 1H 23-FEB-2010 Nishka K.S Based on MDT 1.23 |
-- +==============================================================================+
gn_conc_req_id NUMBER := FND_GLOBAL.CONC_REQUEST_ID;
PROCEDURE interface_table_summary(x_errbuf OUT VARCHAR2
,x_retcode OUT NUMBER
,p_interface_table IN VARCHAR2
,p_request_id IN NUMBER
,p_total_record_count IN NUMBER)
-- +====================================================================+
-- | Name : interface_table_summary |
-- | |
-- | Description : This procedure is used to produce table data summary |
-- | |
-- | Parameters : p_interface_table IN VARCHAR2 |
-- | p_request_id IN NUMBER |
-- | p_total_record_count IN NUMBER |
-- | |
-- | Returns : None |
-- | |
-- +====================================================================+
IS
lv_stmt VARCHAR2(1500);
ln_error NUMBER := 0;
ln_valid NUMBER := 0;
ln_success NUMBER := 0;
ln_total NUMBER := 0;
ln_process NUMBER := 0;
TYPE lcu_summary_type IS REF CURSOR;
lcu_summary_rec lcu_summary_type;
gn_request_id NUMBER(15) := FND_GLOBAL.CONC_REQUEST_ID;
BEGIN
x_retcode := 0;
ln_total := p_total_record_count;
lv_stmt := 'SELECT count(*) '||
--',SUM(DECODE(record_status,''E'',1,0))'||
--',SUM(DECODE(record_status,''C'',1,0) + DECODE(record_status,''P'',1,0))'||
--',SUM(DECODE(record_status,record_status,1)) '||
' FROM '||p_interface_table||
' WHERE request_id ='||p_request_id||
' AND process_code != ''ACCEPTED''';
OPEN lcu_summary_rec FOR lv_stmt;
LOOP
EXIT WHEN lcu_summary_rec%NOTFOUND;
FETCH lcu_summary_rec INTO ln_error;
END loop;
CLOSE lcu_summary_rec;
--ln_process := ln_success + ln_valid;
FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'=====================================================');
FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'Summary for interim table : '||p_interface_table);
FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'=====================================================');
FND_FILE.PUT_LINE(FND_FILE.OUTPUT,' Records Loaded : '||NVL(ln_total,0));
FND_FILE.PUT_LINE(FND_FILE.OUTPUT,' Records Errored : '||NVL(ln_error,0));
FND_FILE.PUT_LINE(FND_FILE.OUTPUT,' Records Processed : '||NVL((ln_total-ln_error),0));
FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'=====================================================');
IF ln_error = ln_total AND ln_error > 0 THEN
x_errbuf := 'All records have errored';
x_retcode := 2;
ELSIF ln_error > 0 THEN
x_errbuf := 'Some records have errored';
x_retcode := 1;
ELSIF ln_success = ln_total THEN
x_retcode := 0;
END IF;
EXCEPTION
WHEN OTHERS THEN
x_retcode := 2;
x_errbuf := SUBSTR(SQLERRM,1,500);
FND_FILE.PUT_LINE(FND_FILE.OUTPUT, x_errbuf);
END interface_table_summary;
PROCEDURE import_sirf
(p_rec_status IN VARCHAR2
,p_instance_name IN VARCHAR2
,x_errbuf OUT NOCOPY VARCHAR2
,x_retcode OUT NOCOPY NUMBER
,x_header_cnt OUT NOCOPY NUMBER
,x_lines_cnt OUT NOCOPY NUMBER
,x_dist_cnt OUT NOCOPY NUMBER
,x_req_id OUT NOCOPY NUMBER
)
IS
--
CURSOR lcu_po_header_data (pv_rec_status VARCHAR2)
IS
SELECT XHEC.rowid,XHEC.*
FROM xxcsr_po_headers_int XHEC
WHERE XHEC.record_status = pv_rec_status
AND XHEC.request_id = gn_conc_req_id
AND XHEC.source_instance = p_instance_name;
CURSOR lcu_po_lines_data (pv_rec_status VARCHAR2)
IS
SELECT XHEC.rowid,XHEC.*
FROM xxcsr_po_lines_int XHEC
WHERE XHEC.record_status = pv_rec_status
AND XHEC.request_id = gn_conc_req_id
AND XHEC.source_instance = p_instance_name;
CURSOR lcu_po_dist_data (pv_rec_status VARCHAR2)
IS
SELECT XHEC.rowid,XHEC.*
FROM xxcsr_po_distributions_int XHEC
WHERE XHEC.record_status = pv_rec_status
AND XHEC.request_id = gn_conc_req_id
AND XHEC.source_instance = p_instance_name;
CURSOR lcu_chk_currency (pv_currency_code VARCHAR2)
IS
SELECT currency_code
FROM fnd_currencies
WHERE currency_code = pv_currency_code;
CURSOR lcu_item_cat_id (pv_seg1 VARCHAR2,pv_seg2 VARCHAR2,pv_seg3 VARCHAR2,pv_seg4 VARCHAR2,pv_seg5 VARCHAR2)
IS
SELECT category_id
FROM mtl_categories
WHERE segment1 = pv_seg1
AND segment2 = pv_seg2
AND segment3 = pv_seg3
AND segment4 = pv_seg4
AND segment5 = pv_seg5;
CURSOR lcu_get_int_header_id (pv_po_number VARCHAR2)
IS
SELECT interface_header_id
FROM po_headers_interface
WHERE document_num = pv_po_number
ORDER BY 1 DESC;
CURSOR lcu_get_int_line_id (pv_po_number VARCHAR2
,pv_po_line_number VARCHAR2
,p_shipment_num VARCHAR2)
IS
SELECT interface_line_id
FROM po_lines_interface
WHERE document_num = pv_po_number
AND line_num = pv_po_line_number
AND shipment_num = p_shipment_num;
CURSOR lcu_account_id (pv_seg1 VARCHAR2,pv_seg2 VARCHAR2,pv_seg3 VARCHAR2,pv_seg4 VARCHAR2,pv_seg5 VARCHAR2,pv_seg6 VARCHAR2,pv_seg7 VARCHAR2)
IS
SELECT code_combination_id
FROM gl_code_combinations_kfv
WHERE segment1 = pv_seg1
AND segment2 = pv_seg2
AND segment3 = pv_seg3
AND segment4 = pv_seg4
AND segment5 = pv_seg5
AND segment6 = pv_seg6
AND segment7 = pv_seg7;
CURSOR lcu_charge_account_id (p_ship_location NUMBER, p_second_inv VARCHAR2)
IS
SELECT GCC.code_combination_id
FROM gl_code_combinations gcc
,mtl_secondary_inventories msi
,hr_locations hl
WHERE MSI.material_account = GCC.code_combination_id
AND MSI.secondary_inventory_name = p_second_inv
AND MSI.organization_id = HL.inventory_organization_id
AND HL.location_id = p_ship_location;
CURSOR lcu_get_sob_id (pv_sob_name VARCHAR2)
IS
SELECT set_of_books_id
FROM gl_sets_of_books
WHERE name = pv_sob_name;
--sjacob commented below
CURSOR lcu_location_id (pv_loc_code VARCHAR2)
IS
SELECT location_id
FROM hr_locations
WHERE location_code = pv_loc_code;
CURSOR lcu_item_id(p_seg1 IN VARCHAR2
,p_seg2 IN VARCHAR2
,p_inv_org IN VARCHAR2)
IS
SELECT MSIB.inventory_item_id
FROM mtl_system_items_b MSIB
,mtl_parameters MP
WHERE MP.organization_id = MSIB.organization_id
AND MSIB.segment1 = p_seg1
AND NVL(MSIB.segment2,-99) = NVL(p_seg2,-99)
AND MP.organization_code = p_inv_org;
CURSOR lcu_item_attr17(p_seg1 IN VARCHAR2
,p_seg2 IN VARCHAR2)
IS
SELECT MSI.attribute17
FROM mtl_system_items MSI
,mtl_parameters MP
WHERE MP.organization_id = MSI.organization_id
AND MSI.segment1 = p_seg1
AND MP.organization_id = MP.master_organization_id
AND NVL(MSI.segment2,'XX') = NVL(p_seg2,'XX');
/*
CURSOR lcu_vendor_der(p_vendor IN VARCHAR2)
IS
SELECT vendor_id
FROM po_vendors
WHERE attribute15 = p_vendor;
*/
CURSOR lcu_vendor_tsmc(p_vendor IN VARCHAR2)
IS
SELECT vendor_id
FROM po_vendors
WHERE vendor_name = p_vendor;
CURSOR lcu_vendor_der(p_srf_segment1 IN VARCHAR2)
IS
SELECT PV.vendor_id
FROM po_vendors PV
,fnd_lookup_values FLV
WHERE PV.segment1 = FLV.description
AND FLV.meaning = p_srf_segment1
AND PV.enabled_flag = 'Y'
AND SYSDATE BETWEEN NVL(PV.start_date_active,SYSDATE) AND NVL(PV.end_date_active,SYSDATE)
AND SYSDATE BETWEEN NVL(FLV.start_date_active,SYSDATE) AND NVL(FLV.end_date_active,SYSDATE)
AND FLV.enabled_flag = 'Y'
AND FLV.lookup_type = 'XXSIRF_CNV_SUPPLIER_NUMBERS';
CURSOR lcu_hr_loc(p_location_code IN VARCHAR2)
IS
SELECT HLA.location_id
FROM hr_locations_all HLA
WHERE HLA.location_code = p_location_code;
CURSOR lcu_hr_loc_org(p_location_code IN VARCHAR2)
IS
SELECT HLA.location_id
,OOD.organization_code
FROM hr_locations_all HLA
,org_organization_definitions OOD
WHERE HLA.location_code = p_location_code
AND OOD.organization_id = HLA.inventory_organization_id;
CURSOR lcu_ship_po_line(p_po_number IN VARCHAR2
,p_shipment_num IN NUMBER
,p_line_num IN NUMBER)
IS
SELECT ship_to_location
FROM xxcsr_po_lines_int XPLI
WHERE XPLI.po_number = p_po_number
AND XPLI.shipment_num = p_shipment_num
AND XPLI.line_num = p_line_num
AND XPLI.source_instance = p_instance_name;
CURSOR lcu_func_curr(p_org_id IN NUMBER)
IS
SELECT GL.currency_code
FROM hr_operating_units HOU
,gl_ledgers GL
WHERE GL.ledger_id = HOU.set_of_books_id
AND HOU.organization_id = p_org_id;
CURSOR lcu_get_segment2 (pc_item_type VARCHAR2
,pc_org_code VARCHAR2
,pc_product_family VARCHAR2
)
IS
SELECT item_segment2
-- ,bom_check
--,template_name
FROM xxcsr_item_conv_map_int
WHERE item_type = pc_item_type
AND organization_code = pc_org_code
AND product_family = pc_product_family
AND instance_name = 'SIRF'
AND bom_check IS NULL;
CURSOR lcu_po_item_line(p_po_number IN VARCHAR2)
IS
SELECT XPLI.itm_seg1_item_num
,XPLI.attr18
,XPLI.item_type
,XPLI.item_org_name
FROM xxcsr_po_lines_int XPLI
WHERE XPLI.po_number = p_po_number
AND XPLI.itm_seg1_item_num IS NOT NULL
AND XPLI.source_instance = p_instance_name;
CURSOR lcu_get_product_family (pc_seg1 VARCHAR2)
IS
SELECT MSIB.attribute18
FROM mtl_system_items_b MSIB
,org_organization_definitions OOD
WHERE MSIB.organization_id = OOD.organization_id
AND OOD.organization_code = 'CMO'
AND MSIB.segment1 = pc_seg1;
CURSOR lcu_check_lines(p_po_number IN VARCHAR2)
IS
SELECT 1
FROM xxcsr_po_lines_int XPLI
WHERE XPLI.po_number = p_po_number;
CURSOR lcu_prim_uom(p_org_code IN VARCHAR2
,p_item_id IN NUMBER)
IS
SELECT MSIB.primary_unit_of_measure
FROM mtl_system_items_b MSIB
,mtl_parameters MP
WHERE MSIB.inventory_item_id = p_item_id
AND MSIB.organization_id = MP.master_organization_id
AND MP.organization_code = p_org_code;
CURSOR lcu_vendor_site(p_vendor_id IN NUMBER
,p_org_id IN NUMBER)
IS
SELECT POVS.vendor_site_code,POVS.vendor_site_id
FROM po_vendor_sites_all POVS
WHERE POVS.vendor_id = p_vendor_id
AND POVS.org_id = p_org_id;
CURSOR lcu_supsite_attr15(p_doc_num VARCHAR2
,p_lin_num VARCHAR2
,p_shp_num VARCHAR2)
IS
SELECT PVS.attribute15
FROM po_headers_interface PHI
,po_lines_interface PLI
,po_vendor_sites_all PVS
WHERE PHI.interface_header_id = PLI.interface_header_id
AND PHI.vendor_id = PVS.vendor_id
AND PHI.vendor_id = PVS.vendor_id
AND PVS.org_id = PHI.org_id
AND PVS.vendor_site_code = PHI.vendor_site_code
AND PLI.document_num = p_doc_num
AND PLI.line_num = p_lin_num
AND PLI.shipment_num = p_shp_num;
lc_itm_chk_flag VARCHAR2(1);
lr_po_header_data lcu_po_header_data%ROWTYPE;
lr_po_lines_data lcu_po_lines_data%ROWTYPE;
lr_po_dist_data lcu_po_dist_data%ROWTYPE;
lc_errmsg VARCHAR2(2000);
lc_errloc VARCHAR2(1000);
ln_request_id NUMBER;
lc_phase VARCHAR2(500);
lc_status VARCHAR2(500);
lc_devpha VARCHAR2(500);
lc_devsta VARCHAR2(500);
lc_mesg VARCHAR2(50);
lb_wait BOOLEAN;
ln_org_id NUMBER;
ln_item_org_id NUMBER;
ln_agent_id NUMBER;
lc_currency_code VARCHAR2(15);
ln_vendor_id NUMBER;
lc_payment_terms VARCHAR2(50);
lc_freight_terms VARCHAR2(25);
ln_item_id NUMBER;
lc_item_seg2 VARCHAR2(40);
lc_cat_seg1 VARCHAR2(40);
lc_cat_seg2 VARCHAR2(40);
lc_cat_seg3 VARCHAR2(40);
lc_cat_seg4 VARCHAR2(40);
lc_cat_seg5 VARCHAR2(40);
lc_inv_org_code VARCHAR2(30);
ln_cat_id NUMBER;
ln_po_int_header_id NUMBER;
ln_po_int_line_id NUMBER;
ln_tax_code_id NUMBER;
ln_charge_acct_id NUMBER;
ln_budget_acct_id NUMBER;
ln_accrual_acct_id NUMBER;
ln_variance_acct_id NUMBER;
ln_sob_id NUMBER;
ln_location_id NUMBER;
ln_person_org_id NUMBER;
ln_person_id NUMBER;
ln_bu_id NUMBER;
lc_chr_acc_seg1 VARCHAR2(40);
lc_chr_acc_seg2 VARCHAR2(40);
lc_chr_acc_seg3 VARCHAR2(40);
lc_chr_acc_seg4 VARCHAR2(40);
lc_chr_acc_seg5 VARCHAR2(40);
lc_chr_acc_seg6 VARCHAR2(40);
lc_chr_acc_seg7 VARCHAR2(40);
lc_bud_acc_seg1 VARCHAR2(40);
lc_bud_acc_seg2 VARCHAR2(40);
lc_bud_acc_seg3 VARCHAR2(40);
lc_bud_acc_seg4 VARCHAR2(40);
lc_bud_acc_seg5 VARCHAR2(40);
lc_bud_acc_seg6 VARCHAR2(40);
lc_bud_acc_seg7 VARCHAR2(40);
lc_accr_acc_seg1 VARCHAR2(40);
lc_accr_acc_seg2 VARCHAR2(40);
lc_accr_acc_seg3 VARCHAR2(40);
lc_accr_acc_seg4 VARCHAR2(40);
lc_accr_acc_seg5 VARCHAR2(40);
lc_accr_acc_seg6 VARCHAR2(40);
lc_accr_acc_seg7 VARCHAR2(40);
lc_var_acc_seg1 VARCHAR2(40);
lc_var_acc_seg2 VARCHAR2(40);
lc_var_acc_seg3 VARCHAR2(40);
lc_var_acc_seg4 VARCHAR2(40);
lc_var_acc_seg5 VARCHAR2(40);
lc_var_acc_seg6 VARCHAR2(40);
lc_var_acc_seg7 VARCHAR2(40);
lc_seg3_value VARCHAR2(40);
lc_seg5_value VARCHAR2(40);
lb_success BOOLEAN;
lc_error_details VARCHAR2(4000);
lc_error VARCHAR2(4000);
lc_errbuf VARCHAR2(240);
ln_retcode NUMBER;
ln_header_cnt NUMBER;
ln_lines_cnt NUMBER;
ln_dist_cnt NUMBER;
ln_cur_org_id NUMBER;
lc_new_orgname VARCHAR2(240);
lc_item_segment2 VARCHAR2(40);
lc_new_glacct VARCHAR2(240);
lc_new_cat VARCHAR2(2000);
lc_new_del VARCHAR2(240);
lc_new_org_name VARCHAR2(270);
lc_new_sobname VARCHAR2(270);
lc_business_group VARCHAR2(270);
ln_bill_loc_id NUMBER;
ln_ship_loc_id NUMBER;
lc_inv_po_chk VARCHAR2(270);
lc_func_curr VARCHAR2(15);
lc_rate_type VARCHAR2(30);
ln_rate NUMBER;
lc_vendor_site_id NUMBER;
ld_rate_date DATE;
lc_new_ship VARCHAR2(240);
lc_new_bill VARCHAR2(240);
--lc_vendor_csr VARCHAR2(240);
lc_product_family VARCHAR2(240);
lc_line_exists VARCHAR2(1);
lc_vendor_site_code VARCHAR2(150);
lc_primary_uom VARCHAR2(25);
lc_line_ship_loc VARCHAR2(60);
lc_ship_org VARCHAR2(3);
lc_item_attr17 VARCHAR2(50);
lc_ship_via_lookup_code VARCHAR2(25);
ex_conc_error EXCEPTION;
--
BEGIN
ln_header_cnt := 0;
--Process Purchase Orders data
lc_errloc := 'Process purchase orders data';
FOR lr_po_header_data IN lcu_po_header_data (p_rec_status) LOOP
ln_org_id := NULL;
ln_agent_id := NULL;
ln_bu_id := NULL;
lc_currency_code := NULL;
ln_vendor_id := NULL;
lc_payment_terms := NULL;
lc_freight_terms := NULL;
lc_error_details := NULL;
lc_new_orgname := NULL;
lc_business_group := NULL;
ln_bill_loc_id := NULL;
ln_ship_loc_id := NULL;
lc_inv_po_chk := NULL;
lc_func_curr := NULL;
lc_rate_type := NULL;
ln_rate := NULL;
ld_rate_date := NULL;
lc_new_ship := NULL;
lc_new_bill := NULL;
--lc_vendor_csr := NULL;
lc_line_exists := NULL;
lc_vendor_site_code := NULL;
lc_vendor_site_id := NULL;
-- check if lines exist for this PO
OPEN lcu_check_lines(lr_po_header_data.po_number);
FETCH lcu_check_lines
INTO lc_line_exists;
CLOSE lcu_check_lines;
IF lc_line_exists IS NULL THEN
lc_error_details := lc_error_details||'No lines were found in the staging table for the given PO. ';
END IF;
lc_errloc := 'Operating unit related derivations';
lc_new_orgname := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_OPERATING_UNIT'
,'XXSIRF_CNV_OPERATING_UNIT'
,lr_po_header_data.operating_unit
);
IF lc_new_orgname IS NULL THEN
lc_error_details := lc_error_details||'Could not derive new operating unit for '||lr_po_header_data.operating_unit||'. ';
ELSE
ln_org_id := XXCSR_COMMON_PKG.get_organization_id(lc_new_orgname);
IF ln_org_id IS NULL THEN
lc_error_details := lc_error_details||'Could not derive org id for new operating unit '||lc_new_orgname||'. ';
ELSE
-- Compare functional and document currency
OPEN lcu_func_curr(ln_org_id);
FETCH lcu_func_curr
INTO lc_func_curr;
CLOSE lcu_func_curr;
IF lc_func_curr = lr_po_header_data.currency_code THEN
lc_rate_type := NULL;
ln_rate := NULL;
ld_rate_date := NULL;
ELSE
lc_rate_type := lr_po_header_data.rate_type;
ln_rate := lr_po_header_data.rate;
ld_rate_date := lr_po_header_data.rate_date;
END IF;
END IF;
END IF;
lc_errloc := 'Checking for inventory purchase orders';
lc_inv_po_chk := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_INV_SUPPLIERS'
,'XXSIRF_CNV_INV_SUPPLIERS'
,lr_po_header_data.vendor_name
);
IF lc_inv_po_chk IS NULL THEN
lc_error_details := lc_error_details||'Only inventory purchase orders will be migrated';
END IF;
IF lr_po_header_data.emp_bu_name IN ( 'CSR United States','CSR United Kingdom') THEN
lc_business_group := lr_po_header_data.emp_bu_name;
ELSE
lc_business_group := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_HR_BG'
,'XXSIRF_CNV_HR_BG'
,lr_po_header_data.emp_bu_name
);
END IF;
IF lc_business_group IS NULL THEN
lc_error_details := lc_error_details||'Mapping for Business Group '||lr_po_header_data.emp_bu_name||' could not be found. ';
ELSE
ln_bu_id := XXCSR_COMMON_PKG.get_business_group_id(lc_business_group);
IF ln_bu_id IS NULL THEN
lc_error_details:= lc_error_details||' Business Group ID for '||lc_business_group||' could not be derived. ';
ELSE
--Derive agent id
lc_errloc := 'Derive agent id';
ln_agent_id := XXCSR_COMMON_PKG.get_person_id (p_first_name => lr_po_header_data.emp_fname
,p_last_name => lr_po_header_data.emp_lname
,p_date_of_birth => lr_po_header_data.emp_dob
,p_business_group_id => ln_bu_id
);
IF ln_agent_id IS NULL THEN
lc_error_details := lc_error_details || ' Invalid agent (employee) details.';
END IF;
END IF;
END IF;
--Check currency code
lc_errloc := 'Check currency code';
OPEN lcu_chk_currency (lr_po_header_data.currency_code);
FETCH lcu_chk_currency
INTO lc_currency_code;
IF lcu_chk_currency%NOTFOUND THEN
lc_error_details := lc_error_details || ' Invalid currency code.';
END IF;
CLOSE lcu_chk_currency;
--Derive vendor id
lc_errloc := 'Derive vendor id';
IF lr_po_header_data.vendor_name_actual <> 'TSMC Ltd.' THEN
/*
lc_vendor_csr := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'NULL'
,p_sirf_lookup => 'XXSIRF_CNV_SUPPLIER_NUMBERS'
,p_old_value => lr_po_header_data.vendor_name
);
*/
IF lr_po_header_data.vendor_name IS NOT NULL THEN
OPEN lcu_vendor_der(lr_po_header_data.vendor_name);
FETCH lcu_vendor_der
INTO ln_vendor_id;
CLOSE lcu_vendor_der;
IF ln_vendor_id IS NULL THEN
lc_error_details := lc_error_details || ' Vendor not migrated.';
ELSE
OPEN lcu_vendor_site(ln_vendor_id,ln_org_id);
FETCH lcu_vendor_site INTO lc_vendor_site_code,lc_vendor_site_id;
CLOSE lcu_vendor_site;
IF lc_vendor_site_code IS NULL THEN
lc_error_details := lc_error_details || ' Vendor site code not found for vendor '||lr_po_header_data.vendor_name ||'. ';
END IF;
END IF;
END IF;
ELSE
OPEN lcu_vendor_tsmc('TAIWAN SEMICONDUCTOR MANUFACTURING CO LTD');
FETCH lcu_vendor_tsmc
INTO ln_vendor_id;
CLOSE lcu_vendor_tsmc;
IF ln_vendor_id IS NULL THEN
lc_error_details := lc_error_details || ' Vendor not migrated.';
END IF;
lc_vendor_site_code := 'ROC';
END IF;
lc_errloc := 'Check payment terms';
IF lr_po_header_data.payment_terms IS NOT NULL THEN
lc_payment_terms := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_SUPPLIER_PAYTERMS'
,p_sirf_lookup => 'XXSIRF_CNV_SUPPLIER_PAYTERMS'
,p_old_value => lr_po_header_data.payment_terms
);
IF lc_payment_terms IS NULL THEN
lc_error_details := lc_error_details || ' Invalid payment terms.';
END IF;
END IF;
--Check freight terms
lc_errloc := 'Check freight terms';
IF lr_po_header_data.freight_terms IS NOT NULL THEN
lc_freight_terms := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_FREIGHT_TERMS'
,p_sirf_lookup => 'XXSIRF_CNV_FREIGHT_TERMS'
,p_old_value => lr_po_header_data.freight_terms
);
IF lc_freight_tebms IS NULL THEN
lc_error_details := lc_error_details || ' Invalid freight terms.';
END IF;
END IF;
 { IF lr_po_header_data.ship_to_location IS NOT NULL THEN
lc_new_ship := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
&nbcp; &nbst; ,'XXCSR_CNV_DELIVER_LOCATIONS'
,'XXSIRF_CNV_DELIVER_LOCATIONS'
,lr_po_header_data.ship_to_location
);
IF lc_new_ship IS NULL THEN
lc_error_details := lc_error_details||'Could not derive new ship to location for '||lr_po_header_data.ship_to_location||' in XXSIRF_CNV_DELIVER_LOCATIONS. ';
ELSE
OPEN lcu_hr_loc(lc_new_ship);
FETCH lcu_hr_loc
INTO ln_ship_loc_id;
CLOSE lcu_hr_loc;
IF ln_ship_loc_id IS NULL THEN
lc_error_details := lc_error_details || 'Ship to location id could not be derived for '||lr_po_header_data.ship_to_location;
END IF;
END IF;
END IF;
IF lr_po_header_data.bill_to_location IS NOT NULL THEN
lc_new_bill := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_BILLTO_LOCATIONS'
,'XXSIRF_CNV_BILLTO_LOCATIONS'
,lr_po_header_data.bill_to_location
);
IF lc_new_bill IS NULL THEN
lc_error_details := lc_error_details||'Could not derive new bill to location for '||lr_po_header_data.bill_to_location||' in XXSIRF_CNV_BILLTO_LOCATIONS. ';
ELSE
OPEN lcu_hr_loc(lc_new_bill);
FETCH lcu_hr_loc
INTO ln_bill_loc_id;
CLOSE lcu_hr_loc;
IF ln_bill_loc_id IS NULL THEN
lc_error_details := lc_error_details || 'Bill to location id could not be derived for '||lr_po_header_data.bill_to_location;
END IF;
END IF;
END IF;
lc_ship_via_lookup_code := NULL;
IF lr_po_header_data.ship_via_lookup_code IS NOT NULL THEN
lc_ship_via_lookup_code := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_FREIGHT_CARRIER'
,'XXCSR_CNV_FREIGHT_CARRIER'
,lr_po_header_data.ship_via_lookup_code
);
END IF;
IF lc_error_details IS NULL THEN
--Insert purchase order header data in interface table
lc_errloc := 'Insert purchase order header data in interface table';
INSERT INTO po_headers_interface
(interface_header_id
,batch_id
,interface_source_code
,action
,process_code
,org_id
,document_type_code
,currency_code
,rate_type
,rate_date
,rate
,agent_id
,vendor_id
,vendor_site_code
,vendor_site_id
,ship_to_location_id
,bill_to_location_id
,payment_terms
,freight_terms
,approval_status
,approved_date
-- ,revised_date
-- ,revision_num
,confirming_order_flag
,comments
,acceptance_required_flag
,print_count
-- ,printed_date
,frozen_flag
,closed_code
,from_rfq_num
,from_type_lookup_code
,attribute_category
--,attribute1
-- ,attribute2
-- ,attribute3
--,global_attribute1
,pay_on_code
,last_update_date
,last_updated_by
,creation_date
,created_by
,document_num
,freight_carrier
)
VALUES
(po_headers_interface_s.nextval
,1
,'XXSIRF Conversion'
,'ORIGINAL'
,'PENDING'
,ln_org_id
,'STANDARD' -- lr_po_header_data.document_type_code
,lr_po_header_data.currency_code
,DECODE(lc_rate_type,'Corporate','User',lc_rate_type)
,ld_rate_date
,ln_rate
,ln_agent_id
,ln_vendor_id
,lc_vendor_site_code -- lr_po_header_data.vendor_site_code
,lc_vendor_site_id
,ln_ship_loc_id -- lr_po_header_data.ship_to_location
,ln_bill_loc_id -- lr_po_header_data.bill_to_location
,lc_payment_terms
,lc_freight_terms
,DECODE(lr_po_header_data.approval_status,'REQUIRES REAPPROVAL','INCOMPLETE',lr_po_header_data.approval_status)
,lr_po_header_data.approved_date
-- ,lr_po_header_data.revised_date
-- ,lr_po_header_data.revision_num
,lr_po_header_data.confirming_order_flag
,lr_po_header_data.comments
,lr_po_header_data.acceptance_required_flag
--,DECODE(lr_po_header_data.approval_status,'APPROVED',lr_po_header_data.print_count,0)
,DECODE(lr_po_header_data.approval_status,'APPROVED',1,0)
-- ,lr_po_header_data.printed_date
,lr_po_header_data.frozen_flag
,lr_po_header_data.closed_code
,lr_po_header_data.from_requisition_num
,lr_po_header_data.from_type_lookup_code
,lr_po_header_data.attribute_category
--,lr_po_header_data.sourcing_rule
-- ,lr_po_header_data.osp_flag
--,lr_po_header_data.mrp_flag
--,lr_po_header_data.po_total_plus_ipi_tax
,lr_po_header_data.pay_on_code
,SYSDATE
,fnd_global.user_id
,SYSDATE
,fnd_global.user_id
,lr_po_header_data.po_number
,lc_ship_via_lookup_code
);
UPDATE xxcsr_po_headers_int
SET record_status = 'C'
,request_id = FND_GLOBAL.conc_request_id
,error_message = NULL
WHERE rowid = lr_po_header_data.rowid;
COMMIT;
ln_header_cnt := ln_header_cnt + 1;
ELSE
UPDATE xxcsr_po_headers_int
SET record_status = 'E'
,request_id = FND_GLOBAL.conc_request_id
,error_message = lc_error_details
WHERE rowid = lr_po_header_data.rowid;
END IF; --lc_error_details IS NULL
COMMIT;
END LOOP;
COMMIT;
ln_lines_cnt := 0;
--Process Purchase Order Lines data
lc_errloc := 'Process purchase order lines data';
FOR lr_po_lines_data IN lcu_po_lines_data (p_rec_status)
LOOP
ln_org_id := NULL;
ln_item_org_id := NULL;
ln_item_id := NULL;
lc_item_seg2 := NULL;
lc_cat_seg1 := NULL;
lc_cat_seg2 := NULL;
lc_cat_seg3 := NULL;
lc_cat_seg4 := NULL;
lc_cat_seg5 := NULL;
ln_cat_id := NULL;
ln_po_int_header_id := NULL;
ln_tax_code_id := NULL;
lc_error_details := NULL;
lc_new_orgname := NULL;
lc_item_segment2 := NULL;
lc_new_glacct := NULL;
lc_new_cat := NULL;
lc_new_ship := NULL;
ln_ship_loc_id := NULL;
lc_new_org_name := NULL;
lc_primary_uom := NULL;
--Derive interface header id
lc_errloc := 'Derive interface header id';
OPEN lcu_get_int_header_id (lr_po_lines_data.po_number);
FETCH lcu_get_int_header_id
INTO ln_po_int_header_id;
CLOSE lcu_get_int_header_id;
IF ln_po_int_header_id IS NULL THEN
lc_error_details := lc_error_details || 'Could not derive interface header id. Header record may have error. ';
END IF;
FND_FILE.PUT_LINE(FND_FILE.LOG,'ln_po_int_header_id : ' || ln_po_int_header_id);
lc_errloc := 'Operating unit related derivations';
lc_new_orgname := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_OPERATING_UNIT'
,'XXSIRF_CNV_OPERATING_UNIT'
,lr_po_lines_data.org_name
);
IF lc_new_orgname IS NULL THEN
lc_error_details := lc_error_details||'Could not derive new operating unit for '||lr_po_lines_data.org_name||'. ';
ELSE
ln_org_id := XXCSR_COMMON_PKG.get_organization_id(lc_new_orgname);
IF ln_org_id IS NULL THEN
lc_error_details := lc_error_details||'Could not derive org id for new operating unit '||lc_new_orgname||'. ';
END IF;
END IF;
IF lr_po_lines_data.ship_to_location IS NOT NULL THEN
lc_new_ship := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_DELIVER_LOCATIONS'
,'XXSIRF_CNV_DELIVER_LOCATIONS'
,lr_po_lines_data.ship_to_location
);
IF lc_new_ship IS NULL THEN
lc_error_details := lc_error_details||'Could not derive new ship to location for '||lr_po_lines_data.ship_to_location||' in XXSIRF_CNV_DELIVER_LOCATIONS. ';
ELSE
OPEN lcu_hr_loc(lc_new_ship);
FETCH lcu_hr_loc
INTO ln_ship_loc_id;
CLOSE lcu_hr_loc;
IF ln_ship_loc_id IS NULL THEN
lc_error_details := lc_error_details || 'Ship to location id could not be derived for '||lr_po_lines_data.ship_to_location;
END IF;
END IF;
END IF;
IF lr_po_lines_data.ship_to_org IS NOT NULL THEN
lc_new_org_name := XXCSR_COMMON_PKG.get_organization_code (p_instance_name
,lr_po_lines_data.ship_to_org);
IF lc_new_org_name IS NULL THEN
lc_error_details := lc_error_details||'Mapping for organization '||lr_po_lines_data.ship_to_org||' not found in the table XXCSR_CNV_ORG_MAPPINGS. ';
END IF;
END IF;
lc_product_family := NULL;
-- IF lr_po_lines_data.itm_seg1_item_num IS NOT NULL THEN
lc_errloc := 'Derive inventory item id';
IF lr_po_lines_data.attr18 IS NULL THEN
OPEN lcu_get_product_family (lr_po_lines_data.itm_seg1_item_num);
FETCH lcu_get_product_family
INTO lc_product_family;
CLOSE lcu_get_product_family;
ELSE
lc_product_family := lr_po_lines_data.attr18;
END IF;
/*
OPEN lcu_get_segment2 (lr_po_lines_data.item_type
,lr_po_lines_data.item_org_name
,lc_product_family
);
FETCH lcu_get_segment2
INTO lc_item_segment2;
CLOSE lcu_get_segment2;
*/
IF lr_po_lines_data.item_type = 'DIE' THEN
lc_item_segment2 := 'PD';
ELSIF lr_po_lines_data.item_type = 'HYBRID' THEN
lc_item_segment2 := 'HY';
ELSIF lr_po_lines_data.item_type = 'SORTED-DIE' THEN
lc_item_segment2 := 'DI';
ELSIF lr_po_lines_data.item_type = 'WAFER' THEN
lc_item_segment2 := 'UW';
ELSIF lr_po_lines_data.item_type = 'SORTED-WAFER' THEN
lc_item_segment2 := 'WF';
ELSE
lc_item_segment2 := NULL;
END IF;
ln_item_id := NULL;
OPEN lcu_item_id(lr_po_lines_data.itm_seg1_item_num
,lc_item_segment2
,lc_new_org_name);
--,lr_po_lines_data.item_org_name);
FETCH lcu_item_id INTO ln_item_id;
CLOSE lcu_item_id;
IF ln_item_id IS NULL THEN
lc_error_details := lc_error_details || ' Inventory Item Not found - '|| NVL(lc_item_attr17,lr_po_lines_data.itm_seg1_item_num)||'.';
ELSE
-- DERIVE primary UOM for master item
IF lc_new_org_name IS NOT NULL THEN
OPEN lcu_prim_uom(lc_new_org_name
,ln_item_id);
FETCH lcu_prim_uom
INTO lc_primary_uom;
CLOSE lcu_prim_uom;
IF lc_primary_uom IS NULL THEN
lc_error_details := lc_error_details || 'Primary UOM code for the master item could not be derived';
END IF;
END IF;
END IF;
-- END IF;
lc_errloc := 'Derive new GL account';
lc_new_cat := 'INVENTORY.';
IF lr_po_lines_data.inventory_item_flag = 'N' THEN
UPDATE xxcsr_po_distributions_int
SET destination_type_code = 'EXPENSE'
WHERE po_number = lr_po_lines_data.po_number
AND po_line_number = lr_po_lines_data.line_num
AND shipment_num = lr_po_lines_data.shipment_num
AND source_instance = p_instance_name;
ELSE
UPDATE xxcsr_po_distributions_int
SET destination_type_code = 'INVENTORY'
WHERE po_number = lr_po_lines_data.po_number
AND po_line_number = lr_po_lines_data.line_num
AND shipment_num = lr_po_lines_data.shipment_num
AND source_instance = p_instance_name;
END IF;
IF lc_error_details IS NULL THEN
--Insert purchase order lines data in interface table
lc_errloc := 'Insert purchase order lines data in interface table';
FND_FILE.PUT_LINE(FND_FILE.LOG,'Inserting in lines');
INSERT INTO po_lines_interface
(interface_line_id
,interface_header_id
,action
,process_code
,document_num
,line_num
,organization_id
,shipment_num
,shipment_type
,contract_num
,line_type
,item_id
,category
,item_description
,vendor_product_num
,unit_of_measure
,quantity
,unit_price
,list_price_per_unit
,allow_price_override_flag
,negotiated_by_preparer_flag
,note_to_vendor
,taxable_flag
-- ,tax_name
,type_1099
,capital_expense_flag
,price_type
,closed_code
,closed_reason
,closed_date
,closed_by
,over_tolerance_error_flag
,line_attribute_category_lines
-- ,line_attribute1
-- ,line_attribute2
-- ,line_attribute3
-- ,line_attribute4
-- ,line_attribute5
-- ,line_attribute6
-- ,line_attribute7
-- ,line_attribute8
-- ,line_attribute9
--,global_attribute1
-- ,tax_code_id
,secondary_unit_of_measure
,secondary_quantity
,inspection_required_flag
,receipt_required_flag
,invoice_close_tolerance
,receive_close_tolerance
,need_by_date
,promised_date
,consigned_flag
,base_unit_price
,last_update_date
,last_updated_by
,creation_date
,created_by
,ship_to_location_id
,ship_to_organization_code
)
VALUES
(po_lines_interface_s.nextval
,ln_po_int_header_id
,'ORIGINAL'
,'PENDING'
,lr_po_lines_data.po_number
,lr_po_lines_data.line_num
,ln_org_id
,lr_po_lines_data.shipment_num
,lr_po_lines_data.shipment_type
,lr_po_lines_data.contract_num
,lr_po_lines_data.line_type
,ln_item_id
,lc_new_cat
,lr_po_lines_data.item_description
,lr_po_lines_data.vendor_product_num
,lc_primary_uom -- lr_po_lines_data.unit_of_measure
,lr_po_lines_data.quantity
,lr_po_lines_data.unit_price
,lr_po_lines_data.list_price_per_unit
,lr_po_lines_data.allow_price_override_flag
,lr_po_lines_data.negotiated_by_preparer_flag
,lr_po_lines_data.note_to_vendor
,lr_po_lines_data.taxable_flag
-- ,lr_po_lines_data.tax_name
,lr_po_lines_data.type_1099
,lr_po_lines_data.capital_expense_flag
,lr_po_lines_data.price_type
,lr_po_lines_data.closed_code
,lr_po_lines_data.closed_reason
,lr_po_lines_data.closed_date
,lr_po_lines_data.closed_by
,lr_po_lines_data.over_tolerance_error_flag
,lr_po_lines_data.line_attribute_category_lines
-- ,lr_po_lines_data.att1_item_number
-- ,lr_po_lines_data.att2_manufacturer
-- ,lr_po_lines_data.att3_manufacturer_part_no
-- ,lr_po_lines_data.att4_vendor_name
-- ,lr_po_lines_data.att5_last_po_price
-- ,lr_po_lines_data.att6_last_transaction_qty
-- ,lr_po_lines_data.att7_last_vendor_name
-- ,lr_po_lines_data.att8_item_id
-- ,lr_po_lines_data.att9_vendor_name
--,lr_po_lines_data.fisc_classification_code
-- ,ln_tax_code_id commented as per R04
,lr_po_lines_data.secondary_unit_of_measure
,lr_po_lines_data.secondary_quantity
,lr_po_lines_data.inspection_required_flag
,lr_po_lines_data.receipt_required_flag
,lr_po_lines_data.invoice_close_tolerance
,lr_po_lines_data.receive_close_tolerance
,lr_po_lines_data.need_by_date
,lr_po_lines_data.promised_date
,lr_po_lines_data.consigned_flag
,lr_po_lines_data.base_unit_price
,SYSDATE
,fnd_global.user_id
,SYSDATE
,fnd_global.user_id
,ln_ship_loc_id
,lc_new_org_name
);
UPDATE xxcsr_po_lines_int
SET record_status = 'C'
,request_id = FND_GLOBAL.conc_request_id
,error_message = NULL
WHERE rowid = lr_po_lines_data.rowid;
COMMIT;
ln_lines_cnt := ln_lines_cnt + 1;
ELSE
UPDATE xxcsr_po_lines_int
SET record_status = 'E'
,request_id = FND_GLOBAL.conc_request_id
,error_message = lc_error_details
WHERE rowid = lr_po_lines_data.rowid;
IF ln_po_int_header_id IS NOT NULL THEN
UPDATE xxcsr_po_headers_int
SET record_status = 'E'
,error_message = error_message||'error in lines record'
WHERE po_number = lr_po_lines_data.po_number
AND source_instance = p_instance_name;
DELETE FROM po_headers_interface
WHERE interface_header_id = ln_po_int_header_id;
ln_header_cnt := ln_header_cnt - 1;
END IF;
END IF; --lc_error_details IS NULL
COMMIT;
END LOOP;
COMMIT;
ln_dist_cnt := 0;
--Process Purchase Order distributions data
lc_errloc := 'Process purchase order distributions data';
FOR lr_po_dist_data IN lcu_po_dist_data (p_rec_status)
LOOP
ln_org_id := NULL;
ln_sob_id := NULL;
ln_location_id := NULL;
lc_inv_org_code := NULL;
ln_person_org_id := NULL;
ln_person_id := NULL;
lc_error_details := NULL;
lc_new_orgname := NULL;
lc_new_del := NULL;
lc_new_org_name := NULL;
lc_new_sobname := NULL;
ln_po_int_line_id := NULL;
ln_po_int_header_id := NULL;
lc_business_group := NULL;
ln_bu_id := NULL;
lc_chr_acc_seg1 := NULL;
lc_chr_acc_seg2 := NULL;
lc_chr_acc_seg3 := NULL;
lc_chr_acc_seg4 := NULL;
lc_chr_acc_seg5 := NULL;
lc_chr_acc_seg6 := NULL;
lc_chr_acc_seg7 := NULL;
lc_bud_acc_seg1 := NULL;
lc_bud_acc_seg2 := NULL;
lc_bud_acc_seg3 := NULL;
lc_bud_acc_seg4 := NULL;
lc_bud_acc_seg5 := NULL;
lc_bud_acc_seg6 := NULL;
lc_bud_acc_seg7 := NULL;
lc_accr_acc_seg1 := NULL;
lc_accr_acc_seg2 := NULL;
lc_accr_acc_seg3 := NULL;
lc_accr_acc_seg4 := NULL;
lc_accr_acc_seg5 := NULL;
lc_accr_acc_seg6 := NULL;
lc_accr_acc_seg7 := NULL;
lc_var_acc_seg1 := NULL;
lc_var_acc_seg2 := NULL;
lc_var_acc_seg3 := NULL;
lc_var_acc_seg4 := NULL;
lc_var_acc_seg5 := NULL;
lc_var_acc_seg6 := NULL;
lc_var_acc_seg7 := NULL;
ln_charge_acct_id := NULL;
ln_budget_acct_id := NULL;
ln_accrual_acct_id := NULL;
ln_variance_acct_id := NULL;
lc_seg3_value := NULL;
lc_seg5_value := NULL;
--Derive interface header id
lc_errloc := 'Derive interface header id';
OPEN lcu_get_int_header_id (lr_po_dist_data.po_number);
FETCH lcu_get_int_header_id
INTO ln_po_int_header_id;
CLOSE lcu_get_int_header_id;
IF ln_po_int_header_id IS NULL THEN
lc_error_details := lc_error_details || 'Could not derive interface header id. Header record may have error. ';
END IF;
--Derive interface line id
lc_errloc := 'Derive interface line id';
OPEN lcu_get_int_line_id (lr_po_dist_data.po_number
,lr_po_dist_data.po_line_number
,lr_po_dist_data.shipment_num);
FETCH lcu_get_int_line_id
INTO ln_po_int_line_id;
CLOSE lcu_get_int_line_id;
IF ln_po_int_line_id IS NULL THEN
lc_error_details := lc_error_details || 'Could not derive interface line id. Header/Line record may have error. ';
END IF;
lc_errloc := 'Operating unit related derivations';
lc_new_orgname := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_OPERATING_UNIT'
,'XXSIRF_CNV_OPERATING_UNIT'
,lr_po_dist_data.org_name
);
IF lc_new_orgname IS NULL THEN
lc_error_details := lc_error_details||'Could not derive new operating unit for '||lr_po_dist_data.org_name||'. ';
ELSE
ln_org_id := XXCSR_COMMON_PKG.get_organization_id(lc_new_orgname);
IF ln_org_id IS NULL THEN
lc_error_details := lc_error_details||'Could not derive org id for new operating unit '||lc_new_orgname||'. ';
END IF;
END IF;
--Derive sob id
lc_new_sobname := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_SOB_NAME'
,'XXSIRF_CNV_SOB_NAME'
,lr_po_dist_data.set_of_books
);
IF lc_new_sobname IS NULL THEN
lc_error_details := lc_error_details||'Could not derive new sob for '||lr_po_dist_data.set_of_books||' in XXSIRF_CNV_SOB_NAME. ';
ELSE
lc_errloc := 'Derive sob id';
OPEN lcu_get_sob_id (lc_new_sobname);
FETCH lcu_get_sob_id
INTO ln_sob_id;
CLOSE lcu_get_sob_id;
IF ln_sob_id IS NULL THEN
lc_error_details := lc_error_details || ' Invalid sets of books name- '||lc_new_sobname;
END IF;
END IF;
IF lr_po_dist_data.deliver_to_location IS NOT NULL THEN
lc_new_del := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_DELIVER_LOCATIONS'
,'XXSIRF_CNV_DELIVER_LOCATIONS'
,lr_po_dist_data.deliver_to_location
);
IF lc_new_del IS NULL THEN
lc_error_details := lc_error_details||'Could not derive new deliver to location for '||lr_po_dist_data.deliver_to_location||' in XXSIRF_CNV_DELIVER_LOCATIONS. ';
ELSE
--Derive deliver to location id
lc_errloc := 'Derive deliver to location id';
OPEN lcu_location_id (lc_new_del);
FETCH lcu_location_id
INTO ln_location_id;
CLOSE lcu_location_id;
IF ln_location_id IS NULL THEN
lc_error_details := lc_error_details || ' Invalid deliver to location code.';
END IF;
END IF;
END IF;
IF lr_po_dist_data.destination_organization IS NOT NULL THEN
lc_new_org_name := XXCSR_COMMON_PKG.get_organization_code (p_instance_name
,lr_po_dist_data.destination_organization);
IF lc_new_org_name IS NULL THEN
lc_error_details := lc_error_details||'Mapping for organization '||lr_po_dist_data.destination_organization||' not found in the table XXCSR_CNV_ORG_MAPPINGS. ';
END IF;
END IF;
--Derive deliver to person id
IF lr_po_dist_data.delv_per_fname IS NOT NULL THEN
lc_business_group := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_HR_BG'
,'XXSIRF_CNV_HR_BG'
,lr_po_dist_data.delv_per_org_name
);
IF lc_business_group IS NULL THEN
lc_error_details := lc_error_details||'Mapping for Business Group '||lr_po_dist_data.delv_per_org_name||' could not be found. ';
ELSE
ln_bu_id := XXCSR_COMMON_PKG.get_business_group_id(lc_business_group);
IF ln_bu_id IS NULL THEN
lc_error_details:= lc_error_details||' Business Group ID for '||lc_business_group||' could not be derived. ';
--Derive deliver to person id
lc_errloc := 'Derive deliver to person id';
ln_person_id := XXCSR_COMMON_PKG.get_person_id (p_first_name => lr_po_dist_data.delv_per_fname
,p_last_name => lr_po_dist_data.delv_per_lname
,p_date_of_birth => lr_po_dist_data.delv_per_dob
,p_business_group_id => ln_bu_id
);
IF ln_person_id IS NULL THEN
lc_error_details := lc_error_details || ' Invalid agent (employee) details.';
END IF;
END IF;
END IF;
END IF;
--BUDGET ACCOUNT
--Derive budget account segment1 from lookup
lc_errloc := 'Derive budget account segment1 from lookup';
lc_bud_acc_seg1 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_COMPANY'
,p_sirf_lookup => 'XXSIRF_CNV_GL_COMPANY'
,p_old_value => lr_po_dist_data.bud_acc_seg1
);
--Derive budget account segment2 from lookup
lc_errloc := 'Derive budget account segment2 from lookup';
lc_bud_acc_seg2 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_ACCOUNT'
,p_sirf_lookup => 'XXSIRF_CNV_GL_ACCOUNT'
,p_old_value => lr_po_dist_data.bud_acc_seg2
);
--Derive budget account segment3 from lookup
lc_errloc := 'Derive budget account segment3 from lookup';
lc_bud_acc_seg3 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_BU'
,p_sirf_lookup => 'XXSIRF_CNV_GL_BU'
,p_old_value => lr_po_dist_data.bud_acc_seg3
);
--Derive budget account segment4 from lookup
lc_errloc := 'Derive budget account segment4 from lookup';
lc_bud_acc_seg4 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_DEPARTMENT'
,p_sirf_lookup => 'XXSIRF_CNV_GL_DEPARTMENT'
,p_old_value => lr_po_dist_data.bud_acc_seg4
);
--Derive budget account segment5 from lookup
lc_errloc := 'Derive budget account segment5 from lookup';
lc_bud_acc_seg5 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_PRODPROJ'
,p_sirf_lookup => 'XXSIRF_CNV_GL_PRODPROJ'
,p_old_value => lr_po_dist_data.bud_acc_seg5
);
--Derive budget account segment6 from lookup
lc_errloc := 'Derive budget account segment6 from lookup';
lc_bud_acc_seg6 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_INTERCO'
,p_sirf_lookup => 'XXSIRF_CNV_GL_INTERCO'
,p_old_value => lr_po_dist_data.bud_acc_seg6
);
--Derive budget account segment7 from lookup
lc_errloc := 'Derive budget account segment7 from lookup';
/* lc_bud_acc_seg7 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_BUD_ACC7_LKUP'
,p_sirf_lookup => 'XXSIRF_BUD_ACC7_LKUP'
,p_old_value => lr_po_dist_data.bud_acc_seg7
); */
lc_bud_acc_seg7 := '00000';
--ACCRUAL ACCOUNT
--Derive accrual account segment1 from lookup
lc_errloc := 'Derive accrual account segment1 from lookup';
lc_accr_acc_seg1 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_COMPANY'
,p_sirf_lookup => 'XXSIRF_CNV_GL_COMPANY'
,p_old_value => lr_po_dist_data.accr_acc_seg1
);
/*
--Derive accrual account segment2 from lookup
lc_errloc := 'Derive accrual account segment2 from lookup';
IF lr_po_dist_data.vendor_site_attr3 IS NOT NULL THEN
lc_accr_acc_seg2 := lr_po_dist_data.vendor_site_attr3;
ELSE
lc_accr_acc_seg2 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_ACCOUNT'
,p_sirf_lookup => 'XXSIRF_CNV_GL_ACCOUNT'
,p_old_value => lr_po_dist_data.accr_acc_seg2
);
END IF;
*/
--Derive accrual account segment2 from lookup
lc_errloc := 'Derive accrual account segment2 from lookup';
lc_accr_acc_seg2 := NULL;
OPEN lcu_supsite_attr15(lr_po_dist_data.po_number
,lr_po_dist_data.po_line_number
,lr_po_dist_data.shipment_num);
FETCH lcu_supsite_attr15 INTO lc_accr_acc_seg2;
CLOSE lcu_supsite_attr15;
IF lc_accr_acc_seg2 IS NULL THEN
lc_accr_acc_seg2 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_ACCOUNT'
,p_sirf_lookup => 'XXSIRF_CNV_GL_ACCOUNT'
,p_old_value => lr_po_dist_data.accr_acc_seg2
);
END IF;
--Derive accrual account segment3 from lookup
lc_errloc := 'Derive accrual account segment3 from lookup';
lc_accr_acc_seg3 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_BU'
,p_sirf_lookup => 'XXSIRF_CNV_GL_BU'
,p_old_value => lr_po_dist_data.accr_acc_seg6
);
--Derive accrual account segment4 from lookup
lc_errloc := 'Derive accrual account segment4 from lookup';
lc_accr_acc_seg4 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_DEPARTMENT'
,p_sirf_lookup => 'XXSIRF_CNV_GL_DEPARTMENT'
,p_old_value => lr_po_dist_data.accr_acc_seg3
);
--Derive accrual account segment5 from lookup
lc_errloc := 'Derive accrual account segment5 from lookup';
lc_accr_acc_seg5 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_PRODPROJ'
,p_sirf_lookup => 'XXSIRF_CNV_GL_PRODPROJ'
,p_old_value => lr_po_dist_data.accr_acc_seg4
);
--Derive accrual account segment6 from lookup
lc_errloc := 'Derive accrual account segment6 from lookup';
lc_accr_acc_seg6 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_INTERCO'
,p_sirf_lookup => 'XXSIRF_CNV_GL_INTERCO'
,p_old_value => lr_po_dist_data.accr_acc_seg5
);
--Derive accrual account segment7 from lookup
lc_errloc := 'Derive accrual account segment7 from lookup';
/* lc_accr_acc_seg7 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_ACCR_ACC7_LKUP'
,p_sirf_lookup => 'XXSIRF_ACCR_ACC7_LKUP'
,p_old_value => lr_po_dist_data.accr_acc_seg7
); */
lc_accr_acc_seg7 := '00000';
--VARIANCE ACCOUNT
--Derive variance account segment1 from lookup
lc_errloc := 'Derive variance account segment1 from lookup';
lc_var_acc_seg1 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_COMPANY'
,p_sirf_lookup => 'XXSIRF_CNV_GL_COMPANY'
,p_old_value => lr_po_dist_data.var_acc_seg1
);
--Derive variance account segment2 from lookup
lc_errloc := 'Derive variance account segment2 from lookup';
lc_var_acc_seg2 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_ACCOUNT'
,p_sirf_lookup => 'XXSIRF_CNV_GL_ACCOUNT'
,p_old_value => lr_po_dist_data.var_acc_seg2
);
--Derive variance account segment3 from lookup
lc_errloc := 'Derive variance account segment3 from lookup';
lc_var_acc_seg3 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_BU'
,p_sirf_lookup => 'XXSIRF_CNV_GL_BU'
,p_old_value => lr_po_dist_data.var_acc_seg3
);
--Derive variance account segment4 from lookup
lc_errloc := 'Derive variance account segment4 from lookup';
lc_var_acc_seg4 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_DEPARTMENT'
,p_sirf_lookup => 'XXSIRF_CNV_GL_DEPARTMENT'
,p_old_value => lr_po_dist_data.var_acc_seg4
);
--Derive variance account segment5 from lookup
lc_errloc := 'Derive variance account segment5 from lookup';
lc_var_acc_seg5 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_PRODPROJ'
,p_sirf_lookup => 'XXSIRF_CNV_GL_PRODPROJ'
,p_old_value => lr_po_dist_data.var_acc_seg5
);
--Derive variance account segment6 from lookup
lc_errloc := 'Derive variance account segment6 from lookup';
lc_var_acc_seg6 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_INTERCO'
,p_sirf_lookup => 'XXSIRF_CNV_GL_INTERCO'
,p_old_value => lr_po_dist_data.var_acc_seg6
);
--Derive variance account segment7 from lookup
lc_errloc := 'Derive variance account segment7 from lookup';
/* lc_var_acc_seg7 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_VAR_ACC7_LKUP'
,p_sirf_lookup => 'XXSIRF_VAR_ACC7_LKUP'
,p_old_value => lr_po_dist_data.var_acc_seg7
); */
lc_var_acc_seg7 := '00000';
/* sjacob commented
--Derive charge account id
lc_errloc := 'Derive charge account id';
OPEN lcu_account_id (lc_chr_acc_seg1
,lc_chr_acc_seg2
,lc_chr_acc_seg3
,lc_chr_acc_seg4
,lc_chr_acc_seg5
,lc_chr_acc_seg6
,lc_chr_acc_seg7);
FETCH lcu_account_id
INTO ln_charge_acct_id;
CLOSE lcu_account_id;
IF ln_charge_acct_id IS NULL THEN
lc_error_details := lc_error_details || 'Could not derive charge of accounts id :-'||lc_chr_acc_seg1||'-'||lc_chr_acc_seg2||'-'||lc_chr_acc_seg3||'-'||lc_chr_acc_seg4||'-'||lc_chr_acc_seg5||'-'||lc_chr_acc_seg6||'-'||lc_chr_acc_seg7;
END IF;
*/
lc_line_ship_loc := NULL;
lc_new_ship := NULL;
ln_ship_loc_id := NULL;
lc_ship_org := NULL;
OPEN lcu_ship_po_line(lr_po_dist_data.po_number
,lr_po_dist_data.shipment_num
,lr_po_dist_data.po_line_number);
FETCH lcu_ship_po_line
INTO lc_line_ship_loc;
CLOSE lcu_ship_po_line;
lc_new_ship := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_DELIVER_LOCATIONS'
,'XXSIRF_CNV_DELIVER_LOCATIONS'
,lc_line_ship_loc
);
OPEN lcu_hr_loc_org(lc_new_ship);
FETCH lcu_hr_loc_org
INTO ln_ship_loc_id
,lc_ship_org;
CLOSE lcu_hr_loc_org;
--sjacob added
--Derive charge account id
IF lc_ship_org = 'CSD' THEN
OPEN lcu_charge_account_id(ln_ship_loc_id,'UK_MAIN');
FETCH lcu_charge_account_id INTO ln_charge_acct_id ;
CLOSE lcu_charge_account_id;
IF ln_charge_acct_id IS NULL THEN
lc_error_details := lc_error_details || 'Could not derive charge of accounts id ';
END IF;
ELSIF lc_ship_org = 'CSI' THEN
OPEN lcu_charge_account_id(ln_ship_loc_id,'CSI_MAIN');
FETCH lcu_charge_account_id INTO ln_charge_acct_id ;
CLOSE lcu_charge_account_id;
IF ln_charge_acct_id IS NULL THEN
lc_error_details := lc_error_details || 'Could not derive charge of accounts id ';
END IF;
ELSIF lc_ship_org = 'CSL' THEN
OPEN lcu_charge_account_id(ln_ship_loc_id,'CSL_MAIN');
FETCH lcu_charge_account_id INTO ln_charge_acct_id ;
CLOSE lcu_charge_account_id;
IF ln_charge_acct_id IS NULL THEN
lc_error_details := lc_error_details || 'Could not derive charge of accounts id ';
END IF;
ELSIF lc_ship_org = 'CDC' THEN
OPEN lcu_charge_account_id(ln_ship_loc_id,'AK1_COM');
FETCH lcu_charge_account_id INTO ln_charge_acct_id ;
CLOSE lcu_charge_account_id;
IF ln_charge_acct_id IS NULL THEN
lc_error_details := lc_error_details || 'Could not derive charge of accounts id ';
END IF;
ELSE
OPEN lcu_charge_account_id(ln_ship_loc_id,'RM_COM');
FETCH lcu_charge_account_id INTO ln_charge_acct_id ;
CLOSE lcu_charge_account_id;
IF ln_charge_acct_id IS NULL THEN
lc_error_details := lc_error_details || 'Could not derive charge of accounts id ';
END IF;
END IF;
--Derive budget account id
lc_errloc := 'Derive budget account id';
OPEN lcu_account_id (lc_bud_acc_seg1
,lc_bud_acc_seg2
,lc_bud_acc_seg3
,lc_bud_acc_seg4
,lc_bud_acc_seg5
,lc_bud_acc_seg6
,lc_bud_acc_seg7);
FETCH lcu_account_id
INTO ln_budget_acct_id;
CLOSE lcu_account_id;
--Derive accrual account id
lc_errloc := 'Derive accrual account id';
OPEN lcu_account_id (lc_accr_acc_seg1
,lc_accr_acc_seg2
,lc_accr_acc_seg3
,lc_accr_acc_seg4
,lc_accr_acc_seg5
,lc_accr_acc_seg6
,lc_accr_acc_seg7);
FETCH lcu_account_id
INTO ln_accrual_acct_id;
CLOSE lcu_account_id;
--Derive variance account id
lc_errloc := 'Derive variance account id';
OPEN lcu_account_id (lc_var_acc_seg1
,lc_var_acc_seg2
,lc_var_acc_seg3
,lc_var_acc_seg4
,lc_var_acc_seg5
,lc_var_acc_seg6
,lc_var_acc_seg7);
FETCH lcu_account_id
INTO ln_variance_acct_id;
CLOSE lcu_account_id;
IF lc_error_details IS NULL THEN
--Insert purchase order distrbutions data in interface table
lc_errloc := 'Insert purchase order distrbutions data in interface table';
INSERT INTO po_distributions_interface
(interface_line_id
,interface_header_id
,interface_distribution_id
,process_code
,distribution_num
,org_id
,quantity_ordered
,quantity_delivered
,quantity_billed
,quantity_cancelled
,rate_date
,rate
,deliver_to_location_id
,deliver_to_person_id
,destination_type_code
,destination_organization
,destination_context
,set_of_books
,charge_account_id
,budget_account_id
,accrual_account_id
,variance_account_id
,amount_billed
,accrue_on_receipt_flag
,accrued_flag
,prevent_encumbrance_flag
,encumbered_flag
,gl_cancelled_date
--,requisition_num
--,requisition_line_num
--,req_distribution_num
,project_accounting_context
,recoverable_tax
,nonrecoverable_tax
-- ,recovery_rate
-- ,tax_recovery_override_flag
,last_update_date
,last_updated_by
,creation_date
,created_by
)
VALUES
(ln_po_int_line_id
,ln_po_int_header_id
,po_distributions_interface_s.nextval
,'PENDING'
,lr_po_dist_data.distribution_num
,ln_org_id
,(lr_po_dist_data.quantity_ordered - lr_po_dist_data.quantity_delivered - lr_po_dist_data.quantity_cancelled)
,0 --lr_po_dist_data.quantity_delivered
,0 --lr_po_dist_data.quantity_billed
,0 --lr_po_dist_data.quantity_cancelled
,lr_po_dist_data.rate_date
,lr_po_dist_data.rate
,ln_location_id
,ln_person_id
,lr_po_dist_data.destination_type_code
,lc_new_org_name --lr_po_dist_data.destination_organization
,lr_po_dist_data.destination_context
,ln_sob_id
,ln_charge_acct_id
,ln_budget_acct_id
,ln_accrual_acct_id
,ln_variance_acct_id
,lr_po_dist_data.amount_billed
,'Y' -- lr_po_dist_data.accrue_on_receipt_flag as per MDT version 1.23
,lr_po_dist_data.accrued_flag
,lr_po_dist_data.prevent_encumbrance_flag
,lr_po_dist_data.encumbered_flag
,lr_po_dist_data.gl_cancelled_date
--,lr_po_dist_data.requisition_num
--,lr_po_dist_data.requisition_line_num
--,lr_po_dist_data.req_distribution_num
,lr_po_dist_data.project_accounting_context
,lr_po_dist_data.recoverable_tax
,lr_po_dist_data.nonrecoverable_tax
-- ,lr_po_dist_data.recovery_rate
-- ,lr_po_dist_data.tax_recovery_override_flag
,SYSDATE
,fnd_global.user_id
,SYSDATE
,fnd_global.user_id
);
UPDATE xxcsr_po_distributions_int
SET record_status = 'C'
,request_id = FND_GLOBAL.conc_request_id
,error_message = NULL
WHERE rowid = lr_po_dist_data.rowid;
ln_dist_cnt := ln_dist_cnt + 1;
ELSE
UPDATE xxcsr_po_distributions_int
SET record_status = 'E'
,request_id = FND_GLOBAL.conc_request_id
,error_message = lc_error_details
WHERE rowid = lr_po_dist_data.rowid;
IF ln_po_int_line_id IS NOT NULL THEN
UPDATE xxcsr_po_lines_int
SET record_status = 'E'
,error_message = error_message||'error in distribution record'
WHERE po_number = lr_po_dist_data.po_number
AND line_num = lr_po_dist_data.po_line_number
AND shipment_num = lr_po_dist_data.shipment_num
AND source_instance = p_instance_name;
DELETE FROM po_lines_interface
WHERE interface_line_id = ln_po_int_line_id;
ln_lines_cnt := ln_lines_cnt - 1;
END IF;
IF ln_po_int_header_id IS NOT NULL THEN
UPDATE xxcsr_po_headers_int
SET record_status = 'E'
,error_message = error_message||'error in distribution record'
WHERE po_number = lr_po_dist_data.po_number
AND source_instance = p_instance_name;
DELETE FROM po_headers_interface
WHERE interface_header_id = ln_po_int_header_id;
ln_header_cnt := ln_header_cnt - 1;
END IF;
END IF; --lc_error_details IS NULL
COMMIT;
END LOOP;
COMMIT;
IF ln_header_cnt > 0 THEN
--Calling Import Standard Purchase Orders program
lc_errloc := 'Call Import Standard Purchase Orders program';
FND_FILE.PUT_LINE(FND_FILE.LOG,'Submitting Import Standard Purchase Orders concurrent program.');
ln_cur_org_id := FND_PROFILE.VALUE('ORG_ID');
FND_FILE.PUT_LINE(FND_FILE.LOG,'ln_cur_org_id : ' || ln_cur_org_id);
ln_request_id := FND_REQUEST.SUBMIT_REQUEST (
application => 'PO'
,program => 'POXPOPDOI'
,description => 'Import Standard Purchase Orders'
,start_time => SYSDATE
,sub_request => FALSE
,argument1 => NULL --Default Buyer
,argument2 => 'STANDARD' --Document Type
,argument3 => NULL --Document SubType
,argument4 => 'N' --Create or Update Items
,argument5 => NULL --Create Sourcing Rules
,argument6 => 'APPROVED' --Approval Status
,argument7 => NULL --Release Generation Method
,argument8 => NULL --Batch Id
,argument9 => ln_cur_org_id --Operating Unit
,argument10 => NULL --Global Agreement
,argument11 => NULL --Enable Sourcing Level
,argument12 => NULL --Sourcing Level
,argument13 => NULL --Inv Org Enable
,argument14 => NULL --Inventory Organization
);
COMMIT;
IF ln_request_id = 0 THEN
lc_error := 'Error submitting Import Standard Purchase Orders concurrent program.';
RAISE ex_conc_error;
END IF;
FND_FILE.PUT_LINE(FND_FILE.LOG,'Import Standard Purchase Orders concurrent program submitted. Request_id : ' || ln_request_id);
--Wait for the request to complete
lb_wait := FND_CONCURRENT.WAIT_FOR_REQUEST
(
request_id => ln_request_id
,interval => 2
,phase => lc_phase
,status => lc_status
,dev_phase => lc_devpha
,dev_status => lc_devsta
,message => lc_mesg
);
END IF; --ln_header_cnt > 0
x_header_cnt := ln_header_cnt;
x_lines_cnt := ln_lines_cnt;
x_dist_cnt := ln_dist_cnt;
x_req_id := ln_request_id;
--
EXCEPTION
WHEN EX_CONC_ERROR THEN
x_retcode := 2;
x_errbuf := lc_errmsg;
FND_FILE.PUT_LINE(FND_FILE.LOG,lc_errmsg);
WHEN OTHERS THEN
x_errbuf := SUBSTR(SQLERRM,1,200);
x_retcode := 2;
FND_FILE.PUT_LINE(FND_FILE.LOG,'Unexpected error occurred in import procedure at ' || lc_errloc || ' Error : ' || SQLERRM);
END import_sirf;
--Import Routine
PROCEDURE import_csr
(p_rec_status IN VARCHAR2
,p_instance_name IN VARCHAR2
,x_errbuf OUT NOCOPY VARCHAR2
,x_retcode OUT NOCOPY NUMBER
,x_header_cnt OUT NOCOPY NUMBER
,x_lines_cnt OUT NOCOPY NUMBER
,x_dist_cnt OUT NOCOPY NUMBER
,x_req_id OUT NOCOPY NUMBER
)
IS
--
CURSOR lcu_po_header_data (pv_rec_status VARCHAR2)
IS
SELECT XHEC.rowid,XHEC.*
FROM xxcsr_po_headers_int XHEC
WHERE XHEC.record_status = pv_rec_status
AND XHEC.request_id = gn_conc_req_id
AND XHEC.source_instance = p_instance_name
AND XHEC.document_type_code <> 'CONTRACT';
CURSOR lcu_po_header_contr (pv_rec_status VARCHAR2)
IS
SELECT XHEC.rowid,XHEC.*
FROM xxcsr_po_headers_int XHEC
WHERE XHEC.record_status = pv_rec_status
AND XHEC.request_id = gn_conc_req_id
AND XHEC.source_instance = p_instance_name
AND XHEC.document_type_code = 'CONTRACT';
CURSOR lcu_po_lines_data (pv_rec_status VARCHAR2)
IS
SELECT XHEC.rowid,XHEC.*
FROM xxcsr_po_lines_int XHEC
WHERE XHEC.record_status = pv_rec_status
AND XHEC.request_id = gn_conc_req_id
AND XHEC.source_instance = p_instance_name;
CURSOR lcu_po_dist_data (pv_rec_status VARCHAR2)
IS
SELECT XHEC.rowid,XHEC.*
FROM xxcsr_po_distributions_int XHEC
WHERE XHEC.record_status = pv_rec_status
AND XHEC.request_id = gn_conc_req_id
AND XHEC.source_instance = p_instance_name;
CURSOR lcu_chk_currency (pv_currency_code VARCHAR2)
IS
SELECT currency_code
FROM fnd_currencies
WHERE currency_code = pv_currency_code
AND enabled_flag = 'Y'
AND SYSDATE BETWEEN NVL(START_DATE_ACTIVE, SYSDATE) AND NVL(END_DATE_ACTIVE, SYSDATE);
CURSOR lcu_item_cat_id (pv_seg1 VARCHAR2,pv_seg2 VARCHAR2,pv_seg3 VARCHAR2,pv_seg4 VARCHAR2,pv_seg5 VARCHAR2)
IS
SELECT category_id
FROM mtl_categories
WHERE segment1 = pv_seg1
AND segment2 = pv_seg2
AND segment3 = pv_seg3
AND segment4 = pv_seg4
AND segment5 = pv_seg5
AND enabled_flag = 'Y'
AND SYSDATE BETWEEN NVL(START_DATE_ACTIVE, SYSDATE) AND NVL(END_DATE_ACTIVE, SYSDATE);
CURSOR lcu_get_int_header_id (pv_po_number VARCHAR2)
IS
SELECT interface_header_id
FROM po_headers_interface
WHERE document_num = pv_po_number
ORDER BY 1 DESC;
CURSOR lcu_get_int_line_id (pv_po_number VARCHAR2
,pv_po_line_number VARCHAR2
,p_shipment_num VARCHAR2)
IS
SELECT interface_line_id
FROM po_lines_interface
WHERE document_num = pv_po_number
AND line_num = pv_po_line_number
AND shipment_num = p_shipment_num;
CURSOR lcu_account_id (pv_seg1 VARCHAR2,pv_seg2 VARCHAR2,pv_seg3 VARCHAR2,pv_seg4 VARCHAR2,pv_seg5 VARCHAR2,pv_seg6 VARCHAR2,pv_seg7 VARCHAR2)
IS
SELECT code_combination_id
FROM gl_code_combinations_kfv
WHERE segment1 = pv_seg1
AND segment2 = pv_seg2
AND segment3 = pv_seg3
AND segment4 = pv_seg4
AND segment5 = pv_seg5
AND segment6 = pv_seg6
AND segment7 = pv_seg7;
CURSOR lcu_charge_account_id (p_ship_location NUMBER, p_second_inv VARCHAR2)
IS
SELECT GCC.code_combination_id
FROM gl_code_combinations gcc
,mtl_secondary_inventories msi
,hr_locations hl
WHERE MSI.material_account = GCC.code_combination_id
AND MSI.secondary_inventory_name = p_second_inv
AND MSI.organization_id = HL.inventory_organization_id
AND HL.location_id = p_ship_location;
CURSOR lcu_get_sob_id (pv_sob_name VARCHAR2)
IS
SELECT set_of_books_id
FROM gl_sets_of_books
WHERE name = pv_sob_name;
--sjacob commented below
CURSOR lcu_location_id (pv_loc_code VARCHAR2)
IS
SELECT location_id
FROM hr_locations
WHERE location_code = pv_loc_code;
CURSOR lcu_item_id(p_seg1 IN VARCHAR2
,p_seg2 IN VARCHAR2
,p_seg3 IN VARCHAR2 -- sjacob commented as per Siva's mail
)
IS
SELECT MSIB.inventory_item_id
FROM mtl_system_items_b MSIB
WHERE MSIB.segment1 = p_seg1
AND NVL(MSIB.segment2,-99) = NVL(p_seg2,-99)
AND NVL(MSIB.segment3,-99) = NVL(p_seg3,-99) -- sjacob commented as per Siva's mail
AND ROWNUM <= 1;
CURSOR lcu_vendor_der(p_vendor IN VARCHAR2)
IS
SELECT vendor_id
FROM po_vendors
WHERE attribute15 = p_vendor;
CURSOR lcu_hr_loc(p_location_code IN VARCHAR2)
IS
SELECT HLA.location_id
FROM hr_locations_all HLA
WHERE HLA.location_code = p_location_code;
CURSOR lcu_hr_loc_org(p_location_code IN VARCHAR2)
IS
SELECT HLA.location_id
,OOD.organization_code
FROM hr_locations_all HLA
,org_organization_definitions OOD
WHERE HLA.location_code = p_location_code
AND OOD.organization_id = HLA.inventory_organization_id;
CURSOR lcu_ship_po_line(p_po_number IN VARCHAR2
,p_shipment_num IN NUMBER
,p_line_num IN NUMBER)
IS
SELECT ship_to_location
FROM xxcsr_po_lines_int XPLI
WHERE XPLI.po_number = p_po_number
AND XPLI.shipment_num = p_shipment_num
AND XPLI.line_num = p_line_num
AND XPLI.source_instance = p_instance_name;
CURSOR lcu_func_curr(p_org_id IN NUMBER)
IS
SELECT GL.currency_code
FROM hr_operating_units HOU
,gl_ledgers GL
WHERE GL.ledger_id = HOU.set_of_books_id
AND HOU.organization_id = p_org_id;
CURSOR lcu_po_line_itm(p_po_num IN VARCHAR2)
IS
SELECT count('x')
FROM xxcsr_po_lines_int XPLI
WHERE XPLI.po_number = p_po_num
AND XPLI.itm_seg1_item_num IS NOT NULL
AND XPLI.source_instance = p_instance_name;
CURSOR lcu_vendor_site(p_vendor_site_code IN VARCHAR2
,p_vendor_id IN NUMBER)
IS
SELECT POVS.vendor_site_id
FROM po_vendor_sites_all POVS
WHERE POVS.vendor_site_code = p_vendor_site_code
AND POVS.vendor_id = p_vendor_id;
CURSOR lcu_vendor_contact(p_vendor_site_id IN NUMBER)
IS
SELECT PVC.vendor_contact_id
FROM po_vendor_contacts PVC
WHERE PVC.vendor_site_id = p_vendor_site_id;
CURSOR lcu_pay_term(p_payterm IN VARCHAR2)
IS
SELECT APT.term_id
FROM ap_terms APT
WHERE APT.name = p_payterm;
CURSOR lcu_check_po_exists(p_po_number IN VARCHAR2)
IS
SELECT 1
FROM po_headers_all PHA
WHERE PHA.segment1 = p_po_number;
CURSOR lcu_check_lines(p_po_number IN VARCHAR2)
IS
SELECT 1
FROM xxcsr_po_lines_int XPLI
WHERE XPLI.po_number = p_po_number;
CURSOR lcu_prim_uom(p_org_code IN VARCHAR2
,p_item_id IN NUMBER)
IS
SELECT MSIB.primary_unit_of_measure
FROM mtl_system_items_b MSIB
,mtl_parameters MP
WHERE MSIB.inventory_item_id = p_item_id
AND MSIB.organization_id = MP.master_organization_id
AND MP.organization_code = p_org_code;
CURSOR lcu_supsite_attr15(p_doc_num VARCHAR2
,p_lin_num VARCHAR2
,p_shp_num VARCHAR2)
IS
SELECT PVS.attribute15
FROM po_headers_interface PHI
,po_lines_interface PLI
,po_vendor_sites_all PVS
WHERE PHI.interface_header_id = PLI.interface_header_id
AND PHI.vendor_id = PVS.vendor_id
AND PHI.vendor_id = PVS.vendor_id
AND PVS.org_id = PHI.org_id
AND PVS.vendor_site_code = PHI.vendor_site_code
AND PLI.document_num = p_doc_num
AND PLI.line_num = p_lin_num
AND PLI.shipment_num = p_shp_num;
lr_po_header_data lcu_po_header_data%ROWTYPE;
lr_po_lines_data lcu_po_lines_data%ROWTYPE;
lr_po_dist_data lcu_po_dist_data%ROWTYPE;
lc_errmsg VARCHAR2(2000);
lc_errloc VARCHAR2(1000);
ln_request_id NUMBER;
lc_phase VARCHAR2(500);
lc_status VARCHAR2(500);
lc_devpha VARCHAR2(500);
lc_devsta VARCHAR2(500);
lc_mesg VARCHAR2(50);
lb_wait BOOLEAN;
ln_org_id NUMBER;
ln_item_org_id NUMBER;
ln_agent_id NUMBER;
lc_currency_code VARCHAR2(15);
ln_vendor_id NUMBER;
lc_payment_terms VARCHAR2(50);
lc_freight_terms VARCHAR2(25);
ln_item_id NUMBER;
lc_item_seg2 VARCHAR2(40);
lc_cat_seg1 VARCHAR2(40);
lc_cat_seg2 VARCHAR2(40);
lc_cat_seg3 VARCHAR2(40);
lc_cat_seg4 VARCHAR2(40);
lc_cat_seg5 VARCHAR2(40);
lc_inv_org_code VARCHAR2(30);
ln_cat_id NUMBER;
ln_po_int_header_id NUMBER;
ln_po_int_line_id NUMBER;
ln_tax_code_id NUMBER;
ln_charge_acct_id NUMBER;
ln_budget_acct_id NUMBER;
ln_accrual_acct_id NUMBER;
ln_variance_acct_id NUMBER;
ln_sob_id NUMBER;
ln_location_id NUMBER;
ln_person_org_id NUMBER;
ln_person_id NUMBER;
ln_bu_id NUMBER;
lc_chr_acc_seg1 VARCHAR2(40);
lc_chr_acc_seg2 VARCHAR2(40);
lc_chr_acc_seg3 VARCHAR2(40);
lc_chr_acc_seg4 VARCHAR2(40);
lc_chr_acc_seg5 VARCHAR2(40);
lc_chr_acc_seg6 VARCHAR2(40);
lc_chr_acc_seg7 VARCHAR2(40);
lc_bud_acc_seg1 VARCHAR2(40);
lc_bud_acc_seg2 VARCHAR2(40);
lc_bud_acc_seg3 VARCHAR2(40);
lc_bud_acc_seg4 VARCHAR2(40);
lc_bud_acc_seg5 VARCHAR2(40);
lc_bud_acc_seg6 VARCHAR2(40);
lc_bud_acc_seg7 VARCHAR2(40);
lc_accr_acc_seg1 VARCHAR2(40);
lc_accr_acc_seg2 VARCHAR2(40);
lc_accr_acc_seg3 VARCHAR2(40);
lc_accr_acc_seg4 VARCHAR2(40);
lc_accr_acc_seg5 VARCHAR2(40);
lc_accr_acc_seg6 VARCHAR2(40);
lc_accr_acc_seg7 VARCHAR2(40);
lc_var_acc_seg1 VARCHAR2(40);
lc_var_acc_seg2 VARCHAR2(40);
lc_var_acc_seg3 VARCHAR2(40);
lc_var_acc_seg4 VARCHAR2(40);
lc_var_acc_seg5 VARCHAR2(40);
lc_var_acc_seg6 VARCHAR2(40);
lc_var_acc_seg7 VARCHAR2(40);
lc_seg3_value VARCHAR2(40);
lc_seg5_value VARCHAR2(40);
lb_success BOOLEAN;
lc_error_details VARCHAR2(4000);
lc_error VARCHAR2(4000);
lc_errbuf VARCHAR2(240);
ln_retcode NUMBER;
ln_header_cnt NUMBER;
ln_lines_cnt NUMBER;
ln_dist_cnt NUMBER;
ln_cur_org_id NUMBER;
lc_new_orgname VARCHAR2(240);
lc_item_segment2 VARCHAR2(40);
lc_item_segment3 VARCHAR2(40);
lc_new_glacct VARCHAR2(240);
lc_new_cat VARCHAR2(2000);
lc_new_del VARCHAR2(240);
lc_new_org_name VARCHAR2(270);
lc_new_sobname VARCHAR2(270);
lc_business_group VARCHAR2(270);
ln_bill_loc_id NUMBER;
ln_ship_loc_id NUMBER;
lc_inv_po_chk VARCHAR2(270);
lc_func_curr VARCHAR2(15);
lc_rate_type VARCHAR2(30);
ln_rate NUMBER;
ld_rate_date DATE;
lc_new_ship VARCHAR2(240);
lc_new_bill VARCHAR2(240);
ln_line_item_cnt NUMBER;
ln_po_item_chk NUMBER;
ln_vendor_site_id NUMBER;
ln_vendor_contact_id NUMBER;
ln_term_id NUMBER;
lc_po_exists VARCHAR2(1);
lc_line_exists VARCHAR2(1);
lc_primary_uom VARCHAR2(25);
lc_ship_via_lookup_code VARCHAR2(25);
lc_line_ship_loc VARCHAR2(60);
lc_ship_org VARCHAR2(3);
ln_po_header_id NUMBER;
ex_conc_error EXCEPTION;
--
BEGIN
ln_header_cnt := 0;
--Process Purchase Orders data
lc_errloc := 'Process purchase orders data';
FOR lr_po_header_data IN lcu_po_header_data (p_rec_status)
LOOP
ln_org_id := NULL;
ln_agent_id := NULL;
ln_bu_id := NULL;
lc_currency_code := NULL;
ln_vendor_id := NULL;
lc_payment_terms := NULL;
lc_freight_terms := NULL;
lc_error_details := NULL;
lc_new_orgname := NULL;
lc_business_group := NULL;
ln_bill_loc_id := NULL;
ln_ship_loc_id := NULL;
lc_inv_po_chk := NULL;
lc_func_curr := NULL;
lc_rate_type := NULL;
ln_rate := NULL;
ld_rate_date := NULL;
lc_new_ship := NULL;
lc_new_bill := NULL;
lc_line_exists := NULL;
lc_primary_uom := NULL;
-- check if lines exist for this PO
OPEN lcu_check_lines(lr_po_header_data.po_number);
FETCH lcu_check_lines
INTO lc_line_exists;
CLOSE lcu_check_lines;
IF lc_line_exists IS NULL THEN
lc_error_details := lc_error_details||'No lines were found in the staging table for the given PO. ';
END IF;
lc_errloc := 'Operating unit related derivations';
lc_new_orgname := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_OPERATING_UNIT'
,'XXSIRF_CNV_OPERATING_UNIT'
,lr_po_header_data.operating_unit
);
IF lc_new_orgname IS NULL THEN
lc_error_details := lc_error_details||'Could not derive new operating unit for '||lr_po_header_data.operating_unit||'. ';
ELSE
ln_org_id := XXCSR_COMMON_PKG.get_organization_id(lc_new_orgname);
IF ln_org_id IS NULL THEN
lc_error_details := lc_error_details||'Could not derive org id for new operating unit '||lc_new_orgname||'. ';
ELSE
-- Compare functional and document currency
OPEN lcu_func_curr(ln_org_id);
FETCH lcu_func_curr
INTO lc_func_curr;
CLOSE lcu_func_curr;
IF lc_func_curr = lr_po_header_data.currency_code THEN
lc_rate_type := NULL;
ln_rate := NULL;
ld_rate_date := NULL;
ELSE
lc_rate_type := lr_po_header_data.rate_type;
ln_rate := lr_po_header_data.rate;
ld_rate_date := lr_po_header_data.rate_date;
END IF;
END IF;
END IF;
lc_errloc := 'Checking for inventory purchase orders';
lc_inv_po_chk := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_INV_SUPPLIERS'
,'XXSIRF_CNV_INV_SUPPLIERS'
,lr_po_header_data.vendor_name
);
IF lc_inv_po_chk IS NULL THEN
lc_error_details := lc_error_details||'Only inventory purchase orders will be migrated';
END IF;
IF lr_po_header_data.emp_bu_name IN ( 'CSR United States','CSR United Kingdom') THEN
lc_business_group := lr_po_header_data.emp_bu_name;
ELSE
lc_business_group := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_HR_BG'
,'XXSIRF_CNV_HR_BG'
,lr_po_header_data.emp_bu_name
);
END IF;
IF lc_business_group IS NULL THEN
lc_error_details := lc_error_details||'Mapping for Business Group '||lr_po_header_data.emp_bu_name||' could not be found. ';
ELSE
ln_bu_id := XXCSR_COMMON_PKG.get_business_group_id(lc_business_group);
IF ln_bu_id IS NULL THEN
lc_error_details:= lc_error_details||' Business Group ID for '||lc_business_group||' could not be derived. ';
ELSE
--Derive agent id
lc_errloc := 'Derive agent id';
ln_agent_id := XXCSR_COMMON_PKG.get_person_id (p_first_name => lr_po_header_data.emp_fname
,p_last_name => lr_po_header_data.emp_lname
,p_date_of_birth => lr_po_header_data.emp_dob
,p_business_group_id => ln_bu_id
);
IF ln_agent_id IS NULL THEN
lc_error_details := lc_error_details || ' Invalid agent (employee) details.';
END IF;
END IF;
END IF;
--Check currency code
lc_errloc := 'Check currency code';
OPEN lcu_chk_currency (lr_po_header_data.currency_code);
FETCH lcu_chk_currency
INTO lc_currency_code;
IF lcu_chk_currency%NOTFOUND THEN
lc_error_details := lc_error_details || ' Invalid currency code.';
END IF;
CLOSE lcu_chk_currency;
--Derive vendor id
lc_errloc := 'Derive vendor id';
IF lr_po_header_data.vendor_name IS NOT NULL THEN
OPEN lcu_vendor_der(lr_po_header_data.vendor_name);
FETCH lcu_vendor_der
INTO ln_vendor_id;
CLOSE lcu_vendor_der;
IF ln_vendor_id IS NULL THEN
lc_error_details := lc_error_details || ' Vendor not migrated.';
END IF;
END IF;
lc_errloc := 'Check payment terms';
IF lr_po_header_data.payment_terms IS NOT NULL THEN
lc_payment_terms := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_SUPPLIER_PAYTERMS'
,p_sirf_lookup => 'XXSIRF_CNV_SUPPLIER_PAYTERMS'
,p_old_value => lr_po_header_data.payment_terms
);
IF lc_payment_terms IS NULL THEN
lc_error_details := lc_error_details || ' Invalid payment terms.';
END IF;
END IF;
--Check freight terms
lc_errloc := 'Check freight terms';
IF lr_po_header_data.freight_terms IS NOT NULL THEN
lc_freight_terms := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_FREIGHT_TERMS'
,p_sirf_lookup => 'XXSIRF_CNV_FREIGHT_TERMS'
,p_old_value => lr_po_header_data.freight_terms
);
IF lc_freight_terms IS NULL THEN
lc_error_details := lc_error_details || ' Invalid freight terms.';
END IF;
END IF;
IF lr_po_header_data.ship_to_location IS NOT NULL THEN
lc_new_ship := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_DELIVER_LOCATIONS'
,'XXSIRF_CNV_DELIVER_LOCATIONS'
,lr_po_header_data.ship_to_location
);
IF lc_new_ship IS NULL THEN
lc_error_details := lc_error_details||'Could not derive new ship to location for '||lr_po_header_data.ship_to_location||' in XXCSR_CNV_DELIVER_LOCATIONS. ';
ELSE
OPEN lcu_hr_loc(lc_new_ship);
FETCH lcu_hr_loc
INTO ln_ship_loc_id;
CLOSE lcu_hr_loc;
IF ln_ship_loc_id IS NULL THEN
lc_error_details := lc_error_details || 'Ship to location id could not be derived for '||lr_po_header_data.ship_to_location;
END IF;
END IF;
END IF;
IF lr_po_header_data.bill_to_location IS NOT NULL THEN
lc_new_bill := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_BILLTO_LOCATIONS'
,'XXSIRF_CNV_BILLTO_LOCATIONS'
,lr_po_header_data.bill_to_location
);
IF lc_new_bill IS NULL THEN
lc_error_details := lc_error_details||'Could not derive new bill to location for '||lr_po_header_data.bill_to_location||' in XXCSR_CNV_BILLTO_LOCATIONS. ';
ELSE
OPEN lcu_hr_loc(lc_new_bill);
FETCH lcu_hr_loc
INTO ln_bill_loc_id;
CLOSE lcu_hr_loc;
IF ln_bill_loc_id IS NULL THEN
lc_error_details := lc_error_details || 'Bill to location id could not be derived for '||lr_po_header_data.bill_to_location;
END IF;
END IF;
END IF;
lc_ship_via_lookup_code := NULL;
IF lr_po_header_data.ship_via_lookup_code IS NOT NULL THEN
lc_ship_via_lookup_code := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_FREIGHT_CARRIER'
,'XXCSR_CNV_FREIGHT_CARRIER'
,lr_po_header_data.ship_via_lookup_code
);
END IF;
IF lc_error_details IS NULL THEN
--Insert purchase order header data in interface table
lc_errloc := 'Insert purchase order header data in interface table';
INSERT INTO po_headers_interface
(interface_header_id
,batch_id
,interface_source_code
,action
,process_code
,org_id
,document_type_code
,currency_code
,rate_type
,rate_date
,rate
,agent_id
,vendor_id
,vendor_site_code
,ship_to_location_id
,bill_to_location_id
,payment_terms
,freight_terms
,approval_status
,approved_date
-- ,revised_date
-- ,revision_num
,confirming_order_flag
,comments
,acceptance_required_flag
,print_count
-- ,printed_date
,frozen_flag
,closed_code
,from_rfq_num
,from_type_lookup_code
,attribute_category
--,attribute1
,attribute2
-- ,attribute3
--,global_attribute1
,pay_on_code
,last_update_date
,last_updated_by
,creation_date
,created_by
,document_num
,freight_carrier
)
VALUES
(po_headers_interface_s.nextval
,1
,'XXCSR Conversion'
,'ORIGINAL'
,'PENDING'
,ln_org_id
,lr_po_header_data.document_type_code -- 'STANDARD'
,lr_po_header_data.currency_code
,DECODE(lc_rate_type,'Corporate','User',lc_rate_type)
,ld_rate_date
,ln_rate
,ln_agent_id
,ln_vendor_id
,lr_po_header_data.vendor_site_code
,ln_ship_loc_id -- lr_po_header_data.ship_to_location
,ln_bill_loc_id -- lr_po_header_data.bill_to_location
,lc_payment_terms
,lc_freight_terms
,DECODE(lr_po_header_data.approval_status,'REQUIRES REAPPROVAL','INCOMPLETE',lr_po_header_data.approval_status)
,lr_po_header_data.approved_date
-- ,lr_po_header_data.revised_date
-- ,lr_po_header_data.revision_num
,lr_po_header_data.confirming_order_flag
,lr_po_header_data.comments
,lr_po_header_data.acceptance_required_flag
--,DECODE(lr_po_header_data.approval_status,'APPROVED',lr_po_header_data.print_count,0)
,DECODE(lr_po_header_data.approval_status,'APPROVED',1,0)
-- ,lr_po_header_data.printed_date
,lr_po_header_data.frozen_flag
,lr_po_header_data.closed_code
,lr_po_header_data.from_requisition_num
,lr_po_header_data.from_type_lookup_code
,lr_po_header_data.attribute_category
--,lr_po_header_data.sourcing_rule
,lr_po_header_data.osp_flag
--,lr_po_header_data.mrp_flag
--,lr_po_header_data.po_total_plus_ipi_tax
,lr_po_header_data.pay_on_code
,SYSDATE
,fnd_global.user_id
,SYSDATE
,fnd_global.user_id
,lr_po_header_data.po_number
,lc_ship_via_lookup_code
);
UPDATE xxcsr_po_headers_int
SET record_status = 'C'
,request_id = FND_GLOBAL.conc_request_id
,error_message = NULL
WHERE rowid = lr_po_header_data.rowid;
COMMIT;
ln_header_cnt := ln_header_cnt + 1;
ELSE
UPDATE xxcsr_po_headers_int
SET record_status = 'E'
,request_id = FND_GLOBAL.conc_request_id
,error_message = lc_error_details
WHERE rowid = lr_po_header_data.rowid;
END IF; --lc_error_details IS NULL
COMMIT;
END LOOP;
--COMMIT;
ln_lines_cnt := 0;
--Process Purchase Order Lines data
lc_errloc := 'Process purchase order lines data';
FOR lr_po_lines_data IN lcu_po_lines_data (p_rec_status)
LOOP
ln_org_id := NULL;
ln_item_org_id := NULL;
ln_item_id := NULL;
lc_item_seg2 := NULL;
lc_cat_seg1 := NULL;
lc_cat_seg2 := NULL;
lc_cat_seg3 := NULL;
lc_cat_seg4 := NULL;
lc_cat_seg5 := NULL;
ln_cat_id := NULL;
ln_po_int_header_id := NULL;
ln_tax_code_id := NULL;
lc_error_details := NULL;
lc_new_orgname := NULL;
lc_item_segment2 := NULL;
lc_new_glacct := NULL;
lc_new_cat := NULL;
lc_new_ship := NULL;
ln_ship_loc_id := NULL;
lc_new_org_name := NULL;
--Derive interface header id
lc_errloc := 'Derive interface header id';
OPEN lcu_get_int_header_id (lr_po_lines_data.po_number);
FETCH lcu_get_int_header_id
INTO ln_po_int_header_id;
CLOSE lcu_get_int_header_id;
IF ln_po_int_header_id IS NULL THEN
lc_error_details := lc_error_details || 'Could not derive interface header id. Header record may have error. ';
END IF;
FND_FILE.PUT_LINE(FND_FILE.LOG,'ln_po_int_header_id : ' || ln_po_int_header_id);
lc_errloc := 'Operating unit related derivations';
lc_new_orgname := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_OPERATING_UNIT'
,'XXSIRF_CNV_OPERATING_UNIT'
,lr_po_lines_data.org_name
);
IF lc_new_orgname IS NULL THEN
lc_error_details := lc_error_details||'Could not derive new operating unit for '||lr_po_lines_data.org_name||'. ';
ELSE
ln_org_id := XXCSR_COMMON_PKG.get_organization_id(lc_new_orgname);
IF ln_org_id IS NULL THEN
lc_error_details := lc_error_details||'Could not derive org id for new operating unit '||lc_new_orgname||'. ';
END IF;
END IF;
IF lr_po_lines_data.ship_to_location IS NOT NULL THEN
lc_new_ship := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_DELIVER_LOCATIONS'
,'XXSIRF_CNV_DELIVER_LOCATIONS'
,lr_po_lines_data.ship_to_location
);
IF lc_new_ship IS NULL THEN
lc_error_details := lc_error_details||'Could not derive new ship to location for '||lr_po_lines_data.ship_to_location||' in XXCSR_CNV_DELIVER_LOCATIONS. ';
ELSE
OPEN lcu_hr_loc(lc_new_ship);
FETCH lcu_hr_loc
INTO ln_ship_loc_id;
CLOSE lcu_hr_loc;
IF ln_ship_loc_id IS NULL THEN
lc_error_details := lc_error_details || 'Ship to location id could not be derived for '||lr_po_lines_data.ship_to_location;
END IF;
END IF;
END IF;
IF lr_po_lines_data.ship_to_org IS NOT NULL THEN
lc_new_org_name := XXCSR_COMMON_PKG.get_organization_code (p_instance_name
,lr_po_lines_data.ship_to_org);
IF lc_new_org_name IS NULL THEN
lc_error_details := lc_error_details||'Mapping for organization '||lr_po_lines_data.ship_to_org||' not found in the table XXCSR_CNV_ORG_MAPPINGS. ';
END IF;
END IF;
lc_item_segment3 := NULL;
IF lr_po_lines_data.itm_seg3_item_type = 'MT' THEN
lc_item_segment2 := 'MT';
lc_item_segment3 := NULL;
ELSIF lr_po_lines_data.itm_seg3_item_type = 'FL' THEN
lc_item_segment2 := 'PD';
lc_item_segment3 := NULL;
ELSE
lc_item_segment2 := lr_po_lines_data.itm_seg2_bom_level;
lc_item_segment3 := lr_po_lines_data.itm_seg3_item_type;
END IF;
lc_errloc := 'Derive inventory item id';
-- IF lr_po_lines_data.itm_seg1_item_num IS NOT NULL THEN
OPEN lcu_item_id(lr_po_lines_data.itm_seg1_item_num
,lc_item_segment2
,lc_item_segment3); --sjacob commented as per Siva's mail lr_po_lines_data.itm_seg3_item_type
FETCH lcu_item_id
INTO ln_item_id;
CLOSE lcu_item_id;
IF ln_item_id IS NULL THEN
lc_error_details := lc_error_details || ' Item number could not be derived.';
ELSE
-- DERIVE primary UOM for master item
IF lc_new_org_name IS NOT NULL THEN
OPEN lcu_prim_uom(lc_new_org_name
,ln_item_id);
FETCH lcu_prim_uom
INTO lc_primary_uom;
CLOSE lcu_prim_uom;
IF lc_primary_uom IS NULL THEN
lc_error_details := lc_error_details || 'Primary UOM code for the master item could not be derived';
END IF;
END IF;
END IF;
-- END IF;
lc_errloc := 'Derive new GL account';
lc_new_glacct := XXCSR_COMMON_PKG.get_lookup_meaning(p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_ACCOUNT'
,p_sirf_lookup => 'XXCSR_CNV_GL_ACCOUNT'
,p_old_value => lr_po_lines_data.gl_account
);
lc_new_cat := XXCSR_COMMON_PKG.get_lookup_meaning(p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_PO_CATEGORY'
,p_sirf_lookup => 'XXCSR_CNV_PO_CATEGORY'
,p_old_value => lc_new_glacct
);
IF lc_new_cat IS NULL THEN
lc_new_cat := 'MISCELLANEOUS.MISCELLANEOUS';
END IF;
IF lr_po_lines_data.inventory_item_flag = 'N' THEN
UPDATE xxcsr_po_distributions_int
SET destination_type_code = 'EXPENSE'
WHERE po_number = lr_po_lines_data.po_number
AND po_line_number = lr_po_lines_data.line_num
AND shipment_num = lr_po_lines_data.shipment_num
AND source_instance = p_instance_name;
ELSE
UPDATE xxcsr_po_distributions_int
SET destination_type_code = 'INVENTORY'
WHERE po_number = lr_po_lines_data.po_number
AND po_line_number = lr_po_lines_data.line_num
AND shipment_num = lr_po_lines_data.shipment_num
AND source_instance = p_instance_name;
END IF;
IF lc_error_details IS NULL THEN
--Insert purchase order lines data in interface table
lc_errloc := 'Insert purchase order lines data in interface table';
FND_FILE.PUT_LINE(FND_FILE.LOG,'Inserting in lines');
INSERT INTO po_lines_interface
(interface_line_id
,interface_header_id
,action
,process_code
,document_num
,line_num
,organization_id
,shipment_num
,shipment_type
,contract_num
,line_type
,item_id
,category
,item_description
,vendor_product_num
,unit_of_measure
,quantity
,unit_price
,list_price_per_unit
,allow_price_override_flag
,negotiated_by_preparer_flag
,note_to_vendor
,taxable_flag
-- ,tax_name
,type_1099
,capital_expense_flag
,price_type
,closed_code
,closed_reason
,closed_date
,closed_by
,over_tolerance_error_flag
,line_attribute_category_lines
-- ,line_attribute1
-- ,line_attribute2
-- ,line_attribute3
-- ,line_attribute4
-- ,line_attribute5
-- ,line_attribute6
-- ,line_attribute7
-- ,line_attribute8
-- ,line_attribute9
--,global_attribute1
-- ,tax_code_id
,secondary_unit_of_measure
,secondary_quantity
,inspection_required_flag
,receipt_required_flag
,invoice_close_tolerance
,receive_close_tolerance
,need_by_date
,promised_date
,consigned_flag
,base_unit_price
,last_update_date
,last_updated_by
,creation_date
,created_by
,ship_to_location_id
,ship_to_organization_code
)
VALUES
(po_lines_interface_s.nextval
,ln_po_int_header_id
,'ORIGINAL'
,'PENDING'
,lr_po_lines_data.po_number
,lr_po_lines_data.line_num
,ln_org_id
,lr_po_lines_data.shipment_num
,lr_po_lines_data.shipment_type
,lr_po_lines_data.contract_num
,lr_po_lines_data.line_type
,ln_item_id
,lc_new_cat
,lr_po_lines_data.item_description
,lr_po_lines_data.vendor_product_num
,lc_primary_uom --lr_po_lines_data.unit_of_measure
,lr_po_lines_data.quantity
,lr_po_lines_data.unit_price
,lr_po_lines_data.list_price_per_unit
,lr_po_lines_data.allow_price_override_flag
,lr_po_lines_data.negotiated_by_preparer_flag
,lr_po_lines_data.note_to_vendor
,lr_po_lines_data.taxable_flag
-- ,lr_po_lines_data.tax_name
,lr_po_lines_data.type_1099
,lr_po_lines_data.capital_expense_flag
,lr_po_lines_data.price_type
,lr_po_lines_data.closed_code
,lr_po_lines_data.closed_reason
,lr_po_lines_data.closed_date
,lr_po_lines_data.closed_by
,lr_po_lines_data.over_tolerance_error_flag
,lr_po_lines_data.line_attribute_category_lines
-- ,lr_po_lines_data.att1_item_number
-- ,lr_po_lines_data.att2_manufacturer
-- ,lr_po_lines_data.att3_manufacturer_part_no
-- ,lr_po_lines_data.att4_vendor_name
-- ,lr_po_lines_data.att5_last_po_price
-- ,lr_po_lines_data.att6_last_transaction_qty
-- ,lr_po_lines_data.att7_last_vendor_name
-- ,lr_po_lines_data.att8_item_id
-- ,lr_po_lines_data.att9_vendor_name
--,lr_po_lines_data.fisc_classification_code
-- ,ln_tax_code_id commented as per R04
,lr_po_lines_data.secondary_unit_of_measure
,lr_po_lines_data.secondary_quantity
,lr_po_lines_data.inspection_required_flag
,lr_po_lines_data.receipt_required_flag
,lr_po_lines_data.invoice_close_tolerance
,lr_po_lines_data.receive_close_tolerance
,lr_po_lines_data.need_by_date
,lr_po_lines_data.promised_date
,lr_po_lines_data.consigned_flag
,lr_po_lines_data.base_unit_price
,SYSDATE
,fnd_global.user_id
,SYSDATE
,fnd_global.user_id
,ln_ship_loc_id
,lc_new_org_name
);
UPDATE xxcsr_po_lines_int
SET record_status = 'C'
,request_id = FND_GLOBAL.conc_request_id
,error_message = NULL
WHERE rowid = lr_po_lines_data.rowid;
COMMIT;
ln_lines_cnt := ln_lines_cnt + 1;
ELSE
UPDATE xxcsr_po_lines_int
SET record_status = 'E'
,request_id = FND_GLOBAL.conc_request_id
,error_message = lc_error_details
WHERE rowid = lr_po_lines_data.rowid;
IF ln_po_int_header_id IS NOT NULL THEN
UPDATE xxcsr_po_headers_int
SET record_status = 'E'
,error_message = error_message||'error in lines record'
WHERE po_number = lr_po_lines_data.po_number
AND source_instance = p_instance_name;
DELETE FROM po_headers_interface
WHERE interface_header_id = ln_po_int_header_id;
ln_header_cnt := ln_header_cnt - 1;
END IF;
END IF; --lc_error_details IS NULL
COMMIT;
END LOOP;
--COMMIT;
ln_dist_cnt := 0;
--Process Purchase Order distributions data
lc_errloc := 'Process purchase order distributions data';
FOR lr_po_dist_data IN lcu_po_dist_data (p_rec_status)
LOOP
ln_org_id := NULL;
ln_sob_id := NULL;
ln_location_id := NULL;
lc_inv_org_code := NULL;
ln_person_org_id := NULL;
ln_person_id := NULL;
lc_error_details := NULL;
lc_new_orgname := NULL;
lc_new_del := NULL;
lc_new_org_name := NULL;
lc_new_sobname := NULL;
ln_po_int_line_id := NULL;
ln_po_int_header_id := NULL;
lc_business_group := NULL;
ln_bu_id := NULL;
lc_chr_acc_seg1 := NULL;
lc_chr_acc_seg2 := NULL;
lc_chr_acc_seg3 := NULL;
lc_chr_acc_seg4 := NULL;
lc_chr_acc_seg5 := NULL;
lc_chr_acc_seg6 := NULL;
lc_chr_acc_seg7 := NULL;
lc_bud_acc_seg1 := NULL;
lc_bud_acc_seg2 := NULL;
lc_bud_acc_seg3 := NULL;
lc_bud_acc_seg4 := NULL;
lc_bud_acc_seg5 := NULL;
lc_bud_acc_seg6 := NULL;
lc_bud_acc_seg7 := NULL;
lc_accr_acc_seg1 := NULL;
lc_accr_acc_seg2 := NULL;
lc_accr_acc_seg3 := NULL;
lc_accr_acc_seg4 := NULL;
lc_accr_acc_seg5 := NULL;
lc_accr_acc_seg6 := NULL;
lc_accr_acc_seg7 := NULL;
lc_var_acc_seg1 := NULL;
lc_var_acc_seg2 := NULL;
lc_var_acc_seg3 := NULL;
lc_var_acc_seg4 := NULL;
lc_var_acc_seg5 := NULL;
lc_var_acc_seg6 := NULL;
lc_var_acc_seg7 := NULL;
ln_charge_acct_id := NULL;
ln_budget_acct_id := NULL;
ln_accrual_acct_id := NULL;
ln_variance_acct_id := NULL;
lc_seg3_value := NULL;
lc_seg5_value := NULL;
--Derive interface header id
lc_errloc := 'Derive interface header id';
OPEN lcu_get_int_header_id (lr_po_dist_data.po_number);
FETCH lcu_get_int_header_id
INTO ln_po_int_header_id;
CLOSE lcu_get_int_header_id;
IF ln_po_int_header_id IS NULL THEN
lc_error_details := lc_error_details || 'Could not derive interface header id. Header record may have error. ';
END IF;
--Derive interface line id
lc_errloc := 'Derive interface line id';
OPEN lcu_get_int_line_id (lr_po_dist_data.po_number
,lr_po_dist_data.po_line_number
,lr_po_dist_data.shipment_num);
FETCH lcu_get_int_line_id
INTO ln_po_int_line_id;
CLOSE lcu_get_int_line_id;
IF ln_po_int_line_id IS NULL THEN
lc_error_details := lc_error_details || 'Could not derive interface line id. Header/Line record may have error. ';
END IF;
lc_errloc := 'Operating unit related derivations';
lc_new_orgname := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_OPERATING_UNIT'
,'XXSIRF_CNV_OPERATING_UNIT'
,lr_po_dist_data.org_name
);
IF lc_new_orgname IS NULL THEN
lc_error_details := lc_error_details||'Could not derive new operating unit for '||lr_po_dist_data.org_name||'. ';
ELSE
ln_org_id := XXCSR_COMMON_PKG.get_organization_id(lc_new_orgname);
IF ln_org_id IS NULL THEN
lc_error_details := lc_error_details||'Could not derive org id for new operating unit '||lc_new_orgname||'. ';
END IF;
END IF;
--Derive sob id
lc_new_sobname := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_SOB_NAME'
,'XXSIRF_CNV_SOB_NAME'
,lr_po_dist_data.set_of_books
);
IF lc_new_sobname IS NULL THEN
lc_error_details := lc_error_details||'Could not derive new sob for '||lr_po_dist_data.set_of_books||' in XXCSR_CNV_SOB_NAME. ';
ELSE
lc_errloc := 'Derive sob id';
OPEN lcu_get_sob_id (lc_new_sobname);
FETCH lcu_get_sob_id
INTO ln_sob_id;
CLOSE lcu_get_sob_id;
IF ln_sob_id IS NULL THEN
lc_error_details := lc_error_details || ' Invalid sets of books name- '||lc_new_sobname;
END IF;
END IF;
IF lr_po_dist_data.deliver_to_location IS NOT NULL THEN
lc_new_del := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_DELIVER_LOCATIONS'
,'XXSIRF_CNV_DELIVER_LOCATIONS'
,lr_po_dist_data.deliver_to_location
);
IF lc_new_del IS NULL THEN
lc_error_details := lc_error_details||'Could not derive new deliver to location for '||lr_po_dist_data.deliver_to_location||' in XXCSR_CNV_DELIVER_LOCATIONS. ';
ELSE
--Derive deliver to location id
lc_errloc := 'Derive deliver to location id';
OPEN lcu_location_id (lc_new_del);
FETCH lcu_location_id
INTO ln_location_id;
CLOSE lcu_location_id;
IF ln_location_id IS NULL THEN
lc_error_details := lc_error_details || ' Invalid deliver to location code.';
END IF;
END IF;
END IF;
IF lr_po_dist_data.destination_organization IS NOT NULL THEN
lc_new_org_name := XXCSR_COMMON_PKG.get_organization_code (p_instance_name
,lr_po_dist_data.destination_organization);
IF lc_new_org_name IS NULL THEN
lc_error_details := lc_error_details||'Mapping for organization '||lr_po_dist_data.destination_organization||' not found in the table XXCSR_CNV_ORG_MAPPINGS. ';
END IF;
END IF;
--Derive deliver to person id
IF lr_po_dist_data.delv_per_fname IS NOT NULL THEN
lc_business_group := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_HR_BG'
,'XXSIRF_CNV_HR_BG'
,lr_po_dist_data.delv_per_org_name
);
IF lc_business_group IS NULL THEN
lc_error_details := lc_error_details||'Mapping for Business Group '||lr_po_dist_data.delv_per_org_name||' could not be found. ';
ELSE
ln_bu_id := XXCSR_COMMON_PKG.get_business_group_id(lc_business_group);
IF ln_bu_id IS NULL THEN
lc_error_details:= lc_error_details||' Business Group ID for '||lc_business_group||' could not be derived. ';
--Derive deliver to person id
lc_errloc := 'Derive deliver to person id';
ln_person_id := XXCSR_COMMON_PKG.get_person_id (p_first_name => lr_po_dist_data.delv_per_fname
,p_last_name => lr_po_dist_data.delv_per_lname
,p_date_of_birth => lr_po_dist_data.delv_per_dob
,p_business_group_id => ln_bu_id
);
IF ln_person_id IS NULL THEN
lc_error_details := lc_error_details || ' Invalid agent (employee) details.';
END IF;
END IF;
END IF;
END IF;
--BUDGET ACCOUNT
--Derive budget account segment1 from lookup
lc_errloc := 'Derive budget account segment1 from lookup';
IF (lr_po_dist_data.bud_acc_seg1 IS NOT NULL OR lr_po_dist_data.bud_acc_seg2 IS NOT NULL OR
lr_po_dist_data.bud_acc_seg3 IS NOT NULL OR lr_po_dist_data.bud_acc_seg4 IS NOT NULL OR
lr_po_dist_data.bud_acc_seg5 IS NOT NULL OR lr_po_dist_data.bud_acc_seg6 IS NOT NULL OR
lr_po_dist_data.bud_acc_seg7 IS NOT NULL) THEN
lc_bud_acc_seg1 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_COMPANY'
,p_sirf_lookup => 'XXSIRF_CNV_GL_COMPANY'
,p_old_value => lr_po_dist_data.bud_acc_seg1
);
--Derive budget account segment2 from lookup
lc_errloc := 'Derive budget account segment2 from lookup';
lc_bud_acc_seg2 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_ACCOUNT'
,p_sirf_lookup => 'XXSIRF_CNV_GL_ACCOUNT'
,p_old_value => lr_po_dist_data.bud_acc_seg2
);
--Derive budget account segment3 from lookup
lc_errloc := 'Derive budget account segment3 from lookup';
/* lc_bud_acc_seg3 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_BU'
,p_sirf_lookup => 'XXSIRF_CNV_GL_BU'
,p_old_value => lr_po_dist_data.bud_acc_seg4
); */
lc_seg3_value := NULL;
IF UPPER(lr_po_dist_data.bud_acc_seg4) = LOWER(lr_po_dist_data.bud_acc_seg4) THEN
lc_seg3_value := lr_po_dist_data.bud_acc_seg3;
ELSE
lc_seg3_value := lr_po_dist_data.bud_acc_seg4;
END IF;
lc_bud_acc_seg3 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_BU'
,p_sirf_lookup => 'XXSIRF_CNV_GL_BU'
,p_old_value => lc_seg3_value
);
--Derive budget account segment4 from lookup
lc_errloc := 'Derive budget account segment4 from lookup';
lc_bud_acc_seg4 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_DEPARTMENT'
,p_sirf_lookup => 'XXSIRF_CNV_GL_DEPARTMENT'
,p_old_value => lr_po_dist_data.bud_acc_seg4
);
--Derive budget account segment5 from lookup
lc_errloc := 'Derive budget account segment5 from lookup';
/* lc_bud_acc_seg5 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_PRODPROJ'
,p_sirf_lookup => 'XXSIRF_CNV_GL_PRODPROJ'
,p_old_value => lr_po_dist_data.bud_acc_seg5
); */
lc_seg5_value := NULL;
/* Segments 5 and 6 in the legacy instance both map onto Segment 5 in the target instance.
When mapping the data, take whichever one of the legacy instance values
in non-zero and map using lookup XXCSR_CNV_GL_PRODPROJ.
If both legacy values are zero, use the default of '000000' for Segment 5 of the target GL Account. */
IF UPPER(lr_po_dist_data.bud_acc_seg5) = LOWER(lr_po_dist_data.bud_acc_seg5) THEN -- 5 numeric
IF TO_NUMBER(lr_po_dist_data.bud_acc_seg5) = 0 THEN -- 5 is zero
IF UPPER(lr_po_dist_data.bud_acc_seg6) != LOWER(lr_po_dist_data.bud_acc_seg6) THEN
lc_seg5_value := lr_po_dist_data.bud_acc_seg6;
ELSIF TO_NUMBER(lr_po_dist_data.bud_acc_seg6) = 0 THEN -- 6 is zero
lc_seg5_value := '000000';
ELSE
lc_seg5_value := lr_po_dist_data.bud_acc_seg6;
END IF;
ELSE
IF UPPER(lr_po_dist_data.bud_acc_seg6) != LOWER(lr_po_dist_data.bud_acc_seg6) THEN
lc_error_details := lc_error_details || 'Both segment5('||lr_po_dist_data.bud_acc_seg5||') and segment6('||lr_po_dist_data.bud_acc_seg6||') cannot be non zero';
ELSIF TO_NUMBER(lr_po_dist_data.bud_acc_seg6) = 0 THEN -- 6 is zero
lc_seg5_value := lr_po_dist_data.bud_acc_seg5;
ELSE
lc_error_details := lc_error_details || 'Both segment5('||lr_po_dist_data.bud_acc_seg5||') and segment6('||lr_po_dist_data.bud_acc_seg6||') cannot be non zero';
END IF;
END IF;
ELSE -- 5 non numeric
IF UPPER(lr_po_dist_data.bud_acc_seg6) != LOWER(lr_po_dist_data.bud_acc_seg6) THEN
lc_error_details := lc_error_details || 'Both segment5('||lr_po_dist_data.bud_acc_seg5||') and segment6('||lr_po_dist_data.bud_acc_seg6||') cannot be non zero';
ELSIF TO_NUMBER(lr_po_dist_data.bud_acc_seg6) = 0 THEN -- 6 is zero
lc_seg5_value := lr_po_dist_data.bud_acc_seg5;
ELSE
lc_error_details := lc_error_details || 'Both segment5('||lr_po_dist_data.bud_acc_seg5||') and segment6('||lr_po_dist_data.bud_acc_seg6||') cannot be non zero';
END IF;
END IF;
IF lc_seg5_value IS NOT NULL AND lc_seg5_value != '000000' THEN
lc_bud_acc_seg5 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_PRODPROJ'
,p_sirf_lookup => 'XXSIRF_CNV_GL_PRODPROJ'
,p_old_value => lc_seg5_value
);
ELSIF lc_seg5_value IS NOT NULL AND lc_seg5_value = '000000' THEN
lc_bud_acc_seg5 := lc_seg5_value;
END IF;
--Derive budget account segment6 from lookup
lc_errloc := 'Derive budget account segment6 from lookup';
/* lc_bud_acc_seg6 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_INTERCO'
,p_sirf_lookup => 'XXSIRF_CNV_GL_INTERCO'
,p_old_value => lr_po_dist_data.bud_acc_seg6
); */
lc_bud_acc_seg6 := '000';
--Derive budget account segment7 from lookup
lc_errloc := 'Derive budget account segment7 from lookup';
/* lc_bud_acc_seg7 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_BUD_ACC7_LKUP'
,p_sirf_lookup => 'XXSIRF_BUD_ACC7_LKUP'
,p_old_value => lr_po_dist_data.bud_acc_seg7
); */
lc_bud_acc_seg7 := '00000';
END IF;
IF (lr_po_dist_data.accr_acc_seg1 IS NOT NULL OR lr_po_dist_data.accr_acc_seg2 IS NOT NULL OR
lr_po_dist_data.accr_acc_seg3 IS NOT NULL OR lr_po_dist_data.accr_acc_seg4 IS NOT NULL OR
lr_po_dist_data.accr_acc_seg5 IS NOT NULL OR lr_po_dist_data.accr_acc_seg6 IS NOT NULL OR
lr_po_dist_data.accr_acc_seg7 IS NOT NULL) THEN
--ACCRUAL ACCOUNT
--Derive accrual account segment1 from lookup
lc_errloc := 'Derive accrual account segment1 from lookup';
lc_accr_acc_seg1 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_COMPANY'
,p_sirf_lookup => 'XXSIRF_CNV_GL_COMPANY'
,p_old_value => lr_po_dist_data.accr_acc_seg1
);
-- Change by manishar 12/04/10 as per mdt v1.26
-- Deriving Attribute15 of the corresponding Suppliers Address
lc_errloc := 'Derive accrual account segment2 from lookup';
lc_accr_acc_seg2 := NULL;
OPEN lcu_supsite_attr15(lr_po_dist_data.po_number
,lr_po_dist_data.po_line_number
,lr_po_dist_data.shipment_num);
FETCH lcu_supsite_attr15 INTO lc_accr_acc_seg2;
CLOSE lcu_supsite_attr15;
--Derive accrual account segment2 from lookup
IF lc_accr_acc_seg2 IS NULL THEN
lc_accr_acc_seg2 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_ACCOUNT'
,p_sirf_lookup => 'XXSIRF_CNV_GL_ACCOUNT'
,p_old_value => lr_po_dist_data.accr_acc_seg2
);
END IF;
--Derive accrual account segment3 from lookup
lc_errloc := 'Derive accrual account segment3 from lookup';
lc_accr_acc_seg3 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_BU'
,p_sirf_lookup => 'XXSIRF_CNV_GL_BU'
,p_old_value => lr_po_dist_data.accr_acc_seg3
);
--Derive accrual account segment4 from lookup
lc_errloc := 'Derive accrual account segment4 from lookup';
/* lc_accr_acc_seg4 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_DEPARTMENT'
,p_sirf_lookup => 'XXSIRF_CNV_GL_DEPARTMENT'
,p_old_value => lr_po_dist_data.accr_acc_seg4
); */
--Derive budget account segment4 from lookup
lc_errloc := 'Derive budget account segment4 from lookup';
lc_accr_acc_seg4 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_DEPARTMENT'
,p_sirf_lookup => 'XXSIRF_CNV_GL_DEPARTMENT'
,p_old_value => lr_po_dist_data.accr_acc_seg4
);
--Derive accrual account segment5 from lookup
lc_errloc := 'Derive accrual account segment5 from lookup';
lc_accr_acc_seg5 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_PRODPROJ'
,p_sirf_lookup => 'XXSIRF_CNV_GL_PRODPROJ'
,p_old_value => lr_po_dist_data.accr_acc_seg5
);
--Derive accrual account segment6 from lookup
lc_errloc := 'Derive accrual account segment6 from lookup';
/* lc_accr_acc_seg6 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_INTERCO'
,p_sirf_lookup => 'XXSIRF_CNV_GL_INTERCO'
,p_old_value => lr_po_dist_data.accr_acc_seg6
); */
lc_accr_acc_seg6 := '000';
--Derive accrual account segment7 from lookup
lc_errloc := 'Derive accrual account segment7 from lookup';
/* lc_accr_acc_seg7 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_ACCR_ACC7_LKUP'
,p_sirf_lookup => 'XXSIRF_ACCR_ACC7_LKUP'
,p_old_value => lr_po_dist_data.accr_acc_seg7
); */
lc_accr_acc_seg7 := '00000';
END IF;
IF (lr_po_dist_data.var_acc_seg1 IS NOT NULL OR lr_po_dist_data.var_acc_seg2 IS NOT NULL OR
lr_po_dist_data.var_acc_seg3 IS NOT NULL OR lr_po_dist_data.var_acc_seg4 IS NOT NULL OR
lr_po_dist_data.var_acc_seg5 IS NOT NULL OR lr_po_dist_data.var_acc_seg6 IS NOT NULL OR
lr_po_dist_data.var_acc_seg7 IS NOT NULL) THEN
--VARIANCE ACCOUNT
--Derive variance account segment1 from lookup
lc_errloc := 'Derive variance account segment1 from lookup';
lc_var_acc_seg1 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_COMPANY'
,p_sirf_lookup => 'XXSIRF_CNV_GL_COMPANY'
,p_old_value => lr_po_dist_data.var_acc_seg1
);
--Derive variance account segment2 from lookup
lc_errloc := 'Derive variance account segment2 from lookup';
lc_var_acc_seg2 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_ACCOUNT'
,p_sirf_lookup => 'XXSIRF_CNV_GL_ACCOUNT'
,p_old_value => lr_po_dist_data.var_acc_seg2
);
--Derive variance account segment3 from lookup
lc_errloc := 'Derive variance account segment3 from lookup';
lc_var_acc_seg3 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_BU'
,p_sirf_lookup => 'XXSIRF_CNV_GL_BU'
,p_old_value => lr_po_dist_data.var_acc_seg4
);
--Derive variance account segment4 from lookup
lc_errloc := 'Derive variance account segment4 from lookup';
/* lc_var_acc_seg4 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_DEPARTMENT'
,p_sirf_lookup => 'XXSIRF_CNV_GL_DEPARTMENT'
,p_old_value => lr_po_dist_data.var_acc_seg4
); */
lc_seg3_value := NULL;
IF UPPER(lr_po_dist_data.var_acc_seg4) = LOWER(lr_po_dist_data.var_acc_seg4) THEN
lc_seg3_value := lr_po_dist_data.var_acc_seg3;
ELSE
lc_seg3_value := lr_po_dist_data.var_acc_seg4;
END IF;
lc_var_acc_seg3 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_BU'
,p_sirf_lookup => 'XXSIRF_CNV_GL_BU'
,p_old_value => lc_seg3_value
);
--Derive budget account segment4 from lookup
lc_errloc := 'Derive budget account segment4 from lookup';
lc_var_acc_seg4 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_DEPARTMENT'
,p_sirf_lookup => 'XXSIRF_CNV_GL_DEPARTMENT'
,p_old_value => lr_po_dist_data.var_acc_seg4
);
--Derive variance account segment5 from lookup
lc_errloc := 'Derive variance account segment5 from lookup';
/* lc_var_acc_seg5 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_PRODPROJ'
,p_sirf_lookup => 'XXSIRF_CNV_GL_PRODPROJ'
,p_old_value => lr_po_dist_data.var_acc_seg5
); */
lc_seg5_value := NULL;
/* Segments 5 and 6 in the legacy instance both map onto Segment 5 in the target instance.
When mapping the data, take whichever one of the legacy instance values
in non-zero and map using lookup XXCSR_CNV_GL_PRODPROJ.
If both legacy values are zero, use the default of '000000' for Segment 5 of the target GL Account. */
IF UPPER(lr_po_dist_data.var_acc_seg5) = LOWER(lr_po_dist_data.var_acc_seg5) THEN -- 5 numeric
IF TO_NUMBER(lr_po_dist_data.var_acc_seg5) = 0 THEN -- 5 is zero
IF UPPER(lr_po_dist_data.var_acc_seg6) != LOWER(lr_po_dist_data.var_acc_seg6) THEN
lc_seg5_value := lr_po_dist_data.var_acc_seg6;
ELSIF TO_NUMBER(lr_po_dist_data.var_acc_seg6) = 0 THEN -- 6 is zero
lc_seg5_value := '000000';
ELSE
lc_seg5_value := lr_po_dist_data.var_acc_seg6;
END IF;
ELSE
IF UPPER(lr_po_dist_data.var_acc_seg6) != LOWER(lr_po_dist_data.var_acc_seg6) THEN
lc_error_details := lc_error_details || 'Both segment5('||lr_po_dist_data.var_acc_seg5||') and segment6('||lr_po_dist_data.var_acc_seg6||') cannot be non zero';
ELSIF TO_NUMBER(lr_po_dist_data.var_acc_seg6) = 0 THEN -- 6 is zero
lc_seg5_value := lr_po_dist_data.var_acc_seg5;
ELSE
lc_error_details := lc_error_details || 'Both segment5('||lr_po_dist_data.var_acc_seg5||') and segment6('||lr_po_dist_data.var_acc_seg6||') cannot be non zero';
END IF;
END IF;
ELSE -- 5 non numeric
IF UPPER(lr_po_dist_data.var_acc_seg6) != LOWER(lr_po_dist_data.var_acc_seg6) THEN
lc_error_details := lc_error_details || 'Both segment5('||lr_po_dist_data.var_acc_seg5||') and segment6('||lr_po_dist_data.var_acc_seg6||') cannot be non zero';
ELSIF TO_NUMBER(lr_po_dist_data.var_acc_seg6) = 0 THEN -- 6 is zero
lc_seg5_value := lr_po_dist_data.var_acc_seg5;
ELSE
lc_error_details := lc_error_details || 'Both segment5('||lr_po_dist_data.var_acc_seg5||') and segment6('||lr_po_dist_data.var_acc_seg6||') cannot be non zero';
END IF;
END IF;
IF lc_seg5_value IS NOT NULL AND lc_seg5_value != '000000' THEN
lc_var_acc_seg5 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_PRODPROJ'
,p_sirf_lookup => 'XXSIRF_CNV_GL_PRODPROJ'
,p_old_value => lc_seg5_value
);
ELSIF lc_seg5_value IS NOT NULL AND lc_seg5_value = '000000' THEN
lc_var_acc_seg5 := lc_seg5_value;
END IF;
--Derive variance account segment6 from lookup
lc_errloc := 'Derive variance account segment6 from lookup';
/* lc_var_acc_seg6 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_INTERCO'
,p_sirf_lookup => 'XXSIRF_CNV_GL_INTERCO'
,p_old_value => lr_po_dist_data.var_acc_seg6
); */
lc_var_acc_seg6 := '000';
--Derive variance account segment7 from lookup
lc_errloc := 'Derive variance account segment7 from lookup';
/* lc_var_acc_seg7 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_VAR_ACC7_LKUP'
,p_sirf_lookup => 'XXSIRF_VAR_ACC7_LKUP'
,p_old_value => lr_po_dist_data.var_acc_seg7
); */
lc_var_acc_seg7 := '00000';
END IF;
/*
--Derive charge account id
lc_errloc := 'Derive charge account id';
OPEN lcu_account_id (lc_chr_acc_seg1
,lc_chr_acc_seg2
,lc_chr_acc_seg3
,lc_chr_acc_seg4
,lc_chr_acc_seg5
,lc_chr_acc_seg6
,lc_chr_acc_seg7);
FETCH lcu_account_id
INTO ln_charge_acct_id;
CLOSE lcu_account_id;
IF ln_charge_acct_id IS NULL THEN
lc_error_details := lc_error_details || 'Could not derive charge of accounts id :-'||lc_chr_acc_seg1||'-'||lc_chr_acc_seg2||'-'||lc_chr_acc_seg3||'-'||lc_chr_acc_seg4||'-'||lc_chr_acc_seg5||'-'||lc_chr_acc_seg6||'-'||lc_chr_acc_seg7;
END IF;
*/
lc_line_ship_loc := NULL;
lc_new_ship := NULL;
ln_ship_loc_id := NULL;
lc_ship_org := NULL;
OPEN lcu_ship_po_line(lr_po_dist_data.po_number
,lr_po_dist_data.shipment_num
,lr_po_dist_data.po_line_number);
FETCH lcu_ship_po_line
INTO lc_line_ship_loc;
CLOSE lcu_ship_po_line;
lc_new_ship := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_DELIVER_LOCATIONS'
,'XXSIRF_CNV_DELIVER_LOCATIONS'
,lc_line_ship_loc
);
OPEN lcu_hr_loc_org(lc_new_ship);
FETCH lcu_hr_loc_org
INTO ln_ship_loc_id
,lc_ship_org;
CLOSE lcu_hr_loc_org;
IF lc_ship_org = 'CSD' THEN
OPEN lcu_charge_account_id(ln_ship_loc_id,'UK_MAIN');
FETCH lcu_charge_account_id INTO ln_charge_acct_id ;
CLOSE lcu_charge_account_id;
IF ln_charge_acct_id IS NULL THEN
lc_error_details := lc_error_details || 'Could not derive charge of accounts id ';
END IF;
ELSIF lc_ship_org = 'CSI' THEN
OPEN lcu_charge_account_id(ln_ship_loc_id,'CSI_MAIN');
FETCH lcu_charge_account_id INTO ln_charge_acct_id ;
CLOSE lcu_charge_account_id;
IF ln_charge_acct_id IS NULL THEN
lc_error_details := lc_error_details || 'Could not derive charge of accounts id ';
END IF;
ELSIF lc_ship_org = 'CSL' THEN
OPEN lcu_charge_account_id(ln_ship_loc_id,'CSL_MAIN');
FETCH lcu_charge_account_id INTO ln_charge_acct_id ;
CLOSE lcu_charge_account_id;
IF ln_charge_acct_id IS NULL THEN
lc_error_details := lc_error_details || 'Could not derive charge of accounts id ';
END IF;
ELSIF lc_ship_org = 'CDC' THEN
OPEN lcu_charge_account_id(ln_ship_loc_id,'AK1_COM');
FETCH lcu_charge_account_id INTO ln_charge_acct_id ;
CLOSE lcu_charge_account_id;
IF ln_charge_acct_id IS NULL THEN
lc_error_details := lc_error_details || 'Could not derive charge of accounts id ';
END IF;
ELSE
OPEN lcu_charge_account_id(ln_ship_loc_id,'RM_COM');
FETCH lcu_charge_account_id INTO ln_charge_acct_id ;
CLOSE lcu_charge_account_id;
IF ln_charge_acct_id IS NULL THEN
lc_error_details := lc_error_details || 'Could not derive charge of accounts id ';
END IF;
END IF;
--Derive budget account id
lc_errloc := 'Derive budget account id';
OPEN lcu_account_id (lc_bud_acc_seg1
,lc_bud_acc_seg2
,lc_bud_acc_seg3
,lc_bud_acc_seg4
,lc_bud_acc_seg5
,lc_bud_acc_seg6
,lc_bud_acc_seg7);
FETCH lcu_account_id
INTO ln_budget_acct_id;
CLOSE lcu_account_id;
--Derive accrual account id
lc_errloc := 'Derive accrual account id';
OPEN lcu_account_id (lc_accr_acc_seg1
,lc_accr_acc_seg2
,lc_accr_acc_seg3
,lc_accr_acc_seg4
,lc_accr_acc_seg5
,lc_accr_acc_seg6
,lc_accr_acc_seg7);
FETCH lcu_account_id
INTO ln_accrual_acct_id;
CLOSE lcu_account_id;
--Derive variance account id
lc_errloc := 'Derive variance account id';
OPEN lcu_account_id (lc_var_acc_seg1
,lc_var_acc_seg2
,lc_var_acc_seg3
,lc_var_acc_seg4
,lc_var_acc_seg5
,lc_var_acc_seg6
,lc_var_acc_seg7);
FETCH lcu_account_id
INTO ln_variance_acct_id;
CLOSE lcu_account_id;
IF lc_error_details IS NULL THEN
--Insert purchase order distrbutions data in interface table
lc_errloc := 'Insert purchase order distrbutions data in interface table';
INSERT INTO po_distributions_interface
(interface_line_id
,interface_header_id
,interface_distribution_id
,process_code
,distribution_num
,org_id
,quantity_ordered
,quantity_delivered
,quantity_billed
,quantity_cancelled
,rate_date
,rate
,deliver_to_location_id
,deliver_to_person_id
,destination_type_code
,destination_organization
,destination_context
,set_of_books
,charge_account_id
,budget_account_id
,accrual_account_id
,variance_account_id
,amount_billed
,accrue_on_receipt_flag
,accrued_flag
,prevent_encumbrance_flag
,encumbered_flag
,gl_cancelled_date
--,requisition_num
--,requisition_line_num
--,req_distribution_num
,project_accounting_context
,recoverable_tax
,nonrecoverable_tax
-- ,recovery_rate
-- ,tax_recovery_override_flag
,last_update_date
,last_updated_by
,creation_date
,created_by
)
VALUES
(ln_po_int_line_id
,ln_po_int_header_id
,po_distributions_interface_s.nextval
,'PENDING'
,lr_po_dist_data.distribution_num
,ln_org_id
,(lr_po_dist_data.quantity_ordered - lr_po_dist_data.quantity_delivered - lr_po_dist_data.quantity_cancelled)
,0 --lr_po_dist_data.quantity_delivered
,0 --lr_po_dist_data.quantity_billed
,0 --lr_po_dist_data.quantity_cancelled
,lr_po_dist_data.rate_date
,lr_po_dist_data.rate
,ln_location_id
,ln_person_id
,lr_po_dist_data.destination_type_code
,lc_new_org_name --lr_po_dist_data.destination_organization
,lr_po_dist_data.destination_context
,ln_sob_id
,ln_charge_acct_id
,ln_budget_acct_id
,ln_accrual_acct_id
,ln_variance_acct_id
,lr_po_dist_data.amount_billed
,'Y' -- lr_po_dist_data.accrue_on_receipt_flag as per MDT version 1.23
,lr_po_dist_data.accrued_flag
,lr_po_dist_data.prevent_encumbrance_flag
,lr_po_dist_data.encumbered_flag
,lr_po_dist_data.gl_cancelled_date
--,lr_po_dist_data.requisition_num
--,lr_po_dist_data.requisition_line_num
--,lr_po_dist_data.req_distribution_num
,lr_po_dist_data.project_accounting_context
,lr_po_dist_data.recoverable_tax
,lr_po_dist_data.nonrecoverable_tax
-- ,lr_po_dist_data.recovery_rate
-- ,lr_po_dist_data.tax_recovery_override_flag
,SYSDATE
,fnd_global.user_id
,SYSDATE
,fnd_global.user_id
);
UPDATE xxcsr_po_distributions_int
SET record_status = 'C'
,request_id = FND_GLOBAL.conc_request_id
,error_message = NULL
WHERE rowid = lr_po_dist_data.rowid;
COMMIT;
ln_dist_cnt := ln_dist_cnt + 1;
ELSE
UPDATE xxcsr_po_distributions_int
SET record_status = 'E'
,request_id = FND_GLOBAL.conc_request_id
,error_message = lc_error_details
WHERE rowid = lr_po_dist_data.rowid;
IF ln_po_int_line_id IS NOT NULL THEN
UPDATE xxcsr_po_lines_int
SET record_status = 'E'
,error_message = error_message||'error in distribution record'
WHERE po_number = lr_po_dist_data.po_number
AND line_num = lr_po_dist_data.po_line_number
AND shipment_num = lr_po_dist_data.shipment_num
AND source_instance = p_instance_name;
DELETE FROM po_lines_interface
WHERE interface_line_id = ln_po_int_line_id;
ln_lines_cnt := ln_lines_cnt - 1;
END IF;
IF ln_po_int_header_id IS NOT NULL THEN
UPDATE xxcsr_po_headers_int
SET record_status = 'E'
,error_message = error_message||'error in distribution record'
WHERE po_number = lr_po_dist_data.po_number
AND source_instance = p_instance_name;
DELETE FROM po_headers_interface
WHERE interface_header_id = ln_po_int_header_id;
ln_header_cnt := ln_header_cnt - 1;
END IF;
END IF; --lc_error_details IS NULL
COMMIT;
END LOOP;
COMMIT;
IF ln_header_cnt > 0 THEN
--Calling Import Standard Purchase Orders program
lc_errloc := 'Call Import Standard Purchase Orders program';
FND_FILE.PUT_LINE(FND_FILE.LOG,'Submitting Import Standard Purchase Orders concurrent program.');
ln_cur_org_id := FND_PROFILE.VALUE('ORG_ID');
FND_FILE.PUT_LINE(FND_FILE.LOG,'ln_cur_org_id : ' || ln_cur_org_id);
ln_request_id := FND_REQUEST.SUBMIT_REQUEST (
application => 'PO'
,program => 'POXPOPDOI'
,description => 'Import Standard Purchase Orders'
,start_time => SYSDATE
,sub_request => FALSE
,argument1 => NULL --Default Buyer
,argument2 => 'STANDARD' --Document Type
,argument3 => NULL --Document SubType
,argument4 => 'N' --Create or Update Items
,argument5 => NULL --Create Sourcing Rules
,argument6 => 'APPROVED' --Approval Status
,argument7 => NULL --Release Generation Method
,argument8 => NULL --Batch Id
,argument9 => ln_cur_org_id --Operating Unit
,argument10 => NULL --Global Agreement
,argument11 => NULL --Enable Sourcing Level
,argument12 => NULL --Sourcing Level
,argument13 => NULL --Inv Org Enable
,argument14 => NULL --Inventory Organization
);
COMMIT;
IF ln_request_id = 0 THEN
lc_error := 'Error submitting Import Standard Purchase Orders concurrent program.';
RAISE ex_conc_error;
END IF;
FND_FILE.PUT_LINE(FND_FILE.LOG,'Import Standard Purchase Orders concurrent program submitted. Request_id : ' || ln_request_id);
--Wait for the request to complete
lb_wait := FND_CONCURRENT.WAIT_FOR_REQUEST
(
request_id => ln_request_id
,interval => 2
,phase => lc_phase
,status => lc_status
,dev_phase => lc_devpha
,dev_status => lc_devsta
,message => lc_mesg
);
END IF; --ln_header_cnt > 0
x_header_cnt := ln_header_cnt;
x_lines_cnt := ln_lines_cnt;
x_dist_cnt := ln_dist_cnt;
x_req_id := ln_request_id;
-- Contracts import
FOR lr_po_header_contr IN lcu_po_header_contr (p_rec_status)
LOOP
ln_org_id := NULL;
ln_agent_id := NULL;
ln_bu_id := NULL;
lc_currency_code := NULL;
ln_vendor_id := NULL;
lc_payment_terms := NULL;
lc_freight_terms := NULL;
lc_error_details := NULL;
lc_new_orgname := NULL;
lc_business_group := NULL;
ln_bill_loc_id := NULL;
ln_ship_loc_id := NULL;
lc_inv_po_chk := NULL;
lc_func_curr := NULL;
lc_rate_type := NULL;
ln_rate := NULL;
ld_rate_date := NULL;
lc_new_ship := NULL;
lc_new_bill := NULL;
ln_vendor_site_id := NULL;
ln_vendor_contact_id := NULL;
ln_term_id := NULL;
lc_po_exists := NULL;
-- check if PO already exists
OPEN lcu_check_po_exists(lr_po_header_contr.po_number);
FETCH lcu_check_po_exists
INTO lc_po_exists;
CLOSE lcu_check_po_exists;
IF lc_po_exists IS NOT NULL THEN
lc_error_details := lc_error_details||'PO already exists';
END IF;
lc_errloc := 'Operating unit related derivations';
lc_new_orgname := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_OPERATING_UNIT'
,'XXSIRF_CNV_OPERATING_UNIT'
,lr_po_header_contr.operating_unit
);
IF lc_new_orgname IS NULL THEN
lc_error_details := lc_error_details||'Could not derive new operating unit for '||lr_po_header_contr.operating_unit||'. ';
ELSE
ln_org_id := XXCSR_COMMON_PKG.get_organization_id(lc_new_orgname);
IF ln_org_id IS NULL THEN
lc_error_details := lc_error_details||'Could not derive org id for new operating unit '||lc_new_orgname||'. ';
ELSE
-- Compare functional and document currency
OPEN lcu_func_curr(ln_org_id);
FETCH lcu_func_curr
INTO lc_func_curr;
CLOSE lcu_func_curr;
IF lc_func_curr = lr_po_header_contr.currency_code THEN
lc_rate_type := NULL;
ln_rate := NULL;
ld_rate_date := NULL;
ELSE
lc_rate_type := lr_po_header_contr.rate_type;
ln_rate := lr_po_header_contr.rate;
ld_rate_date := lr_po_header_contr.rate_date;
END IF;
END IF;
END IF;
/* lc_errloc := 'Checking for inventory purchase orders';
lc_inv_po_chk := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_INV_SUPPLIERS'
,'XXSIRF_CNV_INV_SUPPLIERS'
,lr_po_header_contr.vendor_name
);
IF lc_inv_po_chk IS NULL THEN
lc_error_details := lc_error_details||'Only inventory purchase orders will be migrated';
END IF; */
/* Commented by Nishka, added the above derivation
--Derive org id
lc_errloc := 'Derive org id';
ln_org_id := XXCSR_COMMON_PKG.get_organization_id(lr_po_header_contr.operating_unit);
IF ln_org_id IS NULL THEN
lc_error_details := 'Invalid operating unit name.';
END IF; */
/* OPEN lcu_bu_id (lr_po_header_contr.emp_bu_name);
FETCH lcu_bu_id
INTO ln_bu_id;
CLOSE lcu_bu_id; */
IF lr_po_header_contr.emp_bu_name IN ( 'CSR United States','CSR United Kingdom') THEN
lc_business_group := lr_po_header_contr.emp_bu_name;
ELSE
lc_business_group := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_HR_BG'
,'XXSIRF_CNV_HR_BG'
,lr_po_header_contr.emp_bu_name
);
END IF;
IF lc_business_group IS NULL THEN
lc_error_details := lc_error_details||'Mapping for Business Group '||lr_po_header_contr.emp_bu_name||' could not be found. ';
ELSE
ln_bu_id := XXCSR_COMMON_PKG.get_business_group_id(lc_business_group);
IF ln_bu_id IS NULL THEN
lc_error_details:= lc_error_details||' Business Group ID for '||lc_business_group||' could not be derived. ';
ELSE
--Derive agent id
lc_errloc := 'Derive agent id';
ln_agent_id := XXCSR_COMMON_PKG.get_person_id (p_first_name => lr_po_header_contr.emp_fname
,p_last_name => lr_po_header_contr.emp_lname
,p_date_of_birth => lr_po_header_contr.emp_dob
,p_business_group_id => ln_bu_id
);
IF ln_agent_id IS NULL THEN
lc_error_details := lc_error_details || ' Invalid agent (employee) details.';
END IF;
END IF;
END IF;
--Check currency code
lc_errloc := 'Check currency code';
OPEN lcu_chk_currency (lr_po_header_contr.currency_code);
FETCH lcu_chk_currency
INTO lc_currency_code;
IF lcu_chk_currency%NOTFOUND THEN
lc_error_details := lc_error_details || ' Invalid currency code.';
END IF;
CLOSE lcu_chk_currency;
--Derive vendor id
lc_errloc := 'Derive vendor id';
IF lr_po_header_contr.vendor_name IS NOT NULL THEN
OPEN lcu_vendor_der(lr_po_header_contr.vendor_name);
FETCH lcu_vendor_der
INTO ln_vendor_id;
CLOSE lcu_vendor_der;
IF ln_vendor_id IS NULL THEN
lc_error_details := lc_error_details || ' Vendor not migrated.';
END IF;
END IF;
lc_errloc := 'Check payment terms';
IF lr_po_header_contr.payment_terms IS NOT NULL THEN
lc_payment_terms := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_SUPPLIER_PAYTERMS'
,p_sirf_lookup => 'XXSIRF_CNV_SUPPLIER_PAYTERMS'
,p_old_value => lr_po_header_contr.payment_terms
);
IF lc_payment_terms IS NULL THEN
lc_error_details := lc_error_details || ' Invalid payment terms.';
ELSE
OPEN lcu_pay_term(lc_payment_terms);
FETCH lcu_pay_term
INTO ln_term_id;
CLOSE lcu_pay_term;
IF ln_term_id IS NULL THEN
lc_error_details := lc_error_details || 'Could not derive payment term id for '||lc_payment_terms;
END IF;
END IF;
END IF;
--Check freight terms
lc_errloc := 'Check freight terms';
IF lr_po_header_contr.freight_terms IS NOT NULL THEN
lc_freight_terms := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_FREIGHT_TERMS'
,p_sirf_lookup => 'XXSIRF_CNV_FREIGHT_TERMS'
,p_old_value => lr_po_header_contr.freight_terms
);
IF lc_freight_terms IS NULL THEN
lc_error_details := lc_error_details || ' Invalid freight terms.';
END IF;
END IF;
IF lr_po_header_contr.ship_to_location IS NOT NULL THEN
lc_new_ship := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_DELIVER_LOCATIONS'
,'XXSIRF_CNV_DELIVER_LOCATIONS'
,lr_po_header_contr.ship_to_location
);
IF lc_new_ship IS NULL THEN
lc_error_details := lc_error_details||'Could not derive new ship to location for '||lr_po_header_contr.ship_to_location||' in XXCSR_CNV_DELIVER_LOCATIONS. ';
ELSE
OPEN lcu_hr_loc(lc_new_ship);
FETCH lcu_hr_loc
INTO ln_ship_loc_id;
CLOSE lcu_hr_loc;
IF ln_ship_loc_id IS NULL THEN
lc_error_details := lc_error_details || 'Ship to location id could not be derived for '||lr_po_header_contr.ship_to_location;
END IF;
END IF;
END IF;
IF lr_po_header_contr.bill_to_location IS NOT NULL THEN
lc_new_bill := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_BILLTO_LOCATIONS'
,'XXSIRF_CNV_BILLTO_LOCATIONS'
,lr_po_header_contr.bill_to_location
);
IF lc_new_bill IS NULL THEN
lc_error_details := lc_error_details||'Could not derive new bill to location for '||lr_po_header_contr.bill_to_location||' in XXCSR_CNV_BILLTO_LOCATIONS. ';
ELSE
OPEN lcu_hr_loc(lc_new_bill);
FETCH lcu_hr_loc
INTO ln_bill_loc_id;
CLOSE lcu_hr_loc;
IF ln_bill_loc_id IS NULL THEN
lc_error_details := lc_error_details || 'Bill to location id could not be derived for '||lr_po_header_contr.bill_to_location;
END IF;
END IF;
END IF;
OPEN lcu_vendor_site(lr_po_header_contr.vendor_site_code
,ln_vendor_id);
FETCH lcu_vendor_site
INTO ln_vendor_site_id;
CLOSE lcu_vendor_site;
OPEN lcu_vendor_contact(ln_vendor_site_id);
FETCH lcu_vendor_contact
INTO ln_vendor_contact_id;
CLOSE lcu_vendor_contact;
/* ln_line_item_cnt := NULL;
ln_po_item_chk := NULL;
-- Check whether the po line has valid items.
OPEN lcu_po_line_itm(lr_po_header_contr.po_number);
FETCH lcu_po_line_itm
INTO ln_line_item_cnt;
CLOSE lcu_po_line_itm;
IF ln_line_item_cnt != 0 THEN
OPEN lcu_po_itm_chk(lr_po_header_contr.po_number);
FETCH lcu_po_itm_chk
INTO ln_po_item_chk;
CLOSE lcu_po_itm_chk;
IF ln_po_item_chk = 0 THEN
lc_error_details := lc_error_details || 'Inventory item id for po line could not be derived';
END IF;
END IF; */
IF lc_error_details IS NULL THEN
--Insert purchase order header data in interface table
lc_errloc := 'Insert purchase order header data in interface table';
BEGIN
ln_po_header_id := NULL;
ln_po_header_id := PO_HEADERS_S.nextval;
INSERT INTO po_headers_all (
po_header_id
,agent_id
,type_lookup_code
,created_by
,creation_date
,last_update_date
,last_updated_by
,last_update_login
,request_id
,segment1
,summary_flag
,enabled_flag
,vendor_id
,vendor_site_id
,vendor_contact_id
,ship_to_location_id
,bill_to_location_id
,terms_id
,currency_code
,rate_type
,rate_date
,rate
,authorization_status
,revision_num
,approved_flag
,approved_date
,print_count
,confirming_order_flag
,comments
,acceptance_required_flag
,cancel_flag
,frozen_flag
,closed_code
,org_id
,interface_source_code
-- ,wf_item_type
-- ,wf_item_key
,xml_flag
,document_creation_method
,submit_date
,style_id
,freight_terms_lookup_code
,attribute_category
,pay_on_code
,global_agreement_flag
)
VALUES
(
ln_po_header_id
,ln_agent_id
,'CONTRACT'
,FND_GLOBAL.USER_ID
,SYSDATE
,SYSDATE
,FND_GLOBAL.USER_ID
,FND_GLOBAL.LOGIN_ID
,gn_conc_req_id
,lr_po_header_contr.po_number
,'N'
,'Y'
,ln_vendor_id
,ln_vendor_site_id
,ln_vendor_contact_id
,ln_ship_loc_id -- lr_po_header_contr.ship_to_location
,ln_bill_loc_id -- lr_po_header_contr.bill_to_location
,ln_term_id
,lr_po_header_contr.currency_code
,DECODE(lc_rate_type,'Corporate','User',lc_rate_type)
,ld_rate_date
,ln_rate
,DECODE(lr_po_header_contr.approval_status,'REQUIRES REAPPROVAL','INCOMPLETE',lr_po_header_contr.approval_status)
,0
,lr_po_header_contr.approved_flag
,lr_po_header_contr.approved_date
--,DECODE(lr_po_header_contr.approval_status,'APPROVED',lr_po_header_contr.print_count,0)
,DECODE(lr_po_header_contr.approval_status,'APPROVED',1,0)
,lr_po_header_contr.confirming_order_flag
,lr_po_header_contr.comments
,lr_po_header_contr.acceptance_required_flag
,'N'
,lr_po_header_contr.frozen_flag
,lr_po_header_contr.closed_code
,ln_org_id
,'XXCSR Conversion'
-- ,-- wf_item_type
-- ,-- wf_item_key
,'N'
,'PDOI'
,SYSDATE
, 1 -- style_id
,lc_freight_terms
,lr_po_header_contr.attribute_category
,lr_po_header_contr.pay_on_code
,'Y'
);
INSERT INTO PO_GA_ORG_ASSIGNMENTS(PO_HEADER_ID
,ORGANIZATION_ID
,ENABLED_FLAG
,VENDOR_SITE_ID
,LAST_UPDATE_DATE
,LAST_UPDATED_BY
,CREATION_DATE
,CREATED_BY
,LAST_UPDATE_LOGIN
,PURCHASING_ORG_ID
,ORG_ASSIGNMENT_ID
)
VALUES (ln_po_header_id
,ln_org_id
,'Y'
,ln_vendor_site_id
,SYSDATE
,FND_GLOBAL.USER_ID
,SYSDATE
,FND_GLOBAL.USER_ID
,FND_GLOBAL.LOGIN_ID
,ln_org_id
,PO_GA_ORG_ASSIGNMENTS_S.NEXTVAL
);
UPDATE xxcsr_po_headers_int
SET record_status = 'C'
,request_id = FND_GLOBAL.conc_request_id
,error_message = NULL
WHERE rowid = lr_po_header_contr.rowid;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
lc_error_details := SQLERRM;
UPDATE xxcsr_po_headers_int
SET record_status = 'E'
,request_id = FND_GLOBAL.conc_request_id
,error_message = lc_error_details
WHERE rowid = lr_po_header_contr.rowid;
END;
-- ln_header_cnt := ln_header_cnt + 1;
ELSE
UPDATE xxcsr_po_headers_int
SET record_status = 'E'
,request_id = FND_GLOBAL.conc_request_id
,error_message = lc_error_details
WHERE rowid = lr_po_header_contr.rowid;
END IF; --lc_error_details IS NULL
COMMIT;
END LOOP;
COMMIT;
--
EXCEPTION
WHEN EX_CONC_ERROR THEN
x_retcode := 2;
x_errbuf := lc_errmsg;
FND_FILE.PUT_LINE(FND_FILE.LOG,lc_errmsg);
WHEN OTHERS THEN
x_errbuf := SUBSTR(SQLERRM,1,200);
x_retcode := 2;
FND_FILE.PUT_LINE(FND_FILE.LOG,'Unexpected error occurred in import procedure at ' || lc_errloc || ' Error : ' || SQLERRM);
END import_csr;
-----=========================Import ZORAN procedure=========================
PROCEDURE import_zoran
(p_rec_status IN VARCHAR2
,p_instance_name IN VARCHAR2
,x_errbuf OUT NOCOPY VARCHAR2
,x_retcode OUT NOCOPY NUMBER
,x_header_cnt OUT NOCOPY NUMBER
,x_lines_cnt OUT NOCOPY NUMBER
,x_dist_cnt OUT NOCOPY NUMBER
,x_req_id OUT NOCOPY NUMBER
)
IS
--
CURSOR lcu_po_header_data (pv_rec_status VARCHAR2)
IS
SELECT XHEC.rowid,XHEC.*
FROM xxcsr_po_headers_int XHEC
WHERE XHEC.record_status = pv_rec_status
AND XHEC.request_id = gn_conc_req_id
AND XHEC.source_instance = p_instance_name
AND XHEC.document_type_code <> 'CONTRACT';
CURSOR lcu_po_header_contr (pv_rec_status VARCHAR2)
IS
SELECT XHEC.rowid,XHEC.*
FROM xxcsr_po_headers_int XHEC
WHERE XHEC.record_status = pv_rec_status
AND XHEC.request_id = gn_conc_req_id
AND XHEC.source_instance = p_instance_name
AND XHEC.document_type_code = 'CONTRACT';
CURSOR lcu_po_lines_data (pv_rec_status VARCHAR2)
IS
SELECT XHEC.rowid,XHEC.*
FROM xxcsr_po_lines_int XHEC
WHERE XHEC.record_status = pv_rec_status
AND XHEC.request_id = gn_conc_req_id
AND XHEC.source_instance = p_instance_name;
CURSOR lcu_po_dist_data (pv_rec_status VARCHAR2)
IS
SELECT XHEC.rowid,XHEC.*
FROM xxcsr_po_distributions_int XHEC
WHERE XHEC.record_status = pv_rec_status
AND XHEC.request_id = gn_conc_req_id
AND XHEC.source_instance = p_instance_name;
CURSOR lcu_chk_currency (pv_currency_code VARCHAR2)
IS
SELECT currency_code
FROM fnd_currencies
WHERE currency_code = pv_currency_code
AND enabled_flag = 'Y'
AND SYSDATE BETWEEN NVL(START_DATE_ACTIVE, SYSDATE) AND NVL(END_DATE_ACTIVE, SYSDATE);
CURSOR lcu_item_cat_id (pv_seg1 VARCHAR2,pv_seg2 VARCHAR2,pv_seg3 VARCHAR2,pv_seg4 VARCHAR2,pv_seg5 VARCHAR2)
IS
SELECT category_id
FROM mtl_categories
WHERE segment1 = pv_seg1
AND segment2 = pv_seg2
AND segment3 = pv_seg3
AND segment4 = pv_seg4
AND segment5 = pv_seg5
AND enabled_flag = 'Y'
AND SYSDATE BETWEEN NVL(START_DATE_ACTIVE, SYSDATE) AND NVL(END_DATE_ACTIVE, SYSDATE);
CURSOR lcu_get_int_header_id (pv_po_number VARCHAR2)
IS
SELECT interface_header_id
FROM po_headers_interface
WHERE document_num = pv_po_number
ORDER BY 1 DESC;
CURSOR lcu_get_int_line_id (pv_po_number VARCHAR2
,pv_po_line_number VARCHAR2
,p_shipment_num VARCHAR2)
IS
SELECT interface_line_id
FROM po_lines_interface
WHERE document_num = pv_po_number
AND line_num = pv_po_line_number
AND shipment_num = p_shipment_num;
CURSOR lcu_account_id (pv_seg1 VARCHAR2,pv_seg2 VARCHAR2,pv_seg3 VARCHAR2,pv_seg4 VARCHAR2,pv_seg5 VARCHAR2,pv_seg6 VARCHAR2,pv_seg7 VARCHAR2)
IS
SELECT code_combination_id
FROM gl_code_combinations_kfv
WHERE segment1 = pv_seg1
AND segment2 = pv_seg2
AND segment3 = pv_seg3
AND segment4 = pv_seg4
AND segment5 = pv_seg5
AND segment6 = pv_seg6
AND segment7 = pv_seg7;
CURSOR lcu_charge_account_id (p_ship_location NUMBER, p_second_inv VARCHAR2)
IS
SELECT GCC.code_combination_id
FROM gl_code_combinations gcc
,mtl_secondary_inventories msi
,hr_locations hl
WHERE MSI.material_account = GCC.code_combination_id
AND MSI.secondary_inventory_name = p_second_inv
AND MSI.organization_id = HL.inventory_organization_id
AND HL.location_id = p_ship_location;
CURSOR lcu_get_sob_id (pv_sob_name VARCHAR2)
IS
SELECT set_of_books_id
FROM gl_sets_of_books
WHERE name = pv_sob_name;
--sjacob commented below
CURSOR lcu_location_id (pv_loc_code VARCHAR2)
IS
SELECT location_id
FROM hr_locations
WHERE location_code = pv_loc_code;
CURSOR lcu_item_id(p_seg1 IN VARCHAR2
,p_seg2 IN VARCHAR2
,p_seg3 IN VARCHAR2 -- sjacob commented as per Siva's mail
)
IS
SELECT MSIB.inventory_item_id
FROM mtl_system_items_b MSIB
WHERE MSIB.segment1 = p_seg1
AND NVL(MSIB.segment2,-99) = NVL(p_seg2,-99)
AND NVL(MSIB.segment3,-99) = NVL(p_seg3,-99) -- sjacob commented as per Siva's mail
AND ROWNUM <= 1;
----------1)change
CURSOR lcu_vendor_der(p_vendor IN VARCHAR2)
IS
SELECT vendor_id
FROM AP_SUPPLIERS
WHERE attribute15 = p_vendor;
CURSOR lcu_hr_loc(p_location_code IN VARCHAR2)
IS
SELECT HLA.location_id
FROM hr_locations_all HLA
WHERE HLA.location_code = p_location_code;
CURSOR lcu_hr_loc_org(p_location_code IN VARCHAR2)
IS
SELECT HLA.location_id
,OOD.organization_code
FROM hr_locations_all HLA
,org_organization_definitions OOD
WHERE HLA.location_code = p_location_code
AND OOD.organization_id = HLA.inventory_organization_id;
CURSOR lcu_ship_po_line(p_po_number IN VARCHAR2
,p_shipment_num IN NUMBER
,p_line_num IN NUMBER)
IS
SELECT ship_to_location
FROM xxcsr_po_lines_int XPLI
WHERE XPLI.po_number = p_po_number
AND XPLI.shipment_num = p_shipment_num
AND XPLI.line_num = p_line_num
AND XPLI.source_instance = p_instance_name;
CURSOR lcu_func_curr(p_org_id IN NUMBER)
IS
SELECT GL.currency_code
FROM hr_operating_units HOU
,gl_ledgers GL
WHERE GL.ledger_id = HOU.set_of_books_id
AND HOU.organization_id = p_org_id;
CURSOR lcu_po_line_itm(p_po_num IN VARCHAR2)
IS
SELECT count('x')
FROM xxcsr_po_lines_int XPLI
WHERE XPLI.po_number = p_po_num
AND XPLI.itm_seg1_item_num IS NOT NULL
AND XPLI.source_instance = p_instance_name;
---------2)change
CURSOR lcu_vendor_site(p_vendor_site_code IN VARCHAR2
,p_vendor_id IN NUMBER)
IS
SELECT POVS.vendor_site_id
FROM AP_SUPPLIER_SITES_ALL POVS
WHERE POVS.vendor_site_code = p_vendor_site_code
AND POVS.vendor_id = p_vendor_id;
---------3)change
CURSOR lcu_vendor_contact(p_vendor_site_id IN NUMBER)
IS
SELECT PVC.vendor_contact_id
FROM AP_SUPPLIER_CONTACTS PVC
WHERE PVC.vendor_site_id = p_vendor_site_id;
CURSOR lcu_pay_term(p_payterm IN VARCHAR2)
IS
SELECT APT.term_id
FROM ap_terms APT
WHERE APT.name = p_payterm;
CURSOR lcu_check_po_exists(p_po_number IN VARCHAR2)
IS
SELECT 1
FROM po_headers_all PHA
WHERE PHA.segment1 = p_po_number;
CURSOR lcu_check_lines(p_po_number IN VARCHAR2)
IS
SELECT 1
FROM xxcsr_po_lines_int XPLI
WHERE XPLI.po_number = p_po_number;
CURSOR lcu_prim_uom(p_org_code IN VARCHAR2
,p_item_id IN NUMBER)
IS
SELECT MSIB.primary_unit_of_measure
FROM mtl_system_items_b MSIB
,mtl_parameters MP
WHERE MSIB.inventory_item_id = p_item_id
AND MSIB.organization_id = MP.master_organization_id
AND MP.organization_code = p_org_code;
--------4)change
CURSOR lcu_supsite_attr15(p_doc_num VARCHAR2
,p_lin_num VARCHAR2
,p_shp_num VARCHAR2)
IS
SELECT PVS.attribute15
FROM po_headers_interface PHI
,po_lines_interface PLI
,AP_SUPPLIER_SITES_ALL PVS
WHERE PHI.interface_header_id = PLI.interface_header_id
AND PHI.vendor_id = PVS.vendor_id
AND PHI.vendor_id = PVS.vendor_id
AND PVS.org_id = PHI.org_id
AND PVS.vendor_site_code = PHI.vendor_site_code
AND PLI.document_num = p_doc_num
AND PLI.line_num = p_lin_num
AND PLI.shipment_num = p_shp_num;
lr_po_header_data lcu_po_header_data%ROWTYPE;
lr_po_lines_data lcu_po_lines_data%ROWTYPE;
lr_po_dist_data lcu_po_dist_data%ROWTYPE;
lc_errmsg VARCHAR2(2000);
lc_errloc VARCHAR2(1000);
ln_request_id NUMBER;
lc_phase VARCHAR2(500);
lc_status VARCHAR2(500);
lc_devpha VARCHAR2(500);
lc_devsta VARCHAR2(500);
lc_mesg VARCHAR2(50);
lb_wait BOOLEAN;
ln_org_id NUMBER;
ln_item_org_id NUMBER;
ln_agent_id NUMBER;
lc_currency_code VARCHAR2(15);
ln_vendor_id NUMBER;
lc_payment_terms VARCHAR2(50);
lc_freight_terms VARCHAR2(25);
ln_item_id NUMBER;
lc_item_seg2 VARCHAR2(40);
lc_cat_seg1 VARCHAR2(40);
lc_cat_seg2 VARCHAR2(40);
lc_cat_seg3 VARCHAR2(40);
lc_cat_seg4 VARCHAR2(40);
lc_cat_seg5 VARCHAR2(40);
lc_inv_org_code VARCHAR2(30);
ln_cat_id NUMBER;
ln_po_int_header_id NUMBER;
ln_po_int_line_id NUMBER;
ln_tax_code_id NUMBER;
ln_charge_acct_id NUMBER;
ln_budget_acct_id NUMBER;
ln_accrual_acct_id NUMBER;
ln_variance_acct_id NUMBER;
ln_sob_id NUMBER;
ln_location_id NUMBER;
ln_person_org_id NUMBER;
ln_person_id NUMBER;
ln_bu_id NUMBER;
lc_chr_acc_seg1 VARCHAR2(40);
lc_chr_acc_seg2 VARCHAR2(40);
lc_chr_acc_seg3 VARCHAR2(40);
lc_chr_acc_seg4 VARCHAR2(40);
lc_chr_acc_seg5 VARCHAR2(40);
lc_chr_acc_seg6 VARCHAR2(40);
lc_chr_acc_seg7 VARCHAR2(40);
lc_bud_acc_seg1 VARCHAR2(40);
lc_bud_acc_seg2 VARCHAR2(40);
lc_bud_acc_seg3 VARCHAR2(40);
lc_bud_acc_seg4 VARCHAR2(40);
lc_bud_acc_seg5 VARCHAR2(40);
lc_bud_acc_seg6 VARCHAR2(40);
lc_bud_acc_seg7 VARCHAR2(40);
lc_accr_acc_seg1 VARCHAR2(40);
lc_accr_acc_seg2 VARCHAR2(40);
lc_accr_acc_seg3 VARCHAR2(40);
lc_accr_acc_seg4 VARCHAR2(40);
lc_accr_acc_seg5 VARCHAR2(40);
lc_accr_acc_seg6 VARCHAR2(40);
lc_accr_acc_seg7 VARCHAR2(40);
lc_var_acc_seg1 VARCHAR2(40);
lc_var_acc_seg2 VARCHAR2(40);
lc_var_acc_seg3 VARCHAR2(40);
lc_var_acc_seg4 VARCHAR2(40);
lc_var_acc_seg5 VARCHAR2(40);
lc_var_acc_seg6 VARCHAR2(40);
lc_var_acc_seg7 VARCHAR2(40);
lc_seg3_value VARCHAR2(40);
lc_seg5_value VARCHAR2(40);
lb_success BOOLEAN;
lc_error_details VARCHAR2(4000);
lc_error VARCHAR2(4000);
lc_errbuf VARCHAR2(240);
ln_retcode NUMBER;
ln_header_cnt NUMBER;
ln_lines_cnt NUMBER;
ln_dist_cnt NUMBER;
ln_cur_org_id NUMBER;
lc_new_orgname VARCHAR2(240);
lc_item_segment2 VARCHAR2(40);
lc_item_segment3 VARCHAR2(40);
lc_new_glacct VARCHAR2(240);
lc_new_cat VARCHAR2(2000);
lc_new_del VARCHAR2(240);
lc_new_org_name VARCHAR2(270);
lc_new_sobname VARCHAR2(270);
lc_business_group VARCHAR2(270);
ln_bill_loc_id NUMBER;
ln_ship_loc_id NUMBER;
lc_inv_po_chk VARCHAR2(270);
lc_func_curr VARCHAR2(15);
lc_rate_type VARCHAR2(30);
ln_rate NUMBER;
ld_rate_date DATE;
lc_new_ship VARCHAR2(240);
lc_new_bill VARCHAR2(240);
ln_line_item_cnt NUMBER;
ln_po_item_chk NUMBER;
ln_vendor_site_id NUMBER;
ln_vendor_contact_id NUMBER;
ln_term_id NUMBER;
lc_po_exists VARCHAR2(1);
lc_line_exists VARCHAR2(1);
lc_primary_uom VARCHAR2(25);
lc_ship_via_lookup_code VARCHAR2(25);
lc_line_ship_loc VARCHAR2(60);
lc_ship_org VARCHAR2(3);
ln_po_header_id NUMBER;
ex_conc_error EXCEPTION;
--
BEGIN
ln_header_cnt := 0;
--Process Purchase Orders data
lc_errloc := 'Process purchase orders data';
FOR lr_po_header_data IN lcu_po_header_data (p_rec_status)
LOOP
ln_org_id := NULL;
ln_agent_id := NULL;
ln_bu_id := NULL;
lc_currency_code := NULL;
ln_vendor_id := NULL;
lc_payment_terms := NULL;
lc_freight_terms := NULL;
lc_error_details := NULL;
lc_new_orgname := NULL;
lc_business_group := NULL;
ln_bill_loc_id := NULL;
ln_ship_loc_id := NULL;
lc_inv_po_chk := NULL;
lc_func_curr := NULL;
lc_rate_type := NULL;
ln_rate := NULL;
ld_rate_date := NULL;
lc_new_ship := NULL;
lc_new_bill := NULL;
lc_line_exists := NULL;
lc_primary_uom := NULL;
-- check if lines exist for this PO
OPEN lcu_check_lines(lr_po_header_data.po_number);
FETCH lcu_check_lines
INTO lc_line_exists;
CLOSE lcu_check_lines;
IF lc_line_exists IS NULL THEN
lc_error_details := lc_error_details||'No lines were found in the staging table for the given PO. ';
END IF;
lc_errloc := 'Operating unit related derivations';
lc_new_orgname := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_OPERATING_UNIT'
,'XXSIRF_CNV_OPERATING_UNIT'
,lr_po_header_data.operating_unit
);
IF lc_new_orgname IS NULL THEN
lc_error_details := lc_error_details||'Could not derive new operating unit for '||lr_po_header_data.operating_unit||'. ';
ELSE
ln_org_id := XXCSR_COMMON_PKG.get_organization_id(lc_new_orgname);
IF ln_org_id IS NULL THEN
lc_error_details := lc_error_details||'Could not derive org id for new operating unit '||lc_new_orgname||'. ';
ELSE
-- Compare functional and document currency
OPEN lcu_func_curr(ln_org_id);
FETCH lcu_func_curr
INTO lc_func_curr;
CLOSE lcu_func_curr;
IF lc_func_curr = lr_po_header_data.currency_code THEN
lc_rate_type := NULL;
ln_rate := NULL;
ld_rate_date := NULL;
ELSE
lc_rate_type := lr_po_header_data.rate_type;
ln_rate := lr_po_header_data.rate;
ld_rate_date := lr_po_header_data.rate_date;
END IF;
END IF;
END IF;
lc_errloc := 'Checking for inventory purchase orders';
lc_inv_po_chk := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_INV_SUPPLIERS'
,'XXSIRF_CNV_INV_SUPPLIERS'
,lr_po_header_data.vendor_name
);
IF lc_inv_po_chk IS NULL THEN
lc_error_details := lc_error_details||'Only inventory purchase orders will be migrated';
END IF;
IF lr_po_header_data.emp_bu_name IN ( 'CSR United States','CSR United Kingdom') THEN
lc_business_group := lr_po_header_data.emp_bu_name;
ELSE
lc_business_group := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_HR_BG'
,'XXSIRF_CNV_HR_BG'
,lr_po_header_data.emp_bu_name
);
END IF;
IF lc_business_group IS NULL THEN
lc_error_details := lc_error_details||'Mapping for Business Group '||lr_po_header_data.emp_bu_name||' could not be found. ';
ELSE
ln_bu_id := XXCSR_COMMON_PKG.get_business_group_id(lc_business_group);
IF ln_bu_id IS NULL THEN
lc_error_details:= lc_error_details||' Business Group ID for '||lc_business_group||' could not be derived. ';
ELSE
--Derive agent id
lc_errloc := 'Derive agent id';
ln_agent_id := XXCSR_COMMON_PKG.get_person_id (p_first_name => lr_po_header_data.emp_fname
,p_last_name => lr_po_header_data.emp_lname
,p_date_of_birth => lr_po_header_data.emp_dob
,p_business_group_id => ln_bu_id
);
IF ln_agent_id IS NULL THEN
lc_error_details := lc_error_details || ' Invalid agent (employee) details.';
END IF;
END IF;
END IF;
--Check currency code
lc_errloc := 'Check currency code';
OPEN lcu_chk_currency (lr_po_header_data.currency_code);
FETCH lcu_chk_currency
INTO lc_currency_code;
IF lcu_chk_currency%NOTFOUND THEN
lc_error_details := lc_error_details || ' Invalid currency code.';
END IF;
CLOSE lcu_chk_currency;
--Derive vendor id
lc_errloc := 'Derive vendor id';
IF lr_po_header_data.vendor_name IS NOT NULL THEN
OPEN lcu_vendor_der(lr_po_header_data.vendor_name);
FETCH lcu_vendor_der
INTO ln_vendor_id;
CLOSE lcu_vendor_der;
IF ln_vendor_id IS NULL THEN
lc_error_details := lc_error_details || ' Vendor not migrated.';
END IF;
END IF;
lc_errloc := 'Check payment terms';
IF lr_po_header_data.payment_terms IS NOT NULL THEN
lc_payment_terms := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_SUPPLIER_PAYTERMS'
,p_sirf_lookup => 'XXSIRF_CNV_SUPPLIER_PAYTERMS'
,p_old_value => lr_po_header_data.payment_terms
);
IF lc_payment_terms IS NULL THEN
lc_error_details := lc_error_details || ' Invalid payment terms.';
END IF;
END IF;
--Check freight terms
lc_errloc := 'Check freight terms';
IF lr_po_header_data.freight_terms IS NOT NULL THEN
lc_freight_terms := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_FREIGHT_TERMS'
,p_sirf_lookup => 'XXSIRF_CNV_FREIGHT_TERMS'
,p_old_value => lr_po_header_data.freight_terms
);
IF lc_freight_terms IS NULL THEN
lc_error_details := lc_error_details || ' Invalid freight terms.';
END IF;
END IF;
IF lr_po_header_data.ship_to_location IS NOT NULL THEN
lc_new_ship := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_DELIVER_LOCATIONS'
,'XXSIRF_CNV_DELIVER_LOCATIONS'
,lr_po_header_data.ship_to_location
);
IF lc_new_ship IS NULL THEN
lc_error_details := lc_error_details||'Could not derive new ship to location for '||lr_po_header_data.ship_to_location||' in XXCSR_CNV_DELIVER_LOCATIONS. ';
ELSE
OPEN lcu_hr_loc(lc_new_ship);
FETCH lcu_hr_loc
INTO ln_ship_loc_id;
CLOSE lcu_hr_loc;
IF ln_ship_loc_id IS NULL THEN
lc_error_details := lc_error_details || 'Ship to location id could not be derived for '||lr_po_header_data.ship_to_location;
END IF;
END IF;
END IF;
IF lr_po_header_data.bill_to_location IS NOT NULL THEN
lc_new_bill := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_BILLTO_LOCATIONS'
,'XXSIRF_CNV_BILLTO_LOCATIONS'
,lr_po_header_data.bill_to_location
);
IF lc_new_bill IS NULL THEN
lc_error_details := lc_error_details||'Could not derive new bill to location for '||lr_po_header_data.bill_to_location||' in XXCSR_CNV_BILLTO_LOCATIONS. ';
ELSE
OPEN lcu_hr_loc(lc_new_bill);
FETCH lcu_hr_loc
INTO ln_bill_loc_id;
CLOSE lcu_hr_loc;
IF ln_bill_loc_id IS NULL THEN
lc_error_details := lc_error_details || 'Bill to location id could not be derived for '||lr_po_header_data.bill_to_location;
END IF;
END IF;
END IF;
lc_ship_via_lookup_code := NULL;
IF lr_po_header_data.ship_via_lookup_code IS NOT NULL THEN
lc_ship_via_lookup_code := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_FREIGHT_CARRIER'
,'XXCSR_CNV_FREIGHT_CARRIER'
,lr_po_header_data.ship_via_lookup_code
);
END IF;
IF lc_error_details IS NULL THEN
--Insert purchase order header data in interface table
lc_errloc := 'Insert purchase order header data in interface table';
INSERT INTO po_headers_interface
(interface_header_id
,batch_id
,interface_source_code
,action
,process_code
,org_id
,document_type_code
,currency_code
,rate_type
,rate_date
,rate
,agent_id
,vendor_id
,vendor_site_code
,ship_to_location_id
,bill_to_location_id
,payment_terms
,freight_terms
,approval_status
,approved_date
-- ,revised_date
-- ,revision_num
,confirming_order_flag
,comments
,acceptance_required_flag
,print_count
-- ,printed_date
,frozen_flag
,closed_code
,from_rfq_num
,from_type_lookup_code
,attribute_category
--,attribute1
,attribute2
-- ,attribute3
--,global_attribute1
,pay_on_code
,last_update_date
,last_updated_by
,creation_date
,created_by
,document_num
,freight_carrier
)
VALUES
(po_headers_interface_s.nextval
,1
,'XXCSR Conversion'
,'ORIGINAL'
,'PENDING'
,ln_org_id
,lr_po_header_data.document_type_code -- 'STANDARD'
,lr_po_header_data.currency_code
,DECODE(lc_rate_type,'Corporate','User',lc_rate_type)
,ld_rate_date
,ln_rate
,ln_agent_id
,ln_vendor_id
,lr_po_header_data.vendor_site_code
,ln_ship_loc_id -- lr_po_header_data.ship_to_location
,ln_bill_loc_id -- lr_po_header_data.bill_to_location
,lc_payment_terms
,lc_freight_terms
,DECODE(lr_po_header_data.approval_status,'REQUIRES REAPPROVAL','INCOMPLETE',lr_po_header_data.approval_status)
,lr_po_header_data.approved_date
-- ,lr_po_header_data.revised_date
-- ,lr_po_header_data.revision_num
,lr_po_header_data.confirming_order_flag
,lr_po_header_data.comments
,lr_po_header_data.acceptance_required_flag
--,DECODE(lr_po_header_data.approval_status,'APPROVED',lr_po_header_data.print_count,0)
,DECODE(lr_po_header_data.approval_status,'APPROVED',1,0)
-- ,lr_po_header_data.printed_date
,lr_po_header_data.frozen_flag
,lr_po_header_data.closed_code
,lr_po_header_data.from_requisition_num
,lr_po_header_data.from_type_lookup_code
,lr_po_header_data.attribute_category
--,lr_po_header_data.sourcing_rule
,lr_po_header_data.osp_flag
--,lr_po_header_data.mrp_flag
--,lr_po_header_data.po_total_plus_ipi_tax
,lr_po_header_data.pay_on_code
,SYSDATE
,fnd_global.user_id
,SYSDATE
,fnd_global.user_id
,lr_po_header_data.po_number
,lc_ship_via_lookup_code
);
UPDATE xxcsr_po_headers_int
SET record_status = 'C'
,request_id = FND_GLOBAL.conc_request_id
,error_message = NULL
WHERE rowid = lr_po_header_data.rowid;
COMMIT;
ln_header_cnt := ln_header_cnt + 1;
ELSE
UPDATE xxcsr_po_headers_int
SET record_status = 'E'
,request_id = FND_GLOBAL.conc_request_id
,error_message = lc_error_details
WHERE rowid = lr_po_header_data.rowid;
END IF; --lc_error_details IS NULL
COMMIT;
END LOOP;
--COMMIT;
ln_lines_cnt := 0;
--Process Purchase Order Lines data
lc_errloc := 'Process purchase order lines data';
FOR lr_po_lines_data IN lcu_po_lines_data (p_rec_status)
LOOP
ln_org_id := NULL;
ln_item_org_id := NULL;
ln_item_id := NULL;
lc_item_seg2 := NULL;
lc_cat_seg1 := NULL;
lc_cat_seg2 := NULL;
lc_cat_seg3 := NULL;
lc_cat_seg4 := NULL;
lc_cat_seg5 := NULL;
ln_cat_id := NULL;
ln_po_int_header_id := NULL;
ln_tax_code_id := NULL;
lc_error_details := NULL;
lc_new_orgname := NULL;
lc_item_segment2 := NULL;
lc_new_glacct := NULL;
lc_new_cat := NULL;
lc_new_ship := NULL;
ln_ship_loc_id := NULL;
lc_new_org_name := NULL;
--Derive interface header id
lc_errloc := 'Derive interface header id';
OPEN lcu_get_int_header_id (lr_po_lines_data.po_number);
FETCH lcu_get_int_header_id
INTO ln_po_int_header_id;
CLOSE lcu_get_int_header_id;
IF ln_po_int_header_id IS NULL THEN
lc_error_details := lc_error_details || 'Could not derive interface header id. Header record may have error. ';
END IF;
FND_FILE.PUT_LINE(FND_FILE.LOG,'ln_po_int_header_id : ' || ln_po_int_header_id);
lc_errloc := 'Operating unit related derivations';
lc_new_orgname := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_OPERATING_UNIT'
,'XXSIRF_CNV_OPERATING_UNIT'
,lr_po_lines_data.org_name
);
IF lc_new_orgname IS NULL THEN
lc_error_details := lc_error_details||'Could not derive new operating unit for '||lr_po_lines_data.org_name||'. ';
ELSE
ln_org_id := XXCSR_COMMON_PKG.get_organization_id(lc_new_orgname);
IF ln_org_id IS NULL THEN
lc_error_details := lc_error_details||'Could not derive org id for new operating unit '||lc_new_orgname||'. ';
END IF;
END IF;
IF lr_po_lines_data.ship_to_location IS NOT NULL THEN
lc_new_ship := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_DELIVER_LOCATIONS'
,'XXSIRF_CNV_DELIVER_LOCATIONS'
,lr_po_lines_data.ship_to_location
);
IF lc_new_ship IS NULL THEN
lc_error_details := lc_error_details||'Could not derive new ship to location for '||lr_po_lines_data.ship_to_location||' in XXCSR_CNV_DELIVER_LOCATIONS. ';
ELSE
OPEN lcu_hr_loc(lc_new_ship);
FETCH lcu_hr_loc
INTO ln_ship_loc_id;
CLOSE lcu_hr_loc;
IF ln_ship_loc_id IS NULL THEN
lc_error_details := lc_error_details || 'Ship to location id could not be derived for '||lr_po_lines_data.ship_to_location;
END IF;
END IF;
END IF;
IF lr_po_lines_data.ship_to_org IS NOT NULL THEN
lc_new_org_name := XXCSR_COMMON_PKG.get_organization_code (p_instance_name
,lr_po_lines_data.ship_to_org);
IF lc_new_org_name IS NULL THEN
lc_error_details := lc_error_details||'Mapping for organization '||lr_po_lines_data.ship_to_org||' not found in the table XXCSR_CNV_ORG_MAPPINGS. ';
END IF;
END IF;
lc_item_segment3 := NULL;
IF lr_po_lines_data.itm_seg3_item_type = 'MT' THEN
lc_item_segment2 := 'MT';
lc_item_segment3 := NULL;
ELSIF lr_po_lines_data.itm_seg3_item_type = 'FL' THEN
lc_item_segment2 := 'PD';
lc_item_segment3 := NULL;
ELSE
lc_item_segment2 := lr_po_lines_data.itm_seg2_bom_level;
lc_item_segment3 := lr_po_lines_data.itm_seg3_item_type;
END IF;
lc_errloc := 'Derive inventory item id';
-- IF lr_po_lines_data.itm_seg1_item_num IS NOT NULL THEN
OPEN lcu_item_id(lr_po_lines_data.itm_seg1_item_num
,lc_item_segment2
,lc_item_segment3); --sjacob commented as per Siva's mail lr_po_lines_data.itm_seg3_item_type
FETCH lcu_item_id
INTO ln_item_id;
CLOSE lcu_item_id;
IF ln_item_id IS NULL THEN
lc_error_details := lc_error_details || ' Item number could not be derived.';
ELSE
-- DERIVE primary UOM for master item
IF lc_new_org_name IS NOT NULL THEN
OPEN lcu_prim_uom(lc_new_org_name
,ln_item_id);
FETCH lcu_prim_uom
INTO lc_primary_uom;
CLOSE lcu_prim_uom;
IF lc_primary_uom IS NULL THEN
lc_error_details := lc_error_details || 'Primary UOM code for the master item could not be derived';
END IF;
END IF;
END IF;
-- END IF;
lc_errloc := 'Derive new GL account';
lc_new_glacct := XXCSR_COMMON_PKG.get_lookup_meaning(p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_ACCOUNT'
,p_sirf_lookup => 'XXCSR_CNV_GL_ACCOUNT'
,p_old_value => lr_po_lines_data.gl_account
);
lc_new_cat := XXCSR_COMMON_PKG.get_lookup_meaning(p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_PO_CATEGORY'
,p_sirf_lookup => 'XXCSR_CNV_PO_CATEGORY'
,p_old_value => lc_new_glacct
);
IF lc_new_cat IS NULL THEN
lc_new_cat := 'MISCELLANEOUS.MISCELLANEOUS';
END IF;
IF lr_po_lines_data.inventory_item_flag = 'N' THEN
UPDATE xxcsr_po_distributions_int
SET destination_type_code = 'EXPENSE'
WHERE po_number = lr_po_lines_data.po_number
AND po_line_number = lr_po_lines_data.line_num
AND shipment_num = lr_po_lines_data.shipment_num
AND source_instance = p_instance_name;
ELSE
UPDATE xxcsr_po_distributions_int
SET destination_type_code = 'INVENTORY'
WHERE po_number = lr_po_lines_data.po_number
AND po_line_number = lr_po_lines_data.line_num
AND shipment_num = lr_po_lines_data.shipment_num
AND source_instance = p_instance_name;
END IF;
IF lc_error_details IS NULL THEN
--Insert purchase order lines data in interface table
lc_errloc := 'Insert purchase order lines data in interface table';
FND_FILE.PUT_LINE(FND_FILE.LOG,'Inserting in lines');
INSERT INTO po_lines_interface
(interface_line_id
,interface_header_id
,action
,process_code
,document_num
,line_num
,organization_id
,shipment_num
,shipment_type
,contract_num
,line_type
,item_id
,category
,item_description
,vendor_product_num
,unit_of_measure
,quantity
,unit_price
,list_price_per_unit
,allow_price_override_flag
,negotiated_by_preparer_flag
,note_to_vendor
,taxable_flag
-- ,tax_name
,type_1099
,capital_expense_flag
,price_type
,closed_code
,closed_reason
,closed_date
,closed_by
,over_tolerance_error_flag
,line_attribute_category_lines
-- ,line_attribute1
-- ,line_attribute2
-- ,line_attribute3
-- ,line_attribute4
-- ,line_attribute5
-- ,line_attribute6
-- ,line_attribute7
-- ,line_attribute8
-- ,line_attribute9
--,global_attribute1
-- ,tax_code_id
,secondary_unit_of_measure
,secondary_quantity
,inspection_required_flag
,receipt_required_flag
,invoice_close_tolerance
,receive_close_tolerance
,need_by_date
,promised_date
,consigned_flag
,base_unit_price
,last_update_date
,last_updated_by
,creation_date
,created_by
,ship_to_location_id
,ship_to_organization_code
)
VALUES
(po_lines_interface_s.nextval
,ln_po_int_header_id
,'ORIGINAL'
,'PENDING'
,lr_po_lines_data.po_number
,lr_po_lines_data.line_num
,ln_org_id
,lr_po_lines_data.shipment_num
,lr_po_lines_data.shipment_type
,lr_po_lines_data.contract_num
,lr_po_lines_data.line_type
,ln_item_id
,lc_new_cat
,lr_po_lines_data.item_description
,lr_po_lines_data.vendor_product_num
,lc_primary_uom --lr_po_lines_data.unit_of_measure
,lr_po_lines_data.quantity
,lr_po_lines_data.unit_price
,lr_po_lines_data.list_price_per_unit
,lr_po_lines_data.allow_price_override_flag
,lr_po_lines_data.negotiated_by_preparer_flag
,lr_po_lines_data.note_to_vendor
,lr_po_lines_data.taxable_flag
-- ,lr_po_lines_data.tax_name
,lr_po_lines_data.type_1099
,lr_po_lines_data.capital_expense_flag
,lr_po_lines_data.price_type
,lr_po_lines_data.closed_code
,lr_po_lines_data.closed_reason
,lr_po_lines_data.closed_date
,lr_po_lines_data.closed_by
,lr_po_lines_data.over_tolerance_error_flag
,lr_po_lines_data.line_attribute_category_lines
-- ,lr_po_lines_data.att1_item_number
-- ,lr_po_lines_data.att2_manufacturer
-- ,lr_po_lines_data.att3_manufacturer_part_no
-- ,lr_po_lines_data.att4_vendor_name
-- ,lr_po_lines_data.att5_last_po_price
-- ,lr_po_lines_data.att6_last_transaction_qty
-- ,lr_po_lines_data.att7_last_vendor_name
-- ,lr_po_lines_data.att8_item_id
-- ,lr_po_lines_data.att9_vendor_name
--,lr_po_lines_data.fisc_classification_code
-- ,ln_tax_code_id commented as per R04
,lr_po_lines_data.secondary_unit_of_measure
,lr_po_lines_data.secondary_quantity
,lr_po_lines_data.inspection_required_flag
,lr_po_lines_data.receipt_required_flag
,lr_po_lines_data.invoice_close_tolerance
,lr_po_lines_data.receive_close_tolerance
,lr_po_lines_data.need_by_date
,lr_po_lines_data.promised_date
,lr_po_lines_data.consigned_flag
,lr_po_lines_data.base_unit_price
,SYSDATE
,fnd_global.user_id
,SYSDATE
,fnd_global.user_id
,ln_ship_loc_id
,lc_new_org_name
);
UPDATE xxcsr_po_lines_int
SET record_status = 'C'
,request_id = FND_GLOBAL.conc_request_id
,error_message = NULL
WHERE rowid = lr_po_lines_data.rowid;
COMMIT;
ln_lines_cnt := ln_lines_cnt + 1;
ELSE
UPDATE xxcsr_po_lines_int
SET record_status = 'E'
,request_id = FND_GLOBAL.conc_request_id
,error_message = lc_error_details
WHERE rowid = lr_po_lines_data.rowid;
IF ln_po_int_header_id IS NOT NULL THEN
UPDATE xxcsr_po_headers_int
SET record_status = 'E'
,error_message = error_message||'error in lines record'
WHERE po_number = lr_po_lines_data.po_number
AND source_instance = p_instance_name;
DELETE FROM po_headers_interface
WHERE interface_header_id = ln_po_int_header_id;
ln_header_cnt := ln_header_cnt - 1;
END IF;
END IF; --lc_error_details IS NULL
COMMIT;
END LOOP;
--COMMIT;
ln_dist_cnt := 0;
--Process Purchase Order distributions data
lc_errloc := 'Process purchase order distributions data';
FOR lr_po_dist_data IN lcu_po_dist_data (p_rec_status)
LOOP
ln_org_id := NULL;
ln_sob_id := NULL;
ln_location_id := NULL;
lc_inv_org_code := NULL;
ln_person_org_id := NULL;
ln_person_id := NULL;
lc_error_details := NULL;
lc_new_orgname := NULL;
lc_new_del := NULL;
lc_new_org_name := NULL;
lc_new_sobname := NULL;
ln_po_int_line_id := NULL;
ln_po_int_header_id := NULL;
lc_business_group := NULL;
ln_bu_id := NULL;
lc_chr_acc_seg1 := NULL;
lc_chr_acc_seg2 := NULL;
lc_chr_acc_seg3 := NULL;
lc_chr_acc_seg4 := NULL;
lc_chr_acc_seg5 := NULL;
lc_chr_acc_seg6 := NULL;
lc_chr_acc_seg7 := NULL;
lc_bud_acc_seg1 := NULL;
lc_bud_acc_seg2 := NULL;
lc_bud_acc_seg3 := NULL;
lc_bud_acc_seg4 := NULL;
lc_bud_acc_seg5 := NULL;
lc_bud_acc_seg6 := NULL;
lc_bud_acc_seg7 := NULL;
lc_accr_acc_seg1 := NULL;
lc_accr_acc_seg2 := NULL;
lc_accr_acc_seg3 := NULL;
lc_accr_acc_seg4 := NULL;
lc_accr_acc_seg5 := NULL;
lc_accr_acc_seg6 := NULL;
lc_accr_acc_seg7 := NULL;
lc_var_acc_seg1 := NULL;
lc_var_acc_seg2 := NULL;
lc_var_acc_seg3 := NULL;
lc_var_acc_seg4 := NULL;
lc_var_acc_seg5 := NULL;
lc_var_acc_seg6 := NULL;
lc_var_acc_seg7 := NULL;
ln_charge_acct_id := NULL;
ln_budget_acct_id := NULL;
ln_accrual_acct_id := NULL;
ln_variance_acct_id := NULL;
lc_seg3_value := NULL;
lc_seg5_value := NULL;
--Derive interface header id
lc_errloc := 'Derive interface header id';
OPEN lcu_get_int_header_id (lr_po_dist_data.po_number);
FETCH lcu_get_int_header_id
INTO ln_po_int_header_id;
CLOSE lcu_get_int_header_id;
IF ln_po_int_header_id IS NULL THEN
lc_error_details := lc_error_details || 'Could not derive interface header id. Header record may have error. ';
END IF;
--Derive interface line id
lc_errloc := 'Derive interface line id';
OPEN lcu_get_int_line_id (lr_po_dist_data.po_number
,lr_po_dist_data.po_line_number
,lr_po_dist_data.shipment_num);
FETCH lcu_get_int_line_id
INTO ln_po_int_line_id;
CLOSE lcu_get_int_line_id;
IF ln_po_int_line_id IS NULL THEN
lc_error_details := lc_error_details || 'Could not derive interface line id. Header/Line record may have error. ';
END IF;
lc_errloc := 'Operating unit related derivations';
lc_new_orgname := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_OPERATING_UNIT'
,'XXSIRF_CNV_OPERATING_UNIT'
,lr_po_dist_data.org_name
);
IF lc_new_orgname IS NULL THEN
lc_error_details := lc_error_details||'Could not derive new operating unit for '||lr_po_dist_data.org_name||'. ';
ELSE
ln_org_id := XXCSR_COMMON_PKG.get_organization_id(lc_new_orgname);
IF ln_org_id IS NULL THEN
lc_error_details := lc_error_details||'Could not derive org id for new operating unit '||lc_new_orgname||'. ';
END IF;
END IF;
--Derive sob id
lc_new_sobname := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_SOB_NAME'
,'XXSIRF_CNV_SOB_NAME'
,lr_po_dist_data.set_of_books
);
IF lc_new_sobname IS NULL THEN
lc_error_details := lc_error_details||'Could not derive new sob for '||lr_po_dist_data.set_of_books||' in XXCSR_CNV_SOB_NAME. ';
ELSE
lc_errloc := 'Derive sob id';
OPEN lcu_get_sob_id (lc_new_sobname);
FETCH lcu_get_sob_id
INTO ln_sob_id;
CLOSE lcu_get_sob_id;
IF ln_sob_id IS NULL THEN
lc_error_details := lc_error_details || ' Invalid sets of books name- '||lc_new_sobname;
END IF;
END IF;
IF lr_po_dist_data.deliver_to_location IS NOT NULL THEN
lc_new_del := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_DELIVER_LOCATIONS'
,'XXSIRF_CNV_DELIVER_LOCATIONS'
,lr_po_dist_data.deliver_to_location
);
IF lc_new_del IS NULL THEN
lc_error_details := lc_error_details||'Could not derive new deliver to location for '||lr_po_dist_data.deliver_to_location||' in XXCSR_CNV_DELIVER_LOCATIONS. ';
ELSE
--Derive deliver to location id
lc_errloc := 'Derive deliver to location id';
OPEN lcu_location_id (lc_new_del);
FETCH lcu_location_id
INTO ln_location_id;
CLOSE lcu_location_id;
IF ln_location_id IS NULL THEN
lc_error_details := lc_error_details || ' Invalid deliver to location code.';
END IF;
END IF;
END IF;
IF lr_po_dist_data.destination_organization IS NOT NULL THEN
lc_new_org_name := XXCSR_COMMON_PKG.get_organization_code (p_instance_name
,lr_po_dist_data.destination_organization);
IF lc_new_org_name IS NULL THEN
lc_error_details := lc_error_details||'Mapping for organization '||lr_po_dist_data.destination_organization||' not found in the table XXCSR_CNV_ORG_MAPPINGS. ';
END IF;
END IF;
--Derive deliver to person id
IF lr_po_dist_data.delv_per_fname IS NOT NULL THEN
lc_business_group := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_HR_BG'
,'XXSIRF_CNV_HR_BG'
,lr_po_dist_data.delv_per_org_name
);
IF lc_business_group IS NULL THEN
lc_error_details := lc_error_details||'Mapping for Business Group '||lr_po_dist_data.delv_per_org_name||' could not be found. ';
ELSE
ln_bu_id := XXCSR_COMMON_PKG.get_business_group_id(lc_business_group);
IF ln_bu_id IS NULL THEN
lc_error_details:= lc_error_details||' Business Group ID for '||lc_business_group||' could not be derived. ';
--Derive deliver to person id
lc_errloc := 'Derive deliver to person id';
ln_person_id := XXCSR_COMMON_PKG.get_person_id (p_first_name => lr_po_dist_data.delv_per_fname
,p_last_name => lr_po_dist_data.delv_per_lname
,p_date_of_birth => lr_po_dist_data.delv_per_dob
,p_business_group_id => ln_bu_id
);
IF ln_person_id IS NULL THEN
lc_error_details := lc_error_details || ' Invalid agent (employee) details.';
END IF;
END IF;
END IF;
END IF;
--BUDGET ACCOUNT
--Derive budget account segment1 from lookup
lc_errloc := 'Derive budget account segment1 from lookup';
IF (lr_po_dist_data.bud_acc_seg1 IS NOT NULL OR lr_po_dist_data.bud_acc_seg2 IS NOT NULL OR
lr_po_dist_data.bud_acc_seg3 IS NOT NULL OR lr_po_dist_data.bud_acc_seg4 IS NOT NULL OR
lr_po_dist_data.bud_acc_seg5 IS NOT NULL OR lr_po_dist_data.bud_acc_seg6 IS NOT NULL OR
lr_po_dist_data.bud_acc_seg7 IS NOT NULL) THEN
lc_bud_acc_seg1 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_COMPANY'
,p_sirf_lookup => 'XXSIRF_CNV_GL_COMPANY'
,p_old_value => lr_po_dist_data.bud_acc_seg1
);
--Derive budget account segment2 from lookup
lc_errloc := 'Derive budget account segment2 from lookup';
lc_bud_acc_seg2 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_ACCOUNT'
,p_sirf_lookup => 'XXSIRF_CNV_GL_ACCOUNT'
,p_old_value => lr_po_dist_data.bud_acc_seg2
);
--Derive budget account segment3 from lookup
lc_errloc := 'Derive budget account segment3 from lookup';
/* lc_bud_acc_seg3 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_BU'
,p_sirf_lookup => 'XXSIRF_CNV_GL_BU'
,p_old_value => lr_po_dist_data.bud_acc_seg4
); */
lc_seg3_value := NULL;
IF UPPER(lr_po_dist_data.bud_acc_seg4) = LOWER(lr_po_dist_data.bud_acc_seg4) THEN
lc_seg3_value := lr_po_dist_data.bud_acc_seg3;
ELSE
lc_seg3_value := lr_po_dist_data.bud_acc_seg4;
END IF;
lc_bud_acc_seg3 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_BU'
,p_sirf_lookup => 'XXSIRF_CNV_GL_BU'
,p_old_value => lc_seg3_value
);
--Derive budget account segment4 from lookup
lc_errloc := 'Derive budget account segment4 from lookup';
lc_bud_acc_seg4 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_DEPARTMENT'
,p_sirf_lookup => 'XXSIRF_CNV_GL_DEPARTMENT'
,p_old_value => lr_po_dist_data.bud_acc_seg4
);
--Derive budget account segment5 from lookup
lc_errloc := 'Derive budget account segment5 from lookup';
/* lc_bud_acc_seg5 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_PRODPROJ'
,p_sirf_lookup => 'XXSIRF_CNV_GL_PRODPROJ'
,p_old_value => lr_po_dist_data.bud_acc_seg5
); */
lc_seg5_value := NULL;
/* Segments 5 and 6 in the legacy instance both map onto Segment 5 in the target instance.
When mapping the data, take whichever one of the legacy instance values
in non-zero and map using lookup XXCSR_CNV_GL_PRODPROJ.
If both legacy values are zero, use the default of '000000' for Segment 5 of the target GL Account. */
IF UPPER(lr_po_dist_data.bud_acc_seg5) = LOWER(lr_po_dist_data.bud_acc_seg5) THEN -- 5 numeric
IF TO_NUMBER(lr_po_dist_data.bud_acc_seg5) = 0 THEN -- 5 is zero
IF UPPER(lr_po_dist_data.bud_acc_seg6) != LOWER(lr_po_dist_data.bud_acc_seg6) THEN
lc_seg5_value := lr_po_dist_data.bud_acc_seg6;
ELSIF TO_NUMBER(lr_po_dist_data.bud_acc_seg6) = 0 THEN -- 6 is zero
lc_seg5_value := '000000';
ELSE
lc_seg5_value := lr_po_dist_data.bud_acc_seg6;
END IF;
ELSE
IF UPPER(lr_po_dist_data.bud_acc_seg6) != LOWER(lr_po_dist_data.bud_acc_seg6) THEN
lc_error_details := lc_error_details || 'Both segment5('||lr_po_dist_data.bud_acc_seg5||') and segment6('||lr_po_dist_data.bud_acc_seg6||') cannot be non zero';
ELSIF TO_NUMBER(lr_po_dist_data.bud_acc_seg6) = 0 THEN -- 6 is zero
lc_seg5_value := lr_po_dist_data.bud_acc_seg5;
ELSE
lc_error_details := lc_error_details || 'Both segment5('||lr_po_dist_data.bud_acc_seg5||') and segment6('||lr_po_dist_data.bud_acc_seg6||') cannot be non zero';
END IF;
END IF;
ELSE -- 5 non numeric
IF UPPER(lr_po_dist_data.bud_acc_seg6) != LOWER(lr_po_dist_data.bud_acc_seg6) THEN
lc_error_details := lc_error_details || 'Both segment5('||lr_po_dist_data.bud_acc_seg5||') and segment6('||lr_po_dist_data.bud_acc_seg6||') cannot be non zero';
ELSIF TO_NUMBER(lr_po_dist_data.bud_acc_seg6) = 0 THEN -- 6 is zero
lc_seg5_value := lr_po_dist_data.bud_acc_seg5;
ELSE
lc_error_details := lc_error_details || 'Both segment5('||lr_po_dist_data.bud_acc_seg5||') and segment6('||lr_po_dist_data.bud_acc_seg6||') cannot be non zero';
END IF;
END IF;
IF lc_seg5_value IS NOT NULL AND lc_seg5_value != '000000' THEN
lc_bud_acc_seg5 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_PRODPROJ'
,p_sirf_lookup => 'XXSIRF_CNV_GL_PRODPROJ'
,p_old_value => lc_seg5_value
);
ELSIF lc_seg5_value IS NOT NULL AND lc_seg5_value = '000000' THEN
lc_bud_acc_seg5 := lc_seg5_value;
END IF;
--Derive budget account segment6 from lookup
lc_errloc := 'Derive budget account segment6 from lookup';
/* lc_bud_acc_seg6 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_INTERCO'
,p_sirf_lookup => 'XXSIRF_CNV_GL_INTERCO'
,p_old_value => lr_po_dist_data.bud_acc_seg6
); */
lc_bud_acc_seg6 := '000';
--Derive budget account segment7 from lookup
lc_errloc := 'Derive budget account segment7 from lookup';
/* lc_bud_acc_seg7 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_BUD_ACC7_LKUP'
,p_sirf_lookup => 'XXSIRF_BUD_ACC7_LKUP'
,p_old_value => lr_po_dist_data.bud_acc_seg7
); */
lc_bud_acc_seg7 := '00000';
END IF;
IF (lr_po_dist_data.accr_acc_seg1 IS NOT NULL OR lr_po_dist_data.accr_acc_seg2 IS NOT NULL OR
lr_po_dist_data.accr_acc_seg3 IS NOT NULL OR lr_po_dist_data.accr_acc_seg4 IS NOT NULL OR
lr_po_dist_data.accr_acc_seg5 IS NOT NULL OR lr_po_dist_data.accr_acc_seg6 IS NOT NULL OR
lr_po_dist_data.accr_acc_seg7 IS NOT NULL) THEN
--ACCRUAL ACCOUNT
--Derive accrual account segment1 from lookup
lc_errloc := 'Derive accrual account segment1 from lookup';
lc_accr_acc_seg1 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_COMPANY'
,p_sirf_lookup => 'XXSIRF_CNV_GL_COMPANY'
,p_old_value => lr_po_dist_data.accr_acc_seg1
);
-- Change by manishar 12/04/10 as per mdt v1.26
-- Deriving Attribute15 of the corresponding Suppliers Address
lc_errloc := 'Derive accrual account segment2 from lookup';
lc_accr_acc_seg2 := NULL;
OPEN lcu_supsite_attr15(lr_po_dist_data.po_number
,lr_po_dist_data.po_line_number
,lr_po_dist_data.shipment_num);
FETCH lcu_supsite_attr15 INTO lc_accr_acc_seg2;
CLOSE lcu_supsite_attr15;
--Derive accrual account segment2 from lookup
IF lc_accr_acc_seg2 IS NULL THEN
lc_accr_acc_seg2 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_ACCOUNT'
,p_sirf_lookup => 'XXSIRF_CNV_GL_ACCOUNT'
,p_old_value => lr_po_dist_data.accr_acc_seg2
);
END IF;
--Derive accrual account segment3 from lookup
lc_errloc := 'Derive accrual account segment3 from lookup';
lc_accr_acc_seg3 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_BU'
,p_sirf_lookup => 'XXSIRF_CNV_GL_BU'
,p_old_value => lr_po_dist_data.accr_acc_seg3
);
--Derive accrual account segment4 from lookup
lc_errloc := 'Derive accrual account segment4 from lookup';
/* lc_accr_acc_seg4 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_DEPARTMENT'
,p_sirf_lookup => 'XXSIRF_CNV_GL_DEPARTMENT'
,p_old_value => lr_po_dist_data.accr_acc_seg4
); */
--Derive budget account segment4 from lookup
lc_errloc := 'Derive budget account segment4 from lookup';
lc_accr_acc_seg4 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_DEPARTMENT'
,p_sirf_lookup => 'XXSIRF_CNV_GL_DEPARTMENT'
,p_old_value => lr_po_dist_data.accr_acc_seg4
);
--Derive accrual account segment5 from lookup
lc_errloc := 'Derive accrual account segment5 from lookup';
lc_accr_acc_seg5 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_PRODPROJ'
,p_sirf_lookup => 'XXSIRF_CNV_GL_PRODPROJ'
,p_old_value => lr_po_dist_data.accr_acc_seg5
);
--Derive accrual account segment6 from lookup
lc_errloc := 'Derive accrual account segment6 from lookup';
/* lc_accr_acc_seg6 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_INTERCO'
,p_sirf_lookup => 'XXSIRF_CNV_GL_INTERCO'
,p_old_value => lr_po_dist_data.accr_acc_seg6
); */
lc_accr_acc_seg6 := '000';
--Derive accrual account segment7 from lookup
lc_errloc := 'Derive accrual account segment7 from lookup';
/* lc_accr_acc_seg7 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_ACCR_ACC7_LKUP'
,p_sirf_lookup => 'XXSIRF_ACCR_ACC7_LKUP'
,p_old_value => lr_po_dist_data.accr_acc_seg7
); */
lc_accr_acc_seg7 := '00000';
END IF;
IF (lr_po_dist_data.var_acc_seg1 IS NOT NULL OR lr_po_dist_data.var_acc_seg2 IS NOT NULL OR
lr_po_dist_data.var_acc_seg3 IS NOT NULL OR lr_po_dist_data.var_acc_seg4 IS NOT NULL OR
lr_po_dist_data.var_acc_seg5 IS NOT NULL OR lr_po_dist_data.var_acc_seg6 IS NOT NULL OR
lr_po_dist_data.var_acc_seg7 IS NOT NULL) THEN
--VARIANCE ACCOUNT
--Derive variance account segment1 from lookup
lc_errloc := 'Derive variance account segment1 from lookup';
lc_var_acc_seg1 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_COMPANY'
,p_sirf_lookup => 'XXSIRF_CNV_GL_COMPANY'
,p_old_value => lr_po_dist_data.var_acc_seg1
);
--Derive variance account segment2 from lookup
lc_errloc := 'Derive variance account segment2 from lookup';
lc_var_acc_seg2 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_ACCOUNT'
,p_sirf_lookup => 'XXSIRF_CNV_GL_ACCOUNT'
,p_old_value => lr_po_dist_data.var_acc_seg2
);
--Derive variance account segment3 from lookup
lc_errloc := 'Derive variance account segment3 from lookup';
lc_var_acc_seg3 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_BU'
,p_sirf_lookup => 'XXSIRF_CNV_GL_BU'
,p_old_value => lr_po_dist_data.var_acc_seg4
);
--Derive variance account segment4 from lookup
lc_errloc := 'Derive variance account segment4 from lookup';
/* lc_var_acc_seg4 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_DEPARTMENT'
,p_sirf_lookup => 'XXSIRF_CNV_GL_DEPARTMENT'
,p_old_value => lr_po_dist_data.var_acc_seg4
); */
lc_seg3_value := NULL;
IF UPPER(lr_po_dist_data.var_acc_seg4) = LOWER(lr_po_dist_data.var_acc_seg4) THEN
lc_seg3_value := lr_po_dist_data.var_acc_seg3;
ELSE
lc_seg3_value := lr_po_dist_data.var_acc_seg4;
END IF;
lc_var_acc_seg3 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_BU'
,p_sirf_lookup => 'XXSIRF_CNV_GL_BU'
,p_old_value => lc_seg3_value
);
--Derive budget account segment4 from lookup
lc_errloc := 'Derive budget account segment4 from lookup';
lc_var_acc_seg4 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_DEPARTMENT'
,p_sirf_lookup => 'XXSIRF_CNV_GL_DEPARTMENT'
,p_old_value => lr_po_dist_data.var_acc_seg4
);
--Derive variance account segment5 from lookup
lc_errloc := 'Derive variance account segment5 from lookup';
/* lc_var_acc_seg5 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_PRODPROJ'
,p_sirf_lookup => 'XXSIRF_CNV_GL_PRODPROJ'
,p_old_value => lr_po_dist_data.var_acc_seg5
); */
lc_seg5_value := NULL;
/* Segments 5 and 6 in the legacy instance both map onto Segment 5 in the target instance.
When mapping the data, take whichever one of the legacy instance values
in non-zero and map using lookup XXCSR_CNV_GL_PRODPROJ.
If both legacy values are zero, use the default of '000000' for Segment 5 of the target GL Account. */
IF UPPER(lr_po_dist_data.var_acc_seg5) = LOWER(lr_po_dist_data.var_acc_seg5) THEN -- 5 numeric
IF TO_NUMBER(lr_po_dist_data.var_acc_seg5) = 0 THEN -- 5 is zero
IF UPPER(lr_po_dist_data.var_acc_seg6) != LOWER(lr_po_dist_data.var_acc_seg6) THEN
lc_seg5_value := lr_po_dist_data.var_acc_seg6;
ELSIF TO_NUMBER(lr_po_dist_data.var_acc_seg6) = 0 THEN -- 6 is zero
lc_seg5_value := '000000';
ELSE
lc_seg5_value := lr_po_dist_data.var_acc_seg6;
END IF;
ELSE
IF UPPER(lr_po_dist_data.var_acc_seg6) != LOWER(lr_po_dist_data.var_acc_seg6) THEN
lc_error_details := lc_error_details || 'Both segment5('||lr_po_dist_data.var_acc_seg5||') and segment6('||lr_po_dist_data.var_acc_seg6||') cannot be non zero';
ELSIF TO_NUMBER(lr_po_dist_data.var_acc_seg6) = 0 THEN -- 6 is zero
lc_seg5_value := lr_po_dist_data.var_acc_seg5;
ELSE
lc_error_details := lc_error_details || 'Both segment5('||lr_po_dist_data.var_acc_seg5||') and segment6('||lr_po_dist_data.var_acc_seg6||') cannot be non zero';
END IF;
END IF;
ELSE -- 5 non numeric
IF UPPER(lr_po_dist_data.var_acc_seg6) != LOWER(lr_po_dist_data.var_acc_seg6) THEN
lc_error_details := lc_error_details || 'Both segment5('||lr_po_dist_data.var_acc_seg5||') and segment6('||lr_po_dist_data.var_acc_seg6||') cannot be non zero';
ELSIF TO_NUMBER(lr_po_dist_data.var_acc_seg6) = 0 THEN -- 6 is zero
lc_seg5_value := lr_po_dist_data.var_acc_seg5;
ELSE
lc_error_details := lc_error_details || 'Both segment5('||lr_po_dist_data.var_acc_seg5||') and segment6('||lr_po_dist_data.var_acc_seg6||') cannot be non zero';
END IF;
END IF;
IF lc_seg5_value IS NOT NULL AND lc_seg5_value != '000000' THEN
lc_var_acc_seg5 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_PRODPROJ'
,p_sirf_lookup => 'XXSIRF_CNV_GL_PRODPROJ'
,p_old_value => lc_seg5_value
);
ELSIF lc_seg5_value IS NOT NULL AND lc_seg5_value = '000000' THEN
lc_var_acc_seg5 := lc_seg5_value;
END IF;
--Derive variance account segment6 from lookup
lc_errloc := 'Derive variance account segment6 from lookup';
/* lc_var_acc_seg6 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_GL_INTERCO'
,p_sirf_lookup => 'XXSIRF_CNV_GL_INTERCO'
,p_old_value => lr_po_dist_data.var_acc_seg6
); */
lc_var_acc_seg6 := '000';
--Derive variance account segment7 from lookup
lc_errloc := 'Derive variance account segment7 from lookup';
/* lc_var_acc_seg7 := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_VAR_ACC7_LKUP'
,p_sirf_lookup => 'XXSIRF_VAR_ACC7_LKUP'
,p_old_value => lr_po_dist_data.var_acc_seg7
); */
lc_var_acc_seg7 := '00000';
END IF;
/*
--Derive charge account id
lc_errloc := 'Derive charge account id';
OPEN lcu_account_id (lc_chr_acc_seg1
,lc_chr_acc_seg2
,lc_chr_acc_seg3
,lc_chr_acc_seg4
,lc_chr_acc_seg5
,lc_chr_acc_seg6
,lc_chr_acc_seg7);
FETCH lcu_account_id
INTO ln_charge_acct_id;
CLOSE lcu_account_id;
IF ln_charge_acct_id IS NULL THEN
lc_error_details := lc_error_details || 'Could not derive charge of accounts id :-'||lc_chr_acc_seg1||'-'||lc_chr_acc_seg2||'-'||lc_chr_acc_seg3||'-'||lc_chr_acc_seg4||'-'||lc_chr_acc_seg5||'-'||lc_chr_acc_seg6||'-'||lc_chr_acc_seg7;
END IF;
*/
lc_line_ship_loc := NULL;
lc_new_ship := NULL;
ln_ship_loc_id := NULL;
lc_ship_org := NULL;
OPEN lcu_ship_po_line(lr_po_dist_data.po_number
,lr_po_dist_data.shipment_num
,lr_po_dist_data.po_line_number);
FETCH lcu_ship_po_line
INTO lc_line_ship_loc;
CLOSE lcu_ship_po_line;
lc_new_ship := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_DELIVER_LOCATIONS'
,'XXSIRF_CNV_DELIVER_LOCATIONS'
,lc_line_ship_loc
);
OPEN lcu_hr_loc_org(lc_new_ship);
FETCH lcu_hr_loc_org
INTO ln_ship_loc_id
,lc_ship_org;
CLOSE lcu_hr_loc_org;
IF lc_ship_org = 'CSD' THEN
OPEN lcu_charge_account_id(ln_ship_loc_id,'UK_MAIN');
FETCH lcu_charge_account_id INTO ln_charge_acct_id ;
CLOSE lcu_charge_account_id;
IF ln_charge_acct_id IS NULL THEN
lc_error_details := lc_error_details || 'Could not derive charge of accounts id ';
END IF;
ELSIF lc_ship_org = 'CSI' THEN
OPEN lcu_charge_account_id(ln_ship_loc_id,'CSI_MAIN');
FETCH lcu_charge_account_id INTO ln_charge_acct_id ;
CLOSE lcu_charge_account_id;
IF ln_charge_acct_id IS NULL THEN
lc_error_details := lc_error_details || 'Could not derive charge of accounts id ';
END IF;
ELSIF lc_ship_org = 'CSL' THEN
OPEN lcu_charge_account_id(ln_ship_loc_id,'CSL_MAIN');
FETCH lcu_charge_account_id INTO ln_charge_acct_id ;
CLOSE lcu_charge_account_id;
IF ln_charge_acct_id IS NULL THEN
lc_error_details := lc_error_details || 'Could not derive charge of accounts id ';
END IF;
ELSIF lc_ship_org = 'CDC' THEN
OPEN lcu_charge_account_id(ln_ship_loc_id,'AK1_COM');
FETCH lcu_charge_account_id INTO ln_charge_acct_id ;
CLOSE lcu_charge_account_id;
IF ln_charge_acct_id IS NULL THEN
lc_error_details := lc_error_details || 'Could not derive charge of accounts id ';
END IF;
ELSE
OPEN lcu_charge_account_id(ln_ship_loc_id,'RM_COM');
FETCH lcu_charge_account_id INTO ln_charge_acct_id ;
CLOSE lcu_charge_account_id;
IF ln_charge_acct_id IS NULL THEN
lc_error_details := lc_error_details || 'Could not derive charge of accounts id ';
END IF;
END IF;
--Derive budget account id
lc_errloc := 'Derive budget account id';
OPEN lcu_account_id (lc_bud_acc_seg1
,lc_bud_acc_seg2
,lc_bud_acc_seg3
,lc_bud_acc_seg4
,lc_bud_acc_seg5
,lc_bud_acc_seg6
,lc_bud_acc_seg7);
FETCH lcu_account_id
INTO ln_budget_acct_id;
CLOSE lcu_account_id;
--Derive accrual account id
lc_errloc := 'Derive accrual account id';
OPEN lcu_account_id (lc_accr_acc_seg1
,lc_accr_acc_seg2
,lc_accr_acc_seg3
,lc_accr_acc_seg4
,lc_accr_acc_seg5
,lc_accr_acc_seg6
,lc_accr_acc_seg7);
FETCH lcu_account_id
INTO ln_accrual_acct_id;
CLOSE lcu_account_id;
--Derive variance account id
lc_errloc := 'Derive variance account id';
OPEN lcu_account_id (lc_var_acc_seg1
,lc_var_acc_seg2
,lc_var_acc_seg3
,lc_var_acc_seg4
,lc_var_acc_seg5
,lc_var_acc_seg6
,lc_var_acc_seg7);
FETCH lcu_account_id
INTO ln_variance_acct_id;
CLOSE lcu_account_id;
IF lc_error_details IS NULL THEN
--Insert purchase order distrbutions data in interface table
lc_errloc := 'Insert purchase order distrbutions data in interface table';
INSERT INTO po_distributions_interface
(interface_line_id
,interface_header_id
,interface_distribution_id
,process_code
,distribution_num
,org_id
,quantity_ordered
,quantity_delivered
,quantity_billed
,quantity_cancelled
,rate_date
,rate
,deliver_to_location_id
,deliver_to_person_id
,destination_type_code
,destination_organization
,destination_context
,set_of_books
,charge_account_id
,budget_account_id
,accrual_account_id
,variance_account_id
,amount_billed
,accrue_on_receipt_flag
,accrued_flag
,prevent_encumbrance_flag
,encumbered_flag
,gl_cancelled_date
--,requisition_num
--,requisition_line_num
--,req_distribution_num
,project_accounting_context
,recoverable_tax
,nonrecoverable_tax
-- ,recovery_rate
-- ,tax_recovery_override_flag
,last_update_date
,last_updated_by
,creation_date
,created_by
)
VALUES
(ln_po_int_line_id
,ln_po_int_header_id
,po_distributions_interface_s.nextval
,'PENDING'
,lr_po_dist_data.distribution_num
,ln_org_id
,(lr_po_dist_data.quantity_ordered - lr_po_dist_data.quantity_delivered - lr_po_dist_data.quantity_cancelled)
,0 --lr_po_dist_data.quantity_delivered
,0 --lr_po_dist_data.quantity_billed
,0 --lr_po_dist_data.quantity_cancelled
,lr_po_dist_data.rate_date
,lr_po_dist_data.rate
,ln_location_id
,ln_person_id
,lr_po_dist_data.destination_type_code
,lc_new_org_name --lr_po_dist_data.destination_organization
,lr_po_dist_data.destination_context
,ln_sob_id
,ln_charge_acct_id
,ln_budget_acct_id
,ln_accrual_acct_id
,ln_variance_acct_id
,lr_po_dist_data.amount_billed
,'Y' -- lr_po_dist_data.accrue_on_receipt_flag as per MDT version 1.23
,lr_po_dist_data.accrued_flag
,lr_po_dist_data.prevent_encumbrance_flag
,lr_po_dist_data.encumbered_flag
,lr_po_dist_data.gl_cancelled_date
--,lr_po_dist_data.requisition_num
--,lr_po_dist_data.requisition_line_num
--,lr_po_dist_data.req_distribution_num
,lr_po_dist_data.project_accounting_context
,lr_po_dist_data.recoverable_tax
,lr_po_dist_data.nonrecoverable_tax
-- ,lr_po_dist_data.recovery_rate
-- ,lr_po_dist_data.tax_recovery_override_flag
,SYSDATE
,fnd_global.user_id
,SYSDATE
,fnd_global.user_id
);
UPDATE xxcsr_po_distributions_int
SET record_status = 'C'
,request_id = FND_GLOBAL.conc_request_id
,error_message = NULL
WHERE rowid = lr_po_dist_data.rowid;
COMMIT;
ln_dist_cnt := ln_dist_cnt + 1;
ELSE
UPDATE xxcsr_po_distributions_int
SET record_status = 'E'
,request_id = FND_GLOBAL.conc_request_id
,error_message = lc_error_details
WHERE rowid = lr_po_dist_data.rowid;
IF ln_po_int_line_id IS NOT NULL THEN
UPDATE xxcsr_po_lines_int
SET record_status = 'E'
,error_message = error_message||'error in distribution record'
WHERE po_number = lr_po_dist_data.po_number
AND line_num = lr_po_dist_data.po_line_number
AND shipment_num = lr_po_dist_data.shipment_num
AND source_instance = p_instance_name;
DELETE FROM po_lines_interface
WHERE interface_line_id = ln_po_int_line_id;
ln_lines_cnt := ln_lines_cnt - 1;
END IF;
IF ln_po_int_header_id IS NOT NULL THEN
UPDATE xxcsr_po_headers_int
SET record_status = 'E'
,error_message = error_message||'error in distribution record'
WHERE po_number = lr_po_dist_data.po_number
AND source_instance = p_instance_name;
DELETE FROM po_headers_interface
WHERE interface_header_id = ln_po_int_header_id;
ln_header_cnt := ln_header_cnt - 1;
END IF;
END IF; --lc_error_details IS NULL
COMMIT;
END LOOP;
COMMIT;
IF ln_header_cnt > 0 THEN
--Calling Import Standard Purchase Orders program
lc_errloc := 'Call Import Standard Purchase Orders program';
FND_FILE.PUT_LINE(FND_FILE.LOG,'Submitting Import Standard Purchase Orders concurrent program.');
ln_cur_org_id := FND_PROFILE.VALUE('ORG_ID');
FND_FILE.PUT_LINE(FND_FILE.LOG,'ln_cur_org_id : ' || ln_cur_org_id);
ln_request_id := FND_REQUEST.SUBMIT_REQUEST (
application => 'PO'
,program => 'POXPOPDOI'
,description => 'Import Standard Purchase Orders'
,start_time => SYSDATE
,sub_request => FALSE
,argument1 => NULL --Default Buyer
,argument2 => 'STANDARD' --Document Type
,argument3 => NULL --Document SubType
,argument4 => 'N' --Create or Update Items
,argument5 => NULL --Create Sourcing Rules
,argument6 => 'APPROVED' --Approval Status
,argument7 => NULL --Release Generation Method
,argument8 => NULL --Batch Id
,argument9 => ln_cur_org_id --Operating Unit
,argument10 => NULL --Global Agreement
,argument11 => NULL --Enable Sourcing Level
,argument12 => NULL --Sourcing Level
,argument13 => NULL --Inv Org Enable
,argument14 => NULL --Inventory Organization
);
COMMIT;
IF ln_request_id = 0 THEN
lc_error := 'Error submitting Import Standard Purchase Orders concurrent program.';
RAISE ex_conc_error;
END IF;
FND_FILE.PUT_LINE(FND_FILE.LOG,'Import Standard Purchase Orders concurrent program submitted. Request_id : ' || ln_request_id);
--Wait for the request to complete
lb_wait := FND_CONCURRENT.WAIT_FOR_REQUEST
(
request_id => ln_request_id
,interval => 2
,phase => lc_phase
,status => lc_status
,dev_phase => lc_devpha
,dev_status => lc_devsta
,message => lc_mesg
);
END IF; --ln_header_cnt > 0
x_header_cnt := ln_header_cnt;
x_lines_cnt := ln_lines_cnt;
x_dist_cnt := ln_dist_cnt;
x_req_id := ln_request_id;
-- Contracts import
FOR lr_po_header_contr IN lcu_po_header_contr (p_rec_status)
LOOP
ln_org_id := NULL;
ln_agent_id := NULL;
ln_bu_id := NULL;
lc_currency_code := NULL;
ln_vendor_id := NULL;
lc_payment_terms := NULL;
lc_freight_terms := NULL;
lc_error_details := NULL;
lc_new_orgname := NULL;
lc_business_group := NULL;
ln_bill_loc_id := NULL;
ln_ship_loc_id := NULL;
lc_inv_po_chk := NULL;
lc_func_curr := NULL;
lc_rate_type := NULL;
ln_rate := NULL;
ld_rate_date := NULL;
lc_new_ship := NULL;
lc_new_bill := NULL;
ln_vendor_site_id := NULL;
ln_vendor_contact_id := NULL;
ln_term_id := NULL;
lc_po_exists := NULL;
-- check if PO already exists
OPEN lcu_check_po_exists(lr_po_header_contr.po_number);
FETCH lcu_check_po_exists
INTO lc_po_exists;
CLOSE lcu_check_po_exists;
IF lc_po_exists IS NOT NULL THEN
lc_error_details := lc_error_details||'PO already exists';
END IF;
lc_errloc := 'Operating unit related derivations';
lc_new_orgname := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_OPERATING_UNIT'
,'XXSIRF_CNV_OPERATING_UNIT'
,lr_po_header_contr.operating_unit
);
IF lc_new_orgname IS NULL THEN
lc_error_details := lc_error_details||'Could not derive new operating unit for '||lr_po_header_contr.operating_unit||'. ';
ELSE
ln_org_id := XXCSR_COMMON_PKG.get_organization_id(lc_new_orgname);
IF ln_org_id IS NULL THEN
lc_error_details := lc_error_details||'Could not derive org id for new operating unit '||lc_new_orgname||'. ';
ELSE
-- Compare functional and document currency
OPEN lcu_func_curr(ln_org_id);
FETCH lcu_func_curr
INTO lc_func_curr;
CLOSE lcu_func_curr;
IF lc_func_curr = lr_po_header_contr.currency_code THEN
lc_rate_type := NULL;
ln_rate := NULL;
ld_rate_date := NULL;
ELSE
lc_rate_type := lr_po_header_contr.rate_type;
ln_rate := lr_po_header_contr.rate;
ld_rate_date := lr_po_header_contr.rate_date;
END IF;
END IF;
END IF;
/* lc_errloc := 'Checking for inventory purchase orders';
lc_inv_po_chk := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_INV_SUPPLIERS'
,'XXSIRF_CNV_INV_SUPPLIERS'
,lr_po_header_contr.vendor_name
);
IF lc_inv_po_chk IS NULL THEN
lc_error_details := lc_error_details||'Only inventory purchase orders will be migrated';
END IF; */
/* Commented by Nishka, added the above derivation
--Derive org id
lc_errloc := 'Derive org id';
ln_org_id := XXCSR_COMMON_PKG.get_organization_id(lr_po_header_contr.operating_unit);
IF ln_org_id IS NULL THEN
lc_error_details := 'Invalid operating unit name.';
END IF; */
/* OPEN lcu_bu_id (lr_po_header_contr.emp_bu_name);
FETCH lcu_bu_id
INTO ln_bu_id;
CLOSE lcu_bu_id; */
-------------- IF lr_po_header_contr.emp_bu_name IN ( 'CSR United States','CSR United Kingdom') THEN ----------commented on 17oct2011
IF lr_po_header_contr.emp_bu_name IN ( 'CSR United States','CSR United Kingdom') THEN
lc_business_group := lr_po_header_contr.emp_bu_name;
ELSE
lc_business_group := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_HR_BG'
,'XXSIRF_CNV_HR_BG'
,lr_po_header_contr.emp_bu_name
);
END IF;
IF lc_business_group IS NULL THEN
lc_error_details := lc_error_details||'Mapping for Business Group '||lr_po_header_contr.emp_bu_name||' could not be found. ';
ELSE
ln_bu_id := XXCSR_COMMON_PKG.get_business_group_id(lc_business_group);
IF ln_bu_id IS NULL THEN
lc_error_details:= lc_error_details||' Business Group ID for '||lc_business_group||' could not be derived. ';
ELSE
--Derive agent id
lc_errloc := 'Derive agent id';
ln_agent_id := XXCSR_COMMON_PKG.get_person_id (p_first_name => lr_po_header_contr.emp_fname
,p_last_name => lr_po_header_contr.emp_lname
,p_date_of_birth => lr_po_header_contr.emp_dob
,p_business_group_id => ln_bu_id
);
IF ln_agent_id IS NULL THEN
lc_error_details := lc_error_details || ' Invalid agent (employee) details.';
END IF;
END IF;
END IF;
--Check currency code
lc_errloc := 'Check currency code';
OPEN lcu_chk_currency (lr_po_header_contr.currency_code);
FETCH lcu_chk_currency
INTO lc_currency_code;
IF lcu_chk_currency%NOTFOUND THEN
lc_error_details := lc_error_details || ' Invalid currency code.';
END IF;
CLOSE lcu_chk_currency;
--Derive vendor id
lc_errloc := 'Derive vendor id';
IF lr_po_header_contr.vendor_name IS NOT NULL THEN
OPEN lcu_vendor_der(lr_po_header_contr.vendor_name);
FETCH lcu_vendor_der
INTO ln_vendor_id;
CLOSE lcu_vendor_der;
IF ln_vendor_id IS NULL THEN
lc_error_details := lc_error_details || ' Vendor not migrated.';
END IF;
END IF;
lc_errloc := 'Check payment terms';
IF lr_po_header_contr.payment_terms IS NOT NULL THEN
lc_payment_terms := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_SUPPLIER_PAYTERMS'
,p_sirf_lookup => 'XXSIRF_CNV_SUPPLIER_PAYTERMS'
,p_old_value => lr_po_header_contr.payment_terms
);
IF lc_payment_terms IS NULL THEN
lc_error_details := lc_error_details || ' Invalid payment terms.';
ELSE
OPEN lcu_pay_term(lc_payment_terms);
FETCH lcu_pay_term
INTO ln_term_id;
CLOSE lcu_pay_term;
IF ln_term_id IS NULL THEN
lc_error_details := lc_error_details || 'Could not derive payment term id for '||lc_payment_terms;
END IF;
END IF;
END IF;
--Check freight terms
lc_errloc := 'Check freight terms';
IF lr_po_header_contr.freight_terms IS NOT NULL THEN
lc_freight_terms := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name => p_instance_name
,p_csr_lookup => 'XXCSR_CNV_FREIGHT_TERMS'
,p_sirf_lookup => 'XXSIRF_CNV_FREIGHT_TERMS'
,p_old_value => lr_po_header_contr.freight_terms
);
IF lc_freight_terms IS NULL THEN
lc_error_details := lc_error_details || ' Invalid freight terms.';
END IF;
END IF;
IF lr_po_header_contr.ship_to_location IS NOT NULL THEN
lc_new_ship := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_DELIVER_LOCATIONS'
,'XXSIRF_CNV_DELIVER_LOCATIONS'
,lr_po_header_contr.ship_to_location
);
IF lc_new_ship IS NULL THEN
lc_error_details := lc_error_details||'Could not derive new ship to location for '||lr_po_header_contr.ship_to_location||' in XXCSR_CNV_DELIVER_LOCATIONS. ';
ELSE
OPEN lcu_hr_loc(lc_new_ship);
FETCH lcu_hr_loc
INTO ln_ship_loc_id;
CLOSE lcu_hr_loc;
IF ln_ship_loc_id IS NULL THEN
lc_error_details := lc_error_details || 'Ship to location id could not be derived for '||lr_po_header_contr.ship_to_location;
END IF;
END IF;
END IF;
IF lr_po_header_contr.bill_to_location IS NOT NULL THEN
lc_new_bill := XXCSR_COMMON_PKG.get_lookup_meaning (p_instance_name
,'XXCSR_CNV_BILLTO_LOCATIONS'
,'XXSIRF_CNV_BILLTO_LOCATIONS'
,lr_po_header_contr.bill_to_location
);
IF lc_new_bill IS NULL THEN
lc_error_details := lc_error_details||'Could not derive new bill to location for '||lr_po_header_contr.bill_to_location||' in XXCSR_CNV_BILLTO_LOCATIONS. ';
ELSE
OPEN lcu_hr_loc(lc_new_bill);
FETCH lcu_hr_loc
INTO ln_bill_loc_id;
CLOSE lcu_hr_loc;
IF ln_bill_loc_id IS NULL THEN
lc_error_details := lc_error_details || 'Bill to location id could not be derived for '||lr_po_header_contr.bill_to_location;
END IF;
END IF;
END IF;
OPEN lcu_vendor_site(lr_po_header_contr.vendor_site_code
,ln_vendor_id);
FETCH lcu_vendor_site
INTO ln_vendor_site_id;
CLOSE lcu_vendor_site;
OPEN lcu_vendor_contact(ln_vendor_site_id);
FETCH lcu_vendor_contact
INTO ln_vendor_contact_id;
CLOSE lcu_vendor_contact;
/* ln_line_item_cnt := NULL;
ln_po_item_chk := NULL;
-- Check whether the po line has valid items.
OPEN lcu_po_line_itm(lr_po_header_contr.po_number);
FETCH lcu_po_line_itm
INTO ln_line_item_cnt;
CLOSE lcu_po_line_itm;
IF ln_line_item_cnt != 0 THEN
OPEN lcu_po_itm_chk(lr_po_header_contr.po_number);
FETCH lcu_po_itm_chk
INTO ln_po_item_chk;
CLOSE lcu_po_itm_chk;
IF ln_po_item_chk = 0 THEN
lc_error_details := lc_error_details || 'Inventory item id for po line could not be derived';
END IF;
END IF; */
IF lc_error_details IS NULL THEN
--Insert purchase order header data in interface table
lc_errloc := 'Insert purchase order header data in interface table';
BEGIN
ln_po_header_id := NULL;
ln_po_header_id := PO_HEADERS_S.nextval;
INSERT INTO po_headers_all (
po_header_id
,agent_id
,type_lookup_code
,created_by
,creation_date
,last_update_date
,last_updated_by
,last_update_login
,request_id
,segment1
,summary_flag
,enabled_flag
,vendor_id
,vendor_site_id
,vendor_contact_id
,ship_to_location_id
,bill_to_location_id
,terms_id
,currency_code
,rate_type
,rate_date
,rate
,authorization_status
,revision_num
,approved_flag
,approved_date
,print_count
,confirming_order_flag
,comments
,acceptance_required_flag
,cancel_flag
,frozen_flag
,closed_code
,org_id
,interface_source_code
-- ,wf_item_type
-- ,wf_item_key
,xml_flag
,document_creation_method
,submit_date
,style_id
,freight_terms_lookup_code
,attribute_category
,pay_on_code
,global_agreement_flag
)
VALUES
(
ln_po_header_id
,ln_agent_id
,'CONTRACT'
,FND_GLOBAL.USER_ID
,SYSDATE
,SYSDATE
,FND_GLOBAL.USER_ID
,FND_GLOBAL.LOGIN_ID
,gn_conc_req_id
,lr_po_header_contr.po_number
,'N'
,'Y'
,ln_vendor_id
,ln_vendor_site_id
,ln_vendor_contact_id
,ln_ship_loc_id -- lr_po_header_contr.ship_to_location
,ln_bill_loc_id -- lr_po_header_contr.bill_to_location
,ln_term_id
,lr_po_header_contr.currency_code
,DECODE(lc_rate_type,'Corporate','User',lc_rate_type)
,ld_rate_date
,ln_rate
,DECODE(lr_po_header_contr.approval_status,'REQUIRES REAPPROVAL','INCOMPLETE',lr_po_header_contr.approval_status)
,0
,lr_po_header_contr.approved_flag
,lr_po_header_contr.approved_date
--,DECODE(lr_po_header_contr.approval_status,'APPROVED',lr_po_header_contr.print_count,0)
,DECODE(lr_po_header_contr.approval_status,'APPROVED',1,0)
,lr_po_header_contr.confirming_order_flag
,lr_po_header_contr.comments
,lr_po_header_contr.acceptance_required_flag
,'N'
,lr_po_header_contr.frozen_flag
,lr_po_header_contr.closed_code
,ln_org_id
,'XXCSR Conversion'
-- ,-- wf_item_type
-- ,-- wf_item_key
,'N'
,'PDOI'
,SYSDATE
, 1 -- style_id
,lc_freight_terms
,lr_po_header_contr.attribute_category
,lr_po_header_contr.pay_on_code
,'Y'
);
INSERT INTO PO_GA_ORG_ASSIGNMENTS(PO_HEADER_ID
,ORGANIZATION_ID
,ENABLED_FLAG
,VENDOR_SITE_ID
,LAST_UPDATE_DATE
,LAST_UPDATED_BY
,CREATION_DATE
,CREATED_BY
,LAST_UPDATE_LOGIN
,PURCHASING_ORG_ID
,ORG_ASSIGNMENT_ID
)
VALUES (ln_po_header_id
,ln_org_id
,'Y'
,ln_vendor_site_id
,SYSDATE
,FND_GLOBAL.USER_ID
,SYSDATE
,FND_GLOBAL.USER_ID
,FND_GLOBAL.LOGIN_ID
,ln_org_id
,PO_GA_ORG_ASSIGNMENTS_S.NEXTVAL
);
UPDATE xxcsr_po_headers_int
SET record_status = 'C'
,request_id = FND_GLOBAL.conc_request_id
,error_message = NULL
WHERE rowid = lr_po_header_contr.rowid;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
lc_error_details := SQLERRM;
UPDATE xxcsr_po_headers_int
SET record_status = 'E'
,request_id = FND_GLOBAL.conc_request_id
,error_message = lc_error_details
WHERE rowid = lr_po_header_contr.rowid;
END;
-- ln_header_cnt := ln_header_cnt + 1;
ELSE
UPDATE xxcsr_po_headers_int
SET record_status = 'E'
,request_id = FND_GLOBAL.conc_request_id
,error_message = lc_error_details
WHERE rowid = lr_po_header_contr.rowid;
END IF; --lc_error_details IS NULL
COMMIT;
END LOOP;
COMMIT;
--
EXCEPTION
WHEN EX_CONC_ERROR THEN
x_retcode := 2;
x_errbuf := lc_errmsg;
FND_FILE.PUT_LINE(FND_FILE.LOG,lc_errmsg);
WHEN OTHERS THEN
x_errbuf := SUBSTR(SQLERRM,1,200);
x_retcode := 2;
FND_FILE.PUT_LINE(FND_FILE.LOG,'Unexpected error occurred in import procedure at ' || lc_errloc || ' Error : ' || SQLERRM);
END import_zoran;
-----=========================End Import ZORAN procedure=====================
--Main Routine
PROCEDURE main
(x_errbuf OUT NOCOPY VARCHAR2
,x_retcode OUT NOCOPY NUMBER
,p_data_file1 IN VARCHAR2
,p_data_file2 IN VARCHAR2
,p_data_file3 IN VARCHAR2
,p_instance_name IN VARCHAR2
,p_process_error IN VARCHAR2
)
IS
--
CURSOR lcu_get_conc_info(pn_request_id NUMBER)
IS
SELECT FCR.status_code
,FCR.phase_code
FROM fnd_concurrent_requests FCR
WHERE FCR.request_id = pn_request_id;
lc_errloc VARCHAR2(1000);
ln_load_req_id NUMBER;
ln_load2_req_id NUMBER;
ln_imp_req_id NUMBER;
lc_errmsg VARCHAR2(2000);
lc_phase VARCHAR2(500);
lc_status VARCHAR2(500);
lc_devpha VARCHAR2(500);
lc_devsta VARCHAR2(500);
lc_mesg VARCHAR2(50);
lb_wait BOOLEAN;
lc_errbuf VARCHAR2(500);
ln_hdr_tab_retcode NUMBER;
ln_lin_tab_retcode NUMBER;
ln_dist_tab_retcode NUMBER;
ln_hdr_stg_retcode NUMBER;
ln_lin_stg_retcode NUMBER;
ln_dist_stg_retcode NUMBER;
ln_tab_retcode NUMBER;
ln_retcode NUMBER;
ln_po_header_cnt NUMBER;
ln_po_lines_cnt NUMBER;
ln_po_dist_cnt NUMBER;
ex_conc_error EXCEPTION;
ex_cust_error EXCEPTION;
BEGIN
--Check if process error is set to Yes
IF p_process_error = 'Y' THEN
UPDATE xxcsr_po_headers_int
SET request_id = gn_conc_req_id
WHERE record_status ='E'
AND source_instance = p_instance_name;
UPDATE xxcsr_po_lines_int
SET request_id = gn_conc_req_id
WHERE record_status ='E'
AND source_instance = p_instance_name;
UPDATE xxcsr_po_distributions_int
SET request_id = gn_conc_req_id
WHERE record_status ='E'
AND source_instance = p_instance_name;
update xxcsr_po_headers_int
set emp_fname = 'Scott'
, emp_lname = 'Simpson'
, emp_dob = to_date('02/26/1972','MM/DD/RRRR')
, emp_bu_name = 'CSR United Kingdom'
where emp_fname = 'Person'
and emp_lname = 'Migration 2'
AND source_instance = p_instance_name;
update xxcsr_po_headers_int
set emp_fname = 'Mary'
, emp_lname = 'Benak'
, emp_dob = to_date('12/04/1964','MM/DD/RRRR')
, emp_bu_name = 'CSR United States'
where emp_fname = 'Wee Kee'
and emp_lname = 'Lim'
AND source_instance = p_instance_name;
COMMIT;
--Call Import routine for processing of error records
IF p_instance_name = 'CSR' THEN
import_csr(p_rec_status => 'E'
,p_instance_name => p_instance_name
,x_errbuf => lc_errbuf
,x_retcode => ln_retcode
,x_header_cnt => ln_po_header_cnt
,x_lines_cnt => ln_po_lines_cnt
,x_dist_cnt => ln_po_dist_cnt
,x_req_id => ln_imp_req_id);
--import_csr('E',p_instance_name,lc_errbuf,ln_retcode,ln_po_header_cnt,ln_po_lines_cnt,ln_po_dist_cnt,ln_imp_req_id);
--============================================ZORAN instace logic added on 17OCT2011========================
ELSIF p_instance_name = 'ZORAN' THEN
FND_FILE.PUT_LINE(FND_FILE.LOG,'Importing ZORAN instace');
import_zoran(p_rec_status => 'E'
,p_instance_name => p_instance_name
,x_errbuf => lc_errbuf
,x_retcode => ln_retcode
,x_header_cnt => ln_po_header_cnt
,x_lines_cnt => ln_po_lines_cnt
,x_dist_cnt => ln_po_dist_cnt
,x_req_id => ln_imp_req_id);
ELSE
import_sirf(p_rec_status => 'E'
,p_instance_name => p_instance_name
,x_errbuf => lc_errbuf
,x_retcode => ln_retcode
,x_header_cnt => ln_po_header_cnt
,x_lines_cnt => ln_po_lines_cnt
,x_dist_cnt => ln_po_dist_cnt
,x_req_id => ln_imp_req_id);
--import_sirf('E',p_instance_name,lc_errbuf,ln_retcode,ln_po_header_cnt,ln_po_lines_cnt,ln_po_dist_cnt,ln_imp_req_id);
END IF;
ELSE
--Check and call loader for purchase order headers data file
IF p_data_file1 IS NOT NULL THEN
lc_errloc := 'Calling common loader program for data file : ' || p_data_file1;
ln_load_req_id := FND_REQUEST.SUBMIT_REQUEST (
application => 'XXCSR'
,program => 'XXCSRLOAD'
,description => NULL
,start_time => SYSDATE
,sub_request => FALSE
,argument1 => p_data_file1
,argument2 => 'XXCSR_PO_PUR_ORDR_HDR_IMPORT.ctl'
,argument3 => FND_PROFILE.VALUE('XXCSR_DIRECTORY_PATH')
);
COMMIT;
IF ln_load_req_id = 0 THEN
lc_errmsg := 'Error submitting loader concurrent program for data file ' || p_data_file1;
RAISE ex_conc_error;
END IF;
FND_FILE.PUT_LINE(FND_FILE.LOG,'Common loader program submitted for data file : ' || p_data_file1 || ' Request_id : ' || ln_load_req_id);
--Wait for the request to complete
lb_wait := FND_CONCURRENT.WAIT_FOR_REQUEST
(
request_id => ln_load_req_id
,interval => 2
,phase => lc_phase
,status => lc_status
,dev_phase => lc_devpha
,dev_status => lc_devsta
,message => lc_mesg
);
-- Check if the load program completed execution normally. If not, stop further execution.
IF (lcu_get_conc_info%ISOPEN) THEN
CLOSE lcu_get_conc_info;
END IF;
OPEN lcu_get_conc_info(ln_load_req_id);
FETCH lcu_get_conc_info
INTO lc_devsta
,lc_devpha;
CLOSE lcu_get_conc_info;
IF lc_devpha = 'C' AND lc_devsta <> 'C' THEN
DELETE FROM xxcsr_po_headers_int
WHERE record_status = 'N'
AND source_instance = p_instance_name;
COMMIT;
lc_errmsg := 'Loader program Failed. Please check Log file for request ID '|| ln_load_req_id;
RAISE ex_conc_error;
END IF;
ELSE
FND_FILE.PUT_LINE(FND_FILE.LOG,'Purchase Orders data file name is empty. No Purchase Orders created.');
END IF; --p_data_file1 IS NOT NULL
--Check and call loader for purchase order lines data file
IF p_data_file2 IS NOT NULL THEN
lc_errloc := 'Calling common loader program for data file : ' || p_data_file2;
ln_load_req_id := FND_REQUEST.SUBMIT_REQUEST (
application => 'XXCSR'
,program => 'XXCSRLOAD'
,description => NULL
,start_time => SYSDATE
,sub_request => FALSE
,argument1 => p_data_file2
,argument2 => 'XXCSR_PO_PUR_ORDR_LIN_IMPORT.ctl'
,argument3 => FND_PROFILE.VALUE('XXCSR_DIRECTORY_PATH')
);
COMMIT;
IF ln_load_req_id = 0 THEN
lc_errmsg := 'Error submitting loader concurrent program for data file ' || p_data_file2;
RAISE ex_conc_error;
END IF;
FND_FILE.PUT_LINE(FND_FILE.LOG,'Common loader program submitted for data file : ' || p_data_file2 || ' Request_id : ' || ln_load_req_id);
--Wait for the request to complete
lb_wait := FND_CONCURRENT.WAIT_FOR_REQUEST
(
request_id => ln_load_req_id
,interval => 2
,phase => lc_phase
,status => lc_status
,dev_phase => lc_devpha
,dev_status => lc_devsta
,message => lc_mesg
);
-- Check if the load program completed execution normally. If not, stop further execution.
IF (lcu_get_conc_info%ISOPEN) THEN
CLOSE lcu_get_conc_info;
END IF;
OPEN lcu_get_conc_info(ln_load_req_id);
FETCH lcu_get_conc_info
INTO lc_devsta
,lc_devpha;
CLOSE lcu_get_conc_info;
IF lc_devpha = 'C' AND lc_devsta <> 'C' THEN
DELETE FROM xxcsr_po_headers_int
WHERE record_status = 'N'
AND source_instance = p_instance_name;
DELETE FROM xxcsr_po_lines_int
WHERE record_status = 'N'
AND source_instance = p_instance_name;
COMMIT;
lc_errmsg := 'Loader program Failed. Please check Log file for request ID '|| ln_load_req_id;
RAISE ex_conc_error;
END IF;
ELSE
FND_FILE.PUT_LINE(FND_FILE.LOG,'Purchase Order Lines data file name is empty. No Purchase Order Lines created.');
END IF; --p_data_file2 IS NOT NULL
--Check and call loader for purchase order distributions data file
IF p_data_file3 IS NOT NULL THEN
lc_errloc := 'Calling common loader program for data file : ' || p_data_file3;
ln_load_req_id := FND_REQUEST.SUBMIT_REQUEST (
application => 'XXCSR'
,program => 'XXCSRLOAD'
,description => NULL
,start_time => SYSDATE
,sub_request => FALSE
,argument1 => p_data_file3
,argument2 => 'XXCSR_PO_PUR_ORDR_DIST_IMPORT.ctl'
,argument3 => FND_PROFILE.VALUE('XXCSR_DIRECTORY_PATH')
);
COMMIT;
IF ln_load_req_id = 0 THEN
lc_errmsg := 'Error submitting loader concurrent program for data file ' || p_data_file3;
RAISE ex_conc_error;
END IF;
FND_FILE.PUT_LINE(FND_FILE.LOG,'Common loader program submitted for data file : ' || p_data_file3 || ' Request_id : ' || ln_load_req_id);
--Wait for the request to complete
lb_wait := FND_CONCURRENT.WAIT_FOR_REQUEST
(
request_id => ln_load_req_id
,interval => 2
,phase => lc_phase
,status => lc_status
,dev_phase => lc_devpha
,dev_status => lc_devsta
,message => lc_mesg
);
-- Check if the load program completed execution normally. If not, stop further execution.
IF (lcu_get_conc_info%ISOPEN) THEN
CLOSE lcu_get_conc_info;
END IF;
OPEN lcu_get_conc_info(ln_load_req_id);
FETCH lcu_get_conc_info
INTO lc_devsta
,lc_devpha;
CLOSE lcu_get_conc_info;
IF lc_devpha = 'C' AND lc_devsta <> 'C' THEN
DELETE FROM xxcsr_po_headers_int
WHERE record_status = 'N'
AND source_instance = p_instance_name;
DELETE FROM xxcsr_po_lines_int
WHERE record_status = 'N'
AND source_instance = p_instance_name;
DELETE FROM xxcsr_po_distributions_int
WHERE record_status = 'N'
AND source_instance = p_instance_name;
COMMIT;
lc_errmsg := 'Loader program Failed. Please check Log file for request ID '|| ln_load_req_id;
RAISE ex_conc_error;
END IF;
ELSE
FND_FILE.PUT_LINE(FND_FILE.LOG,'Purchase Order Distributions data file name is empty. No Purchase Order distributions created.');
END IF; --p_data_file3 IS NOT NULL
--Update the staging tables with request_id
UPDATE xxcsr_po_headers_int
SET request_id = gn_conc_req_id
WHERE record_status = 'N'
AND source_instance = p_instance_name;
UPDATE xxcsr_po_lines_int
SET request_id = gn_conc_req_id
WHERE record_status = 'N'
AND source_instance = p_instance_name;
UPDATE xxcsr_po_distributions_int
SET request_id = gn_conc_req_id
WHERE record_status = 'N'
AND source_instance = p_instance_name;
COMMIT;
update xxcsr_po_headers_int
set emp_fname = 'Scott'
, emp_lname = 'Simpson'
, emp_dob = to_date('02/26/1972','MM/DD/RRRR')
, emp_bu_name = 'CSR United Kingdom'
where emp_fname = 'Person'
and emp_lname = 'Migration 2'
AND source_instance = p_instance_name;
update xxcsr_po_headers_int
set emp_fname = 'Mary'
, emp_lname = 'Benak'
, emp_dob = to_date('12/04/1964','MM/DD/RRRR')
, emp_bu_name = 'CSR United States'
where emp_fname = 'Wee Kee'
and emp_lname = 'Lim'
AND source_instance = p_instance_name;
COMMIT;
--Call Import program if all data is loaded successfully
IF p_instance_name = 'CSR' THEN
import_csr(p_rec_status => 'N'
,p_instance_name => p_instance_name
,x_errbuf => lc_errbuf
,x_retcode => ln_retcode
,x_header_cnt => ln_po_header_cnt
,x_lines_cnt => ln_po_lines_cnt
,x_dist_cnt => ln_po_dist_cnt
,x_req_id => ln_imp_req_id);
--import_csr('E',p_instance_name,lc_errbuf,ln_retcode,ln_po_header_cnt,ln_po_lines_cnt,ln_po_dist_cnt,ln_imp_req_id);
ELSE
import_sirf(p_rec_status => 'N'
,p_instance_name => p_instance_name
,x_errbuf => lc_errbuf
,x_retcode => ln_retcode
,x_header_cnt => ln_po_header_cnt
,x_lines_cnt => ln_po_lines_cnt
,x_dist_cnt => ln_po_dist_cnt
,x_req_id => ln_imp_req_id);
--import_sirf('N',p_instance_name,lc_errbuf,ln_retcode,ln_po_header_cnt,ln_po_lines_cnt,ln_po_dist_cnt,ln_imp_req_id);
END IF;
END IF; --p_process_error = 'Y'
FND_FILE.PUT_LINE(FND_FILE.LOG,'ln_po_header_cnt : ' || ln_po_header_cnt);
FND_FILE.PUT_LINE(FND_FILE.LOG,'ln_po_lines_cnt : ' || ln_po_lines_cnt);
FND_FILE.PUT_LINE(FND_FILE.LOG,'ln_po_dist_cnt : ' || ln_po_dist_cnt);
IF ln_imp_req_id IS NOT NULL THEN
lc_errloc := 'Calling common routine : XXCSR_COMMON_PKG.interface_table_summary for xxcsr_po_headers_int';
interface_table_summary(x_errbuf => lc_errbuf
,x_retcode => ln_hdr_tab_retcode
,p_interface_table => 'po_headers_interface'
,p_request_id => ln_imp_req_id
,p_total_record_count => ln_po_header_cnt
);
lc_errloc := 'Calling common routine : XXCSR_COMMON_PKG.interface_table_summary for xxcsr_po_lines_int';
interface_table_summary(x_errbuf => lc_errbuf
,x_retcode => ln_lin_tab_retcode
,p_interface_table => 'po_lines_interface'
,p_request_id => ln_imp_req_id
,p_total_record_count => ln_po_lines_cnt
);
lc_errloc := 'Calling common routine : XXCSR_COMMON_PKG.interface_table_summary for xxcsr_po_distributions_int';
interface_table_summary(x_errbuf => lc_errbuf
,x_retcode => ln_dist_tab_retcode
,p_interface_table => 'po_distributions_interface'
,p_request_id => ln_imp_req_id
,p_total_record_count => ln_po_dist_cnt
);
END IF;
lc_errloc := 'Calling common routine : XXCSR_COMMON_PKG.table_summary for XXCSR_PO_HEADERS_INT';
XXCSR_COMMON_PKG.table_summary(lc_errbuf
,ln_hdr_stg_retcode
,'XXCSR_PO_HEADERS_INT'
,FND_GLOBAL.conc_request_id);
lc_errloc := 'Calling common routine : XXCSR_COMMON_PKG.print_error for xxcsr_po_headers_int';
XXCSR_COMMON_PKG.print_error(lc_errbuf,ln_retcode,'line_number','po_number','xxcsr_po_headers_int',FND_GLOBAL.conc_request_id,'XXCSR_PO_HEADERS_INT','LINE NUMBER','PURCHASE ORDER NUMBER');
lc_errloc := 'Calling common routine : XXCSR_COMMON_PKG.table_summary for xxcsr_po_lines_int';
XXCSR_COMMON_PKG.table_summary(lc_errbuf
,ln_lin_stg_retcode
,'XXCSR_PO_LINES_INT'
,FND_GLOBAL.conc_request_id);
lc_errloc := 'Calling common routine : XXCSR_COMMON_PKG.print_error for xxcsr_po_lines_int';
XXCSR_COMMON_PKG.print_error(lc_errbuf,ln_retcode,'line_number','po_number','xxcsr_po_lines_int',FND_GLOBAL.conc_request_id,'XXCSR_PO_LINES_INT','LINE NUMBER','PURCHASE ORDER NUMBER');
lc_errloc := 'Calling common routine : XXCSR_COMMON_PKG.table_summary for xxcsr_po_distributions_int';
XXCSR_COMMON_PKG.table_summary(lc_errbuf
,ln_dist_stg_retcode
,'XXCSR_PO_DISTRIBUTIONS_INT'
,FND_GLOBAL.conc_request_id);
lc_errloc := 'Calling common routine : XXCSR_COMMON_PKG.print_error for xxcsr_po_distributions_int';
XXCSR_COMMON_PKG.print_error(lc_errbuf,ln_retcode,'line_number','po_number','xxcsr_po_distributions_int',FND_GLOBAL.conc_request_id,'XXCSR_PO_DISTRIBUTIONS_INT','LINE NUMBER','PURCHASE ORDER NUMBER');
IF ln_hdr_tab_retcode = 2 OR ln_lin_tab_retcode = 2 OR ln_dist_tab_retcode = 2 OR ln_hdr_stg_retcode = 2 OR ln_lin_stg_retcode = 2 OR ln_dist_stg_retcode = 2 THEN
lc_errmsg := NULL;
ln_tab_retcode := 2;
RAISE ex_cust_error;
END IF;
IF ln_hdr_tab_retcode = 1 OR ln_lin_tab_retcode = 1 OR ln_dist_tab_retcode = 1 OR ln_hdr_stg_retcode = 1 OR ln_lin_stg_retcode = 1 OR ln_dist_stg_retcode = 1 THEN
lc_errmsg := NULL;
ln_tab_retcode := 1;
RAISE ex_cust_error;
END IF;
IF ln_hdr_tab_retcode = 0 AND ln_lin_tab_retcode = 0 AND ln_dist_tab_retcode = 0 OR ln_hdr_stg_retcode = 0 OR ln_lin_stg_retcode = 0 OR ln_dist_stg_retcode = 0 THEN
lc_errmsg := NULL;
ln_tab_retcode := 0;
RAISE ex_cust_error;
END IF;
--
EXCEPTION
WHEN EX_CONC_ERROR THEN
x_retcode := 2;
x_errbuf := lc_errmsg;
FND_FILE.PUT_LINE(FND_FILE.LOG,lc_errmsg);
WHEN EX_CUST_ERROR THEN
x_retcode := ln_tab_retcode;
x_errbuf := lc_errmsg;
WHEN OTHERS THEN
x_errbuf := SUBSTR(SQLERRM,1,200);
x_retcode := 2;
FND_FILE.PUT_LINE(FND_FILE.LOG,'Unexpected error occurred in import procedure at ' || lc_errloc || ' Error : ' || SQLERRM);
END main;
END XXCSR_PO_PUR_ORDR_IMPORT_PKG;
/
SHOW ERRORS;
----EXIT;
-- +=================================================================+
-- | End of Script |
-- +=================================================================+
Stop copying and pasting others code in your blog.
ReplyDeleteI know you copied this from Oracle and you are not the author