Sei sulla pagina 1di 104

create or replace PACKAGE BODY Msi_Ap_Edi_NM_Inv_Pkg

AS
--
***********************************************************************************
*************************
-- Application Name :
-- Package Name : Msi_Ap_Edi_NM_Inv_Pkg.pkb
-- Author Name : Ashwani Aggarwal
-- Date of Creation : 07-Sep-2005F
-- Description : This procedure is used by Michaels: EDI
Interface Interface Program
-- Concurrent Program to good and bad file of same
format as the orginal flat file
--
-- Database References :
--
-----------------------------------------------------------------------------------
------------------
-- Object Name Object Type Select Insert Update Delete
Execute
--
-----------------------------------------------------------------------------------
------------------
-- MIKE_EDI_HEADERS_STG_EXT Table X
-- MIKE_EDI_DETAILS_STG_EXT Table X
-- MIKE_EDI_SUMMARY_STG_EXT Table X
-- MIKE_EDI_NM_A_STG_EXT Table X X
-- MIKE_EDI_MERC_T_STG_EXT Table X X
--
-----------------------------------------------------------------------------------
------------------
-- Version Number :
-- Revision History :
--
-----------------------------------------------------------------------------------
------------------
-- Rno Date Changed Changed By Change Details
--
-----------------------------------------------------------------------------------
------------------
-- 1.0 07-Sep-2005 Ashwani Aggarwal No Changes

--
***********************************************************************************
*************************
--
-- Debug Flag
--
g_debug_flag VARCHAR2 (1);
l_shp_nm varchar2(20);-- Debug flag------------To be removed
module VARCHAR2 (100);
g_bad_req_id NUMBER;
l_wf_count VARCHAR2 (25);
g_purge_data VARCHAR2 (1);
g_request_id NUMBER := fnd_global.conc_request_id;
g_batch_date_get DATE
:= NVL (TO_DATE (fnd_profile.VALUE ('MIKE_BATCH_START_DATE'), 'DD-MON-YYYY')
,SYSDATE);
g_sysdate DATE :=
SYSDATE;
--g_sysdate Added by Vamsi Krishna on 29-AUG-
2007

TYPE duplicate_inv_count_rec_type IS RECORD (


vendor_id VARCHAR2 (20)
,inv_count NUMBER
);

g_gat_tab_stat_req_id batch_process_tbl_type;
g_gat_tab_req_count NUMBER;

TYPE duplicate_inv_tbl_type IS TABLE OF duplicate_inv_count_rec_type


INDEX BY BINARY_INTEGER;

duplicate_inv_tbl duplicate_inv_tbl_type;

TYPE batch_invoice_id_type IS TABLE OF mike_invoices_interface.invoice_id%TYPE


INDEX BY BINARY_INTEGER;

batch_invoice_id batch_invoice_id_type;

PROCEDURE process_null_po ( errbuf OUT VARCHAR2


,retcode OUT NUMBER);

PROCEDURE main (
x_errbuf OUT NOCOPY VARCHAR2
,x_retcode OUT NOCOPY NUMBER
,p_batch_option IN VARCHAR2 DEFAULT 'ALL'
,data_file_name VARCHAR2 DEFAULT NULL
,p_purge_accepted_data VARCHAR2 DEFAULT 'N'
,p_debug_flag IN VARCHAR2)
IS
l_data_file_name VARCHAR2 (200);
l_data_file_owner VARCHAR2 (30);
e_exception EXCEPTION;
l_errmesg VARCHAR2 (1000);
l_retcode NUMBER := 0;
poimp_reqid NUMBER := 0;
l_request_id NUMBER := fnd_global.conc_request_id;
l_req_id NUMBER := 0;
l_hdr_err_cnt NUMBER;
l_dtl_err_cnt NUMBER;
l_wait_days NUMBER;
l_in50_date DATE := SYSDATE;
l_track_date DATE := SYSDATE;
BEGIN
/* IF TRUNC (G_batch_date_get) <> TRUNC (SYSDATE) THEN
L_retcode := 2;
L_errmesg :=
'Please run the "Michaels: Control-M First Job" before running this
program';
RAISE E_exception;
END IF;*/
l_data_file_name := data_file_name;
g_debug_flag := p_debug_flag;
g_purge_data := p_purge_accepted_data;
module := 'Main';
--calling procedure to Update AP-EDI error records to 'L' so that they can be
reprocessed.
update_for_reprocess;
dbms_output.put_line('prgame begins point 1');

IF p_batch_option IN ('NEW', 'ALL')


AND data_file_name IS NULL
THEN
dbms_output.put_line('prgame begins point 2 inside 1st IF');
LOG ('Main', 'File Name is NULL for Import Option New or ALL');
ELSIF p_batch_option = 'NON EDI'
THEN
dbms_output.put_line(' p_batch_option');
fnd_file.put_line
(fnd_file.LOG
, 'The Process will consider only the Errored Data in the Copy of
interface table for processing . '
|| ' and the Data File will not be considered for processing . ');
END IF;
dbms_output.put_line('before');

-- Update ETL File name


IF p_batch_option IN ('ALL', 'NEW')
AND l_data_file_name IS NOT NULL
THEN
dbms_output.put_line('Inside IF');
mike_common_inbound_pkg.update_etl_file_name (l_errmesg
,l_retcode
,'MIKE_EDI_NM_TEST_EXT'
,data_file_name);
mike_common_inbound_pkg.update_etl_file_name (l_errmesg
,l_retcode
,'MIKE_EDI_NM_A_STG_EXT'
,data_file_name);
mike_common_inbound_pkg.update_etl_file_name (l_errmesg
,l_retcode
,'MIKE_EDI_NM_T_STG_EXT'
,data_file_name);

IF l_retcode = 2
THEN
dbms_output.put_line('ETL Table file issue');
LOG ('Main', 'Error Updating the ETL Table Data File: '
|| l_errmesg);
RAISE e_exception;
END IF;
dbms_output.put_line('before validate file issue');
validate_file (l_errmesg, l_retcode);
dbms_output.put_line('afeter validate file issue');

IF l_retcode = 2
THEN
dbms_output.put_line('File level valid');--AND l_errmesg IS NOT NULL THEN
LOG ('Main', 'Error in File Level validations: '
|| l_errmesg);
RAISE e_exception;
END IF;

-- Start PMO# 171009: PRB0008324 Resolution


LOG ('Main', 'Processing Invoices with null PO');
process_null_po (l_errmesg, l_retcode);
IF l_retcode = 2
THEN
dbms_output.put_line('Invoicewith null');
LOG
('Main'
, 'Error in Processing Invoices with null PO'
|| l_errmesg);
RAISE e_exception;
END IF;

-- End PMO# 171009: PRB0008324 Resolution

dbms_output.put_line('before populate_stage_table');
populate_stage_table (l_errmesg, l_retcode);
commit;
dbms_output.put_line('After populate_stage_table');

IF l_retcode = 2
THEN
LOG ('Main', 'Error in Staging table population: '
|| l_errmesg);
RAISE e_exception;
END IF;

process_edi_inv_rec (l_errmesg, l_retcode);

IF l_retcode = 2
THEN
LOG ('Main'
, 'Error in Inerting Data in Custom Interface Tables: '
|| l_errmesg);
RAISE e_exception;
END IF;

upload_edi_header_arch (l_errmesg, l_retcode);

IF l_retcode = 2
THEN
LOG ('Main', 'Error in Inerting Data in Header Archieve Table '
|| l_errmesg);
RAISE e_exception;
END IF;

upload_edi_detail_arch (l_errmesg, l_retcode);

IF l_retcode = 2
THEN
LOG ('Main', 'Error in Inerting Data in Detail Archieve Table '
|| l_errmesg);
RAISE e_exception;
END IF;
END IF;

DBMS_OUTPUT.put_line ('B4 spreed sheet');

--(begin) commented by Vamsi Krishna as part of Match Option on 14-AUG-


2007
--LOG ('Main', 'Getting Quick Invoices Data');
--get_quick_inv_data (l_retcode, l_errmesg);
--(end) commented by Vamsi Krishna as part of Match Option on 14-AUG-2007
LOG ('Main', 'Getting Spreadsheet Data');
get_spreadsheet_data (l_retcode, l_errmesg);
DBMS_OUTPUT.put_line ('after spreed sheet');

IF l_retcode = 2
THEN
DBMS_OUTPUT.put_line ('Error spreed sheet');

LOG ('Main'
, 'Error in Getting Spreadsheet Invoice Data from copy of interface
table '
|| l_errmesg);
RAISE e_exception;
END IF;
DBMS_OUTPUT.put_line ('B4 chck dup inv');
check_duplicate_inv;
DBMS_OUTPUT.put_line ('after check dup');
DBMS_OUTPUT.put_line ('B4 Pcss Inv');
process_invoices (l_retcode
,l_errmesg
,p_batch_option
,p_purge_accepted_data);
DBMS_OUTPUT.put_line ('Aft Pcss Inv');
LOG ('Main', 'Process Invoices Return Code :'
|| l_retcode);
/* IF L_retcode = 2 THEN
LOG ('Main', 'Error in Custom Validation Program ' || L_errmesg);
RAISE E_exception;
END IF;*/
LOG ('Main', 'Purging Staging Header Records');
purge_edihdrs (l_errmesg, l_retcode);
LOG ('Main', 'Purging Staging Detail Records');
purge_edidtls (l_errmesg, l_retcode);
LOG ('Main', 'Purging Staging test Records');
purge_editest (l_errmesg, l_retcode);
COMMIT;
LOG ('Main', '<<<<<<<<<<EDI Interface Program Completed
Successfully>>>>>>>>>>');

EXCEPTION
WHEN e_exception
THEN
fnd_file.put_line (fnd_file.LOG
, 'MAIN PROCEDURE CUSTOM E_EXCEPTION: '
|| SQLERRM);
x_retcode := l_retcode;
x_errbuf := l_errmesg;

IF x_retcode = 2
THEN
ROLLBACK;
purge_edihdrs (l_errmesg, l_retcode);
purge_edidtls (l_errmesg, l_retcode);
purge_editest (l_errmesg, l_retcode);
fnd_file.put_line (fnd_file.LOG, 'Retcode=2 So rollback');
ELSE
COMMIT;
fnd_file.put_line (fnd_file.LOG, 'Retcode=1 So commit');
END IF;
WHEN OTHERS
THEN
fnd_file.put_line (fnd_file.LOG, 'MAIN PROCEDURE EXCEPTION: '
|| SQLERRM);

IF x_retcode = 2
THEN
ROLLBACK;
purge_edihdrs (l_errmesg, l_retcode);
purge_edidtls (l_errmesg, l_retcode);
purge_editest (l_errmesg, l_retcode);
fnd_file.put_line (fnd_file.LOG, 'Retcode=2 So rollback');
ELSE
COMMIT;
fnd_file.put_line (fnd_file.LOG, 'Retcode=1 So commit');
END IF;
END main;

-----------------------------------------------------------------------------------
----------------------------
PROCEDURE LOG (
p_module_name VARCHAR2
,p_log_mesg VARCHAR2)
IS
BEGIN
IF g_debug_flag = 'Y'
THEN
fnd_file.put_line (fnd_file.LOG
, 'Debug Message : '
|| p_module_name
|| ' : '
|| p_log_mesg);
END IF;
END;
-- LOG;

------------------------------------------------------------------------
--Function Name IS_DATE
--Description To check whether the input value is in valid date format
--------------------------------------------------------------------------
FUNCTION is_date (
p_date VARCHAR2)
RETURN NUMBER
IS
l_date DATE;
BEGIN
l_date := TO_DATE (p_date, 'YYYY-MM-DD');
RETURN 1;
EXCEPTION
WHEN OTHERS
THEN
RETURN 0;
END;
------------------------------------------------------------------------
--Function Name IS_NUMBER
--Description To check whether the input value is in valid numeric value
--------------------------------------------------------------------------
FUNCTION is_number (
p_number VARCHAR2)
RETURN NUMBER
IS
l_number NUMBER;
BEGIN
l_number := TO_NUMBER (p_number);
RETURN 1;
EXCEPTION
WHEN OTHERS
THEN
RETURN 0;
END;

-----------------------------------------------------------------------------------
----------------------------
/*******************************************************************************
Function Name : GetUserId
Description : This function return user_id from fnd_user.
******************************************************************************/
FUNCTION getuserid
RETURN NUMBER
IS
l_user_id NUMBER;
BEGIN
l_user_id := fnd_global.user_id;
RETURN l_user_id;
END;

PROCEDURE populate_stage_table (
errbuf OUT NOCOPY VARCHAR2
,retcode OUT NOCOPY NUMBER)
IS
l_edi_hdr_id NUMBER;
module VARCHAR2 (100);
l_next_val NUMBER := 0;
p_last_updated_by NUMBER (30) := TO_NUMBER (fnd_global.user_id);
l_stats_req_id NUMBER (38);
p_last_update_login NUMBER (30) := TO_NUMBER (fnd_global.login_id);

CURSOR c2
IS
SELECT rec_type
,invoice
,vendor
,po
-- ,po_line_num --Yuvi
,STORE
,remaining_data
FROM mikeap.MIKE_EDI_NM_TEST_EXT
--End PMO# 171009: PRB0008324 Resolution
WHERE po is not null
--End PMO# 171009: PRB0008324 Resolution
ORDER BY ROWNUM;
BEGIN
dbms_output.put_line('inside populate staging');
module := 'populate_test_table';
LOG (module, 'Start of populate test stage table ');

FOR r2 IN c2
LOOP
IF r2.rec_type = 'H'
THEN
SELECT msi_nm_batch_s.NEXTVAL
INTO l_next_val
FROM DUAL;
END IF;
dbms_output.put_line('inside populate staging-B4insert');

INSERT INTO mikeap.MIKE_EDI_NM_TEST_STG


(txn_hdr_id
,rec_type
,invoice
,vendor
,po
-- ,po_line_num --Yuvi
,STORE
,remaining_data
,created_by
,creation_date
,last_updated_by
,last_update_date
,last_update_login)
VALUES (l_next_val
,r2.rec_type
,r2.invoice
,r2.vendor
,r2.po
-- ,r2.po_line_num --Yuvi
,r2.STORE
,r2.remaining_data
,p_last_updated_by
,g_batch_date_get
,p_last_updated_by
,SYSDATE
,p_last_update_login);
END LOOP;
dbms_output.put_line(' after Test inside populate staging');

COMMIT;
module := 'populate_stage_table';
LOG (module, 'Start of populate Header stage table ');

BEGIN
SELECT mike_interface_tracking_id_s.NEXTVAL
INTO l_edi_hdr_id
FROM DUAL;
EXCEPTION
WHEN OTHERS
THEN
l_edi_hdr_id := -99;
END;

BEGIN
INSERT INTO MIKE_EDI_NM_HEADERS_STG
(txn_hdr_id
,edi_hdr_id
,LOCATION
,invoice_id
,vendor_id
,po_id
,invoice_dt2
,trans_dt
,po_dt
,type_cd
,name1
,remit_addr_ln1
,remit_addr_ln2
,remit_city
,remit_state
,remit_to_zip
,ship_to_name
,ship_to_addr1
,ship_to_addr2
,ship_to_city
,ship_to_state
,ship_to_zip
,comments
,currency_descr
,terms_disc_per
,terms_disc_amt
,terms_dt
,terms_disc_day
,terms_descr
,trms_bas_dt_cd
,terms_due_dt
,terms_net_days
,terms_d_due_dt
,fob
,ship_dt
,net_perc
,edi_vndr_sts
,process_flag)
SELECT txn_hdr_id
,l_edi_hdr_id
,STORE
,invoice
,vendor
,po
,TO_DATE (TRIM (SUBSTR (remaining_data
,11
,10) ), 'YYYY-MM-DD') invoice_date
,TO_DATE (TRIM (SUBSTR (remaining_data
,1
,10) ), 'YYYY-MM-DD') edi_trans_date
,TO_DATE (TRIM (SUBSTR (remaining_data
,21
,10) ), 'YYYY-MM-DD') po_date
,TRIM (SUBSTR (remaining_data
,31
,2) ) type_code
,TRIM (SUBSTR (remaining_data
,33
,35) ) remit_name
,TRIM (SUBSTR (remaining_data
,68
,35) ) remit_address_1
,TRIM (SUBSTR (remaining_data
,103
,35) ) remit_address_2
,TRIM (SUBSTR (remaining_data
,138
,30) ) remit_city
,TRIM (SUBSTR (remaining_data
,168
,2) ) remit_state
,TRIM (SUBSTR (remaining_data
,170
,9) ) remit_zip
,TRIM (SUBSTR (remaining_data
,179
,25) ) ship_to_name
,TRIM (SUBSTR (remaining_data
,204
,25) ) ship_to_addr_1
,TRIM (SUBSTR (remaining_data
,229
,25) ) ship_to_addr_2
,TRIM (SUBSTR (remaining_data
,254
,18) ) ship_to_city
,TRIM (SUBSTR (remaining_data
,272
,2) ) ship_to_state
,TRIM (SUBSTR (remaining_data
,274
,9) ) ship_to_zip
,TRIM (SUBSTR (remaining_data
,283
,50) ) comments
,TRIM (SUBSTR (remaining_data
,333
,3) ) currency_descr
,TRIM (SUBSTR (remaining_data
,336
,6) ) terms_disc_percentage
,TRIM (SUBSTR (remaining_data
,342
,10) ) terms_disc_amount
,TRIM (SUBSTR (remaining_data
,352
,10) ) terms_date
,TRIM (SUBSTR (remaining_data
,362
,3) ) terms_discount_day
,TRIM (SUBSTR (remaining_data
,365
,80) ) terms_descr
,TRIM (SUBSTR (remaining_data
,445
,2) ) terms_base_date_code
,TRIM (SUBSTR (remaining_data
,447
,10) ) terms_due_date
,TRIM (SUBSTR (remaining_data
,457
,3) ) terms_net_days
,TRIM (SUBSTR (remaining_data
,461
,10) ) terms_discount_due_date
,TRIM (SUBSTR (remaining_data
,471
,5) ) fob
,TO_DATE (TRIM (SUBSTR (remaining_data
,476
,10) ), 'YYYY-MM-DD') ship_date
,TRIM (SUBSTR (remaining_data
,486
,6) ) net_percentage
,TRIM (SUBSTR (remaining_data
,493
,2) ) map_field
,'L'
FROM mikeap.MIKE_EDI_NM_TEST_STG
WHERE rec_type = 'H';

----To be removed---
begin

select LOCATION into l_shp_nm from MIKE_EDI_NM_HEADERS_STG;

Insert into EDI_DUMMY values(l_shp_nm,001);

Exception
when others then
Insert into EDI_DUMMY values('shp_excep',101);
end;

---------

-- WHERE TRIM (Rec_type) IS NOT NULL


-- AND TRIM (STORE) IS NOT NULL --ship_to_loc validation
-- AND TRIM (Invoice) IS NOT NULL --invoice_num validation
-- AND TRIM (Po) IS NOT NULL -- po_num validation
-- AND TRIM (Vendor) IS NOT NULL --vendor_num validation
-- AND Is_date (Edi_trans_date) = 1 -- date format validation
-- AND Is_date (Invoice_date) = 1 -- date format validation
-- AND Is_date (Po_date) = 1 -- date format validation
-- AND Is_number (Terms_discount_day) = 1
-- AND Is_number (Terms_net_days) = 1;
fnd_file.put_line (fnd_file.LOG, 'Sucessfully populated Header stage
table');
EXCEPTION
WHEN OTHERS
THEN
ROLLBACK;
LOG (module
, 'Unexpected Error in populate_stage_table with Headers data
Error: '
|| SQLERRM);
errbuf :=
'Unexpected Error in populate_stage_table with Headers data
Error: '
|| SQLERRM;
retcode := 2;
fnd_file.put_line (fnd_file.LOG, errbuf);
LOG (module, errbuf);
END;

fnd_file.put_line (fnd_file.LOG, 'Start of populate Detail stage table ');

BEGIN
INSERT INTO MIKE_EDI_NM_DETAILS_STG
(txn_hdr_id
,edi_hdr_id
,edi_ln_id
,record_type
,LOCATION
,invoice_id
,vendor_id
,po_id
,item_number
,qty_shipped
,qty_ship_uom
,unit_price
,vndr_stock_num
,upc_id
,michaels_sku
,descr
,extended_cost
,process_flag
, po_line_num )--Yuvi)
SELECT txn_hdr_id
,l_edi_hdr_id --
Tracking ID
,ap_invoice_lines_interface_s.NEXTVAL
,rec_type
,STORE
,invoice
,TRIM (vendor)
,po
--,po_line_num --Yuvi
,assigned_item
,quantity_shipped
,uom
,unit_price
,vendor_stock_number
,upc
,LTRIM (LTRIM (michaels_sku, '0') )
--added ltrim of 0 to remove leading zero from the SKU given in text file on 21-11-
2005
, description
,extended_cost
,'L'
,po_line_num --Yuvi
FROM (SELECT txn_hdr_id
,rec_type
,invoice
,STORE
,po
,vendor
,TRIM (SUBSTR (remaining_data
,1
,10) ) assigned_item
,TRIM (SUBSTR (remaining_data
,11
,10) ) quantity_shipped
,TRIM (SUBSTR (remaining_data
,21
,2) ) uom
,TRIM (SUBSTR (remaining_data
,23
,11) ) unit_price
,TRIM (SUBSTR (remaining_data
,34
,30) ) vendor_stock_number
,TRIM (SUBSTR (remaining_data
,64
,14) ) upc
,TRIM (SUBSTR (remaining_data
,78
,20) ) michaels_sku
,TRIM (SUBSTR (remaining_data
,98
,80) ) description
,TRIM (SUBSTR (remaining_data
,178
,11) ) extended_cost
,TRIM (SUBSTR (remaining_data
,189
,1) ) filler
,TRIM (SUBSTR (remaining_data
,190
,2) ) country_code
,TRIM (SUBSTR (remaining_data
,192
,5) ) po_line_num
FROM MIKE_EDI_NM_TEST_STG
WHERE rec_type = 'D');

-- WHERE TRIM (Record_type) IS NOT NULL


-- AND TRIM (STORE) IS NOT NULL
-- AND TRIM (Invoice) IS NOT NULL
-- AND TRIM (Po) IS NOT NULL
-- AND TRIM (Vendor) IS NOT NULL
-- AND TRIM (Michaels_sku) IS NOT NULL
--Michaels SKU validation
-- AND Is_number (Quantity_shipped) = 1
--quantity validation
-- AND Is_number (Unit_price) = 1); --price validation
fnd_file.put_line (fnd_file.LOG
,'Details Stage Table Sucessfully populated with Details
data');
EXCEPTION
WHEN OTHERS
THEN
ROLLBACK;
LOG
(module
, 'Unexpected Error in populate_stage_table with Details data
SQLCODE : '
|| SQLCODE
|| ' SQLERRM : '
|| SQLERRM);
errbuf :=
'Unexpected Error in populate_stage_table with Details data
SQLCODE : '
|| SQLCODE
|| ' SQLERRM : '
|| SQLERRM;
retcode := 2;
fnd_file.put_line (fnd_file.LOG, errbuf);
LOG (module, errbuf);
END;

BEGIN
INSERT INTO MIKE_EDI_NM_DETAILS_STG
(txn_hdr_id
,edi_hdr_id
,edi_ln_id
,record_type
,LOCATION
,invoice_id
,vendor_id
,po_id
,gross_amt
,ln_item_count
,calc_count
,carrier
,total_rcv
,uom
,allow_ind
,allow_cd
,allow_hnd_chrg
,allow_ag_chrg
,allow_amt
,allow_qual
,allow_perc
,allow_rate
,allow_uom
,allow_qty
,allow_handle
,allow_descr
,allow_option
,process_flag)
SELECT txn_hdr_id
,l_edi_hdr_id --
Tracking ID
,ap_invoice_lines_interface_s.NEXTVAL
--MIKE_INVOICE_LINES_INTERFACE_S.NEXTVAL
, rec_type
,STORE
,invoice
,TRIM (vendor)
,NULL
,gross_amount
,line_item_count
,carton_count
,carrier
,total_received
,uom
,allowance_indicator
,allowance_code
,allowance_handle_charged
,allowance
,allowance_amount
,allowance_percentage_qualifier
,allowance_percentage
,allowance_rate
,allowance_uom
,allowance_quantity
,allowance_method_of_handling
,allowance_descr
,allowance_option
,'L'
FROM (SELECT txn_hdr_id
,rec_type
,invoice
,STORE
,po
,vendor
,TRIM (SUBSTR (remaining_data
,1
,11) ) gross_amount
,TRIM (SUBSTR (remaining_data
,12
,5) ) line_item_count
,TRIM (SUBSTR (remaining_data
,17
,5) ) carton_count
,TRIM (SUBSTR (remaining_data
,22
,35) ) carrier
,TRIM (SUBSTR (remaining_data
,57
,4) ) total_received
,TRIM (SUBSTR (remaining_data
,61
,3) ) uom
,TRIM (SUBSTR (remaining_data
,64
,1) ) allowance_indicator
,TRIM (SUBSTR (remaining_data
,65
,4) ) allowance_code
,TRIM (SUBSTR (remaining_data
,69
,2) ) allowance_handle_charged
,TRIM (SUBSTR (remaining_data
,71
,10) ) allowance
,TRIM (SUBSTR (remaining_data
,81
,11) ) allowance_amount
,TRIM (SUBSTR (remaining_data
,92
,1) ) allowance_percentage_qualifier
,TRIM (SUBSTR (remaining_data
,93
,6) ) allowance_percentage
,TRIM (SUBSTR (remaining_data
,99
,9) ) allowance_rate
,TRIM (SUBSTR (remaining_data
,108
,2) ) allowance_uom
,TRIM (SUBSTR (remaining_data
,110
,10) ) allowance_quantity
,TRIM (SUBSTR (remaining_data
,120
,2) ) allowance_method_of_handling
,TRIM (SUBSTR (remaining_data
,122
,80) ) allowance_descr
,TRIM (SUBSTR (remaining_data
,202
,2) ) allowance_option
FROM mikeap.MIKE_EDI_NM_TEST_STG
WHERE rec_type = 'S');

-- WHERE TRIM (Record_type) IS NOT NULL


-- AND TRIM (STORE) IS NOT NULL
-- AND TRIM (Invoice) IS NOT NULL
-- AND TRIM (Po) IS NOT NULL
-- AND TRIM (Vendor) IS NOT NULL
-- AND Is_number (Gross_amount) = 1
-- AND Is_number (Line_item_count) = 1
-- AND Is_number (Allowance_amount) = 1
-- AND Is_number (Allowance_quantity) = 1);
fnd_file.put_line (fnd_file.LOG
,'Details Stage Table Sucessfully populated with Summary
data');
EXCEPTION
WHEN OTHERS
THEN
ROLLBACK;
LOG
(module
, 'Unexpected Error in populate_stage_table WITH Summary data
SQLCODE : '
|| SQLCODE
|| ' SQLERRM : '
|| SQLERRM);
errbuf :=
'Unexpected Error in populate_stage_table with Summary data
SQLCODE : '
|| SQLCODE
|| ' SQLERRM : '
|| SQLERRM;
retcode := 2;
fnd_file.put_line (fnd_file.LOG, errbuf);
LOG (module, errbuf);
END;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
ROLLBACK;
LOG (module, 'Unexpected Error in populate_stage_table Procedure : '
|| SQLERRM);
errbuf := 'Unexpected Error in populate_stage_table Procedure : '
|| SQLERRM;
fnd_file.put_line (fnd_file.LOG, errbuf);
LOG (module, errbuf);
retcode := 2;
END populate_stage_table;

-----------------------------------------------------------------------------------
----------------------------------------
PROCEDURE validate_file (
errbuf OUT NOCOPY VARCHAR2
,retcode OUT NOCOPY NUMBER)
IS
l_hdr_rec_count NUMBER;
l_dtl_rec_count NUMBER;
l_t_rec_count NUMBER;
l_a_hdr_count NUMBER;
l_a_amt NUMBER;
l_hdr_amt NUMBER;
l_dtl_amt NUMBER;
l_summary_amt NUMBER;
l_summ_rec_count NUMBER;
l_retcode NUMBER;
l_errmesg VARCHAR2 (1000);
module VARCHAR2 (1000);
BEGIN
l_hdr_rec_count := NULL;
l_dtl_rec_count := NULL;
l_dtl_amt := NULL;
l_t_rec_count := NULL;
l_a_hdr_count := NULL;
l_a_amt := NULL;
l_hdr_amt := NULL;
l_summary_amt := 0;
l_summ_rec_count := 0;
module := 'Validate_file';

BEGIN
LOG (module, 'Start VALIDATE_FILE Procedure');

SELECT COUNT (*)


INTO l_hdr_rec_count
FROM MIKE_EDI_NM_TEST_EXT
WHERE rec_type = 'H';

fnd_file.put_line (fnd_file.LOG
, 'Header External Rec Total ..'
|| l_hdr_rec_count);
EXCEPTION
WHEN OTHERS
THEN
retcode := 2;
--Retcode := 1; Modified by Marthir on 6/14/2006.
errbuf := ( 'Error in Getting Header External table count :'
|| SQLERRM);
END;

BEGIN
SELECT COUNT (*)
INTO l_dtl_rec_count
FROM MIKE_EDI_NM_TEST_EXT
WHERE rec_type = 'D';

EXCEPTION
WHEN OTHERS
THEN
retcode := 2;
--Retcode := 1; Modified by Marthir on 6/14/2006.
errbuf := ( 'Error in Getting Detail External table count :'
|| SQLERRM);
END;

fnd_file.put_line (fnd_file.LOG, 'Detail External Rec Total ..'


|| l_dtl_rec_count);

BEGIN
SELECT COUNT (*)
INTO l_summ_rec_count
FROM MIKE_EDI_NM_TEST_EXT
WHERE rec_type = 'S';
EXCEPTION
WHEN OTHERS
THEN
retcode := 2;
--Retcode := 1; Modified by Marthir on 6/14/2006.
errbuf := ( 'Error in Getting Summary External table count :'
|| SQLERRM);
END;

fnd_file.put_line (fnd_file.LOG
, 'Summary External Rec Total ..'
|| l_summ_rec_count);

/*BEGIN
SELECT SUM(quantity_shipped * (unit_price/10000)) INTO l_hdr_amt FROM
MIKE_EDI_DETAILS_STG_EXT;
fnd_file.put_line(fnd_file.log,'Detail External Amount Total ..'||l_hdr_amt);
EXCEPTION
WHEN OTHERS THEN
retcode :=1;
errbuf := ('Error in Getting Sum of Amount from Detail External table :'||
sqlerrm);
END;*/
BEGIN
SELECT SUM (record_count)
INTO l_t_rec_count
FROM MIKE_EDI_NM_T_STG_EXT;

fnd_file.put_line (fnd_file.LOG
, 'Total Record(T External) Record Total ..'
|| l_t_rec_count);
EXCEPTION
WHEN OTHERS
THEN
retcode := 2;
--Retcode := 1; Modified by Marthir on 6/14/2006.
errbuf :=
( 'Error in Total Record Count from T External table :'
|| SQLERRM);
END;

BEGIN
SELECT SUM (header_count)
INTO l_a_hdr_count
FROM MIKE_EDI_NM_A_STG_EXT;

fnd_file.put_line (fnd_file.LOG
, 'Total Record(A External) Header Record Total ..'
|| l_a_hdr_count);
EXCEPTION
WHEN OTHERS
THEN
retcode := 2;
--Retcode := 1; Modified by Marthir on 6/14/2006.
errbuf :=
( 'Error in Getting Total header record count from A External
table :'
|| SQLERRM);
END;

/*BEGIN
SELECT amount/100 INTO l_a_amt from MIKE_EDI_NM_A_STG_EXT;
fnd_file.put_line(fnd_file.log,'Total Record(A External) Header Amount
Total ..'||l_a_amt);
EXCEPTION
WHEN OTHERS THEN
retcode :=1;
errbuf := ('Error in Getting Sum of Invoices amount from A External table :'||
sqlerrm);
END;*/
--Cross validate External table values

--fnd_file.put_line(fnd_file.log,'Total Record in
(HEADER/DETAIL/SUMMARY) ..'||l_dtl_rec_count + l_hdr_rec_count +
l_summ_rec_count);
IF ( l_dtl_rec_count
+ l_hdr_rec_count
+ l_summ_rec_count) <> l_t_rec_count
THEN
fnd_file.put_line (fnd_file.LOG
,'Total record count is not matching with T record
count');
retcode := 2;
--Retcode := 1; Modified by Marthir on 6/14/2006.
END IF;

IF l_hdr_rec_count <> l_a_hdr_count


THEN
fnd_file.put_line (fnd_file.LOG
,'Header record count is not matching with A header
count');
retcode := 2;
--Retcode := 1; Modified by Marthir on 6/14/2006.
END IF;

/*IF l_hdr_amt <> l_a_amt THEN


FND_FILE.PUT_LINE(FND_FILE.LOG,'Header amount is not matching with A header
amount');
END IF; */
LOG (module, 'End validate_file');
EXCEPTION
WHEN OTHERS
THEN
retcode := 2;
--Retcode := 1; Modified by Marthir on 6/14/2006.
errbuf :=
( 'Error in Getting Total header record count from A External
table :'
|| SQLERRM);
END validate_file;

-----------------------------------------------------------------------------------
-----
--Update for Reprocess
-----------------------------------------------------------------------------------
-----
PROCEDURE update_for_reprocess
IS
l_wait_days NUMBER;
BEGIN
l_wait_days := fnd_profile.VALUE ('MIKE_WAIT_DAYS_FOR_RECEIPT');
--Updating all the invoice headers = 'L' in mike_invoices_interface table where
there is a error record in
--mike_exceptions_details table related to PO/PO LINE/PO LINE LOCATION to enable
the program to reprocess the records failed for these errors.
LOG ('update_for_reprocess', 'Updating Invoice Headers..');

UPDATE mike_invoices_interface a
SET a.process_flag = 'L'
,a.attribute15 = 'REPROCESS'
WHERE (EXISTS (
SELECT 1
FROM mike_exceptions_details b
WHERE b.unique_identifier_1 = a.invoice_id
AND b.err_code IN (
SELECT ERROR_CODE
FROM mike_error_codes
WHERE edi_transmit_flag = 'N'
AND ERROR_CODE LIKE 'MSI-2%')
AND b.program_name = 'MSI_AP_EDI_NM_INV_VAL_PKG')
AND NOT EXISTS (
SELECT 1
FROM mike_exceptions_details c
WHERE c.unique_identifier_1 = a.invoice_id
AND c.err_code IN (
SELECT ERROR_CODE
FROM mike_error_codes
WHERE edi_transmit_flag = 'Y'
AND ERROR_CODE LIKE 'MSI-2%')
AND c.program_name = 'MSI_AP_EDI_NM_INV_VAL_PKG')
/*********Begin Change Added by Jayanthi P C for ITWR
13204*******************/
OR EXISTS (
SELECT 1
FROM mike_exceptions_details b
WHERE b.unique_identifier_1 = a.invoice_id
AND b.err_code ='MSI-20711'
AND b.attribute1 IN (
SELECT MEANING
FROM FND_LOOKUP_VALUES
WHERE lookup_type='MIKE_INVOICE_VENDOR'
AND enabled_flag = 'Y'
AND NVL(end_date_active,SYSDATE) > SYSDATE -
1)
AND b.program_name = 'MSI_AP_EDI_NM_INV_VAL_PKG')
OR EXISTS (
SELECT 1
FROM mike_exceptions_details b, mike_invoice_lines_interface ln
WHERE b.unique_identifier_1 = a.invoice_id
AND b.unique_identifier_1 = ln.invoice_id
AND b.unique_identifier_2 = ln.invoice_line_id
AND b.err_code ='MSI-20711'
AND ln.attribute1 IN (
SELECT MEANING
FROM FND_LOOKUP_VALUES
WHERE lookup_type='MIKE_SKU_INVOICE'
AND enabled_flag = 'Y'
AND NVL(end_date_active,SYSDATE) > SYSDATE - 1)
AND b.program_name = 'MSI_AP_EDI_NM_INV_VAL_PKG') )
/*********End of Change Added by Jayanthi P C for ITWR
13204*******************/
AND a.process_flag = 'E';
--(begin) commented by Vamsi Krishna on 22-AUG-2007 as part of Match
Option
-- AND NVL (a.status, 'NORCVHOLD') <> 'RCVHOLD'
-- AND TRUNC (SYSDATE)
-- - TRUNC (a.creation_date) <= l_wait_days;
--(end) commented by Vamsi Krishna on 22-AUG-2007 as part of Match
Option

COMMIT;
--Updating all the invoice lines = 'L' in mike_invoice_lines_interface table where
Process flag at header = 'L'
LOG ('update_for_reprocess', 'Updating Invoice Lines..');

UPDATE mike_invoice_lines_interface a
SET process_flag = 'L'
WHERE EXISTS (SELECT 1
FROM mike_invoices_interface b
WHERE b.invoice_id = a.invoice_id
AND b.process_flag = 'L');

COMMIT;
--Deleting all the records from mike_exceptions_details where the corresponding
invoice has been set to 'L' in previous update statements
LOG ('update_for_reprocess', 'Deleting error records..');

DELETE FROM mike_exceptions_details a


WHERE EXISTS (
SELECT 1
FROM mike_invoices_interface b
WHERE b.invoice_id = a.unique_identifier_1
AND b.process_flag = 'L')
AND program_name = 'MSI_AP_EDI_NM_INV_VAL_PKG';

COMMIT;
END update_for_reprocess;

/*******************************************************************************
Procedure Name : process_edi_inv_rec
Description : This procudure insert records from stagin tables to copy
interface tables.

JUN - JUL 2006 - DAH added coded to delete zero qty


lines and ensure no orphan headers when all lines
are zero qty.
******************************************************************************/
PROCEDURE process_edi_inv_rec (
errbuf OUT NOCOPY VARCHAR2
,retcode OUT NOCOPY NUMBER)
IS
l_user_id NUMBER;
module VARCHAR2 (50);
l_run_num NUMBER := 0;

CURSOR c1 (
c_batch_date_get DATE)
IS
SELECT vendor_num
,external_doc_ref
,COUNT (*) total_records
FROM mikeap.mike_invoices_interface
WHERE process_flag = 'L'
AND SOURCE = 'EDINM'
AND TRUNC (creation_date) = TRUNC (c_batch_date_get)
GROUP BY vendor_num, external_doc_ref;
BEGIN
module := 'Process_Edi_Inv_Rec';
LOG (module, 'Start of the program');
l_user_id := getuserid;

BEGIN
INSERT INTO mike_invoices_interface
(txn_hdr_id
,invoice_id
,invoice_num
,invoice_date
,vendor_num
,last_update_date
,last_updated_by
,last_update_login
,creation_date
,created_by
,attribute1 -- Attribute1 is
for PO_ID
,SOURCE
,doc_category_code
,invoice_received_date
,ship_to_location
,external_doc_ref
,global_attribute1
--edi_vndr_sts
,process_flag
,invoice_currency_code
,invoice_amount
,org_id
--added org_id to store the org id value on basis of Location
,attribute4
,description)--TCS
SELECT a.txn_hdr_id
,ap_invoices_interface_s.NEXTVAL --
Invoice ID
,a.invoice_id --
Invoice_num
,a.invoice_dt2 --
Invoice_date
,LTRIM (RTRIM (a.vendor_id) ) --
Vendor_num
,SYSDATE -- Last
Updated Date
,l_user_id -- Last
Updated by
,l_user_id -- Last
Updated login
,g_batch_date_get --
Creation Date
,l_user_id
--,a.po_id||'.'||a.location -- Attribute1
--> COMMENTED BY ARUN AND ADDED LINE BELOW
, a.po_id --
Attribute1
,'EDINM' -- Source
default value
,'STD INV' -- doc category code
dafault value
,NVL (trans_dt, g_batch_date_get)
-- Changed from sysdate to Trans_dt by Rajiv Dasari on 10-30-2006
/* , DECODE (SUBSTR (a.LOCATION--------EDI NM Change
,1
,3)
,'000', NVL ( (SELECT msi_dept
FROM mike_whse_maint
WHERE msi_warehouse = SUBSTR (a.LOCATION
,4
,2)
AND SUBSTR (a.LOCATION
,4
,2) <> '00')
,a.LOCATION)
,a.LOCATION)*/
,a.location -- Ship to loacation -->
Commented by Ashwani on 13-dec-05 and added above line to change the logic for
derivation of Location
, a.edi_hdr_id -- External doc
reference
,TO_CHAR (TO_NUMBER (a.edi_vndr_sts) ) -- EDI vendor
status
,a.process_flag -- Process flag default
value */
,a.currency_descr
, ( b.gross_amt)
-- / 100)---------EDI NM chnage
,mike_common_vald_pkg.get_org_id
(DECODE (SUBSTR (a.LOCATION
,1
,3)
,'000', NVL
( (SELECT msi_dept
FROM mike_whse_maint
WHERE msi_warehouse =
SUBSTR
(a.LOCATION
,4
,2)
AND SUBSTR
(a.LOCATION
,4
,2) <>
'00')
,a.LOCATION)
,a.LOCATION) )
--added org_id to store the org id value on basis of Location
, a.LOCATION
,a.comments--TCS
FROM MIKE_EDI_NM_HEADERS_STG a
, (SELECT DISTINCT txn_hdr_id
,vendor_id
,invoice_id
,gross_amt
FROM MIKE_EDI_NM_DETAILS_STG
WHERE record_type = 'S') b
WHERE a.txn_hdr_id = b.txn_hdr_id;

LOG (module, ' Header records sucessfully inserted ');


EXCEPTION
WHEN OTHERS
THEN
ROLLBACK;
retcode := 2;
errbuf :=
( 'Error in Inserting Header data to mike_invoice_interface
table :'
|| SQLERRM);
END;

BEGIN
INSERT INTO mike_invoice_lines_interface
(txn_hdr_id
,invoice_id
,invoice_line_id
,line_number
,accounting_date
,attribute1
--Changed to Attribute1 instead of reference_2 on 10-nov-05
--,item_description
, quantity_invoiced
,unit_price
,attribute2
-- Chnaged to Attribute2 instead of attribute1 on 10-nov-2005
, process_flag
,po_number
,ship_to_location_code
,reference_1
,amount
,amount_includes_tax_flag
,global_attribute1
,last_update_date
,last_updated_by
,last_update_login
,creation_date
,created_by
,po_unit_of_measure
,org_id
,PO_LINE_NUMBER)
SELECT med.txn_hdr_id
,mii.invoice_id
--had to make it pick up from sequence.Changed by SriLatha on 5-
Nov-2005
, ap_invoice_lines_interface_s.NEXTVAL
--edi_ln_id AP_INVOICE_LINES_INTERFACE_S.NEXTVAL
, ROW_NUMBER () OVER (PARTITION BY mii.invoice_id ORDER BY 1)

line_number
,SYSDATE
,LTRIM (LTRIM (med.michaels_sku, 0) )
--,med.descr
, med.qty_shipped
, ( med.unit_price)---------EDI NM Change
-- / 10000)
,med.edi_ln_id
,med.process_flag
--,decode(med.po_id,null,null,med.po_id||'.'||med.location)
--> COMMENTED BY ARUN - NO NEED TO CONCATENATE PO NUMBER TO SHIP TO LOCATION -
ADDED LINE BELOW
, TRIM (SUBSTR (med.po_id
,1
,20) )
,DECODE (SUBSTR (med.LOCATION
,1
,3)
,'000', NVL ( (SELECT msi_dept
FROM mike_whse_maint
WHERE msi_warehouse =
SUBSTR (med.LOCATION
,4
,2)
AND SUBSTR (med.LOCATION
,4
,2) <> '00')
,med.LOCATION)
,med.LOCATION)
-- ,med.location --> Commented by Ashwani on 13-dec-05 and
added above line to change the logic for derivation of Location
, med.allow_cd
,DECODE (record_type
,'D', ( ( med.unit_price
/ 10000)
* med.qty_shipped)
, ( med.allow_amt
/ 100) )
,DECODE (allow_ind
,'C', 'N'
,'A', 'Y'
,NULL)
,DECODE (med.record_type
,'D', NULL
,NVL (allow_ind, 'X') )
,SYSDATE -- Last
Updated Date
,l_user_id -- Last
Updated by
,l_user_id -- Last
Updated login
,g_batch_date_get --
Creation Date
,l_user_id
,med.qty_ship_uom
,mii.org_id
,med.po_line_num----NonMerch
FROM mike_invoices_interface mii, mike_edi_nm_details_stg med
WHERE mii.txn_hdr_id = med.txn_hdr_id
-- AND med.record_type = 'D';
-- ADDING THE FOLLOWING PREDICATE CLAUSES - THIS WILL IGNORE THE
SUMMARY RECORDS - ARUN
--had to put a overall parantheses.Was messing up the data.Changed
by SriLatha on 5-Nov-2005
AND ( ( med.gross_amt IS NULL
AND med.allow_cd IS NULL)
OR ( med.gross_amt IS NOT NULL
AND med.allow_cd IS NOT NULL) );

LOG (module, ' Detail records sucessfully inserted ');


EXCEPTION
WHEN OTHERS
THEN
ROLLBACK;
retcode := 2;
errbuf :=
( 'Error in Inserting Detail data to mike_invoice_lines_interface
table :'
|| SQLERRM);
END;

/*BEGIN
--ADDED BY DAH 27 JUN 2006
-- Delete zero quantity invoice lines that are not chargebacks
DELETE FROM Mikeap.Mike_invoice_lines_interface Mili
WHERE Mili.Quantity_invoiced = 0
AND Mili.Global_attribute1 IS NULL;
EXCEPTION
WHEN OTHERS THEN
Retcode := 2;
Errbuf :=
('Error in deleting zero qty lines from mike_invoice_lines_interface
table :'
|| SQLERRM);
END;

--ADDED BY DAH 27 JUN 2006


-- Delete invoice headers that are orphans (no lines)
BEGIN
DELETE FROM Mike_invoices_interface Mii
WHERE Mii.Invoice_id NOT IN (
SELECT A.Invoice_id
FROM Mikeap.Mike_invoice_lines_interface A);
EXCEPTION
WHEN OTHERS THEN
Retcode := 2;
Errbuf :=
('Error deleteing orphan headers from mike_invoices_interface table
:'
|| SQLERRM);
END;*/
FOR r1 IN c1 (g_batch_date_get)
LOOP
BEGIN
SELECT COUNT (*)
+ 1
INTO l_run_num
FROM mike_exceptions_summary
WHERE interface_tracking_id = r1.external_doc_ref
AND program_name = 'MSI_AP_EDI_NM_INV_VAL_PKG';
EXCEPTION
WHEN NO_DATA_FOUND
THEN
l_run_num := 1;
END;

INSERT INTO mike_vendor_counts


VALUES (r1.external_doc_ref
,l_run_num
,r1.vendor_num
,r1.total_records
,NULL
,NULL
,NULL
,'N'
,l_user_id
,g_batch_date_get
,l_user_id
,l_user_id
,SYSDATE);
END LOOP;

LOG (module, 'End of the program process_edi_inv_rec');


COMMIT;
EXCEPTION
WHEN OTHERS
THEN
ROLLBACK;
fnd_file.put_line (fnd_file.LOG
, 'EDI Invoices PROCESSING EXCEPTION '
|| SQLERRM);
END process_edi_inv_rec;

/*******************************************************************************
Procedure Name : upload_edi_header_arch
Description : This Procudure archive the MIKE_EDI_HEADER_STG data into
MIKE_EDI_NM_HEADER_ARCH.
******************************************************************************/
PROCEDURE upload_edi_header_arch (
errbuf OUT NOCOPY VARCHAR2
,retcode OUT NOCOPY NUMBER)
IS
BEGIN
module := 'upload_edi_header_arch';

BEGIN
INSERT INTO MIKE_EDI_NM_HEADER_ARCH
(edi_hdr_id
,LOCATION
,invoice_id
,vendor_id
,entered_dt
,last_update_dt
,oprid
,err_recyc_ind
,recycle_count
,error_comment
,po_id
,invoice_dt2
,trans_dt
,po_dt
,type_cd
,name1
,remit_addr_ln1
,remit_addr_ln2
,remit_city
,remit_state
,remit_to_zip
,ship_to_name
,ship_to_addr1
,ship_to_addr2
,ship_to_city
,ship_to_state
,ship_to_zip
,comments
,currency_descr
,terms_disc_per
,terms_disc_amt
,terms_dt
,terms_disc_day
,terms_descr
,trms_bas_dt_cd
,terms_due_dt
,terms_net_days
,terms_d_due_dt
,fob
,ship_dt
,net_perc
,edi_vndr_sts)
SELECT edi_hdr_id
,LOCATION
,NVL (invoice_id, 0)
,NVL (vendor_id, 0)
,entered_dt
,last_update_dt
,oprid
,err_recyc_ind
,recycle_count
,error_comment
,po_id
,invoice_dt2
,trans_dt
,po_dt
,type_cd
,name1
,remit_addr_ln1
,remit_addr_ln2
,remit_city
,remit_state
,remit_to_zip
,ship_to_name
,ship_to_addr1
,ship_to_addr2
,ship_to_city
,ship_to_state
,ship_to_zip
,comments
,currency_descr
,terms_disc_per
,terms_disc_amt
,terms_dt
,terms_disc_day
,terms_descr
,trms_bas_dt_cd
,terms_due_dt
,terms_net_days
,terms_d_due_dt
,fob
,ship_dt
,net_perc
,edi_vndr_sts
FROM MIKE_EDI_NM_HEADERS_STG;
EXCEPTION
WHEN OTHERS
THEN
retcode := 2;
errbuf := ( 'Error Archiving Header record :'
|| SQLERRM);
END;

COMMIT;
END upload_edi_header_arch;
/*******************************************************************************
Procedure Name : upload_edi_detail_arch
Description : This Procudure archive the MIKE_EDI_NM_DETAILS_STG data
into MIKE_EDI_DETAIL_ARCH
******************************************************************************/
PROCEDURE upload_edi_detail_arch (
errbuf OUT NOCOPY VARCHAR2
,retcode OUT NOCOPY NUMBER)
IS
BEGIN
module := 'upload_edi_detail_arch';

BEGIN
INSERT INTO MIKE_EDI_NM_DETAILS_ARCH
SELECT edi_hdr_id
,edi_ln_id
,LOCATION
,NVL (invoice_id, 0)
,NVL (vendor_id, 0)
,po_id
,po_line_num
,item_number
,qty_shipped
,qty_ship_uom
,unit_price
,vndr_stock_num
,upc_id
,michaels_sku
,descr
,extended_cost
,gross_amt
,ln_item_count
,calc_count
,carrier
,total_rcv
,uom
,allow_ind
,allow_cd
,allow_hnd_chrg
,allow_ag_chrg
,allow_amt
,allow_qual
,allow_perc
,allow_rate
,allow_uom
,allow_qty
,allow_handle
,allow_descr
,allow_option
,process_flag
,record_type
FROM MIKE_EDI_NM_DETAILS_STG;
EXCEPTION
WHEN OTHERS
THEN
retcode := 2;
errbuf := ( 'Error Archiving Detail record :'
|| SQLERRM);
END;
COMMIT;
END upload_edi_detail_arch;

/*******************************************************************************
Procedure Name : Get_spraedsheet_data
Description : This Procudure will insert data from Mike_interface_table
to ap_interface_tables where source = 'SPREADSHEET'
******************************************************************************/
PROCEDURE get_spreadsheet_data (
errbuf OUT NOCOPY VARCHAR2
,retcode OUT NOCOPY NUMBER)
IS
BEGIN
module := 'get_spreadsheet_data';

BEGIN
INSERT INTO ap_invoices_interface
(invoice_id
,invoice_num
,invoice_type_lookup_code
,invoice_date
,po_number
,vendor_id
,vendor_num
,vendor_name
,vendor_site_id
,vendor_site_code
,invoice_amount
,invoice_currency_code
,exchange_rate
,exchange_rate_type
,exchange_date
,terms_id
,terms_name
,description
,awt_group_id
,awt_group_name
,last_update_date
,last_updated_by
,last_update_login
,creation_date
,created_by
,attribute_category
,attribute1
,attribute2
,attribute3
,attribute4
,attribute5
,attribute6
,attribute7
,attribute8
,attribute9
,attribute10
,attribute11
,attribute12
,attribute13
,attribute14
,attribute15
,global_attribute_category
,global_attribute1
,global_attribute2
,global_attribute3
,global_attribute4
,global_attribute5
,global_attribute6
,global_attribute7
,global_attribute8
,global_attribute9
,global_attribute10
,global_attribute11
,global_attribute12
,global_attribute13
,global_attribute14
,global_attribute15
,global_attribute16
,global_attribute17
,global_attribute18
,global_attribute19
,global_attribute20
,status
,SOURCE
,GROUP_ID
,request_id
,payment_cross_rate_type
,payment_cross_rate_date
,payment_cross_rate
,payment_currency_code
,workflow_flag
,doc_category_code
,voucher_num
,payment_method_lookup_code
,pay_group_lookup_code
,goods_received_date
,invoice_received_date
,gl_date
,accts_pay_code_combination_id
,ussgl_transaction_code
,exclusive_payment_flag
,org_id
,amount_applicable_to_discount
,prepay_num
,prepay_dist_num
,prepay_apply_amount
,prepay_gl_date
,invoice_includes_prepay_flag
,no_xrate_base_amount
,vendor_email_address
,terms_date
,requester_id
,ship_to_location
,external_doc_ref)
SELECT invoice_id
,invoice_num
,invoice_type_lookup_code
,invoice_date
,po_number
,vendor_id
,vendor_num
,vendor_name
,vendor_site_id
,vendor_site_code
,ROUND (invoice_amount
,MSI_AP_EDI_NM_INV_VAL_PKG.getprecision (invoice_id) )
,invoice_currency_code
,exchange_rate
,exchange_rate_type
,exchange_date
,terms_id
,terms_name
,description
,awt_group_id
,awt_group_name
,last_update_date
,last_updated_by
,last_update_login
,creation_date
,created_by
,attribute_category
,attribute1
,attribute2
,external_doc_ref
--ATTRIBUTE3 being used to store External Doc ref in AP Interface Standard tables
, attribute4
,attribute5
,attribute6
,attribute7
,attribute8
,attribute9
,attribute10
,attribute11
,attribute12
,attribute13
,attribute14
,attribute15
,global_attribute_category
,global_attribute1
,global_attribute2
,global_attribute3
,global_attribute4
,global_attribute5
,global_attribute6
,global_attribute7
,global_attribute8
,global_attribute9
,global_attribute10
,global_attribute11
,global_attribute12
,global_attribute13
,global_attribute14
,global_attribute15
,global_attribute16
,global_attribute17
,global_attribute18
,global_attribute19
,global_attribute20
,status
,SOURCE
,GROUP_ID
,request_id
,payment_cross_rate_type
,payment_cross_rate_date
,payment_cross_rate
,payment_currency_code
,workflow_flag
,doc_category_code
,voucher_num
,payment_method_lookup_code
,pay_group_lookup_code
,goods_received_date
,invoice_received_date
,SYSDATE
--GL_DATE Changed on 11/11/05 to populate GL date as sysdate.
, accts_pay_code_combination_id
,ussgl_transaction_code
,exclusive_payment_flag
,org_id
,amount_applicable_to_discount
,prepay_num
,prepay_dist_num
,prepay_apply_amount
,prepay_gl_date
,invoice_includes_prepay_flag
,no_xrate_base_amount
,vendor_email_address
,terms_date
,requester_id
,ship_to_location
,external_doc_ref
FROM mike_invoices_interface
WHERE process_flag IN ('V', 'L') -- , 'H' removed 'H' by Vamsi Krishna
on 24-AUG-2007
AND SOURCE IN ('SPREADSHEET');

LOG (module, 'Spreadsheet header record retrieved ');

INSERT INTO ap_invoice_lines_interface


(invoice_id
,invoice_line_id
,line_number
,line_type_lookup_code
,line_group_number
,amount
,accounting_date
,description
,amount_includes_tax_flag
,prorate_across_flag
,tax_code
,final_match_flag
,po_header_id
,po_number
,po_line_id
,po_line_number
,po_line_location_id
,po_shipment_num
,po_distribution_id
,po_distribution_num
,po_unit_of_measure
,inventory_item_id
,item_description
,quantity_invoiced
,ship_to_location_code
,unit_price
,distribution_set_id
,distribution_set_name
,dist_code_concatenated
,dist_code_combination_id
,awt_group_id
,awt_group_name
,last_updated_by
,last_update_date
,last_update_login
,created_by
,creation_date
,attribute_category
,attribute1
,attribute2
,attribute3
,attribute4
,attribute5
,attribute6
,attribute7
,attribute8
,attribute9
,attribute10
,attribute11
,attribute12
,attribute13
,attribute14
,attribute15
,global_attribute_category
,global_attribute1
,global_attribute2
,global_attribute3
,global_attribute4
,global_attribute5
,global_attribute6
,global_attribute7
,global_attribute8
,global_attribute9
,global_attribute10
,global_attribute11
,global_attribute12
,global_attribute13
,global_attribute14
,global_attribute15
,global_attribute16
,global_attribute17
,global_attribute18
,global_attribute19
,global_attribute20
,po_release_id
,release_num
,account_segment
,balancing_segment
,cost_center_segment
,project_id
,task_id
,expenditure_type
,expenditure_item_date
,expenditure_organization_id
,project_accounting_context
,pa_addition_flag
,pa_quantity
,ussgl_transaction_code
,stat_amount
,type_1099
,income_tax_region
,assets_tracking_flag
,price_correction_flag
,org_id
,receipt_number
,receipt_line_number
,match_option
,packing_slip
,rcv_transaction_id
,pa_cc_ar_invoice_id
,pa_cc_ar_invoice_line_num
,reference_1
,reference_2
,pa_cc_processed_code
,tax_recovery_rate
,tax_recovery_override_flag
,tax_recoverable_flag
,tax_code_override_flag
,tax_code_id
,credit_card_trx_id
,award_id
,vendor_item_num
,taxable_flag
,price_correct_inv_num
,external_doc_line_ref)
SELECT invoice_id
,invoice_line_id
,line_number
,line_type_lookup_code
,line_group_number
,ROUND (amount, MSI_AP_EDI_NM_INV_VAL_PKG.getprecision
(invoice_id) )
,g_sysdate --accounting_date added g_sysdate by Vamsi Krishna on
29-AUG-2007
,description
,amount_includes_tax_flag
,prorate_across_flag
,tax_code
,final_match_flag
,po_header_id
,po_number
,po_line_id
,po_line_number
,po_line_location_id
,po_shipment_num
,po_distribution_id
,po_distribution_num
,po_unit_of_measure
,inventory_item_id
,item_description
,quantity_invoiced
,ship_to_location_code
,unit_price
,distribution_set_id
,distribution_set_name
,dist_code_concatenated
,dist_code_combination_id
,awt_group_id
,awt_group_name
,last_updated_by
,last_update_date
,last_update_login
,created_by
,creation_date
,attribute_category
,attribute1
,attribute2
,attribute3
,attribute4
,attribute5
,attribute6
,attribute7
,attribute8
,attribute9
,attribute10
,attribute11
,attribute12
,attribute13
,attribute14
,attribute15
,global_attribute_category
,global_attribute1
,global_attribute2
,global_attribute3
,global_attribute4
,global_attribute5
,global_attribute6
,global_attribute7
,global_attribute8
,global_attribute9
,global_attribute10
,global_attribute11
,global_attribute12
,global_attribute13
,global_attribute14
,global_attribute15
,global_attribute16
,global_attribute17
,global_attribute18
,global_attribute19
,global_attribute20
,po_release_id
,release_num
,NULL
--ACCOUNT_SEGMENT
,NULL
--BALANCING_SEGMENT
,NULL
--COST_CENTER_SEGMENT
,project_id
,task_id
,expenditure_type
,expenditure_item_date
,expenditure_organization_id
,project_accounting_context
,pa_addition_flag
,pa_quantity
,ussgl_transaction_code
,stat_amount
,type_1099
,income_tax_region
,assets_tracking_flag
,price_correction_flag
,org_id
,receipt_number
,receipt_line_number
,match_option
,packing_slip
,rcv_transaction_id
,pa_cc_ar_invoice_id
,pa_cc_ar_invoice_line_num
,reference_1
,reference_2
,pa_cc_processed_code
,tax_recovery_rate
,tax_recovery_override_flag
,tax_recoverable_flag
,tax_code_override_flag
,tax_code_id
,credit_card_trx_id
,award_id
,vendor_item_num
,taxable_flag
,price_correct_inv_num
,external_doc_line_ref
FROM mike_invoice_lines_interface mil
WHERE process_flag IN ('V', 'L') --'H', removed 'H' by Vamsi Krishna
on 24-AUG-2007
AND EXISTS (
SELECT 1
FROM ap_invoices_interface aii
WHERE aii.invoice_id = mil.invoice_id
AND aii.SOURCE IN ('SPREADSHEET')
-- added INVOICE GATEWAY by Vamsi
Krishna on 21-AUG-2007 to process all existing quick invoices before Match Option.
--AND aii.attribute1 IS NULL /*commented by Vamsi Krishna
on 14-AUG-2007*/
);

COMMIT;
LOG (module, 'Spreadsheet detail record retrieved ');
EXCEPTION
WHEN OTHERS
THEN
retcode := 1;
errbuf := ( 'Error Getting Spreadsheet data :'
|| SQLERRM);
END;
END get_spreadsheet_data;

/*******************************************************************************
Procedure Name : Get_quick_inv_data
Description : This Procudure will insert data from Standard AP interface
tables
to Mike interface tables where source = 'INVOICE_GATEWAY'
******************************************************************************/
--(begin) commented by Vamsi Krishna on 23-AUG-2007 as part of Match Option
/* PROCEDURE get_quick_inv_data (
errbuf OUT NOCOPY VARCHAR2
,retcode OUT NOCOPY NUMBER)
IS
l_quick_tracking_id NUMBER;
module VARCHAR2 (100);
BEGIN
module := 'get_quick_inv_data';
LOG (module, 'Start of populate Header stage table ');

BEGIN
SELECT mike_interface_tracking_id_s.NEXTVAL
INTO l_quick_tracking_id
FROM DUAL;
EXCEPTION
WHEN OTHERS
THEN
l_quick_tracking_id := -99;
END;

BEGIN
INSERT INTO mike_invoices_interface
(invoice_id
,invoice_num
,invoice_type_lookup_code
,invoice_date
,po_number
,vendor_id
,vendor_num
,vendor_name
,vendor_site_id
,vendor_site_code
,invoice_amount
,invoice_currency_code
,exchange_rate
,exchange_rate_type
,exchange_date
,terms_id
,terms_name
,description
,awt_group_id
,awt_group_name
,last_update_date
,last_updated_by
,last_update_login
,creation_date
,created_by
,attribute_category
,attribute1
,attribute2
,attribute3
,attribute4
,attribute5
,attribute6
,attribute7
,attribute8
,attribute9
,attribute10
,attribute11
,attribute12
,attribute13
,attribute14
,attribute15
,global_attribute_category
,global_attribute1
,global_attribute2
,global_attribute3
,global_attribute4
,global_attribute5
,global_attribute6
,global_attribute7
,global_attribute8
,global_attribute9
,global_attribute10
,global_attribute11
,global_attribute12
,global_attribute13
,global_attribute14
,global_attribute15
,global_attribute16
,global_attribute17
,global_attribute18
,global_attribute19
,global_attribute20
,status
,SOURCE
,GROUP_ID
,request_id
,payment_cross_rate_type
,payment_cross_rate_date
,payment_cross_rate
,payment_currency_code
,workflow_flag
,doc_category_code
,voucher_num
,payment_method_lookup_code
,pay_group_lookup_code
,goods_received_date
,invoice_received_date
,gl_date
,accts_pay_code_combination_id
,ussgl_transaction_code
,exclusive_payment_flag
,org_id
,amount_applicable_to_discount
,prepay_num
,prepay_dist_num
,prepay_apply_amount
,prepay_gl_date
,invoice_includes_prepay_flag
,no_xrate_base_amount
,vendor_email_address
,terms_date
,requester_id
,ship_to_location
,external_doc_ref
,process_flag)
SELECT aii.invoice_id
,aii.invoice_num
,aii.invoice_type_lookup_code
,aii.invoice_date
,aii.po_number
,aii.vendor_id
,NVL (aii.vendor_num, (SELECT DISTINCT segment1
FROM po_vendors
WHERE vendor_id = aii.vendor_id)
)

vendor_num
,aii.vendor_name
,aii.vendor_site_id
,NVL (aii.vendor_site_code
, (SELECT DISTINCT b.vendor_site_code
FROM po_vendors a, po_vendor_sites_all b
WHERE a.vendor_id = b.vendor_id
AND b.vendor_site_id = aii.vendor_site_id) )

vendor_site_code
,aii.invoice_amount
,aii.invoice_currency_code
,aii.exchange_rate
,aii.exchange_rate_type
,aii.exchange_date
,aii.terms_id
,NVL (aii.terms_name, (SELECT DISTINCT NAME
FROM ap_terms_tl
WHERE term_id = aii.terms_id) )

terms_name
,aii.description
,aii.awt_group_id
,aii.awt_group_name
,aii.last_update_date
,aii.last_updated_by
,aii.last_update_login
,g_batch_date_get
,aii.created_by
,aii.attribute_category
,attribute1
--b.po_header_id
,aii.attribute2
,l_quick_tracking_id --
AII.ATTRIBUTE3
,aii.attribute4
,aii.attribute5
,aii.attribute6
,aii.attribute7
,aii.attribute8
,aii.attribute9
,aii.attribute10
,aii.attribute11
,aii.attribute12
,aii.attribute13
,aii.attribute14
,aii.attribute15
,aii.global_attribute_category
,aii.global_attribute1
,aii.global_attribute2
,aii.global_attribute3
,aii.global_attribute4
,aii.global_attribute5
,aii.global_attribute6
,aii.global_attribute7
,aii.global_attribute8
,aii.global_attribute9
,aii.global_attribute10
,aii.global_attribute11
,aii.global_attribute12
,aii.global_attribute13
,aii.global_attribute14
,aii.global_attribute15
,aii.global_attribute16
,aii.global_attribute17
,aii.global_attribute18
,aii.global_attribute19
,aii.global_attribute20
,aii.status
,aii.SOURCE
,aii.GROUP_ID
,aii.request_id
,aii.payment_cross_rate_type
,aii.payment_cross_rate_date
,aii.payment_cross_rate
,aii.payment_currency_code
,aii.workflow_flag
,aii.doc_category_code
,aii.voucher_num
,aii.payment_method_lookup_code
,aii.pay_group_lookup_code
,aii.goods_received_date
,aii.invoice_received_date
,aii.gl_date
,aii.accts_pay_code_combination_id
,aii.ussgl_transaction_code
,aii.exclusive_payment_flag
,aii.org_id
,aii.amount_applicable_to_discount
,aii.prepay_num
,aii.prepay_dist_num
,aii.prepay_apply_amount
,aii.prepay_gl_date
,aii.invoice_includes_prepay_flag
,aii.no_xrate_base_amount
,aii.vendor_email_address
,aii.terms_date
,aii.requester_id
,aii.ship_to_location
,l_quick_tracking_id
,'L'
FROM ap_invoices_interface aii
WHERE aii.SOURCE = 'INVOICE GATEWAY'
AND aii.status IS NULL
AND aii.attribute1 IS NOT NULL
AND EXISTS (
SELECT 1
FROM ap_invoice_lines_interface aili
WHERE aili.invoice_id = aii.invoice_id
AND aili.rcv_transaction_id IS NULL);

LOG (module, 'INVOICE GATEWAY header record retrieved ');

INSERT INTO mike_invoice_lines_interface


(invoice_id
,invoice_line_id
,line_number
,line_type_lookup_code
,line_group_number
,amount
,accounting_date
,description
,amount_includes_tax_flag
,prorate_across_flag
,tax_code
,final_match_flag
,po_header_id
,po_number
,po_line_id
,po_line_number
,po_line_location_id
,po_shipment_num
,po_distribution_id
,po_distribution_num
,po_unit_of_measure
,inventory_item_id
,item_description
,quantity_invoiced
,ship_to_location_code
,unit_price
,distribution_set_id
,distribution_set_name
,dist_code_concatenated
,dist_code_combination_id
,awt_group_id
,awt_group_name
,last_updated_by
,last_update_date
,last_update_login
,created_by
,creation_date
,attribute_category
,attribute1
,attribute2
,attribute3
,attribute4
,attribute5
,attribute6
,attribute7
,attribute8
,attribute9
,attribute10
,attribute11
,attribute12
,attribute13
,attribute14
,attribute15
,global_attribute_category
,global_attribute1
,global_attribute2
,global_attribute3
,global_attribute4
,global_attribute5
,global_attribute6
,global_attribute7
,global_attribute8
,global_attribute9
,global_attribute10
,global_attribute11
,global_attribute12
,global_attribute13
,global_attribute14
,global_attribute15
,global_attribute16
,global_attribute17
,global_attribute18
,global_attribute19
,global_attribute20
,po_release_id
,release_num
,account_segment
,balancing_segment
,cost_center_segment
,project_id
,task_id
,expenditure_type
,expenditure_item_date
,expenditure_organization_id
,project_accounting_context
,pa_addition_flag
,pa_quantity
,ussgl_transaction_code
,stat_amount
,type_1099
,income_tax_region
,assets_tracking_flag
,price_correction_flag
,org_id
,receipt_number
,receipt_line_number
,match_option
,packing_slip
,rcv_transaction_id
,pa_cc_ar_invoice_id
,pa_cc_ar_invoice_line_num
,reference_1
,reference_2
,pa_cc_processed_code
,tax_recovery_rate
,tax_recovery_override_flag
,tax_recoverable_flag
,tax_code_override_flag
,tax_code_id
,credit_card_trx_id
,award_id
,vendor_item_num
,taxable_flag
,price_correct_inv_num
,external_doc_line_ref
,process_flag)
SELECT invoice_id
,invoice_line_id
,line_number
,line_type_lookup_code
,line_group_number
,amount
,accounting_date
,description
,amount_includes_tax_flag
,prorate_across_flag
,NVL (ail.tax_code, (SELECT DISTINCT NAME
FROM ap_tax_codes_all
WHERE tax_id = ail.tax_code_id) )

tax_code
--By Rajiv Dasari on 05/18/07 for GST Tax Lines "No Tax Code"
error
, final_match_flag
,po_header_id
,NVL (ail.po_number, (SELECT DISTINCT segment1
FROM po_headers_all
WHERE po_header_id =
ail.po_header_id) )

po_number
,po_line_id
,po_line_number
,po_line_location_id
,po_shipment_num
,po_distribution_id
,po_distribution_num
,po_unit_of_measure
,inventory_item_id
,item_description
,quantity_invoiced
,NVL (ail.ship_to_location_code
, (SELECT DISTINCT segment4
FROM gl_code_combinations_kfv
WHERE concatenated_segments =

ail.dist_code_concatenated) )

ship_to_location_code
,unit_price
,distribution_set_id
,distribution_set_name
,NVL (ail.dist_code_concatenated
, (SELECT DISTINCT concatenated_segments
FROM gl_code_combinations_kfv
WHERE code_combination_id =

ail.dist_code_combination_id) )

dist_code_concatenated
,ail.dist_code_combination_id
,awt_group_id
,awt_group_name
,last_updated_by
,last_update_date
,last_update_login
,created_by
,creation_date
,attribute_category
,NVL (ail.attribute1
, (SELECT DISTINCT segment1
FROM mtl_system_items_b
WHERE inventory_item_id =
ail.inventory_item_id) )

attribute1
,invoice_line_id --
ATTRIBUTE2
,attribute3
,attribute4
,attribute5
,attribute6
,attribute7
,attribute8
,attribute9
,attribute10
,attribute11
,attribute12
,attribute13
,attribute14
,attribute15
,global_attribute_category
,global_attribute1
,global_attribute2
,global_attribute3
,global_attribute4
,global_attribute5
,global_attribute6
,global_attribute7
,global_attribute8
,global_attribute9
,global_attribute10
,global_attribute11
,global_attribute12
,global_attribute13
,global_attribute14
,global_attribute15
,global_attribute16
,global_attribute17
,global_attribute18
,global_attribute19
,global_attribute20
,po_release_id
,release_num
,account_segment
,balancing_segment
,cost_center_segment
,project_id
,task_id
,expenditure_type
,expenditure_item_date
,expenditure_organization_id
,project_accounting_context
,pa_addition_flag
,pa_quantity
,ussgl_transaction_code
,stat_amount
,type_1099
,income_tax_region
,assets_tracking_flag
,price_correction_flag
,org_id
,receipt_number
,receipt_line_number
,match_option
,packing_slip
,rcv_transaction_id
,pa_cc_ar_invoice_id
,pa_cc_ar_invoice_line_num
,reference_1
,reference_2
,pa_cc_processed_code
,tax_recovery_rate
,tax_recovery_override_flag
,tax_recoverable_flag
,tax_code_override_flag
,tax_code_id
,credit_card_trx_id
,award_id
,vendor_item_num
,taxable_flag
,price_correct_inv_num
,external_doc_line_ref
,'L'
FROM ap_invoice_lines_interface ail
WHERE ail.rcv_transaction_id IS NULL
AND EXISTS (
SELECT 1
FROM ap_invoices_interface aii
WHERE aii.invoice_id = ail.invoice_id
AND aii.SOURCE = 'INVOICE GATEWAY'
AND aii.status IS NULL
AND aii.attribute1 IS NOT NULL);

LOG (module, 'INVOICE GATEWAY detail record retrieved ');

--Deleting records from AP Interafce tables which has been inserted in Mike
Interface tables for RCV_TRANSACTION_ID processing
DELETE FROM ap_invoice_lines_interface ail
WHERE ail.rcv_transaction_id IS NULL
AND EXISTS (
SELECT 1
FROM mike_invoices_interface aii
WHERE aii.invoice_id = ail.invoice_id
AND aii.SOURCE = 'INVOICE GATEWAY'
AND aii.status IS NULL
AND aii.attribute1 IS NOT NULL);

DELETE FROM ap_invoices_interface aii


WHERE aii.SOURCE = 'INVOICE GATEWAY'
AND aii.status IS NULL
-- AND AII.ATTRIBUTE1 IS NOT NULL
AND EXISTS (
SELECT 1
FROM mike_invoices_interface mii
WHERE mii.invoice_id = aii.invoice_id
AND mii.SOURCE = 'INVOICE GATEWAY'
AND mii.status IS NULL
AND mii.attribute1 IS NOT NULL);

COMMIT;
EXCEPTION
WHEN OTHERS
THEN
retcode := 1;
errbuf := ( 'Error Getting INVOICE GATEWAY data :'
|| SQLERRM);
END;
END get_quick_inv_data;
*/
--(end) commented by Vamsi Krishna on 23-AUG-2007 as part of Match Option
/*******************************************************************************
Procedure Name : purge_edihdrs
Description : This Procudure delete the MIKE_EDI_HEADERS_ST records.
******************************************************************************/
PROCEDURE purge_edihdrs (
errbuf OUT NOCOPY VARCHAR2
,retcode OUT NOCOPY NUMBER)
IS
l_statement VARCHAR2 (200);
BEGIN
module := 'purge_edihdrs';
l_statement := 'TRUNCATE TABLE MIKEAP.MIKE_EDI_NM_HEADERS_STG';

EXECUTE IMMEDIATE l_statement;


EXCEPTION
WHEN OTHERS
THEN
retcode := 2;
errbuf := ( 'Error purging header records :'
|| SQLERRM);
END purge_edihdrs;

/*******************************************************************************
Procedure Name : purge_edidtls
Description : This Procudure purge the MIKE_POITM_STG data.
******************************************************************************/
PROCEDURE purge_edidtls (
errbuf OUT NOCOPY VARCHAR2
,retcode OUT NOCOPY NUMBER)
IS
l_statement VARCHAR2 (200);
BEGIN
module := 'purge_edidtls';
l_statement := 'TRUNCATE TABLE MIKEAP.MIKE_EDI_NM_DETAILS_STG';

EXECUTE IMMEDIATE l_statement;


EXCEPTION
WHEN OTHERS
THEN
retcode := 2;
errbuf := ( 'Error purging Detail records :'
|| SQLERRM);
END purge_edidtls;

/*******************************************************************************
Procedure Name : purge_editest
Description : This Procudure delete the MIKE_EDI_NM_TEST_STG records.
******************************************************************************/
PROCEDURE purge_editest (
errbuf OUT NOCOPY VARCHAR2
,retcode OUT NOCOPY NUMBER)
IS
l_statement VARCHAR2 (200);
BEGIN
module := 'purge_editest';
l_statement := 'TRUNCATE TABLE MIKEAP.MIKE_EDI_NM_TEST_STG';

EXECUTE IMMEDIATE l_statement;


EXCEPTION
WHEN OTHERS
THEN
retcode := 2;
errbuf := ( 'Error purging test records :'
|| SQLERRM);
END purge_editest;

/*******************************************************************************
Procedure Name : check_duplicate_inv
Description : This is a procedure to check duplicate invoice in Mike
Invoices interface.
******************************************************************************/
PROCEDURE check_duplicate_inv
IS
BEGIN
LOG (module, 'Checking for duplicate invoice in MIKE Tables :');

--updating process_flag = 'R' for all the row which have duplicate
invoice_num in mike_invoices_interface table.
UPDATE mike_invoices_interface
SET process_flag = 'R'
WHERE (invoice_num, vendor_num, NVL (org_id, 106) ) IN (
SELECT invoice_num
,vendor_num
,NVL (org_id, 106)
FROM (SELECT invoice_num
,vendor_num
,org_id
,COUNT (*)
FROM mike_invoices_interface
-- WHERE Process_flag = 'L'
HAVING COUNT (*) > 1
GROUP BY invoice_num, vendor_num, org_id)
);

--updating process_flag = 'L' for the row which have minimum row id out of
the duplicate rows for a invoice num in mike_invoices_interface table.
UPDATE mike_invoices_interface a
SET a.process_flag = 'L'
WHERE (a.ROWID, a.invoice_num, a.vendor_num, NVL (a.org_id, 106) ) IN (
SELECT MIN (b.ROWID)
,b.invoice_num
,b.vendor_num
,NVL (b.org_id, 106)
FROM mike_invoices_interface b
GROUP BY b.invoice_num, b.vendor_num, b.org_id)
AND a.process_flag = 'R';

--Added by Rajiv Dasari on 08-MAR-2007 as fix for Non-Sync process_flag='L'


between header and lines
UPDATE /*+ INDEX(A mike_inv_lines_interface_n1)
*/mike_invoice_lines_interface a
SET process_flag = 'L'
WHERE EXISTS (SELECT 'exists'
FROM mike_invoices_interface b
WHERE b.invoice_id = a.invoice_id
AND b.process_flag = 'L');

DELETE /*+ INDEX(A mike_invoices_interface_u1) */FROM


mikeap.mike_invoices_interface a
WHERE NOT EXISTS (SELECT 'X'
FROM mikeap.mike_invoice_lines_interface
WHERE invoice_id = a.invoice_id);

--Inserting record in mike_exception_details table with ''MSI-20120' - Duplicate


Invoice for the rows remained with process_flag = 'R' becuase of duplicate
invoice num.
INSERT INTO mike_exceptions_details
(err_code
,program_name
,interface_tracking_id
,table_name
,request_id
,column_name
,unique_identifier_1
,unique_identifier_2
,unique_identifier_3
,attribute1
,attribute2
,attribute3
,attribute4
,attribute5
,attribute6
,attribute7
,attribute8
,attribute9
,attribute10
,attribute11
,attribute12
,creation_date
,created_by
,last_update_date
,last_updated_by
,last_update_login)
SELECT 'MSI-20120'
,'MSI_AP_EDI_NM_INV_VAL_PKG'
,external_doc_ref
,'MIKE_INVOICES_INTERFACE'
,g_request_id
,'INVOICE_NUM'
,invoice_id
,NULL
,NULL
,vendor_num
,invoice_num
,invoice_num
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,SYSDATE
,TO_NUMBER (fnd_global.user_id)
,SYSDATE
,TO_NUMBER (fnd_global.user_id)
,TO_NUMBER (fnd_global.user_id)
FROM mike_invoices_interface
WHERE process_flag = 'R';

--updating process_flag = 'E' for all the rows in mike_invoice_lines_interface


which has corresponding header record in 'R' status i.e is a duplicate invoice.
UPDATE mike_invoice_lines_interface a
SET process_flag = 'E'
WHERE EXISTS (SELECT 'exists'
FROM mike_invoices_interface b
WHERE b.invoice_id = a.invoice_id
AND b.process_flag = 'R');

--updating process_flag = 'E' for all the rows in mike_invoices_interface which has
process flag = R' i.e is a duplicate invoice.
UPDATE mike_invoices_interface
SET process_flag = 'E'
WHERE process_flag = 'R';

COMMIT;
END check_duplicate_inv;

/*******************************************************************************
Procedure Name : batch_processor
Description : This is a generalized procedure to do batch Processing.
******************************************************************************/
PROCEDURE batch_processor (
x_errcode OUT NOCOPY NUMBER
,x_errbuf OUT NOCOPY VARCHAR2
,x_batch_process_tbl OUT NOCOPY batch_process_tbl_type
,p_batch_option IN VARCHAR2 DEFAULT 'ALL')
IS
l_count NUMBER := 0;
l_batch_count NUMBER := 0;
l_batch_size NUMBER := 0;
l_dc_batch_size NUMBER := 0;
l_sql_stmt VARCHAR2 (1000);
l_group_id VARCHAR2 (50) := NULL;
l_prev_group_id VARCHAR2 (50) := '-99';
l_errcode NUMBER;
l_errbuf VARCHAR2 (1000);
l_create_batch_id VARCHAR2 (1);
module VARCHAR2 (100) := 'BATCH_PROCESSOR';
group_id_tbl group_id_tbl_type;
l_g_cnt NUMBER := 0;

CURSOR c_org_id
IS
SELECT DISTINCT NVL (org_id, 106) org_id
FROM mike_invoices_interface
UNION
SELECT DISTINCT NVL (org_id, 106) org_id
FROM ap_invoices_interface;

CURSOR c_edi_inv (
p_org_id IN NUMBER)
IS
SELECT l.invoice_id
,COUNT (l.invoice_line_id) COUNT
FROM mike_invoice_lines_interface l
WHERE l.process_flag = 'L'
AND NVL (l.org_id, 106) = p_org_id
AND EXISTS (
SELECT 1
FROM mike_invoices_interface h
WHERE h.invoice_id = l.invoice_id
AND h.SOURCE = 'EDINM'
AND h.process_flag = 'L'
AND NVL (h.org_id, 106) = p_org_id
--AND h.group_id IS NULL
)
GROUP BY l.invoice_id
ORDER BY COUNT (invoice_line_id) ASC;

/*
SELECT invoice_id FROM mike_invoices_interface h
WHERE h.process_flag = 'L'
AND source = 'EDIOP'
ORDER BY vendor_num
-- AND h.group_id IS NULL <-- COMMENTED BY ARUN AND ADDED LINE BELOW
;
*/
CURSOR c_error_inv_edi (
p_org_id IN NUMBER)
IS
SELECT l.invoice_id
,COUNT (l.invoice_line_id) COUNT
FROM mike_invoice_lines_interface l
WHERE EXISTS (
SELECT 1
FROM mike_invoices_interface h
WHERE l.invoice_id = h.invoice_id
AND h.GROUP_ID IS NOT NULL
AND h.SOURCE = 'EDINM'
AND NVL (h.org_id, 106) = p_org_id
AND h.process_flag IN ('H') ) --
('L','H'))
AND NVL (l.org_id, 106) = p_org_id
GROUP BY l.invoice_id
ORDER BY COUNT (l.invoice_line_id) ASC;

CURSOR c_other_inv (
p_org_id IN NUMBER)
IS
SELECT DISTINCT (NVL (h.GROUP_ID, 999999) ) GROUP_ID
FROM mike_invoices_interface h
WHERE SOURCE IN ('SPREADSHEET', 'INVOICE GATEWAY')
AND h.process_flag IN ('V', 'L', 'H')
AND org_id = p_org_id;
/*
SELECT distinct h.group_id
FROM mike_invoices_interface h
WHERE h.group_id IS NOT NULL
AND source = 'EDIOP'
AND h.process_flag in ('L','H')
UNION
SELECT distinct (nvl(h.group_id,999999))
FROM mike_invoices_interface h
WHERE source in ('SPREADSHEET','INVOICE GATEWAY')
AND h.process_flag IN ('V','L','H');
*/
BEGIN
LOG (module, 'Start of batch_processor');
l_batch_size := fnd_profile.VALUE ('MIKE_INVOICE_GROUP_SIZE');
LOG (module, 'Michaels EDI Invoices Processing Batch Size: '
|| l_batch_size);

FOR csr_org_rec_b IN c_org_id


LOOP
IF p_batch_option IN ('NEW', 'ALL')
THEN
SELECT mike_edi_inv_batch_s.NEXTVAL
INTO l_group_id
FROM DUAL;

FOR c_edi_inv_rec IN c_edi_inv (csr_org_rec_b.org_id)


LOOP
l_batch_count := l_batch_count
+ c_edi_inv_rec.COUNT;

IF l_batch_count > l_batch_size


THEN
l_batch_count := c_edi_inv_rec.COUNT;

SELECT mike_edi_inv_batch_s.NEXTVAL
INTO l_group_id
FROM DUAL;
END IF;

l_count := l_count
+ 1;
LOG (module
, 'Current Group id :'
|| l_group_id
|| 'Previous Group_id :'
|| l_prev_group_id);

IF l_group_id <> l_prev_group_id


THEN
l_g_cnt := l_g_cnt
+ 1;
LOG (module
, 'Inserting group_id in PL/SQL table :'
|| l_group_id
|| ' >>'
|| l_g_cnt);
l_prev_group_id := l_group_id;
x_batch_process_tbl (l_g_cnt).GROUP_ID := l_group_id;
x_batch_process_tbl (l_g_cnt).org_id :=
csr_org_rec_b.org_id;
END IF;

group_id_tbl (l_count) := l_group_id;


batch_invoice_id (l_count) := c_edi_inv_rec.invoice_id;
END LOOP;

IF batch_invoice_id.COUNT > 0
THEN
FORALL i IN 1 .. batch_invoice_id.COUNT
UPDATE mike_invoices_interface
SET GROUP_ID = group_id_tbl (i)
WHERE invoice_id = batch_invoice_id (i);
END IF;

COMMIT;
END IF;

LOG (module, 'Batch Option : '


|| p_batch_option);
l_create_batch_id := 'Y';
l_prev_group_id := '-99';

--(begin) Commented by Vamsi Krishna on 24-AUG-2007 as part of Match Option


/* IF (p_batch_option) IN ('NON EDI', 'ALL')
THEN
l_batch_count := 0;

SELECT mike_edi_inv_batch_s.NEXTVAL
INTO l_group_id
FROM DUAL;
FOR c_err_edi_inv_rec IN c_error_inv_edi (csr_org_rec_b.org_id)
LOOP
l_batch_count := l_batch_count
+ c_err_edi_inv_rec.COUNT;

IF l_batch_count > l_batch_size


THEN
l_batch_count := c_err_edi_inv_rec.COUNT;

SELECT mike_edi_inv_batch_s.NEXTVAL
INTO l_group_id
FROM DUAL;
END IF;

l_count := l_count
+ 1;
LOG (module
, 'Current Group id :'
|| l_group_id
|| 'Previous Group_id :'
|| l_prev_group_id);

IF l_group_id <> l_prev_group_id


THEN
l_g_cnt := l_g_cnt
+ 1;
LOG (module
, 'Inserting group_id in PL/SQL table :'
|| l_group_id
|| ' >>'
|| l_g_cnt);
l_prev_group_id := l_group_id;
x_batch_process_tbl (l_g_cnt).GROUP_ID := l_group_id;
x_batch_process_tbl (l_g_cnt).org_id :=
csr_org_rec_b.org_id;
END IF;

group_id_tbl (l_count) := l_group_id;


batch_invoice_id (l_count) := c_err_edi_inv_rec.invoice_id;
END LOOP;

IF batch_invoice_id.COUNT > 0
THEN
FORALL i IN 1 .. batch_invoice_id.COUNT
UPDATE mike_invoices_interface
SET GROUP_ID = group_id_tbl (i)
WHERE invoice_id = batch_invoice_id (i);
END IF;

COMMIT;
*?
(end) commented by Vamsi Krishna as part of Match Option on
24-AUG-2007

--(begin) commented by Vamsi Krishna as part of Match


Option on 14-AUG-2007
/*FOR c_error_inv_rec IN c_other_inv (csr_org_rec_b.org_id)
LOOP
LOG (module
, 'group_id : '
|| c_error_inv_rec.GROUP_ID
|| ' >>> org_id : '
|| csr_org_rec_b.org_id);

--ADDED BY Rajiv Dasari on 21-JUL-2006 to clearly note which group_id the Org_id
belongs to
FOR i IN 1 .. x_batch_process_tbl.COUNT
LOOP
IF x_batch_process_tbl (i).GROUP_ID =
c_error_inv_rec.GROUP_ID
AND l_create_batch_id = 'Y'
THEN
LOG (module
, 'This Group ID already exists :'
|| c_error_inv_rec.GROUP_ID);
l_create_batch_id := 'N';
END IF;
END LOOP;

IF l_create_batch_id = 'Y'
THEN
l_g_cnt := l_g_cnt
+ 1;
LOG (module
, 'Populating Group id for Spreadsheet and Quick
Invoices :'
|| c_error_inv_rec.GROUP_ID);
x_batch_process_tbl (l_g_cnt).GROUP_ID :=
c_error_inv_rec.GROUP_ID;
x_batch_process_tbl (l_g_cnt).org_id :=
csr_org_rec_b.org_id;
LOG (module
, 'Others (Spread/Quick) Group ID :'
|| x_batch_process_tbl (l_g_cnt).GROUP_ID);
END IF;

l_create_batch_id := 'Y';
--ADDED BY Rajiv Dasari on 21-JUL-2006 for resetting the batch_id for the next
group_id
END LOOP;

END IF; */ --(end)commented by Vamsi Krishna as part of Match Option on


14-AUG-2007 --end of for loop
END LOOP;

COMMIT;
LOG (module, 'End of batch_processor');
EXCEPTION
WHEN OTHERS
THEN
x_errcode := 2;
x_errbuf :=
'When Others Exception in batch_processor SQLCODE : '
|| SQLCODE
|| ' SQLERRM : '
|| SQLERRM;
fnd_file.put_line (fnd_file.LOG, x_errbuf);
END batch_processor;

/*******************************************************************************
Procedure Name : hold_batch_processor
Description : This is a generalized procedure to do batch Processing.
******************************************************************************/
PROCEDURE hold_batch_processor (
x_errcode OUT NOCOPY NUMBER
,x_errbuf OUT NOCOPY VARCHAR2
,x_edi_dchold_batch_tbl OUT NOCOPY batch_process_tbl_type
,x_edi_nohold_batch_tbl OUT NOCOPY batch_process_tbl_type
,x_ssheet_reviewhold_batch_tbl OUT NOCOPY batch_process_tbl_type
,x_ssheet_dchold_batch_tbl OUT NOCOPY batch_process_tbl_type
,x_ssheet_nohold_batch_tbl OUT NOCOPY batch_process_tbl_type
,x_quick_reviewhold_batch_tbl OUT NOCOPY batch_process_tbl_type
,x_quick_dchold_batch_tbl OUT NOCOPY batch_process_tbl_type
,x_quick_nohold_batch_tbl OUT NOCOPY batch_process_tbl_type
,p_batch_option IN VARCHAR2 DEFAULT 'ALL'
,p_debug_flag IN VARCHAR2 DEFAULT 'N')
IS
edi_dc_invoice_id batch_invoice_id_type;
edi_no_invoice_id batch_invoice_id_type;
ss_dc_invoice_id batch_invoice_id_type;
ss_no_invoice_id batch_invoice_id_type;
ss_review_invoice_id batch_invoice_id_type;
quick_dc_invoice_id batch_invoice_id_type;
quick_no_invoice_id batch_invoice_id_type;
quick_review_invoice_id batch_invoice_id_type;
hold_group_id_tbl group_id_tbl_type;
l_count NUMBER := 0;
l_count_a NUMBER := 0;
l_count_b NUMBER := 0;
l_count_c NUMBER := 0;
l_count_d NUMBER := 0;
l_count_e NUMBER := 0;
l_count_f NUMBER := 0;
l_count_g NUMBER := 0;
l_g_count NUMBER := 0;
l_g_count_a NUMBER := 0;
l_g_count_b NUMBER := 0;
l_g_count_c NUMBER := 0;
l_g_count_d NUMBER := 0;
l_g_count_e NUMBER := 0;
l_g_count_f NUMBER := 0;
l_g_count_g NUMBER := 0;
l_batch_count NUMBER := 0;
l_batch_size NUMBER := 0;
l_dc_batch_size NUMBER := 0;
l_sql_stmt VARCHAR2 (1000);
l_group_id VARCHAR2 (50) := NULL;
l_errcode NUMBER;
l_errbuf VARCHAR2 (1000);
l_create_batch_id VARCHAR2 (1);
module VARCHAR2 (100) := 'HOLD_BATCH_PROCESSOR';
l_prev_group_id VARCHAR2 (50) := '-99';

--Cursor to select distinct ORG ID from AP_INVOICES_INTERFACE table


CURSOR c_org_id
IS
SELECT DISTINCT NVL (org_id, 106) org_id
FROM ap_invoices_interface;

CURSOR c_edi_dchold_inv (
p_org_id IN NUMBER)
IS
SELECT l.invoice_id
,COUNT (l.invoice_line_id) COUNT
FROM ap_invoice_lines_interface l
WHERE EXISTS (
SELECT 1
FROM ap_invoices_interface h
WHERE h.invoice_id = l.invoice_id
AND h.SOURCE = 'EDINM'
--AND h.attribute1 is NOT NULL
-- AND NVL (h.status, 'X') NOT IN ('REJECTED', 'D',
'PROCESSED')
AND org_id = p_org_id
AND EXISTS (SELECT 1
FROM mike_whse_maint m
WHERE m.msi_dept = h.ship_to_location) )
GROUP BY l.invoice_id
ORDER BY COUNT (invoice_line_id) ASC;

CURSOR c_edi_nohold_inv (
p_org_id IN NUMBER)
IS
SELECT l.invoice_id
,COUNT (l.invoice_line_id) COUNT
FROM ap_invoice_lines_interface l
WHERE EXISTS (
SELECT 1
FROM ap_invoices_interface h
WHERE h.invoice_id = l.invoice_id
AND h.SOURCE = 'EDINM'
AND h.attribute1 IS NOT NULL
-- AND NVL (h.status, 'X') NOT IN ('REJECTED', 'D',
'PROCESSED')
AND org_id = p_org_id
AND NOT EXISTS (SELECT 1
FROM mike_whse_maint m
WHERE m.msi_dept = h.ship_to_location) )
GROUP BY l.invoice_id
ORDER BY COUNT (invoice_line_id) ASC;

/*CURSOR c_ssheet_reviewhold_inv(p_org_id IN NUMBER) IS


SELECT l.invoice_id,m.group_id,COUNT(l.invoice_line_id) COUNT
FROM ap_invoice_lines_interface l,
WHERE EXISTS
(SELECT 1 FROM ap_invoices_interface h,
(SELECT invoice_id,
MAX(segment4)ship_to_location
FROM (SELECT invoice_id,segment4
FROM ap_invoice_lines_interface
a,gl_code_combinations b
WHERE a.DIST_CODE_COMBINATION_ID =
b.code_combination_id)
GROUP BY invoice_id) x
WHERE h.invoice_id = l.invoice_id
AND h.invoice_id = x.invoice_id
AND h.source = 'SPREADSHEET'
AND NVL(h.status,'X') NOT IN ('REJECTED','D','PROCESSED')
AND org_id = p_org_id
AND h.attribute1 IS NULL
-- AND NOT EXISTS
-- (SELECT 1 FROM MIKE_WHSE_MAINT m
-- WHERE m.msi_dept=x.ship_to_location)
)
GROUP BY l.invoice_id,m.group_id
ORDER BY COUNT(invoice_line_id) ASC ;*/
CURSOR c_ssheet_reviewhold_inv (
p_org_id IN NUMBER)
IS
SELECT /*+ INDEX_ASC(m ap_invoices_interface_u1) */
l.invoice_id
,m.GROUP_ID
,COUNT (l.invoice_id) COUNT
FROM ap_invoice_lines_interface l, ap_invoices_interface m
WHERE EXISTS (
SELECT 1
FROM ap_invoices_interface h
, (SELECT invoice_id
,MAX (segment4) ship_to_location
FROM (SELECT invoice_id
,segment4
FROM ap_invoice_lines_interface a
,gl_code_combinations b
WHERE a.dist_code_combination_id =

b.code_combination_id)
GROUP BY invoice_id) x
WHERE h.invoice_id = l.invoice_id
AND h.invoice_id = x.invoice_id
AND h.SOURCE = 'SPREADSHEET'
-- AND NVL (h.status, 'X') NOT IN ('REJECTED', 'D',
'PROCESSED')
AND org_id = p_org_id
AND h.attribute1 IS NULL
-- AND NOT EXISTS
-- (SELECT 1 FROM
MIKE_WHSE_MAINT m
-- WHERE
m.msi_dept=x.ship_to_location)
)
AND l.invoice_id = m.invoice_id
AND m.GROUP_ID IS NOT NULL
AND NVL (m.attribute15, 'PROCESS') <> 'REPROCESS'
GROUP BY l.invoice_id, m.GROUP_ID
ORDER BY m.GROUP_ID ASC;

CURSOR c_ssheet_reviewhold_group_null (
p_org_id IN NUMBER)
IS
SELECT /*+ INDEX_ASC(m ap_invoices_interface_u1) */
l.invoice_id
,m.GROUP_ID
,COUNT (l.invoice_id) COUNT
FROM ap_invoice_lines_interface l, ap_invoices_interface m
WHERE EXISTS (
SELECT 1
FROM ap_invoices_interface h
, (SELECT invoice_id
,MAX (segment4) ship_to_location
FROM (SELECT invoice_id
,segment4
FROM ap_invoice_lines_interface a
,gl_code_combinations b
WHERE a.dist_code_combination_id =

b.code_combination_id)
GROUP BY invoice_id) x
WHERE h.invoice_id = l.invoice_id
AND h.invoice_id = x.invoice_id
AND h.SOURCE = 'SPREADSHEET'
-- AND NVL (h.status, 'X') NOT IN ('REJECTED', 'D',
'PROCESSED')
AND org_id = p_org_id
AND h.attribute1 IS NULL
-- AND NOT EXISTS
-- (SELECT 1 FROM
MIKE_WHSE_MAINT m
-- WHERE
m.msi_dept=x.ship_to_location)
)
AND l.invoice_id = m.invoice_id
AND ( m.GROUP_ID IS NULL
OR NVL (m.attribute15, 'PROCESS') = 'REPROCESS')
GROUP BY l.invoice_id, m.GROUP_ID
ORDER BY m.GROUP_ID ASC;

/*CURSOR c_ssheet_dchold_inv(p_org_id IN NUMBER) IS


SELECT l.invoice_id,COUNT(l.invoice_line_id) COUNT
FROM ap_invoice_lines_interface l
WHERE EXISTS
(SELECT 1 FROM ap_invoices_interface h,
(SELECT invoice_id,MAX(location_code)ship_to_location
FROM (SELECT d.invoice_id, a.location_code
FROM hr_locations a, po_line_locations_all
b,ap_invoice_lines_interface d
WHERE a.location_id = b.ship_to_location_id
AND b.line_location_id = d.po_line_location_id
UNION
SELECT invoice_id,segment4
FROM ap_invoice_lines_interface
a,gl_code_combinations b
WHERE a.DIST_CODE_COMBINATION_ID =
b.code_combination_id)
GROUP BY invoice_id) x
WHERE h.invoice_id = l.invoice_id
AND h.invoice_id = x.invoice_id
AND h.source = 'SPREADSHEET'
AND NVL(h.status,'X') NOT IN ('REJECTED','D','PROCESSED')
AND org_id = p_org_id
AND h.attribute1 IS NOT NULL
AND EXISTS
(SELECT 1 FROM MIKE_WHSE_MAINT m
WHERE m.msi_dept=x.ship_to_location))
GROUP BY l.invoice_id
ORDER BY COUNT(invoice_line_id) ASC ;*/
--v4.1 Removed the INDEX_ASC hint INDEX_ASC(m ap_invoices_interface_u1) and
included 9i optimizer hint
CURSOR c_ssheet_dchold_inv (
p_org_id IN NUMBER)
IS
SELECT /*+ optimizer_features_enable('9.2.0') */
l.invoice_id
,m.GROUP_ID
,COUNT (l.invoice_id) COUNT
FROM ap_invoice_lines_interface l, ap_invoices_interface m
WHERE EXISTS (
SELECT 1
FROM ap_invoices_interface h
, (SELECT invoice_id
,MAX (location_code) ship_to_location
FROM (SELECT d.invoice_id
,a.location_code
FROM hr_locations a
,po_line_locations_all b
,ap_invoice_lines_interface d
WHERE a.location_id =
b.ship_to_location_id
AND b.line_location_id =
d.po_line_location_id
UNION
SELECT invoice_id
,segment4
FROM ap_invoice_lines_interface a
,gl_code_combinations b
WHERE a.dist_code_combination_id =

b.code_combination_id)
GROUP BY invoice_id) x
WHERE h.invoice_id = l.invoice_id
AND h.invoice_id = x.invoice_id
AND h.SOURCE = 'SPREADSHEET'
-- AND NVL (h.status, 'X') NOT IN ('REJECTED', 'D',
'PROCESSED')
AND org_id = p_org_id
AND h.attribute1 IS NOT NULL
AND EXISTS (SELECT 1
FROM mike_whse_maint m
WHERE m.msi_dept = x.ship_to_location) )
AND l.invoice_id = m.invoice_id
AND m.GROUP_ID IS NOT NULL
AND NVL (m.attribute15, 'PROCESS') <> 'REPROCESS'
GROUP BY l.invoice_id, m.GROUP_ID
ORDER BY m.GROUP_ID ASC;

CURSOR c_ssheet_dchold_group_null (
p_org_id IN NUMBER)
IS
--v3.1 Removed the INDEX_ASC hint /*+ INDEX_ASC(m
ap_invoices_interface_u1) */ and included 9i optimizer hint for RUP upgrade in
below query
SELECT /*+ optimizer_features_enable('9.2.0') */
l.invoice_id
,m.GROUP_ID
,COUNT (l.invoice_id) COUNT
FROM ap_invoice_lines_interface l, ap_invoices_interface m
WHERE EXISTS (
SELECT 1
FROM ap_invoices_interface h
, (SELECT invoice_id
,MAX (location_code) ship_to_location
FROM (SELECT d.invoice_id
,a.location_code
FROM hr_locations a
,po_line_locations_all b
,ap_invoice_lines_interface d
WHERE a.location_id =
b.ship_to_location_id
AND b.line_location_id =
d.po_line_location_id
UNION
SELECT invoice_id
,segment4
FROM ap_invoice_lines_interface a
,gl_code_combinations b
WHERE a.dist_code_combination_id =

b.code_combination_id)
GROUP BY invoice_id) x
WHERE h.invoice_id = l.invoice_id
AND h.invoice_id = x.invoice_id
AND h.SOURCE = 'SPREADSHEET'
-- AND NVL (h.status, 'X') NOT IN ('REJECTED', 'D',
'PROCESSED')
AND org_id = p_org_id
AND h.attribute1 IS NOT NULL
AND EXISTS (SELECT 1
FROM mike_whse_maint m
WHERE m.msi_dept = x.ship_to_location) )
AND l.invoice_id = m.invoice_id
AND ( m.GROUP_ID IS NULL
OR NVL (m.attribute15, 'PROCESS') = 'REPROCESS')
GROUP BY l.invoice_id, m.GROUP_ID
ORDER BY m.GROUP_ID ASC;

/*CURSOR c_ssheet_nohold_inv(p_org_id IN NUMBER) IS


SELECT l.invoice_id,COUNT(l.invoice_line_id) COUNT
FROM ap_invoice_lines_interface l
WHERE EXISTS
(SELECT 1 FROM ap_invoices_interface h,
(SELECT invoice_id,MAX(location_code)ship_to_location
FROM (SELECT d.invoice_id, a.location_code
FROM hr_locations a, po_line_locations_all
b,ap_invoice_lines_interface d
WHERE a.location_id = b.ship_to_location_id
AND b.line_location_id =
d.po_line_location_id)
GROUP BY invoice_id) x
WHERE h.invoice_id = l.invoice_id
AND h.invoice_id = x.invoice_id
AND h.source = 'SPREADSHEET'
AND NVL(h.status,'X') NOT IN ('REJECTED','D','PROCESSED')
AND h.attribute1 IS NOT NULL
AND org_id = p_org_id
AND NOT EXISTS
(SELECT 1 FROM MIKE_WHSE_MAINT m
WHERE m.msi_dept=x.ship_to_location))
GROUP BY l.invoice_id
ORDER BY COUNT(invoice_line_id) ASC ;*/
CURSOR c_ssheet_nohold_inv (
p_org_id IN NUMBER)
IS
SELECT /*+ INDEX_ASC(m ap_invoices_interface_u1) */
l.invoice_id
,m.GROUP_ID
,COUNT (l.invoice_id) COUNT
FROM ap_invoice_lines_interface l, ap_invoices_interface m
WHERE EXISTS (
SELECT 1
FROM ap_invoices_interface h
, (SELECT invoice_id
,MAX (location_code) ship_to_location
FROM (SELECT d.invoice_id
,a.location_code
FROM hr_locations a
,po_line_locations_all b
,ap_invoice_lines_interface d
WHERE a.location_id =
b.ship_to_location_id
AND b.line_location_id =
d.po_line_location_id)
GROUP BY invoice_id) x
WHERE h.invoice_id = l.invoice_id
AND h.invoice_id = x.invoice_id
AND h.SOURCE = 'SPREADSHEET'
-- AND NVL (h.status, 'X') NOT IN ('REJECTED', 'D',
'PROCESSED')
AND h.attribute1 IS NOT NULL
AND org_id = p_org_id
AND NOT EXISTS (SELECT 1
FROM mike_whse_maint m
WHERE m.msi_dept = x.ship_to_location) )
AND l.invoice_id = m.invoice_id
AND m.GROUP_ID IS NOT NULL
AND NVL (m.attribute15, 'PROCESS') <> 'REPROCESS'
GROUP BY l.invoice_id, m.GROUP_ID
ORDER BY m.GROUP_ID ASC;

CURSOR c_ssheet_nohold_group_null (
p_org_id IN NUMBER)
IS
SELECT /*+ INDEX_ASC(m ap_invoices_interface_u1) */
l.invoice_id
,m.GROUP_ID
,COUNT (l.invoice_id) COUNT
FROM ap_invoice_lines_interface l, ap_invoices_interface m
WHERE EXISTS (
SELECT 1
FROM ap_invoices_interface h
, (SELECT invoice_id
,MAX (location_code) ship_to_location
FROM (SELECT d.invoice_id
,a.location_code
FROM hr_locations a
,po_line_locations_all b
,ap_invoice_lines_interface d
WHERE a.location_id =
b.ship_to_location_id
AND b.line_location_id =
d.po_line_location_id)
GROUP BY invoice_id) x
WHERE h.invoice_id = l.invoice_id
AND h.invoice_id = x.invoice_id
AND h.SOURCE = 'SPREADSHEET'
-- AND NVL (h.status, 'X') NOT IN ('REJECTED', 'D',
'PROCESSED')
AND h.attribute1 IS NOT NULL
AND org_id = p_org_id
AND NOT EXISTS (SELECT 1
FROM mike_whse_maint m
WHERE m.msi_dept = x.ship_to_location) )
AND l.invoice_id = m.invoice_id
AND ( m.GROUP_ID IS NULL
OR NVL (m.attribute15, 'PROCESS') = 'REPROCESS')
GROUP BY l.invoice_id, m.GROUP_ID
ORDER BY m.GROUP_ID ASC;

CURSOR c_quick_reviewhold_inv (
p_org_id IN NUMBER)
IS
SELECT DISTINCT SOURCE
,GROUP_ID
FROM ap_invoices_interface h
, (SELECT invoice_id
,MAX (segment4) ship_to_location
FROM (SELECT invoice_id
,segment4
FROM ap_invoice_lines_interface a
,gl_code_combinations_kfv b
WHERE a.dist_code_concatenated =

b.concatenated_segments
AND a.dist_code_concatenated IS NOT NULL
UNION ALL
SELECT invoice_id
,segment4
FROM ap_invoice_lines_interface a
,gl_code_combinations b
WHERE a.dist_code_combination_id =

b.code_combination_id
AND a.dist_code_combination_id IS NOT NULL)
GROUP BY invoice_id) x
WHERE h.invoice_id = x.invoice_id
AND h.SOURCE = 'INVOICE GATEWAY'
-- AND NVL (h.status, 'X') NOT IN ('REJECTED', 'D',
'PROCESSED')
AND h.attribute1 IS NULL
AND org_id = p_org_id;
CURSOR c_quick_nohold_inv (
p_org_id IN NUMBER)
IS
SELECT DISTINCT h.SOURCE
,h.GROUP_ID
FROM ap_invoices_interface h
, (SELECT invoice_id
,MAX (segment4) ship_to_location
FROM (SELECT invoice_id
,segment4
FROM ap_invoice_lines_interface a
,gl_code_combinations_kfv b
WHERE a.dist_code_concatenated =

b.concatenated_segments
AND a.dist_code_concatenated IS NOT NULL
UNION ALL
SELECT invoice_id
,segment4
FROM ap_invoice_lines_interface a
,gl_code_combinations b
WHERE a.dist_code_combination_id =

b.code_combination_id
AND a.dist_code_combination_id IS NOT NULL)
GROUP BY invoice_id) x
WHERE h.invoice_id = x.invoice_id
AND h.SOURCE = 'INVOICE GATEWAY'
-- AND NVL (h.status, 'X') NOT IN ('REJECTED', 'D',
'PROCESSED')
AND h.attribute1 IS NOT NULL
AND org_id = p_org_id
AND NOT EXISTS (SELECT 1
FROM mike_whse_maint m
WHERE m.msi_dept = x.ship_to_location);

CURSOR c_quick_dchold_inv (
p_org_id IN NUMBER)
IS
SELECT DISTINCT h.SOURCE
,h.GROUP_ID
FROM ap_invoices_interface h
, (SELECT invoice_id
,MAX (segment4) ship_to_location
FROM (SELECT invoice_id
,segment4
FROM ap_invoice_lines_interface a
,gl_code_combinations_kfv b
WHERE a.dist_code_concatenated =

b.concatenated_segments
AND a.dist_code_concatenated IS NOT NULL
UNION ALL
SELECT invoice_id
,segment4
FROM ap_invoice_lines_interface a
,gl_code_combinations b
WHERE a.dist_code_combination_id =

b.code_combination_id
AND a.dist_code_combination_id IS NOT NULL)
GROUP BY invoice_id) x
WHERE h.invoice_id = x.invoice_id
AND h.SOURCE = 'INVOICE GATEWAY'
-- AND NVL (h.status, 'X') NOT IN ('REJECTED', 'D',
'PROCESSED')
AND h.attribute1 IS NOT NULL
AND org_id = p_org_id
AND EXISTS (SELECT 1
FROM mike_whse_maint m
WHERE m.msi_dept = x.ship_to_location);

BEGIN
LOG (module, 'Start of hold batch_processor');

---------------------------

/* Commented by Pradeep 05-May-2008 starts here


DELETE FROM ap_interface_rejections air
WHERE EXISTS (SELECT 1 FROM ap_invoices_interface aii,
ap_invoice_lines_interface ail
WHERE ( (air.PARENT_TABLE = 'AP_INVOICES_INTERFACE' and
air.parent_id = aii.invoice_id)
OR
(air.PARENT_TABLE = 'AP_INVOICE_LINES_INTERFACE' and
air.parent_id = ail.INVOICE_LINE_ID )
)
);
*/ -- Comment ends here
--Added by Pradeep 05-May-2008 starts here
---------------------------------------------------------------
-- Invoice header records deletion in AP_INTERFACE_REJECTIONS
---------------------------------------------------------------
DELETE FROM ap_interface_rejections AIR
WHERE AIR.parent_id = (SELECT AII.invoice_id
FROM ap_invoices_interface AII
WHERE AIR.parent_id = AII.invoice_id)
AND UPPER(AIR.parent_table) = 'AP_INVOICES_INTERFACE';
-------------------------------------------------------------
-- Invoice line records deletion in AP_INTERFACE_REJECTIONS
-------------------------------------------------------------
DELETE FROM ap_interface_rejections AIR
WHERE AIR.parent_id = (SELECT AILI.invoice_line_id
FROM ap_invoice_lines_interface AILI
WHERE AIR.parent_id = AILI.invoice_line_id)
AND UPPER(AIR.parent_table) = 'AP_INVOICE_LINES_INTERFACE';
--
-- Ends here
LOG (module, 'Deleted ' || SQL%ROWCOUNT || ' rejections from
AP_INTERFACE_REJECTIONS.');

UPDATE AP_INVOICES_INTERFACE
SET STATUS = NULL,
REQUEST_ID = NULL
WHERE STATUS = 'REJECTED';

LOG (module, 'Reset STATUS for ' || SQL%ROWCOUNT || ' rejected invoices.');

COMMIT;

----------------------------
l_batch_size := fnd_profile.VALUE ('MIKE_INVOICE_GROUP_SIZE');
LOG (module, 'Michaels EDI Invoices Processing Batch Size: '
|| l_batch_size);

FOR csr_org_rec IN c_org_id


LOOP
l_count := 0;
l_count_a := 0;
l_count_b := 0;
l_count_c := 0;
l_count_d := 0;
edi_dc_invoice_id.DELETE;
edi_no_invoice_id.DELETE;
ss_dc_invoice_id.DELETE;
ss_no_invoice_id.DELETE;
ss_review_invoice_id.DELETE;
quick_dc_invoice_id.DELETE;
quick_no_invoice_id.DELETE;
quick_review_invoice_id.DELETE;
LOG (module, 'Organization ID :'
|| csr_org_rec.org_id);

SELECT mike_edi_inv_batch_s.NEXTVAL
INTO l_group_id
FROM DUAL;

LOG (module, 'EDI DC HOLD 1st Group ID :'


|| l_group_id);

FOR c_edi_dchold_rec IN c_edi_dchold_inv (csr_org_rec.org_id)


LOOP
l_batch_count := l_batch_count
+ c_edi_dchold_rec.COUNT;

IF l_batch_count > l_batch_size


THEN
l_batch_count := c_edi_dchold_rec.COUNT;

SELECT mike_edi_inv_batch_s.NEXTVAL
INTO l_group_id
FROM DUAL;

LOG (module, 'EDI DC HOLD Group ID :'


|| l_group_id);
END IF;

-- log(module,'Previous Group ID Ist :'||l_prev_group_id);


IF l_group_id <> l_prev_group_id
THEN
l_prev_group_id := l_group_id;
LOG (module, 'Changed Previous Group ID :'
|| l_prev_group_id);
l_g_count := l_g_count
+ 1;
x_edi_dchold_batch_tbl (l_g_count).GROUP_ID := l_group_id;
x_edi_dchold_batch_tbl (l_g_count).org_id :=
csr_org_rec.org_id;
END IF;

l_count := l_count
+ 1;
LOG (module
, 'EDI DC HOLD Group ID Count :'
|| l_count
|| '>>'
|| 'Group ID :'
|| l_group_id);
hold_group_id_tbl (l_count) := l_group_id;
edi_dc_invoice_id (l_count) := c_edi_dchold_rec.invoice_id;
END LOOP;

IF edi_dc_invoice_id.COUNT > 0
THEN
FORALL i IN 1 .. edi_dc_invoice_id.COUNT
UPDATE ap_invoices_interface
SET GROUP_ID = hold_group_id_tbl (i)
WHERE invoice_id = edi_dc_invoice_id (i);
END IF;

COMMIT;
l_group_id := 0;
l_batch_count := 0;
hold_group_id_tbl.DELETE;
l_prev_group_id := '-99';

SELECT mike_edi_inv_batch_s.NEXTVAL
INTO l_group_id
FROM DUAL;

LOG (module, 'EDI NO HOLD 1st Group ID :'


|| l_group_id);

FOR c_edi_nohold_rec IN c_edi_nohold_inv (csr_org_rec.org_id)


LOOP
l_batch_count := l_batch_count
+ c_edi_nohold_rec.COUNT;

IF l_batch_count > l_batch_size


THEN
l_batch_count := c_edi_nohold_rec.COUNT;

SELECT mike_edi_inv_batch_s.NEXTVAL
INTO l_group_id
FROM DUAL;

LOG (module, 'EDI NO HOLD Group ID :'


|| l_group_id);
END IF;

-- log(module,'Previous Group ID Ist :'||l_prev_group_id);


IF l_group_id <> l_prev_group_id
THEN
l_prev_group_id := l_group_id;
l_g_count_a := l_g_count_a
+ 1;
LOG (module
, 'Updating Main PL SQL table with group id :'
|| l_group_id
|| '<<'
|| 'Count :'
|| l_g_count_a);
x_edi_nohold_batch_tbl (l_g_count_a).GROUP_ID := l_group_id;
x_edi_nohold_batch_tbl (l_g_count_a).org_id :=
csr_org_rec.org_id;
END IF;

l_count_a := l_count_a
+ 1;
LOG (module
, 'EDI NO HOLD Group ID Count :'
|| l_count
|| '>>'
|| 'Group ID :'
|| l_group_id);
hold_group_id_tbl (l_count_a) := l_group_id;
edi_no_invoice_id (l_count_a) := c_edi_nohold_rec.invoice_id;
LOG (module
, 'Succesfully updated NO Hold :'
|| l_count_a
|| '>>'
|| 'Group ID :'
|| l_group_id);
END LOOP;

IF edi_no_invoice_id.COUNT > 0
THEN
FORALL i IN 1 .. edi_no_invoice_id.COUNT
UPDATE ap_invoices_interface
SET GROUP_ID = hold_group_id_tbl (i)
WHERE invoice_id = edi_no_invoice_id (i);
END IF;

COMMIT;
l_group_id := 0;
l_batch_count := 0;
hold_group_id_tbl.DELETE;
l_prev_group_id := '-99';

SELECT mike_edi_inv_batch_s.NEXTVAL
INTO l_group_id
FROM DUAL;
FOR c_ssheet_reviewhold_rec IN c_ssheet_reviewhold_group_null
(csr_org_rec.org_id)
LOOP
LOG (module, 'Processing Spreadsheet Review HOLD where group_id is
null:');
l_batch_count :=
l_batch_count
+ c_ssheet_reviewhold_rec.COUNT;

IF l_batch_count > l_batch_size


THEN
l_batch_count := c_ssheet_reviewhold_rec.COUNT;

SELECT mike_edi_inv_batch_s.NEXTVAL
INTO l_group_id
FROM DUAL;
END IF;

IF l_group_id <> l_prev_group_id


THEN
l_prev_group_id :=
l_group_id;
l_g_count_b :=
l_g_count_b
+ 1;
LOG (module
, 'Ssheet Review HOLD group id for group_id null:'
|| l_group_id);
x_ssheet_reviewhold_batch_tbl (l_g_count_b).GROUP_ID :=
l_group_id;
x_ssheet_reviewhold_batch_tbl (l_g_count_b).org_id :=

csr_org_rec.org_id;
END IF;

l_count_b := l_count_b
+ 1;
hold_group_id_tbl (l_count_b) := l_group_id;
ss_review_invoice_id (l_count_b) :=
c_ssheet_reviewhold_rec.invoice_id;
END LOOP;

IF ss_review_invoice_id.COUNT > 0
THEN
FORALL i IN 1 .. ss_review_invoice_id.COUNT
UPDATE ap_invoices_interface
SET GROUP_ID = hold_group_id_tbl (i)
WHERE invoice_id = ss_review_invoice_id (i);
END IF;

COMMIT;
l_group_id := 0;
l_batch_count := 0;
hold_group_id_tbl.DELETE;
l_prev_group_id := '-99';

-- SELECT mike_edi_inv_batch_s.NEXTVAL INTO l_group_id FROM DUAL;


FOR c_ssheet_reviewhold_rec IN c_ssheet_reviewhold_inv
(csr_org_rec.org_id)
LOOP
l_group_id :=
c_ssheet_reviewhold_rec.GROUP_ID;
LOG (module
, 'Processing Spreadsheet Review HOLD where group_id already
exists:'
|| c_ssheet_reviewhold_rec.GROUP_ID);
l_batch_count :=
l_batch_count
+ c_ssheet_reviewhold_rec.COUNT;

IF l_batch_count > l_batch_size


THEN
l_batch_count := c_ssheet_reviewhold_rec.COUNT;
END IF;

IF l_group_id <> l_prev_group_id


THEN
l_prev_group_id :=
l_group_id;
l_g_count_b :=
l_g_count_b
+ 1;
LOG (module, 'Ssheet Review HOLD existing group id :'
|| l_group_id);
x_ssheet_reviewhold_batch_tbl (l_g_count_b).GROUP_ID :=
l_group_id;
x_ssheet_reviewhold_batch_tbl (l_g_count_b).org_id :=

csr_org_rec.org_id;
END IF;

l_count_b := l_count_b
+ 1;
hold_group_id_tbl (l_count_b) := l_group_id;
ss_review_invoice_id (l_count_b) :=
c_ssheet_reviewhold_rec.invoice_id;
END LOOP;

/* IF Ss_review_invoice_id.COUNT > 0 THEN


FORALL I IN 1 .. Ss_review_invoice_id.COUNT
UPDATE Ap_invoices_interface
SET GROUP_ID = Hold_group_id_tbl (I)
WHERE Invoice_id = Ss_review_invoice_id (I);
END IF;*/
l_group_id := 0;
l_batch_count := 0;
hold_group_id_tbl.DELETE;
l_prev_group_id := '-99';

SELECT mike_edi_inv_batch_s.NEXTVAL
INTO l_group_id
FROM DUAL;

FOR c_ssheet_dchold_rec IN c_ssheet_dchold_group_null (csr_org_rec.org_id)


LOOP
LOG (module, 'Processing Spreadsheet DC HOLD :');
l_batch_count := l_batch_count
+ c_ssheet_dchold_rec.COUNT;

IF l_batch_count > l_batch_size


THEN
l_batch_count := c_ssheet_dchold_rec.COUNT;

SELECT mike_edi_inv_batch_s.NEXTVAL
INTO l_group_id
FROM DUAL;
END IF;

l_count_c := l_count_c
+ 1;

IF l_group_id <> l_prev_group_id


THEN
l_prev_group_id := l_group_id;
l_g_count_c := l_g_count_c
+ 1;
LOG (module, 'Ssheet DC HOLD group id :'
|| l_group_id);
x_ssheet_dchold_batch_tbl (l_g_count_c).GROUP_ID := l_group_id;
x_ssheet_dchold_batch_tbl (l_g_count_c).org_id :=
csr_org_rec.org_id;
END IF;

hold_group_id_tbl (l_count_c) := l_group_id;


ss_dc_invoice_id (l_count_c) := c_ssheet_dchold_rec.invoice_id;
END LOOP;

IF ss_dc_invoice_id.COUNT > 0
THEN
FORALL i IN 1 .. ss_dc_invoice_id.COUNT
UPDATE ap_invoices_interface
SET GROUP_ID = hold_group_id_tbl (i)
WHERE invoice_id = ss_dc_invoice_id (i);
END IF;

COMMIT;
l_group_id := 0;
l_batch_count := 0;
hold_group_id_tbl.DELETE;
l_prev_group_id := '-99';

-- SELECT Mike_edi_inv_batch_s.NEXTVAL INTO L_group_id FROM DUAL;


FOR c_ssheet_dchold_rec IN c_ssheet_dchold_inv (csr_org_rec.org_id)
LOOP
l_group_id := c_ssheet_dchold_rec.GROUP_ID;
LOG (module, 'Processing Spreadsheet DC HOLD :');
l_batch_count := l_batch_count
+ c_ssheet_dchold_rec.COUNT;

IF l_batch_count > l_batch_size


THEN
l_batch_count := c_ssheet_dchold_rec.COUNT;
-- SELECT mike_edi_inv_batch_s.NEXTVAL INTO l_group_id FROM DUAL;
END IF;

l_count_c := l_count_c
+ 1;

IF l_group_id <> l_prev_group_id


THEN
l_prev_group_id := l_group_id;
l_g_count_c := l_g_count_c
+ 1;
LOG (module, 'Ssheet DC HOLD group id :'
|| l_group_id);
x_ssheet_dchold_batch_tbl (l_g_count_c).GROUP_ID := l_group_id;
x_ssheet_dchold_batch_tbl (l_g_count_c).org_id :=
csr_org_rec.org_id;
END IF;

hold_group_id_tbl (l_count_c) := l_group_id;


ss_dc_invoice_id (l_count_c) := c_ssheet_dchold_rec.invoice_id;
END LOOP;

/* IF Ss_dc_invoice_id.COUNT > 0 THEN


FORALL I IN 1 .. Ss_dc_invoice_id.COUNT
UPDATE Ap_invoices_interface
SET GROUP_ID = Hold_group_id_tbl (I)
WHERE Invoice_id = Ss_dc_invoice_id (I);
END IF;*/
l_group_id := 0;
l_batch_count := 0;
hold_group_id_tbl.DELETE;
l_prev_group_id := '-99';

SELECT mike_edi_inv_batch_s.NEXTVAL
INTO l_group_id
FROM DUAL;

FOR c_ssheet_nohold_rec IN c_ssheet_nohold_group_null (csr_org_rec.org_id)


LOOP
LOG (module, 'Processing Spreadsheet NO HOLD :');
l_batch_count := l_batch_count
+ c_ssheet_nohold_rec.COUNT;

IF l_batch_count > l_batch_size


THEN
l_batch_count := c_ssheet_nohold_rec.COUNT;

SELECT mike_edi_inv_batch_s.NEXTVAL
INTO l_group_id
FROM DUAL;
END IF;

IF l_group_id <> l_prev_group_id


THEN
l_prev_group_id := l_group_id;
l_g_count_d := l_g_count_d
+ 1;
LOG (module, 'Ssheet NO HOLD group id :'
|| l_group_id);
x_ssheet_nohold_batch_tbl (l_g_count_d).GROUP_ID := l_group_id;
x_ssheet_nohold_batch_tbl (l_g_count_d).org_id :=
csr_org_rec.org_id;
END IF;
l_count_d := l_count_d
+ 1;
hold_group_id_tbl (l_count_d) := l_group_id;
ss_no_invoice_id (l_count_d) := c_ssheet_nohold_rec.invoice_id;
END LOOP;

IF ss_no_invoice_id.COUNT > 0
THEN
FORALL i IN 1 .. ss_no_invoice_id.COUNT
UPDATE ap_invoices_interface
SET GROUP_ID = hold_group_id_tbl (i)
WHERE invoice_id = ss_no_invoice_id (i);
END IF;

COMMIT;
l_group_id := 0;
l_batch_count := 0;
hold_group_id_tbl.DELETE;
l_prev_group_id := '-99';

-- SELECT mike_edi_inv_batch_s.NEXTVAL INTO l_group_id FROM DUAL;


FOR c_ssheet_nohold_rec IN c_ssheet_nohold_inv (csr_org_rec.org_id)
LOOP
l_group_id := c_ssheet_nohold_rec.GROUP_ID;
LOG (module, 'Processing Spreadsheet NO HOLD :');
l_batch_count := l_batch_count
+ c_ssheet_nohold_rec.COUNT;

IF l_batch_count > l_batch_size


THEN
l_batch_count := c_ssheet_nohold_rec.COUNT;
-- SELECT mike_edi_inv_batch_s.NEXTVAL INTO l_group_id FROM DUAL;
END IF;

IF l_group_id <> l_prev_group_id


THEN
l_prev_group_id := l_group_id;
l_g_count_d := l_g_count_d
+ 1;
LOG (module, 'Ssheet NO HOLD group id :'
|| c_ssheet_nohold_rec.GROUP_ID);
x_ssheet_nohold_batch_tbl (l_g_count_d).GROUP_ID := l_group_id;
x_ssheet_nohold_batch_tbl (l_g_count_d).org_id :=
csr_org_rec.org_id;
END IF;

l_count_d := l_count_d
+ 1;
hold_group_id_tbl (l_count_d) := l_group_id;
ss_no_invoice_id (l_count_d) := c_ssheet_nohold_rec.invoice_id;
END LOOP;

/* IF Ss_no_invoice_id.COUNT > 0 THEN


FORALL I IN 1 .. Ss_no_invoice_id.COUNT
UPDATE Ap_invoices_interface
SET GROUP_ID = Hold_group_id_tbl (I)
WHERE Invoice_id = Ss_no_invoice_id (I);
END IF;*/
l_group_id := 0;
l_batch_count := 0;

FOR c_quick_reviewhold_rec IN c_quick_reviewhold_inv (csr_org_rec.org_id)


LOOP

LOG (module, 'Processing Quick Invoice Review HOLD :'); --Added by


Vamsi Krishna on 30-AUG-2007

l_count_e := l_count_e
+ 1;
x_quick_reviewhold_batch_tbl (l_count_e).GROUP_ID :=

c_quick_reviewhold_rec.GROUP_ID;
x_quick_reviewhold_batch_tbl (l_count_e).org_id :=
csr_org_rec.org_id;
END LOOP; --end of
for loop

l_group_id := 0;
l_batch_count := 0;

FOR c_quick_dchold_rec IN c_quick_dchold_inv (csr_org_rec.org_id)


LOOP

LOG (module, 'Processing Quick Invoice DC HOLD :'); --Added by Vamsi


KRishna on 30-AUG-2007

l_count_f := l_count_f
+ 1;
x_quick_dchold_batch_tbl (l_count_f).GROUP_ID :=

c_quick_dchold_rec.GROUP_ID;
x_quick_dchold_batch_tbl (l_count_f).org_id := csr_org_rec.org_id;
END LOOP; --end of
for loop

l_group_id := 0;
l_batch_count := 0;

FOR c_quick_nohold_rec IN c_quick_nohold_inv (csr_org_rec.org_id)


LOOP

LOG (module, 'Processing Quick Invoice No HOLD :'); -- Added by Vamsi


Krishna on 30-AUG-2007

l_count_g := l_count_g
+ 1;
x_quick_nohold_batch_tbl (l_count_g).GROUP_ID :=

c_quick_nohold_rec.GROUP_ID;
x_quick_nohold_batch_tbl (l_count_g).org_id := csr_org_rec.org_id;
END LOOP; --end of
for loop

l_group_id := 0;
l_batch_count := 0;
END LOOP;
COMMIT;
-- END IF;
LOG (module, 'End of hold_batch_processor');
-- END IF;
EXCEPTION
WHEN OTHERS
THEN
x_errcode := 2;
x_errbuf :=
'When Others Exception in hold_batch_processor SQLCODE : '
|| SQLCODE
|| ' SQLERRM : '
|| SQLERRM;
fnd_file.put_line (fnd_file.LOG, x_errbuf);
END hold_batch_processor;

/* +
-----------------------------------------------------------------------------------
------------------- +
This procedure will submit the Custom Program and returns the request ID
Parameters:
x_errbuf(OUT) : This is an out variable which will be populated with error
incase on any error
and NULL for Normal Condition
x_errcode(OUT) : This is an out variable which will be populated with 1 incase
on any error
and 1 in case of warning, and NULL for Normal Condition
p_request_id(OUT) : Request ID
p_group_id : Group ID
p_custom_pgm_name : Custom Program Name
p_custom_appl_name : Custom Aplication Name
p_debug_flag(IN) : This specifies the debug Option (Y/N) Default with N
+
-----------------------------------------------------------------------------------
------------------- + */
PROCEDURE submit_custom_program (
x_errcode OUT NOCOPY NUMBER
,x_errbuf OUT NOCOPY VARCHAR2
,x_request_id OUT NOCOPY NUMBER
,p_group_id VARCHAR2
,p_custom_pgm_name VARCHAR2
,p_custom_appl_name VARCHAR2 DEFAULT 'MIKEAP'
,p_debug_flag VARCHAR2 DEFAULT 'N')
IS
module CONSTANT VARCHAR2 (100) := 'submit_custom_program';
l_req_id NUMBER;
BEGIN
g_debug_flag := p_debug_flag;
LOG (module, 'Start of submit_custom_program');
LOG (module, 'Calling Parameters ..... ');
LOG (module, 'Application Name => '
|| p_custom_appl_name);
LOG (module, 'program => '
|| p_custom_pgm_name);
LOG (module, 'argument1 (l_group_id) => '
|| p_group_id);
-- Submit Custom Concurrent Program
l_req_id :=
fnd_request.submit_request (application => p_custom_appl_name
,program => p_custom_pgm_name
,description => g_request_id
,
--'',
start_time => ''
,sub_request => FALSE
,argument1 => p_group_id
,argument2 => p_debug_flag);
COMMIT;

IF (l_req_id = 0)
THEN
x_errcode := 2;
x_request_id := l_req_id;
x_errbuf := 'Failed Submit Custom Program(s).'
|| fnd_message.get;
fnd_file.put_line (fnd_file.LOG, x_errbuf
|| 'For Group ID '
|| p_group_id);
ELSE
x_request_id := l_req_id;
x_errcode := 0;
LOG (module, 'Sucessfilly Submited the Request Request ID : '
|| l_req_id);
END IF;

LOG (module, 'End of submit_custom_program');


EXCEPTION
WHEN OTHERS
THEN
x_errcode := 2;
x_errbuf :=
'When Others Exception in submit_custom_program SQLCODE : '
|| SQLCODE
|| ' SQLERRM : '
|| SQLERRM;
fnd_file.put_line (fnd_file.LOG, x_errbuf);
LOG (module, x_errbuf);
END submit_custom_program;

/*******************************************************************************
Procedure Name : process_invoices
Description : This Procudure will process the EDI Invoices
******************************************************************************/
PROCEDURE process_invoices (
x_retcode OUT NOCOPY NUMBER
,x_errbuf OUT NOCOPY VARCHAR2
,p_batch_option IN VARCHAR2
,p_purge_accepted_data IN VARCHAR2)
IS
edi_reqid NUMBER := 0;
l_request_id NUMBER :=
fnd_global.conc_request_id;
l_req_id NUMBER := 0;
lc_errbuf VARCHAR2 (1000);
lc_retcode NUMBER := 0;
lc_err_retcode NUMBER := 0;
lc_err_errbuf VARCHAR2 (4000);
l_record_num NUMBER := 0;
l_process_record_count NUMBER;
l_del_record_count NUMBER;
l_valid_record_value NUMBER;
l_errored_record_value NUMBER;
g_batch_process_tbl batch_process_tbl_type;
edi_batch_process_tbl batch_process_tbl_type;
x_edi_dchold_batch_tbl batch_process_tbl_type;
x_edi_nohold_batch_tbl batch_process_tbl_type;
x_ssheet_reviewhold_batch_tbl batch_process_tbl_type;
x_ssheet_dchold_batch_tbl batch_process_tbl_type;
x_ssheet_nohold_batch_tbl batch_process_tbl_type;
x_quick_reviewhold_batch_tbl batch_process_tbl_type;
x_quick_dchold_batch_tbl batch_process_tbl_type;
x_quick_nohold_batch_tbl batch_process_tbl_type;
purge_reqid NUMBER;
poscm_reqid NUMBER;
mikeap_reqid NUMBER;
l_group_size NUMBER := 0;
l_table_count NUMBER := 0;
i PLS_INTEGER := 0;
j PLS_INTEGER := 0;
l_rec_cnt PLS_INTEGER := 0;
l_call_status BOOLEAN;
l_rphase VARCHAR2 (30);
l_rstatus VARCHAR2 (30);
l_dphase VARCHAR2 (30);
l_dstatus VARCHAR2 (30);
l_message VARCHAR2 (240);
module VARCHAR2 (100) := 'process_invoices';
l_dup_count NUMBER := 0;
v_user_id NUMBER;
v_resp_id NUMBER;
v_resp_appl_id NUMBER;
l_user_id NUMBER;
l_resp_id NUMBER;
l_resp_appl_id NUMBER;

CURSOR c_tracking_id
IS
SELECT DISTINCT external_doc_ref
,COUNT (*) total_staging_records
,SUM (NVL (invoice_amount, 0) ) total_inv_amt
,DECODE (SOURCE
,'EDINM', 'MSI_AP_EDI_NM_INV_VAL_PKG'
,'SPREADSHEET', 'MSI_AP_SPREADSHEET_VALIDATION'
,'INVOICE GATEWAY', 'MSI_AP_INVOICE_GATEWAY')
SOURCE
FROM mike_invoices_interface
WHERE process_flag IN ('V', 'L') --, 'H' Commented by Vamsi
Krishna on 24-AUG-2007
GROUP BY external_doc_ref, SOURCE;

CURSOR c_record_count (
p_process_flag VARCHAR2
,p_tracking_id NUMBER)
IS
SELECT COUNT (*) total_records
FROM mike_invoices_interface
WHERE DECODE (process_flag
, 'P'
,process_flag) = p_process_flag
AND external_doc_ref = p_tracking_id; --'H', removed by Vamsi Krishna
on 24-AUg-2007

CURSOR c_record_value (
p_process_flag VARCHAR2
,p_tracking_id NUMBER)
IS
SELECT SUM (NVL (invoice_amount, 0) ) total_value
FROM mike_invoices_interface
WHERE DECODE (process_flag
, 'P'
,process_flag) = p_process_flag
AND external_doc_ref = p_tracking_id; --'H', removed by Vamsi Krishna
on 24-AUG-2007

CURSOR c_dup_count
IS
SELECT vendor_num
,COUNT (*) inv_count
FROM ap_invoices_interface
WHERE status = 'REJECTED'
GROUP BY vendor_num;

CURSOR c_org_id
IS
SELECT DISTINCT org_id
FROM mike_invoices_interface
WHERE org_id IS NOT NULL
UNION
SELECT DISTINCT org_id
FROM ap_invoices_interface
WHERE org_id IS NOT NULL;
BEGIN
g_gat_tab_req_count := 0;
LOG (module, 'Submitting Gather Table Stats for Mike Interface Tables');
g_gat_tab_req_count :=

g_gat_tab_req_count
+ 1;
g_gat_tab_stat_req_id (g_gat_tab_req_count).custom_request_id :=
mike_common_vald_pkg.gather_table_stats ('MIKEAP'
,'MIKE_INVOICES_INTERFACE'
,l_request_id);
g_gat_tab_req_count :=

g_gat_tab_req_count
+ 1;
g_gat_tab_stat_req_id (g_gat_tab_req_count).custom_request_id :=
mike_common_vald_pkg.gather_table_stats ('MIKEAP'
,'MIKE_INVOICE_LINES_INTERFACE'
,l_request_id);

FOR i IN 1 .. g_gat_tab_stat_req_id.COUNT
LOOP
mike_common_inbound_pkg.wait_for_program
(lc_retcode
,lc_errbuf
,g_gat_tab_stat_req_id
(i).custom_request_id
,g_debug_flag);
g_gat_tab_stat_req_id (i).custom_request_status := lc_retcode;
g_gat_tab_stat_req_id (i).custom_request_message := lc_errbuf;
x_retcode := lc_retcode;
END LOOP;

LOG (module, 'Calling Batch_Processor');


batch_processor (lc_err_retcode
,lc_err_errbuf
,edi_batch_process_tbl
,p_batch_option);

IF lc_err_retcode <> 0
THEN
x_errbuf := lc_err_errbuf;
x_retcode := lc_err_retcode;
END IF;

FOR c_tracking_id_rec IN c_tracking_id


LOOP
BEGIN
l_record_num :=

l_record_num
+ 1;
exception_summary_tbl (l_record_num).interface_tracking_id :=

c_tracking_id_rec.external_doc_ref;
exception_summary_tbl (l_record_num).total_staging_records :=

c_tracking_id_rec.total_staging_records;
exception_summary_tbl (l_record_num).total_record_value :=

c_tracking_id_rec.total_inv_amt;
exception_summary_tbl (l_record_num).interface_source :=

c_tracking_id_rec.SOURCE;
END;
END LOOP;

v_user_id :=

fnd_global.user_id;
v_resp_id :=

fnd_global.resp_id;
v_resp_appl_id :=

fnd_global.resp_appl_id;

FOR org_id_rec IN c_org_id


LOOP
LOG (module, 'Deriving Value for Apps Intialization for Custom Program');
mike_common_vald_pkg.resp_apps_initialize (org_id_rec.org_id
,'AP'
,l_resp_id
,l_resp_appl_id
,lc_err_errbuf);
LOG (module, 'Initializing Apps for Org ID :'
|| org_id_rec.org_id);
--Intializing Application setting for custom validation
LOG (module
, 'Apps Initialize values :'
|| l_resp_id
|| '>>'
|| l_resp_appl_id
|| 'Org>>'
|| org_id_rec.org_id);
fnd_global.apps_initialize (v_user_id
,l_resp_id
,l_resp_appl_id);
LOG (module
, 'Submitting custom Validation programs in Batches : '
|| edi_batch_process_tbl.COUNT);

IF edi_batch_process_tbl.COUNT > 0
THEN
FOR i IN 1 .. edi_batch_process_tbl.COUNT
LOOP
IF edi_batch_process_tbl (i).org_id = org_id_rec.org_id
THEN
LOG (module
, 'Submitting custom Validation program for Batches :'
|| edi_batch_process_tbl (i).GROUP_ID
|| 'Org ID>>'
|| edi_batch_process_tbl (i).org_id);
submit_custom_program (lc_retcode
,lc_errbuf
,l_req_id
,edi_batch_process_tbl (i).GROUP_ID
,'MSI_AP_EDI_NM_INV_VAL_PKG'
,'MIKEAP'
,g_debug_flag);
edi_batch_process_tbl (i).custom_pgm_name :=

'MSI_AP_EDI_NM_INV_VAL_PKG';
edi_batch_process_tbl (i).custom_request_id := l_req_id;
LOG (module
, 'Custom Request ID updated in PL/SQL Table :'
|| edi_batch_process_tbl (i).custom_request_id);
ELSE
LOG (module
, 'No Batch Found for :'
|| org_id_rec.org_id
|| ' '
|| 'Organization');
END IF;
END LOOP;
END IF;
END LOOP;

LOG (module
, 'Waiting for concurrent requests to complete # of Req :'
|| edi_batch_process_tbl.COUNT);

IF edi_batch_process_tbl.COUNT > 0
THEN
FOR i IN 1 .. edi_batch_process_tbl.COUNT
LOOP
LOG (module
, 'Waiting for Request to complete :'
|| edi_batch_process_tbl (i).custom_request_id);
mike_common_inbound_pkg.wait_for_program
(lc_retcode
,lc_errbuf
,edi_batch_process_tbl
(i).custom_request_id
,g_debug_flag);
edi_batch_process_tbl (i).custom_request_status := lc_retcode;
edi_batch_process_tbl (i).custom_request_message := lc_errbuf;
--IF lc_retcode <> 0 THEN
-- IF lc_err_retcode = 2 THEN
-- NULL;
-- ELSE
-- lc_err_retcode := lc_retcode;
LOG (module, 'Custom Validation Return Code :'
|| lc_retcode);

IF NVL (lc_retcode, 0) <> 0


THEN
x_retcode := lc_retcode;
LOG (module
, 'Custom validation return code to Process inovices :'
|| x_retcode);
END IF;
-- lc_err_errbuf := lc_errbuf;
-- END IF;
-- END IF;
END LOOP;
END IF;

LOG (module, 'Value of Return code from Custom Validation Programs :'
|| x_retcode);
LOG (module, 'Deleting Errored records from Main Interface Tables');

--Deleting orphan records from AP Interface header


DELETE FROM ap_invoices_interface apli
WHERE NOT EXISTS (SELECT 1
FROM ap_invoice_lines_interface ail
WHERE ail.invoice_id = apli.invoice_id)and
source<>'COUPA';--4.0 Added for FA Enhancemnet to avoid deleting the COUPA
Records,separetly handled in the COUPA Package

-- COMMIT;
--Deleting records from AP Interface header where the record in Mike tables in
Error or Hold status.
DELETE FROM ap_invoices_interface aii
WHERE EXISTS (
SELECT 1
FROM mike_invoices_interface mii
WHERE mii.invoice_id = aii.invoice_id
AND process_flag IN ('E') ); --, 'H'
--commented 'H' from process flag
condition by Vamsi Krishna on 15-AUG-2007 as part of Match Option.
-- COMMIT;
--Deleting orphan records from AP Interface lines
DELETE FROM ap_invoice_lines_interface apli
WHERE NOT EXISTS (SELECT 1
FROM ap_invoices_interface ail
WHERE ail.invoice_id = apli.invoice_id);

-- COMMIT;

/* COMMENTED BY ARUN AND ADDED THE UPDATE STATEMENT BELOW

UPDATE MIKE_EDI_NM_HEADER_ARCH meh


SET OPEN_INTFC_STATUS = 'P'
WHERE EXISTS
(SELECT 1 FROM AP_INVOICES_INTERFACE AII
WHERE aii.invoice_id = meh.invoice_id);
*/
--updating arch table status = 'P' where there is a valid record in AP Tables.
--(begin) commented by Vamsi Krishna on 22-AUG-2007
/* UPDATE MIKE_EDI_NM_HEADER_ARCH meh
SET open_intfc_status = 'P'
WHERE EXISTS (SELECT 1
FROM ap_invoices_interface aii
WHERE aii.invoice_num = meh.invoice_id);

COMMIT;*/
--(end) commented by Vamsi Krishna on 22-AUG-2007

--Submitting Duplicate Invoices checking program


l_req_id :=
fnd_request.submit_request (application => 'MIKEAP'
,program => 'MIKEAPIDC'
,description => NULL
,start_time => NULL
,sub_request => FALSE
,argument1 => g_debug_flag);
COMMIT;
l_call_status :=
fnd_concurrent.wait_for_request (l_req_id
,20
,0
,l_rphase
,l_rstatus
,l_dphase
,l_dstatus
,l_message);

IF (l_call_status = TRUE)
THEN
IF l_dphase = 'COMPLETE'
AND l_dstatus IN ('NORMAL', 'WARNING')
THEN
IF l_dstatus IN ('WARNING')
THEN
lc_retcode := 1;
lc_errbuf :=
fnd_message.get
|| 'Duplicate Invoice check Program Completed Wairning';
LOG (module, lc_errbuf);
ELSE
LOG (module, 'Duplicate Invoice check Program Completed Normal');
lc_retcode := 0;
END IF;
ELSE
lc_errbuf :=
fnd_message.get
|| 'Duplicate Invoice check Program Not Completed Normal/Warning';
lc_retcode := 2;
fnd_file.put_line (fnd_file.LOG, lc_errbuf
|| 'For Request ID '
|| l_req_id);
LOG (module, lc_errbuf);
END IF; -- dphase =
'COMPLETE'
ELSE
lc_errbuf :=
fnd_message.get
|| 'Can not wait for the status of Duplicate Invoice check
program(s).';
lc_retcode := 2;
fnd_file.put_line (fnd_file.LOG
, lc_errbuf
|| 'For Concurrent Request ID '
|| l_req_id);
LOG (module, lc_errbuf);
END IF; -- l_call_status
= TRUE

FOR c_dup_rec IN c_dup_count


LOOP
l_dup_count := l_dup_count
+ 1;
duplicate_inv_tbl (l_dup_count).vendor_id := c_dup_rec.vendor_num;
duplicate_inv_tbl (l_dup_count).inv_count := c_dup_rec.inv_count;
END LOOP;

LOG (module
,'Updating status of Mike Interface tables for Successfully Processed
records');

--added by dasarir to cleanup attribute15 which was used for reprocessed


records on Mar 28,2006
UPDATE mike_invoices_interface
SET attribute15 = NULL;

--added by dasarir to cleanup attribute15 which was used for reprocessed


records on Mar 28,2006
UPDATE ap_invoices_interface
SET attribute15 = NULL;

UPDATE mike_invoices_interface mii


SET process_flag = 'P'
WHERE EXISTS (SELECT 1
FROM ap_invoices_interface aii
WHERE aii.invoice_id = mii.invoice_id
--AND aii.status =
'PROCESSED'
);
UPDATE mike_invoice_lines_interface mil
SET process_flag = 'P'
WHERE EXISTS (SELECT 1
FROM ap_invoices_interface aii
WHERE aii.invoice_id = mil.invoice_id
--AND aii.status =
'PROCESSED'
);

COMMIT;
/* UPDATE PO_LINE_LOCATIONS_ALL
SET match_option = 'P'
WHERE line_location_id in (SELECT po_line_location_id FROM
ap_invoice_lines_interface
WHERE match_option = 'P');*/
LOG (module
,'Updated status of Mike Interface tables for Successfully Processed
records');
g_gat_tab_stat_req_id.DELETE;
g_gat_tab_req_count := 0;
g_gat_tab_req_count :=

g_gat_tab_req_count
+ 1;
g_gat_tab_stat_req_id (g_gat_tab_req_count).custom_request_id :=
mike_common_vald_pkg.gather_table_stats ('AP'
,'AP_INVOICES_INTERFACE'
,l_request_id);
g_gat_tab_req_count :=

g_gat_tab_req_count
+ 1;
g_gat_tab_stat_req_id (g_gat_tab_req_count).custom_request_id :=
mike_common_vald_pkg.gather_table_stats ('AP'
,'AP_INVOICE_LINES_INTERFACE'
,l_request_id);

FOR i IN 1 .. g_gat_tab_stat_req_id.COUNT
LOOP
mike_common_inbound_pkg.wait_for_program
(lc_retcode
,lc_errbuf
,g_gat_tab_stat_req_id
(i).custom_request_id
,g_debug_flag);
g_gat_tab_stat_req_id (i).custom_request_status := lc_retcode;
g_gat_tab_stat_req_id (i).custom_request_message := lc_errbuf;

IF lc_retcode <> 0
THEN
x_retcode := lc_retcode;
END IF;
END LOOP;

hold_batch_processor (lc_err_retcode
,lc_err_errbuf
,x_edi_dchold_batch_tbl
,x_edi_nohold_batch_tbl
,x_ssheet_reviewhold_batch_tbl
,x_ssheet_dchold_batch_tbl
,x_ssheet_nohold_batch_tbl
,x_quick_reviewhold_batch_tbl
,x_quick_dchold_batch_tbl
,x_quick_nohold_batch_tbl
,p_batch_option
,g_debug_flag);
/*
log(module,'Submitting Gather Schema Stats Program');
submit_gather_schema_stats(lc_err_errbuf,lc_err_retcode);
x_retcode := lc_err_retcode;
*/--Getting Current Application Settings
v_user_id :=

fnd_global.user_id;
v_resp_id :=

fnd_global.resp_id;
v_resp_appl_id :=

fnd_global.resp_appl_id;

FOR org_id_rec IN c_org_id


LOOP
mike_common_vald_pkg.resp_apps_initialize (org_id_rec.org_id
,'AP'
,l_resp_id
,l_resp_appl_id
,lc_err_errbuf);

-- fnd_file.put_line(Fnd_file.log,'return from commn vald: orgID'||


org_id_rec.org_id || ',' || l_resp_id || ',' || l_resp_appl_id || ',' ||
lc_err_errbuf);
--Intializing Application setting for Payable manager

fnd_global.apps_initialize (v_user_id
,l_resp_id
,l_resp_appl_id);

-- fnd_file.put_line(Fnd_file.log,'Initialziing appl orgID'||


org_id_rec.org_id || ',' || l_resp_id || ',' || l_resp_appl_id || ',' ||
v_user_id);

LOG (module, 'Initializing Application :'


|| l_resp_id
|| '>>'
|| l_resp_appl_id);
LOG (module, 'EDI DC Hold batch Count :'
|| x_edi_dchold_batch_tbl.COUNT);

IF x_edi_dchold_batch_tbl.COUNT > 0
THEN
FOR i IN 1 .. x_edi_dchold_batch_tbl.COUNT
LOOP
IF x_edi_dchold_batch_tbl (i).org_id = org_id_rec.org_id
THEN
submit_std_inv_imp_pgm
(p_errbuf => x_edi_dchold_batch_tbl
(i).oracle_request_message
,p_retcode => x_edi_dchold_batch_tbl
(i).oracle_request_status
,p_request_id => x_edi_dchold_batch_tbl
(i).oracle_request_id
,p_group_id => x_edi_dchold_batch_tbl
(i).GROUP_ID
,p_source => 'EDINM'
,p_hold => 'MSI DC HOLD');
x_edi_dchold_batch_tbl (i).oracle_pgm_name :=
'APXIIMPT';
l_rec_cnt :=
l_rec_cnt
+ 1;
g_batch_process_tbl (l_rec_cnt).GROUP_ID :=
x_edi_dchold_batch_tbl
(i).GROUP_ID;
g_batch_process_tbl (l_rec_cnt).oracle_request_id :=
x_edi_dchold_batch_tbl
(i).oracle_request_id;
END IF;
END LOOP;
END IF;

LOG (module, 'EDI NO Hold batch Count :'


|| x_edi_nohold_batch_tbl.COUNT);

IF x_edi_nohold_batch_tbl.COUNT > 0
THEN
FOR i IN 1 .. x_edi_nohold_batch_tbl.COUNT
LOOP
IF x_edi_nohold_batch_tbl (i).org_id = org_id_rec.org_id
THEN
submit_std_inv_imp_pgm
(p_errbuf => x_edi_nohold_batch_tbl
(i).oracle_request_message
,p_retcode => x_edi_nohold_batch_tbl
(i).oracle_request_status
,p_request_id => x_edi_nohold_batch_tbl
(i).oracle_request_id
,p_group_id => x_edi_nohold_batch_tbl
(i).GROUP_ID
,p_source => 'EDINM'
,p_hold => NULL);
x_edi_nohold_batch_tbl (i).oracle_pgm_name :=
'APXIIMPT';
l_rec_cnt :=
l_rec_cnt
+ 1;
g_batch_process_tbl (l_rec_cnt).GROUP_ID :=
x_edi_nohold_batch_tbl
(i).GROUP_ID;
g_batch_process_tbl (l_rec_cnt).oracle_request_id :=
x_edi_nohold_batch_tbl
(i).oracle_request_id;
END IF;
END LOOP;
END IF;
IF x_ssheet_reviewhold_batch_tbl.COUNT > 0
THEN
FOR i IN 1 .. x_ssheet_reviewhold_batch_tbl.COUNT
LOOP
IF x_ssheet_reviewhold_batch_tbl (i).org_id = org_id_rec.org_id
THEN
submit_std_inv_imp_pgm
(p_errbuf => x_ssheet_reviewhold_batch_tbl
(i).oracle_request_message
,p_retcode => x_ssheet_reviewhold_batch_tbl
(i).oracle_request_status
,p_request_id => x_ssheet_reviewhold_batch_tbl
(i).oracle_request_id
,p_group_id => x_ssheet_reviewhold_batch_tbl
(i).GROUP_ID
,p_source => 'SPREADSHEET'
,p_hold => 'MSI REVIEW HOLD');
x_ssheet_reviewhold_batch_tbl (i).oracle_pgm_name :=
'APXIIMPT';
l_rec_cnt :=
l_rec_cnt
+ 1;
g_batch_process_tbl (l_rec_cnt).GROUP_ID :=
x_ssheet_reviewhold_batch_tbl
(i).GROUP_ID;
g_batch_process_tbl (l_rec_cnt).oracle_request_id :=
x_ssheet_reviewhold_batch_tbl
(i).oracle_request_id;
LOG (module
, 'Group_id for Ssheet Review Hold Batches :'
|| x_ssheet_reviewhold_batch_tbl (i).GROUP_ID);
END IF;
END LOOP;
END IF;

IF x_ssheet_dchold_batch_tbl.COUNT > 0
THEN
FOR i IN 1 .. x_ssheet_dchold_batch_tbl.COUNT
LOOP
IF x_ssheet_dchold_batch_tbl (i).org_id = org_id_rec.org_id
THEN
submit_std_inv_imp_pgm
(p_errbuf => x_ssheet_dchold_batch_tbl
(i).oracle_request_message
,p_retcode => x_ssheet_dchold_batch_tbl
(i).oracle_request_status
,p_request_id => x_ssheet_dchold_batch_tbl
(i).oracle_request_id
,p_group_id => x_ssheet_dchold_batch_tbl
(i).GROUP_ID
,p_source => 'SPREADSHEET'
,p_hold => 'MSI DC HOLD');
x_ssheet_dchold_batch_tbl (i).oracle_pgm_name :=
'APXIIMPT';
l_rec_cnt :=
l_rec_cnt
+ 1;
g_batch_process_tbl (l_rec_cnt).GROUP_ID :=
x_ssheet_dchold_batch_tbl
(i).GROUP_ID;
g_batch_process_tbl (l_rec_cnt).oracle_request_id :=
x_ssheet_dchold_batch_tbl
(i).oracle_request_id;
END IF;
END LOOP;
END IF;

IF x_ssheet_nohold_batch_tbl.COUNT > 0
THEN
FOR i IN 1 .. x_ssheet_nohold_batch_tbl.COUNT
LOOP
IF x_ssheet_nohold_batch_tbl (i).org_id = org_id_rec.org_id
THEN
submit_std_inv_imp_pgm
(p_errbuf => x_ssheet_nohold_batch_tbl
(i).oracle_request_message
,p_retcode => x_ssheet_nohold_batch_tbl
(i).oracle_request_status
,p_request_id => x_ssheet_nohold_batch_tbl
(i).oracle_request_id
,p_group_id => x_ssheet_nohold_batch_tbl
(i).GROUP_ID
,p_source => 'SPREADSHEET'
,p_hold => NULL);
x_ssheet_nohold_batch_tbl (i).oracle_pgm_name :=
'APXIIMPT';
l_rec_cnt :=
l_rec_cnt
+ 1;
g_batch_process_tbl (l_rec_cnt).GROUP_ID :=
x_ssheet_nohold_batch_tbl
(i).GROUP_ID;
g_batch_process_tbl (l_rec_cnt).oracle_request_id :=
x_ssheet_nohold_batch_tbl
(i).oracle_request_id;
END IF;
END LOOP;
END IF;

IF x_quick_reviewhold_batch_tbl.COUNT > 0
THEN
FOR i IN 1 .. x_quick_reviewhold_batch_tbl.COUNT
LOOP
IF x_quick_reviewhold_batch_tbl (i).org_id = org_id_rec.org_id
THEN
submit_std_inv_imp_pgm
(p_errbuf => x_quick_reviewhold_batch_tbl
(i).oracle_request_message
,p_retcode => x_quick_reviewhold_batch_tbl
(i).oracle_request_status
,p_request_id => x_quick_reviewhold_batch_tbl
(i).oracle_request_id
,p_group_id => x_quick_reviewhold_batch_tbl
(i).GROUP_ID
,p_source => 'INVOICE GATEWAY'
,p_hold => 'MSI REVIEW HOLD');
x_quick_reviewhold_batch_tbl (i).oracle_pgm_name :=
'APXIIMPT';
l_rec_cnt :=
l_rec_cnt
+ 1;
g_batch_process_tbl (l_rec_cnt).GROUP_ID :=
x_quick_reviewhold_batch_tbl
(i).GROUP_ID;
g_batch_process_tbl (l_rec_cnt).oracle_request_id :=
x_quick_reviewhold_batch_tbl
(i).oracle_request_id;
END IF;
END LOOP;
END IF;

IF x_quick_dchold_batch_tbl.COUNT > 0
THEN
FOR i IN 1 .. x_quick_dchold_batch_tbl.COUNT
LOOP
IF x_quick_dchold_batch_tbl (i).org_id = org_id_rec.org_id
THEN
submit_std_inv_imp_pgm
(p_errbuf => x_quick_dchold_batch_tbl
(i).oracle_request_message
,p_retcode => x_quick_dchold_batch_tbl
(i).oracle_request_status
,p_request_id => x_quick_dchold_batch_tbl
(i).oracle_request_id
,p_group_id => x_quick_dchold_batch_tbl
(i).GROUP_ID
,p_source => 'INVOICE GATEWAY'
,p_hold => 'MSI DC HOLD');
x_quick_dchold_batch_tbl (i).oracle_pgm_name :=
'APXIIMPT';
l_rec_cnt :=
l_rec_cnt
+ 1;
g_batch_process_tbl (l_rec_cnt).GROUP_ID :=
x_quick_dchold_batch_tbl
(i).GROUP_ID;
g_batch_process_tbl (l_rec_cnt).oracle_request_id :=
x_quick_dchold_batch_tbl
(i).oracle_request_id;
END IF;
END LOOP;
END IF;

IF x_quick_nohold_batch_tbl.COUNT > 0
THEN
FOR i IN 1 .. x_quick_nohold_batch_tbl.COUNT
LOOP
IF x_quick_nohold_batch_tbl (i).org_id = org_id_rec.org_id
THEN
submit_std_inv_imp_pgm
(p_errbuf => x_quick_nohold_batch_tbl
(i).oracle_request_message
,p_retcode => x_quick_nohold_batch_tbl
(i).oracle_request_status
,p_request_id => x_quick_nohold_batch_tbl
(i).oracle_request_id
,p_group_id => x_quick_nohold_batch_tbl
(i).GROUP_ID
,p_source => 'INVOICE GATEWAY'
,p_hold => NULL);
x_quick_nohold_batch_tbl (i).oracle_pgm_name :=
'APXIIMPT';
l_rec_cnt :=
l_rec_cnt
+ 1;
g_batch_process_tbl (l_rec_cnt).GROUP_ID :=
x_quick_nohold_batch_tbl
(i).GROUP_ID;
g_batch_process_tbl (l_rec_cnt).oracle_request_id :=
x_quick_nohold_batch_tbl
(i).oracle_request_id;
END IF;
END LOOP;
END IF;

FOR j IN 1 .. g_batch_process_tbl.COUNT
LOOP
mike_common_inbound_pkg.wait_for_program
(lc_retcode
,lc_errbuf
,g_batch_process_tbl
(j).oracle_request_id
,g_debug_flag);
g_batch_process_tbl (j).oracle_request_status := lc_retcode;
g_batch_process_tbl (j).oracle_request_message := lc_errbuf;

IF lc_retcode <> 0
THEN
x_retcode := lc_retcode;
END IF;
-- IF lc_retcode <> 0 THEN
-- IF lc_err_retcode = 2 THEN
-- NULL;
-- ELSE
-- lc_err_retcode := lc_retcode;
-- lc_err_errbuf := lc_errbuf;
-- END IF;
-- END IF;
END LOOP;
END LOOP;

--Restoring original Application setting


fnd_global.apps_initialize (v_user_id
,v_resp_id
,v_resp_appl_id);
/* L_call_status :=
Fnd_Concurrent.Wait_for_request (G_bad_req_id
,20
,0
,L_rphase
,L_rstatus
,L_dphase
,L_dstatus
,L_message);
IF (L_call_status = TRUE) THEN
IF L_dphase = 'COMPLETE'
AND L_dstatus IN ('NORMAL', 'WARNING') THEN
IF L_dstatus IN ('WARNING') THEN
Lc_retcode := 1;
Lc_errbuf :=
Fnd_Message.Get
|| 'Bad file creation Program Completed Warning';
LOG (Module, Lc_errbuf);
ELSE
LOG (Module, 'Bad file creation Program Completed Normal');
Lc_retcode := 0;
LOG (Module, 'Submitting Workflow notification for bad file');
L_wf_count := NULL;

SELECT 'MIKESPM_' || Mike_item_key.NEXTVAL


INTO L_wf_count
FROM DUAL;

Mike_Spm_Wf_Pkg.Notify_mail (Fnd_Global.User_id
,L_wf_count
, 'edi_error_flat' || G_bad_req_id
|| '.txt'
,'MIKE_DATA_DIR'
,'Bad Data File');
END IF;
ELSE
Lc_errbuf :=
Fnd_Message.Get
|| 'Bad File Creation Program Not Completed Normal/Warning';
Lc_retcode := 2;
Fnd_File.Put_line (Fnd_File.LOG
, Lc_errbuf || 'For Request ID ' || G_bad_req_id);
LOG (Module, Lc_errbuf);
END IF; -- dphase = 'COMPLETE'
ELSE
Lc_errbuf :=
Fnd_Message.Get
|| 'Can not wait for the status of Bad File Creation program(s).';
Lc_retcode := 2;
Fnd_File.Put_line (Fnd_File.LOG
, Lc_errbuf || 'For Concurrent Request ID '
|| G_bad_req_id);
LOG (Module, Lc_errbuf);
END IF; */ -- l_call_status =
TRUE

/* LOG (Module, 'Updating wfapproval_status of AP_INVOICES_ALL Table');

FOR Track_id IN C_tracking_id


LOOP
UPDATE Ap_invoices_all
SET Wfapproval_status = 'REQUIRED'
WHERE Invoice_id IN (
SELECT Invoice_id
FROM Ap_invoices_interface
WHERE External_doc_ref =

Track_id.External_doc_ref);
END LOOP;

COMMIT;*//* mike_common_inbound_pkg.write_custom_stats(lc_retcode,
lc_errbuf,
g_batch_process_tbl,
g_debug_flag);
IF lc_retcode <> 0 THEN
IF lc_err_retcode = 2 THEN
NULL;
ELSE
lc_err_retcode := lc_retcode;
lc_err_errbuf := lc_errbuf;
END IF;
END IF; */
/*mike_common_inbound_pkg.write_oracle_stats( lc_retcode,
lc_errbuf,
g_batch_process_tbl,
g_debug_flag);
IF lc_retcode <> 0 THEN
IF lc_err_retcode = 2 THEN
NULL;
ELSE
lc_err_retcode := lc_retcode;
lc_err_errbuf := lc_errbuf;
END IF;
END IF;

IF lc_err_retcode <> 0 THEN


x_errbuf := lc_err_errbuf;
x_retcode := lc_err_retcode;
END IF; */
LOG (module, 'Inserting Exception Summary Table......');

FOR i IN 1 .. exception_summary_tbl.COUNT
LOOP
OPEN c_record_count ('P', exception_summary_tbl
(i).interface_tracking_id);

FETCH c_record_count
INTO l_process_record_count;

CLOSE c_record_count;

/* OPEN c_record_count( 'D', exception_summary_tbl(i).interface_tracking_id );


FETCH c_record_count INTO l_del_record_count;
CLOSE c_record_count; */

/* OPEN c_record_count('E',
exception_summary_tbl(i).interface_tracking_id);
FETCH c_record_count INTO l_del_record_count;
CLOSE c_record_count;

OPEN c_record_count('H', exception_summary_tbl(i).interface_tracking_id);


FETCH c_record_count INTO l_hold_record_count;
CLOSE c_record_count;*/
OPEN c_record_value ('P', exception_summary_tbl
(i).interface_tracking_id);

FETCH c_record_value
INTO l_valid_record_value;

CLOSE c_record_value;

OPEN c_record_value ('E', exception_summary_tbl


(i).interface_tracking_id);

FETCH c_record_value
INTO l_errored_record_value;

CLOSE c_record_value;

exception_summary_tbl (i).deleted_records := l_del_record_count;


exception_summary_tbl (i).valid_records :=
l_process_record_count;
exception_summary_tbl (i).errored_records :=
exception_summary_tbl (i).total_staging_records
- l_process_record_count;
exception_summary_tbl (i).valid_record_value := l_valid_record_value;
exception_summary_tbl (i).errored_record_value :=
exception_summary_tbl (i).total_record_value
- NVL (l_valid_record_value, 0);
--l_errored_record_value;
END LOOP;

LOG (module, 'Inserted Exception Summary Table......');

FOR i IN 1 .. exception_summary_tbl.COUNT
LOOP
mike_exception_handling_pkg.insert_exceptions_summary
(lc_errbuf
,lc_retcode
,exception_summary_tbl
(i).interface_tracking_id
,exception_summary_tbl
(i).interface_source
--Changed on 05-jan-06 to populate different program name for each tracking id on
the basis of source 'Msi_Ap_Edi_NM_Inv_Pkg'
, exception_summary_tbl
(i).total_staging_records
,NVL (exception_summary_tbl
(i).valid_records, 0)
,NVL (exception_summary_tbl
(i).errored_records
,0)
,exception_summary_tbl (i).deleted_records
,exception_summary_tbl
(i).valid_record_value
,exception_summary_tbl
(i).errored_record_value);
END LOOP;

--Deleting Records from Mike Interface tables(Copy of Standard Interface)


which have been processed.
LOG (module, 'Deleting Processed Records......');

DELETE FROM mike_invoices_interface hd


WHERE process_flag = 'P'
AND EXISTS (SELECT 1
FROM mike_invoice_lines_interface mil
WHERE mil.invoice_id = hd.invoice_id
AND mil.process_flag = 'P');

DELETE FROM mike_invoice_lines_interface


WHERE process_flag = 'P';

LOG (module, 'Deleted Processed Records......');

FOR i IN 1 .. exception_summary_tbl.COUNT
LOOP
mike_exception_handling_pkg.print_exceptions_summary
(exception_summary_tbl
(i).interface_tracking_id);
END LOOP;

COMMIT;
EXCEPTION
WHEN OTHERS
THEN
x_retcode := 2;
fnd_file.put_line (fnd_file.LOG
, 'process_invoices PROCEDURE EXCEPTION'
|| SQLERRM);
END process_invoices;

-----------------------------------------------------------------------------------
---------------------------------------------------
--Procedure submit_std_inv_imp_pgm
--Procedure to submit Standard Payables Invoice Import Program
-----------------------------------------------------------------------------------
---------------------------------------------------
PROCEDURE submit_std_inv_imp_pgm (
p_errbuf OUT VARCHAR2
,p_retcode OUT NUMBER
,p_request_id OUT NUMBER
,p_group_id IN VARCHAR2
,p_source IN VARCHAR2
,p_hold IN VARCHAR2)
IS
p_batch_name VARCHAR2 (20);
BEGIN
--Getting value for Batch Name parameter for standard import
SELECT msi_nm_batch_s.NEXTVAL
INTO p_batch_name
FROM DUAL;

p_request_id :=
fnd_request.submit_request
(application => 'SQLAP'
, --
Application Name
program => 'APXIIMPT'
, --
Program
description => g_request_id
, --'Invoice
Import ' ,
start_time => NULL
, --
START_TIME
sub_request => FALSE
, --
SUB_REQUEST
argument1 => p_source
, -- 1. Invoice
Source
argument2 => p_group_id
, -- 2.
Group_id
argument3 => p_group_id
,
-- 3. Invoice Batch Name --p_batch_name -> changed on 04/01/06 to pass group id as
batch name.
argument4 => p_hold
, -- 4.
Hold Name
argument5 => NULL
, -- 5. Hold
Reason
argument6 => NULL
, -- 6.
GL DATE
argument7 => g_purge_data
, --'N' , --
7. Purge
argument8 => 'N'
, -- 8. Trace
Switch
argument9 => 'N'
, -- 9. Debug
Switch
argument10 => 'N'
, -- 10.Summarize
Report
argument11 => 1000
, -- 11.Commit
Batch Size
argument12 => fnd_global.user_id
, --
12.User_id
argument13 => fnd_global.login_id
--
13.Login_id
);
fnd_file.put_line
(fnd_file.LOG
, ' Concurrent Program Invoice Import was Subumitted with
Request ID : '
|| p_request_id);
COMMIT;

IF p_request_id = 0
THEN
p_retcode := 2;
fnd_file.put_line (fnd_file.LOG
,' Error occured while Submitting Request : Invoice
Import');
p_errbuf :=
' An error occured while submitting : Invoice import for Group ID :
'
|| p_group_id;
ELSE
p_errbuf := 'Ivoice Import Program succesfully Submitted';
p_retcode := 0;
END IF;
EXCEPTION
WHEN OTHERS
THEN
fnd_file.put_line
(fnd_file.LOG
, 'There was an error while calling Invoice Import program for Group
ID : '
|| p_group_id);
fnd_file.put_line (fnd_file.LOG, 'Error Message : '
|| SQLERRM);
END submit_std_inv_imp_pgm;

-----------------------------------------------------------------------------------
-----------------
PROCEDURE submit_gather_schema_stats (
errbuf OUT VARCHAR2
,retcode OUT NUMBER)
IS
l_interface_run_id NUMBER;
l_gss_req_id NUMBER;
v_phase VARCHAR2 (100);
v_status VARCHAR2 (100);
v_dev_phase VARCHAR2 (100);
v_dev_status VARCHAR2 (100);
v_message VARCHAR2 (2000);
submit_gss_failed EXCEPTION;
module CONSTANT VARCHAR2 (100)
:=
'Msi_Ap_Edi_NM_Inv_Pkg.submit_gather_schema_stas';
BEGIN
-- Submit request
l_gss_req_id :=
fnd_request.submit_request ('FND'
,'FNDGSCST'
,NULL
,TO_CHAR (SYSDATE)
,FALSE
,'AP'
,10
,NULL
,'NOBACKUP'
,NULL
,'NONE'
,'GATHER'
,NULL
,'Y'
,CHR (0) );
COMMIT;

IF l_gss_req_id = 0
THEN
RAISE submit_gss_failed;
END IF;

LOG (module, 'Submitted Gather Schema Statistics Request ID : '


|| l_gss_req_id);
fnd_file.put_line (fnd_file.LOG
, 'Submitted Gather Schema Statistics Request ID : '
|| l_gss_req_id);

-- Wait for Gather Schema Statistics to complete


IF fnd_concurrent.wait_for_request (l_gss_req_id
,10
,0
,v_phase
,v_status
,v_dev_phase
,v_dev_status
,v_message)
THEN
LOG (module
, 'Request id : '
|| l_gss_req_id
|| ' Phase '
|| v_dev_phase
|| ' Status '
|| v_dev_status);
fnd_file.put_line (fnd_file.LOG
, 'Request id : '
|| l_gss_req_id
|| ' Phase '
|| v_dev_phase
|| ' Status '
|| v_dev_status);
LOG (module, 'Message : '
|| v_message);
fnd_file.put_line (fnd_file.LOG, 'Message : '
|| v_message);

IF v_dev_phase = 'COMPLETE'
AND v_dev_status = 'NORMAL'
THEN
fnd_file.put_line
(fnd_file.LOG
,'Gather Schema Stastistics Program Completed
Secessfully ...');
errbuf :=
'Gather Schema Stastistics Program Completed Secessfully '
|| l_gss_req_id;
retcode := 0;
ELSIF v_dev_phase = 'COMPLETE'
AND v_dev_status = 'WARNING'
THEN
fnd_file.put_line (fnd_file.LOG
,'Gather Schema Stastistics Program ended with
warning ...');
errbuf :=
'Gather Schema Stastistics Program ended with warning '
|| l_gss_req_id;
retcode := 1;
ELSE
fnd_file.put_line (fnd_file.LOG
,'Gather Schema Stastistics Program Failed ...');
errbuf := 'Gather Schema Stastistics Program Failed '
|| l_gss_req_id;
retcode := 2;
END IF;
END IF;
EXCEPTION
WHEN submit_gss_failed
THEN
fnd_file.put_line
(fnd_file.LOG
,'****ERROR**** Gather Schema Stastistics Program Submission
Failed');
fnd_file.put_line (fnd_file.LOG, '****ERROR**** '
|| SQLERRM);
errbuf := 'Gather Schema Stastistics Program Submission Failed';
retcode := 2;
WHEN OTHERS
THEN
fnd_file.put_line (fnd_file.LOG, '****ERROR****'
|| SQLERRM);
errbuf := 'Error : '
|| SQLERRM;
retcode := 2;
END submit_gather_schema_stats;

-- Start PMO# 171009: PRB0008324 Resolution


PROCEDURE process_null_po ( errbuf OUT VARCHAR2
,retcode OUT NUMBER)
IS
f utl_file.file_type;
defective_invoices NUMBER;
submit_mglmailnotif_failed EXCEPTION;
v_request_id VARCHAR2(1000);
l_user_id NUMBER;
l_resp_id NUMBER;
l_appl_id NUMBER;
l_email_to varchar2(100);
l_email_cc varchar2(100);
l_subject varchar2(100);
l_email_body varchar2(1000);
l_email_body2 varchar2(1000);
l_filename3 varchar2(100);
l_filename2 varchar2(100);
l_filename1 varchar2(100);
l_file_extension varchar2(20);
l_application varchar2(100) := 'MIKEAP';
l_program_name varchar2(100) := 'MIKEAPMAILNOTIF';
l_description varchar2(100) := 'MIKE AP GENERIC EMAIL
NOTIFICATION';
l_start_time varchar2(20) := to_char(sysdate);
module varchar2(100) := 'process_null_po';

BEGIN

BEGIN
SELECT count(*)
INTO defective_invoices
FROM MIKE_EDI_NM_TEST_EXT
WHERE po is null;
EXCEPTION
WHEN OTHERS
THEN
fnd_file.put_line (fnd_file.LOG, '****process_null_po, ERROR in getting
the total invoice with nul PO****'
|| SQLERRM);
errbuf := 'process_null_po, Error: '
|| SQLERRM;
retcode := 2;
END;

BEGIN
SELECT description
INTO l_email_to
FROM fnd_lookup_values
WHERE lookup_type = 'MIKE_AP_EMAIL_NOTIFICATION_CON'
AND enabled_flag = 'Y'
AND lookup_code = 'EMAIL_TO'
AND NVL(end_date_active,SYSDATE+1) >= SYSDATE;
EXCEPTION
WHEN OTHERS
THEN
fnd_file.put_line (fnd_file.LOG, '****process_null_po, ERROR in Getting
Setup for Email Recepient****'
|| SQLERRM);
errbuf := 'process_null_po, ERROR in Getting Setup for Email
Recepient: '
|| SQLERRM;
retcode := 2;
END;

BEGIN
SELECT description
INTO l_email_cc
FROM fnd_lookup_values
WHERE lookup_type = 'MIKE_AP_EMAIL_NOTIFICATION_CON'
AND enabled_flag = 'Y'
AND lookup_code = 'EMAIL_CC'
AND NVL(end_date_active,SYSDATE+1) >= SYSDATE;
EXCEPTION
WHEN OTHERS
THEN
fnd_file.put_line (fnd_file.LOG, '****process_null_po, ERROR in Getting
Setup for Email Carbon Copy****'
|| SQLERRM);
errbuf := 'process_null_po, ERROR in Getting Setup for Email
Carbon Copy: '
|| SQLERRM;
retcode := 2;
END;

BEGIN
SELECT description
INTO l_subject
FROM fnd_lookup_values
WHERE lookup_type = 'MIKE_AP_EMAIL_NOTIFICATION_CON'
AND enabled_flag = 'Y'
AND lookup_code = 'EMAIL_SUBJECT'
AND NVL(end_date_active,SYSDATE+1) >= SYSDATE;
EXCEPTION
WHEN OTHERS
THEN
fnd_file.put_line (fnd_file.LOG, '****process_null_po, ERROR in Getting
Setup for Email Subject****'
|| SQLERRM);
errbuf := 'process_null_po, ERROR in Getting Setup for Email
Subject: '
|| SQLERRM;
retcode := 2;
END;

BEGIN
SELECT description
INTO l_filename1
FROM fnd_lookup_values
WHERE lookup_type = 'MIKE_AP_EMAIL_NOTIFICATION_CON'
AND enabled_flag = 'Y'
AND lookup_code = 'FILENAME1'
AND NVL(end_date_active,SYSDATE+1) >= SYSDATE;
EXCEPTION
WHEN OTHERS
THEN
fnd_file.put_line (fnd_file.LOG, '****process_null_po, ERROR in Getting
Setup for filename****'
|| SQLERRM);
errbuf := 'process_null_po, ERROR in Getting Setup for filename:
'
|| SQLERRM;
retcode := 2;
END;

BEGIN
SELECT description
INTO l_file_extension
FROM fnd_lookup_values
WHERE lookup_type = 'MIKE_AP_EMAIL_NOTIFICATION_CON'
AND enabled_flag = 'Y'
AND lookup_code = 'FILE_EXTENSION'
AND NVL(end_date_active,SYSDATE+1) >= SYSDATE;
EXCEPTION
WHEN OTHERS
THEN
fnd_file.put_line (fnd_file.LOG, '****process_null_po, ERROR in Getting
Setup for File Extension****'
|| SQLERRM);
errbuf := 'process_null_po, ERROR in Getting Setup for File
Extension: '
|| SQLERRM;
retcode := 2;
END;

BEGIN
SELECT description
INTO l_email_body
FROM fnd_lookup_values
WHERE lookup_type = 'MIKE_AP_EMAIL_NOTIFICATION_CON'
AND enabled_flag = 'Y'
AND lookup_code = 'EMAIL_BODY'
AND NVL(end_date_active,SYSDATE+1) >= SYSDATE;
EXCEPTION
WHEN OTHERS
THEN
fnd_file.put_line (fnd_file.LOG, '****process_null_po, ERROR in Getting
Setup for Email Body****'
|| SQLERRM);
errbuf := 'process_null_po, ERROR in Getting Setup for Email
Body: '
|| SQLERRM;
retcode := 2;
END;

BEGIN
SELECT description
INTO l_email_body2
FROM fnd_lookup_values
WHERE lookup_type = 'MIKE_AP_EMAIL_NOTIFICATION_CON'
AND enabled_flag = 'Y'
AND lookup_code = 'EMAIL_BODY2'
AND NVL(end_date_active,SYSDATE+1) >= SYSDATE;
EXCEPTION
WHEN OTHERS
THEN
fnd_file.put_line (fnd_file.LOG, '****process_null_po, ERROR in Getting
Setup for Email Body 2****'
|| SQLERRM);
errbuf := 'process_null_po, ERROR in Getting Setup for Email Body
2: '
|| SQLERRM;
retcode := 2;
END;

if defective_invoices > 0
then
l_email_body := l_email_body||' '||defective_invoices||' '||
l_email_body2;
l_subject := l_subject||'/'||to_char(sysdate, 'mmddyyyy');
l_filename1 := l_filename1||to_char(sysdate, 'mmddyyyy')||
l_file_extension;
retcode := 0;
f := utl_file.fopen('MIKE_OUT_DATA_DIR',l_filename1,'W');
utl_file.put_line(f,' ');
utl_file.put_line(f,'Vendor Code'||chr(9)||'Vendor Name '||
chr(9)||chr(9)||'Invoice Number ');

utl_file.put_line(f,'--------------------------------------------------------------
-----------------------------------------------------------------');

for rec in ( SELECT rpad(edi.vendor,11) vendor,


rpad(edi.invoice,20) invoice_num,
rpad(substr(ven.vendor_name, 1,20),20)vendor_name
FROM MIKE_EDI_NM_TEST_EXT edi,
po_vendors ven
WHERE edi.po is null
AND edi.vendor = ven.segment1
)
loop
utl_file.put_line(f,rec.vendor||chr(9)||rec.vendor_name||chr(9)||
chr(9)||rec.invoice_num);
end loop;
utl_file.fclose(f);

retcode := 0;

if retcode = 0
then

SELECT user_id INTO l_user_id FROM fnd_user WHERE user_name =


'FNSCHED';
SELECT responsibility_id INTO l_resp_id FROM
fnd_responsibility_tl WHERE responsibility_name = 'MSI AP Nightly Batch Processing
- USA';
SELECT application_id INTO l_appl_id FROM fnd_responsibility_tl
WHERE responsibility_name = 'MSI AP Nightly Batch Processing - USA';

--fnd_profile.get ('USER_ID', l_user_id);


--fnd_global.apps_initialize (l_user_id,l_resp_id, l_appl_id);

v_request_id := Fnd_Request.Submit_Request
( application => l_application,
program => l_program_name,
description => l_description,
start_time => null,
sub_request => FALSE,
argument1 => l_email_to,
argument2 => l_email_cc,
argument3 => l_subject,
argument4 => l_email_body,
argument5 => l_filename1,
argument6 => l_filename2,
argument7 => l_filename3
);
commit;

if v_request_id = 0
THEN
fnd_file.put_line (fnd_file.LOG, '****ERROR in Sending
Notification for Invoice with null PO****'
|| SQLERRM);
errbuf := 'Error in Sending Notification for
Invoice with null PO: '
|| SQLERRM;
retcode := 2;
END IF;

fnd_file.put_line (fnd_file.LOG
, 'Submitted Mike AP Generic Email
Notification Request ID : '
|| v_request_id);
end if;

else
fnd_file.put_line (fnd_file.LOG, 'EDI File has no invoice with
null PO');
end if;

EXCEPTION
WHEN OTHERS
THEN
fnd_file.put_line (fnd_file.LOG, '****ERROR****'
|| SQLERRM);
errbuf := 'Error in process_null_po: '
|| SQLERRM;
retcode := 2;
END process_null_po;
-- End PMO# 171009: PRB0008324 Resolution
END Msi_Ap_Edi_NM_Inv_Pkg;

Potrebbero piacerti anche