Professional Documents
Culture Documents
XXMSSL QP Price List PKG
XXMSSL QP Price List PKG
XXMSSL QP Price List PKG
/*******************************************************************************
*******
REM Copyright (c) 2009 Motherson Sumi Systems Ltd. All rights reserved.
REM ****************************************************************************
*******
REM Source Code Control Hdr :
REM File name : XXMSSLQPPRICELISTPKG.pks
REM Doc Ref(s): CV060_Price list_Conversion1A
REM Project : MOLTS Project
REM Description : Price List Conversion
REM
REM Change History Information
REM --------------------------
REM Version Date Author Change Reference / Description
REM ------- ----------- -------- ----- ---------------------------------
-------
REM 1.0 09-MAR-2010 Manoj Kumar Pirce List Package Specification that
includes
REM the procedures for validation and impor
t.
REM
REM ****************************************************************************
***/
IS
------------------------------------------------------------------------------
---------------------------------------------------
-- Procedure : P_PRICE_LIST_VALIDATE
-- Description : This procedure is called by the executable of the concurrent
program 'XXMSSL:QP-validates Price list information'.
-- This Procedure validate the data coming from legacy system an
d import into stage 2 tables.
-- Only the eligible records from the staging table are imported
into stage 2 tables.
-- The error messages are displayed in the log file of the concu
rrent program.
--
-- Parameters :
-- i) errbuf OUT VARCHAR2 : Required by concurrent
program manager for reporting exit message
-- ii) retcode OUT NUMBER : Required by concurrent
program manager for reporting exit status
------------------------------------------------------------------------------
-----------------------------------------------------
PROCEDURE P_PRICE_LIST_VALIDATE (errbuf OUT VARCHAR2
,retcode OUT NUMBER
);
------------------------------------------------------------------------------
--------------------------------------------
-- Procedure : P_PRICE_LIST_UPLOAD
-- Description : This procedure is called by the executable of the concurrent
program 'XXMSSL:QP-transfer Price list to interface'.
-- This procedure pick the validated data from staging tables an
d upload into interface tables.
-- The error messages are displayed in the log file of the concu
rrent program.
--
-- Parameters :
-- i) retcode OUT NUMBER : Required by concurren
t program manager for reporting exit status
-- ii) errbuf OUT VARCHAR2 : Required by concurren
t program manager for reporting exit message
------------------------------------------------------------------------------
---------------------------------------------
PROCEDURE P_PRICE_LIST_UPLOAD (errbuf OUT VARCHAR2
,retcode OUT NUMBER
);
END XXMSSL_QP_PRICE_LIST_PKG;
/
CREATE OR REPLACE PACKAGE BODY XXMSSL_QP_PRICE_LIST_PKG
/*******************************************************************************
*******
REM Copyright (c) 2009 Motherson Sumi Systems Ltd. All rights reserved.
REM ****************************************************************************
*******
REM Source Code Control Hdr :
REM File name : XXMSSLQPPRICELISTPKG.pkb
REM Doc Ref(s) : CV060_Price list_Conversion1A
REM Project : MOLTS Project
REM Description : Price List Conversion
REM
REM Change History Information
REM --------------------------
REM Version Date Author Change Reference / Description
REM ------- ----------- --------------- -------------------------------------
---
REM 1.0 09-MAR-2010 Manoj Kumar Pirce List Package Body that include
s
REM the procedures for validation and upl
oad..
REM
REM ****************************************************************************
***/
IS
------------------------------------------------------------------------------
---------------------------------------------------
-- Procedure : P_PRICE_LIST_VALIDATE
-- Description : This procedure is called by the executable of the concurrent
program 'XXMSSL:QP-validates Price list information'.
-- This Procedure validate the data coming from legacy system an
d import into stage 2 tables before importing into interface table.
-- * Only the eligible records from the staging table are impor
ted into interface table.
-- * The error messages are displayed in the log file of the
concurrent program.
--
-- Parameters :
-- i) retcode OUT NUMBER : Required by concurre
nt program manager for reporting exit status
-- ii) errbuff OUT VARCHAR2 : Required by concurre
nt program manager for reporting exit message
------------------------------------------------------------------------------
-----------------------------------------------------
PROCEDURE P_PRICE_LIST_VALIDATE (errbuf OUT VARCHAR2
,retcode OUT NUMBER
)
IS
-- CURSOR DEFINITIONS
CURSOR lcu_price_hdr
IS
SELECT rowid
,price_list_name
,description
,currency
,round_to
,customer_name
,customer_number
FROM XXMSSL_QP_PRICE_LST_HDR_STG
WHERE record_status='NEW';
CURSOR lcu_price_line(lc_price_list VARCHAR2)
IS
SELECT rowid
,price_list_name
,mssl_item_code
,product_value
,product_description
,customer_item_code
,uom
FROM XXMSSL_QP_PRICE_LST_LINE_STG b
WHERE price_list_name=lc_price_list
AND record_status='NEW';
--DEFINE LOCAL VARIABLES-BEGIN
ln_err_flag NUMBER;
lc_name VARCHAR2(240);
lc_currency_code VARCHAR2(30);
ln_round_to NUMBER;
lc_name_l VARCHAR2(240);
lc_profile_option_name VARCHAR2(80);
lc_organization_code VARCHAR2(100);
lc_uom_code VARCHAR2(3);
lc_base_uom_flag VARCHAR2(1);
lc_uom_class VARCHAR2(10);
ln_conversion_rate NUMBER;
ln_product_value NUMBER;
ln_cust_account_id NUMBER;
lc_product_attr_val_disp VARCHAR2(40);
ln_count NUMBER;
ln_cust_item_id NUMBER;
ln_request_id NUMBER := FND_GLOBAL.CONC_REQUEST_ID ;
ln number;
--DEFINE LOCAL VARIABLES-END
BEGIN
FND_MESSAGE.CLEAR;
FOR lr_header IN lcu_price_hdr
LOOP
ln_err_flag := 1;
lc_name :=NULL;
lc_currency_code :=NULL;
ln_round_to :=NULL;
lc_name_l :=NULL;
lc_profile_option_name :=NULL;
lc_organization_code :=NULL;
lc_uom_code :=NULL;
lc_base_uom_flag :=NULL;
lc_uom_class :=NULL;
ln_conversion_rate :=NULL;
ln_product_value :=NULL;
ln_cust_account_id :=NULL;
lc_product_attr_val_disp :=NULL;
ln_count :=NULL;
-----PRICE LIST NAME VALIDATION-----
IF lr_header.price_list_name IS NULL THEN
FND_FILE.PUT_LINE (FND_FILE.LOG, 'price list name is null :');
ln_err_flag := 2;
UPDATE XXMSSL_QP_PRICE_LST_HDR_STG
SET record_status='ERROR'
,err_msg='price list name is null'
,request_id=ln_request_id
WHERE price_list_name=lr_header.price_list_name
AND rowid=lr_header.rowid;
INSERT INTO XXMSSL_QP_CONV_ERRORS
( price_list_name
, customer_name
, record_status
, err_msg
, conversion_date
, request_id
)
VALUES ( lr_header.price_list_name
, lr_header.customer_name
, 'ERROR'
, 'price list name is null --(HEADER)'
, SYSDATE
, ln_request_id
);
ELSE
BEGIN
ln_count:=0;
SELECT COUNT(name)
INTO ln_count
FROM QP_LIST_HEADERS_TL
WHERE UPPER(name)=UPPER(lr_header.price_list_name);
IF nvl(ln_count,0)>0 THEN
FND_FILE.PUT_LINE (FND_FILE.LOG,'price list already exist in pricing
application :-- '||lr_header.price_list_name);
ln_err_flag := 2;
UPDATE XXMSSL_QP_PRICE_LST_HDR_STG
SET record_status='ERROR'
,err_msg='price list name already exist in pricing application'
, request_id=ln_request_id
WHERE price_list_name=lr_header.price_list_name
AND rowid=lr_header.rowid;
INSERT INTO XXMSSL_QP_CONV_ERRORS
( price_list_name
, customer_name
, record_status
, err_msg
, conversion_date
, request_id
)
VALUES ( lr_header.price_list_name
, lr_header.customer_name
, 'ERROR'
, 'price list already exist in pricing application --(HEAD
ER)'
, SYSDATE
, ln_request_id
);
END IF;
EXCEPTION
WHEN OTHERS THEN
FND_FILE.PUT_LINE (FND_FILE.LOG,'error in price list name for :'||lr
_header.price_list_name);
ln_err_flag := 2;
UPDATE XXMSSL_QP_PRICE_LST_HDR_STG
SET record_status='ERROR'
,err_msg='error in price list name'
, request_id=ln_request_id
WHERE price_list_name=lr_header.price_list_name;
INSERT INTO XXMSSL_QP_CONV_ERRORS
( price_list_name
, customer_name
, record_status
, err_msg
, conversion_date
, request_id
)
VALUES ( lr_header.price_list_name
, lr_header.customer_name
, 'ERROR'
, 'error in price list name --(HEADER)'
, SYSDATE
, ln_request_id
);
END;
END IF;
-----VALIDATION FOR CURRENCY CODE-----
IF lr_header.currency IS NULL THEN
FND_FILE.PUT_LINE (FND_FILE.LOG, 'currency code is null for price list :
--'||lr_header.price_list_name);
ln_err_flag := 2;
UPDATE XXMSSL_QP_PRICE_LST_HDR_STG
SET record_status='ERROR'
,err_msg='currency code is null'
, request_id=ln_request_id
WHERE price_list_name=lr_header.price_list_name
AND rowid=lr_header.rowid;
INSERT INTO XXMSSL_QP_CONV_ERRORS
( price_list_name
, customer_name
, currency
, record_status
, err_msg
, conversion_date
, request_id
)
VALUES ( lr_header.price_list_name
, lr_header.customer_name
, lr_header.currency
, 'ERROR'
, 'currency code is null --(HEADER)'
, SYSDATE
, ln_request_id
);
ELSE
BEGIN
SELECT currency_code
INTO lc_currency_code
FROM FND_CURRENCIES
WHERE UPPER(currency_code)=UPPER(lr_header.currency)
AND enabled_flag='Y';
EXCEPTION
WHEN OTHERS THEN
FND_FILE.PUT_LINE (FND_FILE.LOG,'currency code "'||lr_header.currenc
y||'" does not exist for price list :--'||lr_header.price_list_name);
ln_err_flag := 2;
UPDATE XXMSSL_QP_PRICE_LST_HDR_STG
SET record_status='ERROR'
,err_msg='currency code does not exist'
,request_id=ln_request_id
WHERE price_list_name=lr_header.price_list_name
AND rowid=lr_header.rowid;
INSERT INTO XXMSSL_QP_CONV_ERRORS
( price_list_name
, customer_name
, currency
, record_status
, err_msg
, conversion_date
, request_id
)
VALUES ( lr_header.price_list_name
, lr_header.customer_name
, lr_header.currency
, 'ERROR'
, 'currency code does not exist --(HEADER)'
, SYSDATE
, ln_request_id
);
END;
END IF;
-----VALIDATION FOR ROUND TO-----
IF lr_header.round_to IS NULL THEN
FND_FILE.PUT_LINE (FND_FILE.LOG, 'round_to is null for price list :'||lr
_header.price_list_name);
ln_err_flag := 2;
UPDATE XXMSSL_QP_PRICE_LST_HDR_STG
SET record_status='ERROR'
,err_msg='round to is null'
,request_id=ln_request_id
WHERE price_list_name=lr_header.price_list_name
AND rowid=lr_header.rowid;
INSERT INTO XXMSSL_QP_CONV_ERRORS
( price_list_name
, customer_name
, record_status
, err_msg
, conversion_date
, request_id
)
VALUES ( lr_header.price_list_name
, lr_header.customer_name
, 'ERROR'
, 'round to is null'
, SYSDATE
, ln_request_id
);
ELSE
BEGIN
SELECT round_to
INTO ln_round_to
FROM XXMSSL_QP_PRICE_LST_HDR_STG
WHERE price_list_name=lr_header.price_list_name
AND rowid=lr_header.rowid;
EXCEPTION
WHEN OTHERS THEN
FND_FILE.PUT_LINE (FND_FILE.LOG,'round_to "'||ln_round_to||'" value
is not numeric for price list :--'||lr_header.price_list_name);
ln_err_flag := 2;
UPDATE XXMSSL_QP_PRICE_LST_HDR_STG
SET record_status='ERROR'
,err_msg='round_to value is not numeric'
,request_id=ln_request_id
WHERE price_list_name=lr_header.price_list_name
AND rowid=lr_header.rowid;
INSERT INTO XXMSSL_QP_CONV_ERRORS
( price_list_name
, customer_name
, record_status
, err_msg
, conversion_date
, request_id
)
VALUES ( lr_header.price_list_name
, lr_header.customer_name
, 'ERROR'
, 'round_to value is not numeric --(HEADER)'
, SYSDATE
, ln_request_id
);
END;
END IF;
-----VALIDATION FOR CUSTOMER NUMBER AND CUSTOMER NAME-----
IF lr_header.customer_number IS NOT NULL AND lr_header.customer_name IS N
OT NULL THEN
BEGIN
SELECT UNIQUE HCA.cust_account_id
INTO ln_cust_account_id
FROM HZ_CUST_ACCOUNTS_ALL HCA
,HZ_PARTY_SITES HPS
,HZ_CUST_ACCT_SITES_ALL HCSA
,HZ_PARTIES HP
WHERE UPPER(HCA.account_name)=UPPER(lr_header.customer_name)
AND UPPER(SUBSTR(hps.party_site_name,1,INSTR(hps.party_site_name,'
')-1))=UPPER(lr_header.customer_number)
AND hcsa.party_site_id = hps.party_site_id
AND hca.cust_account_id = hcsa.cust_account_id
AND HP.party_type='ORGANIZATION'
AND HP.party_id=hca.party_id
AND HCA.status='A';
EXCEPTION
WHEN OTHERS THEN
FND_FILE.PUT_LINE (FND_FILE.LOG,'customer number or name "'||lr_head
er.customer_name||'" does not exist for price list :--'||lr_header.price_list_na
me);
ln_err_flag := 2;
UPDATE XXMSSL_QP_PRICE_LST_HDR_STG
SET record_status='ERROR'
,err_msg='customer number or name does not exist '
, request_id=ln_request_id
WHERE price_list_name=lr_header.price_list_name
AND rowid=lr_header.rowid;
INSERT INTO XXMSSL_QP_CONV_ERRORS
( price_list_name
, customer_name
, record_status
, err_msg
, conversion_date
, request_id
)
VALUES ( lr_header.price_list_name
, lr_header.customer_name
, 'ERROR'
, 'customer number or name does not exist --(HEADER)'
, SYSDATE
, ln_request_id
);
END;
ELSE
FND_FILE.PUT_LINE (FND_FILE.LOG,'customer number or name is null for pri
ce list :--'||lr_header.price_list_name);
ln_err_flag := 2;
UPDATE XXMSSL_QP_PRICE_LST_HDR_STG
SET record_status='ERROR'
,err_msg='customer number or name is null'
,request_id=ln_request_id
WHERE price_list_name=lr_header.price_list_name
AND rowid=lr_header.rowid;
INSERT INTO XXMSSL_QP_CONV_ERRORS
( price_list_name
, customer_name
, record_status
, err_msg
, conversion_date
, request_id
)
VALUES ( lr_header.price_list_name
, lr_header.customer_name
, 'ERROR'
, 'customer number or name is null --(HEADER)'
, SYSDATE
, ln_request_id
);
END IF;
/*
-----VALIDATION FOR CUSTOMER NUMBER AND CUSTOMER NAME-----
IF lr_header.customer_number IS NOT NULL THEN
BEGIN
SELECT HCA.cust_account_id
INTO ln_cust_account_id
FROM HZ_CUST_ACCOUNTS_ALL HCA
,HZ_PARTIES HP
WHERE UPPER(HCA.orig_system_reference)=UPPER(lr_header.customer_number
)
AND HP.party_id=HCA.party_id
AND HP.party_type='ORGANIZATION'
AND HCA.status='A';
EXCEPTION
WHEN OTHERS THEN
FND_FILE.PUT_LINE (FND_FILE.LOG,'customer number does not exist for
price list :'||lr_header.price_list_name);
ln_err_flag := 2;
UPDATE XXMSSL_QP_PRICE_LST_HDR_STG
SET record_status='ERROR'
,err_msg='customer number does not exist'
WHERE price_list_name=lr_header.price_list_name
AND rowid=lr_header.rowid;
INSERT INTO XXMSSL_QP_CONV_ERRORS
( price_list_name
, record_status
, err_msg
, conversion_date
)
VALUES ( lr_header.price_list_name
, 'ERROR'
, 'customer number does not exist --(HEADER)'
, SYSDATE
);
END;
ELSIF lr_header.customer_name IS NULL THEN
FND_FILE.PUT_LINE (FND_FILE.LOG, 'customer name and customer no is null
for price list :'||lr_header.price_list_name);
ln_err_flag := 2;
UPDATE XXMSSL_QP_PRICE_LST_HDR_STG
SET record_status='ERROR'
,err_msg='customer name and customer no is null'
WHERE price_list_name=lr_header.price_list_name
AND rowid=lr_header.rowid;
INSERT INTO XXMSSL_QP_CONV_ERRORS
( price_list_name
, record_status
, err_msg
, conversion_date
)
VALUES ( lr_header.price_list_name
, 'ERROR'
, 'customer name and customer no is null --(HEADER)'
, SYSDATE
);
ELSE
BEGIN
SELECT HCA.cust_account_id
INTO ln_cust_account_id
FROM HZ_CUST_ACCOUNTS_ALL HCA
,HZ_PARTIES HP
WHERE UPPER(HP.party_name)=UPPER(lr_header.customer_name)
AND HP.party_type='ORGANIZATION'
AND HP.party_id=hca.party_id
AND HCA.status='A';
EXCEPTION
WHEN OTHERS THEN
FND_FILE.PUT_LINE (FND_FILE.LOG,'customer name does not exist for pr
ice list :'||lr_header.price_list_name);
ln_err_flag := 2;
UPDATE XXMSSL_QP_PRICE_LST_HDR_STG
SET record_status='ERROR'
,err_msg='customer name does not exist'
WHERE price_list_name=lr_header.price_list_name
AND rowid=lr_header.rowid;
INSERT INTO XXMSSL_QP_CONV_ERRORS
( price_list_name
, record_status
, err_msg
, conversion_date
)
VALUES ( lr_header.price_list_name
, 'ERROR'
, 'customer name does not exist --(HEADER)'
, SYSDATE
);
END;
END IF;
*/
IF ln_err_flag=1 THEN
INSERT INTO XXMSSL_QP_PRICE_LST_HDR_CSTM
(price_list_name
,description
,currency
,round_to
,customer_name
,customer_number
,record_status
,conversion_date
,request_id
)
VALUES (lr_header.price_list_name
,lr_header.description
,lc_currency_code
,lr_header.round_to
,ln_cust_account_id
,ln_cust_account_id
,'VALIDATED'
,NULL
,ln_request_id
);
UPDATE XXMSSL_QP_PRICE_LST_HDR_STG
SET record_status='VALIDATED'
,conversion_date=SYSDATE
,request_id=ln_request_id
WHERE price_list_name=lr_header.price_list_name
AND rowid=lr_header.rowid;
COMMIT;
FOR lr_line IN lcu_price_line(lr_header.price_list_name)
LOOP
-----VALIDATION FOR VALUE-----
IF lr_line.product_value IS NULL THEN
FND_FILE.PUT_LINE (FND_FILE.LOG,'product value is null for price lis
t :--'||lr_line.price_list_name);
ln_err_flag := 2;
UPDATE XXMSSL_QP_PRICE_LST_LINE_STG
SET record_status='ERROR'
,err_msg='product value is null'
,conversion_date=SYSDATE
,request_id=ln_request_id
WHERE price_list_name=lr_line.price_list_name
AND rowid=lr_line.rowid;
INSERT INTO XXMSSL_QP_CONV_ERRORS
( price_list_name
, product_value
, record_status
, err_msg
, conversion_date
, request_id
)
VALUES ( lr_line.price_list_name
, lr_line.mssl_item_code
, 'ERROR'
, 'product value is null --(LINE) '
, SYSDATE
, ln_request_id
);
DELETE FROM XXMSSL_QP_PRICE_LST_HDR_CSTM
WHERE price_list_name=lr_line.price_list_name;
END IF;
-----PRICE LIST NAME VALIDATION-----
IF lr_line.price_list_name IS NULL THEN
FND_FILE.PUT_LINE (FND_FILE.LOG, 'price list name is null :');
ln_err_flag := 2;
UPDATE XXMSSL_QP_PRICE_LST_LINE_STG
SET record_status='ERROR'
,err_msg='price list name is null'
,request_id=ln_request_id
WHERE price_list_name=lr_line.price_list_name
AND rowid=lr_line.rowid;
INSERT INTO XXMSSL_QP_CONV_ERRORS
( price_list_name
, record_status
, err_msg
, conversion_date
, request_id
)
VALUES ( lr_line.price_list_name
, 'ERROR'
, 'price list name is null --(LINE)'
, SYSDATE
, ln_request_id
);
ELSE
BEGIN
ln_count:=0;
SELECT COUNT(name)
INTO ln_count
FROM QP_LIST_HEADERS_TL
WHERE UPPER(name)=UPPER(lr_line.price_list_name);
IF nvl(ln_count,0)>0 THEN
FND_FILE.PUT_LINE(FND_FILE.LOG,'price list already exist in pric
ing application :--'||lr_line.price_list_name);
ln_err_flag := 2;
UPDATE XXMSSL_QP_PRICE_LST_LINE_STG
SET record_status='ERROR'
,err_msg='price list already exist in pricing application
'
, request_id=ln_request_id
WHERE price_list_name=lr_line.price_list_name
AND rowid=lr_line.rowid;
INSERT INTO XXMSSL_QP_CONV_ERRORS
( price_list_name
, record_status
, err_msg
, conversion_date
, request_id
)
VALUES ( lr_line.price_list_name
, 'ERROR'
, 'price list already exist in pricing application --(
LINE)'
, SYSDATE
, ln_request_id
);
END IF;
EXCEPTION
WHEN OTHERS THEN
FND_FILE.PUT_LINE (FND_FILE.LOG,'error in price list name for :-
-'||lr_line.price_list_name);
ln_err_flag := 2;
UPDATE XXMSSL_QP_PRICE_LST_LINE_STG
SET record_status='ERROR'
,err_msg='error in price list name'
,request_id=ln_request_id
WHERE price_list_name=lr_line.price_list_name
AND rowid=lr_line.rowid;
INSERT INTO XXMSSL_QP_CONV_ERRORS
( price_list_name
, record_status
, err_msg
, conversion_date
, request_id
)
VALUES ( lr_line.price_list_name
, 'ERROR'
, 'error in price list name --(LINE)'
, SYSDATE
, ln_request_id
);
END;
END IF;
-----VALIDATION FOR CUSTOMER ITEM_CODE-----
IF lr_line.customer_item_code IS NULL THEN
FND_FILE.PUT_LINE (FND_FILE.LOG,'customer item code is null for price
list name :--'||lr_line.price_list_name);
ln_err_flag := 2;
UPDATE XXMSSL_QP_PRICE_LST_LINE_STG
SET record_status='ERROR'
,err_msg='customer item code is null'
,request_id=ln_request_id
WHERE price_list_name=lr_line.price_list_name
AND rowid=lr_line.rowid;
INSERT INTO XXMSSL_QP_CONV_ERRORS
( price_list_name
, customer_item_code
, record_status
, err_msg
, conversion_date
, request_id
)
VALUES ( lr_line.price_list_name
, lr_line.customer_item_code
, 'ERROR'
, 'customer item code is null --(LINE)'
, SYSDATE
, ln_request_id
);
DELETE FROM XXMSSL_QP_PRICE_LST_HDR_CSTM
WHERE price_list_name=lr_header.price_list_name;
ELSE
BEGIN
SELECT customer_item_id
INTO ln_cust_item_id
FROM mtl_customer_items
WHERE UPPER(customer_item_number)=UPPER(lr_line.customer_item_code
)
AND customer_id=ln_cust_account_id;
EXCEPTION
WHEN OTHERS THEN
FND_FILE.PUT_LINE (FND_FILE.LOG,'customer item code "'||lr_line.c
ustomer_item_code||'" does not exist for price list :--'||lr_line.price_list_nam
e);
ln_err_flag := 2;
UPDATE XXMSSL_QP_PRICE_LST_LINE_STG
SET record_status='ERROR'
,err_msg='customer item code does not exist'
,request_id=ln_request_id
WHERE price_list_name=lr_line.price_list_name
AND rowid=lr_line.rowid;
INSERT INTO XXMSSL_QP_CONV_ERRORS
( price_list_name
, customer_item_code
, record_status
, err_msg
, conversion_date
, request_id
)
VALUES ( lr_line.price_list_name
, lr_line.customer_item_code
, 'ERROR'
, 'customer item code does not exist --(LINE)'
, SYSDATE
, ln_request_id
);
END;
END IF;
-----VALIDATION FOR ITEM CODE-----
IF lr_line.mssl_item_code IS NULL THEN
FND_FILE.PUT_LINE (FND_FILE.LOG,'item code is null for price list na
me :--'||lr_line.price_list_name);
ln_err_flag := 2;
UPDATE XXMSSL_QP_PRICE_LST_LINE_STG
SET record_status='ERROR'
,err_msg='item code is null'
,request_id=ln_request_id
WHERE price_list_name=lr_line.price_list_name
AND rowid=lr_line.rowid;
INSERT INTO XXMSSL_QP_CONV_ERRORS
( price_list_name
, product_value
, record_status
, err_msg
, conversion_date
, request_id
)
VALUES ( lr_line.price_list_name
, lr_line.mssl_item_code
, 'ERROR'
, 'item code is null --(LINE)'
, SYSDATE
, ln_request_id
);
DELETE FROM XXMSSL_QP_PRICE_LST_HDR_CSTM
WHERE price_list_name=lr_header.price_list_name;
ELSE
BEGIN
SELECT profile_option_name
INTO lc_profile_option_name
FROM FND_PROFILE_OPTIONS_TL
WHERE USER_PROFILE_OPTION_NAME ='QP: Item Validation Organization'
;
SELECT segment1
, primary_uom_code
INTO lc_product_attr_val_disp
, lc_uom_code
FROM MTL_SYSTEM_ITEMS_B
WHERE organization_id=(SELECT FND_PROFILE.VALUE(lc_profile_option_
name) FROM dual)
AND UPPER(segment1)=UPPER(lr_line.mssl_item_code);
SELECT FND_PROFILE.VALUE(lc_profile_option_name) INTO ln FROM dual;
FND_FILE.PUT_LINE (FND_FILE.OUTPUT,'segment1 value:'||lc_product_at
tr_val_disp);
FND_FILE.PUT_LINE (FND_FILE.OUTPUT,'organization_id:'||ln);
EXCEPTION
WHEN OTHERS THEN
FND_FILE.PUT_LINE (FND_FILE.LOG,'item code "'||lr_line.mssl_item
_code||'" does not exist for price list name :--'||lr_line.price_list_name);
ln_err_flag := 2;
UPDATE XXMSSL_QP_PRICE_LST_LINE_STG
SET record_status='ERROR'
,err_msg='item code does not exist'
, request_id=ln_request_id
WHERE price_list_name=lr_line.price_list_name
AND rowid=lr_line.rowid;
INSERT INTO XXMSSL_QP_CONV_ERRORS
( price_list_name
, product_value
, record_status
, err_msg
, conversion_date
, request_id
)
VALUES ( lr_line.price_list_name
, lr_line.mssl_item_code
, 'ERROR'
, 'item code does not exist --(LINE)'
, SYSDATE
, ln_request_id
);
DELETE FROM XXMSSL_QP_PRICE_LST_HDR_CSTM
WHERE price_list_name=lr_header.price_list_name;
END;
END IF;
FND_FILE.PUT_LINE (FND_FILE.OUTPUT,'uom code:'||lc_uom_code);
-----To fetch base_uom_flag and uom_class-----
BEGIN
SELECT mum.base_uom_flag
,mum.uom_class
INTO lc_base_uom_flag
,lc_uom_class
FROM MTL_UNITS_OF_MEASURE_TL mum
WHERE UPPER(mum.uom_code)=UPPER(lc_uom_code);
FND_FILE.PUT_LINE (FND_FILE.OUTPUT,'uom flag:'||lc_base_uom_flag);
FND_FILE.PUT_LINE (FND_FILE.OUTPUT,'uom class:'||lc_uom_class);
EXCEPTION
WHEN OTHERS THEN
FND_FILE.PUT_LINE (FND_FILE.LOG,'uom code does not exist for pri
ce list name :'||lr_line.price_list_name);
ln_err_flag := 2;
UPDATE XXMSSL_QP_PRICE_LST_LINE_STG
SET record_status='ERROR'
,err_msg='uom code does not exist'
, request_id=ln_request_id
WHERE price_list_name=lr_line.price_list_name
AND rowid=lr_line.rowid;
INSERT INTO XXMSSL_QP_CONV_ERRORS
( price_list_name
, product_value
, record_status
, err_msg
, conversion_date
, request_id
)
VALUES ( lr_line.price_list_name
, lr_line.mssl_item_code
, 'ERROR'
, 'uom code does not exist --(LINE)'
, SYSDATE
, ln_request_id
);
DELETE FROM XXMSSL_QP_PRICE_LST_HDR_CSTM
WHERE price_list_name=lr_header.price_list_name;
END;
-- END IF;
-----IF UOM IS NOT PRIMARY UOM THEN CALCULATE VALUE-----
IF lc_base_uom_flag<>'Y' THEN
BEGIN
SELECT DISTINCT conversion_rate
INTO ln_conversion_rate
FROM MTL_UOM_CONVERSIONS
WHERE uom_class=lc_uom_class
AND uom_code=lc_uom_code
AND inventory_item_id=0;
FND_FILE.PUT_LINE (FND_FILE.OUTPUT,'lr_line.product_value:'||lr_li
ne.product_value);
ln_product_value:=lr_line.product_value; --*ln_conversion_rate;
FND_FILE.PUT_LINE (FND_FILE.OUTPUT,'conversion rate:'||ln_convers
ion_rate);
FND_FILE.PUT_LINE (FND_FILE.OUTPUT,'product value:'||ln_product_v
alue);
EXCEPTION
WHEN OTHERS THEN
FND_FILE.PUT_LINE (FND_FILE.LOG,'conversion rate does not exist
for price list name :'||lr_line.price_list_name);
ln_err_flag := 2;
UPDATE XXMSSL_QP_PRICE_LST_LINE_STG
SET record_status='ERROR'
, err_msg='conversion rate does not exist'
, request_id=ln_request_id
WHERE price_list_name=lr_line.price_list_name
AND rowid=lr_line.rowid;
INSERT INTO XXMSSL_QP_CONV_ERRORS
( price_list_name
, product_value
, record_status
, err_msg
, conversion_date
, request_id
)
VALUES ( lr_line.price_list_name
, lr_line.mssl_item_code
, 'ERROR'
, 'conversion rate does not exist --(LINE)'
, SYSDATE
, ln_request_id
);
DELETE FROM XXMSSL_QP_PRICE_LST_HDR_CSTM
WHERE price_list_name=lr_header.price_list_name;
END;
ELSE
ln_product_value:=lr_line.product_value;
END IF;
IF ln_err_flag=1 THEN
INSERT INTO XXMSSL_QP_PRICE_LST_LINE_CSTM
(price_list_name
,record_status
,conversion_date
,request_id
)
VALUES (lr_line.price_list_name
,'VALIDATED'
,NULL
,ln_request_id
);
INSERT INTO XXMSSL_QP_PRICING_ATTRIBS_CSTM
(price_list_name
,mssl_item_code
,product_description
,uom
,record_status
,conversion_date
,request_id
)
VALUES (lr_line.price_list_name
,lr_line.mssl_item_code
,lr_line.product_description
,lc_uom_code
,'VALIDATED'
,NULL
,ln_request_id
);
UPDATE XXMSSL_QP_PRICE_LST_LINE_STG
SET record_status='VALIDATED'
WHERE price_list_name=lr_line.price_list_name
AND rowid=lr_line.rowid;
COMMIT;
ELSE
retcode:=1;
END IF;
END LOOP;
ELSE
retcode:=1;
END IF;
END LOOP;
COMMIT;
END P_PRICE_LIST_VALIDATE;
------------------------------------------------------------------------------
--------------------------------------------
-- Procedure : P_PRICE_LIST_UPLOAD
-- Description : This procedure is called by the executable of the concurrent
program 'XXMSSL:QP-transfer Price list to interface'.
-- This procedure pick the validated data from staging tables an
d upload into interface tables.
-- * Only the eligible records from the staging table are impor
ted into the stage 2 table.
-- * The error messages are displayed in the log file of the
concurrent program.
--
-- Parameters :
-- i) errbuf OUT VARCHAR2 : Required by concurren
t program manager for reporting exit message
-- ii) retcode OUT NUMBER : Required by concurren
t program manager for reporting exit status
------------------------------------------------------------------------------
---------------------------------------------
PROCEDURE P_PRICE_LIST_UPLOAD (errbuf OUT VARCHAR2
,retcode OUT NUMBER
)
IS
CURSOR lcu_price_hdr
IS
SELECT rowid
,price_list_name
,description
,currency
,round_to
,customer_name
,customer_number
FROM XXMSSL_QP_PRICE_LST_HDR_STG
WHERE record_status='VALIDATED';
CURSOR lcu_price_line(lc_price_list VARCHAR2)
IS
SELECT rowid
,price_list_name
,mssl_item_code
,product_value
,product_description
,customer_item_code
,uom
FROM XXMSSL_QP_PRICE_LST_LINE_STG
WHERE price_list_name=lc_price_list
AND record_status='VALIDATED';
--DEFINE LOCAL VARIABLES-BEGIN
ln_err_flag NUMBER;
lc_name VARCHAR2(240);
lc_currency_code VARCHAR2(30);
ln_round_to NUMBER;
lc_name_l VARCHAR2(240);
lc_profile_option_name VARCHAR2(80);
lc_organization_code VARCHAR2(100);
lc_uom_code VARCHAR2(3);
lc_base_uom_flag VARCHAR2(1);
lc_uom_class VARCHAR2(10);
ln_conversion_rate NUMBER;
ln_product_value NUMBER;
lc_product_attr_val_disp VARCHAR2(40);
ln_cust_account_id NUMBER;
ln_user_id NUMBER:=FND_PROFILE.VALUE('USER_ID');
ln_request_id NUMBER:= FND_GLOBAL.CONC_REQUEST_ID ;
ln_count NUMBER;
ln_cust_item_id NUMBER;
--DEFINE LOCAL VARIABLES-END
BEGIN
FND_MESSAGE.CLEAR;
FOR lr_header IN lcu_price_hdr
LOOP
ln_err_flag := 1;
lc_name :=NULL;
lc_currency_code :=NULL;
ln_round_to :=NULL;
lc_name_l :=NULL;
lc_profile_option_name :=NULL;
lc_organization_code :=NULL;
lc_uom_code :=NULL;
lc_base_uom_flag :=NULL;
lc_uom_class :=NULL;
ln_conversion_rate :=NULL;
ln_product_value :=NULL;
lc_product_attr_val_disp :=NULL;
ln_cust_account_id :=NULL;
ln_count :=NULL;
IF lr_header.customer_number IS NOT NULL AND lr_header.customer_name IS N
OT NULL THEN
BEGIN
SELECT UNIQUE HCA.cust_account_id
INTO ln_cust_account_id
FROM HZ_CUST_ACCOUNTS_ALL HCA
,HZ_PARTY_SITES HPS
,HZ_CUST_ACCT_SITES_ALL HCSA
,HZ_PARTIES HP
WHERE UPPER(HCA.account_name)=UPPER(lr_header.customer_name)
AND UPPER(SUBSTR(hps.party_site_name,1,INSTR(hps.party_site_name,'
')-1))=UPPER(lr_header.customer_number)
AND hcsa.party_site_id = hps.party_site_id
AND hca.cust_account_id = hcsa.cust_account_id
AND HP.party_type='ORGANIZATION'
AND HP.party_id=hca.party_id
AND HCA.status='A';
EXCEPTION
WHEN OTHERS THEN
FND_FILE.PUT_LINE (FND_FILE.LOG,'customer number or name "'||lr_head
er.customer_name||'" does not exist for price list :--'||lr_header.price_list_na
me);
ln_err_flag := 2;
UPDATE XXMSSL_QP_PRICE_LST_HDR_STG
SET record_status='ERROR'
,err_msg='customer number or name does not exist '
,request_id=ln_request_id
WHERE price_list_name=lr_header.price_list_name
AND rowid=lr_header.rowid;
INSERT INTO XXMSSL_QP_CONV_ERRORS
( price_list_name
, customer_name
, record_status
, err_msg
, conversion_date
, request_id
)
VALUES ( lr_header.price_list_name
, lr_header.customer_name
, 'ERROR'
, 'customer number or name does not exist --(HEADER)'
, SYSDATE
, ln_request_id
);
END;
END IF;
/*
IF lr_header.customer_number IS NOT NULL THEN
BEGIN
SELECT HCA.cust_account_id
INTO ln_cust_account_id
FROM HZ_CUST_ACCOUNTS_ALL HCA
,HZ_PARTIES HP
WHERE UPPER(HCA.orig_system_reference)=UPPER(lr_header.customer_number
)
AND HP.party_id=HCA.party_id
AND HP.party_type='ORGANIZATION'
AND HCA.status='A';
EXCEPTION
WHEN OTHERS THEN
FND_FILE.PUT_LINE (FND_FILE.LOG,'customer number does not exist for
price list :'||lr_header.price_list_name);
ln_err_flag := 2;
UPDATE XXMSSL_QP_PRICE_LST_HDR_STG
SET record_status='ERROR'
,err_msg='customer number does not exist'
WHERE price_list_name=lr_header.price_list_name
AND rowid=lr_header.rowid;
END;
ELSIF lr_header.customer_name IS NULL THEN
FND_FILE.PUT_LINE (FND_FILE.LOG, 'customer name and customer no is null
for price list :'||lr_header.price_list_name);
ln_err_flag := 2;
UPDATE XXMSSL_QP_PRICE_LST_HDR_STG
SET record_status='E'
,err_msg='customer name and customer no is null'
WHERE price_list_name=lr_header.price_list_name
AND rowid=lr_header.rowid;
ELSE
BEGIN
SELECT HCA.cust_account_id
INTO ln_cust_account_id
FROM HZ_CUST_ACCOUNTS_ALL HCA
,HZ_PARTIES HP
WHERE UPPER(HP.party_name)=UPPER(lr_header.customer_name)
AND HP.party_type='ORGANIZATION'
AND HP.party_id=hca.party_id
AND HCA.status='A';
EXCEPTION
WHEN OTHERS THEN
FND_FILE.PUT_LINE (FND_FILE.LOG,'customer name does not exist for pr
ice list :'||lr_header.price_list_name);
ln_err_flag := 2;
UPDATE XXMSSL_QP_PRICE_LST_HDR_STG
SET record_status='ERROR'
,err_msg='customer name does not exist'
WHERE price_list_name=lr_header.price_list_name
AND rowid=lr_header.rowid;
END;
END IF;
*/
IF ln_err_flag=1 THEN
INSERT INTO QP_INTERFACE_LIST_HEADERS
(orig_sys_header_ref
,name
,description
,currency_code
,rounding_factor
,attribute1
,start_date_active_first
,start_date_active
,language
,source_lang
,active_flag
,list_type_code
,pte_code
,source_system_code
,interface_action_code
,process_flag
,process_status_flag
,creation_date
,created_by
,last_update_date
,last_updated_by
,request_id
)
VALUES (QP_LIST_HEADERS_B_S.NEXTVAL
,lr_header.price_list_name
,lr_header.description
,lr_header.currency
,lr_header.round_to
,ln_cust_account_id
,FND_DATE.CANONICAL_TO_DATE(SYSDATE)
,TO_CHAR(SYSDATE,'YYYY/MM/DD')
,USERENV('Lang')
,USERENV('Lang')
,'Y'
,'PRL'
,'ORDFUL'
,'QP'
,'INSERT'
,'Y'
,'P'
,SYSDATE
,ln_user_id
,SYSDATE
,ln_user_id
,ln_request_id
);
COMMIT;
UPDATE XXMSSL_QP_PRICE_LST_HDR_STG
SET record_status='PROCESSED'
,conversion_date=SYSDATE
,request_id=ln_request_id
WHERE price_list_name=lr_header.price_list_name
AND rowid=lr_header.rowid;
UPDATE XXMSSL_QP_PRICE_LST_HDR_CSTM
SET record_status='PROCESSED'
,conversion_date=SYSDATE
, request_id=ln_request_id
WHERE price_list_name=lr_header.price_list_name;
COMMIT;
FOR lr_line IN lcu_price_line(lr_header.price_list_name)
LOOP
BEGIN
SELECT customer_item_id
INTO ln_cust_item_id
FROM mtl_customer_items
WHERE UPPER(customer_item_number)=UPPER(lr_line.customer_item_code)
AND customer_id=ln_cust_account_id;
END;
-----Fetch primary_uom_code -----
BEGIN
SELECT DISTINCT primary_uom_code
INTO lc_uom_code
FROM MTL_SYSTEM_ITEMS_B
WHERE UPPER(segment1)=UPPER(lr_line.mssl_item_code);
END;
FND_FILE.PUT_LINE (FND_FILE.output,lc_uom_code);
-----GET BASE_UOM_FLAG AND UOM_CLASS-----
BEGIN
SELECT mum.base_uom_flag
,mum.uom_class
INTO lc_base_uom_flag
,lc_uom_class
FROM MTL_UNITS_OF_MEASURE_TL mum
WHERE UPPER(mum.uom_code)=UPPER(lc_uom_code);
EXCEPTION
WHEN OTHERS THEN
FND_FILE.PUT_LINE (FND_FILE.LOG,'uom code does not exist for pri
ce list name :'||lr_line.price_list_name);
ln_err_flag := 2;
UPDATE XXMSSL_QP_PRICE_LST_LINE_STG
SET record_status='ERROR'
,err_msg='uom code does not exist'
,request_id=ln_request_id
WHERE price_list_name=lr_line.price_list_name
AND rowid=lr_line.rowid;
DELETE FROM QP_INTERFACE_LIST_HEADERS
WHERE name=lr_line.price_list_name;
END;
FND_FILE.PUT_LINE (FND_FILE.log,lc_base_uom_flag);
FND_FILE.PUT_LINE (FND_FILE.log,lc_uom_class);
-----IF UOM IS NOT PRIMARY UOM THEN CALCULATE VALUE-----
IF lc_base_uom_flag<>'Y' THEN
BEGIN
SELECT DISTINCT conversion_rate
INTO ln_conversion_rate
FROM MTL_UOM_CONVERSIONS
WHERE UPPER(uom_class)=UPPER(lc_uom_class)
AND UPPER(uom_code)=UPPER(lc_uom_code)
AND inventory_item_id=0;
ln_product_value:=lr_line.product_value; --*ln_conversion_rate ;
FND_FILE.PUT_LINE (FND_FILE.OUTPUT,'lr_line product_value:'||lr_li
ne.product_value);
FND_FILE.PUT_LINE (FND_FILE.OUTPUT,'conversion rate:'||ln_conversi
on_rate);
FND_FILE.PUT_LINE (FND_FILE.OUTPUT,'product value:'||ln_product_va
lue);
EXCEPTION
WHEN OTHERS THEN
FND_FILE.PUT_LINE (FND_FILE.LOG,'conversion rate does not exist
for price list name :'||lr_line.price_list_name);
ln_err_flag := 2;
UPDATE XXMSSL_QP_PRICE_LST_LINE_STG
SET record_status='ERROR'
, err_msg='uom class does not exist'
, request_id=ln_request_id
WHERE price_list_name=lr_line.price_list_name
AND rowid=lr_line.rowid;
DELETE FROM QP_INTERFACE_LIST_HEADERS
WHERE name=lr_line.price_list_name;
END;
ELSE
ln_product_value:=lr_line.product_value;
END IF;
IF ln_err_flag=1 THEN
INSERT INTO QP_INTERFACE_LIST_LINES
(orig_sys_line_ref
,orig_sys_header_ref
,list_line_type_code
,arithmetic_operator
,operand
,interface_action_code
,process_flag
,process_status_flag
,creation_date
,created_by
,last_update_date
,last_updated_by
,start_date_active
,attribute5
,request_id
)
VALUES (QP_LIST_LINES_S.NEXTVAL
,QP_LIST_HEADERS_B_S.CURRVAL
,'PLL'
,'UNIT_PRICE'
,ln_product_value
,'INSERT'
,'Y'
,'P'
,SYSDATE
,ln_user_id
,SYSDATE
,ln_user_id
,SYSDATE
,ln_cust_item_id
,ln_request_id
);
UPDATE XXMSSL_QP_PRICE_LST_LINE_CSTM
SET record_status='PROCESSED'
,conversion_date=SYSDATE
, request_id=ln_request_id
WHERE price_list_name=lr_line.price_list_name;
COMMIT;
INSERT INTO QP_INTERFACE_PRICING_ATTRIBS
(ORIG_SYS_PRICING_ATTR_REF
,ORIG_SYS_LINE_REF
,ORIG_SYS_HEADER_REF
,PRODUCT_ATTRIBUTE_CONTEXT
,PRODUCT_ATTR_CODE
,PRODUCT_ATTR_VAL_DISP
,PRODUCT_UOM_CODE
,INTERFACE_ACTION_CODE
,PROCESS_FLAG
,PROCESS_STATUS_FLAG
,CREATION_DATE
,CREATED_BY
,LAST_UPDATE_DATE
,LAST_UPDATED_BY
,request_id
)
VALUES (QP_PRICING_ATTRIBUTES_S.NEXTVAL
,QP_LIST_LINES_S.CURRVAL
,QP_LIST_HEADERS_B_S.CURRVAL
,'ITEM'
,'INVENTORY_ITEM_ID'
,lr_line.mssl_item_code
,lc_uom_code
,'INSERT'
,'Y'
,'P'
,SYSDATE
,ln_user_id
,SYSDATE
,ln_user_id
,ln_request_id
);
COMMIT;
UPDATE XXMSSL_QP_PRICING_ATTRIBS_CSTM
SET record_status='PROCESSED'
,conversion_date=SYSDATE
,request_id=ln_request_id
WHERE price_list_name=lr_line.price_list_name;
UPDATE XXMSSL_QP_PRICE_LST_LINE_STG
SET record_status='PROCESSED'
,conversion_date=SYSDATE
,request_id=ln_request_id
WHERE price_list_name=lr_line.price_list_name
AND rowid=lr_line.rowid;
END IF;
END LOOP;
END IF;
END LOOP;
COMMIT;
END P_PRICE_LIST_UPLOAD;
END XXMSSL_QP_PRICE_LIST_PKG;
/