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

Procedure For Open Sales Order

The procedure is used to open sales orders from legacy systems by: 1) Validating header and line item data from staging tables against reference data 2) Inserting validated header and line item records into interface tables to create sales orders in the target system 3) Updating status in staging tables after records are processed

Uploaded by

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

Procedure For Open Sales Order

The procedure is used to open sales orders from legacy systems by: 1) Validating header and line item data from staging tables against reference data 2) Inserting validated header and line item records into interface tables to create sales orders in the target system 3) Updating status in staging tables after records are processed

Uploaded by

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

CREATE TABLE APPS.

KROSS_SO_HEADER_STG
(
LEGACY_SO_NUM VARCHAR2(15 BYTE),
CUSTOMER_NAME VARCHAR2(150 BYTE),
CUSTOMER_NO VARCHAR2(10 BYTE),
BILL_TO VARCHAR2(5 BYTE),
SHIP_TO VARCHAR2(5 BYTE),
TRANSACTION_TYPE VARCHAR2(30 BYTE),
CUSTOMER_PO_NO VARCHAR2(100 BYTE),
ORDER_DATE DATE,
PRICE_LIST VARCHAR2(20 BYTE),
PAYMENT_TERMS VARCHAR2(50 BYTE),
WAREHOUSE VARCHAR2(5 BYTE),
VERIFY_FLAG CHAR(1 BYTE),
ERROR_MESSAGE VARCHAR2(3000 BYTE),
NO_LINES VARCHAR2(1 BYTE)
)

CREATE TABLE APPS.KROSS_SO_LINES_STG


(
LEGACY_SO_NUM VARCHAR2(15 BYTE),
LINE_NUM NUMBER,
ITEM_CODE VARCHAR2(50 BYTE),
UOM VARCHAR2(10 BYTE),
LINE_TYPE VARCHAR2(30 BYTE),
QTY NUMBER(10),
PRICE_UNIT NUMBER(10,2),
REQUEST_DATE DATE,
SCHEDULED_SHIP_DATE DATE,
VERIFY_FLAG CHAR(1 BYTE),
ERROR_MESSAGE VARCHAR2(3000 BYTE),
NO_HEADER VARCHAR2(1 BYTE)
)

Procedure for open sales order

CREATE OR REPLACE PROCEDURE APPS.KROSS_OPEN_SO_API


IS

L_PRICE_LIST QP_LIST_HEADERS_TL.LIST_HEADER_ID%TYPE;
L_VERIFY_FLAG CHAR(1);
L_ERROR_MESSAGE VARCHAR2(3000);
L_TERM_ID RA_TERMS_TL.TERM_ID%TYPE;
L_ORDER_TYPE OE_TRANSACTION_TYPES_TL.TRANSACTION_TYPE_ID%TYPE;
L_ORDER_SOURCE_ID OE_ORDER_SOURCES.ORDER_SOURCE_ID%TYPE;
L_INVENTORY_ITEM_ID MTL_SYSTEM_ITEMS_B.INVENTORY_ITEM_ID%TYPE;
L_ORGANIZATION_ID ORG_ORGANIZATION_DEFINITIONS.ORGANIZATION_ID%TYPE;
L_UOM_CODE MTL_UNITS_OF_MEASURE_VL.UOM_CODE%TYPE;
L_LINE_TYPE_ID OE_TRANSACTION_TYPES_TL.TRANSACTION_TYPE_ID%TYPE;
L_CURRENCY_CODE FND_CURRENCIES_VL.CURRENCY_CODE%TYPE;
L_CUSTOMER_ID RA_CUSTOMERS.CUSTOMER_ID%TYPE;
L_INVOICE_TO_ORGID OE_INVOICE_TO_ORGS_V.ORGANIZATION_ID%TYPE;
L_SHIPTO_ORG_ID OE_SHIP_TO_ORGS_V.ORGANIZATION_ID%TYPE;
L_ORG_ID HR_OPERATING_UNITS.ORGANIZATION_ID%TYPE;
L_USER_ID FND_USER.USER_ID%TYPE;
L_SHIP_TO_ORG_ID NUMBER(10);
L_BILL_TO_ORG_ID NUMBER(10);

CURSOR C_HEADER
IS
SELECT *
FROM KROSS_SO_HEADER_STG
WHERE NVL(VERIFY_FLAG,'N') = 'N' ;

CURSOR C_LINES(P_LEGACY_SO_NUM VARCHAR2)


IS SELECT *
FROM KROSS_SO_LINES_STG
WHERE LEGACY_SO_NUM = P_LEGACY_SO_NUM
AND NVL(VERIFY_FLAG,'N') = 'N';

BEGIN

FOR H1 IN C_HEADER LOOP


L_ERROR_MESSAGE := NULL;
L_VERIFY_FLAG := 'Y';

BEGIN
SELECT ORGANIZATION_ID
INTO L_ORG_ID
FROM HR_OPERATING_UNITS
WHERE NAME = 'KMPL - PHASE VI';
EXCEPTION
WHEN OTHERS THEN
L_VERIFY_FLAG := 'N';
L_ERROR_MESSAGE := 'OPERATING UNIT IS INVALID';
END;

BEGIN
SELECT LIST_HEADER_ID
INTO L_PRICE_LIST
FROM QP_LIST_HEADERS_TL
WHERE UPPER(NAME) = UPPER('Kross_Domestic');
EXCEPTION
WHEN OTHERS THEN
L_VERIFY_FLAG := 'N';
L_ERROR_MESSAGE := L_ERROR_MESSAGE||'PRICE LIST IS NOT VALID';
END;

BEGIN
SELECT TERM_ID
INTO L_TERM_ID
FROM RA_TERMS_TL
WHERE UPPER(NAME) = UPPER(TRIM(H1.PAYMENT_TERMS));
EXCEPTION
WHEN OTHERS THEN
L_VERIFY_FLAG := 'N';
L_ERROR_MESSAGE := L_ERROR_MESSAGE||'PAYMENT TERM ID IS NOT VALID';
END;

BEGIN /* ORDER TYPE */


SELECT TRANSACTION_TYPE_ID
INTO L_ORDER_TYPE
FROM OE_TRANSACTION_TYPES_TL
WHERE UPPER(NAME) = TRIM(UPPER(H1.TRANSACTION_TYPE));
EXCEPTION
WHEN OTHERS THEN
L_VERIFY_FLAG := 'N';
L_ERROR_MESSAGE := L_ERROR_MESSAGE||'ORDER TRANSACTION TYPE IS NOT
VALID';
END;

BEGIN
SELECT ORDER_SOURCE_ID
INTO L_ORDER_SOURCE_ID
FROM OE_ORDER_SOURCES
WHERE NAME = 'ONLINE' ;
EXCEPTION
WHEN OTHERS THEN
L_VERIFY_FLAG := 'N';
L_ERROR_MESSAGE := L_ERROR_MESSAGE||'ORDER SOURCE IS NOT VALID';
END;

BEGIN
SELECT ORGANIZATION_ID
INTO L_ORGANIZATION_ID
FROM ORG_ORGANIZATION_DEFINITIONS
WHERE ORGANIZATION_CODE = TRIM(H1.WAREHOUSE);
EXCEPTION
WHEN OTHERS THEN
L_VERIFY_FLAG := 'N';
L_ERROR_MESSAGE := L_ERROR_MESSAGE||' ORGANIZATION_ID IS NOT VALID';
END;

BEGIN
SELECT CUSTOMER_ID
INTO L_CUSTOMER_ID --SOLD TO ORGID
FROM RA_CUSTOMERS
WHERE UPPER(CUSTOMER_NAME) = TRIM(UPPER(H1.CUSTOMER_NAME))
AND STATUS = 'A';
EXCEPTION
WHEN OTHERS THEN
L_VERIFY_FLAG := 'N';
L_ERROR_MESSAGE := L_ERROR_MESSAGE||'CUSTOMER NAME NOT VALID';
END;

BEGIN
SELECT USER_ID
INTO L_USER_ID
FROM FND_USER
WHERE USER_NAME = 'CONACENT' ;
EXCEPTION
WHEN OTHERS THEN
L_VERIFY_FLAG := 'N';
L_ERROR_MESSAGE := L_ERROR_MESSAGE||'USER NAME IS INVALID';
END;

BEGIN
SELECT SHIP_SU.SITE_USE_ID
INTO L_SHIP_TO_ORG_ID
FROM HZ_CUST_SITE_USES_ALL SHIP_SU,
HZ_CUST_ACCT_SITES_ALL SHIP_CAS,
HZ_PARTY_SITES SHIP_PS
WHERE SHIP_SU.ORG_ID = L_ORG_ID
AND SHIP_SU.ORG_ID = SHIP_CAS.ORG_ID
AND SHIP_SU.LOCATION = TRIM(H1.SHIP_TO)
AND SHIP_SU.CUST_ACCT_SITE_ID = SHIP_CAS.CUST_ACCT_SITE_ID(+)
AND SHIP_CAS.PARTY_SITE_ID = SHIP_PS.PARTY_SITE_ID(+)
AND SHIP_PS.PARTY_SITE_ID IN (SELECT PARTY_SITE_ID
FROM HZ_PARTY_SITES
WHERE PARTY_ID = (SELECT PARTY_ID
FROM hz_parties
WHERE PARTY_ID = L_CUSTOMER_ID
AND STATUS = 'A'));
EXCEPTION
WHEN OTHERS THEN
L_VERIFY_FLAG := 'N';
L_ERROR_MESSAGE := L_ERROR_MESSAGE||'INVALID SHIP TO';
END;

BEGIN
SELECT SHIP_SU.SITE_USE_ID
INTO L_BILL_TO_ORG_ID
FROM HZ_CUST_SITE_USES_ALL SHIP_SU,
HZ_CUST_ACCT_SITES_ALL SHIP_CAS,
HZ_PARTY_SITES SHIP_PS
WHERE SHIP_SU.ORG_ID = L_ORG_ID
AND SHIP_SU.ORG_ID = SHIP_CAS.ORG_ID
AND SHIP_SU.LOCATION = TRIM(H1.BILL_TO)
AND SHIP_SU.CUST_ACCT_SITE_ID = SHIP_CAS.CUST_ACCT_SITE_ID(+)
AND SHIP_CAS.PARTY_SITE_ID = SHIP_PS.PARTY_SITE_ID(+)
AND SHIP_PS.PARTY_SITE_ID IN (SELECT PARTY_SITE_ID
FROM HZ_PARTY_SITES
WHERE PARTY_ID = (SELECT PARTY_ID
FROM HZ_PARTIES
WHERE PARTY_ID = L_CUSTOMER_ID
AND STATUS = 'A'));
EXCEPTION
WHEN OTHERS THEN
L_VERIFY_FLAG := 'N';
L_ERROR_MESSAGE := L_ERROR_MESSAGE||'INVALID BILL TO';
END;

IF L_VERIFY_FLAG <> 'N' THEN

BEGIN

INSERT INTO OE_HEADERS_IFACE_ALL


(
ORDER_SOURCE_ID
,ORIG_SYS_DOCUMENT_REF
,ORG_ID
,SOLD_FROM_ORG_ID
,SHIP_FROM_ORG_ID
,ORDERED_DATE
,ORDER_TYPE_ID
,SOLD_TO_ORG_ID
,PAYMENT_TERM_ID
,OPERATION_CODE
,CREATED_BY
,CREATION_DATE
,LAST_UPDATED_BY
,LAST_UPDATE_DATE
,CUSTOMER_PO_NUMBER
,PRICE_LIST_ID
,CONTEXT
,ATTRIBUTE19
,SHIP_TO_ORG_ID
,INVOICE_TO_ORG_ID
)
VALUES
(
L_ORDER_SOURCE_ID --ORDER_SOURCE_ID
,OE_ORDER_HEADERS_S.NEXTVAL --ORIG_SYS_DOCUMENT_REF
,L_ORG_ID --ORG_ID
,L_ORG_ID --SOLD_FROM_ORG_ID
,L_ORGANIZATION_ID --SHIP_FROM_ORG_ID
,TRIM(H1.ORDER_DATE) --ORDERED_DATE
,L_ORDER_TYPE --ORDER_TYPE_ID
,L_CUSTOMER_ID --SOLD_TO_ORG_ID
,L_TERM_ID --PAYMENT_TERM_ID
,'CREATE' --OPERATION_CODE
,L_USER_ID --CREATED_BY
,SYSDATE --CREATION_DATE
,L_USER_ID --LAST_UPDATED_BY
,SYSDATE --LAST_UPDATE_DATE
,NULL --CUSTOMER_PO_NUMBER
,L_PRICE_LIST --PRICE_LIST_ID
,'LEGACY SO NUMBER'
,TRIM(H1.LEGACY_SO_NUM)
,L_SHIP_TO_ORG_ID
,L_BILL_TO_ORG_ID
);

UPDATE KROSS_SO_HEADER_STG
SET VERIFY_FLAG = 'Y'
WHERE CUSTOMER_NAME = H1.CUSTOMER_NAME
AND LEGACY_SO_NUM = H1.LEGACY_SO_NUM;

EXCEPTION
WHEN OTHERS THEN
L_ERROR_MESSAGE := SQLERRM;
L_VERIFY_FLAG := 'N';

UPDATE KROSS_SO_HEADER_STG
SET VERIFY_FLAG = 'N',
ERROR_MESSAGE = 'HEADER ERROR'||L_ERROR_MESSAGE
WHERE CUSTOMER_NAME = H1.CUSTOMER_NAME
AND LEGACY_SO_NUM = H1.LEGACY_SO_NUM;

--GOTO NEXT_SO;
END;

------------------LINE DETAILS ---------------------

FOR L1 IN C_LINES (H1.LEGACY_SO_NUM)LOOP

BEGIN
SELECT INVENTORY_ITEM_ID
INTO L_INVENTORY_ITEM_ID
FROM MTL_SYSTEM_ITEMS_B
WHERE UPPER(SEGMENT1||'.'||SEGMENT2||'.'||SEGMENT3||'.'||SEGMENT4) =
TRIM(UPPER(L1.ITEM_CODE))
AND ORGANIZATION_ID = L_ORGANIZATION_ID ;
EXCEPTION
WHEN OTHERS THEN
L_VERIFY_FLAG := 'N';
L_ERROR_MESSAGE := L_ERROR_MESSAGE||'ITEM NAME IS NOT EXISTING';
END;

BEGIN
SELECT UOM_CODE
INTO L_UOM_CODE
FROM MTL_UNITS_OF_MEASURE_VL
WHERE UOM_CODE = TRIM(UPPER(L1.UOM));
EXCEPTION
WHEN OTHERS THEN
L_VERIFY_FLAG := 'N';
L_ERROR_MESSAGE := L_ERROR_MESSAGE||'UOM IS NOT VALID';
END;

BEGIN
SELECT TRANSACTION_TYPE_ID
INTO L_LINE_TYPE_ID
FROM OE_TRANSACTION_TYPES_TL
WHERE NAME = TRIM(UPPER(L1.LINE_TYPE));
EXCEPTION
WHEN OTHERS THEN
L_VERIFY_FLAG := 'N' ;
L_ERROR_MESSAGE := L_ERROR_MESSAGE||'LINE TYPE IS NOT VALID';
END;

IF L_VERIFY_FLAG <> 'N' THEN

BEGIN

INSERT INTO OE_LINES_IFACE_ALL


(
ORDER_SOURCE_ID
,ORIG_SYS_DOCUMENT_REF
,ORIG_SYS_LINE_REF
,LINE_NUMBER
,INVENTORY_ITEM_ID
,ORDERED_QUANTITY
,SHIP_FROM_ORG_ID
,ORG_ID
,PRICING_QUANTITY
,UNIT_SELLING_PRICE
,UNIT_LIST_PRICE
,PRICE_LIST_ID
,PAYMENT_TERM_ID
,SCHEDULE_SHIP_DATE
,REQUEST_DATE
,CREATED_BY
,CREATION_DATE
,LAST_UPDATED_BY
,LAST_UPDATE_DATE
,LINE_TYPE_ID
,CALCULATE_PRICE_FLAG
)
VALUES
(
L_ORDER_SOURCE_ID --ORDER_SOURCE_ID
,OE_ORDER_HEADERS_S.CURRVAL --ORIG_SYS_DOCUMENT_REF
,OE_ORDER_LINES_S.NEXTVAL --ORIG_SYS_LINE_REF
,TRIM(L1.LINE_NUM) --LINE_NUMBER
,L_INVENTORY_ITEM_ID --INVENTORY_ITEM_ID
,TRIM(L1.QTY) --ORDERED_QUANTITY
,L_ORGANIZATION_ID --SHIP_FROM_ORG_ID
,L_ORG_ID --SHIP_FROM_ORG_ID
,TRIM(L1.QTY) --PRICING_QUANTITY
,TRIM(L1.PRICE_UNIT) --UNIT_SELLING_PRICE
,TRIM(L1.PRICE_UNIT) --UNIT_LIST_PRICE
,L_PRICE_LIST --PRICE_LIST_ID
,L_TERM_ID --PAYMENT_TERM_ID
,TO_DATE(L1.SCHEDULED_SHIP_DATE,'DD-MON-RRRR') --SCHEDULE_SHIP_DATE
,TO_DATE(L1.REQUEST_DATE,'DD-MON-RRRR') --REQUEST_DATE
,L_USER_ID --CREATED_BY
,SYSDATE --CREATION_DATE
,L_USER_ID --LAST_UPDATED_BY
,SYSDATE --LAST_UPDATE_DATE
,L_LINE_TYPE_ID --LINE_TYPE_ID
,'N'
);

UPDATE KROSS_SO_LINES_STG
SET VERIFY_FLAG = 'Y'
WHERE LEGACY_SO_NUM = L1.LEGACY_SO_NUM
AND ITEM_CODE = L1.ITEM_CODE;

EXCEPTION
WHEN OTHERS THEN
--ROLLBACK TO A;
L_ERROR_MESSAGE := SQLERRM;

UPDATE KROSS_SO_LINES_STG
SET VERIFY_FLAG = 'N',
ERROR_MESSAGE = 'LINE ERROR'||L_ERROR_MESSAGE
WHERE LEGACY_SO_NUM = L1.LEGACY_SO_NUM
AND ITEM_CODE = L1.ITEM_CODE;

UPDATE KROSS_SO_HEADER_STG
SET VERIFY_FLAG = 'N'
WHERE LEGACY_SO_NUM = L1.LEGACY_SO_NUM;

--GOTO NEXT_SO;
END;

ELSE
UPDATE KROSS_SO_LINES_STG
SET VERIFY_FLAG = 'N',
ERROR_MESSAGE = L_ERROR_MESSAGE
WHERE LEGACY_SO_NUM = L1.LEGACY_SO_NUM
AND ITEM_CODE = L1.ITEM_CODE;

UPDATE KROSS_SO_HEADER_STG
SET VERIFY_FLAG = 'N'
WHERE LEGACY_SO_NUM = L1.LEGACY_SO_NUM;

END IF;

END LOOP ;

ELSE

UPDATE KROSS_SO_HEADER_STG
SET VERIFY_FLAG = 'N',
ERROR_MESSAGE = L_ERROR_MESSAGE
WHERE LEGACY_SO_NUM = H1.LEGACY_SO_NUM;

END IF;

COMMIT;
END LOOP;

END;
/

You might also like