Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 48

CREATE OR REPLACE PACKAGE BODY APPS.

XXTLN_I2_REQU_IMPORT_PKG
/* $LastChangedRevision: 25581 $ $LastChangedDate: 2018-09-06 09:14:58 +0000 (Thu,
06 Sep 2018) $ $LastChangedBy: T899276 $ */
/
*==================================================================================
=+
|VOYSOL-5- CHG0032736- SOLAR PROJECT
|
===================================================================================
=|
|
|
|FILENAME
|
| XXTLN_REQUISITION_IMPORT_PKG.sql
|
|
|DESCRIPTION
|
| Package for SOLAR REQISITION INBOUND INTERFACE
|
|
|
|
|
|
|Modification History
|
|
|
| Ver Date Author Modification
|
| 1.0 30-MAR-2018 Amit Sharma Initial Version /
/ 1.1 23-Oct-2018 Amit Sharma Added distribution Attribute13 = SOLAR
|
===================================================================================
==*/
AS
lv_err_msg CLOB := NULL;
lv_err_flag VARCHAR2 (1);
lv_order_source VARCHAR2 (15);
lv_source_order VARCHAR2 (30);
lv_org_id NUMBER;
l_interface_id xxtln.xxtln_i2_interface_logs.interface_id%TYPE;

---- private procedure Inser into log table


PROCEDURE insert_i2_interface_logs (
p_interface_id IN xxtln.xxtln_i2_interface_logs.interface_id%TYPE,
p_creation_date IN xxtln.xxtln_i2_interface_logs.creation_date%TYPE,
p_app_module IN xxtln.xxtln_i2_interface_logs.app_module%TYPE,
p_request_id IN xxtln.xxtln_i2_interface_logs.request_id%TYPE,
p_data_object1 IN xxtln.xxtln_i2_interface_logs.data_object1%TYPE,
p_data_object2 IN xxtln.xxtln_i2_interface_logs.data_object2%TYPE,
p_i2_id IN xxtln.xxtln_i2_interface_logs.i2_id%TYPE,
p_status IN xxtln.xxtln_i2_interface_logs.status%TYPE,
p_comments IN xxtln.xxtln_i2_interface_logs.comments%TYPE,
p_i2_ack IN xxtln.xxtln_i2_interface_logs.i2_ack%TYPE,
p_le_code IN xxtln.xxtln_i2_interface_logs.le_code%TYPE,
p_last_update_date IN xxtln.xxtln_i2_interface_logs.last_update_date%TYPE)
IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
INSERT INTO xxtln.xxtln_i2_interface_logs (interface_id,
creation_date,
app_module,
request_id,
data_object1,
data_object2,
i2_id,
status,
comments,
i2_ack,
le_code,
last_update_date)
VALUES (p_interface_id,
p_creation_date,
p_app_module,
p_request_id,
p_data_object1,
p_data_object2,
p_i2_id,
p_status,
p_comments,
p_i2_ack,
p_le_code,
p_last_update_date);

COMMIT;
END insert_i2_interface_logs;

--- TO UPDATE LOG TABLE


PROCEDURE update_i2_interface_logs (
p_interface_id IN xxtln.xxtln_i2_interface_logs.interface_id%TYPE,
p_status IN xxtln.xxtln_i2_interface_logs.status%TYPE,
p_comments IN xxtln.xxtln_i2_interface_logs.comments%TYPE,
p_request_id IN xxtln.xxtln_i2_interface_logs.request_id%TYPE)
IS
PRAGMA AUTONOMOUS_TRANSACTION;
l_i2_id xxtln.xxtln_i2_interface_logs.i2_id%TYPE;
BEGIN
UPDATE xxtln.xxtln_i2_interface_logs
SET status = p_status,
comments = TRIM (SUBSTR (comments || ' ' || p_comments, 1, 999)),
LAST_UPDATE_DATE = SYSDATE,
request_id = p_request_id,
interface_id = p_interface_id
WHERE interface_id = p_interface_id;

COMMIT; -- this commit is required so that errors are saved in case of issues
END update_i2_interface_logs;
PROCEDURE AUTHENTICATE_ACCESS (
p_le IN xxtln.xxtln_i2_interface_logs.le_code%TYPE,
p_module IN xxtln.xxtln_i2_interface_logs.app_module%TYPE,
p_username IN fnd_user.user_name%TYPE DEFAULT 'I2')
IS
l_user fnd_user.user_id%TYPE;
l_resp_id fnd_responsibility.responsibility_id%TYPE;
l_resp_app_id fnd_responsibility.application_id%TYPE;
BEGIN
SELECT user_id
INTO l_user
FROM fnd_user
WHERE user_name = p_username;

--- for PA to get the responsibility id and application id


IF p_module = 'PO_REQ'
THEN
SELECT RESPONSIBILITY_ID, APPLICATION_ID
INTO l_resp_id, l_resp_app_id
FROM fnd_responsibility_vl
WHERE responsibility_name LIKE P_LE || ' - PO SUPER USER'
AND end_date IS NULL;
END IF;

--- apps initilization


fnd_global.APPS_INITIALIZE (user_id => l_user,
resp_id => l_resp_id,
resp_appl_id => l_resp_app_id);
END AUTHENTICATE_ACCESS;

PROCEDURE XXTLN_REQU_INSERT (p_req_intr_tbl IN REQ_INTR_TBL, X_RETURN_STATUS OUT


VARCHAR2)
IS
PRAGMA AUTONOMOUS_TRANSACTION;

/*********************Local
Variables************************************************/

V_REQ_HEADER_ID NUMBER;
V_REQ_HEADER_ID_1 NUMBER;
V_REQ_HEADER_ID_2 NUMBER;

v_count_supsource NUMBER;
v_count_invsource NUMBER;

lv_parameter_list wf_parameter_list_t;

T_REQ_INTR PO_REQUISITIONS_INTERFACE_ALL%ROWTYPE;
/*************************** Main Block
*************************************************/

BEGIN
/******** INITIALIZE LOCAL VARIABLE *********/

V_REQ_HEADER_ID_1 := NULL;
V_REQ_HEADER_ID_2 := NULL;

v_count_invsource := 0;
v_count_supsource := 0;

lv_err_msg := NULL;

FOR i IN 1 .. p_req_intr_tbl.COUNT
LOOP
-------------------------
--INITIALIZE ERROR FLAG--
-------------------------

lv_err_flag := 'N';

-----------------------
--INITIALIZE VARIABLE--
-----------------------
lv_order_source := p_req_intr_tbl (1).interface_source_code;
lv_source_order := p_req_intr_tbl (1).HEADER_ATTRIBUTE1;

DBMS_OUTPUT.PUT_LINE (
p_req_intr_tbl (i).PROJECT_NUM
|| p_req_intr_tbl (i).item_description
|| ' '
|| lv_order_source);

/*************************** Call Validation Procedure


*************************************************/

-- review needed start 07082019(Irfan)


T_REQ_INTR :=
XXTLN_I2_REQU_IMPORT_PKG.XXTLN_REQ_VALIDATION (
p_req_intr_tbl (i));

-- review needed end

/*************************** Extract Operating Unit Id


************************************************/

/*************************** Extract Requisition Header ID


********************************************/
IF lv_err_flag = 'N'
THEN
IF p_req_intr_tbl (1).source_type_code =
p_req_intr_tbl (i).source_type_code
THEN
IF v_count_invsource = 0
THEN
BEGIN
SELECT apps.po_requisition_headers_s.NEXTVAL
INTO V_REQ_HEADER_ID_1
FROM DUAL;

v_count_invsource := 1;
EXCEPTION
WHEN OTHERS
THEN
lv_err_flag := 'Y';
lv_err_msg :=
lv_err_msg
|| 'Error While Generating Sequence Number.'
|| '<br>'
|| CHR (10);
x_return_status :='RJECTED';

update_i2_interface_logs (l_interface_id,
x_return_status,
lv_err_msg,
NULL);

END;
END IF;

V_REQ_HEADER_ID := V_REQ_HEADER_ID_1;
ELSE
IF v_count_supsource = 0
THEN
BEGIN
SELECT apps.po_requisition_headers_s.NEXTVAL
INTO V_REQ_HEADER_ID_2
FROM DUAL;

v_count_supsource := 1;
EXCEPTION
WHEN OTHERS
THEN
lv_err_flag := 'Y';
lv_err_msg :=
lv_err_msg
|| 'Error While Generating Sequence Number.'
|| '<br>'
|| CHR (10);
END;
END IF;

V_REQ_HEADER_ID := V_REQ_HEADER_ID_2;
END IF;
END IF;

/*************************** Insert Statement


*********************************************************/
IF lv_err_flag = 'N'
THEN
INSERT
INTO PO_REQUISITIONS_INTERFACE_ALL (
interface_source_code,
source_type_code,
requisition_type,
destination_type_code,
requisition_header_id,
requisition_line_id,
category_id,
item_id,
item_description,
SUGGESTED_VENDOR_ITEM_NUM,
HEADER_DESCRIPTION,
quantity,
authorization_status,
preparer_id,
deliver_to_location_id,
DESTINATION_ORGANIZATION_ID,
SOURCE_ORGANIZATION_ID,
SOURCE_SUBINVENTORY,
DELIVER_TO_REQUESTOR_ID,
BATCH_ID,
autosource_flag,
uom_code,
need_by_date --,charge_account_id
,
org_id,
suggested_vendor_id,
suggested_vendor_site_id,
SUGGESTED_BUYER_NAME,
unit_price,
CURRENCY_CODE,
DOCUMENT_TYPE_CODE,
AUTOSOURCE_DOC_HEADER_ID,
AUTOSOURCE_DOC_LINE_NUM,
RATE_TYPE,
RATE_DATE,
RATE,
CURRENCY_UNIT_PRICE,
creation_date,
created_by,
last_update_date,
last_updated_by /*,approver_id
,CHARGE_ACCOUNT_SEGMENT1
,CHARGE_ACCOUNT_SEGMENT11
,CHARGE_ACCOUNT_SEGMENT10
,CHARGE_ACCOUNT_SEGMENT12
,CHARGE_ACCOUNT_SEGMENT13
,CHARGE_ACCOUNT_SEGMENT14
,CHARGE_ACCOUNT_SEGMENT18
,CHARGE_ACCOUNT_SEGMENT21
,CHARGE_ACCOUNT_SEGMENT19*/
,
PROJECT_ACCOUNTING_CONTEXT,
PROJECT_ID,
PROJECT_NUM,
TASK_ID,
TASK_NUM,
EXPENDITURE_ORGANIZATION_ID,
EXPENDITURE_TYPE,
EXPENDITURE_ITEM_DATE,
note1_id,
approver_id,
NOTE_TO_RECEIVER,
DISTRIBUTION_ATTRIBUTE13, -- NEW CHANGE AFTER GO-
LIVE
DISTRIBUTION_ATTRIBUTE14,
DISTRIBUTION_ATTRIBUTE15,
LINE_ATTRIBUTE5,
LINE_ATTRIBUTE6,
LINE_ATTRIBUTE7,
LINE_ATTRIBUTE8,
LINE_ATTRIBUTE9,
LINE_ATTRIBUTE10)
VALUES (
p_req_intr_tbl (i).interface_source_code,
p_req_intr_tbl (i).source_type_code,
p_req_intr_tbl (i).requisition_type,
p_req_intr_tbl (i).destination_type_code,
V_REQ_HEADER_ID,
PO_REQUISITION_LINES_S.NEXTVAL,
T_REQ_INTR.category_id,
T_REQ_INTR.item_id,
p_req_intr_tbl (i).item_description,
p_req_intr_tbl (i).SUGGESTED_VENDOR_ITEM_NUM,
NVL (T_REQ_INTR.HEADER_DESCRIPTION,
p_req_intr_tbl (1).item_description),
p_req_intr_tbl (i).quantity,
'INCOMPLETE', --------'INCOMPLETE' or 'APPROVED'
T_REQ_INTR.preparer_id,
T_REQ_INTR.deliver_to_location_id,
--,V_REQ_TBL(i).DELIVER_TO_REQUESTOR_ID
T_REQ_INTR.DESTINATION_ORGANIZATION_ID,
T_REQ_INTR.SOURCE_ORGANIZATION_ID,
T_REQ_INTR.SOURCE_SUBINVENTORY,
T_REQ_INTR.DELIVER_TO_REQUESTOR_ID,
V_REQ_HEADER_ID,
p_req_intr_tbl (i).autosource_flag,
T_REQ_INTR.uom_code
--,V_REQ_TBL(i).destination_organization_id
,
p_req_intr_tbl (i).need_by_date --,1800101
,
T_REQ_INTR.org_id,
T_REQ_INTR.suggested_vendor_id,
T_REQ_INTR.suggested_vendor_site_id,
T_REQ_INTR.SUGGESTED_BUYER_NAME,
T_REQ_INTR.unit_price,
T_REQ_INTR.CURRENCY_CODE,
T_REQ_INTR.DOCUMENT_TYPE_CODE,
T_REQ_INTR.AUTOSOURCE_DOC_HEADER_ID,
T_REQ_INTR.AUTOSOURCE_DOC_LINE_NUM,
T_REQ_INTR.RATE_TYPE,
T_REQ_INTR.RATE_DATE,
T_REQ_INTR.RATE,
T_REQ_INTR.CURRENCY_UNIT_PRICE,
SYSDATE,
-1,
SYSDATE,
-1,
/*,V_REQ_TBL(i).approver_id
,'SY'
,'14020'
,'0000'
,'00000'
,'000000'
,'00'
,'000'
,'000000'
,'00000000'*/
T_REQ_INTR.PROJECT_ACCOUNTING_CONTEXT,
T_REQ_INTR.PROJECT_ID,
p_req_intr_tbl (i).PROJECT_NUM,
T_REQ_INTR.TASK_ID,
p_req_intr_tbl (i).TASK_NUM,
T_REQ_INTR.EXPENDITURE_ORGANIZATION_ID,
T_REQ_INTR.EXPENDITURE_TYPE,
T_REQ_INTR.EXPENDITURE_ITEM_DATE,
T_REQ_INTR.note1_id,
T_REQ_INTR.approver_id,
p_req_intr_tbl (i).NOTE_TO_RECEIVER,
p_req_intr_tbl (i).interface_source_code,
p_req_intr_tbl (i).HEADER_ATTRIBUTE1,
p_req_intr_tbl (i).LINE_ATTRIBUTE4,
T_REQ_INTR.LINE_ATTRIBUTE5,
T_REQ_INTR.LINE_ATTRIBUTE6,
T_REQ_INTR.LINE_ATTRIBUTE7,
T_REQ_INTR.LINE_ATTRIBUTE8,
T_REQ_INTR.LINE_ATTRIBUTE9,
T_REQ_INTR.LINE_ATTRIBUTE10);

--COMMIT;

--INSERT INTO TESTSOLAR


--VALUES ('1', 'Insert Stat ' || V_REQ_HEADER_ID);

COMMIT;
END IF;
END LOOP;

/* END LOOP;
CLOSE TEST_REQUISITION;*/

IF lv_err_msg IS NOT NULL


THEN
BEGIN
lv_err_flag := 'Y';
lv_err_msg :=
' VALIDATION ERROR DETAILS'
|| '<br>'
|| CHR (10)
|| '------------------------------'
|| '<br>'
|| CHR (10)
|| lv_err_msg
|| '<br>'
|| CHR (10);

UPDATE PO_REQUISITIONS_INTERFACE_ALL
SET PROCESS_FLAG = 'ERROR'
WHERE PROCESS_FLAG IS NULL
AND interface_source_code = lv_order_source
AND requisition_header_id IN
(V_REQ_HEADER_ID_1, V_REQ_HEADER_ID_2);

COMMIT;

lv_parameter_list :=
wf_parameter_list_t (
wf_parameter_t ('INT NAME', 'REQUISITION IMPORT'),
wf_parameter_t ('SOURCE NAME', lv_order_source),
wf_parameter_t ('SEND DATE',
fnd_date.date_to_canonical (SYSDATE)),
wf_parameter_t ('STATUS CODE', 'ERROR'),
wf_parameter_t ('SOLAR ORDER NUMBER', lv_source_order));
wf_event.raise (
p_event_name => 'xxtln.oracle.apps.generic.error.inbound',
p_event_key => SYS_GUID (),
p_event_data => lv_err_msg,
p_parameters => lv_parameter_list);
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
lv_err_flag := 'E';
lv_err_msg :=
lv_err_msg
|| 'The following error occured in raising Business event for
Error details'
|| SQLERRM
|| '<br>'
|| CHR (10);
END;
END IF;
EXCEPTION
WHEN OTHERS
THEN
lv_err_flag := 'E';
lv_err_msg :=
lv_err_msg
|| 'Error - while calling the insert procedure'
|| ' '
|| SQLERRM
|| '<br>'
|| CHR (10);
--errbuf := 'Error message'|| SQLERRM;
-- retcode:= 'Error Code' || SQLCODE;
END XXTLN_REQU_INSERT;

/***************************END OF INSERT
PROCEDURE**********************************************************/

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

/***************************START OF UPDATE
PROCEDURE********************************************************/
PROCEDURE XXTLN_REQU_UPDATE (p_req_intr_tbl IN REQ_INTR_TBL)
IS
PRAGMA AUTONOMOUS_TRANSACTION;

--v_org_id NUMBER;
v_count_epo NUMBER;
v_emergency_po_num VARCHAR2 (30);
v_table_name VARCHAR2 (50);

v_source_name VARCHAR2 (15);


v_order_number VARCHAR2 (15);

lv_parameter_list wf_parameter_list_t;
--XXTLN_UPDATE_EXCEPTION EXCEPTION;

BEGIN
IF lv_err_msg IS NULL
THEN
FOR i IN 1 .. p_req_intr_tbl.COUNT
LOOP
/*******************************Assigning Order Number and Source to
local Variable*********************/

v_source_name := p_req_intr_tbl (i).interface_source_code;


v_order_number := p_req_intr_tbl (i).HEADER_ATTRIBUTE1;

/**************************************OBTAINING ORGANIZATION
ID****************************************/
IF p_req_intr_tbl (i).OPERATING_UNIT IS NOT NULL
THEN
BEGIN
SELECT DISTINCT organization_id
INTO lv_org_id
FROM apps.hr_operating_units
WHERE NAME = p_req_intr_tbl (i).OPERATING_UNIT;

--INSERT INTO TESTSOLAR


-- VALUES ('1', 'Org_id ' || lv_org_id);
--COMMIT;

EXCEPTION
WHEN NO_DATA_FOUND
THEN
lv_err_flag := 'E';
lv_err_msg :=
lv_err_msg
|| 'Organization:'
|| ' '
|| p_req_intr_tbl (i).OPERATING_UNIT
|| ' '
|| 'is not present in R12'
|| '<br>'
|| CHR (10);
END;
ELSE
lv_err_flag := 'E';
lv_err_msg :=
lv_err_msg
|| 'Organization is not provided.'
|| '<br>'
|| CHR (10);
END IF;

/****************************** Emergency PO Number Extract and Update


********************************/

BEGIN
SELECT COUNT (DISTINCT suggested_vendor_id)
INTO v_count_epo
FROM apps.PO_REQUISITIONS_INTERFACE_ALL
WHERE 1 = 1
AND interface_source_code =
p_req_intr_tbl (i).interface_source_code
AND org_id = lv_org_id
AND AUTOSOURCE_FLAG = 'N'
AND SUGGESTED_BUYER_NAME IS NOT NULL
AND EMERGENCY_PO_NUM IS NULL
AND PROCESS_FLAG IS NULL
AND DISTRIBUTION_ATTRIBUTE14 =
p_req_intr_tbl (i).HEADER_ATTRIBUTE1
AND requisition_type = 'PURCHASE';

--INSERT INTO TESTSOLAR


--VALUES ('1', 'v_count_epo ' || v_count_epo);

IF v_count_epo = 1
THEN
v_table_name := 'PO_HEADERS';

BEGIN
MO_GLOBAL.set_policy_context ('S', lv_org_id);

v_emergency_po_num :=
APPS.POR_UTIL_PKG.get_document_number (v_table_name);

--INSERT INTO TESTSOLAR


-- VALUES ('1', 'Emergency PO ' || v_emergency_po_num);
--COMMIT;

EXCEPTION
WHEN OTHERS
THEN
lv_err_flag := 'E';
lv_err_msg :=
lv_err_msg
|| 'Unexpected Error while deriving Emergency Po Number'
|| ' '
|| '<br>'
|| SQLERRM
|| '<br>'
|| CHR (10);
END;
UPDATE apps.PO_REQUISITIONS_INTERFACE_ALL
SET EMERGENCY_PO_NUM = v_emergency_po_num
WHERE interface_source_code =
p_req_intr_tbl (i).interface_source_code
AND org_id = lv_org_id
AND AUTOSOURCE_FLAG = 'N'
AND EMERGENCY_PO_NUM IS NULL
AND PROCESS_FLAG IS NULL
AND SUGGESTED_BUYER_NAME IS NOT NULL
AND DISTRIBUTION_ATTRIBUTE14 =
p_req_intr_tbl (i).HEADER_ATTRIBUTE1
AND requisition_type = 'PURCHASE';

COMMIT;
END IF;
EXCEPTION
WHEN OTHERS
THEN
lv_err_flag := 'E';
lv_err_msg :=
lv_err_msg
|| 'Unexpected Error while assigning Emergency Po Number'
|| ' '
|| '<br>'
|| SQLERRM
|| '<br>'
|| CHR (10);
-- fnd_file.put_line (fnd_file.LOG, 'Error while assigning emergency
PO.');
END;

COMMIT;
/****************************** Code end for Emergency PO Number Extract
and Update ***************************/

END LOOP;
END IF;

IF lv_err_msg IS NOT NULL


THEN
--RAISE XXTLN_UPDATE_EXCEPTION;
lv_err_msg :=
'VALIDATION ERROR DETAILS'
|| '<br>'
|| CHR (10)
|| '------------------------------'
|| '<br>'
|| CHR (10)
|| lv_err_msg
|| '<br>'
|| CHR (10);
END IF;

COMMIT;
EXCEPTION
/*WHEN XXTLN_UPDATE_EXCEPTION
THEN
lv_parameter_list :=
wf_parameter_list_t (
wf_parameter_t ('INT NAME', 'REQUISITION IMPORT'),
wf_parameter_t ('SOURCE NAME', v_source_name),
wf_parameter_t ('SEND DATE',
fnd_date.date_to_canonical (SYSDATE)),
wf_parameter_t ('STATUS CODE', 'ERROR'),
wf_parameter_t ('SOLAR ORDER NUMBER', v_order_number));

wf_event.raise (
p_event_name => 'xxtln.oracle.apps.generic.error.inbound',
p_event_key => SYS_GUID (),
p_event_data => lv_err_msg,
p_parameters => lv_parameter_list);
COMMIT;

RAISE;*/
WHEN OTHERS
THEN
lv_err_flag := 'E';
lv_err_msg :=
lv_err_msg
|| 'Unexpected Error while updating record'
|| ' '
|| SQLERRM
|| '<br>'
|| CHR (10);

lv_parameter_list :=
wf_parameter_list_t (
wf_parameter_t ('INT NAME', 'REQUISITION IMPORT'),
wf_parameter_t ('SOURCE NAME', v_source_name),
wf_parameter_t ('SEND DATE',
fnd_date.date_to_canonical (SYSDATE)),
wf_parameter_t ('STATUS CODE', 'ERROR'),
wf_parameter_t ('SOLAR ORDER NUMBER', v_order_number));

wf_event.raise (
p_event_name => 'xxtln.oracle.apps.generic.error.inbound',
p_event_key => SYS_GUID (),
p_event_data => lv_err_msg,
p_parameters => lv_parameter_list);
COMMIT;
END XXTLN_REQU_UPDATE;

/***************************END OF UPDATE
PROCEDURE********************************************************/

/***************************START OF VALIDATION
FUNCTION**************************************************/

FUNCTION XXTLN_REQ_VALIDATION (
p_req_intr IN XXTLN_I2_REQU_IMPORT_PKG.REQ_INTR_REC)
RETURN PO_REQUISITIONS_INTERFACE_ALL%ROWTYPE
IS
v_val_rec PO_REQUISITIONS_INTERFACE_ALL%ROWTYPE;
lv_parameter_list wf_parameter_list_t;

lv_one_time_loc VARCHAR2 (50);


lv_manual_loc VARCHAR2 (50);
lv_one_time_add VARCHAR2 (200);

lv_buyer_count NUMBER;
lv_solar_ord_count NUMBER;
lv_mas_orgid NUMBER;

lv_unit_price NUMBER;
lv_currency_code VARCHAR2 (5);
--VALIDATION_EXCEPTION EXCEPTION;
/*************************** Main Block
*************************************************/

BEGIN
apps.fnd_file.put_line (apps.FND_FILE.LOG, ': Validation Procedure :');

--lv_err_msg := NULL;

/****************************** Validation for Organization id


*********************************/
IF p_req_intr.OPERATING_UNIT IS NOT NULL
THEN
BEGIN
SELECT ORGANIZATION_ID
INTO v_val_rec.org_id
FROM apps.hr_organization_units
WHERE NAME = p_req_intr.OPERATING_UNIT;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
lv_err_flag := 'Y';
lv_err_msg :=
lv_err_msg
|| 'Organization:'
|| ' '
|| p_req_intr.OPERATING_UNIT
|| ' '
|| 'is not present in R12'
|| '<br>'
|| CHR (10);
WHEN OTHERS
THEN
lv_err_flag := 'Y';
lv_err_msg :=
lv_err_msg
|| 'Validation fails for Organization Code'
|| ' '
|| p_req_intr.OPERATING_UNIT
|| ' '
|| '<br>'
|| CHR (10);
END;
ELSE
lv_err_flag := 'Y';
lv_err_msg :=
lv_err_msg
|| 'OPERATING UNIT CANNOT BE NULL.'
|| ' '
|| p_req_intr.OPERATING_UNIT
|| ' '
|| '<br>'
|| CHR (10);
END IF;

/****************************** Requisition Type Validation


************************/
IF p_req_intr.requisition_type IS NOT NULL
THEN
BEGIN
SELECT lookup_code
INTO v_val_rec.requisition_type
FROM apps.po_lookup_codes
WHERE lookup_type = 'REQUISITION TYPE'
AND lookup_code = p_req_intr.requisition_type;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
lv_err_flag := 'Y';
lv_err_msg :=
lv_err_msg
|| 'Requisition Type:'
|| ' '
|| p_req_intr.requisition_type
|| ' '
|| 'not present'
|| '<br>'
|| CHR (10);
END;
ELSE
lv_err_flag := 'Y';
lv_err_msg :=
lv_err_msg
|| 'REQUISITION TYPE CANNOT BE NULL'
|| '<br>'
|| CHR (10);
END IF;

/****************************** Destination Type Validation


*******************/
IF p_req_intr.destination_type_code IS NOT NULL
THEN
BEGIN
SELECT lookup_code
INTO v_val_rec.destination_type_code
FROM apps.po_lookup_codes
WHERE lookup_type = 'DESTINATION TYPE'
AND lookup_code = p_req_intr.destination_type_code;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
lv_err_flag := 'Y';
lv_err_msg :=
lv_err_msg
|| 'Destination Type:'
|| ' '
|| p_req_intr.destination_type_code
|| ' '
|| 'not present'
|| '<br>'
|| CHR (10);
END;
ELSE
lv_err_flag := 'Y';
lv_err_msg :=
lv_err_msg
|| 'DESTINATION TYPE CANNOT BE NULL.'
|| '<br>'
|| CHR (10);
END IF;

/****************************** Source Type Validation


************************/

IF p_req_intr.SOURCE_TYPE_CODE IS NOT NULL


THEN
BEGIN
SELECT lookup_code
INTO v_val_rec.SOURCE_TYPE_CODE
FROM apps.po_lookup_codes
WHERE lookup_type = 'REQUISITION SOURCE TYPE'
AND lookup_code = p_req_intr.source_type_code;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
lv_err_flag := 'Y';
lv_err_msg :=
lv_err_msg
|| 'Requisition Source Type:'
|| ' '
|| p_req_intr.destination_type_code
|| ' '
|| 'not present'
|| '<br>'
|| CHR (10);
END;
ELSE
lv_err_flag := 'Y';
lv_err_msg :=
lv_err_msg || 'SOURCE TYPE CANNOT BE NULL.' || '<br>' || CHR (10);
END IF;

/***************************** Preparer Name Validation


***********************/
IF p_req_intr.preparer_name IS NOT NULL
THEN
BEGIN
SELECT fu.employee_id
INTO v_val_rec.preparer_id
FROM apps.per_all_people_f papf, apps.fnd_user fu
WHERE SYSDATE BETWEEN papf.effective_start_date
AND NVL (papf.effective_end_date,
SYSDATE + 1)
AND SYSDATE BETWEEN fu.start_date
AND NVL (fu.end_date, SYSDATE + 1)
AND fu.employee_id = papf.person_id
AND fu.user_name = p_req_intr.preparer_name;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
lv_err_flag := 'Y';
lv_err_msg :=
lv_err_msg
|| 'Preparer Name:'
|| ' '
|| p_req_intr.preparer_name
|| ' '
|| 'is not present or inactive in system'
|| '<br>'
|| CHR (10);
WHEN OTHERS
THEN
lv_err_flag := 'Y';
lv_err_msg :=
lv_err_msg
|| 'Validation fails for Preparer:'
|| ' '
|| SQLERRM
|| '<br>'
|| CHR (10);
END;
ELSE
lv_err_flag := 'Y';
lv_err_msg :=
lv_err_msg || 'PREPARER CANNOT BE NULL.' || '<br>' || CHR (10);
END IF;

/****************************** Source Organization Validation


*******************/

IF p_req_intr.SOURCE_TYPE_CODE = 'INVENTORY'
AND p_req_intr.source_organization_code IS NOT NULL
THEN
BEGIN
SELECT ORGANIZATION_ID
INTO v_val_rec.source_organization_id
FROM apps.org_organization_definitions
WHERE UPPER (organization_code) =
UPPER (p_req_intr.source_organization_code)
AND SYSDATE <= NVL (DISABLE_DATE, SYSDATE);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
lv_err_flag := 'Y';
lv_err_msg :=
lv_err_msg
|| 'Source Organization Code'
|| ' '
|| p_req_intr.source_organization_code
|| ' '
|| 'is invalid'
|| '<br>'
|| CHR (10);
END;
ELSIF p_req_intr.SOURCE_TYPE_CODE = 'INVENTORY'
AND p_req_intr.source_organization_code IS NULL
THEN
lv_err_flag := 'Y';
lv_err_msg :=
lv_err_msg
|| 'SOURCE ORGANIZATION CANNOT BE NULL FOR INTERNAL ORDER.'
|| '<br>'
|| CHR (10);
END IF;

/****************************** Source Subinvetory Validation


********************/
IF p_req_intr.SOURCE_TYPE_CODE = 'INVENTORY'
AND p_req_intr.SOURCE_SUBINVENTORY IS NOT NULL
THEN
BEGIN
SELECT SECONDARY_INVENTORY_NAME
INTO v_val_rec.SOURCE_SUBINVENTORY
FROM apps.mtl_secondary_inventories
WHERE organization_id = v_val_rec.source_organization_id
AND SECONDARY_INVENTORY_NAME =
p_req_intr.SOURCE_SUBINVENTORY
AND SYSDATE <= NVL (DISABLE_DATE, SYSDATE);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
lv_err_flag := 'Y';
lv_err_msg :=
lv_err_msg
|| 'Source Subinventory:'
|| ' '
|| p_req_intr.SOURCE_SUBINVENTORY
|| ' '
|| ' is invalid or not present in ATLAS'
|| 'is invalid.'
|| '<br>'
|| CHR (10);
END;
ELSIF p_req_intr.SOURCE_TYPE_CODE = 'INVENTORY'
AND p_req_intr.SOURCE_SUBINVENTORY IS NULL
THEN
lv_err_flag := 'Y';
lv_err_msg :=
lv_err_msg
|| 'SOURCE SUBINVENTORY CANNOT BE NULL FOR INTERNAL ORDER.'
|| '<br>'
|| CHR (10);
END IF;

/****************************** Project Validation


*******************************/
IF p_req_intr.PROJECT_ACCOUNTING_CONTEXT = 'Y'
AND p_req_intr.PROJECT_NUM IS NOT NULL
THEN
BEGIN
SELECT project_id
INTO v_val_rec.project_id
FROM apps.pa_projects_all
WHERE segment1 = p_req_intr.PROJECT_NUM;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
lv_err_flag := 'Y';
lv_err_msg :=
lv_err_msg
|| 'Project:'
|| ' '
|| p_req_intr.PROJECT_NUM
|| ' '
|| 'not exist.'
|| '<br>'
|| CHR (10);
END;
END IF;

/****************************** Task Validation


******************************/
IF p_req_intr.PROJECT_ACCOUNTING_CONTEXT = 'Y'
AND p_req_intr.task_NUM IS NOT NULL
THEN
BEGIN
SELECT TASK_id
INTO v_val_rec.task_id
FROM apps.pa_tasks
WHERE task_number = p_req_intr.task_NUM
AND project_id = v_val_rec.project_id;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
lv_err_flag := 'Y';
lv_err_msg :=
lv_err_msg
|| 'Task:'
|| ' '
|| p_req_intr.task_NUM
|| ' '
|| 'not exist.'
|| '<br>'
|| CHR (10);
END;
ELSIF p_req_intr.PROJECT_NUM IS NOT NULL
AND p_req_intr.task_NUM IS NULL
THEN
lv_err_flag := 'Y';
lv_err_msg :=
lv_err_msg
|| 'TASK CANNOT BE NULL FOR PROJECT BASED REQUISITION.'
|| '<br>'
|| CHR (10);
END IF;

/****************************** Set Project Context


******************************/

IF p_req_intr.PROJECT_ACCOUNTING_CONTEXT = 'Y'
THEN
v_val_rec.PROJECT_ACCOUNTING_CONTEXT :=
p_req_intr.PROJECT_ACCOUNTING_CONTEXT;

v_val_rec.EXPENDITURE_ITEM_DATE := p_req_intr.EXPENDITURE_ITEM_DATE;

-- v_val_rec.EXPENDITURE_TYPE := p_req_intr.EXPENDITURE_TYPE;

BEGIN
SELECT EXPENDITURE_TYPE --, hrorg.name, hrorg.date_from, hrorg.date_to
INTO v_val_rec.EXPENDITURE_TYPE
FROM apps.PA_EXPENDITURE_TYPES et
WHERE UPPER (EXPENDITURE_TYPE) =
UPPER (p_req_intr.EXPENDITURE_TYPE)
AND (TRUNC (SYSDATE) BETWEEN et.START_DATE_ACTIVE
AND NVL (et.END_DATE_ACTIVE,
TRUNC (SYSDATE + 1)));
EXCEPTION
WHEN NO_DATA_FOUND
THEN
lv_err_flag := 'Y';
lv_err_msg :=
lv_err_msg
|| 'EXPENDITURE_TYPE:'
|| ' '
|| p_req_intr.EXPENDITURE_TYPE
|| ' '
|| 'not exist.'
|| '<br>'
|| CHR (10);
END;

--v_val_rec.EXPENDITURE_ORGANIZATION_ID := 42014; -- HARD CODE VALUE FOR


TESTING

BEGIN
SELECT hrorg.organization_id --, hrorg.name, hrorg.date_from,
hrorg.date_to
INTO v_val_rec.EXPENDITURE_ORGANIZATION_ID
FROM apps.hr_organization_units hrorg,
apps.pa_all_organizations paorg
WHERE paorg.organization_id = hrorg.organization_id
AND paorg.pa_org_use_type = 'EXPENDITURES'
AND paorg.inactive_date IS NULL
AND UPPER (hrorg.name) =
UPPER (p_req_intr.EXPENDITURE_ORG);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
lv_err_flag := 'Y';
lv_err_msg :=
lv_err_msg
|| 'Expenditure Org:'
|| ' '
|| p_req_intr.EXPENDITURE_ORG
|| ' '
|| 'not exist.'
|| '<br>'
|| CHR (10);
END;
ELSE
v_val_rec.PROJECT_ACCOUNTING_CONTEXT := NULL;

v_val_rec.EXPENDITURE_ITEM_DATE := NULL;

v_val_rec.EXPENDITURE_TYPE := NULL;
END IF;

/****************************** Item Id Validation and UOM Validation


(Inventory Item) *****************************/

IF p_req_intr.ITEM_SEGMENT1 IS NOT NULL


THEN
BEGIN
SELECT DISTINCT inventory_item_id, PRIMARY_UOM_CODE
INTO v_val_rec.item_id, v_val_rec.UOM_CODE -- UOM Validation
FROM apps.mtl_system_items_kfv mtl
WHERE 1 = 1
AND organization_id IN
(SELECT organization_id
FROM mtl_parameters
WHERE master_organization_id IN
(SELECT DISTINCT master_organization_id
FROM mtl_parameters))
AND concatenated_segments = p_req_intr.ITEM_SEGMENT1;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
lv_err_flag := 'Y';
lv_err_msg :=
lv_err_msg
|| 'Item Number:'
|| ' '
|| p_req_intr.ITEM_SEGMENT1
|| ' '
|| 'not present in system.'
|| '<br>'
|| CHR (10);
WHEN OTHERS
THEN
lv_err_flag := 'Y';
lv_err_msg :=
lv_err_msg
|| 'Unexpected Error in Item Validation'
|| ' '
|| SQLERRM
|| '<br>'
|| CHR (10);
END;
END IF;

/****************************** Item Category Validation


*****************************/

IF p_req_intr.CATEGORY_SEGMENT6 IS NULL
AND p_req_intr.CATEGORY_SEGMENT7 IS NULL
AND p_req_intr.SOURCE_TYPE_CODE = 'INVENTORY'
AND p_req_intr.ITEM_SEGMENT1 IS NOT NULL
THEN
BEGIN
SELECT DISTINCT mic.category_id
INTO v_val_rec.category_id
FROM apps.mtl_item_categories mic,
apps.mtl_system_items_b msi,
apps.mtl_category_sets_tl mcst
WHERE mic.INVENTORY_ITEM_ID = msi.INVENTORY_ITEM_ID
AND mcst.category_set_id = mic.category_set_id
AND mcst.CATEGORY_SET_NAME = 'Purchasing'
AND msi.segment1 = p_req_intr.ITEM_SEGMENT1
AND mic.organization_id = v_val_rec.source_organization_id;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
lv_err_flag := 'Y';
lv_err_msg :=
lv_err_msg
|| 'Category not setup for Inventory Item:'
|| ' '
|| p_req_intr.ITEM_SEGMENT1
|| ' '
|| 'in'
|| ' '
|| p_req_intr.source_organization_code
|| '<br>'
|| CHR (10);
WHEN OTHERS
THEN
lv_err_flag := 'Y';
lv_err_msg := lv_err_msg || SQLERRM;
END;
ELSIF p_req_intr.CATEGORY_SEGMENT6 IS NULL
AND p_req_intr.CATEGORY_SEGMENT7 IS NULL
AND p_req_intr.SOURCE_TYPE_CODE = 'VENDOR'
AND p_req_intr.ITEM_SEGMENT1 IS NOT NULL
THEN
BEGIN
SELECT DISTINCT mic.category_id
INTO v_val_rec.category_id
FROM apps.mtl_item_categories mic,
apps.mtl_system_items_b msi,
apps.mtl_category_sets_tl mcst
WHERE mic.INVENTORY_ITEM_ID = msi.INVENTORY_ITEM_ID
AND mcst.category_set_id = mic.category_set_id
AND mcst.CATEGORY_SET_NAME = 'Purchasing'
AND msi.segment1 = p_req_intr.ITEM_SEGMENT1
AND msi.organization_id = mic.organization_id
AND msi.INVENTORY_ITEM_FLAG = 'N';
EXCEPTION
WHEN NO_DATA_FOUND
THEN
lv_err_flag := 'Y';
lv_err_msg :=
lv_err_msg
|| 'Category not setup for Expense Item:'
|| ' '
|| p_req_intr.ITEM_SEGMENT1
|| ' '
|| '<br>'
|| CHR (10);
WHEN OTHERS
THEN
lv_err_flag := 'Y';
lv_err_msg := lv_err_msg || SQLERRM || '<br>' || CHR (10);
END;
ELSIF p_req_intr.CATEGORY_SEGMENT6 IS NOT NULL
AND p_req_intr.CATEGORY_SEGMENT7 IS NOT NULL
THEN
BEGIN
SELECT DISTINCT mic.category_id
INTO v_val_rec.category_id
FROM apps.mtl_categories_b mic
WHERE SEGMENT6 = p_req_intr.CATEGORY_SEGMENT6
AND SEGMENT7 = p_req_intr.CATEGORY_SEGMENT7
AND ENABLED_FLAG = 'Y'
AND SYSDATE <= NVL (END_DATE_ACTIVE, SYSDATE);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
lv_err_flag := 'Y';
lv_err_msg :=
lv_err_msg
|| 'Category:'
|| ' '
|| p_req_intr.CATEGORY_SEGMENT6
|| '-'
|| p_req_intr.CATEGORY_SEGMENT7
|| ' '
|| 'not setup in system.'
|| '<br>'
|| CHR (10);
WHEN OTHERS
THEN
lv_err_flag := 'Y';
lv_err_msg :=
lv_err_msg
|| 'Unexpected Error in Item Category Validation'
|| ' '
|| SQLERRM
|| '<br>'
|| CHR (10);
END;
ELSE
lv_err_flag := 'Y';
lv_err_msg :=
lv_err_msg
|| 'CATEGORY IS MANDATORY WHEN ITEM NUMBER IS NOT PROVIDED'
|| ' '
|| SQLERRM
|| '<br>'
|| CHR (10);
END IF;

/****************************** Supplier Validation


**********************************/
IF p_req_intr.SUGGESTED_VENDOR_NAME IS NOT NULL
THEN
BEGIN
SELECT VENDOR_ID
INTO v_val_rec.SUGGESTED_VENDOR_ID
FROM apps.ap_suppliers
WHERE 1 = 1
AND ( vendor_name = p_req_intr.SUGGESTED_VENDOR_NAME
OR SEGMENT1 = p_req_intr.SUGGESTED_VENDOR_NAME)
AND SYSDATE <= NVL (END_DATE_ACTIVE, SYSDATE);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
lv_err_flag := 'Y';
lv_err_msg :=
lv_err_msg
|| 'Vendor Name:'
|| ' '
|| p_req_intr.SUGGESTED_VENDOR_NAME
|| ' '
|| 'not present or inactive in system'
|| '<br>'
|| CHR (10);
WHEN OTHERS
THEN
lv_err_msg :=
lv_err_msg
|| 'Unexpected Error while deriving Supplier'
|| ' '
|| SQLERRM
|| '<br>'
|| CHR (10);
END;
END IF;

/****************************** Supplier Site Validation


*******************************************/

IF p_req_intr.SUGGESTED_VENDOR_NAME IS NOT NULL


AND p_req_intr.SUGGESTED_VENDOR_SITE IS NOT NULL
THEN
BEGIN
SELECT VENDOR_SITE_ID
INTO v_val_rec.SUGGESTED_VENDOR_SITE_ID
FROM apps.ap_supplier_sites_all
WHERE 1 = 1
AND vendor_id = v_val_rec.SUGGESTED_VENDOR_ID
AND VENDOR_SITE_CODE = p_req_intr.SUGGESTED_VENDOR_SITE
AND SYSDATE <= NVL (INACTIVE_DATE, SYSDATE);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
lv_err_flag := 'Y';
lv_err_msg :=
lv_err_msg
|| 'Vendor Site:'
|| ' '
|| p_req_intr.SUGGESTED_VENDOR_SITE
|| ' '
|| ' not present or inactive in system'
|| '<br>'
|| CHR (10);
WHEN OTHERS
THEN
lv_err_flag := 'Y';
lv_err_msg :=
lv_err_msg
|| 'Unexpected Error while deriving Supplier Site'
|| ' '
|| SQLERRM
|| '<br>'
|| CHR (10);
END;
ELSIF p_req_intr.SUGGESTED_VENDOR_NAME IS NOT NULL
AND p_req_intr.SUGGESTED_VENDOR_SITE IS NULL
THEN
lv_err_flag := 'Y';
lv_err_msg :=
lv_err_msg
|| 'SUPPLIER SITE CANNOT BE NULL WHEN PROVIDED SUGGESTED SUPPLIER.'
|| '<br>'
|| CHR (10);
END IF;

/****************************** Deliver to Location Validation


*****************************************/

IF p_req_intr.deliver_to_location_code IS NOT NULL


THEN
BEGIN
lv_one_time_loc :=
apps.fnd_profile.VALUE ('POR_ONE_TIME_LOCATION');

BEGIN
SELECT A.LOCATION_CODE
INTO lv_manual_loc
FROM APPS.HR_lOCATIONS A,
apps.FND_PROFILE_OPTIONS B,
apps.FND_PROFILE_OPTION_VALUES C
WHERE B.PROFILE_OPTION_ID = C.PROFILE_OPTION_ID
AND C.PROFILE_OPTION_VALUE = A.LOCATION_CODE
AND B.profile_option_name = 'XXTLN_MANUAL_ADDRESS';
EXCEPTION
WHEN NO_DATA_FOUND
THEN
lv_err_flag := 'Y';
lv_err_msg :=
lv_err_msg
|| 'Manual Address profile not setup'
|| '<br>'
|| CHR (10);
END;

BEGIN
SELECT DISTINCT location_id
INTO v_val_rec.deliver_to_location_id
FROM apps.hr_locations_all_tl
WHERE 1 = 1
AND location_code = p_req_intr.deliver_to_location_code;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
lv_err_flag := 'Y';
lv_err_msg :=
lv_err_msg
|| 'Deliver To Location:'
|| ' '
|| p_req_intr.deliver_to_location_code
|| ' '
|| 'is not present'
|| '<br>'
|| CHR (10);
WHEN OTHERS
THEN
lv_err_flag := 'Y';
lv_err_msg :=
lv_err_msg
|| 'Unexpected Error for deliver to location'
|| ' '
|| SQLERRM
|| '<br>'
|| CHR (10);
END;

IF p_req_intr.DELIVER_TO_LOCATION_CODE = lv_one_time_loc
AND p_req_intr.SOURCE_TYPE_CODE = 'VENDOR'
THEN
lv_one_time_add :=
p_req_intr.header_attribute5
|| ' '
|| p_req_intr.header_attribute6
|| CHR (10)
|| p_req_intr.header_attribute7
|| CHR (10)
|| p_req_intr.header_attribute8
|| CHR (10)
|| p_req_intr.header_attribute9
|| CHR (10)
|| p_req_intr.header_attribute10;

v_val_rec.note1_id := XXTLN_ONE_TIME_ADDRESS (lv_one_time_add);

v_val_rec.line_attribute5 := p_req_intr.header_attribute5;
v_val_rec.line_attribute6 := p_req_intr.header_attribute6;
v_val_rec.line_attribute7 := p_req_intr.header_attribute7;
v_val_rec.line_attribute8 := p_req_intr.header_attribute8;
v_val_rec.line_attribute9 := p_req_intr.header_attribute9;
v_val_rec.line_attribute10 := p_req_intr.header_attribute10;
ELSIF p_req_intr.DELIVER_TO_LOCATION_CODE = lv_manual_loc
AND p_req_intr.SOURCE_TYPE_CODE = 'INVENTORY'
THEN
v_val_rec.HEADER_DESCRIPTION :=
p_req_intr.note_to_receiver -- New
change after GO-LIVE
||';'
|| p_req_intr.header_attribute5
|| ';'
|| p_req_intr.header_attribute6
|| ';'
|| p_req_intr.header_attribute7
|| ';'
|| p_req_intr.header_attribute8
|| ';'
|| p_req_intr.header_attribute9
|| ';'
|| p_req_intr.header_attribute10;

v_val_rec.note1_id := NULL;
ELSE
v_val_rec.note1_id := NULL;
END IF;
EXCEPTION
WHEN OTHERS
THEN
lv_err_flag := 'Y';
lv_err_msg :=
lv_err_msg
|| 'Unexpected Error in Deliver to location'
|| SQLERRM
|| '<br>'
|| CHR (10);
END;
ELSE
lv_err_flag := 'Y';
lv_err_msg :=
lv_err_msg
|| 'DELIVER TO LOCATION CANNOT BE NULL.'
|| '<br>'
|| CHR (10);
END IF;

/****************************** Validation for Destination Organization Code


********************************************************/

IF p_req_intr.deliver_to_location_code IS NOT NULL


THEN
BEGIN
apps.mo_global.set_policy_context ('S', v_val_rec.org_id);

SELECT MASTER_ORGANIZATION_ID
INTO lv_mas_orgid
FROM APPS.OE_SYSTEM_PARAMETERS;

SELECT NVL (INVENTORY_ORGANIZATION_ID, lv_mas_orgid)


INTO v_val_rec.DESTINATION_ORGANIZATION_ID
FROM apps.hr_locations_all
WHERE 1 = 1
AND location_code = p_req_intr.deliver_to_location_code;
EXCEPTION
WHEN TOO_MANY_ROWS
THEN
lv_err_flag := 'Y';
lv_err_msg :=
lv_err_msg
|| 'Multiple Destination Organization present for'
|| ' '
|| p_req_intr.deliver_to_location_code
|| ' '
|| 'location'
|| '<br>'
|| CHR (10);
WHEN OTHERS
THEN
lv_err_flag := 'Y';
lv_err_msg :=
lv_err_msg
|| 'Unexpected Error for destination organization'
|| ' '
|| SQLERRM
|| '<br>'
|| CHR (10);
END;
ELSE
lv_err_flag := 'Y';
lv_err_msg :=
lv_err_msg
|| 'DESTINATION ORG CANNOT BE NULL.'
|| '<br>'
|| CHR (10);
END IF;

/****************************** Validation for Deliver to Requester


**************************************************/

IF p_req_intr.DELIVER_TO_REQUESTOR_NAME IS NULL
THEN
IF p_req_intr.preparer_name IS NOT NULL
THEN
BEGIN
SELECT fu.employee_id
INTO v_val_rec.DELIVER_TO_REQUESTOR_ID
FROM apps.per_all_people_f papf, apps.fnd_user fu
WHERE SYSDATE BETWEEN papf.effective_start_date
AND NVL (papf.effective_end_date,
SYSDATE + 1)
AND SYSDATE BETWEEN fu.start_date
AND NVL (fu.end_date, SYSDATE + 1)
AND fu.employee_id = papf.person_id
AND fu.user_name = p_req_intr.preparer_name;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
lv_err_flag := 'Y';
lv_err_msg :=
lv_err_msg
|| 'Requestor Name:'
|| ' '
|| p_req_intr.preparer_name
|| ' '
|| 'is not present or inactive in system'
|| '<br>'
|| CHR (10);
WHEN OTHERS
THEN
lv_err_flag := 'Y';
lv_err_msg :=
lv_err_msg
|| 'Unexpected Error in Deliver to requestor'
|| ' '
|| SQLERRM
|| '<br>'
|| CHR (10);
END;
ELSE
lv_err_flag := 'Y';
lv_err_msg :=
lv_err_msg
|| 'REQUESTOR CANNOT BE NULL.'
|| '<br>'
|| CHR (10);
END IF;
ELSE
BEGIN
SELECT fu.employee_id
INTO v_val_rec.DELIVER_TO_REQUESTOR_ID
FROM apps.per_all_people_f papf, apps.fnd_user fu
WHERE SYSDATE BETWEEN papf.effective_start_date
AND NVL (papf.effective_end_date,
SYSDATE + 1)
AND SYSDATE BETWEEN fu.start_date
AND NVL (fu.end_date, SYSDATE + 1)
AND fu.employee_id = papf.person_id
AND fu.user_name = p_req_intr.DELIVER_TO_REQUESTOR_NAME;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
lv_err_flag := 'Y';
lv_err_msg :=
lv_err_msg
|| 'Requestor Name:'
|| ' '
|| p_req_intr.preparer_name
|| ' '
|| 'is not present or inactive in system'
|| '<br>'
|| CHR (10);
WHEN OTHERS
THEN
lv_err_flag := 'Y';
lv_err_msg :=
lv_err_msg
|| 'Unexpected Error in Deliver to requestor'
|| ' '
|| SQLERRM
|| '<br>'
|| CHR (10);
END;
END IF;

/****************************** Check Suggested Buyer for Auto Create and


UOM Validation (Purchase) ************************************************/
IF v_val_rec.SUGGESTED_VENDOR_ID IS NOT NULL
AND v_val_rec.SUGGESTED_VENDOR_SITE_ID IS NOT NULL
AND p_req_intr.AUTOSOURCE_FLAG = 'N'
AND p_req_intr.SOURCE_TYPE_CODE = 'VENDOR'
THEN
BEGIN
SELECT COUNT (1),
agent_id,
ph.po_header_id,
pl.line_num,
ph.currency_code,
pl.unit_price,
ph.TYPE_LOOKUP_CODE,
pl.UNIT_MEAS_LOOKUP_CODE,
ph.rate_type
INTO lv_buyer_count,
v_val_rec.SUGGESTED_BUYER_ID,
v_val_rec.AUTOSOURCE_DOC_HEADER_ID,
v_val_rec.AUTOSOURCE_DOC_LINE_NUM,
v_val_rec.currency_code,
lv_unit_price,
v_val_rec.DOCUMENT_TYPE_CODE,
v_val_rec.UOM_CODE, -- UOM Validation
v_val_rec.RATE_TYPE
FROM apps.po_headers_all ph,
apps.po_lines_all pl,
apps.ICX_CAT_CATEGORIES_TL icct
WHERE vendor_id = v_val_rec.SUGGESTED_VENDOR_ID
AND VENDOR_SITE_ID = v_val_rec.SUGGESTED_VENDOR_SITE_ID
AND TYPE_LOOKUP_CODE = 'BLANKET'
AND ph.closed_date IS NULL
AND GLOBAL_AGREEMENT_FLAG = 'Y'
AND ( VENDOR_PRODUCT_NUM =
p_req_intr.SUGGESTED_VENDOR_ITEM_NUM
OR item_id = v_val_rec.item_id)
AND pl.po_header_id = ph.po_header_id
AND pl.IP_CATEGORY_ID = icct.RT_CATEGORY_ID
AND icct.category_name <> 'EE_SOK'
AND icct.language = 'US'
GROUP BY agent_id,
ph.po_header_id,
pl.line_num,
ph.currency_code,
pl.unit_price,
ph.TYPE_LOOKUP_CODE,
pl.UNIT_MEAS_LOOKUP_CODE,
ph.rate_type;

IF lv_buyer_count = 1
THEN
/****************Identify Buyer Name***********************/
BEGIN
SELECT GLOBAL_NAME
INTO v_val_rec.SUGGESTED_BUYER_NAME
FROM APPS.PER_ALL_PEOPLE_F
WHERE PERSON_ID = v_val_rec.SUGGESTED_BUYER_ID
AND SYSDATE BETWEEN EFFECTIVE_START_DATE
AND EFFECTIVE_END_DATE;
EXCEPTION
WHEN OTHERS
THEN
lv_err_flag := 'Y';
lv_err_msg :=
lv_err_msg
|| 'Unexpected Error for suggested buyer'
|| ' '
|| SQLERRM
|| '<br>'
|| CHR (10);
END;
END IF;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
lv_err_flag := 'Y';
lv_err_msg :=
lv_err_msg
|| 'Order not eligible for autocreate as no valid source document
in system'
|| '<br>'
|| CHR (10);
WHEN TOO_MANY_ROWS
THEN
lv_err_flag := 'Y';
lv_err_msg :=
lv_err_msg
|| 'Order is not eligible for auto-create as multiple source
document in system'
|| '<br>'
|| CHR (10);
WHEN OTHERS
THEN
lv_err_flag := 'Y';
lv_err_msg :=
lv_err_msg
|| 'Unexpected Error in finding Source document for Item'
|| ' '
|| SQLERRM
|| '<br>'
|| CHR (10);
END;
ELSE
v_val_rec.SUGGESTED_BUYER_NAME := NULL;
END IF;

/****************************** Check Unit Price and Rate for Currency Code


****************************************************/
IF p_req_intr.SOURCE_TYPE_CODE = 'VENDOR' AND lv_unit_price IS NOT NULL
THEN
BEGIN
SELECT currency_code
INTO lv_currency_code
FROM apps.gl_ledgers gll, apps.hr_operating_units hru
WHERE gll.ledger_id = hru.set_of_books_id
AND hru.organization_id = v_val_rec.org_id;

IF lv_currency_code = v_val_rec.currency_code
THEN
v_val_rec.unit_price := lv_unit_price;
v_val_rec.CURRENCY_UNIT_PRICE := NULL;
ELSE
v_val_rec.unit_price := NULL;
v_val_rec.CURRENCY_UNIT_PRICE := lv_unit_price;

BEGIN
SELECT CONVERSION_DATE
INTO v_val_rec.RATE_DATE
FROM apps.gl_daily_rates
WHERE from_currency = v_val_rec.currency_code
AND to_currency = lv_currency_code
AND conversion_type = v_val_rec.RATE_TYPE
AND CONVERSION_DATE =
TO_DATE (SYSDATE, 'DD/MM/RRRR');
EXCEPTION
WHEN NO_DATA_FOUND
THEN
lv_err_flag := 'Y';
lv_err_msg :=
lv_err_msg
|| 'Conversion Rate not defined for'
|| ' '
|| SYSDATE
|| ' '
|| 'in system'
|| '<br>'
|| CHR (10);
WHEN OTHERS
THEN
lv_err_flag := 'Y';
lv_err_msg :=
lv_err_msg
|| 'Unexpected Error while finding conversion rate'
|| ' '
|| SQLERRM
|| '<br>'
|| CHR (10);
END;
END IF;
EXCEPTION
WHEN OTHERS
THEN
lv_err_flag := 'Y';
lv_err_msg :=
lv_err_msg
|| 'Unexpected Error for Currency Code'
|| ' '
|| SQLERRM
|| '<br>'
|| CHR (10);
END;
ELSIF p_req_intr.SOURCE_TYPE_CODE = 'INVENTORY'
THEN
BEGIN
SELECT NVL (ITEM_COST, 0)
INTO v_val_rec.unit_price
FROM apps.cst_item_costs
WHERE inventory_item_id = v_val_rec.item_id
AND ORGANIZATION_ID = v_val_rec.source_organization_id;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
lv_err_flag := 'Y';
lv_err_msg :=
lv_err_msg
|| 'Item not available in'
|| ' '
|| p_req_intr.source_organization_code
|| ' '
|| 'Inventory Org'
|| '<br>'
|| CHR (10);
WHEN OTHERS
THEN
lv_err_flag := 'Y';
lv_err_msg :=
lv_err_msg
|| 'Unexpected Error while deriving unit price for item'
|| ' '
|| SQLERRM
|| '<br>'
|| CHR (10);
END;
ELSE
lv_err_flag := 'Y';
lv_err_msg :=
lv_err_msg || 'UNIT PRICE CANNOT BE NULL.' || '<br>' || CHR (10);
END IF;

/****************************** Approver for Purchase requisition of SOLAR


**************************************/

IF p_req_intr.SOURCE_TYPE_CODE = 'VENDOR'
AND p_req_intr.interface_source_code = 'SOLAR'
THEN
BEGIN
/*SELECT EMPLOYEE_ID
INTO v_val_rec.approver_id
FROM apps.fnd_user
WHERE user_name = 'T531232';*/

SELECT fu.employee_id
INTO v_val_rec.approver_id
FROM apps.fnd_user fu,
apps.fnd_profile_options fpo,
apps.fnd_profile_option_values fpov
WHERE 1 = 1
AND fpo.profile_option_id = fpov.profile_option_id
AND fpov.profile_option_value = fu.user_name
AND sysdate < nvl(fu.end_date,sysdate+1)
AND fpo.profile_option_name = 'XXTLN_PR_APPROVER' -- PROFILE
OPTION FOR PR APPROVER SET AT ORG LEVEL
AND fpov.level_id = 10006
and fpov.level_value = v_val_rec.org_id;

EXCEPTION
WHEN NO_DATA_FOUND
THEN
lv_err_flag := 'Y';
lv_err_msg :=
lv_err_msg
|| 'Approver for Purchase requisition'
|| ' '
|| SYSDATE
|| ' '
|| 'not in system'
|| '<br>'
|| CHR (10);
WHEN OTHERS
THEN
lv_err_flag := 'Y';
lv_err_msg :=
lv_err_msg
|| 'Unexpected Error while finding approver'
|| ' '
|| SQLERRM
|| '<br>'
|| CHR (10);
END;
END IF;

/****************************** Check Duplicate Solar Order


*********************************************
BEGIN
IF p_req_intr.HEADER_ATTRIBUTE1 IS NULL
THEN
lv_err_msg :=
lv_err_msg
|| 'No reference for Solar Order Number'
|| ',';
ELSIF
SELECT count(1) INTO lv_solar_ord_count
WHERE apps.po_requisition_headers_all
HEADER_ATTRIBUTE15 = p_req_intr.HEADER_ATTRIBUTE15;

IF lv_solar_ord_count > 0
THEN
lv_err_msg :=
lv_err_msg
|| 'Duplicate Solar Ordaer Number'
|| ',';
END IF;
END IF;
WHEN OTHERS
THEN
lv_err_msg :=
lv_err_msg || 'Unexpected Error for Duplicate Solar
Order check' || SQLERRM || ',';
END;
/****************************** Raise Business Event for Validation Failure
*****************************/

--INSERT INTO TESTSOLAR


-- VALUES ('1', 'ErrorMsg' || lv_err_msg);
/************************************FOR
TESTING***********************************************************/

/* IF lv_err_msg IS NOT NULL


THEN
RAISE VALIDATION_EXCEPTION;
END IF;*/

--v_val_rec.category_id := 30026;

--v_val_rec.item_id := 697068;

RETURN v_val_rec;
EXCEPTION
/*WHEN VALIDATION_EXCEPTION
THEN
lv_parameter_list :=
wf_parameter_list_t (
wf_parameter_t ('INT NAME', 'REQUISITION IMPORT'),
wf_parameter_t ('SOURCE NAME', p_req_intr.interface_source_code),
wf_parameter_t ('SEND DATE',
fnd_date.date_to_canonical (SYSDATE)),
wf_parameter_t ('STATUS CODE', 'ERROR'),
wf_parameter_t ('SOLAR ORDER NUMBER',
p_req_intr.HEADER_ATTRIBUTE1));

wf_event.raise (
p_event_name => 'xxtln.oracle.apps.generic.error.inbound',
p_event_key => SYS_GUID (),
p_event_data => lv_err_msg,
p_parameters => lv_parameter_list);
COMMIT;

RAISE;*/
WHEN OTHERS
THEN
lv_err_flag := 'Y';
lv_err_msg :=
lv_err_msg
|| 'Unexpected Error while validating record'
|| ' '
|| SQLERRM
|| '<br>'
|| CHR (10);

lv_parameter_list :=
wf_parameter_list_t (
wf_parameter_t ('INT NAME', 'REQUISITION IMPORT'),
wf_parameter_t ('SOURCE NAME',
p_req_intr.interface_source_code),
wf_parameter_t ('SEND DATE',
fnd_date.date_to_canonical (SYSDATE)),
wf_parameter_t ('STATUS CODE', 'ERROR'),
wf_parameter_t ('SOLAR ORDER NUMBER',
p_req_intr.HEADER_ATTRIBUTE1));

wf_event.raise (
p_event_name => 'xxtln.oracle.apps.generic.error.inbound',
p_event_key => SYS_GUID (),
p_event_data => lv_err_msg,
p_parameters => lv_parameter_list);
COMMIT;
END XXTLN_REQ_VALIDATION;

/***************************END OF VALIDATION
FUNCTION***************************************************/

/***************************START OF ONE-TIME ADDRESS


FUNCTION*******************************************/

FUNCTION XXTLN_ONE_TIME_ADDRESS (p_one_time_add IN VARCHAR2)


RETURN NUMBER
IS
PRAGMA AUTONOMOUS_TRANSACTION;
lv_doc_id NUMBER;
lv_media_id NUMBER;
lv_row_id VARCHAR2 (20);
/*********************************MAIN
BLOCK******************************************************/
BEGIN
--select fnd_documents_s.nextval into v_doc_id from dual;

lv_doc_id := NULL;
lv_media_id := NULL;
lv_row_id := NULL;

fnd_documents_pkg.insert_row (
x_rowid => lv_row_id,
x_document_id => lv_doc_id,
x_creation_date => SYSDATE,
x_created_by => -1,
x_last_update_date => SYSDATE,
x_last_updated_by => -1,
x_last_update_login => -1,
x_datatype_id => 2,
x_publish_flag => 'Y',
x_category_id => 33,
x_security_type => 4,
x_usage_type => 'O',
x_language => 'US',
x_description => 'POR:One Time Location',
x_file_name => NULL,
x_media_id => lv_media_id);

SELECT fnd_documents_long_text_s.CURRVAL INTO lv_media_id FROM DUAL;

DBMS_OUTPUT.PUT_LINE ('Media ID ' || lv_media_id);

INSERT
INTO fnd_documents_long_text (media_id, long_text, app_source_version)
VALUES (lv_media_id, p_one_time_add, NULL);

COMMIT;

SELECT document_id
INTO lv_doc_id
FROM apps.fnd_documents
WHERE media_id = lv_media_id;

RETURN lv_doc_id;
EXCEPTION
WHEN OTHERS
THEN
apps.fnd_file.put_line (
apps.FND_FILE.LOG,
'Error in XXTLN_ONE_TIME_ADDRESS procedure' || SQLERRM);
END XXTLN_ONE_TIME_ADDRESS;

/***************************END OF ONE-TIME ADDRESS


FUNCTION*********************************************/

/***************************START OF IMPORT
PROCEDURE****************************************************/

PROCEDURE launch_reqimport_program
IS
PRAGMA AUTONOMOUS_TRANSACTION;

-------------------------------
--Local Variables Declaration--
-------------------------------
l_request_id NUMBER;
l_short_code VARCHAR2 (15);
l_user_id NUMBER;
l_resp_id NUMBER;
l_rcv_num VARCHAR2 (100);
l_app_id NUMBER;
l_org_id NUMBER;
l_return_status BOOLEAN;
l_phase VARCHAR2 (100);
l_status VARCHAR2 (100);
l_dev_phase VARCHAR2 (100);
l_dev_status VARCHAR2 (100);
l_processing_status VARCHAR2 (100);
l_errbuf CLOB;
l_batch_id NUMBER;
l_message CLOB;
l_column_name VARCHAR2 (200);
lv_parameter_list wf_parameter_list_t;

CURSOR cur_import_batch (
P_ORG_ID IN NUMBER)
IS
SELECT DISTINCT BATCH_ID
FROM apps.po_requisitions_interface_all
WHERE interface_source_code = lv_order_source
AND PROCESS_FLAG IS NULL
AND ORG_ID = P_ORG_ID;

CURSOR cur_req_error (p_batch_id NUMBER)


IS
SELECT column_name, error_message
FROM po_interface_errors
WHERE batch_id = p_batch_id;
CURSOR cur_req_update (p_request_id NUMBER)
IS
SELECT REQUISITION_LINE_ID,
attribute5,
attribute6,
attribute7,
attribute8,
attribute9,
attribute10,note_to_receiver
FROM po_requisition_lines_all
WHERE request_id = p_request_id AND SOURCE_TYPE_CODE = 'VENDOR';

error_details_tbl cur_req_error%ROWTYPE;
l_counter NUMBER := 0;
BEGIN
l_user_id := NULL;
l_resp_id := NULL;
l_app_id := NULL;

------------------------
--Fetch Org Short Code--
------------------------
BEGIN
SELECT NVL (hou.attribute10, hu.short_code) Short_code
INTO l_short_code
FROM hr_organization_units hou, hr_operating_units hu
WHERE hou.organization_id = hu.organization_id
AND hu.organization_id = lv_org_id;
EXCEPTION
WHEN OTHERS
THEN
lv_err_flag := 'E';
lv_err_msg :=
lv_err_msg
|| 'Unexpected Error while validate Organization Short code'
|| ' '
|| SQLERRM
|| '<br>'
|| CHR (10);

/*lv_parameter_list :=
wf_parameter_list_t (
wf_parameter_t ('INT NAME', 'REQUISITION IMPORT'),
wf_parameter_t ('SOURCE NAME', lv_order_source),
wf_parameter_t ('SEND DATE',
fnd_date.date_to_canonical (SYSDATE)),
wf_parameter_t ('STATUS CODE', 'ERROR'),
wf_parameter_t ('SOLAR ORDER NUMBER', lv_source_order));

wf_event.raise (
p_event_name => 'xxtln.oracle.apps.generic.error.inbound',
p_event_key => SYS_GUID (),
p_event_data => lv_err_msg,
p_parameters => lv_parameter_list);*/
COMMIT;
END;

FOR i IN cur_import_batch (lv_org_id)


LOOP
-----------------
--Fetch User id--
-----------------
SELECT user_id
INTO l_user_id
FROM fnd_user
WHERE UPPER (user_name) = UPPER (l_short_code || '_AUTOMATISK');

---------------------------
--Fetch Resp id and Appl id-
---------------------------

SELECT application_id, responsibility_id


INTO l_app_id, l_resp_id
FROM apps.fnd_responsibility_vl
WHERE UPPER (responsibility_name) =
(l_short_code || ' - PO MANAGER');

--------------------
--Initialize Apps-
-------------------

fnd_global.apps_initialize (user_id => l_user_id,


resp_id => l_resp_id,
resp_appl_id => l_app_id);

---------------------------------------
-- Submitting standard program--
----------------------------------------
IF lv_err_flag = 'N'
THEN
l_batch_id := i.BATCH_ID;
------------------------------------------------------
---- Submitting the Program for Requisition Import----
------------------------------------------------------

l_request_id :=
apps.fnd_request.submit_request (
application => 'PO', -- Application
program => 'REQIMPORT', -- Program
description => 'Requisition Import', -- Program Description
argument1 => lv_order_source, -- Source
argument2 => l_batch_id, -- Argument1
argument3 => 'LOCATION',
--'ALL',LOCATION,
argument4 => NULL,
argument5 => 'N', --multi distirbutions
argument6 => 'Y');

COMMIT;

IF l_request_id = 0
THEN
------------------------------------------------
--- Program failed
-----------------------------------------------

l_errbuf := fnd_message.get;
lv_err_msg := lv_err_msg || l_errbuf;
ELSE
LOOP
l_return_status :=
fnd_concurrent.wait_for_request (l_request_id,
10,
0,
l_phase,
l_status,
l_dev_phase,
l_dev_status,
l_message);

EXIT WHEN UPPER (l_dev_phase) = 'COMPLETE';


END LOOP;
END IF;

BEGIN
SELECT COUNT (*)
INTO l_counter
FROM po_requisition_lines_all
WHERE request_id = l_request_id;

IF l_counter > 0
THEN
FOR k IN cur_req_update (l_request_id)
LOOP
BEGIN
UPDATE po_requisition_lines_all
SET Note_to_vendor = k.note_to_receiver ||
CHR(10)||'Deliver to : '||
k.attribute5
|| ' '
|| k.attribute6
|| ' '
|| k.attribute7
|| ' '
|| k.attribute8
|| ' '
|| k.attribute9
|| ' '
|| k.attribute10,
attribute5 = NULL,
attribute6 = NULL,
attribute7 = NULL,
attribute8 = NULL,
attribute9 = NULL,
attribute10 = NULL
WHERE REQUISITION_LINE_ID = k.REQUISITION_LINE_ID;
EXCEPTION
WHEN OTHERS
THEN
apps.fnd_file.put_line (
apps.FND_FILE.LOG,
'Error while update Note to Vendor, Please check'
|| SQLERRM);
END;
END LOOP;
END IF;
END;

BEGIN
BEGIN
SELECT PROCESS_FLAG
INTO l_processing_status
FROM apps.po_requisitions_interface_all
WHERE batch_id = l_batch_id;
EXCEPTION
WHEN OTHERS
THEN
l_processing_status := '';
END;

IF l_processing_status = 'ERROR'
THEN
BEGIN
FOR error_details_tbl IN cur_req_error (l_batch_id)
LOOP
l_message :=
l_message
|| error_details_tbl.column_name
|| ' : --> '
|| error_details_tbl.error_message
|| '<br>'
|| CHR (10);
END LOOP;
END;

IF (l_message IS NOT NULL)


THEN
lv_parameter_list :=
wf_parameter_list_t (
wf_parameter_t ('INT NAME', 'REQUISITION IMPORT'),
wf_parameter_t ('SOURCE NAME', lv_order_source),
wf_parameter_t (
'SEND DATE',
fnd_date.date_to_canonical (SYSDATE)),
wf_parameter_t ('STATUS CODE', 'ERROR'),
wf_parameter_t ('SOLAR ORDER NUMBER',
lv_source_order));
END IF;
ELSE
lv_parameter_list :=
wf_parameter_list_t (
wf_parameter_t ('INT NAME', 'REQUISITION IMPORT'),
wf_parameter_t ('SOURCE NAME', lv_order_source),
wf_parameter_t ('SEND DATE',
fnd_date.date_to_canonical (SYSDATE)),
wf_parameter_t ('STATUS CODE', 'SUCCESS'),
wf_parameter_t ('SOLAR ORDER NUMBER',
lv_source_order));

l_message :=
'Solar Order: '
|| lv_source_order
|| ' succesfully processed in ATLAS';
END IF;
wf_event.raise (
p_event_name => 'xxtln.oracle.apps.generic.error.inbound',
p_event_key => SYS_GUID (),
p_event_data => l_message,
p_parameters => lv_parameter_list);
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
lv_err_flag := 'E';
lv_err_msg :=
lv_err_msg
|| 'Error in checking requisition import details'
|| ''
|| SQLERRM
|| '<br>'
|| CHR (10);
END;
END IF;
END LOOP;
EXCEPTION
WHEN OTHERS
THEN
lv_err_flag := 'E';
lv_err_msg :=
lv_err_msg
|| 'Error in launch program for requisition import'
|| ''
|| SQLERRM
|| '<br>'
|| CHR (10);
END launch_reqimport_program;

/***************************END OF IMPORT
PROCEDURE****************************************************/

/***************************START OF MAIN
PROCEDURE******************************************************/

PROCEDURE main (p_le IN varchar2,


p_xml IN xmltype,
x_interface_id OUT NUMBER,
x_return_status OUT VARCHAR2,
x_msg_data OUT VARCHAR2
)
IS

lv_parameter_list wf_parameter_list_t;
p_req_intr_tbl REQ_INTR_TBL;

l_request_id number;
ln_index number :=1;

--lv_org_id number;

BEGIN

AUTHENTICATE_ACCESS (p_le, 'PO_REQ');


lv_org_id := fnd_profile.VALUE ('ORG_ID');

BEGIN

SELECT xxtln.xxtln_i2_interface_logs_s.NEXTVAL
INTO l_interface_id
FROM DUAL;

---insert data into log

insert_i2_interface_logs (p_interface_id => l_interface_id,


p_creation_date => SYSDATE,
p_app_module => 'PO_REQ',
p_request_id => NULL,
p_data_object1 => p_xml.getClobVal (),
p_data_object2 => NULL,
p_i2_id => 0,
p_status => 'IP',
p_comments => NULL,
p_i2_ack => 'N',
p_le_code => p_le,
p_last_update_date => SYSDATE);

EXCEPTION
WHEN OTHERS
THEN
x_interface_id := l_interface_id;
x_return_status := 'REJECTED';
x_msg_data :=
'xxtln_i2_req.main: error while inserting data into Log table '
|| SUBSTR (SQLERRM, 1, 250);

update_i2_interface_logs (l_interface_id,
x_return_status,
x_msg_data,
l_request_id);
RETURN;
END;

for req_rec in (
SELECT
EXTRACTVALUE (VALUE (p), '/row/ TRANSACTION_ID/text()') AS TRANSACTION_ID,
EXTRACTVALUE (VALUE (p), '/row/ PROCESS_FLAG/text()') AS PROCESS_FLAG,
EXTRACTVALUE (VALUE (p), '/row/ REQUEST_ID/text()') AS REQUEST_ID,
EXTRACTVALUE (VALUE (p), '/row/ PROGRAM_ID/text()') AS PROGRAM_ID,
EXTRACTVALUE (VALUE (p), '/row/ PROGRAM_APPLICATION_ID/text()') AS
PROGRAM_APPLICATION_ID,
EXTRACTVALUE (VALUE (p), '/row/ PROGRAM_UPDATE_DATE/text()') AS
PROGRAM_UPDATE_DATE,
EXTRACTVALUE (VALUE (p), '/row/ LAST_UPDATED_BY/text()') AS
LAST_UPDATED_BY,
EXTRACTVALUE (VALUE (p), '/row/ LAST_UPDATE_DATE/text()') AS
LAST_UPDATE_DATE,
EXTRACTVALUE (VALUE (p), '/row/ LAST_UPDATE_LOGIN/text()') AS
LAST_UPDATE_LOGIN,
EXTRACTVALUE (VALUE (p), '/row/ CREATION_DATE/text()') AS
CREATION_DATE,
EXTRACTVALUE (VALUE (p), '/row/ CREATED_BY/text()') AS CREATED_BY,
EXTRACTVALUE (VALUE (p), '/row/ INTERFACE_SOURCE_CODE/text()') AS
INTERFACE_SOURCE_CODE,
EXTRACTVALUE (VALUE (p), '/row/ SOURCE_TYPE_CODE/text()') AS
SOURCE_TYPE_CODE,
EXTRACTVALUE (VALUE (p), '/row/ REQUISITION_LINE_ID/text()') AS
REQUISITION_LINE_ID,
EXTRACTVALUE (VALUE (p), '/row/ REQ_DISTRIBUTION_ID/text()') AS
REQ_DISTRIBUTION_ID,
EXTRACTVALUE (VALUE (p), '/row/ REQUISITION_TYPE/text()') AS
REQUISITION_TYPE,
EXTRACTVALUE (VALUE (p), '/row/ DESTINATION_TYPE_CODE/text()') AS
DESTINATION_TYPE_CODE,
EXTRACTVALUE (VALUE (p), '/row/ ITEM_DESCRIPTION/text()') AS
ITEM_DESCRIPTION,
EXTRACTVALUE (VALUE (p), '/row/ QUANTITY /text()') AS QUANTITY ,
EXTRACTVALUE (VALUE (p), '/row/ UNIT_PRICE /text()') AS UNIT_PRICE ,
EXTRACTVALUE (VALUE (p), '/row/ AUTHORIZATION_STATUS /text()') AS
AUTHORIZATION_STATUS ,
EXTRACTVALUE (VALUE (p), '/row/ BATCH_ID /text()') AS BATCH_ID ,
EXTRACTVALUE (VALUE (p), '/row/ APPROVER_ID /text()') AS APPROVER_ID ,
EXTRACTVALUE (VALUE (p), '/row/ PREPARER_ID /text()') AS PREPARER_ID ,
EXTRACTVALUE (VALUE (p), '/row/ AUTOSOURCE_FLAG /text()') AS
AUTOSOURCE_FLAG ,
EXTRACTVALUE (VALUE (p), '/row/ HEADER_DESCRIPTION /text()') AS
HEADER_DESCRIPTION ,
EXTRACTVALUE (VALUE (p), '/row/ RFQ_REQUIRED_FLAG /text()') AS
RFQ_REQUIRED_FLAG ,
EXTRACTVALUE (VALUE (p), '/row/ ITEM_ID /text()') AS ITEM_ID ,
EXTRACTVALUE (VALUE (p), '/row/ CATEGORY_ID /text()') AS CATEGORY_ID ,
EXTRACTVALUE (VALUE (p), '/row/ UNIT_OF_MEASURE /text()') AS
UNIT_OF_MEASURE ,
EXTRACTVALUE (VALUE (p), '/row/ UOM_CODE /text()') AS UOM_CODE ,
EXTRACTVALUE (VALUE (p), '/row/ LINE_TYPE_ID /text()') AS
LINE_TYPE_ID ,
EXTRACTVALUE (VALUE (p), '/row/ PROJECT_NUM /text()') AS PROJECT_NUM ,
EXTRACTVALUE (VALUE (p), '/row/ TASK_NUM /text()') AS TASK_NUM ,
EXTRACTVALUE (VALUE (p), '/row/ EXPENDITURE_TYPE /text()') AS
EXPENDITURE_TYPE ,
EXTRACTVALUE (VALUE (p), '/row/ DESTINATION_ORGANIZATION_ID /text()') AS
DESTINATION_ORGANIZATION_ID ,
EXTRACTVALUE (VALUE (p), '/row/ DELIVER_TO_LOCATION_ID /text()') AS
DELIVER_TO_LOCATION_ID ,
EXTRACTVALUE (VALUE (p), '/row/ DELIVER_TO_REQUESTOR_ID /text()') AS
DELIVER_TO_REQUESTOR_ID ,
EXTRACTVALUE (VALUE (p), '/row/ SUGGESTED_BUYER_ID /text()') AS
SUGGESTED_BUYER_ID ,
EXTRACTVALUE (VALUE (p), '/row/ SUGGESTED_BUYER_NAME /text()') AS
SUGGESTED_BUYER_NAME ,
EXTRACTVALUE (VALUE (p), '/row/ SUGGESTED_VENDOR_NAME /text()') AS
SUGGESTED_VENDOR_NAME ,
EXTRACTVALUE (VALUE (p), '/row/ SUGGESTED_VENDOR_ID /text()') AS
SUGGESTED_VENDOR_ID ,
EXTRACTVALUE (VALUE (p), '/row/ SUGGESTED_VENDOR_SITE /text()') AS
SUGGESTED_VENDOR_SITE ,
EXTRACTVALUE (VALUE (p), '/row/ SUGGESTED_VENDOR_SITE_ID /text()') AS
SUGGESTED_VENDOR_SITE_ID ,
EXTRACTVALUE (VALUE (p), '/row/ SUGGESTED_VENDOR_ITEM_NUM /text()') AS
SUGGESTED_VENDOR_ITEM_NUM ,
EXTRACTVALUE (VALUE (p), '/row/ LINE_ATTRIBUTE5 /text()') AS
LINE_ATTRIBUTE5 ,
EXTRACTVALUE (VALUE (p), '/row/ LINE_ATTRIBUTE6 /text()') AS
LINE_ATTRIBUTE6 ,
EXTRACTVALUE (VALUE (p), '/row/ LINE_ATTRIBUTE7 /text()') AS
LINE_ATTRIBUTE7 ,
EXTRACTVALUE (VALUE (p), '/row/ LINE_ATTRIBUTE8 /text()') AS
LINE_ATTRIBUTE8 ,
EXTRACTVALUE (VALUE (p), '/row/ LINE_ATTRIBUTE9 /text()') AS
LINE_ATTRIBUTE9 ,
EXTRACTVALUE (VALUE (p), '/row/ NEED_BY_DATE /text()') AS
NEED_BY_DATE ,
EXTRACTVALUE (VALUE (p), '/row/ NOTE1_ID /text()') AS NOTE1_ID ,
EXTRACTVALUE (VALUE (p), '/row/ DISTRIBUTION_ATTRIBUTE14 /text()') AS
DISTRIBUTION_ATTRIBUTE14 ,
EXTRACTVALUE (VALUE (p), '/row/ DISTRIBUTION_ATTRIBUTE15 /text()') AS
DISTRIBUTION_ATTRIBUTE15 ,
EXTRACTVALUE (VALUE (p), '/row/ ACCRUAL_ACCOUNT_ID /text()') AS
ACCRUAL_ACCOUNT_ID ,
EXTRACTVALUE (VALUE (p), '/row/ CURRENCY_CODE /text()') AS
CURRENCY_CODE ,
EXTRACTVALUE (VALUE (p), '/row/ CURRENCY_UNIT_PRICE /text()') AS
CURRENCY_UNIT_PRICE ,
EXTRACTVALUE (VALUE (p), '/row/ RATE /text()') AS RATE ,
EXTRACTVALUE (VALUE (p), '/row/ RATE_DATE /text()') AS RATE_DATE ,
EXTRACTVALUE (VALUE (p), '/row/ RATE_TYPE /text()') AS RATE_TYPE ,
EXTRACTVALUE (VALUE (p), '/row/ AUTOSOURCE_DOC_HEADER_ID /text()') AS
AUTOSOURCE_DOC_HEADER_ID ,
EXTRACTVALUE (VALUE (p), '/row/ AUTOSOURCE_DOC_LINE_NUM /text()') AS
AUTOSOURCE_DOC_LINE_NUM ,
EXTRACTVALUE (VALUE (p), '/row/ PROJECT_ACCOUNTING_CONTEXT /text()') AS
PROJECT_ACCOUNTING_CONTEXT ,
EXTRACTVALUE (VALUE (p), '/row/ EXPENDITURE_ORGANIZATION_ID /text()') AS
EXPENDITURE_ORGANIZATION_ID ,
EXTRACTVALUE (VALUE (p), '/row/ PROJECT_ID /text()') AS PROJECT_ID ,
EXTRACTVALUE (VALUE (p), '/row/ TASK_ID /text()') AS TASK_ID ,
EXTRACTVALUE (VALUE (p), '/row/ EXPENDITURE_ITEM_DATE /text()') AS
EXPENDITURE_ITEM_DATE ,
EXTRACTVALUE (VALUE (p), '/row/ DOCUMENT_TYPE_CODE /text()') AS
DOCUMENT_TYPE_CODE ,
EXTRACTVALUE (VALUE (p), '/row/ ORG_ID /text()') AS ORG_ID ,
EXTRACTVALUE (VALUE (p), '/row/ EMERGENCY_PO_NUM /text()') AS
EMERGENCY_PO_NUM
FROM TABLE(XMLSEQUENCE(EXTRACT(p_xml, '/ReqImport/row'))) p )
loop
--p_req_intr_tbl(ln_index).TRANSACTION_ID:= req_rec.TRANSACTION_ID;
p_req_intr_tbl(ln_index).PROCESS_FLAG:= req_rec.PROCESS_FLAG;
--p_req_intr_tbl(ln_index).REQUEST_ID:= req_rec.REQUEST_ID;
--p_req_intr_tbl(ln_index).PROGRAM_ID:= req_rec.PROGRAM_ID;
--p_req_intr_tbl(ln_index).PROGRAM_APPLICATION_ID:=
req_rec.PROGRAM_APPLICATION_ID;
--p_req_intr_tbl(ln_index).PROGRAM_UPDATE_DATE:=
req_rec.PROGRAM_UPDATE_DATE;
--p_req_intr_tbl(ln_index).LAST_UPDATED_BY:= req_rec.LAST_UPDATED_BY;
--p_req_intr_tbl(ln_index).LAST_UPDATE_DATE:= req_rec.LAST_UPDATE_DATE;
--p_req_intr_tbl(ln_index).LAST_UPDATE_LOGIN:=
req_rec.LAST_UPDATE_LOGIN;
--p_req_intr_tbl(ln_index).CREATION_DATE:= req_rec.CREATION_DATE;
--p_req_intr_tbl(ln_index).CREATED_BY:= req_rec.CREATED_BY;
p_req_intr_tbl(ln_index).INTERFACE_SOURCE_CODE:=
req_rec.INTERFACE_SOURCE_CODE;
p_req_intr_tbl(ln_index).SOURCE_TYPE_CODE:= req_rec.SOURCE_TYPE_CODE;
--p_req_intr_tbl(ln_index).REQUISITION_LINE_ID:=
req_rec.REQUISITION_LINE_ID;
--p_req_intr_tbl(ln_index).REQ_DISTRIBUTION_ID:=
req_rec.REQ_DISTRIBUTION_ID;
p_req_intr_tbl(ln_index).REQUISITION_TYPE:= req_rec.REQUISITION_TYPE;
p_req_intr_tbl(ln_index).DESTINATION_TYPE_CODE:=
req_rec.DESTINATION_TYPE_CODE;
p_req_intr_tbl(ln_index).ITEM_DESCRIPTION:= req_rec.ITEM_DESCRIPTION;
p_req_intr_tbl(ln_index).QUANTITY:= req_rec.QUANTITY;
p_req_intr_tbl(ln_index).UNIT_PRICE:= req_rec.UNIT_PRICE;
p_req_intr_tbl(ln_index).AUTHORIZATION_STATUS:=
req_rec.AUTHORIZATION_STATUS;
--p_req_intr_tbl(ln_index).BATCH_ID:= req_rec.BATCH_ID;
--p_req_intr_tbl(ln_index).APPROVER_ID:= req_rec.APPROVER_ID;
--p_req_intr_tbl(ln_index).PREPARER_ID:= req_rec.PREPARER_ID;
p_req_intr_tbl(ln_index).AUTOSOURCE_FLAG:= req_rec.AUTOSOURCE_FLAG;
p_req_intr_tbl(ln_index).HEADER_DESCRIPTION:=
req_rec.HEADER_DESCRIPTION;
p_req_intr_tbl(ln_index).RFQ_REQUIRED_FLAG:= req_rec.RFQ_REQUIRED_FLAG;
--p_req_intr_tbl(ln_index).ITEM_ID:= req_rec.ITEM_ID;
--p_req_intr_tbl(ln_index).CATEGORY_ID:= req_rec.CATEGORY_ID;
--p_req_intr_tbl(ln_index).UNIT_OF_MEASURE:= req_rec.UNIT_OF_MEASURE;
p_req_intr_tbl(ln_index).UOM_CODE:= req_rec.UOM_CODE;
--p_req_intr_tbl(ln_index).LINE_TYPE_ID:= req_rec.LINE_TYPE_ID;
p_req_intr_tbl(ln_index).PROJECT_NUM:= req_rec.PROJECT_NUM;
p_req_intr_tbl(ln_index).TASK_NUM:= req_rec.TASK_NUM;
p_req_intr_tbl(ln_index).EXPENDITURE_TYPE:= req_rec.EXPENDITURE_TYPE;
--p_req_intr_tbl(ln_index).DESTINATION_ORGANIZATION_ID:=
req_rec.DESTINATION_ORGANIZATION_ID;
--p_req_intr_tbl(ln_index).DELIVER_TO_LOCATION_ID:=
req_rec.DELIVER_TO_LOCATION_ID;
--p_req_intr_tbl(ln_index).DELIVER_TO_REQUESTOR_ID:=
req_rec.DELIVER_TO_REQUESTOR_ID;
--p_req_intr_tbl(ln_index).SUGGESTED_BUYER_ID:=
req_rec.SUGGESTED_BUYER_ID;
p_req_intr_tbl(ln_index).SUGGESTED_BUYER_NAME:=
req_rec.SUGGESTED_BUYER_NAME;
p_req_intr_tbl(ln_index).SUGGESTED_VENDOR_NAME:=
req_rec.SUGGESTED_VENDOR_NAME;
--p_req_intr_tbl(ln_index).SUGGESTED_VENDOR_ID:=
req_rec.SUGGESTED_VENDOR_ID;
p_req_intr_tbl(ln_index).SUGGESTED_VENDOR_SITE:=
req_rec.SUGGESTED_VENDOR_SITE;
--p_req_intr_tbl(ln_index).SUGGESTED_VENDOR_SITE_ID:=
req_rec.SUGGESTED_VENDOR_SITE_ID;
p_req_intr_tbl(ln_index).SUGGESTED_VENDOR_ITEM_NUM:=
req_rec.SUGGESTED_VENDOR_ITEM_NUM;
p_req_intr_tbl(ln_index).LINE_ATTRIBUTE5:= req_rec.LINE_ATTRIBUTE5;
p_req_intr_tbl(ln_index).LINE_ATTRIBUTE6:= req_rec.LINE_ATTRIBUTE6;
p_req_intr_tbl(ln_index).LINE_ATTRIBUTE7:= req_rec.LINE_ATTRIBUTE7;
p_req_intr_tbl(ln_index).LINE_ATTRIBUTE8:= req_rec.LINE_ATTRIBUTE8;
p_req_intr_tbl(ln_index).LINE_ATTRIBUTE9:= req_rec.LINE_ATTRIBUTE9;
p_req_intr_tbl(ln_index).NEED_BY_DATE:= req_rec.NEED_BY_DATE;
--p_req_intr_tbl(ln_index).NOTE1_ID:= req_rec.NOTE1_ID;
--p_req_intr_tbl(ln_index).DISTRIBUTION_ATTRIBUTE14:=
req_rec.DISTRIBUTION_ATTRIBUTE14;
--p_req_intr_tbl(ln_index).DISTRIBUTION_ATTRIBUTE15:=
req_rec.DISTRIBUTION_ATTRIBUTE15;
--p_req_intr_tbl(ln_index).ACCRUAL_ACCOUNT_ID:=
req_rec.ACCRUAL_ACCOUNT_ID;
p_req_intr_tbl(ln_index).CURRENCY_CODE:= req_rec.CURRENCY_CODE;
p_req_intr_tbl(ln_index).CURRENCY_UNIT_PRICE:=
req_rec.CURRENCY_UNIT_PRICE;
p_req_intr_tbl(ln_index).RATE:= req_rec.RATE;
p_req_intr_tbl(ln_index).RATE_DATE:= req_rec.RATE_DATE;
p_req_intr_tbl(ln_index).RATE_TYPE:= req_rec.RATE_TYPE;
--p_req_intr_tbl(ln_index).AUTOSOURCE_DOC_HEADER_ID:=
req_rec.AUTOSOURCE_DOC_HEADER_ID;
p_req_intr_tbl(ln_index).AUTOSOURCE_DOC_LINE_NUM:=
req_rec.AUTOSOURCE_DOC_LINE_NUM;
p_req_intr_tbl(ln_index).PROJECT_ACCOUNTING_CONTEXT:=
req_rec.PROJECT_ACCOUNTING_CONTEXT;
--p_req_intr_tbl(ln_index).EXPENDITURE_ORGANIZATION_ID:=
req_rec.EXPENDITURE_ORGANIZATION_ID;
--p_req_intr_tbl(ln_index).PROJECT_ID:= req_rec.PROJECT_ID;
--p_req_intr_tbl(ln_index).TASK_ID:= req_rec.TASK_ID;
p_req_intr_tbl(ln_index).EXPENDITURE_ITEM_DATE:=
req_rec.EXPENDITURE_ITEM_DATE;
--p_req_intr_tbl(ln_index).DOCUMENT_TYPE_CODE:=
req_rec.DOCUMENT_TYPE_CODE;
--p_req_intr_tbl(ln_index).ORG_ID:= req_rec.ORG_ID;
--p_req_intr_tbl(ln_index).EMERGENCY_PO_NUM:= req_rec.EMERGENCY_PO_NUM;

end loop;

-----------------------
--INITIALIZE VARIABLE--
-----------------------
lv_err_flag := 'N';

-------------------------
--CALL INSERT PROCEDURE--
-------------------------
XXTLN_REQU_INSERT (p_req_intr_tbl, X_RETURN_STATUS);

--COMMIT;

--------------------------
--CALL UPDATE PROCEDURE--
--------------------------

IF lv_err_flag = 'N'
THEN
XXTLN_REQU_UPDATE (p_req_intr_tbl);
--COMMIT;
END IF;

---------------------------------------
----CALL REQUISITION IMPORT PROGRAM----
---------------------------------------

IF lv_err_flag = 'N'
THEN
launch_reqimport_program;
END IF;
---------------------------------------
----RAISE BUSINESS EVENT FOR ERROR-----
---------------------------------------

IF lv_err_msg IS NOT NULL AND lv_err_flag = 'E'


THEN
lv_parameter_list :=
wf_parameter_list_t (
wf_parameter_t ('INT NAME', 'REQUISITION IMPORT'),
wf_parameter_t ('SOURCE NAME', lv_order_source),
wf_parameter_t ('SEND DATE',
fnd_date.date_to_canonical (SYSDATE)),
wf_parameter_t ('STATUS CODE', 'ERROR'),
wf_parameter_t ('SOLAR ORDER NUMBER', lv_source_order));

wf_event.raise (
p_event_name => 'xxtln.oracle.apps.generic.error.inbound',
p_event_key => SYS_GUID (),
p_event_data => lv_err_msg,
p_parameters => lv_parameter_list);
--COMMIT;
END IF;

x_msg_data := 'PROCESSED';
--p_retcode := 1;
lv_err_msg := NULL;
lv_err_flag := 'N';
END;
/***************************END OF MAIN
PROCEDURE******************************************************/

END XXTLN_I2_REQU_IMPORT_PKG;
/

You might also like