You are on page 1of 21

SET ECHO OFF

SET FEEDBACK ON
WHENEVER SQLERROR EXIT FAILURE
PROMPT "Creating package XXMIG_AR_CUST_SITE_TAX_PKG . . ."
CREATE OR REPLACE
PACKAGE XXMIG_AR_CUST_SITE_TAX_PKG AUTHID DEFINER AS
--//============================================================================
--//============================================================================
--// Custom Balfour Beatty Development 2013 - Generic
--// $Id:$
--//============================================================================
--//
--// Object Name
:: XXMIG_AR_CUST_SITE_TAX_PKG
--//
--// Object Type
:: Package Specification
--//
--// Parameters
:: N/A
--//
--// Object Description :: This package contains all the procedures and
--//
functions used by AR Customer Account Site Tax infor
mation
--//
load.(ZX_REGISTRATIONS)
--//
--//
--// Version Control
--//============================================================================
--// Vers
Author
Date
Description
--//-----------------------------------------------------------------------------// 1.0
Sreekanth
27/08/2013
Initial Build
--//
(OTHR-DMCD-007221)
--//============================================================================
--//============================================================================
--// Procedure Name :: xx_validate_load
--//
--// Description
:: Procedure to validate and load data via an API.
--//
--//
--// Parameters
:: p_file_name
IN VARCHAR2
--//
p_validate_mode IN VARCHAR2
--//
--// Change Notes
--//============================================================================
--// Vers
Author
Date
Description
--//-----------------------------------------------------------------------------// 1.0
Sreekanth
27/08/2013
Initial Build
--//
(OTHR-DMCD-007221)
--//============================================================================
PROCEDURE xx_validate_load(p_file_name
IN VARCHAR2
,p_validate_mode IN VARCHAR2);
--//============================================================================
--//============================================================================
--// Function Name
:: get_party_tax_profile_id

--//
--// Description
:: Function to get party tax profile id.
--//
--//
--// Parameters
:: p_customer_name IN VARCHAR2,
--//
p_customer_number IN NUMBER
--//
--// Change Notes
--//============================================================================
--// Vers
Author
Date
Description
--//-----------------------------------------------------------------------------// 1.0
Sreekanth
27/08/2013
Initial Build
--//
(OTHR-DMCD-007221)
--//============================================================================
FUNCTION get_party_tax_profile_id(p_customer_name IN VARCHAR2
,P_Customer_Number IN NUMBER)
RETURN NUMBER;
--//============================================================================
--// Function Name
:: get_site_use_id
--//
--// Description
:: Function to get customer site use id.
--//
--//
--// Parameters
:: p_customer_name IN VARCHAR2,
--//
p_customer_number IN NUMBER,
--//
p_customer_site_number IN NUMBER
--//
--// Change Notes
--//============================================================================
--// Vers
Author
Date
Description
--//-----------------------------------------------------------------------------// 1.0
Sreekanth
27/08/2013
Initial Build
--//
(OTHR-DMCD-007221)
--//============================================================================
FUNCTION get_site_use_id(p_customer_name
IN VARCHAR2
,p_customer_number
IN NUMBER
,p_customer_site_number IN NUMBER)
RETURN NUMBER;
--//============================================================================
--// Function Name
:: get_cus_acct_site_id
--//
--// Description
:: Function to get customer account site id.
--//
--//
--// Parameters
:: p_customer_name IN VARCHAR2,
--//
p_customer_number IN NUMBER,
--//
p_customer_site_number IN NUMBER
--//
--// Change Notes
--//============================================================================
--// Vers
Author
Date
Description
--//-----------------------------------------------------------------------------// 1.0
Sreekanth
27/08/2013
Initial Build
--//
(OTHR-DMCD-007221)
--//============================================================================

FUNCTION get_cus_acct_site_id(p_customer_name
,p_customer_number
,p_customer_site_number
RETURN NUMBER;

IN VARCHAR2
IN NUMBER
IN NUMBER)

--//============================================================================
--// Function Name :: get_obj_ver_num
--//
--// Description
:: Function to get object version number.
--//
--//
--// Parameters
:: p_customer_name IN VARCHAR2,
--//
p_customer_number IN NUMBER,
--//
p_customer_site_number IN NUMBER
--//
--// Change Notes
--//============================================================================
--// Vers
Author
Date
Description
--//-----------------------------------------------------------------------------// 1.0
Sreekanth
27/08/2013
Initial Build
--//
(OTHR-DMCD-007221)
--//============================================================================
FUNCTION get_obj_ver_num(p_customer_name
IN VARCHAR2
,p_customer_number
IN NUMBER
,p_customer_site_number IN NUMBER)
RETURN NUMBER;
END XXMIG_AR_CUST_SITE_TAX_PKG;
/
SHOW ERRORS PACKAGE XXMIG_AR_CUST_SITE_TAX_PKG
--//==========================================================================
PROMPT "Creating package body XXMIG_AR_CUST_SITE_TAX_PKG . . ."
CREATE OR REPLACE PACKAGE BODY XXMIG_AR_CUST_SITE_TAX_PKG AS
--//============================================================================
--// Custom Balfour Beatty Development 2013 - Generic
--// $Id:$
--//============================================================================
--//
--// Object Name
:: XXMIG_AR_CUST_SITE_TAX_PKG
--//
--// Object Type
:: Package Body
--//
--// Parameters
:: N/A
--//
--// Object Description :: This package contains all the procedures and
--//
functions used by AR Customer Account Site Tax infor
mation
--//
load.(ZX_REGISTRATIONS)
--//
--//
--// Version Control
--//============================================================================
--// Vers
Author
Date
Description
--//-----------------------------------------------------------------------------// 1.0
Sreekanth
27/08/2013
Initial Build

--//============================================================================
--//==========================================================================
==
--// Function Name
:: get_party_tax_profile_id
--//
--// Description
:: Function to get details of tax profile id
--//
--// Parameters
:: p_customer_name
IN VARCHAR2
--//
p_customer_number IN NUMBER
--// Note
:: hz_cust_accounts_all synonym is used in the package.
--//
--// Change Notes
--//============================================================================
--// Vers
Author
Date
Description
--//-----------------------------------------------------------------------------// 1.0
Sreekanth
27/08/2013
Initial Build
--//============================================================================
FUNCTION get_party_tax_profile_id(p_customer_name IN VARCHAR2
,p_customer_number IN NUMBER)
RETURN NUMBER IS
CURSOR cur_custacctsite_party_p IS
SELECT zp.party_tax_profile_id
FROM zx_party_tax_profile zp
,hz_parties hp
,hz_party_sites hps
,hz_cust_accounts_all ca
WHERE hp.party_id
= hps.party_id
AND
hps.party_site_id
= zp.party_id
AND
hp.party_id
= ca.party_id
AND
(UPPER(hp.party_name) = UPPER(p_customer_name)
OR
ca.account_number
= p_customer_number);
lv_party_tax_profile_id apps.zx_party_tax_profile.party_tax_profile_id%TYPE := N
ULL;
BEGIN
OPEN cur_custacctsite_party_p;
FETCH cur_custacctsite_party_p INTO lv_party_tax_profile_id;
CLOSE cur_custacctsite_party_p;
RETURN lv_party_tax_profile_id;
EXCEPTION
WHEN NO_DATA_FOUND THEN
IF cur_custacctsite_party_p%ISOPEN THEN
CLOSE cur_custacctsite_party_p;
END IF;
RETURN (NULL);
WHEN OTHERS THEN
IF cur_custacctsite_party_p%ISOPEN THEN
CLOSE cur_custacctsite_party_p;
END IF;
RETURN (NULL);
END get_party_tax_profile_id;
--//============================================================================
--// Function Name
:: get_cus_acct_site_id
--//
--// Description
:: Function to get customer account site id.
--//
--// Parameters
:: p_customer_name
IN VARCHAR2

--//
p_customer_number IN Number
--// Note
:: hz_cust_accounts_all synonym is used in the package.
--//
--// Change Notes
--//============================================================================
--// Vers
Author
Date
Description
--//-----------------------------------------------------------------------------// 1.0
Sreekanth
27/08/2013
Initial Build
--//============================================================================
FUNCTION get_cus_acct_site_id(p_customer_name
IN VARCHAR2
,p_customer_number
IN NUMBER
,p_customer_site_number IN NUMBER)
RETURN NUMBER IS
CURSOR cur_custacctsite_party_p IS
SELECT hcas.cust_acct_site_id
FROM hz_party_sites hps
,hz_parties hp
,hz_cust_accounts_all ca
,hz_cust_acct_sites_all hcas
WHERE hp.party_id
= hps.party_id
AND
hp.party_id
= ca.party_id
AND
hps.party_site_id
= hcas.party_site_id
AND
ca.cust_account_id
= hcas.cust_account_id
AND
party_site_number
= p_customer_site_number
AND
(UPPER (hp.party_name) = UPPER(p_customer_name)
OR
ca.account_number
= p_customer_number);
lv_cust_acct_site_id apps.hz_cust_acct_sites_all.cust_acct_site_id%TYPE:= NULL;
BEGIN
OPEN cur_custacctsite_party_p;
FETCH cur_custacctsite_party_p INTO lv_cust_acct_site_id;
CLOSE cur_custacctsite_party_p;
RETURN lv_cust_acct_site_id;
EXCEPTION
WHEN NO_DATA_FOUND THEN
IF cur_custacctsite_party_p%ISOPEN THEN
CLOSE cur_custacctsite_party_p;
END IF;
RETURN (NULL);
WHEN OTHERS THEN
IF cur_custacctsite_party_p%ISOPEN THEN
CLOSE cur_custacctsite_party_p;
END IF;
RETURN (NULL);
END get_cus_acct_site_id;
--//============================================================================
--// Function Name
:: get_site_use_id
--//
--// Description
:: Function to get customer site use id.
--//
--// Parameters
:: p_customer_name
IN VARCHAR2
--//
p_customer_number IN NUMBER
--// Note
:: hz_cust_accounts_all synonym is used in the package.
--//
--// Change Notes
--//============================================================================
--// Vers
Author
Date
Description
--//----------------------------------------------------------------------------

--// 1.0
Sreekanth
27/08/2013
Initial Build
--//============================================================================
FUNCTION get_site_use_id(p_customer_name
IN VARCHAR2
,p_customer_number
IN NUMBER
,p_customer_site_number IN NUMBER)
RETURN NUMBER IS
CURSOR cur_custacctsite_party_p IS
SELECT hcsua.site_use_id
FROM hz_party_sites hps
,hz_parties hp
,hz_cust_accounts_all ca
,hz_cust_acct_sites_all hcas
,hz_cust_site_uses_all hcsua
WHERE hp.party_id
= hps.party_id
AND
hp.party_id
= ca.party_id
AND
hps.party_site_id
= hcas.party_site_id
AND
ca.cust_account_id
= hcas.cust_account_id
AND
hcsua.cust_acct_site_id = hcas.cust_acct_site_id
AND
hcsua.site_use_code
= 'BILL_TO'
AND
party_site_number
= p_customer_site_number
AND
(UPPER (hp.party_name) = UPPER(p_customer_name)
OR
ca.account_number
= p_customer_number);
lv_cust_site_use_id apps.hz_cust_site_uses_all.site_use_id%TYPE := NULL;
BEGIN
OPEN cur_custacctsite_party_p;
FETCH cur_custacctsite_party_p INTO lv_cust_site_use_id;
CLOSE cur_custacctsite_party_p;
RETURN lv_cust_site_use_id;
EXCEPTION
WHEN NO_DATA_FOUND THEN
IF cur_custacctsite_party_p%ISOPEN THEN
CLOSE cur_custacctsite_party_p;
END IF;
RETURN (NULL);
WHEN OTHERS THEN
IF cur_custacctsite_party_p%ISOPEN THEN
CLOSE cur_custacctsite_party_p;
END IF;
RETURN (NULL);
END get_site_use_id;
--//============================================================================
--// Function Name :: get_obj_ver_num
--//
--// Description
:: Function to get object version number
--//
--// Parameters
:: p_customer_name
IN VARCHAR2
--//
p_customer_number IN Number
--// Note
:: hz_cust_accounts_all synonym is used in the package.
--//
--// Change Notes
--//============================================================================
--// Vers
Author
Date
Description
--//-----------------------------------------------------------------------------// 1.0
Sreekanth
27/08/2013
Initial Build
--//============================================================================
FUNCTION get_obj_ver_num(p_customer_name
IN VARCHAR2
,p_customer_number
IN NUMBER

,p_customer_site_number IN NUMBER)
RETURN NUMBER IS
CURSOR cur_custacctsite_party_p IS
SELECT hcsua.object_version_number
FROM hz_party_sites hps
,hz_parties hp
,hz_cust_accounts_all ca
,hz_cust_acct_sites_all hcas
,hz_cust_site_uses_all hcsua
WHERE hp.party_id
= hps.party_id
AND
hp.party_id
= ca.party_id
AND
hps.party_site_id
= hcas.party_site_id
AND
ca.cust_account_id
= hcas.cust_account_id
AND
hcsua.cust_acct_site_id = hcas.cust_acct_site_id
AND
hcsua.site_use_code
= 'BILL_TO'
AND
party_site_number
= p_customer_site_number
AND
(UPPER(hp.party_name) = UPPER(p_customer_name)
OR
ca.account_number
= p_customer_number);
lv_obj_ver_num apps.hz_cust_acct_sites_all.object_version_number%TYPE:= NULL;
BEGIN
OPEN cur_custacctsite_party_p;
FETCH cur_custacctsite_party_p INTO lv_obj_ver_num;
CLOSE cur_custacctsite_party_p;
RETURN lv_obj_ver_num;
EXCEPTION
WHEN NO_DATA_FOUND THEN
IF cur_custacctsite_party_p%ISOPEN THEN
CLOSE cur_custacctsite_party_p;
END IF;
RETURN(NULL);
WHEN OTHERS THEN
IF cur_custacctsite_party_p%ISOPEN THEN
CLOSE cur_custacctsite_party_p;
END IF;
RETURN(NULL);
END get_obj_ver_num;
--//============================================================================
--// Procedure Name :: xx_validate_load
--//
--// Description
:: Procedure to validate and load data via an API.
--//
--// Parameters
:: p_file_name
IN VARCHAR2
--//
p_validate_mode IN VARCHAR2
--//
--// Change Notes
--//============================================================================
--// Vers
Author
Date
Description
--//-----------------------------------------------------------------------------// 1.0
Sreekanth
27/08/2013
Initial Build
--//============================================================================
PROCEDURE xx_validate_load(p_file_name
IN VARCHAR2
,p_validate_mode IN VARCHAR2)
IS
--//============================================================================
--// Cursor Name :: cur_val_custacctsitetaxdet
--//
--// Description :: Cursor to fetch customer account site tax info from stagin

g table data
--//
--// Change Notes
--//-----------------------------------------------------------------------------// Vers
Author
Date
Description
--//-----------------------------------------------------------------------------// 1.0
Sreekanth
27/08/2013
Initial Creation
--//============================================================================
CURSOR cur_val_custacct_sitetaxdet (cp_process_flag IN VARCHAR2) IS
SELECT xcs.file_name
,
xcs.record_number
,
xcs.r12_customer_name
,
xcs.r12_customer_number
,
xcs.r12_customer_site_number
,
xcs.legacy_customer_name
,
xcs.legacy_customer_number
,
xcs.legacy_customer_site_number
,
xcs.operating_unit_name
,
xcs.tax_regime_code
,
xcs.tax
,
xcs.tax_jurisdiction_code
,
xcs.tax_registration_number
,
xcs.source
,
xcs.effective_from
,
xcs.non_std_tax_classification
,
xcs.non_uk_tax_registration
,
xcs.additional_column_1
,
xcs.additional_column_2
,
xcs.additional_column_3
,
xcs.additional_column_4
,
xcs.additional_column_5
FROM xxmig_ar_cust_site_tax_stg xcs
WHERE xcs.process_flag
= cp_process_flag
AND
xcs.rec_type
= 'D'
AND
TRIM (xcs.file_name) = TRIM (p_file_name);
--//============================================================================
--// Cursor Name :: cur_hdr_opcode_org_id
--//
--// Description :: Cursor to fetch organization id for customer header opco
--//
--// Change Notes
--//-----------------------------------------------------------------------------// Vers
Author
Date
Description
--//-----------------------------------------------------------------------------// 1.0
Sreekanth
27/08/2013
Initial Creation
--//============================================================================
CURSOR cur_hdr_opcode_org_id IS
SELECT haou.organization_id
FROM hr_organization_units
haou
,xxmig_ar_cust_site_tax_stg stg
WHERE TRIM (stg.file_name) = TRIM (p_file_name)
AND
stg.rec_type
= 'H'
AND
UPPER (stg.opco)
= UPPER (haou.NAME);
--//============================================================================
--// Cursor Name :: cur_custacct_sitetaxdet
--//
--// Description :: Cursor to fetch customer account site tax info from stagin
g table data

--//
--// Change Notes
--//-----------------------------------------------------------------------------// Vers
Author
Date
Description
--//-----------------------------------------------------------------------------// 1.0
Sreekanth
27/08/2013
Initial Creation
--//============================================================================
CURSOR cur_custacct_sitetaxdet (cp_process_flag IN VARCHAR2) IS
SELECT xas.rec_type
,
xas.file_name
,
xas.opco
,
xas.legacy_system_name
,
xas.total_records
,
xas.threshold
,
xas.record_number
,
xas.r12_customer_name
,
xas.r12_customer_number
,
xas.r12_customer_site_number
,
xas.legacy_customer_name
,
xas.legacy_customer_number
,
xas.legacy_customer_site_number
,
xas.operating_unit_name
,
xas.tax_regime_code
,
xas.tax
,
xas.tax_jurisdiction_code
,
xas.tax_registration_number
,
xas.source
,
xas.effective_from
,
xas.non_uk_tax_registration
,
xas.non_std_tax_classification
,
xas.val_oracle_customer_number
,
xas.val_org_id
,
xas.val_oracle_site_number
,
xas.val_party_tax_profile_id
,
xas.val_tax_regime_code
,
xas.val_tax
,
xas.val_tax_jurisdiction_code
,
xas.val_source
,
xas.val_tax_registration_number
,
xas.val_tax_classification
,
xas.val_cust_acct_site_id
,
xas.val_site_use_id
,
xas.val_object_version_number
,
xas.additional_column_1
,
xas.additional_column_2
,
xas.additional_column_3
,
xas.additional_column_4
,
xas.additional_column_5
,
xas.val_additional_column_1
,
xas.val_additional_column_2
,
xas.val_additional_column_3
,
xas.val_additional_column_4
,
xas.val_additional_column_5
,
xas.process_flag
,
xas.error_message
,
xas.error_code
,
xas.created_by
,
xas.creation_date
,
xas.last_updated_by
,
xas.last_update_date

,
FROM
WHERE
AND
AND
AND

xas.last_update_login
xxmig_ar_cust_site_tax_stg xas
xas.process_flag
= cp_process_flag
xas.rec_type
= 'D'
TRIM (xas.file_name) = TRIM (p_file_name)
xas.error_code IS NULL;

--//============================================================================
--// Declare Local Type Definitions
--//============================================================================
TYPE val_custacctsitetax_tabtype IS TABLE OF cur_val_custacct_sitetaxdet%ROW
TYPE
INDEX BY BINARY_INTEGER;
TYPE custacct_sitetax_tabtype IS TABLE OF cur_custacct_sitetaxdet%ROWTYPE
INDEX BY BINARY_INTEGER;
l_cust_acct_site_rec
hz_cust_account_site_v2pub.cust_site_use_rec_ty
pe;
--//============================================================================
--// Declaring a table type for staging table
--// Create PLSQL Tables of the TYPE val_<>_staging_rec
--// to return the BULK COLLECT INTO.
--//============================================================================
val_cust_sitetax_staging_rec val_custacctsitetax_tabtype;
custacct_sitetax_staging_rec custacct_sitetax_tabtype;
--//============================================================================
--// Declaring variables
--//============================================================================
lb_validate
BOOLEAN;
ln_level
NUMBER;
ln_business_group_id
hr_organization_units.business_group_id%TYPE;
lv_sqlerrm
fnd_log_messages.MESSAGE_TEXT%TYPE;
lv_insert_into_interface
BOOLEAN
:= FALSE;
lv_process_interface
BOOLEAN
:= FALSE;
ln_org_id
NUMBER
:= NULL;
lc_process_flag
VARCHAR2 (1)
:= 'N';
lv_proc_info
VARCHAR2 (100)
:= 'XXMIG_AR_CUST_SITE_TA
X_PKG.xx_validate_load';
lc_cnt_point_lookup_type
VARCHAR2 (50)
:= 'COMMUNICATION_TYPE';
lc_msg_separator
VARCHAR2 (10)
:= xxbb_mig_utils_pkg.gc_
message_separator;
e_program_exit
EXCEPTION;
p_customer_name
VARCHAR2 (360);
p_customer_number
NUMBER;
p_party_type_code
VARCHAR2 (30);
p_party_tax_profile_id
NUMBER (15);
p_inclusive_tax_flag
VARCHAR2 (1);
p_self_assess_flag
VARCHAR2 (1);
p_rounding_rule_code
VARCHAR2 (30);
p_tax_regime_code
VARCHAR2 (30);
p_tax
VARCHAR2 (30);
p_return_status
VARCHAR2 (1);
x_return_status
VARCHAR2 (200);
x_msg_count
NUMBER;
x_msg_data
VARCHAR2 (200);
l_error_message
VARCHAR2 (1000);
BEGIN
--//==========================================================================
--// Initialize the session to data migration user.

--//==========================================================================
xxbb_mig_utils_pkg.initialize_session(p_called_from
=> lv_proc_info
,p_module_name
=> 'AR');
ln_business_group_id
:= xxbb_mig_utils_pkg.get_business_group_id (p_ca
lled_from
=> lv_proc_info);
OPEN cur_hdr_opcode_org_id;
FETCH cur_hdr_opcode_org_id INTO ln_org_id;
IF cur_hdr_opcode_org_id%NOTFOUND THEN
lv_sqlerrm:=lv_sqlerrm||'Header Record OPCO name is invalid. OPCO is not d
efined as Operating Unit.';
CLOSE cur_hdr_opcode_org_id;
UPDATE xxmig_ar_cust_acc_tax_stg xsv
SET xsv.process_flag
='E'
,xsv.error_message
= xsv.error_message||lv_sqlerrm||lc_msg_separa
tor
,xsv.ERROR_CODE

= xsv.ERROR_CODE||'HEADEROPCO'||lc_msg_separat

or
WHERE TRIM (xsv.file_name) = TRIM (p_file_name)
AND
xsv.rec_type
= 'D';
COMMIT;
RAISE e_program_exit;
END IF;
CLOSE cur_hdr_opcode_org_id;
apps.mo_global.set_policy_context ('S', ln_org_id);
ln_level
:= 1;
IF p_validate_mode = 'Validate' THEN
lb_validate
:= TRUE;
lc_process_flag
:= 'N';
END IF;
IF p_validate_mode = 'Load' THEN
lb_validate
:= FALSE;
lc_process_flag
:= 'V';
END IF;
ln_level

:= 2;

IF lc_process_flag = 'N' THEN


OPEN cur_val_custacct_sitetaxdet (lc_process_flag);
LOOP
FETCH cur_val_custacct_sitetaxdet BULK COLLECT INTO val_cust_sitetax_sta
ging_rec LIMIT 5000;
EXIT WHEN val_cust_sitetax_staging_rec.COUNT = 0;
ln_level
:= 3;
--//==========================================================================
--// retrieving the ids or codes and updating the staging table.
--//==========================================================================
FORALL i IN val_cust_sitetax_staging_rec.FIRST .. val_cust_sitetax_stagi
ng_rec.LAST

UPDATE xxmig_ar_cust_site_tax_stg xsv


SET
xsv.process_flag
= 'V'
,
xsv.val_org_id
= (CASE WHEN val_cust_sitetax_stagi
ng_rec(i).operating_unit_name IS NOT NULL
THEN
xxbb_mig_utils_pkg.get_org_id(p_
called_from
=> lv_proc_info
,p_
business_group_id
=> ln_business_group_id
,p_
org_name
=> val_cust_sitetax_staging_rec(i).operating_unit_name
,p_
effective_date
=> NULL)
ELSE NULL
END)
,
xsv.val_party_tax_profile_id = (CASE WHEN (val_cust_sitetax_stag
ing_rec(i).r12_customer_name IS NOT NULL
OR val_cust_sitetax_staging_rec(
i).r12_customer_number IS NOT NULL)
THEN
xxmig_ar_cust_site_tax_pkg.get_p
arty_tax_profile_id(p_customer_name => val_cust_sitetax_staging_rec(i).r12_cus
tomer_name
,p_customer_number => val_cust_sitetax_staging_rec(i).r12_cus
tomer_number)
,
xsv.val_cust_acct_site_id
ging_rec(i).r12_customer_name IS NOT NULL

ELSE NULL
END)
= (CASE WHEN ((val_cust_sitetax_sta
OR val_cust_sitetax_staging_rec(

i).r12_customer_number IS NOT NULL)


AND val_cust_sitetax_staging_rec
(i).r12_customer_site_number IS NOT NULL)
THEN
xxmig_ar_cust_site_tax_pkg.get_c
=> val_cust_sitetax_staging_rec(i).r1

us_acct_site_id(p_customer_name
2_customer_name
,p_customer_number
2_customer_number

=> val_cust_sitetax_staging_rec(i).r1

,p_customer_site_number
2_customer_site_number)

=> val_cust_sitetax_staging_rec(i).r1

,
xsv.val_site_use_id
ging_rec(i).r12_customer_name IS NOT NULL

ELSE NULL
END)
= (CASE WHEN ((val_cust_sitetax_sta
OR val_cust_sitetax_staging_rec(

i).r12_customer_number IS NOT NULL)


AND val_cust_sitetax_staging_rec
(i).r12_customer_site_number IS NOT NULL)
ite_use_id(p_customer_name
tomer_name
,p_customer_number
tomer_number

THEN
xxmig_ar_cust_site_tax_pkg.get_s
=> val_cust_sitetax_staging_rec(i).r12_cus
=> val_cust_sitetax_staging_rec(i).r12_cus

,p_customer_site_number
tomer_site_number)

=> val_cust_sitetax_staging_rec(i).r12_cus

ELSE NULL
END)
,
xsv.val_object_version_number = (CASE WHEN ((val_cust_sitetax_sta
ging_rec(i).r12_customer_name IS NOT NULL
OR val_cust_sitetax_staging_rec(
i).r12_customer_number IS NOT NULL)
AND val_cust_sitetax_staging_rec
(i).r12_customer_site_number IS NOT NULL)
THEN xxmig_ar_cust_site_tax_pkg.
get_obj_ver_num(p_customer_name
=> val_cust_sitetax_staging_rec(i).r1
2_customer_name
,p_customer_number
2_customer_number

=> val_cust_sitetax_staging_rec(i).r1

,p_customer_site_number
2_customer_site_number)

=> val_cust_sitetax_staging_rec(i).r1

ELSE NULL
END)
,
xsv.val_tax_regime_code
= (CASE WHEN (SELECT COUNT (*)
FROM zx_regimes_b
WHERE tax_regime_cod
e = UPPER(val_cust_sitetax_staging_rec (i).tax_regime_code)) > 0
THEN
UPPER(val_cust_sitetax_staging_r
ec(i).tax_regime_code)
ELSE NULL
END)
,
xsv.val_tax
= (CASE WHEN (SELECT COUNT (*)
FROM zx_taxes_b
WHERE tax = UPPER(va
l_cust_sitetax_staging_rec(i).tax))>0
THEN
UPPER(val_cust_sitetax_staging_r
ec(i).tax)
ELSE NULL
END)
,
xsv.val_source
= (CASE WHEN UPPER(val_cust_sitetax
_staging_rec(i).SOURCE) ='IMPLICIT'
OR
UPPER (val_cust_sitetax_st
aging_rec(i).SOURCE)
='EXPLICIT'
THEN
UPPER(val_cust_sitetax_staging_r
ec(i).SOURCE)
ELSE NULL
END)
,
xsv.val_oracle_customer_number = (CASE WHEN val_cust_sitetax_stagi
ng_rec(i).r12_customer_number IS NOT NULL
AND (SELECT COUNT (*)
FROM hz_parties hp
,hz_cust_accounts_all
ca
WHERE hp.party_id
= ca.party_id
AND
ca.account_number
= val_cust_sitetax_staging_rec(i).r12_customer_number
AND
UPPER(hp.party_name)
= UPPER(val_cust_sitetax_staging_rec(i).r12_customer_name)) > 0

THEN
val_cust_sitetax_staging_rec(i).
r12_customer_number
ELSE NULL
END)
,
xsv.val_oracle_site_number
= (CASE WHEN val_cust_sitetax_stagi
ng_rec(i).r12_customer_site_number IS NOT NULL
AND (SELECT COUNT (*)
FROM hz_party_sites
WHERE party_site_number = v
al_cust_sitetax_staging_rec(i).r12_customer_site_number) > 0
THEN
val_cust_sitetax_staging_rec(i).
r12_customer_site_number
ELSE NULL
END)
,

xsv.val_tax_jurisdiction_code = (CASE WHEN (SELECT COUNT(*)


FROM zx_jurisdictio

ns_b
WHERE tax_jurisdicti
on_code =UPPER(val_cust_sitetax_staging_rec (i).tax_jurisdiction_code)) > 0
THEN
UPPER(val_cust_sitetax_staging_r
ec(i).tax_jurisdiction_code)
ELSE NULL
END)
,
xsv.val_tax_classification
= (CASE WHEN (val_cust_sitetax_stag
ing_rec (i).non_std_tax_classification IS NOT NULL)
AND ((SELECT COUNT (*) FROM fnd_
lookup_values
WHERE lookup_type IN('ZX_OU
TPUT_CLASSIFICATIONS'
,'ZX_IN
PUT_CLASSIFICATIONS'
,'ZX_WE
B_EXP_TAX_CLASSIFICATIONS')
AND
meaning = UPPER(val_
cust_sitetax_staging_rec(i).non_std_tax_classification)) > 0)
THEN
UPPER(val_cust_sitetax_staging_r
ec(i).non_std_tax_classification)
ELSE NULL
END)
WHERE xsv.file_name
= val_cust_sitetax_staging_rec (i).
file_name
AND
xsv.record_number
= val_cust_sitetax_staging_rec (i).
record_number
AND
xsv.rec_type
= 'D';
END LOOP;
COMMIT;
CLOSE cur_val_custacct_sitetaxdet;
--//==========================================================================
--// Updating the appropriate error message when ids or codes are null.
--// and also setting the process flag ='E'
--//==========================================================================

ln_level

:= 4;

--//Check the mandatory fields


UPDATE xxmig_ar_cust_site_tax_stg xsv
SET (xsv.error_message, xsv.ERROR_CODE, xsv.process_flag) = (SELECT xsv.er
ror_message|| 'R12 Customer Name cannot be blank or R12 Customer Number cannot b
e blank.'
|| lc_
msg_separator,xsv.ERROR_CODE|| 'PRH1'|| lc_msg_separator,'E' FROM DUAL)
WHERE TRIM (xsv.file_name)
= TRIM (p_file_n
ame)
AND
(xsv.r12_customer_name
IS NULL
OR
xsv.r12_customer_number
IS NULL)
AND
xsv.rec_type
= 'D';
UPDATE xxmig_ar_cust_site_tax_stg xsv
SET (xsv.error_message, xsv.ERROR_CODE, xsv.process_flag) = (SELECT xsv.er
ror_message|| 'R12 Customer Site Number cannot be blank.'
|| lc_
msg_separator,xsv.ERROR_CODE|| 'PRH2'|| lc_msg_separator,'E' FROM DUAL)
WHERE TRIM (xsv.file_name)
= TRIM (p_file_n
ame)
AND
xsv.r12_customer_site_number
IS NULL
AND
xsv.rec_type
= 'D';
UPDATE xxmig_ar_cust_site_tax_stg xsv
SET (xsv.error_message, xsv.ERROR_CODE, xsv.process_flag) = (SELECT xsv.er
ror_message|| 'This Customer is not Valid or does not exist'
|| lc_
msg_separator,xsv.ERROR_CODE|| 'PRH3'|| lc_msg_separator,'E' FROM DUAL)
WHERE TRIM (xsv.file_name)
= TRIM (p_file_n
ame)
AND
xsv.val_oracle_customer_number
IS NOT NULL
AND
xsv.r12_customer_number
IS NULL
AND
xsv.rec_type
= 'D';
UPDATE xxmig_ar_cust_site_tax_stg xsv
SET (xsv.error_message, xsv.ERROR_CODE, xsv.process_flag) = (SELECT xsv.er
ror_message|| 'This Customer Site Number is not Valid or does not exist'
|| lc_
msg_separator,xsv.ERROR_CODE|| 'PRH4'|| lc_msg_separator,'E' FROM DUAL)
WHERE TRIM (xsv.file_name)
= TRIM (p_file_n
ame)
AND
xsv.val_oracle_site_number
IS NULL
AND
xsv.rec_type
= 'D';
UPDATE xxmig_ar_cust_site_tax_stg xsv
SET (xsv.error_message, xsv.ERROR_CODE, xsv.process_flag) = (SELECT xsv.er
ror_message|| 'No Customer account site id found for this customer'
|| lc_
msg_separator,xsv.ERROR_CODE|| 'PRH5'|| lc_msg_separator,'E' FROM DUAL)
WHERE TRIM (xsv.file_name)
= TRIM (p_file_n
ame)
AND
xsv.val_cust_acct_site_id
IS NULL
AND
xsv.rec_type
= 'D';
UPDATE xxmig_ar_cust_site_tax_stg xsv
SET (xsv.error_message, xsv.ERROR_CODE, xsv.process_flag) = (SELECT xsv.er
ror_message|| 'No Customer site use id found for this customer'
|| lc_

msg_separator,xsv.ERROR_CODE|| 'PRH6'|| lc_msg_separator,'E' FROM DUAL)


WHERE TRIM (xsv.file_name)
= TRIM (p_file_n
ame)
AND
xsv.val_site_use_id
IS NULL
AND
xsv.rec_type
= 'D';
UPDATE xxmig_ar_cust_site_tax_stg xsv
SET (xsv.error_message, xsv.ERROR_CODE, xsv.process_flag) = (SELECT xsv.er
ror_message|| 'Source cannot be blank or Effective_From cannot be blank.'
|| lc_
msg_separator,xsv.ERROR_CODE|| 'PRH7'|| lc_msg_separator,'E' FROM DUAL)
WHERE TRIM (xsv.file_name)
= TRIM (p_file_n
ame)
AND
(xsv.val_source
IS NULL
OR
xsv.effective_from
IS NULL)
AND
xsv.rec_type
= 'D';
UPDATE xxmig_ar_cust_site_tax_stg xsv
SET (xsv.error_message, xsv.ERROR_CODE, xsv.process_flag) = (SELECT xsv.er
ror_message|| 'Tax Regime Code cannot be blank or not a valid one.'
|| lc_
msg_separator,xsv.ERROR_CODE|| 'PRH8'|| lc_msg_separator,'E' FROM DUAL)
WHERE TRIM (xsv.file_name)
= TRIM (p_file_n
ame)
AND
xsv.val_tax_regime_code
IS NULL
AND
xsv.tax_regime_code
IS NOT NULL
AND
xsv.rec_type
= 'D';
UPDATE xxmig_ar_cust_site_tax_stg xsv
SET (xsv.error_message, xsv.ERROR_CODE, xsv.process_flag) = (SELECT xsv.er
ror_message|| 'Tax Profile id cannot be blank.'
|| lc_
msg_separator,xsv.ERROR_CODE|| 'PRH9'|| lc_msg_separator,'E' FROM DUAL)
WHERE TRIM (xsv.file_name)
= TRIM (p_file_n
ame)
AND
xsv.val_party_tax_profile_id
IS NULL
AND
xsv.rec_type
= 'D';
UPDATE xxmig_ar_cust_site_tax_stg xsv
SET (xsv.error_message, xsv.ERROR_CODE, xsv.process_flag) = (SELECT xsv.er
ror_message|| 'Tax must be entered if the Tax Jursidiction Code is provided.'
|| lc_
msg_separator,xsv.ERROR_CODE|| 'PRH10'|| lc_msg_separator,'E' FROM DUAL)
WHERE TRIM (xsv.file_name)
= TRIM (p_file_n
ame)
AND
xsv.val_tax
IS NULL
AND
xsv.val_tax_jurisdiction_code
IS NOT NULL
AND
xsv.rec_type
= 'D';
UPDATE xxmig_ar_cust_site_tax_stg xsv
SET (xsv.error_message, xsv.ERROR_CODE, xsv.process_flag) = (SELECT xsv.er
ror_message|| 'This party already has a registration for this Jurisdiction.'
|| lc_
msg_separator,xsv.ERROR_CODE|| 'PRH11'|| lc_msg_separator,'E' FROM DUAL)
WHERE TRIM (xsv.file_name)
= TRIM (p_file_n
ame)
AND
xsv.val_party_tax_profile_id
IN (SELECT party
_tax_profile_id
FROM zx_re
gistrations

WHERE party
_tax_profile_id = xsv.val_party_tax_profile_id)
AND
xsv.rec_type
AND
xsv.tax_regime_code

= 'D'
IS NOT NULL;

UPDATE xxmig_ar_cust_site_tax_stg xsv


SET (xsv.error_message, xsv.ERROR_CODE, xsv.process_flag) = (SELECT xsv.er
ror_message|| 'This Tax jurisdiction code is not a Valid Code.'
|| lc_
msg_separator,xsv.ERROR_CODE|| 'PRH12'|| lc_msg_separator,'E' FROM DUAL)
WHERE TRIM (xsv.file_name)
= TRIM (p_file_n
ame)
AND
xsv.val_tax_jurisdiction_code
IS NULL
AND
xsv.tax_jurisdiction_code
IS NOT NULL
AND
xsv.rec_type
= 'D';
UPDATE xxmig_ar_cust_site_tax_stg xsv
SET (xsv.error_message, xsv.ERROR_CODE, xsv.process_flag) = (SELECT xsv.er
ror_message|| 'This Tax is not a Valid Code.'
|| lc_
msg_separator,xsv.ERROR_CODE|| 'PRH13'|| lc_msg_separator,'E' FROM DUAL)
WHERE TRIM (xsv.file_name)
= TRIM (p_file_n
ame)
AND
xsv.val_tax
IS NULL
AND
xsv.tax
IS NOT NULL
AND
xsv.rec_type
= 'D';
UPDATE xxmig_ar_cust_site_tax_stg xsv
SET (xsv.error_message, xsv.ERROR_CODE, xsv.process_flag) = (SELECT xsv.er
ror_message|| 'Invalid Tax classification code.'
|| lc_
msg_separator,xsv.ERROR_CODE|| 'PRH14'|| lc_msg_separator,'E' FROM DUAL)
WHERE TRIM (xsv.file_name)
= TRIM (p_file_n
ame)
AND
xsv.val_tax_classification
IS NULL
AND
xsv.non_std_tax_classification
IS NOT NULL
AND
xsv.rec_type
= 'D';
COMMIT;
END IF;
--//==========================================================================
--// Commit Customer Validations
--//==========================================================================
--//==========================================================================
--// after validation
--//===========================================================================
OPEN cur_custacct_sitetaxdet (lc_process_flag);
LOOP
FETCH cur_custacct_sitetaxdet BULK COLLECT INTO custacct_sitetax_staging_r
ec LIMIT 10000;
EXIT WHEN custacct_sitetax_staging_rec.COUNT = 0;
FOR i IN custacct_sitetax_staging_rec.FIRST .. custacct_sitetax_staging_re
c.LAST LOOP
BEGIN
SAVEPOINT before_api_call;

IF custacct_sitetax_staging_rec(i).tax_regime_code IS NOT NULL THEN


apps.zx_registrations_pkg.insert_row
(p_request_id
=>
p_attribute1
=>
p_attribute2
=>
p_attribute3
=>
p_attribute4
=>
p_attribute5
=>
p_attribute6
=>
p_validation_rule
=>
p_rounding_rule_code
=>
p_tax_jurisdiction_code
=>
p_self_assess_flag
=>
p_registration_status_code
=>
p_registration_source_code
=>
p_registration_reason_code
=>
p_tax
=>

,
,
,
,
,
,
,
,
,
,
,
,
,
,
tax
,
p_tax_regime_code
tax_regime_code
,
p_inclusive_tax_flag
,
p_effective_from
effective_from
,
p_effective_to
,
p_rep_party_tax_name
,
p_default_registration_flag
,
p_bank_account_num
,
p_record_type_code
,
p_legal_location_id
,
p_tax_authority_id
,
p_rep_tax_authority_id
,
p_coll_tax_authority_id
,
p_registration_type_code
,
p_registration_number
tax_registration_number
,
p_party_tax_profile_id
val_party_tax_profile_id
,
p_legal_registration_id
,
p_bank_id
,
p_bank_branch_id
,
p_account_site_id
,
p_attribute14
,
p_attribute15
,
p_attribute_category
,
p_program_login_id
,
p_account_id
,
p_tax_classification_code
,
p_attribute7
,
p_attribute8
,
p_attribute9
,
p_attribute10
,
p_attribute11
,
p_attribute12
,
p_attribute13
,
x_return_status
);
END IF;

''
''
''
''
''
''
''
''
''
''
''
''
''
''
custacct_sitetax_staging_rec(i).

=> custacct_sitetax_staging_rec(i).
=> ''
=> custacct_sitetax_staging_rec(i).
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>

''
''
''
''
''
''
''
''
''
''
custacct_sitetax_staging_rec(i).

=> custacct_sitetax_staging_rec(i).
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>
=>

''
''
''
''
''
''
''
''
''
''
''
''
''
''
''
''
''
p_return_status

ln_level

:= 7;

IF p_return_status = 'E' THEN


UPDATE xxmig_ar_cust_site_tax_stg xsv
SET (xsv.error_message, xsv.ERROR_CODE, xsv.process_flag) = (SELECT
xsv.error_message|| 'Error in API while inserting Tax details '
|| lc_msg_separator,xsv.ERROR_CODE|| 'PRH15'|| lc_msg_separator,'E' FROM DUAL)
WHERE TRIM (xsv.file_name)
= TRIM (cu
stacct_sitetax_staging_rec (i).file_name)
AND
xsv.r12_customer_number
= custacct
_sitetax_staging_rec (i).r12_customer_number
AND
xsv.record_number
= custacct
_sitetax_staging_rec (i).record_number;

ec
ec
ec
ec

ELSE
l_cust_acct_site_rec.cust_acct_site_id
(i).val_cust_acct_site_id;
l_cust_acct_site_rec.site_use_id
(i).val_site_use_id;
l_cust_acct_site_rec.tax_code
(i).non_std_tax_classification;
l_cust_acct_site_rec.tax_reference
(i).non_uk_tax_registration;

:= custacct_sitetax_staging_r
:= custacct_sitetax_staging_r
:= custacct_sitetax_staging_r
:= custacct_sitetax_staging_r

IF(custacct_sitetax_staging_rec (i).non_std_tax_classification IS NUL


L
AND custacct_sitetax_staging_rec (i).non_uk_tax_registration IS NUL
L)
THEN
UPDATE xxmig_ar_cust_site_tax_stg xmhes
SET xmhes.process_flag
= DECODE (lc_process_flag,'N
','V','V','P')
WHERE xmhes.r12_customer_number = custacct_sitetax_staging_rec
(i).r12_customer_number
AND
xmhes.file_name
= custacct_sitetax_staging_r
ec (i).file_name
AND
xmhes.record_number
= custacct_sitetax_staging_r
ec (i).record_number;
ELSE
BEGIN
apps.hz_cust_account_site_v2pub.update_cust_site_use
(p_init_msg_list
=> fnd_api.g_false
,
p_cust_site_use_rec
=> l_cust_acct_site_rec
,
p_object_version_number
=> custacct_sitetax_staging_rec(i).
val_object_version_number
,
x_return_status
=> x_return_status
,
x_msg_count
=> x_msg_count
,
x_msg_data
=> x_msg_data
);
IF x_return_status = 'E' THEN
UPDATE xxmig_ar_cust_site_tax_stg xsv
SET (xsv.error_message, xsv.ERROR_CODE, xsv.process_flag) =(SELE
CT xsv.error_message|| 'Error in API while updating Tax Details at site level'
|| lc_msg_separator,xsv.ERROR_CODE|| 'PRH16'|| lc_msg_separator,'E' FROM DUAL
)

WHERE TRIM (xsv.file_name)


= TRIM
(custacct_sitetax_staging_rec (i).file_name)
AND
xsv.r12_customer_number
= cust
acct_sitetax_staging_rec (i).r12_customer_number
AND
xsv.record_number
= cust
acct_sitetax_staging_rec (i).record_number;
ELSE
UPDATE xxmig_ar_cust_site_tax_stg xmhes
SET xmhes.process_flag
= DECODE (lc_process_flag,'N
','V','V','P')
WHERE xmhes.r12_customer_number = custacct_sitetax_staging_rec
(i).r12_customer_number
AND
xmhes.file_name
= custacct_sitetax_staging_r
ec (i).file_name
AND
xmhes.record_number
= custacct_sitetax_staging_r
ec (i).record_number;
END IF;
EXCEPTION
WHEN OTHERS THEN
lv_sqlerrm
:= REPLACE (SQLERRM, CHR (10), '');
lv_sqlerrm
:= SUBSTR (lv_sqlerrm, 1, 200);
ROLLBACK TO before_api_call;
UPDATE xxmig_ar_cust_site_tax_stg xmhes
SET (xmhes.error_message, xmhes.ERROR_CODE,xmhes.process_flag) =
(SELECT lv_sqlerrm|| lc_msg_separator,'API Update_cust_site_use'
|| lc_msg_separator,'E' FROM DUAL)
WHERE xmhes.r12_customer_number
custacct_sitetax_staging_rec (i).r12_customer_number
AND
file_name
custacct_sitetax_staging_rec (i).file_name
AND
record_number
custacct_sitetax_staging_rec (i).record_number;
END;
END IF;
END IF;

=
=
=

IF lb_validate THEN
ROLLBACK TO before_api_call;
END IF;
EXCEPTION
WHEN OTHERS THEN
lv_sqlerrm
:= REPLACE (SQLERRM, CHR (10), '');
lv_sqlerrm
:= SUBSTR (lv_sqlerrm, 1, 200);
ROLLBACK TO before_api_call;
UPDATE xxmig_ar_cust_site_tax_stg xmhes
SET (xmhes.error_message, xmhes.ERROR_CODE, xmhes.process_flag) = (S
ELECT lv_sqlerrm|| lc_msg_separator,'API ZX_REGISTRATIONS'
|| lc_msg_separator,'E' FROM DUAL)
WHERE xmhes.r12_customer_number
stacct_sitetax_staging_rec (i).r12_customer_number
AND
file_name
stacct_sitetax_staging_rec (i).file_name
AND
record_number
stacct_sitetax_staging_rec (i).record_number;
END;

= cu
= cu
= cu

END LOOP;
END LOOP;
CLOSE cur_custacct_sitetaxdet;
COMMIT;
EXCEPTION
WHEN e_program_exit THEN
IF cur_hdr_opcode_org_id%ISOPEN THEN
CLOSE cur_hdr_opcode_org_id;
END IF;
xxbb_mig_utils_pkg.log_error (p_error_level
,p_error_source_name
,p_error_message
);
WHEN OTHERS THEN
IF cur_hdr_opcode_org_id%ISOPEN THEN
CLOSE cur_hdr_opcode_org_id;
END IF;

=> ln_level
=> lv_proc_info
=> lv_sqlerrm

IF cur_val_custacct_sitetaxdet%ISOPEN THEN
CLOSE cur_val_custacct_sitetaxdet;
END IF;
ROLLBACK TO before_api_call;
lv_sqlerrm
:= REPLACE (SQLERRM, CHR (10), '');
lv_sqlerrm
:= SUBSTR (lv_sqlerrm, 1, 2000);
xxbb_mig_utils_pkg.log_error (p_error_level
=> ln_level
,p_error_source_name
=> lv_proc_info
,p_error_message
=> lv_sqlerrm
);
UPDATE xxmig_ar_cust_site_tax_stg xsv
SET xsv.error_message
= 'Unknown Exception:'|| lv_sqlerrm|| lc_msg_s
eparator
,xsv.ERROR_CODE
= 'ERR'|| lc_msg_separator
,xsv.process_flag
= 'E'
WHERE TRIM (xsv.file_name) = TRIM (p_file_name)
AND
xsv.rec_type
= 'D';
COMMIT;
RAISE;
END xx_validate_load;
END XXMIG_AR_CUST_SITE_TAX_PKG;
/
SHOW ERRORS PACKAGE BODY XXMIG_AR_CUST_SITE_TAX_PKG
EXIT;
--//==========================================================================

You might also like