XXMSSL QP Price List PKG

You might also like

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

CREATE OR REPLACE PACKAGE 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;
/

You might also like