0% found this document useful (0 votes)
1K views

AP Invoice Conversion in Oracle Apps

This procedure validates invoice header and line item data from a staging table and inserts valid records into an interface table. It performs validation checks on the organization, vendor, currency, amount and other fields, and inserts any records passing validation along with associated error logging for invalid records.

Uploaded by

shankar680
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
1K views

AP Invoice Conversion in Oracle Apps

This procedure validates invoice header and line item data from a staging table and inserts valid records into an interface table. It performs validation checks on the organization, vendor, currency, amount and other fields, and inserts any records passing validation along with associated error logging for invalid records.

Uploaded by

shankar680
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 14

CREATE OR REPLACE PROCEDURE APPS.

xxanb_apinvoice_conv_proc11 AS v_error_h_flag NUMBER; v_error_h_msg VARCHAR2 (300); v_org_id NUMBER; v_source VARCHAR2 (100); v_vendor_id NUMBER; v_vendor_site_id NUMBER; v_inv_currc_code VARCHAR2 (100); v_inv_amount VARCHAR2 (100); v_term_id NUMBER; v_pay_method_code VARCHAR2 (100); v_pay_group_code VARCHAR2 (100); v_invoice_type VARCHAR2 (100); v_error_l_flag NUMBER; v_error_l_msg VARCHAR2 (300); v_line_type_code VARCHAR2 (100); v_dist_code_id NUMBER; v_amount VARCHAR2 (100); v_invoice_id NUMBER; v_invoice_line_id NUMBER; v_count NUMBER; BEGIN DBMS_OUTPUT.put_line ('HEADER IS GOING TO START'); FOR a_head IN (SELECT DISTINCT org_name, SOURCE, vendor_num, vendor_site_code, invoice_num, invoice_date, invoice_currency_code, invoice_amount, terms_name, description, gl_date, payment_method_lookup_code, pay_group_lookup_code, header_attribute_category, header_attribute1, header_attribute2, header_attribute3, header_attribute4, header_attribute5, invoice_type, po_number FROM invoice_staging_table WHERE error_status = 'N') LOOP DBMS_OUTPUT.put_line ('IN HEADER LOOP'); v_error_h_flag := 0; v_error_h_msg := NULL; v_error_l_flag := 0; v_error_l_msg := NULL; v_count := 0; SELECT INTO FROM WHERE COUNT (*) v_count ap_invoices_interface invoice_num = a_head.invoice_num AND status IS NULL;

IF v_count = 0 THEN --organization validation v_org_id := NULL; IF a_head.org_name IS NOT NULL THEN BEGIN SELECT organization_id INTO v_org_id

FROM hr_operating_units WHERE UPPER (NAME) = UPPER (a_head.org_name); DBMS_OUTPUT.put_line ('organization id is valid'); EXCEPTION WHEN OTHERS THEN v_error_h_flag := 1; v_error_h_msg := 'organization_name validation error - ' || SQLERRM; xx_apinvc_error_proc ('AP INVOICE CONVERSION', 'HEADER LEVEL', a_head.invoice_num || '-' || a_head.org_name, a_head.org_name, v_org_id, v_error_h_msg, SYSDATE, 'E' ); DBMS_OUTPUT.put_line ( 'organization code error - ' || v_error_h_msg ); END; ELSE v_error_h_flag := 1; v_error_h_msg := 'organization_name is null - ' || SQLERRM; xx_apinvc_error_proc ('AP INVOICE CONVERSION', 'HEADER LEVEL', a_head.invoice_num || '-' || a_head.org_name, 'ORGANIZATION NAME IS NULL', v_org_id, v_error_h_msg, SYSDATE, 'E' ); DBMS_OUTPUT.put_line ('organization name is null'); END IF; --source validation v_source := NULL; IF a_head.SOURCE IS NOT NULL THEN BEGIN SELECT lookup_code INTO v_source FROM fnd_lookup_values WHERE ( UPPER (meaning) = UPPER (a_head.SOURCE) OR UPPER (lookup_code) = UPPER (a_head.SOURCE) ) AND lookup_type = 'SOURCE' AND enabled_flag = 'Y' AND UPPER (source_lang) = UPPER ('US'); DBMS_OUTPUT.put_line ('source is valid'); EXCEPTION WHEN OTHERS THEN

v_error_h_flag := 1; v_error_h_msg := 'source validation error - ' || SQLERRM; xx_apinvc_error_proc ('AP INVOICE CONVERSION', 'HEADER LEVEL', a_head.invoice_num || '-' || a_head.org_name || '-' || a_head.SOURCE, a_head.SOURCE, v_source, v_error_h_msg, SYSDATE, 'E' ); DBMS_OUTPUT.put_line ('source error - ' || v_error_h_msg); END; ELSE v_error_h_flag := 1; v_error_h_msg := 'source is null - ' || SQLERRM; xx_apinvc_error_proc ('AP INVOICE CONVERSION', 'HEADER LEVEL', a_head.invoice_num || '-' || a_head.org_name || '-' || a_head.SOURCE, 'SOURCE IS NULL', v_source, v_error_h_msg, SYSDATE, 'E' ); DBMS_OUTPUT.put_line ('source is null'); END IF; --vendor validation v_vendor_id := NULL; IF a_head.vendor_num IS NOT NULL THEN BEGIN SELECT vendor_id INTO v_vendor_id FROM ap_suppliers WHERE segment1 = a_head.vendor_num; DBMS_OUTPUT.put_line ('vendor id is valid'); EXCEPTION WHEN OTHERS THEN v_error_h_flag := 1; v_error_h_msg := 'vendor validation error - ' || SQLERRM; xx_apinvc_error_proc ('AP INVOICE CONVERSION', 'HEADER LEVEL', a_head.invoice_num || '-' || a_head.org_name || '-' || a_head.vendor_num,

a_head.vendor_num, v_vendor_id, v_error_h_msg, SYSDATE, 'E' ); DBMS_OUTPUT.put_line ('vendor error - ' || v_error_h_msg); END; ELSE v_error_h_flag := 1; v_error_h_msg := 'vendor id is null - ' || SQLERRM; xx_apinvc_error_proc ('AP INVOICE CONVERSION', 'HEADER LEVEL', a_head.invoice_num || '-' || a_head.org_name || '-' || a_head.vendor_num, 'VENDOR ID IS NULL', v_vendor_id, v_error_h_msg, SYSDATE, 'E' ); DBMS_OUTPUT.put_line ('vendor id is null'); END IF; --vendor site validation v_vendor_site_id := NULL; IF v_vendor_id IS NOT NULL AND a_head.vendor_site_code IS NOT NULL THEN BEGIN SELECT vendor_site_id INTO v_vendor_site_id FROM ap_supplier_sites_all WHERE UPPER (vendor_site_code) = UPPER (a_head.vendor_site_code) AND vendor_id = v_vendor_id AND org_id = v_org_id; DBMS_OUTPUT.put_line ('vendor site id is valid'); EXCEPTION WHEN OTHERS THEN v_error_h_flag := 1; v_error_h_msg := 'vendor site validation error - ' || SQLERRM; xx_apinvc_error_proc ('AP INVOICE CONVERSION', 'HEADER LEVEL', a_head.invoice_num || '-' || a_head.vendor_num || '-' || a_head.vendor_site_code, a_head.vendor_site_code, v_vendor_site_id, v_error_h_msg, SYSDATE, 'E'

); DBMS_OUTPUT.put_line ('vendor site error - ' || v_error_h_msg ); END; ELSE v_error_h_flag := 1; v_error_h_msg := 'vendor site id is null - ' || SQLERRM; xx_apinvc_error_proc ('AP INVOICE CONVERSION', 'HEADER LEVEL', a_head.invoice_num || '-' || a_head.vendor_num || '-' || a_head.vendor_site_code, 'VENDOR SITE ID IS NULL', v_vendor_site_id, v_error_h_msg, SYSDATE, 'E' ); DBMS_OUTPUT.put_line ('vendor site id is null'); END IF; --invoice currencey validation v_inv_currc_code := NULL; IF a_head.invoice_currency_code IS NOT NULL THEN BEGIN SELECT currency_code INTO v_inv_currc_code FROM fnd_currencies WHERE UPPER (currency_code) = UPPER (a_head.invoice_currency_code) AND enabled_flag = 'Y'; DBMS_OUTPUT.put_line ('inv currency code is valid'); EXCEPTION WHEN OTHERS THEN v_error_h_flag := 1; v_error_h_msg := 'inv currency code validation error - ' || SQLERRM; xx_apinvc_error_proc ('AP INVOICE CONVERSION', 'HEADER LEVEL', a_head.invoice_num || '-' || a_head.vendor_num || '-' || a_head.invoice_currency_code, a_head.invoice_currency_code, v_inv_currc_code, v_error_h_msg, SYSDATE, 'E' ); DBMS_OUTPUT.put_line ( 'inv currency code error - ' || v_error_h_msg );

END; END IF; -- invoice amount v_inv_amount := NULL; IF a_head.invoice_amount IS NOT NULL THEN v_inv_amount := a_head.invoice_amount; ELSE v_error_h_flag := 1; v_error_h_msg := 'invoice amount is null - ' || SQLERRM; xx_apinvc_error_proc ('AP INVOICE CONVERSION', 'HEADER LEVEL', a_head.invoice_num || '-' || a_head.vendor_num || '-' || a_head.invoice_amount, 'INVOICE AMOUNT IS NULL', v_inv_amount, v_error_h_msg, SYSDATE, 'E' ); DBMS_OUTPUT.put_line ('invoice amount is null'); END IF; -- term validation v_term_id := NULL; IF a_head.terms_name IS NOT NULL THEN BEGIN SELECT term_id INTO v_term_id FROM ap_terms WHERE UPPER (NAME) = UPPER (a_head.terms_name) AND enabled_flag = 'Y' AND (end_date_active IS NULL OR end_date_active >= SYSDATE ); DBMS_OUTPUT.put_line ('term id is valid'); EXCEPTION WHEN OTHERS THEN v_error_h_flag := 1; v_error_h_msg := 'term id validation error - ' || SQLERRM; xx_apinvc_error_proc ('AP INVOICE CONVERSION', 'HEADER LEVEL', a_head.invoice_num || '-' || a_head.vendor_num || '-' || a_head.terms_name, a_head.terms_name, v_term_id, v_error_h_msg, SYSDATE, 'E'

); DBMS_OUTPUT.put_line ('term id error - ' || v_error_h_msg); END; END IF; -- payment method validation v_pay_method_code := NULL; IF a_head.payment_method_lookup_code IS NOT NULL THEN BEGIN SELECT payment_method_code INTO v_pay_method_code FROM iby_payment_methods_tl WHERE UPPER (payment_method_name) = UPPER (a_head.payment_method_lookup_code); DBMS_OUTPUT.put_line ('payment method is valid'); EXCEPTION WHEN OTHERS THEN v_error_h_flag := 1; v_error_h_msg := 'payment method validation error - ' || SQLERRM; xx_apinvc_error_proc ('AP INVOICE CONVERSION', 'HEADER LEVEL', a_head.invoice_num || '-' || a_head.vendor_num || '-' || a_head.payment_method_lookup_code, a_head.payment_method_lookup_code, v_pay_method_code, v_error_h_msg, SYSDATE, 'E' ); DBMS_OUTPUT.put_line ( 'payment method error - ' || v_error_h_msg ); END; END IF; -- pay group validation v_pay_group_code := NULL; IF a_head.pay_group_lookup_code IS NOT NULL THEN BEGIN SELECT lookup_code INTO v_pay_group_code FROM fnd_lookup_values WHERE ( UPPER (meaning) = UPPER (a_head.pay_group_lookup_code) OR UPPER (lookup_code) = UPPER (a_head.pay_group_lookup_code) ) AND lookup_type = 'PAY GROUP' AND enabled_flag = 'Y' AND UPPER (source_lang) = UPPER ('US');

DBMS_OUTPUT.put_line ('pay group is valid'); EXCEPTION WHEN OTHERS THEN v_error_h_flag := 1; v_error_h_msg := 'pay group validation error - ' || SQLERRM; xx_apinvc_error_proc ('AP INVOICE CONVERSION', 'HEADER LEVEL', a_head.invoice_num || '-' || a_head.vendor_num || '-' || a_head.pay_group_lookup_code, a_head.pay_group_lookup_code, v_pay_group_code, v_error_h_msg, SYSDATE, 'E' ); DBMS_OUTPUT.put_line ('pay group error - ' || v_error_h_msg); END; END IF; -- invoice type validation v_invoice_type := NULL; IF a_head.invoice_type IS NOT NULL THEN BEGIN SELECT lookup_code INTO v_invoice_type FROM fnd_lookup_values WHERE ( UPPER (meaning) = UPPER (a_head.invoice_type) OR UPPER (lookup_code) = UPPER (a_head.invoice_type) ) AND UPPER (lookup_type) = UPPER ('INVOICE TYPE') AND enabled_flag = 'Y' AND UPPER (source_lang) = UPPER ('US') AND view_application_id = 200; DBMS_OUTPUT.put_line ('invoice_type is valid'); EXCEPTION WHEN OTHERS THEN v_error_h_flag := 1; v_error_h_msg := 'invoice_type validation error - ' || SQLERRM; xx_apinvc_error_proc ('AP INVOICE CONVERSION', 'HEADER LEVEL', a_head.invoice_num || '-' || a_head.vendor_num || '-' || a_head.invoice_type, a_head.invoice_type, v_invoice_type, v_error_h_msg, SYSDATE, 'E'

); DBMS_OUTPUT.put_line ( 'invoice type error - ' || v_error_h_msg ); END; END IF; IF v_error_h_flag = 0 THEN v_invoice_id := NULL; BEGIN SELECT ap_invoices_interface_s.NEXTVAL INTO v_invoice_id FROM DUAL; EXCEPTION WHEN OTHERS THEN v_error_h_flag := 1; v_error_h_msg := 'header sequence validation' || SQLERRM; DBMS_OUTPUT.put_line ( 'header sequence error' || v_error_h_msg ); END; BEGIN DBMS_OUTPUT.put_line ('HEADER IS GOING TO START'); INSERT INTO ap_invoices_interface (invoice_id, invoice_num, invoice_type_lookup_code, invoice_date, gl_date, vendor_id, vendor_site_id, invoice_amount, invoice_currency_code, terms_id, description, SOURCE, org_id, payment_method_lookup_code, pay_group_lookup_code, created_by, creation_date, last_update_date, last_updated_by, last_update_login ) VALUES (v_invoice_id, a_head.invoice_num, v_invoice_type, a_head.invoice_date, a_head.gl_date, v_vendor_id, v_vendor_site_id, v_inv_amount, v_inv_currc_code, v_term_id, a_head.description, v_source, v_org_id, v_pay_method_code, v_pay_group_code, 0, SYSDATE, SYSDATE, 0, 0 ); DBMS_OUTPUT.put_line ('HEADER INSERTION IS SUCCESSFULLY'); EXCEPTION WHEN OTHERS THEN v_error_h_flag := 1; v_error_h_msg := 'EXCEPTION AT AP INVOICE HEADER INSERTION' || SQLERRM; xx_apinvc_error_proc ('AP INVOICE CONVERSION', 'HEADER LEVEL', a_head.invoice_num

|| '-' || a_head.vendor_num, 'HEADER INSERTION FAILED', 'AP INVOICE HEADER INSERTION', v_error_h_msg, SYSDATE, 'E' ); DBMS_OUTPUT.put_line ( 'AP INVOICE HEADER INSERTION ERROR' || v_error_h_msg ); END; BEGIN DBMS_OUTPUT.put_line ('LINE IS GOING TO START'); FOR a_line IN (SELECT * FROM invoice_staging_table WHERE invoice_num = a_head.invoice_num AND error_status = 'N') LOOP DBMS_OUTPUT.put_line ('IN LINE LOOP'); --linetype validation v_line_type_code := NULL; IF a_line.line_type_lookup_code IS NOT NULL THEN BEGIN SELECT lookup_code INTO v_line_type_code FROM fnd_lookup_values WHERE UPPER (meaning) = UPPER (a_line.line_type_lookup_code) AND UPPER (lookup_type) = UPPER ('INVOICE DISTRIBUTION TYPE') AND enabled_flag = 'Y' AND UPPER (source_lang) = UPPER ('US'); DBMS_OUTPUT.put_line ('line type code is valid'); EXCEPTION WHEN OTHERS THEN v_error_l_flag := 1; v_error_l_msg := 'line type code validation error - ' || SQLERRM; xx_apinvc_error_proc ('AP INVOICE CONVERSION', 'LINE LEVEL', a_head.invoice_num || '-' || a_line.line_number || '-' || a_line.line_type_lookup_code, a_line.line_type_lookup_code, v_line_type_code, v_error_l_msg, SYSDATE, 'E' ); DBMS_OUTPUT.put_line ( 'line type code error - '

|| v_error_l_msg ); END; ELSE v_error_l_flag := 1; v_error_l_msg := 'line type code is null - ' || SQLERRM; xx_apinvc_error_proc ('AP INVOICE CONVERSION', 'LINE LEVEL', a_head.invoice_num || '-' || a_line.line_number || '-' || a_line.line_type_lookup_code, 'LINE TYPE CODE IS NULL', v_line_type_code, v_error_l_msg, SYSDATE, 'E' ); DBMS_OUTPUT.put_line ('line type code is null'); END IF; ---line amount validation v_amount := NULL; IF a_line.line_amount IS NOT NULL THEN v_amount := a_line.line_amount; ELSE v_error_l_flag := 1; v_error_l_msg := 'invoice line amount is null - ' || SQLERRM; xx_apinvc_error_proc ('AP INVOICE CONVERSION', 'LINE LEVEL', a_head.invoice_num || '-' || a_line.line_number || '-' || a_line.line_amount, 'INVOICE LINE AMOUNT IS NULL', v_amount, v_error_l_msg, SYSDATE, 'E' ); DBMS_OUTPUT.put_line ('invoice line amount is null'); END IF; --code combination validation v_dist_code_id := NULL; IF a_line.dist_code_concatenated IS NOT NULL THEN BEGIN SELECT code_combination_id INTO v_dist_code_id FROM gl_code_combinations_kfv WHERE concatenated_segments = a_line.dist_code_concatenated AND enabled_flag = 'Y'

AND (

end_date_active IS NULL OR end_date_active >= SYSDATE );

DBMS_OUTPUT.put_line ('code combination is valid'); EXCEPTION WHEN OTHERS THEN v_error_l_flag := 1; v_error_l_msg := 'code combination validation error - ' || SQLERRM; xx_apinvc_error_proc ('AP INVOICE CONVERSION', 'LINE LEVEL', a_head.invoice_num || '-' || a_line.line_number || '-' || a_line.dist_code_concatenated , a_line.dist_code_concatenated, v_dist_code_id, v_error_l_msg, SYSDATE, 'E' ); DBMS_OUTPUT.put_line ( END; END IF; IF v_error_l_flag = 0 THEN v_invoice_line_id := NULL; BEGIN SELECT ap_invoice_lines_interface_s.NEXTVAL INTO v_invoice_line_id FROM DUAL; EXCEPTION WHEN OTHERS THEN v_error_l_flag := 1; v_error_l_msg := 'line sequence validation' || SQLERRM; DBMS_OUTPUT.put_line ( 'line sequence error' || v_error_l_msg ); END; BEGIN DBMS_OUTPUT.put_line ('LINE IS GOING TO START'); INSERT INTO ap_invoice_lines_interface (invoice_id, invoice_line_id, line_number, line_type_lookup_code, amount, 'code combination error - ' || v_error_l_msg );

accounting_date, description, dist_code_combination_id, org_id, created_by, creation_date, last_update_date, last_updated_by, last_update_login ) VALUES (v_invoice_id, v_invoice_line_id, a_line.line_number, a_line.line_type_lookup_code, v_amount, a_line.invoice_date, a_line.line_description, v_dist_code_id, v_org_id, 0, SYSDATE, SYSDATE, 0, 0 ); DBMS_OUTPUT.put_line ('LINE INSERTION IS SUCCESSFULLY'); EXCEPTION WHEN OTHERS THEN v_error_l_flag := 1; v_error_l_msg := 'EXCEPTION AT AP INVOICE LINE INSERTION' || SQLERRM; xx_apinvc_error_proc ('AP INVOICE LINE CONVERSION', 'LINE LEVEL', a_head.invoice_num || '-' || a_line.line_number, 'LINE INSERTION FAILED', 'AP INVOICE LINE INSERTION', v_error_l_msg, SYSDATE, 'E' ); DBMS_OUTPUT.put_line ( 'AP INVOICE LINE INSERTION ERROR' || v_error_l_msg ); END; ELSE v_error_l_flag := 1; v_error_l_msg := 'line validation failed - ' || SQLERRM; xx_apinvc_error_proc ('AP INVOICE CONVERSION', 'LINE LEVEL', a_head.invoice_num, 'line validation failed', 'ERROR_FLAG ERROR AT AP INVOICE LINE INSERTION', v_error_l_msg, SYSDATE, 'E' ); DBMS_OUTPUT.put_line ( 'line validation failed' || v_error_l_msg ); END IF; END LOOP;

EXCEPTION WHEN OTHERS THEN v_error_l_flag := 1; v_error_l_msg := 'EXCEPTION AT LINE BLOCK' || SQLERRM; DBMS_OUTPUT.put_line ('EXCEPTION AT LINE BLOCK'); END; ELSE v_error_h_flag := 1; v_error_h_msg := 'header validation failed - ' || SQLERRM; xx_apinvc_error_proc ('AP INVOICE CONVERSION', 'HEADER LEVEL', a_head.invoice_num, 'header validation failed', 'ERROR_FLAG ERROR AT AP INVOICE HEADER INSERTION', v_error_h_msg, SYSDATE, 'E' ); DBMS_OUTPUT.put_line ('header validation failed' || v_error_h_msg); END IF; ELSE v_error_h_flag := 1; v_error_h_msg := 'invoice number already exists - ' || SQLERRM; xx_apinvc_error_proc ('AP INVOICE CONVERSION', 'HEADER LEVEL', a_head.invoice_num || '-' || a_head.vendor_num, 'invoice num repeated', 'invoice number already exists', v_error_h_msg, SYSDATE, 'E' ); DBMS_OUTPUT.put_line ( 'invoice number already exists - ' || v_error_h_msg ); END IF; IF v_error_h_flag = 1 OR v_error_l_flag = 1 THEN ROLLBACK; UPDATE invoice_staging_table SET error_status = 'E' WHERE invoice_num = a_head.invoice_num; COMMIT; ELSE UPDATE invoice_staging_table SET error_status = 'S' WHERE invoice_num = a_head.invoice_num; COMMIT; END IF; END LOOP; END xxanb_apinvoice_conv_proc11; /

You might also like