0% found this document useful (0 votes)
31 views

Sample Script

This procedure processes invoice data from a staging table and inserts it into interface tables for further processing. It validates supplier, payment, and accounting configuration data and handles errors. If validation is successful, it inserts a new invoice record along with an initial line item into the interface tables. The procedure loops through records in the staging table to process multiple invoices.

Uploaded by

gufran.momin25
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
31 views

Sample Script

This procedure processes invoice data from a staging table and inserts it into interface tables for further processing. It validates supplier, payment, and accounting configuration data and handles errors. If validation is successful, it inserts a new invoice record along with an initial line item into the interface tables. The procedure loops through records in the staging table to process multiple invoices.

Uploaded by

gufran.momin25
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 8

CREATE OR REPLACE PROCEDURE XXAP_INVOICE_CREATION_L

AS

V_ORG_ID NUMBER;
V_VENDOR_ID NUMBER;
V_VENDOR_SITE_ID NUMBER;
V_INV_TYPE_CODE VARCHAR2(100);
V_INV_COUNT NUMBER;
V_CURRENCY_CODE VARCHAR2(10);
v_liability_account VARCHAR2(500);
V_INV_ID NUMBER;
V_INV_LINE_ID NUMBER;
V_INVOICE_AMOUNT NUMBER;
v_terms_id NUMBER;
V_PAY_METHOD VARCHAR2(10);
v_source_code varchar2(10);
V_ACCT_CCID NUMBER;
V_STARTING_TIME VARCHAR2(100);
V_ENDING_TIME VARCHAR2(100);
V_SOURCE_COUNT NUMBER;
CURSOR C1
IS
SELECT * FROM XXAP_INVOICE_STG_LINE WHERE nvl(IFACE_STATUS,'E') in ('E','IE');

BEGIN
FOR I IN C1
LOOP
----------------variable null---------------------------------
V_ERR_FLAG := NULL;
V_ERR_MESG := NULL;
V_ORG_ID := NULL;
V_VENDOR_ID := NULL;
V_VENDOR_SITE_ID := NULL;
V_INV_COUNT := 0;
V_CURRENCY_CODE := NULL;
V_INV_TYPE_CODE := null;
V_INVOICE_AMOUNT :=0;
V_PAY_METHOD := NULL;
V_LIABILITY_ACCOUNT := NULL;
V_INV_LINE_ID := NULL;
-------------------------------------------startiing date update for staging
table----------------------------
V_STARTING_TIME := TO_CHAR (SYSDATE, 'DD-mm-YYYY');
BEGIN
UPDATE XXAP_INVOICE_STG_LINE
SET STARTING_TIME =V_STARTING_TIME,
USER_NAME = V_USER_NAME

WHERE 1=1
and ST_ID =I.ST_ID
AND INVOICE_NUM= I.INVOICE_NUM;
--- COMMIT;
EXCEPTION
WHEN OTHERS THEN
FND_FILE.PUT_LINE (FND_FILE.LOG,'Unable to Update Start time '||SQLERRM);
END;
------------------------Operating unit----------------------------------
IF i.OU_NAME IS NULL THEN
v_err_flag :='Y';
V_ERR_MESG := 'Operating Unit Required';
ELSE
BEGIN
SELECT ORGANIZATION_ID
INTO V_ORG_ID
FROM HR_ALL_ORGANIZATION_UNITS
WHERE TRIM(name) = TRIM(i.OU_NAME);
EXCEPTION
WHEN OTHERS THEN
v_err_flag :='Y';
V_ERR_MESG := 'Invalid Operating Unit';
END;
END IF;
------------------------------------Liability Code
Combination-------------------------------
IF i.liability_account IS NULL THEN
v_err_flag :='Y';
V_ERR_MESG := 'Invalid Code Combination';
ELSE
BEGIN
SELECT CODE_COMBINATION_ID
INTO V_ACCT_CCID
FROM GL_CODE_COMBINATIONS
WHERE 1=1
AND SEGMENT1
||'.'
||SEGMENT2
||'.'
||SEGMENT3
||'.'
||SEGMENT4
||'.'
||SEGMENT5
||'.'
||SEGMENT6
||'.'
||SEGMENT7 =i.liability_account;
IF V_ACCT_CCID IS NULL THEN
v_err_flag :='Y';
V_ERR_MESG := ' Account Cross Vadidation Failed';
END IF;
END;
END IF;
---------------------------Supplier---------------------------
IF i.supplier IS NULL THEN
v_err_flag :='Y';
V_ERR_MESG := 'Supplier Required';
ELSE
BEGIN
SELECT VENDOR_ID
INTO v_vendor_id
FROM AP_SUPPLIERS
WHERE upper(vendor_name)=upper(i.supplier);
EXCEPTION
WHEN OTHERS THEN
v_err_flag :='Y';
V_ERR_MESG := 'Invalid Supplier';
END;
END IF;
---------------------------Supplier
site----------------------------------------------
IF v_vendor_id IS NOT NULL THEN
IF i.site IS NULL THEN
v_err_flag :='Y';
V_ERR_MESG := 'Invalid Supplier Site';
ELSE
BEGIN
SELECT VENDOR_SITE_ID
INTO v_vendor_site_id
FROM AP_SUPPLIER_SITES_ALL
WHERE VENDOR_ID =V_VENDOR_ID
AND ORG_ID =V_ORG_ID
AND UPPER(VENDOR_SITE_CODE)=UPPER(I.SITE);
EXCEPTION
WHEN OTHERS THEN
v_err_flag :='Y';
V_ERR_MESG := 'Invalid Supplier Site';
END;
END IF;
END IF;

--------------------------------Payment
method-----------------------------------------------

BEGIN
SELECT LOOKUP_CODE
INTO V_PAY_METHOD
FROM FND_LOOKUP_VALUES
WHERE LOOKUP_TYPE='PAYMENT METHOD'
AND trim(meaning)=trim(i.payment_method);
EXCEPTION
WHEN OTHERS THEN
v_err_flag :='Y';
V_ERR_MESG := 'Invalid Payment Method';
END;

---------------------------------Invoice
num----------------------------------------
IF i.invoice_num IS NULL THEN
V_ERR_FLAG :='Y';
V_ERR_MESG := 'Invoice Num Required';
ELSE
SELECT COUNT(*)
INTO V_INV_COUNT
FROM AP_INVOICES_ALL
WHERE ORG_ID =V_ORG_ID
AND VENDOR_ID =V_VENDOR_ID
AND VENDOR_SITE_ID =V_VENDOR_SITE_ID
AND trim(invoice_num)=trim(i.invoice_num);

IF v_inv_count >0 THEN


v_err_flag :='Y';
V_ERR_MESG := 'Already Invoice Num Exists For Same Supplier';

END IF;
END IF;
--------------------Invoice
currency------------------------------------------------
IF i.invoice_currency IS NULL THEN
v_err_flag :='Y';
V_ERR_MESG := 'Invoice Currency Required';
ELSE
BEGIN
SELECT CURRENCY_CODE
INTO V_CURRENCY_CODE
FROM FND_CURRENCIES_TL
WHERE trim(currency_code)=trim(i.invoice_currency);
EXCEPTION
WHEN OTHERS THEN
v_err_flag :='Y';

V_ERR_MESG := 'Invalid Invoice Currency';


END;
END IF;
-----------------------------Terms
name------------------------------------------
IF i.terms_name IS NOT NULL THEN
BEGIN
SELECT TERM_ID
INTO V_TERMS_ID
FROM AP_TERMS_TL
WHERE upper(name)=upper(i.terms_name);
EXCEPTION
WHEN OTHERS THEN
v_err_flag :='Y';

V_ERR_MESG := 'Invalid Terms Name';


END;
END IF;

--------------------------------Invoice
source-------------------------------------------
begin
select lookup_code
into v_source_code
from fnd_lookup_values
where lookup_type='SOURCE'
and meaning='EXTERNAL';
exception
when others
then
v_source_code :=null;
v_err_flag :='Y';
V_ERR_MESG :='Invalid Invoice Source';
end;

------------------------------Invoice
type-----------------------------------------------
IF i.type IS NOT NULL THEN
BEGIN
IF i.type='Mixed' AND i.INVOICE_AMOUNT LIKE '-%'
THEN
SELECT LOOKUP_CODE
INTO V_INV_TYPE_CODE
FROM FND_LOOKUP_VALUES
WHERE LOOKUP_TYPE ='INVOICE TYPE'
AND TRIM(MEANING) =TRIM('Credit Memo')
and VIEW_APPLICATION_ID=200;
elsif i.type ='Mixed' AND i.INVOICE_AMOUNT Not LIKE '-%'
THEN
SELECT LOOKUP_CODE
INTO V_INV_TYPE_CODE
FROM FND_LOOKUP_VALUES
WHERE LOOKUP_TYPE='INVOICE TYPE'
AND TRIM(MEANING)=TRIM('Standard')
and VIEW_APPLICATION_ID=200;

ELSE
SELECT LOOKUP_CODE
INTO V_INV_TYPE_CODE
FROM FND_LOOKUP_VALUES
WHERE LOOKUP_TYPE='INVOICE TYPE'
AND TRIM(MEANING)=TRIM(I.type)
and VIEW_APPLICATION_ID=200;
END IF;
EXCEPTION
WHEN OTHERS THEN
v_inv_type_code :=NULL;
v_err_flag :='Y';
V_ERR_MESG :='Invalid Invoice Type';
END;
END IF;
-------------
---if nvl(v_err_flag,'N')='N'
--- then
select AP_INVOICES_INTERFACE_S.NEXTVAL
into V_INV_ID
from DUAL;

-------------------------------AP invoice
interface-----------------------------------------------------
--------------Added Validate only condition--------------
if V_INV_ID is not null
then
INSERT
INTO AP_INVOICES_INTERFACE
(
org_id,
INVOICE_TYPE_LOOKUP_CODE,
VENDOR_ID,
vendor_site_id,
INVOICE_DATE,
INVOICE_NUM,
INVOICE_ID,
invoice_currency_code,
invoice_amount,
gl_date,
PAYMENT_METHOD_LOOKUP_CODE,
payment_method_code,
terms_id,
CREATED_BY,
CREATION_DATE,
LAST_UPDATE_DATE,
LAST_UPDATED_BY,
source
)
VALUES
(
v_org_id,
V_INV_TYPE_CODE,
V_VENDOR_ID,
v_vendor_site_id,
I.INVOICE_DATE,
I.INVOICE_NUM,
V_INV_ID,
i.invoice_currency,
i.INVOICE_AMOUNT,
I.GL_DATE,
V_PAY_METHOD,
v_pay_method,
v_terms_id,
X_USER_ID,
sysdate,
SYSDATE,
x_user_id,
v_source_code
);
--- COMMIT;
-------------------------inserting lines information---------------
SELECT ap_invoice_lines_interface_s.NEXTVAL
INTO v_inv_line_id
FROM DUAL;
-----------------------------AP invoice lines
interface-----------------------------------------------------

INSERT
INTO ap_invoice_lines_interface
(
invoice_id,
invoice_line_id,
line_number,
amount,
org_id,
CREATED_BY,
CREATION_DATE,
LAST_UPDATE_DATE,
DIST_CODE_COMBINATION_ID,
line_type_lookup_code,
accounting_date
)
VALUES
(
v_inv_id,
v_inv_line_id,
1,
i.invoice_amount,
v_org_id,
x_user_id,
sysdate,
SYSDATE,
V_ACCT_CCID,
'ITEM',
I.GL_DATE
);
--- COMMIT;
---------------STATUS UPPDATE FOR STAGING TABLE-------------------
BEGIN
UPDATE XXAP_INVOICE_STG_LINE
SET IFACE_STATUS ='I',
PROCESS_FLAG ='Y',
ERROR_MESSAGE =NULL,
IFACE_ID =V_INV_ID
WHERE TRIM(INVOICE_NUM) =TRIM(I.INVOICE_NUM)
AND TRIM(OU_NAME)=TRIM(I.OU_NAME)
AND ST_ID =I.ST_ID;
--- COMMIT;
EXCEPTION
WHEN OTHERS THEN
FND_FILE.PUT_LINE (FND_FILE.LOG,'Unable to insert into interface table '||
SQLERRM);
END;
--------------Added Validate only condition--------------
else
BEGIN
UPDATE XXAP_INVOICE_STG_LINE
SET IFACE_STATUS ='E',
ERROR_MESSAGE =V_ERR_MESG,
IFACE_ID =V_INV_ID
WHERE TRIM(INVOICE_NUM) =TRIM(I.INVOICE_NUM)
AND trim(OU_NAME)=trim(i.OU_NAME)
AND ST_ID =I.ST_ID;
--- COMMIT;
EXCEPTION
WHEN OTHERS THEN
FND_FILE.PUT_LINE (FND_FILE.LOG,'Unable to update validation errors '||
SQLERRM);
END;
END IF;
--end if ;
V_Ending_Time:= TO_CHAR (SYSDATE, 'DD-MON-YYYY HH:MI:SS');
-----------------ENDING DATE UPODATE------------------------------
BEGIN
UPDATE XXAP_INVOICE_STG_LINE
SET Ending_Time = V_Ending_Time
WHERE ST_ID = I.ST_ID
AND INVOICE_NUM=I.INVOICE_NUM;
--- COMMIT;
EXCEPTION
WHEN OTHERS THEN
FND_FILE.PUT_LINE (FND_FILE.LOG,'Unable to Update End time '||SQLERRM);
END;

END LOOP;

SELECT COUNT(*) INTO V_SOURCE_COUNT FROM XXAP_INVOICE_STG_LINE;


SELECT COUNT(*)
INTO V_TARGET
FROM XXAP_INVOICE_STG_LINE
WHERE IFACE_STATUS = 'I';
SELECT COUNT(*)
INTO V_TARGET_ERROR
FROM XXAP_INVOICE_STG_LINE
WHERE IFACE_STATUS <> 'I';

dbms_output.put_line('**********************************');
FND_FILE.PUT_LINE (FND_FILE.OUTPUT,
'**************************************************');
---fnd_file.put_line (FND_FILE.OUTPUT, 'Concurrent Program Name : '||
v_conc_prog_name);
FND_FILE.PUT_LINE (FND_FILE.OUTPUT, 'Executed BY : '||
V_USER_NAME);
fnd_file.put_line (FND_FILE.OUTPUT, 'Executed DATE : '||
sysdate);
fnd_file.put_line (FND_FILE.OUTPUT, 'Total No of Records Extracted : '||
v_source_count);
fnd_file.put_line (FND_FILE.OUTPUT, 'Total No of Records Sucessfull : '||
v_target);
FND_FILE.PUT_LINE (FND_FILE.OUTPUT, 'Total No of Records Error Out : '||
V_TARGET_ERROR);
FND_FILE.PUT_LINE (FND_FILE.OUTPUT,
'**************************************************');
FND_FILE.PUT_LINE (FND_FILE.OUTPUT, '
');
FND_FILE.PUT_LINE (FND_FILE.OUTPUT, '
');
FND_FILE.PUT_LINE (FND_FILE.OUTPUT,
'===================================================');
FND_FILE.PUT_LINE (FND_FILE.OUTPUT, ' Error Records List For AP Open Invoices
Conversion');
FND_FILE.PUT_LINE (FND_FILE.OUTPUT,
'===================================================');
--------
END;

You might also like