You are on page 1of 565

CREATE OR REPLACE PACKAGE BODY APPS.

JAI_TAX_DETERMINATION_PKG AS
/* $Header: jai_tax_determination.plb 120.189.12020000.317 2018/08/21 09:20:29
aelluru noship $ */
G_PKG_NAME CONSTANT VARCHAR2(30) := 'JAI_TAX_DETERMINATION_PKG';
G_MODULE_NAME CONSTANT VARCHAR2(100) :=
'JAI.PLSQL.JAI_TAX_DETERMINATION_PKG.';
G_LEVEL_UNEXPECTED CONSTANT NUMBER := FND_LOG.LEVEL_UNEXPECTED;
G_LEVEL_ERROR CONSTANT NUMBER := FND_LOG.LEVEL_ERROR;
G_LEVEL_EXCEPTION CONSTANT NUMBER := FND_LOG.LEVEL_EXCEPTION;
G_LEVEL_EVENT CONSTANT NUMBER := FND_LOG.LEVEL_EVENT;
G_LEVEL_PROCEDURE CONSTANT NUMBER := FND_LOG.LEVEL_PROCEDURE;
G_LEVEL_STATEMENT CONSTANT NUMBER := FND_LOG.LEVEL_STATEMENT;

G_RET_SETUP_ERROR CONSTANT VARCHAR2(2) := 'SE'; --Added by Junjian for


bug#17992991
--Added by Wenqiong begin
G_RECOVERY_ACCT CONSTANT VARCHAR2(30) := 'RECOVERY';
G_INTERIM_RECOVERY_ACCT CONSTANT VARCHAR2(30) := 'INTERIM_RECOVERY';
G_SUSPENSE_ACCT CONSTANT VARCHAR2(30) := 'SUSPENSE';
G_EXPENSE_ACCT CONSTANT VARCHAR2(30) := 'EXPENSE';
G_LIABILITY_ACCT CONSTANT VARCHAR2(30) := 'LIABILITY';
G_INTERIM_LIABILITY_ACCT CONSTANT VARCHAR2(30) := 'INTERIM_LIABILITY';
G_AP_ACCRUAL_ACCT CONSTANT VARCHAR2(30) := 'AP_ACCRUAL';
--Added by Wenqiong end
/*----------------------------------------------------------------------------*
| PRIVATE FUNCTIONS/PROCEDURES |
*----------------------------------------------------------------------------*/
/*PROCEDURE calculate_tax_pvt(pvt_tax_line_rec IN OUT NOCOPY
pvt_tax_line_rec_type
,pn_line_amount_func IN NUMBER
,pv_process_status OUT NOCOPY VARCHAR2
,pv_process_message OUT NOCOPY VARCHAR2
);*/
PROCEDURE log_pvt_tax_line(pvt_tax_line_rec IN pvt_tax_line_rec_type);
FUNCTION any_tax_det_factors_change
(
p_det_factor_rec IN jai_tax_det_factors%ROWTYPE
,pv_process_status OUT NOCOPY VARCHAR2
,pv_process_message OUT NOCOPY VARCHAR2
) RETURN VARCHAR2;

FUNCTION any_amount_factors_change
(
p_det_factor_rec IN jai_tax_det_factors%ROWTYPE
,pv_process_status OUT NOCOPY VARCHAR2
,pv_process_message OUT NOCOPY VARCHAR2
) RETURN VARCHAR2;

--AELLURU FOR CUMMINS DROPSHIP


FUNCTION f_chck_rma ( pn_header_id NUMBER
,pn_line_id NUMBER)
RETURN VARCHAR2;
--AELLURU FOR CUMMINS DROPSHIP

/*PROCEDURE recalculate_tax_wrapper(pn_det_factor_id IN NUMBER


,pv_process_status OUT NOCOPY VARCHAR2
); */ --Modified by Qinglei for Receiving
PROCEDURE check_io_location
(
pn_application_id IN NUMBER
,pv_entity_code IN VARCHAR2
,pv_event_class_code IN VARCHAR2
,pn_org_id IN NUMBER
,pn_trx_id IN NUMBER
,pn_trx_line_id IN NUMBER -- Bug#19584708 added.
,pv_process_status OUT NOCOPY VARCHAR2
,pv_process_message OUT NOCOPY VARCHAR2
);
PROCEDURE derive_tax_point_date
(
pn_application_id IN NUMBER
,pv_entity_code IN VARCHAR2
,pv_event_type_code IN VARCHAR2 DEFAULT NULL -- added by zhiwei.xin for
bug#18619014
,pv_event_class_code IN VARCHAR2
,pn_trx_id IN NUMBER
,pn_trx_line_id IN NUMBER
,pn_trx_loc_line_id IN NUMBER DEFAULT NULL
,pd_trx_date IN DATE
,pv_tax_point_basis IN VARCHAR2 -- added by zhiwei.xin for bug#18619014
,pd_tax_point_date OUT NOCOPY DATE
);
/*PROCEDURE insert_jai_tax_dist(p_jai_tax_dist jai_rec_nrec_dist%ROWTYPE); */
--Modified by Qinglei for Receiving
PROCEDURE jai_insert_ap_inv_line( --Modified by Junjian for AP tax flow
p_ap_invoice_lines_all_rec IN
ap_invoice_lines_all%ROWTYPE);
/*PROCEDURE jai_insert_ap_inv_dist(--Modified by Junjian for AP tax flow
p_ap_invoice_dist_all_rec IN ap_invoice_distributions_all%ROWTYPE,
pn_ap_invoice_dist_id OUT NOCOPY NUMBER
); */
/*Commented by Qinglei for bug#20090376 begin
PROCEDURE jai_insert_ra_trx_line_gl_dist(--Modified by Junjian for AP tax flow
p_ra_cust_trx_dist_rec ra_cust_trx_line_gl_dist_all%ROWTYPE,
p_seq_id OUT NOCOPY NUMBER
);
PROCEDURE jai_insert_ra_trx_lines(--Modified by Junjian for AP tax flow
p_ra_trx_line_rec IN ra_customer_trx_lines_all%ROWTYPE,
p_seq OUT NOCOPY NUMBER);
Commented by Qinglei for bug#20090376 end*/
PROCEDURE jai_populate_tax_dist_ap
(
pr_tax_line jai_tax_lines%ROWTYPE --Modified by Junjian for AP tax
flow
,pv_tax_amount_type VARCHAR2 --possible values: 'Total','Rec','NRec'
,pn_num_lines_insert NUMBER --Number of lines need insert into AP line/Dist
,pn_diff_tpb NUMBER --Modified by Junjian for AP tax flow
,pv_external_flag VARCHAR2 DEFAULT 'N' -- added by zhiwei.xin for AP Open
Interface
,pv_jai_dist_ist_flag VARCHAR2 DEFAULT 'N' --Added for P2P accounting change
bug#18835939
/* Bug#26474772, dejiang.liu/20170722. Add parameter to indicate dist is for
REC split line. */
,pv_rec_split_flag VARCHAR2 DEFAULT 'N'
,pv_process_status OUT NOCOPY VARCHAR2
,pv_process_message OUT NOCOPY VARCHAR2
);
PROCEDURE calculate_tax_for_last
(
pn_det_factor_id IN NUMBER
,p_tax_lines_tbl IN OUT NOCOPY tax_lines_tbl
,pv_call_from IN VARCHAR2 DEFAULT NULL
,pv_processed_flag OUT NOCOPY VARCHAR2
,pv_process_status OUT NOCOPY VARCHAR2
,pv_process_message OUT NOCOPY VARCHAR2
);
--Added by Junjian for TCS bug#20057641 begin
PROCEDURE determine_tcs_tax
(
pn_det_factor_id IN NUMBER
,p_tax_lines_tbl IN OUT NOCOPY tax_lines_tbl
,pv_call_from IN VARCHAR2 DEFAULT NULL
,pv_process_status OUT NOCOPY VARCHAR2
,pv_process_message OUT NOCOPY VARCHAR2
);
--Added by Junjian for TCS bug#20057641 end
--START additions by vkaranam for bug#26266073
TYPE src_type IS RECORD(
application_id jai_tax_det_factors.application_id%TYPE
,entity_code jai_tax_det_factors.entity_code%TYPE
,event_class_code jai_tax_det_factors.event_class_code%TYPE
,trx_id jai_tax_det_factors.trx_id%TYPE
,trx_line_id jai_tax_det_factors.trx_line_id%TYPE
,trx_loc_line_id jai_tax_det_factors.trx_loc_line_id%TYPE
,trx_level_type jai_tax_det_factors.trx_level_type%TYPE
,trx_type jai_tax_det_factors.trx_type%TYPE);

src_rec src_type;
ln_src_rec src_rec%TYPE;
PROCEDURE get_source_details
(
p_det_factor_rec IN OUT NOCOPY jai_tax_det_factors%ROWTYPE
,pv_process_status OUT NOCOPY VARCHAR2
,pv_process_message OUT NOCOPY VARCHAR2
,pn_src_rec OUT NOCOPY src_type
);

--end additions by vkaranam for bug#26266073

/*---------------------------------------------------------------------------------
-----------------------------+
| Created By : Wenqiong Zhou
|
| Creation Date : 10/Apr/2013
|
| Bug Number/ER Name : Phase IV Tax Determination
|
| SubProgram Name : VALIDATE_INIT_DET_FACTORS
|
| Type : PROCEDURE
|
| Purpose : Validates and initializes parameters for the
insert/update JAI_TAX_DET_FACTORS |
| TDD Reference : Section 6.1
|
| Assumptions :
|
| Called From : INSERT_LINE_DET_FACTORS,UPDATE_LINE_DET_FACTORS
|

|----------------------------------------------------------------------------------
----------------------------|
| parameters IN/OUT Type Required Description and
Purpose |
| ------------ -------------- ----------
------------------------- |
| prec_det_factor IN RECORD yes
JAI_TAX_DET_FACTORS record |
| pv_process_status OUT VARCHAR2 yes Return status
|
| pv_process_message OUT VARCHAR2 yes Return message
|

*----------------------------------------------------------------------------------
-----------------------------*/
PROCEDURE validate_init_det_factors
(
p_det_factor_rec IN OUT NOCOPY jai_tax_det_factors%ROWTYPE
,pv_process_status OUT NOCOPY VARCHAR2
,pv_process_message OUT NOCOPY VARCHAR2
) IS
CURSOR c_3rd_party_reporting
(
cn_party_id NUMBER
,cn_party_site_id NUMBER
,cv_party_type VARCHAR2
) IS
SELECT rep_ass.reporting_code_id
FROM jai_party_regs reg
,jai_reporting_associations rep_ass
,jai_reporting_types rep_type
WHERE rep_ass.reporting_type_id = rep_type.reporting_type_id
AND reg.party_type_code IN ('THIRD_PARTY'
,'THIRD_PARTY_SITE') --
AND reg.party_id = cn_party_id
AND nvl(reg.party_site_id,-1)=nvl(cn_party_site_id,-1)
/* AND nvl(reg.party_site_id
,0) = nvl(cn_party_site_id
,nvl(reg.party_site_id
,0)) bug 28218686 */--Added by Wenqiong 0722
AND reg.supplier_flag = decode(cv_party_type
,PARTY_TYPE_SUPPLIER
,'Y'
,'N')
AND reg.customer_flag = decode(cv_party_type
,PARTY_TYPE_CUSTOMER
,'Y'
,'N')
AND (rep_ass.entity_code = 'THIRD_PARTY' AND rep_ass.entity_id =
reg.party_reg_id)
AND rep_type.reporting_usage = 'TD' --Tax Determination
AND nvl(rep_ass.effective_from
,SYSDATE - 1) <= SYSDATE
AND nvl(rep_ass.effective_to
,SYSDATE + 1) >= SYSDATE
AND nvl(rep_type.effective_from
,SYSDATE - 1) <= SYSDATE --Added by Wenqiong for effective date
check on July 10
AND nvl(rep_type.effective_to
,SYSDATE + 1) >= SYSDATE; --Added by Wenqiong for effective date
check on July 10

CURSOR c_item_classification
(
cn_organization_id NUMBER
,cn_inventory_item_id NUMBER
) IS
SELECT item_classification
FROM jai_item_templ_hdr
WHERE organization_id = cn_organization_id
AND inventory_item_id = cn_inventory_item_id;

CURSOR c_item_reporting_code
(
cn_organization_id NUMBER
,cn_inventory_item_id NUMBER
) IS
SELECT rep_ass.reporting_code_id
FROM jai_item_templ_hdr hdr
,jai_reporting_associations rep_ass
,jai_reporting_types rep_type
WHERE rep_ass.reporting_type_id = rep_type.reporting_type_id
AND hdr.inventory_item_id = cn_inventory_item_id
AND hdr.organization_id = cn_organization_id
AND (rep_ass.entity_code = 'ITEM' AND rep_ass.entity_id =
hdr.template_hdr_id)
AND rep_type.reporting_usage = 'TD' --Tax Determination
AND nvl(rep_ass.effective_from
,SYSDATE - 1) <= SYSDATE
AND nvl(rep_ass.effective_to
,SYSDATE + 1) >= SYSDATE
AND nvl(rep_type.effective_from
,SYSDATE - 1) <= SYSDATE --Added by Wenqiong for effective date
check on July 10
AND nvl(rep_type.effective_to
,SYSDATE + 1) >= SYSDATE; --Added by Wenqiong for effective date
check on July 10

CURSOR c_1st_party_reporting_code
(
cn_organization_id NUMBER
,cn_location_id NUMBER
,cn_party_reg_id IN NUMBER
) IS
SELECT rep_ass.reporting_code_id
FROM jai_party_regs reg
,jai_reporting_associations rep_ass
,jai_reporting_types rep_type
WHERE rep_ass.reporting_type_id = rep_type.reporting_type_id
/* Bug#18033001 begin, change first party matching logic. */
/*
AND reg.party_type_code = 'IO'
AND reg.party_id = cn_organization_id
AND ( reg.party_site_id = cn_location_id OR reg.party_site_id IS NULL)
*/
AND reg.party_reg_id = cn_party_reg_id --26399170
/* (SELECT get_fp_matched_id(p_organization_id => cn_organization_id
,p_location_id => cn_location_id
,p_org_id => p_det_factor_rec.org_id
,p_regime_type => 'T'
,p_regime_id => NULL)
FROM dual)*/ /*26399170*/
/* Bug#18033001 end. */

AND (rep_ass.entity_code = 'FIRST_PARTY' AND rep_ass.entity_id =


reg.party_reg_id)
AND rep_type.reporting_usage = 'TD' --Tax Determination
AND nvl(rep_ass.effective_from
,SYSDATE - 1) <= SYSDATE
AND nvl(rep_ass.effective_to
,SYSDATE + 1) >= SYSDATE
AND nvl(rep_type.effective_from
,SYSDATE - 1) <= SYSDATE --Added by Wenqiong for effective date
check on July 10
AND nvl(rep_type.effective_to
,SYSDATE + 1) >= SYSDATE; --Added by Wenqiong for effective date
check on July 10

ln_party_reg_id NUMBER; --26399170

/* Bug#24838796/GST start, dejiang.liu/20161012, add cursor to get HSN/SAC


code association from item classification. */
-- Cursor to get HSN/SAC Code.
/* Bug#25953035, dejiang.liu/20170520. Cursor obsoleted which will use
jai_reporting_pkg
to get HSN/SAC. */
CURSOR c_hsn_sac_info
(
p_organization_id NUMBER
,p_inventory_item_id NUMBER
/* Bug#25251178, dejiang.liu/20161226. Add parameter for item classification.
*/
,p_item_classification VARCHAR2
,p_party_id NUMBER
,p_party_site_id NUMBER
,p_party_type VARCHAR2
) IS
SELECT jra.reporting_code_id
,jra.reporting_code
,jrt.reporting_type_code
FROM jai_reporting_associations jra
,jai_reporting_types jrt
,jai_item_templ_hdr jith
WHERE jra.reporting_type_id = jrt.reporting_type_id
AND jra.entity_id = jith.template_hdr_id
AND jra.entity_code = 'ITEM'
AND jra.entity_source_table = 'JAI_ITEM_TEMPL_HDR'
AND jith.organization_id = p_organization_id
AND jith.inventory_item_id = p_inventory_item_id
/* Bug#25251178, dejiang.liu/20161226. Modify logic of HSN/SAC Code.*/
/*
AND jrt.reporting_type_code IN
('GST_HSN_CODE'
,'GST_SAC_CODE_ITEM')
*/
AND ((p_item_classification = 'PRSV' AND jrt.reporting_type_code =
'GST_SAC_CODE_ITEM') OR
(nvl(p_item_classification
,'NULL') <> 'PRSV' AND jrt.reporting_type_code = 'GST_HSN_CODE'))

AND SYSDATE BETWEEN nvl(jra.effective_from


,SYSDATE - 1) AND nvl(jra.effective_to
,SYSDATE + 1)
AND SYSDATE BETWEEN nvl(jrt.effective_from
,SYSDATE - 1) AND nvl(jra.effective_to
,SYSDATE + 1)
UNION ALL
SELECT jra.reporting_code_id
,jra.reporting_code
,jrt.reporting_type_code
FROM jai_reporting_associations jra
,jai_reporting_types jrt
,(SELECT DISTINCT first_value(party_reg_id) over(ORDER BY
party_site_id) party_reg_id
FROM jai_party_regs jpr
WHERE jpr.party_id = p_party_id
AND (jpr.party_site_id IS NULL OR jpr.party_site_id =
p_party_site_id)
AND jpr.supplier_flag = decode(upper(p_party_type)
,'SUPPLIER'
,'Y'
,'N')
AND jpr.customer_flag = decode(upper(p_party_type)
,'CUSTOMER'
,'Y'
,'N')) party_reg
WHERE jra.reporting_type_id = jrt.reporting_type_id
AND jra.entity_id = party_reg.party_reg_id
AND jra.entity_code = 'THIRD_PARTY'
AND jra.entity_source_table = 'JAI_PARTY_REGS'
AND jrt.reporting_type_code = 'GST_SAC_CODE_TP'
-- Filter for only transaction line without item.
AND p_inventory_item_id IS NULL
AND SYSDATE BETWEEN nvl(jra.effective_from
,SYSDATE - 1) AND nvl(jra.effective_to
,SYSDATE + 1)
AND SYSDATE BETWEEN nvl(jrt.effective_from
,SYSDATE - 1) AND nvl(jra.effective_to
,SYSDATE + 1);
/* Bug#24838796/GST end. */

/* Bug#25953035, dejiang.liu/20170520. Add variables for default HSN/SAC. */


l_hsn_code_id NUMBER;
l_sac_code_id NUMBER;

lv_api_name CONSTANT VARCHAR2(50) := 'VALIDATE_INIT_DET_FACTORS';


lv_tax_event_class_code jai_tax_det_factors.tax_event_class_code%TYPE;
lv_tax_event_type_code jai_tax_det_factors.tax_event_type_code%TYPE;
lv_state jai_tax_det_factors.ship_to_state%TYPE;
lv_country jai_tax_det_factors.ship_to_country%TYPE;
lv_item_classification jai_tax_det_factors.item_classification%TYPE;
lv_tax_determination_basis jai_tax_det_factors.tax_determination_basis%TYPE;
lv_return_status VARCHAR2(30);
lv_process_message VARCHAR2(150);

BEGIN

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name || '.BEGIN'
,lv_api_name || '()+');
END IF;
pv_process_status := FND_API.G_RET_STS_SUCCESS;

/* ----------------------------------------------------------------------+
| Get Tax Event Class |
+ ----------------------------------------------------------------------*/
IF p_det_factor_rec.tax_event_class_code IS NULL THEN
get_tax_event_class(pn_application_id =>
p_det_factor_rec.application_id
,pv_entity_code => p_det_factor_rec.entity_code
,pv_event_class_code =>
p_det_factor_rec.event_class_code
,pv_tax_event_class_code => lv_tax_event_class_code
,pv_process_status => lv_return_status
,pv_process_message => lv_process_message);
p_det_factor_rec.tax_event_class_code := lv_tax_event_class_code;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || ':tax_event_class_code:' ||
lv_tax_event_class_code);
END IF;

IF lv_return_status <> FND_API.G_RET_STS_SUCCESS THEN


pv_process_status := lv_return_status;
pv_process_message := lv_process_message;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'calling get_tax_event_class with error:' ||
lv_process_message);
END IF;
END IF;
END IF;
/* ----------------------------------------------------------------------+
| Get Tax Event Type |
+ ----------------------------------------------------------------------*/
IF p_det_factor_rec.tax_event_type_code IS NULL THEN
get_tax_event_type(pn_application_id => p_det_factor_rec.application_id
,pv_entity_code => p_det_factor_rec.entity_code
,pv_event_class_code =>
p_det_factor_rec.event_class_code
,pv_event_type_code => p_det_factor_rec.event_type_code
,pv_tax_event_type_code => lv_tax_event_type_code
,pv_process_status => lv_return_status
,pv_process_message => lv_process_message);

p_det_factor_rec.tax_event_type_code := lv_tax_event_type_code;
IF lv_return_status <> FND_API.G_RET_STS_SUCCESS THEN
pv_process_status := lv_return_status;
pv_process_message := lv_process_message;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'calling get_tax_event_type with error:' ||
lv_process_message);
END IF;
END IF;
END IF;
/* ----------------------------------------------------------------------+
| Get the locations state and country |
+ ----------------------------------------------------------------------*/
IF nvl(p_det_factor_rec.ship_from_location_id
,0) > 0 THEN
get_location_state_country(pn_location_id =>
p_det_factor_rec.ship_from_location_id
,pv_state => lv_state
,pv_country => lv_country
,pv_process_status => lv_return_status
,pv_process_message => lv_process_message);
p_det_factor_rec.ship_from_state := lv_state;
p_det_factor_rec.ship_from_country := lv_country;
IF lv_return_status <> FND_API.G_RET_STS_SUCCESS THEN
pv_process_status := lv_return_status;
pv_process_message := lv_process_message;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'calling get_location_state_country for ship from location
with error:' || lv_process_message);
END IF;
END IF;
END IF;

IF nvl(p_det_factor_rec.ship_to_location_id
,0) > 0 THEN
get_location_state_country(pn_location_id =>
p_det_factor_rec.ship_to_location_id
,pv_state => lv_state
,pv_country => lv_country
,pv_process_status => lv_return_status
,pv_process_message => lv_process_message);
p_det_factor_rec.ship_to_state := lv_state;
p_det_factor_rec.ship_to_country := lv_country;
IF lv_return_status <> FND_API.G_RET_STS_SUCCESS THEN
pv_process_status := lv_return_status;
pv_process_message := lv_process_message;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'calling get_location_state_country for ship to location
with error:' || lv_process_message);
END IF;
END IF;
END IF;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'calling get_location_state_country for bill to location
p_det_factor_rec.bill_to_location_id=' ||
p_det_factor_rec.bill_to_location_id);
END IF;
--added by mani for rule process changes bug 26030089
IF nvl(p_det_factor_rec.bill_to_location_id
,0) > 0 THEN
get_location_state_country(pn_location_id =>
p_det_factor_rec.bill_to_location_id
,pv_state => lv_state
,pv_country => lv_country
,pv_process_status => lv_return_status
,pv_process_message => lv_process_message);
p_det_factor_rec.bill_to_state := lv_state;
p_det_factor_rec.bill_to_country := lv_country;
IF lv_return_status <> FND_API.G_RET_STS_SUCCESS THEN
pv_process_status := lv_return_status;
pv_process_message := lv_process_message;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'calling get_location_state_country for bill to location
with error:' || lv_process_message);
END IF;
END IF;
END IF;
--added by mani for rule process changes bug 26030089

/* ----------------------------------------------------------------------+
| Get Item Classification and item reporting code |
+ ----------------------------------------------------------------------*/
IF nvl(p_det_factor_rec.organization_id
,0) > 0
AND nvl(p_det_factor_rec.item_id
,0) > 0 THEN
OPEN c_item_classification(p_det_factor_rec.organization_id
,p_det_factor_rec.item_id);
FETCH c_item_classification
INTO lv_item_classification;
CLOSE c_item_classification;
p_det_factor_rec.item_classification := lv_item_classification;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Get lv_item_classification:' || lv_item_classification);
END IF;
/* Bug#24838796/GST, dejiang.liu/20161012. Comment out item reporting code
logic
which will be set for HSN/SAC. */
/* Bug#26279373, dejiang.liu/20170615. Restore logic for item reporting code.
*/
OPEN c_item_reporting_code(p_det_factor_rec.organization_id
,p_det_factor_rec.item_id);
FETCH c_item_reporting_code
INTO p_det_factor_rec.item_report_code_id;
CLOSE c_item_reporting_code;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Get item_report_code_id:' ||
p_det_factor_rec.item_report_code_id);
END IF;

END IF;
/* ----------------------------------------------------------------------+
| Get first party's reporting code with type of determination |
+ ----------------------------------------------------------------------*/
IF nvl(p_det_factor_rec.organization_id
,0) > 0 THEN
/*26399170 ,start*/
ln_party_reg_id := NULL;

ln_party_reg_id := get_fp_matched_id(p_organization_id =>


p_det_factor_rec.organization_id
,p_location_id =>
p_det_factor_rec.location_id
,p_org_id =>
p_det_factor_rec.org_id
,p_regime_type => 'T'
,p_regime_id => NULL);

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'ln_party_Reg_id retrieved is ' || ln_party_reg_id);
END IF;
/*end bug#26399170*/
OPEN c_1st_party_reporting_code(p_det_factor_rec.organization_id
,p_det_factor_rec.location_id
,ln_party_reg_id); --26399170
FETCH c_1st_party_reporting_code
INTO p_det_factor_rec.first_party_report_code_id;
CLOSE c_1st_party_reporting_code;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN

FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Retrive determine tax type report code for 1st party as
first_party_report_code_id:' ||
p_det_factor_rec.first_party_report_code_id);
END IF;

END IF;
/* ----------------------------------------------------------------------+
| Get third party's reporting code with type of determination |
+ ----------------------------------------------------------------------*/

/* Bug#24838796/GST, dejiang.liu/20161012. Comment out item reporting code


logic
which will be set for HSN/SAC. */
/* Bug#26279373, dejiang.liu/20170615. Restore logic for third party reporting
code. */
OPEN c_3rd_party_reporting(p_det_factor_rec.party_id
,p_det_factor_rec.party_site_id
,p_det_factor_rec.party_type);
FETCH c_3rd_party_reporting
INTO p_det_factor_rec.third_party_report_code_id;
CLOSE c_3rd_party_reporting;

--Added by Wenqiong 0722 begin


IF nvl(p_det_factor_rec.third_party_report_code_id
,0) = 0 THEN
--Get from Null Site level
OPEN c_3rd_party_reporting(p_det_factor_rec.party_id
,NULL
,p_det_factor_rec.party_type);
FETCH c_3rd_party_reporting
INTO p_det_factor_rec.third_party_report_code_id;
CLOSE c_3rd_party_reporting;
END IF;
--Added by Wenqiong 0722 end
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Retrive determine tax type report code for 3rd party as
third_party_report_code_id:' ||
p_det_factor_rec.third_party_report_code_id);
END IF;

/* ----------------------------------------------------------------------+
| Get the tax determination basis |
+ ----------------------------------------------------------------------*/
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'before calling get_tax_determination_basis
p_det_factor_rec.tax_determination_basis:' ||
p_det_factor_rec.tax_determination_basis);
END IF;

IF p_det_factor_rec.tax_determination_basis IS NULL THEN


--added by mani for copy basis changes bug 26397775

get_tax_determination_basis(p_det_factor_rec => p_det_factor_rec


,pv_process_status => lv_return_status
,pv_process_message => lv_process_message);

IF lv_return_status <> FND_API.G_RET_STS_SUCCESS THEN


--Modified by Junjian for bug#17992991 begin
--pv_process_status := lv_return_status;
pv_process_status := G_RET_SETUP_ERROR;
--Modified by Junjian for bug#17992991 end
pv_process_message := lv_process_message;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'calling get_tax_determination_basis with error:' ||
lv_process_message);
END IF;
RETURN;
END IF;
END IF; --tax_determination_basis is null

/* ----------------------------------------------------------------------+
| Get HSN/SAC reporting code |
+ ----------------------------------------------------------------------*/
/* Bug#24838796/GST, dejiang.liu/20161012 start. Add logic to get HSN/SAC Code.
*/
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Begin HSN/SAC Determination');
END IF;
/* Bug#25953035, dejiang.liu/20170520. Modify to use new logic. */
/*
FOR rec_hsn_sac_info IN c_hsn_sac_info(p_det_factor_rec.organization_id
,p_det_factor_rec.item_id
\* Bug#25251178, dejiang.liu/20161226.
Add parameter for item classification. *\
,p_det_factor_rec.item_classification
,p_det_factor_rec.party_id
,p_det_factor_rec.party_site_id
,p_det_factor_rec.party_type)
LOOP
IF rec_hsn_sac_info.reporting_type_code = 'GST_HSN_CODE' THEN
-- Update HSN Code information.

IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||lv_api_name,'HSN Code ID: '
|| rec_hsn_sac_info.reporting_code_id);
END IF;
p_det_factor_rec.item_report_code_id :=
nvl(p_det_factor_rec.item_report_code_id
,rec_hsn_sac_info.reporting_code_id);

ELSIF rec_hsn_sac_info.reporting_type_code IN ('GST_SAC_CODE_ITEM'


,'GST_SAC_CODE_TP') THEN
IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||lv_api_name,'GST_SAC Code
ID: '
|| rec_hsn_sac_info.reporting_code_id);
END IF;
p_det_factor_rec.third_party_report_code_id :=
nvl(p_det_factor_rec.third_party_report_code_id
,rec_hsn_sac_info.reporting_code_id);
END IF;
END LOOP; -- FOR rec_item_hsn_sac_info.
*/

/* Bug#26279373, dejiang.liu/20170615. Add logic to initialize HSN/SAC. */


l_hsn_code_id := p_det_factor_rec.hsn_code_id;
l_sac_code_id := p_det_factor_rec.sac_code_id;

jai_reporting_pkg.get_hsn_sac(p_organization_id =>
p_det_factor_rec.organization_id
,p_inventory_item_id => p_det_factor_rec.item_id
,p_party_id => p_det_factor_rec.party_id
,p_party_site_id =>
p_det_factor_rec.party_site_id
,p_party_type =>
p_det_factor_rec.party_type
,p_hsn_code_id => l_hsn_code_id
,p_sac_code_id => l_sac_code_id);
/* Bug#26279373 start, dejiang.liu/20170615. Modify logic to use columns for
HSN/SAC. */
/*
p_det_factor_rec.item_report_code_id :=
nvl(p_det_factor_rec.item_report_code_id
,l_hsn_code_id);
p_det_factor_rec.third_party_report_code_id :=
nvl(p_det_factor_rec.third_party_report_code_id
,l_sac_code_id);
*/
p_det_factor_rec.hsn_code_id := nvl(p_det_factor_rec.hsn_code_id
,l_hsn_code_id);
p_det_factor_rec.sac_code_id := nvl(p_det_factor_rec.sac_code_id
,l_sac_code_id);
/* Bug#26279373 end. */
/* Bug#25953035 end. */
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'End HSN/SAC Determination');
END IF;
/* Bug#24838796/GST, dejiang.liu/20161012 end. */

/* ----------------------------------------------------------------------+
| Check Required parameters |
+ ----------------------------------------------------------------------*/
check_required_params(p_det_factor_rec => p_det_factor_rec
,pv_return_status => lv_return_status);
IF lv_return_status <> FND_API.G_RET_STS_SUCCESS THEN
pv_process_status := lv_return_status;
pv_process_message := lv_process_message;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'calling get_tax_determination_basis with error:' ||
lv_process_message);
END IF;
RETURN;
END IF;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;

END validate_init_det_factors;

/*---------------------------------------------------------------------------------
-------------------------------+
| Created By : Wenqiong Zhou
|
| Creation Date : 10/Apr/2013
|
| Bug Number/ER Name : Phase IV Tax Determination
|
| SubProgram Name : INSERT_LINE_DET_FACTORS
|
| Type : PROCEDURE
|
| Purpose : This procedure should be called by products when
creating a document or inserting a new |
| transaction line for existing document through ZX hook
|
| TDD Reference : Section 6.2
|
| Assumptions :
|
| Called From :
|

|----------------------------------------------------------------------------------
------------------------------|
| parameters IN/OUT Type Required
Description and Purpose |
| ------------ -------- ------ ----------
------------------------- |
| p_det_factor_rec IN RECORD yes
JAI_TAX_DET_FACTORS record |
| pv_process_status OUT VARCHAR2 yes Return
status |
| pv_process_message OUT VARCHAR2 yes Return
message |

*----------------------------------------------------------------------------------
-------------------------------*/
PROCEDURE insert_line_det_factors
(
p_det_factor_rec IN OUT NOCOPY jai_tax_det_factors%ROWTYPE
,pv_process_status OUT NOCOPY VARCHAR2
,pv_process_message OUT NOCOPY VARCHAR2
) IS
CURSOR c_det_factor_id IS
SELECT jai_tax_det_factors_s.nextval
FROM dual;
lv_api_name CONSTANT VARCHAR2(50) := 'insert_line_det_factors';
lv_process_status VARCHAR2(30);
lv_process_message VARCHAR2(150);
ln_det_factor_id NUMBER;

--added by mani for bug 26140944


CURSOR c_chk_isup IS
SELECT 'Y'
FROM rcv_transactions_interface rti
WHERE rti.shipment_header_id = p_det_factor_rec.trx_id
AND rti.shipment_line_id = p_det_factor_rec.trx_line_id
AND rti.interface_source_code = 'IP'
UNION
SELECT 'Y'
FROM rcv_transactions rti
WHERE rti.shipment_header_id = p_det_factor_rec.trx_id
AND rti.shipment_line_id = p_det_factor_rec.trx_line_id
AND rti.interface_source_code = 'IP';
lv_chk_isup VARCHAR2(1) := 'N';
--added by mani for bug 26140944

BEGIN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----Begin----' || '()+');
END IF;
pv_process_status := FND_API.G_RET_STS_SUCCESS;

/*------------------------------------------------------+
| Validate and Initializate parameters for Inserting |
| into line_det_factors |
+------------------------------------------------------*/
validate_init_det_factors(p_det_factor_rec => p_det_factor_rec
,pv_process_status => lv_process_status
,pv_process_message => lv_process_message);
IF lv_process_status <> FND_API.G_RET_STS_SUCCESS THEN
--Modified by Junjian for bug#17992991 begin
IF lv_process_status = G_RET_SETUP_ERROR THEN
pv_process_status := FND_API.G_RET_STS_SUCCESS;
pv_process_message := lv_process_message;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'validate_init_det_factors returned null');
END IF;
RETURN;
ELSE
pv_process_status := lv_process_status;
pv_process_message := lv_process_message;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'validate_init_det_factors returned errors');
END IF;
END IF;
--Modified by Junjian for bug#17992991 end
END IF;
IF lv_process_status = FND_API.G_RET_STS_ERROR THEN
pv_process_status := lv_process_status;
pv_process_message := lv_process_message;
RAISE FND_API.G_EXC_ERROR;
ELSIF lv_process_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
pv_process_status := lv_process_status;
pv_process_message := lv_process_message;
RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
END IF;

/*--------------------------------------------------+
| Standard start of API savepoint |
+--------------------------------------------------*/

OPEN c_det_factor_id;
FETCH c_det_factor_id
INTO ln_det_factor_id;
CLOSE c_det_factor_id;

--added by mani for bug 26140944


OPEN c_chk_isup;
FETCH c_chk_isup
INTO lv_chk_isup;
IF c_chk_isup%NOTFOUND THEN
lv_chk_isup := 'N';
END IF;
CLOSE c_chk_isup;

IF nvl(lv_chk_isup
,'N') = 'Y'
AND nvl(p_det_factor_rec.tax_confirmed_flag
,'N') = 'N' THEN
p_det_factor_rec.tax_confirmed_flag := 'Y';
END IF;
--added by mani for bug 26140944
--Insert into table ...
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'ln_det_factor_id = ' || ln_det_factor_id || 'lv_chk_isup=' ||
lv_chk_isup ||
'p_det_factor_rec.tax_confirmed_flag=' ||
p_det_factor_rec.tax_confirmed_flag);
END IF;
p_det_factor_rec.det_factor_id := ln_det_factor_id; --Added by Qinglei for
Receiving
INSERT INTO jai_tax_det_factors
(det_factor_id
,org_id
,organization_id
,location_id
,ship_from_location_id
,ship_from_state
,ship_from_country
,ship_to_location_id
,ship_to_state
,ship_to_country
,bill_to_state --added by mani for bug 26030089
,bill_to_country --added by mani for bug 26030089
,bill_from_location_id
,bill_to_location_id
,application_id
,entity_code
,event_class_code
,event_type_code
,tax_event_class_code
,tax_event_type_code
,line_level_action
,tax_determination_basis
,trx_id
,trx_line_id
,trx_level_type
,trx_loc_line_id
,trx_date
,legal_entity_id
,trx_number
,doc_revision_num
,trx_type
,trx_line_number
,trx_currency_code
,currency_conversion_date
,currency_conversion_rate
,currency_conversion_type
,item_id
,trx_uom_code
,unit_price
,trx_line_quantity
,line_amt
,ref_doc_application_id
,ref_doc_entity_code
,ref_doc_event_class_code
,ref_doc_trx_id
,ref_doc_line_id
,ref_doc_loc_line_id
,ref_doc_trx_level_type
,ref_doc_trx_type
,trx_line_gl_date
,party_type
,party_id
,party_site_id
,item_classification
-- ,item_category_id
,tax_rule_id
,default_tax_category_id
,override_tax_category_id
,user_modified_flag
,applied_to_application_id
,applied_to_entity_code
,applied_to_event_class_code
,applied_to_trx_id
,applied_to_trx_line_id
,applied_to_trx_type
,applied_to_loc_line_id
,applied_to_trx_level_type
,applied_from_application_id
,applied_from_entity_code
,applied_from_event_class_code
,applied_from_trx_id
,applied_from_trx_line_id
,applied_from_trx_type
,applied_from_loc_line_id
,applied_from_trx_level_type
,first_party_report_code_id
,third_party_report_code_id
,item_report_code_id
/* Bug#26279373, dejiang.liu/20170615. Add column for HSN/SAC. */
,hsn_code_id
,sac_code_id
,intended_use --Added by Qinglei for Receiving
/*start additions by vkaranam for bug#27441146*/
,eway_bill_num
,eway_bill_date
, eway_bill_acceptance_flaG
,tax_confirmed_flag --Added by Qinglei for Receiving
,record_type_code
--Added by shasha for bug#24838926 --begin
,acknowledgement_number
,acknowledgement_date
--Added by shasha for bug#24838926 --end
,lc_applicability_flag --Added by Zhhou for bug#20407574
,created_by
,creation_date
,last_updated_by
,last_update_date
,last_update_login
,object_version_number
/*25879349*/
,tax_invoice_num
,tax_invoice_date
,original_tax_invoice_num --mani for RTV changes bug 26321149
,original_tax_invoice_date --mani for RTV changes bug 26321149
,remarks --bug 26791394
,cancel_flag --27773358
)
VALUES
(ln_det_factor_id
,p_det_factor_rec.org_id
,p_det_factor_rec.organization_id
,p_det_factor_rec.location_id
,p_det_factor_rec.ship_from_location_id
,p_det_factor_rec.ship_from_state
,p_det_factor_rec.ship_from_country
,p_det_factor_rec.ship_to_location_id
,p_det_factor_rec.ship_to_state
,p_det_factor_rec.ship_to_country
,p_det_factor_rec.bill_to_state --added by mani for bug 26030089
,p_det_factor_rec.bill_to_country --added by mani for bug 26030089
,p_det_factor_rec.bill_from_location_id
,p_det_factor_rec.bill_to_location_id
,p_det_factor_rec.application_id
,p_det_factor_rec.entity_code
,p_det_factor_rec.event_class_code
,p_det_factor_rec.event_type_code
,p_det_factor_rec.tax_event_class_code
,p_det_factor_rec.tax_event_type_code
,p_det_factor_rec.line_level_action
,p_det_factor_rec.tax_determination_basis
,p_det_factor_rec.trx_id
,p_det_factor_rec.trx_line_id
,p_det_factor_rec.trx_level_type
,p_det_factor_rec.trx_loc_line_id
,p_det_factor_rec.trx_date
,p_det_factor_rec.legal_entity_id
,p_det_factor_rec.trx_number
,p_det_factor_rec.doc_revision_num
,p_det_factor_rec.trx_type
,p_det_factor_rec.trx_line_number
,p_det_factor_rec.trx_currency_code
,p_det_factor_rec.currency_conversion_date
,p_det_factor_rec.currency_conversion_rate
,p_det_factor_rec.currency_conversion_type
,p_det_factor_rec.item_id
,p_det_factor_rec.trx_uom_code
,p_det_factor_rec.unit_price
,p_det_factor_rec.trx_line_quantity
,p_det_factor_rec.line_amt
,p_det_factor_rec.ref_doc_application_id
,p_det_factor_rec.ref_doc_entity_code
,p_det_factor_rec.ref_doc_event_class_code
,p_det_factor_rec.ref_doc_trx_id
,p_det_factor_rec.ref_doc_line_id
,p_det_factor_rec.ref_doc_loc_line_id
,p_det_factor_rec.ref_doc_trx_level_type
,p_det_factor_rec.ref_doc_trx_type
,p_det_factor_rec.trx_line_gl_date
,p_det_factor_rec.party_type
,p_det_factor_rec.party_id
,p_det_factor_rec.party_site_id
,p_det_factor_rec.item_classification
-- ,p_det_factor_rec.item_category_id
,p_det_factor_rec.tax_rule_id
,p_det_factor_rec.default_tax_category_id
,p_det_factor_rec.override_tax_category_id
,nvl(p_det_factor_rec.user_modified_flag
,'N')
,p_det_factor_rec.applied_to_application_id
,p_det_factor_rec.applied_to_entity_code
,p_det_factor_rec.applied_to_event_class_code
,p_det_factor_rec.applied_to_trx_id
,p_det_factor_rec.applied_to_trx_line_id
,p_det_factor_rec.applied_to_trx_type
,p_det_factor_rec.applied_to_loc_line_id
,p_det_factor_rec.applied_to_trx_level_type
,p_det_factor_rec.applied_from_application_id
,p_det_factor_rec.applied_from_entity_code
,p_det_factor_rec.applied_from_event_class_code
,p_det_factor_rec.applied_from_trx_id
,p_det_factor_rec.applied_from_trx_line_id
,p_det_factor_rec.applied_from_trx_type
,p_det_factor_rec.applied_from_loc_line_id
,p_det_factor_rec.applied_from_trx_level_type
,p_det_factor_rec.first_party_report_code_id
,p_det_factor_rec.third_party_report_code_id
,p_det_factor_rec.item_report_code_id
/* Bug#26279373, dejiang.liu/20170615. Add column for HSN/SAC. */
,p_det_factor_rec.hsn_code_id
,p_det_factor_rec.sac_code_id
,p_det_factor_rec.intended_use --Added by Qinglei for Receiving
/*start additions by vkaranam for bug#27441146*/
, p_det_factor_rec.eway_bill_num
,p_det_factor_rec.eway_bill_date
,p_det_factor_rec.eway_bill_acceptance_flag
,p_det_factor_rec.tax_confirmed_flag --Added by Qinglei for Receiving
,nvl(p_det_factor_rec.record_type_code
,'DEFINED') --Updated by Wenqiong for Migration
--Added by shasha for bug#24838926 --begin
,p_det_factor_rec.acknowledgement_number
,p_det_factor_rec.acknowledgement_date
--Added by shasha for bug#24838926 --end
,p_det_factor_rec.lc_applicability_flag --Added by Zhhou for bug#20407574
,fnd_global.user_id
,SYSDATE
,fnd_global.user_id
,SYSDATE
,fnd_global.user_id
,1
/*25879349*/
,p_det_factor_rec.tax_invoice_num
,nvl(p_det_factor_rec.tax_invoice_date
,p_det_factor_rec.trx_date)
,p_det_factor_rec.original_tax_invoice_num --mani for RTV changes bug
26321149
,p_det_factor_rec.original_tax_invoice_date --mani for RTV changes bug
26321149
,p_det_factor_rec.remarks --bug 26791394
,p_det_factor_rec.cancel_flag --27773358
);

/* Bug#25251178, dejiang.liu/20161226. Add logic to generate reporting


associations. */
-- Generate reporting associations.
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Calling jai_reporting_pkg.generate_hsn_sac_assoc:
det_factor_id=' ||
p_det_factor_rec.det_factor_id);
END IF;

/* Bug#26279373, dejiang.liu/20170615. Modify column for HSN/SAC. */


/*
jai_reporting_pkg.generate_hsn_sac_assoc(p_hsn_code_id =>
p_det_factor_rec.item_report_code_id
,p_sac_code_id =>
p_det_factor_rec.third_party_report_code_id
,p_hsn_code => NULL
,p_sac_code => NULL
,p_entity_id => p_det_factor_rec.det_factor_id
,p_entity_source_table => 'JAI_TAX_DET_FACTORS');
*/
jai_reporting_pkg.generate_hsn_sac_assoc(p_hsn_code_id =>
p_det_factor_rec.hsn_code_id
,p_sac_code_id =>
p_det_factor_rec.sac_code_id
,p_hsn_code => NULL
,p_sac_code => NULL
,p_entity_id =>
p_det_factor_rec.det_factor_id
,p_entity_source_table =>
'JAI_TAX_DET_FACTORS');
/* Bug#25251178 end. */

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
EXCEPTION
WHEN FND_API.G_EXC_ERROR THEN
pv_process_status := FND_API.G_RET_STS_ERROR;
pv_process_message := lv_process_message;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || lv_process_message);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
pv_process_status := FND_API.G_RET_STS_UNEXP_ERROR;
pv_process_message := lv_process_message;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || lv_process_message);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
WHEN OTHERS THEN
pv_process_status := FND_API.G_RET_STS_UNEXP_ERROR;
pv_process_message := lv_process_message;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || ', errors:' || SQLERRM);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;

END insert_line_det_factors;

/*---------------------------------------------------------------------------------
-------------------------------+
| Created By : Wenqiong Zhou
|
| Creation Date : 10/Apr/2013
|
| Bug Number/ER Name : Phase IV Tax Determination
|
| SubProgram Name : UPDATE_LINE_DET_FACTORS
|
| Type : PROCEDURE
|
| Purpose : This procedure should be called by products when
updating a document or updating a new |
| transaction line for existing document. Will
redetermine or recalculate the taxes based |
| updating
|
| TDD Reference : Section 6.3
|
| Assumptions :
|
| Called From :
|

|----------------------------------------------------------------------------------
------------------------------|
| parameters IN/OUT Type Required
Description and Purpose |
| ------------ -------- ------ ----------
------------------------- |
| p_det_factor_rec IN RECORD yes
JAI_TAX_DET_FACTORS record |
| pv_process_status OUT VARCHAR2 yes Return
status |
| pv_process_message OUT VARCHAR2 yes Return
message |

*----------------------------------------------------------------------------------
-------------------------------*/
PROCEDURE update_line_det_factors
(
p_det_factor_rec IN OUT NOCOPY jai_tax_det_factors%ROWTYPE
,pv_process_status OUT NOCOPY VARCHAR2
,pv_process_message OUT NOCOPY VARCHAR2
) IS
lv_api_name CONSTANT VARCHAR2(50) := 'update_line_det_factors';
ln_det_factor_id jai_tax_det_factors.det_factor_id%TYPE;
lv_user_modified_flag jai_tax_det_factors.user_modified_flag%TYPE;
lv_det_factors_changed VARCHAR2(1);
lv_amt_factors_changed VARCHAR2(1);
lv_tax_type_tpb VARCHAR2(30);
lv_tax_line_tpb VARCHAR2(30);
lv_process_status VARCHAR2(30);
lv_process_message VARCHAR2(150);
CURSOR c_tax_lines IS
SELECT *
FROM jai_tax_lines
WHERE det_factor_id = ln_det_factor_id;
CURSOR c_tax_type_tpb(cn_tax_type_id NUMBER) IS
SELECT tax_type.tax_point_basis
FROM jai_tax_types tax_type
WHERE tax_type.tax_type_id = cn_tax_type_id;
-- added by AELLURU for bug#25971331 begin
CURSOR c_ar_complete(cp_customer_trx_id NUMBER) IS
SELECT complete_flag
FROM ra_customer_trx_all
WHERE customer_trx_id = cp_customer_trx_id;

lv_ar_complete_flag VARCHAR2(1);
is_boe NUMBER;
ln_is_intercompany NUMBER;--26595512
-- added by AELLURU for bug#25971331 end.
--AELLURU 27341120
CURSOR RECIEPT_EXISTS IS

SELECT COUNT(1)
FROM JAI_TAX_DET_FACTORS
WHERE ENTITY_CODE = 'RCV_TRANSACTION'
AND EVENT_CLASS_CODE = 'RECEIVING'
AND APPLICATION_ID =707
AND REF_DOC_APPLICATION_ID =201
AND REF_DOC_ENTITY_CODE = 'PURCHASE_ORDER'
AND REF_DOC_TRX_ID =p_det_factor_rec.TRX_ID
AND REF_DOC_LINE_ID =p_det_factor_rec.TRX_LINE_ID
AND REF_DOC_LOC_LINE_ID =p_det_factor_rec.TRX_LOC_LINE_ID ;
l_reciept_exists number ;
--AELLURU 27341120
BEGIN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----Begin----' || '()+');
END IF;

pv_process_status := FND_API.G_RET_STS_SUCCESS;
/*Lock the line so no updates by another user can happen*/
BEGIN
SELECT det_factor_id
,nvl(user_modified_flag
,'N')
INTO ln_det_factor_id
,lv_user_modified_flag
FROM jai_tax_det_factors
WHERE
/*26399170*/
(p_det_factor_rec.det_factor_id IS NULL OR det_factor_id =
p_det_factor_rec.det_factor_id) --AELLURU FOR 26478108
AND ((p_det_factor_rec.trx_line_id IS NOT NULL AND trx_line_id =
p_det_factor_rec.trx_line_id) OR
(p_det_factor_rec.trx_line_id IS NULL))
AND trx_id = p_det_factor_rec.trx_id
AND application_id = p_det_factor_rec.application_id
AND entity_code = p_det_factor_rec.entity_code
AND event_class_code = p_det_factor_rec.event_class_code
/*AND trx_id = p_det_factor_rec.trx_id 26399170*/
AND trx_level_type = p_det_factor_rec.trx_level_type
/* AND (trx_line_id = nvl(p_det_factor_rec.trx_line_id, trx_line_id)
OR nvl(trx_line_id,-1) = nvl(p_det_factor_rec.trx_line_id,-1)) 26399170*/
AND (trx_loc_line_id = nvl(p_det_factor_rec.trx_loc_line_id
,trx_loc_line_id) OR
nvl(trx_loc_line_id
,-1) = nvl(p_det_factor_rec.trx_loc_line_id
,-1))
AND nvl(trx_type
,'X') = nvl(p_det_factor_rec.trx_type
,'X') --Added by Qinglei for Receiving
AND rownum = 1 --26478108 TO ENSURE IT FETCHES ONLY ONE LINE
FOR UPDATE NOWAIT; --locks the line
END;

/*------------------------------------------------------+
| Checking the updated record with det factor change |
| or only amount related fields change |
+------------------------------------------------------*/
lv_det_factors_changed := any_tax_det_factors_change(p_det_factor_rec =>
p_det_factor_rec
,pv_process_status =>
lv_process_status
,pv_process_message =>
lv_process_message);
IF lv_process_status <> FND_API.G_RET_STS_SUCCESS THEN
pv_process_status := lv_process_status;
pv_process_message := lv_process_message;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'any_tax_det_factors_change returned
errors');
END IF;
END IF;
lv_amt_factors_changed := any_amount_factors_change(p_det_factor_rec =>
p_det_factor_rec
,pv_process_status =>
lv_process_status
,pv_process_message =>
lv_process_message);
IF lv_process_status <> FND_API.G_RET_STS_SUCCESS THEN
pv_process_status := lv_process_status;
pv_process_message := lv_process_message;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'any_amount_factors_change returned errors');
END IF;
END IF;

/*Start:AELLURU for BUG#25971331


Adding the below condition because the taxes should be re determined
in case of AR invoice upto Complete event*/
IF ((lv_amt_factors_changed = 'Y' OR lv_det_factors_changed = 'Y') AND
p_det_factor_rec.event_type_code = 'INV_UPDATE' AND
p_det_factor_rec.entity_code = 'TRANSACTIONS') THEN

lv_det_factors_changed := 'Y';
OPEN c_ar_complete(cp_customer_trx_id => p_det_factor_rec.trx_id);
FETCH c_ar_complete
INTO lv_ar_complete_flag;
CLOSE c_ar_complete;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'lv_ar_complete_flag : ' || lv_ar_complete_flag);
END IF;
/* THis case is added because while clicking complete button
the taxes are determined in INV_UPDATE first and INV_COMPLETE IS stamped at
last
So to handle this case at that time complete flag will be there on AR so
only
when it is Y we should consider the user entered tax as it is */
IF nvl(lv_ar_complete_flag
,'N') = 'N' THEN
lv_user_modified_flag := 'N';
END IF;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Inside INVOICE UPDATE LOG');
END IF;

END IF;
/*end:AELLURU for BUG#25971331*/

------------ Added By Rishin for Bug# 27086711 (End) -----


/* If lv_det_factors_changed = 'Y' for a Purchase Order, then the taxes will be
calculated again,
tax category ids will be set to NULL and all the tax lines will be deleted.
*/
--27341120
OPEN RECIEPT_EXISTS;
FETCH RECIEPT_EXISTS INTO l_reciept_exists;
CLOSE RECIEPT_EXISTS;
--27341120
IF l_reciept_exists = 0
THEN

IF (lv_det_factors_changed = 'Y' AND ((p_det_factor_rec.application_id = 201 AND


p_det_factor_rec.entity_code = 'PURCHASE_ORDER')
OR (p_det_factor_rec.application_id = 660 AND
p_det_factor_rec.entity_code = 'OE_ORDER_HEADERS')
OR
(p_det_factor_rec.application_id = 222 AND p_det_factor_rec.entity_code =
'TRANSACTIONS' )) )THEN
--AELLURU FOR 28191450
lv_det_factors_changed := 'Y';

SELECT tax_defaulting_basis
INTO p_det_factor_rec.tax_determination_basis
FROM jai_tax_defaulting_basis

WHERE org_id = p_det_factor_rec.org_id


AND nvl(effective_from
,SYSDATE - 1) <= SYSDATE
AND nvl(effective_to
,SYSDATE + 1) >= SYSDATE
AND nvl(regime_type
,'T') = 'T';

p_det_factor_rec.default_tax_category_id := NULL ;
p_det_factor_rec.override_tax_category_id := NULL ;
p_det_factor_rec.user_modified_flag := 'N' ;
lv_user_modified_flag := 'N' ; --AELLURU
DELETE FROM jai_tax_lines
WHERE det_factor_id = ln_det_factor_id;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Resetting tax determination basis and deleting tax
lines..No. of Tax Lines Deleted : '|| SQL%ROWCOUNT);
END IF;

END IF;
END IF;--27341120
------------ Added By Rishin for Bug# 27086711 (End) -----

/*------------------------------------------------------+
| Validate and Initializate parameters for Inserting |
| into line_det_factors |
+------------------------------------------------------*/
validate_init_det_factors(p_det_factor_rec => p_det_factor_rec
,pv_process_status => lv_process_status
,pv_process_message => lv_process_message);
IF lv_process_status <> FND_API.G_RET_STS_SUCCESS THEN
--Modified by Junjian for bug#17992991 begin
IF lv_process_status = G_RET_SETUP_ERROR THEN
pv_process_status := FND_API.G_RET_STS_SUCCESS;
pv_process_message := lv_process_message;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'validate_init_det_factors returned null');
END IF;
RETURN;
ELSE
pv_process_status := lv_process_status;
pv_process_message := lv_process_message;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'validate_init_det_factors returned errors');
END IF;
END IF;
--Modified by Junjian for bug#17992991 end
pv_process_status := lv_process_status;
pv_process_message := lv_process_message;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'validate_init_det_factors returned errors');
END IF;

END IF;
IF lv_process_status = FND_API.G_RET_STS_ERROR THEN
pv_process_status := lv_process_status;
pv_process_message := lv_process_message;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'validate_init_det_factors returned errors');
END IF;
RAISE FND_API.G_EXC_ERROR;
ELSIF lv_process_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
pv_process_status := lv_process_status;
pv_process_message := lv_process_message;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'validate_init_det_factors returned errors');
END IF;

RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
END IF;

/*--------------------------------------------------+
| Standard start of API savepoint |
+--------------------------------------------------*/
--SAVEPOINT Update_Line_Det_Factors_PVT; can't set savepoint in trigger

--Update table ...


UPDATE jai_tax_det_factors
SET org_id = p_det_factor_rec.org_id
,organization_id = p_det_factor_rec.organization_id
,location_id = p_det_factor_rec.location_id
,ship_from_location_id = p_det_factor_rec.ship_from_location_id
,ship_from_state = p_det_factor_rec.ship_from_state
,ship_from_country = p_det_factor_rec.ship_from_country
,ship_to_location_id = p_det_factor_rec.ship_to_location_id
,ship_to_state = p_det_factor_rec.ship_to_state
,ship_to_country = p_det_factor_rec.ship_to_country
,bill_from_location_id = p_det_factor_rec.bill_from_location_id
,bill_to_location_id = p_det_factor_rec.bill_to_location_id
,application_id = p_det_factor_rec.application_id
,entity_code = p_det_factor_rec.entity_code
,event_class_code = p_det_factor_rec.event_class_code
,event_type_code = p_det_factor_rec.event_type_code
,tax_event_class_code = p_det_factor_rec.tax_event_class_code
,tax_event_type_code = p_det_factor_rec.tax_event_type_code
,line_level_action = p_det_factor_rec.line_level_action
,tax_determination_basis = p_det_factor_rec.tax_determination_basis
,trx_id = p_det_factor_rec.trx_id
,trx_line_id = p_det_factor_rec.trx_line_id
,trx_level_type = p_det_factor_rec.trx_level_type
,trx_loc_line_id = p_det_factor_rec.trx_loc_line_id
,trx_date = p_det_factor_rec.trx_date
,legal_entity_id = p_det_factor_rec.legal_entity_id
,trx_number = p_det_factor_rec.trx_number
,trx_type = p_det_factor_rec.trx_type
,trx_line_number = p_det_factor_rec.trx_line_number
,trx_currency_code = p_det_factor_rec.trx_currency_code
,currency_conversion_date =
p_det_factor_rec.currency_conversion_date
,currency_conversion_rate =
p_det_factor_rec.currency_conversion_rate
,currency_conversion_type =
p_det_factor_rec.currency_conversion_type
,item_id = p_det_factor_rec.item_id
,trx_uom_code = p_det_factor_rec.trx_uom_code
,unit_price = p_det_factor_rec.unit_price
,trx_line_quantity = p_det_factor_rec.trx_line_quantity
,line_amt = p_det_factor_rec.line_amt
,ref_doc_application_id = p_det_factor_rec.ref_doc_application_id
,ref_doc_entity_code = p_det_factor_rec.ref_doc_entity_code
,ref_doc_event_class_code =
p_det_factor_rec.ref_doc_event_class_code
,ref_doc_trx_id = p_det_factor_rec.ref_doc_trx_id
,ref_doc_line_id = p_det_factor_rec.ref_doc_line_id
,ref_doc_trx_type = p_det_factor_rec.ref_doc_trx_type
,trx_line_gl_date = p_det_factor_rec.trx_line_gl_date
,party_type = p_det_factor_rec.party_type
,party_id = p_det_factor_rec.party_id
,party_site_id = p_det_factor_rec.party_site_id
,item_classification = p_det_factor_rec.item_classification
,tax_rule_id = p_det_factor_rec.tax_rule_id
,default_tax_category_id = p_det_factor_rec.default_tax_category_id
,override_tax_category_id =
p_det_factor_rec.override_tax_category_id
,user_modified_flag = p_det_factor_rec.user_modified_flag
,applied_to_application_id =
p_det_factor_rec.applied_to_application_id
,applied_to_entity_code = p_det_factor_rec.applied_to_entity_code
,applied_to_event_class_code =
p_det_factor_rec.applied_to_event_class_code
,applied_to_trx_id = p_det_factor_rec.applied_to_trx_id
,applied_to_trx_line_id = p_det_factor_rec.applied_to_trx_line_id
,applied_to_trx_type = p_det_factor_rec.applied_to_trx_type
,applied_to_loc_line_id = p_det_factor_rec.applied_to_loc_line_id
,applied_to_trx_level_type =
p_det_factor_rec.applied_to_trx_level_type
,applied_from_application_id =
p_det_factor_rec.applied_from_application_id
,applied_from_entity_code =
p_det_factor_rec.applied_from_entity_code
,applied_from_event_class_code =
p_det_factor_rec.applied_from_event_class_code
,applied_from_trx_id = p_det_factor_rec.applied_from_trx_id
,applied_from_trx_line_id =
p_det_factor_rec.applied_from_trx_line_id
,applied_from_trx_type = p_det_factor_rec.applied_from_trx_type
,applied_from_loc_line_id =
p_det_factor_rec.applied_from_loc_line_id
,applied_from_trx_level_type =
p_det_factor_rec.applied_from_trx_level_type

,first_party_report_code_id = p_det_factor_rec.first_party_report_code_id
,third_party_report_code_id = p_det_factor_rec.third_party_report_code_id
--Added by shasha for bug#24838926 --begin
,acknowledgement_number = p_det_factor_rec.acknowledgement_number
,acknowledgement_date = p_det_factor_rec.acknowledgement_date
--Added by shasha for bug#24838926 --end
,item_report_code_id = p_det_factor_rec.item_report_code_id
/* Bug#26279373, dejiang.liu/20170615. Add column for HSN/SAC. */
,hsn_code_id = p_det_factor_rec.hsn_code_id
,sac_code_id = p_det_factor_rec.sac_code_id
,intended_use = p_det_factor_rec.intended_use
/*start additions by vkaranam for bug#27441146*/
,eway_bill_num =p_det_factor_rec.eway_bill_num
, eway_bill_date =p_det_factor_rec.eway_bill_date
, eway_bill_acceptance_flaG =p_det_factor_rec.eway_bill_acceptance_flag
,object_version_number = object_version_number + 1
,last_updated_by = fnd_global.user_id
,last_update_date = SYSDATE
,last_update_login = fnd_global.user_id
--added for bug#25879349
,tax_invoice_num = nvl(p_det_factor_rec.tax_invoice_num
,tax_invoice_num)
,tax_invoice_date = nvl(p_det_factor_rec.tax_invoice_date
,p_det_factor_rec.trx_date)
,BILL_TO_STATE = p_det_factor_rec .BILL_TO_STATE --AELLURU FOR BUG
26709801
,cancel_flag =p_det_factor_rec.cancel_flag --27773358
WHERE det_factor_id = ln_det_factor_id;

--start additions by vkaranam for bug#25978487

IF lv_user_modified_flag = 'N'
AND lv_det_factors_changed = 'Y' THEN
jai_tax_determination_pkg.determine_tax(pn_application_id =>
p_det_factor_rec.application_id
,pv_entity_code =>
p_det_factor_rec.entity_code
,pv_event_class_code =>
p_det_factor_rec.event_class_code
,pn_org_id =>
p_det_factor_rec.org_id
,pn_trx_id =>
p_det_factor_rec.trx_id
,pn_trx_line_id =>
p_det_factor_rec.trx_line_id
,pn_trx_loc_line_id =>
p_det_factor_rec.trx_loc_line_id
,pv_trx_level_type =>
p_det_factor_rec.trx_level_type
,pv_process_status =>
lv_process_status
,pv_process_message =>
lv_process_message);
IF lv_process_status <> FND_API.G_RET_STS_SUCCESS THEN
pv_process_status := lv_process_status;
pv_process_message := lv_process_message;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'determine_tax returned errors');
END IF;
RAISE FND_API.G_EXC_ERROR;
END IF;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
RETURN;
ELSIF lv_amt_factors_changed = 'Y' THEN
recalculate_tax_wrapper(pn_det_factor_id => ln_det_factor_id
,pv_process_status => lv_process_status);
IF lv_process_status <> FND_API.G_RET_STS_SUCCESS THEN
pv_process_status := lv_process_status;
pv_process_message := lv_process_message;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'recalculate_tax_wrapper returned errors');
END IF;
RAISE FND_API.G_EXC_ERROR;
END IF;
ELSIF lv_user_modified_flag = 'Y'
AND lv_det_factors_changed = 'Y' THEN
--ELSE--event update impact TPB change
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'Update event type code and TPB');
END IF;
FOR tax_line_rec IN c_tax_lines LOOP

OPEN c_tax_type_tpb(tax_line_rec.tax_type_id);
FETCH c_tax_type_tpb
INTO lv_tax_type_tpb;
CLOSE c_tax_type_tpb;
jai_tax_determination_pkg.derive_tax_point_basis(pn_application_id =>
p_det_factor_rec.application_id
,pv_entity_code =>
p_det_factor_rec.entity_code
,pv_event_class_code =>
p_det_factor_rec.event_class_code
,pv_event_type_code =>
p_det_factor_rec.event_type_code
,pv_tax_type_tpb =>
lv_tax_type_tpb
,pv_tax_line_tpb =>
lv_tax_line_tpb);

UPDATE jai_tax_lines
SET event_type_code = p_det_factor_rec.event_type_code
,tax_event_type_code = p_det_factor_rec.tax_event_type_code
,tax_point_basis = lv_tax_line_tpb
,object_version_number = object_version_number + 1
,last_updated_by = fnd_global.user_id
,last_update_date = SYSDATE
,last_update_login = fnd_global.user_id
WHERE tax_line_id = tax_line_rec.tax_line_id;
END LOOP;
END IF;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
EXCEPTION
WHEN FND_API.G_EXC_ERROR THEN
--ROLLBACK TO Update_Line_Det_Factors_PVT;
pv_process_status := FND_API.G_RET_STS_ERROR;
pv_process_message := lv_process_message;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || SQLERRM);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
--ROLLBACK TO Update_Line_Det_Factors_PVT;
pv_process_status := FND_API.G_RET_STS_UNEXP_ERROR;
pv_process_message := lv_process_message;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || SQLERRM);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
WHEN OTHERS THEN
--ROLLBACK TO Update_Line_Det_Factors_PVT;
pv_process_status := FND_API.G_RET_STS_UNEXP_ERROR;
pv_process_message := lv_process_message;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,SQLERRM);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;

END update_line_det_factors;

/*---------------------------------------------------------------------------------
-------------------------------+
| Created By : Wenqiong Zhou
|
| Creation Date : 10/Apr/2013
|
| Bug Number/ER Name : Phase IV Tax Determination
|
| SubProgram Name : get_tax_determination_basis
|
| Type : PROCEDURE
|
| Purpose : This procedure should be called by
validate_init_det_factors, the value will determine |
| the tax determine basis based on setup. The possible
values: COPY_BASIS, |
| ITEM_CATEGORY_BASIS,RULE_BASIS
|
| TDD Reference : Section 6.4
|
| Assumptions :
|
| Called From : validate_init_det_factors
|

|----------------------------------------------------------------------------------
------------------------------|
| parameters IN/OUT Type Required
Description and Purpose |
| ------------ -------- ------ ----------
------------------------- |
| p_det_factor_rec IN/OUT RECORD yes
JAI_TAX_DET_FACTORS record |
| pv_process_status OUT VARCHAR2 yes Return
status |
| pv_process_message OUT VARCHAR2 yes Return
message |
*--------------------------------------
--------------------------------------------------------------------------*/
PROCEDURE get_tax_determination_basis
(
p_det_factor_rec IN OUT NOCOPY jai_tax_det_factors%ROWTYPE
,pv_process_status OUT NOCOPY VARCHAR2
,pv_process_message OUT NOCOPY VARCHAR2
) IS

CURSOR c_tax_det_basis IS
SELECT tax_defaulting_basis
,nvl(copy_tax_from_source
,'N') /*26266073*/
FROM jai_tax_defaulting_basis
WHERE org_id = p_det_factor_rec.org_id
AND nvl(effective_from
,SYSDATE - 1) <= SYSDATE
AND nvl(effective_to
,SYSDATE + 1) >= SYSDATE
AND nvl(regime_type
,'T') = 'T'; --Add for withholding tax change 20140520

--added by mani for bug 26410257


CURSOR c_setup_for_old_txn(p_date DATE) IS
SELECT 'Y'
FROM jai_tax_defaulting_basis
WHERE org_id = p_det_factor_rec.org_id
--AND effective_from <= p_date
--AND effective_to IS NULL
--below added by mani for bug 27999963
AND nvl(effective_from
,trunc(p_date) - 1) <= p_date
AND nvl(effective_to
,trunc(p_date) + 1) >= p_date
AND nvl(regime_type
,'T') = 'T';

lv_setup_for_old_txn VARCHAR2(1) := 'N';


--added by mani for bug 26410257

CURSOR c_source_doc_info
(
cn_application_id NUMBER
,cv_entity_code VARCHAR2
,cv_event_class_code VARCHAR2
,cn_trx_id NUMBER
,cn_trx_line_id NUMBER
,cn_trx_loc_line_id NUMBER
,cv_trx_level_type VARCHAR2
,cv_trx_type VARCHAR2
) IS --Added by Qinglei for Receiving)IS
SELECT det_factor_id
,user_modified_flag
,intended_use
/*start additions by vkaranam for bug#27441146*/
,eway_bill_num
,eway_bill_date
, eway_bill_acceptance_flaG
,default_tax_category_id --Added for bug#18258505
,override_tax_category_id --Added for bug#18258505
,tax_confirmed_flag --Added by Junjian for bug#18548713
,org_id --added by Wenqiong for bug18635383
/* Bug#25251178, dejiang.liu/20161226. Add column for HSN/SAC code. */
/* Bug#26279373, dejiang.liu/20170615. Modify to use new HSN/SAC code
column. */
/*
,item_report_code_id
,third_party_report_code_id
*/
,hsn_code_id
,sac_code_id
,item_id --27935953
FROM jai_tax_det_factors
WHERE application_id = cn_application_id
AND entity_code = cv_entity_code
AND event_class_code = cv_event_class_code
AND trx_id = cn_trx_id
--Changed by Qiong for bug17084225
--AND trx_line_id = nvl(cn_trx_line_id,trx_line_id)
AND (trx_line_id = nvl(cn_trx_line_id
,trx_line_id) OR
nvl(trx_line_id
,-1) = nvl(cn_trx_line_id
,-1))
--AND trx_level_type = cv_trx_level_type -AELLURU 26381241
AND (trx_level_type = nvl(cv_trx_level_type,trx_level_type) OR
nvl(trx_level_type,-1) = nvl(cv_trx_level_type,-1))
--Changed by Qiong for bug17084225
--AND trx_loc_line_id = nvl(cn_trx_loc_line_id,trx_loc_line_id)
AND (trx_loc_line_id = nvl(cn_trx_loc_line_id
,trx_loc_line_id) OR
nvl(trx_loc_line_id
,-1) = nvl(cn_trx_loc_line_id
,-1))
AND nvl(trx_type
,'X') = nvl(cv_trx_type
,nvl(trx_type
,'X')); --Added by Qinglei for Receiving
ln_det_factor_id NUMBER;
lv_user_modified_flag VARCHAR2(1);
lv_intended_use jai_tax_det_factors.intended_use%TYPE; --Added by
Wenqiong for intended use impact
LV_eway_bill_num jai_tax_det_factors.eway_bill_num%TYPE;
LV_eway_bill_date jai_tax_det_factors.eway_bill_date%TYPE;
LV_eway_bill_acceptance_flaG jai_tax_det_factors.eway_bill_acceptance_flag%TYPE;
--27441146

lv_tax_determination_basis jai_tax_det_factors.tax_determination_basis%TYPE;
ln_default_tax_category_id NUMBER; --Added for bug#18258505
ln_override_tax_category_id NUMBER; --Added for bug#18258505
lv_tax_confirmed_flag VARCHAR2(1); --Added by Junjian for bug#18548713

lv_api_name CONSTANT VARCHAR2(50) := 'GET_TAX_DETERMINATION_BASIS';

/*Added by Qinglei for bug#18489488 begin*/


ln_src_application_id jai_tax_det_factors.application_id%TYPE;
lv_src_entity_code jai_tax_det_factors.entity_code%TYPE;
lv_src_event_class_code jai_tax_det_factors.event_class_code%TYPE;
ln_src_trx_id jai_tax_det_factors.trx_id%TYPE;
ln_src_trx_line_id jai_tax_det_factors.trx_line_id%TYPE;
lv_src_trx_type jai_tax_det_factors.trx_type%TYPE;
ln_src_loc_line_id jai_tax_det_factors.trx_loc_line_id%TYPE;
lv_src_trx_level_type jai_tax_det_factors.trx_level_type%TYPE;

CURSOR c_get_order_info(cn_trx_line_id IN NUMBER) IS


SELECT COUNT(1) cnt
FROM oe_order_lines_all oola
WHERE oola.line_id = cn_trx_line_id
AND (EXISTS ( -- non-shippable / bill only
SELECT 1
FROM mtl_system_items_b ITEM
WHERE oola.inventory_item_id = item.inventory_item_id
AND nvl(item.shippable_item_flag
,'Y') = 'N' --non-shippable lines
) OR (nvl(oola.fulfilled_flag
,'N') = 'Y' --Bill only sales order
AND nvl(oola.line_category_code
,'RETURN') = 'ORDER' AND
nvl(oola.shipping_interfaced_flag
,'Y') = 'N'));
CURSOR c_src_doc_det_ref_to
(
cn_ref_application_id NUMBER
,cv_ref_entity_code VARCHAR2
,cv_ref_event_class_code VARCHAR2
,cn_ref_trx_id NUMBER
,cn_ref_trx_line_id NUMBER
,cv_ref_trx_type VARCHAR2
,cn_ref_trx_loc_line_id NUMBER
,cv_ref_trx_level_type VARCHAR
) IS
SELECT application_id
,entity_code
,event_class_code
,trx_level_type
,trx_id
,trx_line_id
,trx_loc_line_id
,trx_type
FROM jai_tax_det_factors
WHERE ref_doc_application_id = cn_ref_application_id
AND ref_doc_entity_code = cv_ref_entity_code
AND ref_doc_event_class_code = cv_ref_event_class_code
AND ref_doc_trx_id = cn_ref_trx_id
AND ref_doc_line_id = cn_ref_trx_line_id
AND nvl(ref_doc_trx_type
,'X') = nvl(cv_ref_trx_type
,nvl(ref_doc_trx_type
,'X'))
AND nvl(ref_doc_loc_line_id
,0) = nvl(cn_ref_trx_loc_line_id
,nvl(ref_doc_loc_line_id
,0))
AND nvl(ref_doc_trx_level_type
,'X') = nvl(cv_ref_trx_level_type
,nvl(ref_doc_trx_level_type
,'X'));

ln_non_ship_cnt NUMBER;
/*Added by Qinglei for bug#18489488 end*/
ln_org_id NUMBER; --added by Wenqiong for bug18635383

-- added by zhiwei.xin for bug#20056694 begin


CURSOR c_source_interface
(
cp_application_id NUMBER
,cp_entity_code VARCHAR2
,cp_event_class_code VARCHAR2
,cp_trx_id NUMBER
,cp_trx_line_id NUMBER
,cp_trx_loc_line_id NUMBER
,cp_trx_level_type VARCHAR2
,cp_trx_type VARCHAR2
) IS
SELECT interface_det_factor_id
,user_modified_flag
,intended_use
/*start additions by vkaranam for bug#27441146*/
,eway_bill_num
,eway_bill_date
, eway_bill_acceptance_flaG
,default_tax_category_id
,override_tax_category_id
,tax_confirmed_flag
,org_id
/* Bug#25251178, dejiang.liu/20161226. Add column for HSN/SAC code. */
/* Bug#26279373, dejiang.liu/20170615. Modify to use new HSN/SAC code
column. */
/*
,item_report_code_id
,third_party_report_code_id
*/
,hsn_code_id
,sac_code_id
,item_id --27935953
FROM jai_det_factors_interface
WHERE application_id = cp_application_id
AND entity_code = cp_entity_code
AND event_class_code = cp_event_class_code
AND interface_trx_hdr_id = cp_trx_id
AND interface_transaction_id = cp_trx_line_id
AND trx_type = cp_trx_type;
-- added by zhiwei.xin for bug#20056694 end.

/* Bug#25251178, dejiang.liu/20161226. Add variables for HSN/SAC reporting


code. */
/* Bug#26279373, dejiang.liu/20170615. Modify to use new HSN/SAC code column.
*/
/*
ln_item_report_code_id NUMBER;
ln_third_party_report_code_id NUMBER;
*/
ln_hsn_code_id NUMBER;
ln_sac_code_id NUMBER;
is_iriso NUMBER; --AELLURU for IRISO
is_boe NUMBER; --25978487
ln_item_id NUMBER;--27935953
--ADDED BY MANI FOR RULE PROCESS CHANGES 26030089
CURSOR get_encumbrance_flag(pn_org_id NUMBER) IS
SELECT nvl(purch_encumbrance_flag
,'N')
FROM financials_system_params_all
WHERE org_id = pn_org_id;

ln_encumbrance_enabled
financials_system_params_all.purch_encumbrance_flag%TYPE;
lv_copy_tax_from_source VARCHAR2(1); --26266073
lv_tax_determination_basis_new VARCHAR2(30); --26266073

--ADDED BY MANI FOR RULE PROCESS CHANGES 26030089

--ADDED BY MANI FOR BUG 26516124


/*CURSOR c_chck_rma
(
pn_header_id NUMBER
,pn_line_id NUMBER
) IS
SELECT 'Y'
FROM oe_order_lines_all
WHERE header_id = pn_header_id
AND line_id = pn_line_id
AND line_category_code = 'RETURN';*/--AELLURU FOR CUMMINS DROPSHIP
26591251
lv_rma_type VARCHAR2(1) := 'N';
--ADDED BY MANI FOR BUG 26516124
-- Added By Rishin for bug#26786337 start ---
CURSOR cur_validate_tax_category_id (
cn_tax_category_id number,
cn_trx_date date
) is
select tax_category_id from jai_tax_categories JTG
where jtg.tax_category_id=cn_tax_category_id
AND nvl(jtg.effective_from
,SYSDATE -1 ) <= trunc(cn_trx_date)
-- AND nvl(jtg.effective_to
-- ,SYSDATE +1) >= trunc(cn_trx_date); --commented by chris due to
bug 27160692
AND nvl(jtg.effective_to, to_date('4712/12/31', 'YYYY/MM/DD')) >=
trunc(cn_trx_date);
-- added by chris to replace sysdate+1 with 4712/12/31, as future date as
invoice date is regular practice for PA invoices due to bug 27160692
lv_val_tax_category_id NUMBER;
-- Added By Rishin for bug#26786337 end ----
ln_is_intercompany number;--for 26595512
BEGIN

pv_process_status := FND_API.G_RET_STS_SUCCESS;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----begin----' || '()+
p_det_factor_rec.trx_type=' || p_det_factor_rec.trx_type);
END IF;

--added by mani for bug 26410257


IF p_det_factor_rec.entity_code = 'AP_INVOICES' THEN

OPEN c_setup_for_old_txn(trunc(p_det_factor_rec.trx_date));
FETCH c_setup_for_old_txn
INTO lv_setup_for_old_txn;
IF c_setup_for_old_txn%NOTFOUND THEN
lv_setup_for_old_txn := 'N';
END IF;
CLOSE c_setup_for_old_txn;
IF nvl(lv_setup_for_old_txn
,'N') <> 'Y' THEN

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'No active Common Configuration present for
this transaction date :' ||
p_det_factor_rec.trx_date);
END IF;

RETURN;

END IF;

END IF;
--added by mani for bug 26410257

OPEN c_tax_det_basis;
FETCH c_tax_det_basis
INTO lv_tax_determination_basis
,lv_copy_tax_from_source; --26266073
CLOSE c_tax_det_basis;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'lv_tax_determination_basis :'||
lv_tax_determination_basis);
END IF;

IF p_det_factor_rec.entity_code = 'AP_INVOICES' and p_det_factor_rec.trx_type


= 'PREPAYMENT' THEN --added by mani for bug 27961593

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'Tax defaulting basis for prepayment
invoice is :'||nvl(lv_tax_determination_basis,'RULE_BASIS'));
END IF;

p_det_factor_rec.tax_determination_basis :=
nvl(lv_tax_determination_basis,'RULE_BASIS');--added by mani for bug 28161629
RETURN;

END IF;

/*
IF p_det_factor_rec.trx_type = 'RETURN TO VENDOR' THEN
--added by mani for RTV changes bug 26321149
RETURN;
END IF;*/--commented by mani for bug 26567585

--from here added by mani rule process chagnes 26030089


OPEN get_encumbrance_flag(p_det_factor_rec.org_id);
FETCH get_encumbrance_flag
INTO ln_encumbrance_enabled;
IF get_encumbrance_flag%NOTFOUND THEN
ln_encumbrance_enabled := 'N';
END IF;
CLOSE get_encumbrance_flag;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'lv_tax_determination_basis=' ||
lv_tax_determination_basis ||
'LN_ENCUMBRANCE_ENABLED=' || ln_encumbrance_enabled ||
'lv_copy_tax_from_source ' ||
lv_copy_tax_from_source);
END IF;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'p_det_factor_rec.ref_doc_entity_code=' ||
p_det_factor_rec.ref_doc_entity_code ||
'p_det_factor_rec.entity_code=' ||
p_det_factor_rec.entity_code || 'p_det_factor_rec.trx_type=' ||
p_det_factor_rec.trx_type ||
'p_det_factor_rec.applied_from_application_id=' ||
p_det_factor_rec.applied_from_application_id ||
'p_det_factor_rec.applied_to_application_id=' ||
p_det_factor_rec.applied_to_application_id ||
'p_det_factor_rec.ref_doc_application_id=' ||
p_det_factor_rec.ref_doc_application_id ||
'p_det_factor_rec.EVENT_TYPE_CODE=' ||
p_det_factor_rec.event_type_code);
END IF;

--upto here added by mani rule process chagnes 26030089

/* Bug#25300998, dejiang.liu/20170118. Add logic to initialize tax category. */


ln_override_tax_category_id := p_det_factor_rec.override_tax_category_id;
ln_default_tax_category_id := p_det_factor_rec.default_tax_category_id;

IF nvl(p_det_factor_rec.applied_from_application_id
,0) > 0 THEN
--for applied from columns not null, means will copy taxes from source anyway
unless source taxes not exist
OPEN c_source_doc_info(p_det_factor_rec.applied_from_application_id
,p_det_factor_rec.applied_from_entity_code
,p_det_factor_rec.applied_from_event_class_code
,p_det_factor_rec.applied_from_trx_id
,p_det_factor_rec.applied_from_trx_line_id
,p_det_factor_rec.applied_from_loc_line_id
,p_det_factor_rec.applied_from_trx_level_type
,p_det_factor_rec.applied_from_trx_type); --Added by
Qinglei for Receiving
FETCH c_source_doc_info
INTO ln_det_factor_id
,lv_user_modified_flag
,lv_intended_use
/*start additions by vkaranam for bug#27441146*/
,LV_eway_bill_num
,LV_eway_bill_date
, LV_eway_bill_acceptance_flaG
,ln_default_tax_category_id
,ln_override_tax_category_id
--Added for bug#18258505
,lv_tax_confirmed_flag --Added by Junjian for bug#18548713
,ln_org_id --Added by Wenqiong for bug18635383
/* Bug#25251178, dejiang.liu/20161226. Add column for HSN/SAC code. */
/* Bug#26279373, dejiang.liu/20170615. Modify to use new HSN/SAC code
column. */
--,ln_item_report_code_id
--,ln_third_party_report_code_id
,ln_hsn_code_id
,ln_sac_code_id
,ln_item_id ;--27935953
CLOSE c_source_doc_info;

/*Added by Qinglei for bug#18489488 begin*/


IF p_det_factor_rec.applied_from_application_id = 660
AND p_det_factor_rec.applied_from_entity_code = 'OE_ORDER_HEADERS'
AND p_det_factor_rec.application_id = 222
AND p_det_factor_rec.entity_code = 'TRANSACTIONS' THEN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'its Order to AR');
END IF;

OPEN c_get_order_info(p_det_factor_rec.applied_from_trx_line_id);
FETCH c_get_order_info
INTO ln_non_ship_cnt;
CLOSE c_get_order_info;

IF nvl(ln_non_ship_cnt
,0) = 0 THEN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'noshipable and bill only items = 0');
END IF;
OPEN c_src_doc_det_ref_to(p_det_factor_rec.applied_from_application_id
,p_det_factor_rec.applied_from_entity_code
,p_det_factor_rec.applied_from_event_class_code
,p_det_factor_rec.applied_from_trx_id
,p_det_factor_rec.applied_from_trx_line_id
,p_det_factor_rec.applied_from_trx_type
,p_det_factor_rec.applied_from_loc_line_id
,p_det_factor_rec.applied_from_trx_level_type);
FETCH c_src_doc_det_ref_to
INTO ln_src_application_id
,lv_src_entity_code
,lv_src_event_class_code
,lv_src_trx_level_type
,ln_src_trx_id
,ln_src_trx_line_id
,ln_src_loc_line_id
,lv_src_trx_type;
CLOSE c_src_doc_det_ref_to;

OPEN c_source_doc_info(ln_src_application_id
,lv_src_entity_code
,lv_src_event_class_code
,ln_src_trx_id
,ln_src_trx_line_id
,ln_src_loc_line_id
,lv_src_trx_level_type
,lv_src_trx_type); --Added by Qinglei for Receiving
FETCH c_source_doc_info
INTO ln_det_factor_id
,lv_user_modified_flag
,lv_intended_use
/*start additions by vkaranam for bug#27441146*/
,LV_eway_bill_num
,LV_eway_bill_date
, LV_eway_bill_acceptance_flaG
,ln_default_tax_category_id
,ln_override_tax_category_id
--Added for bug#18258505
,lv_tax_confirmed_flag --Added by Junjian for bug#18548713
,ln_org_id --Added by Wenqiong for bug18635383
/* Bug#25251178, dejiang.liu/20161226. Add column for HSN/SAC
code. */
/* Bug#26279373, dejiang.liu/20170615. Modify to use new HSN/SAC
code column. */
--,ln_item_report_code_id
--,ln_third_party_report_code_id
,ln_hsn_code_id
,ln_sac_code_id
,ln_item_id;--27935953
CLOSE c_source_doc_info;
END IF;

-- added by zhiwei.xin for bug#20056694 begin


ELSIF p_det_factor_rec.applied_from_application_id = 707
AND p_det_factor_rec.applied_from_entity_code = 'RCV_TRANSACTION'
AND p_det_factor_rec.applied_from_trx_type = 'ASBN'
AND p_det_factor_rec.application_id = 7000
AND p_det_factor_rec.entity_code = 'BILL_OF_ENTRY' THEN

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'it is ASBN to BOE');
END IF;

OPEN c_source_interface(cp_application_id =>


p_det_factor_rec.applied_from_application_id
,cp_entity_code =>
p_det_factor_rec.applied_from_entity_code
,cp_event_class_code =>
p_det_factor_rec.applied_from_event_class_code
,cp_trx_id =>
p_det_factor_rec.applied_from_trx_id
,cp_trx_line_id =>
p_det_factor_rec.applied_from_trx_line_id
,cp_trx_loc_line_id =>
p_det_factor_rec.applied_from_loc_line_id
,cp_trx_level_type =>
p_det_factor_rec.applied_from_trx_level_type
,cp_trx_type =>
p_det_factor_rec.applied_from_trx_type);
FETCH c_source_interface
INTO ln_det_factor_id
,lv_user_modified_flag
,lv_intended_use
/*start additions by vkaranam for bug#27441146*/
,LV_eway_bill_num
,LV_eway_bill_date
, LV_eway_bill_acceptance_flaG
,ln_default_tax_category_id
,ln_override_tax_category_id
,lv_tax_confirmed_flag
,ln_org_id
/* Bug#25251178, dejiang.liu/20161226. Add column for HSN/SAC code.
*/
/* Bug#26279373, dejiang.liu/20170615. Modify to use new HSN/SAC
code column. */
--ln_item_report_code_id,
--ln_third_party_report_code_id
,ln_hsn_code_id
,ln_sac_code_id
,ln_item_id ;--27935953
CLOSE c_source_interface;

-- added by zhiwei.xin for bug#20056694 end.


END IF;
/*Added by Qinglei for bug#18489488 end*/
IF nvl(ln_det_factor_id
,0) > 0
AND ln_org_id = p_det_factor_rec.org_id THEN
--Added by Wenqiong for bug18635383
lv_tax_determination_basis := jai_tax_determination_pkg.copy_basis;
END IF;

------------------------------------------------------------------
--AElluru for IRISO
--TO Change to COPY BASIS in case of INTERNAL ORDER

BEGIN
SELECT COUNT(1)
INTO is_iriso
FROM oe_order_headers_all
WHERE header_id IN (SELECT ref_doc_trx_id
FROM jai_tax_det_factors
WHERE trx_id = p_det_factor_rec.applied_from_trx_id)
AND source_document_type_id IN (SELECT order_source_id
FROM oe_order_sources
WHERE upper(NAME) = 'INTERNAL');
EXCEPTION
WHEN OTHERS THEN
is_iriso := 0;
END;

IF nvl(ln_det_factor_id
,0) > 0
AND nvl(is_iriso
,0) > 0 THEN
--Added by Wenqiong for bug18635383
lv_tax_determination_basis := jai_tax_determination_pkg.copy_basis;
END IF;

--AELLURU for IRISO


------------------------------------------------------------------
--AELLURU 27498614
lv_rma_type := f_chck_rma(p_det_factor_rec.applied_from_trx_id
,p_det_factor_rec.applied_from_trx_line_id);
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'RMA lv_rma_type=' || lv_rma_type ||
'lv_tax_determination_basis=' ||
lv_tax_determination_basis ||
'p_det_factor_rec.applied_from_trx_id=' ||
p_det_factor_rec.applied_from_trx_id ||
'p_det_factor_rec.applied_from_trx_line_id=' ||
p_det_factor_rec.applied_from_trx_line_id);
END IF;
IF nvl(lv_rma_type
,'N') = 'Y'
AND nvl(lv_tax_determination_basis
,'RULE_BASIS') <> jai_tax_determination_pkg.copy_basis THEN
lv_tax_determination_basis := jai_tax_determination_pkg.copy_basis;
END IF;
--AELLURU 27498614
ELSIF nvl(p_det_factor_rec.applied_to_application_id
,0) > 0 THEN
--for applied to columns not null, means will copy taxes from source anyway
unless source taxes not exist
OPEN c_source_doc_info(p_det_factor_rec.applied_to_application_id
,p_det_factor_rec.applied_to_entity_code
,p_det_factor_rec.applied_to_event_class_code
,p_det_factor_rec.applied_to_trx_id
,p_det_factor_rec.applied_to_trx_line_id
,p_det_factor_rec.applied_to_loc_line_id
,p_det_factor_rec.applied_to_trx_level_type
,p_det_factor_rec.applied_to_trx_type); --Added by
Qinglei for Receiving
FETCH c_source_doc_info
INTO ln_det_factor_id
,lv_user_modified_flag
,lv_intended_use
/*start additions by vkaranam for bug#27441146*/
,LV_eway_bill_num
,LV_eway_bill_date
, LV_eway_bill_acceptance_flaG
,ln_default_tax_category_id
,ln_override_tax_category_id
--Added for bug#18258505
,lv_tax_confirmed_flag --Added by Junjian for bug#18548713
,ln_org_id --Added by Wenqiong for bug18635383
/* Bug#25251178, dejiang.liu/20161226. Add column for HSN/SAC code. */
/* Bug#26279373, dejiang.liu/20170615. Modify to use new HSN/SAC code
column. */
--,ln_item_report_code_id
--,ln_third_party_report_code_id
,ln_hsn_code_id
,ln_sac_code_id
,ln_item_id ;--27935953
CLOSE c_source_doc_info;
IF nvl(ln_det_factor_id
,0) > 0
AND ln_org_id = p_det_factor_rec.org_id THEN
--Added by Wenqiong for bug18635383
lv_tax_determination_basis := jai_tax_determination_pkg.copy_basis;
END IF;
ELSIF nvl(p_det_factor_rec.ref_doc_application_id
,0) > 0 THEN
--for ref doc columns not null, means will copy taxes from source if source
taxes modified
OPEN c_source_doc_info(p_det_factor_rec.ref_doc_application_id
,p_det_factor_rec.ref_doc_entity_code
,p_det_factor_rec.ref_doc_event_class_code
,p_det_factor_rec.ref_doc_trx_id
,p_det_factor_rec.ref_doc_line_id
,p_det_factor_rec.ref_doc_loc_line_id
,p_det_factor_rec.ref_doc_trx_level_type
,p_det_factor_rec.ref_doc_trx_type); --Added by Qinglei
for Receiving
FETCH c_source_doc_info
INTO ln_det_factor_id
,lv_user_modified_flag
,lv_intended_use
/*start additions by vkaranam for bug#27441146*/
,LV_eway_bill_num
,LV_eway_bill_date
, LV_eway_bill_acceptance_flaG
,ln_default_tax_category_id
,ln_override_tax_category_id
--Added for bug#18258505
,lv_tax_confirmed_flag --Added by Junjian for bug#18548713
,ln_org_id --Added by Wenqiong for bug18635383
/* Bug#25251178, dejiang.liu/20161226. Add column for HSN/SAC code. */
/* Bug#26279373, dejiang.liu/20170615. Modify to use new HSN/SAC code
column. */
--,ln_item_report_code_id
--,ln_third_party_report_code_id
,ln_hsn_code_id
,ln_sac_code_id
,ln_item_id ;--27935953
CLOSE c_source_doc_info;
IF nvl(lv_user_modified_flag
,'N') = 'Y'
AND ln_org_id = p_det_factor_rec.org_id THEN
--Added by Wenqiong for bug18635383
lv_tax_determination_basis := jai_tax_determination_pkg.copy_basis;
END IF;

--START internal bug CM reversal issue 20171026


-- FOR all det factor lines in PA CM invoice ER#26559416
-- SET tax_determination_basis to COPY BASIS
--as tax lines will be copied from refer doc
IF p_det_factor_rec.REF_DOC_APPLICATION_ID = 275 --'SOURCE= PA'
AND p_det_factor_rec.APPLICATION_ID =275
AND p_det_factor_rec.REF_DOC_EVENT_CLASS_CODE = 'DRAFT INVOICES'
AND ln_org_id = p_det_factor_rec.org_id --same org with source trx
AND nvl(lv_tax_determination_basis
,'RULE_BASIS') <> jai_tax_determination_pkg.copy_basis THEN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'PA CM INVOICES ' ||','||
'lv_tax_determination_basis = '||
lv_tax_determination_basis ||','||
'p_det_factor_rec.ref_doc_trx_id = '||
p_det_factor_rec.ref_doc_trx_id ||','||
'p_det_factor_rec.ref_doc_line_id= '||
p_det_factor_rec.ref_doc_line_id||','||
'lv_user_modified_flag= '||lv_user_modified_flag||','||
'ln_det_factor_id= '||ln_det_factor_id);
END IF;

-- SET tax_determination_basis to COPY BASIS


lv_tax_determination_basis := jai_tax_determination_pkg.copy_basis;

END IF;
--ends internal bug CM reversal issue 20171026 ER#26559416

--ADDED BY MANI FOR BUG 26516124


/*OPEN c_chck_rma(p_det_factor_rec.ref_doc_trx_id
,p_det_factor_rec.ref_doc_line_id);
FETCH c_chck_rma
INTO lv_rma_type;
CLOSE c_chck_rma;*/ --26591251

lv_rma_type := f_chck_rma(p_det_factor_rec.ref_doc_trx_id
,p_det_factor_rec.ref_doc_line_id); --AELLURU FOR CUMMINS
26591251
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'RMA lv_rma_type=' || lv_rma_type ||
'lv_tax_determination_basis=' ||
lv_tax_determination_basis ||
'p_det_factor_rec.ref_doc_line_id=' ||
p_det_factor_rec.ref_doc_line_id ||
'p_det_factor_rec.ref_doc_trx_id=' ||
p_det_factor_rec.ref_doc_trx_id);
END IF;
IF nvl(lv_rma_type
,'N') = 'Y'
AND nvl(lv_tax_determination_basis
,'RULE_BASIS') <> jai_tax_determination_pkg.copy_basis THEN
lv_tax_determination_basis := jai_tax_determination_pkg.copy_basis;
END IF;
--ADDED BY MANI FOR BUG 26516124
END IF; --nvl(p_det_factor_rec.applied_from_application_id ,0) > 0

IF lv_tax_determination_basis IS NULL THEN


--Added by Wenqiong for Migration begin
IF p_det_factor_rec.record_type_code = 'MIGRATED' THEN
lv_tax_determination_basis := p_det_factor_rec.tax_determination_basis;
ELSE
--Added by Wenqiong for Migration end
pv_process_status := FND_API.G_RET_STS_UNEXP_ERROR;
pv_process_message := 'Incorrect setup for tax determination basis, ' ||
'unable get tax determination basis for org_id:' ||
p_det_factor_rec.org_id;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,pv_process_message);
END IF;
RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
END IF; --Added by Wenqiong for Migration
END IF;

--from here added by mani rule process chagnes 26030089

--start additions by vkaranam for bug#25978487

IF p_det_factor_rec.entity_code = 'AP_INVOICES'
AND p_det_factor_rec.event_class_code = 'STANDARD INVOICES' THEN
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'check whether the invoice is BOE or not
for invoice id ' ||
p_det_factor_rec.trx_id);
BEGIN
is_boe := 0;
SELECT COUNT(1)
INTO is_boe
FROM ap_invoices_all
WHERE invoice_id = p_det_factor_rec.trx_id
AND SOURCE = 'INDIA - BOE/PLA INVOICES';
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'trx is boe ' || is_boe);
EXCEPTION
WHEN OTHERS THEN
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'trx is boe exception');
is_boe := 0;
END;

IF nvl(is_boe
,0) > 0 THEN
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'trx is boe hence determination basis
is copy basis');
lv_tax_determination_basis := jai_tax_determination_pkg.copy_basis;
END IF;
--start additions by vkaranam for bug#26936409
BEGIN
ln_is_intercompany := 0;

jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,' trx is ln_is_intercompany check');
SELECT COUNT(1)
into ln_is_intercompany
FROM DUAL
WHERE EXISTS (SELECT 1
FROM AP_INVOICE_LINES_ALL line
--, ap_invoices_all inv --added by mani for bug 27189951
WHERE line.INVOICE_ID = p_det_factor_rec.trx_id AND
--inv.SOURCE <> 'INDIA TDS' AND --added by mani for bug
27189951
--line.INVOICE_ID=inv.INVOICE_ID AND--added by mani for bug
27189951
line.LINE_TYPE_LOOKUP_CODE = 'ITEM' AND
(line.trx_business_category = 'INTERCOMPANY_TRANSACTION'
or line.source_event_class_code='INTERCOMPANY_TRX'
)
/* Bug#27247954, dejiang.liu/20171220. Add condition to limit non-
interface AP. */
AND (line.reference_key3 IS NULL OR
line.reference_key3 <> 'OFI TAX IMPORT')
);
/*
AND NOT EXISTS (SELECT 1
FROM JAI_TAX_DET_FACTORS
WHERE TRX_ID = pn_trx_id AND
ENTITY_CODE = 'AP_INVOICES')*/

jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,' trx is ln_is_intercompany ' ||
ln_is_intercompany);
EXCEPTION
WHEN OTHERS THEN
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'ln_is_intercompany exception');
ln_is_intercompany := 0;
END;

IF nvl(ln_is_intercompany
,0) > 0
and p_det_Factor_rec.ref_doc_application_id is not null --ADDED BY MANI
FOR BUG 27469527
THEN
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'tax determination basis is copy basis
');
lv_tax_determination_basis:='COPY_BASIS';
END IF;
--end #26936409

END IF;
--end addiitons for bug#25978487
--27416241 FOR AR CASES IT SHOULD BE ALWAYS COPY BASIS WHEN IT IS HAVING APPLIED
FROM POPULATED
IF (p_det_factor_rec.entity_code = 'TRANSACTIONS' AND
p_det_factor_rec.application_id = 222
AND p_det_factor_rec.APPLIED_FROM_TRX_ID IS NOT NULL)
THEN
lv_tax_determination_basis:='COPY_BASIS';
END IF;
--27416241
IF --for PO's created from REQ
(p_det_factor_rec.ref_doc_entity_code = 'REQUISITION' AND
p_det_factor_rec.entity_code = 'PURCHASE_ORDER')
--for QUOTATIONS creted from RFQ.
OR (p_det_factor_rec.entity_code = 'PURCHASE_ORDER' AND
p_det_factor_rec.trx_type = 'QUOTATION')
--FOR bpa'S CREATED from QUOTATIONS.
OR (p_det_factor_rec.entity_code = 'PURCHASE_ORDER' AND
p_det_factor_rec.trx_type = 'BLANKET')
--Release from BPA
OR (p_det_factor_rec.entity_code = 'RELEASE' AND p_det_factor_rec.trx_type =
'BLANKET')
--COPY PO 26266073
OR (p_det_factor_rec.entity_code = 'PURCHASE_ORDER' AND
p_det_factor_rec.ref_doc_entity_code = 'PURCHASE_ORDER')
--PO MATCHED INVOICE*//*26266073*/
OR (p_det_factor_rec.ref_doc_entity_code = 'PURCHASE_ORDER' AND
p_det_factor_rec.entity_code = 'AP_INVOICES' AND
nvl(ln_encumbrance_enabled
,'N') = 'N')
----27031151 BPA RELEASE MATCHED INVOICE start :chandu ------
OR (p_det_factor_rec.ref_doc_entity_code = 'RELEASE' AND
p_det_factor_rec.entity_code = 'AP_INVOICES' AND
nvl(ln_encumbrance_enabled
,'N') = 'N')
----27031151 BPA RELEASE MATCHED INVOICE end :chandu ------
--PO TO RCPT
OR (p_det_factor_rec.ref_doc_entity_code = 'PURCHASE_ORDER' AND
p_det_factor_rec.entity_code = 'RCV_TRANSACTION' --
AND p_det_factor_rec.trx_type = 'RECEIVE')
--AELLURU 27273907
OR (p_det_factor_rec.ref_doc_entity_code = 'RELEASE' AND
p_det_factor_rec.entity_code = 'RCV_TRANSACTION' --
AND p_det_factor_rec.trx_type = 'RECEIVE')
--AELLURU 27273907
OR (p_det_factor_rec.ref_doc_entity_code = 'OE_ORDER_HEADERS' AND
p_det_factor_rec.entity_code = 'SALES_ORDER_ISSUE' AND
p_det_factor_rec.event_type_code = 'SHIPMENT_CREATED')
--RTV
OR (p_det_factor_rec.ref_doc_entity_code = 'PURCHASE_ORDER' AND
p_det_factor_rec.entity_code = 'RCV_TRANSACTION' --
AND p_det_factor_rec.trx_type = 'RETURN TO VENDOR')

--ISO FROM IR.


--intercompany ap FROM IR./*26595512*/
OR (p_det_factor_rec.ref_doc_entity_code = 'REQUISITION' AND
(p_det_factor_rec.entity_code = 'OE_ORDER_HEADERS' OR p_det_factor_rec.entity_code
= 'AP_INVOICES')
AND p_det_factor_rec.ref_doc_trx_type = 'INTERNAL' ) --MANI FOR BUG 26558687
OR (p_det_factor_rec.ref_doc_entity_code = 'PURCHASE_ORDER' AND
p_det_factor_rec.entity_code = 'RELEASE'
AND p_det_factor_rec.trx_type = 'SCHEDULED') -- Added By Rishin for Bug#
26936163

THEN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name ||
'for requision to po OR RFQ TO Quotation or quotation to PO
or PO to INV or PO to rceipt ' ||
'need to redetermine taxes lv_tax_determination_basis=' ||
lv_tax_determination_basis);
END IF;
lv_copy_tax_from_source := 'N';
OPEN c_tax_det_basis;
FETCH c_tax_det_basis
INTO lv_tax_determination_basis_new
,lv_copy_tax_from_source; --26266073
CLOSE c_tax_det_basis;

--start additions for bug#26266073


jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'Copy tax from source setup is set to '
|| lv_copy_tax_from_source);
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'lv_tax_determination_basis_NEW ' ||
lv_tax_determination_basis_new);
IF nvl(lv_copy_tax_from_source
,'N') = 'Y' THEN
/*i.e copy basis,derive the tax modified flag from the source documents ,
if modified simply copy the tax from source to target.
else redetermine the tax**/
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'before get_source_Details');
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'before get_source_Details
p_det_factor_rec.application_id ' ||
p_det_factor_rec.application_id);
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'before get_source_Details
p_det_factor_rec.entity_code ' ||
p_det_factor_rec.entity_code);
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'before get_source_Details
p_det_factor_rec.event_class_code ' ||
p_det_factor_rec.event_class_code);
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'before get_source_Details
p_det_factor_rec.trx_id ' ||
p_det_factor_rec.trx_id);
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'before get_source_Details
p_det_factor_rec.trx_line_id ' ||
p_det_factor_rec.trx_line_id);
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'before get_source_Details
p_det_factor_rec.trx_loc_line_id ' ||
p_det_factor_rec.trx_loc_line_id);
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'before get_source_Details
p_det_factor_rec.trx_level_type ' ||
p_det_factor_rec.trx_level_type);
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'before get_source_Details
p_det_factor_rec.trx_type ' ||
p_det_factor_rec.trx_type);

get_source_details(p_det_factor_rec
,pv_process_status
,pv_process_message
,ln_src_rec); --1102

jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'after get_source_Details
ln_src_Rec.application_id ' ||
ln_src_rec.application_id);
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'after get_source_Details
ln_src_Rec.entity_code ' ||
ln_src_rec.entity_code);
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'after get_source_Details
ln_src_Rec.event_class_code ' ||
ln_src_rec.event_class_code);
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'after get_source_Details
ln_src_Rec.trx_id ' || ln_src_rec.trx_id);
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'after get_source_Details
ln_src_Rec.trx_line_id ' ||
ln_src_rec.trx_line_id);
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'after get_source_Details
ln_src_Rec.trx_loc_line_id ' ||
ln_src_rec.trx_loc_line_id);
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'after get_source_Details
ln_src_Rec.trx_level_type ' ||
ln_src_rec.trx_level_type);
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'after get_source_Details
ln_src_Rec.trx_type ' || ln_src_rec.trx_type);
OPEN c_source_doc_info(ln_src_rec.application_id
,ln_src_rec.entity_code
,ln_src_rec.event_class_code
,ln_src_rec.trx_id
,ln_src_rec.trx_line_id
,ln_src_rec.trx_loc_line_id
,ln_src_rec.trx_level_type
,ln_src_rec.trx_type); --Added by Qinglei for
Receiving
FETCH c_source_doc_info
INTO ln_det_factor_id
,lv_user_modified_flag
,lv_intended_use
/*start additions by vkaranam for bug#27441146*/
,LV_eway_bill_num
,LV_eway_bill_date
, LV_eway_bill_acceptance_flaG
,ln_default_tax_category_id
,ln_override_tax_category_id
,lv_tax_confirmed_flag
,ln_org_id
/* Bug#26279373, dejiang.liu/20170615. Modify to use new HSN/SAC
code column. */
--,ln_item_report_code_id
--,ln_third_party_report_code_id
,ln_hsn_code_id
,ln_sac_code_id
,ln_item_id ;--27935953
CLOSE c_source_doc_info;

jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'after get_source_Details source
detailslv_user_modified_flag ' ||
lv_user_modified_flag);
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'after get_source_Details source
details ln_default_tax_category_id ' ||
ln_default_tax_category_id);
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'after get_source_Details source
details ln_override_tax_category_id ' ||
ln_override_tax_category_id);
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'after get_source_Details source
details ln_det_factor_id ' ||
ln_det_factor_id);
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'after get_source_Details source
details lv_tax_confirmed_flag ' ||
lv_tax_confirmed_flag);

IF (nvl(lv_user_modified_flag
,'N') = 'Y')
OR(ln_src_rec.entity_code='BILL_OF_ENTRY') -- Added By Rishin for
Bug#26561366
OR p_det_factor_rec.trx_type = 'RETURN TO VENDOR' --added by mani for bug
26718928
OR (NVL(ln_is_intercompany,0)>0 ) --ADDED FOR 26595512

THEN
lv_tax_determination_basis := jai_tax_determination_pkg.copy_basis;
ELSE
lv_tax_determination_basis := lv_tax_determination_basis_new; --26266073
END IF;
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'after get_source_Details source
details lv_tax_determination_basis ' ||
lv_tax_determination_basis);
ELSE
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'in redetermine basis if condition
lv_tax_determination_basis ' ||
lv_tax_determination_basis_new);
lv_tax_determination_basis := lv_tax_determination_basis_new; --26266073
END IF;
/**end additions by vkaranam for bug#26266073*/

ELSE
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'ln_override_tax_category_id ' ||
ln_override_tax_category_id ||
'ln_default_tax_category_id ' ||
ln_default_tax_category_id);
IF ln_override_tax_category_id IS NOT NULL
OR ln_default_tax_category_id IS NOT NULL THEN
--added by mani for bug 26301187.
p_det_factor_rec.default_tax_category_id := nvl(ln_override_tax_category_id

,ln_default_tax_category_id);
--mani commented below and added here for rule process changes.
--For all matched txns's system fetches tax_category_id from ref docs and
uses
END IF;

jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'p_det_factor_rec.default_tax_category_id
arrived is ' ||

p_det_factor_rec.default_tax_category_id);
--the same when no category fetched from default rule/item basis.
--But when no rule/item basis occured, we should not use category from ref
doc.

END IF;

--upto here added by mani rule process chagnes 26030089

p_det_factor_rec.tax_determination_basis := lv_tax_determination_basis;
p_det_factor_rec.intended_use := nvl(p_det_factor_rec.intended_use
,lv_intended_use);
--start ADDITIONS by vkaranam for bug#27441146
/*28355963*/
IF (p_det_factor_rec.trx_type = 'RETURN TO VENDOR' )
THEN
lv_eway_bill_num := NULL;
lv_eway_bill_DATE :=NULL;
lv_eway_bill_acceptance_flaG :=NULL;
END IF;
/*28355963*/
p_det_factor_rec.eway_bill_num :=
nvl(p_det_factor_rec.eway_bill_num
,lv_eway_bill_num);

p_det_factor_rec.eway_bill_DATE :=
nvl(p_det_factor_rec.eway_bill_DATE
,lv_eway_bill_DATE);

p_det_factor_rec.eway_bill_acceptance_flaG :=
nvl(p_det_factor_rec.eway_bill_acceptance_flaG
,lv_eway_bill_acceptance_flaG);

--Added for bug#18258505


--p_det_factor_rec.default_tax_category_id := NVL(ln_override_tax_category_id,
ln_default_tax_category_id);
--Added by Junjian for bug#18548713
p_det_factor_rec.tax_confirmed_flag := nvl(lv_tax_confirmed_flag

,p_det_factor_rec.tax_confirmed_flag);

/* Bug#25251178 start, dejiang.liu/20161226. Add logic to copy HSN/SAC Code. */


-- Set reporting code ID.
/* Bug#26279373, dejiang.liu/20170615. Modify to use new HSN/SAC code column.
*/
/*
p_det_factor_rec.item_report_code_id :=
nvl(p_det_factor_rec.item_report_code_id
,ln_item_report_code_id);
p_det_factor_rec.third_party_report_code_id :=
nvl(p_det_factor_rec.third_party_report_code_id
,ln_third_party_report_code_id);
*/
/*27935953 */
IF p_det_factor_rec.item_id = ln_item_id OR p_det_factor_rec.item_id IS NULL
OR ln_item_id IS NULL THEN
p_det_factor_rec.hsn_code_id := nvl(p_det_factor_rec.hsn_code_id
,ln_hsn_code_id);
p_det_factor_rec.sac_code_id := nvl(p_det_factor_rec.sac_code_id
,ln_sac_code_id);
END IF;
/*27935953 */
/* Bug#19161937 start, for copy basis, set user_modified_flag to Y. */
/* IF lv_tax_determination_basis = JAI_TAX_DETERMINATION_PKG.COPY_BASIS THEN
p_det_factor_rec.user_modified_flag := 'Y';*/
-- commented out by zhiwei.xin for bug#21087173 begin
/*p_det_factor_rec.override_tax_category_id :=
nvl(p_det_factor_rec.override_tax_category_id
,p_det_factor_rec.default_tax_category_id);*/
-- commented out by zhiwei.xin for bug#21087173 end.

-- added by zhiwei.xin for bug#21087173 begin


/*IF NVL(lv_user_modified_flag, 'N') = 'Y' THEN
p_det_factor_rec.override_tax_category_id := ln_override_tax_category_id;
ELSE
p_det_factor_rec.override_tax_category_id := ln_default_tax_category_id;
END IF;
-- added by zhiwei.xin for bug#21087173 end.
END IF;*/ --COMMENTED BY MANI FOR BUG 26397775
/* Bug#19161937 end. */

--FROM HERE ADDED BY MANI FOR BUG 26397775 COPY BASIS


IF lv_tax_determination_basis = jai_tax_determination_pkg.copy_basis THEN

p_det_factor_rec.user_modified_flag := 'N';
/* --AELLURU FOR FIXING SPLIT LINE ISSUE 26474759
IF (p_det_factor_rec.ref_doc_entity_code = 'OE_ORDER_HEADERS' AND
p_det_factor_rec.entity_code = 'OE_ORDER_HEADERS') THEN
p_det_factor_rec.user_modified_flag := 'Y';
END IF;
--AELLURU FOR FIXING SPLIT LINE ISSUE 26474759*/

IF nvl(lv_user_modified_flag
,'N') = 'Y' THEN

p_det_factor_rec.default_tax_category_id :=
nvl(ln_override_tax_category_id

,ln_default_tax_category_id);
p_det_factor_rec.override_tax_category_id :=
nvl(ln_override_tax_category_id

,ln_default_tax_category_id);
p_det_factor_rec.user_modified_flag := 'Y';
--AELLURU FOR 26817826(In case of copying taxes
--from parent we should copy this flag also)

ELSE
p_det_factor_rec.default_tax_category_id := nvl(ln_default_tax_category_id

,ln_override_tax_category_id);
p_det_factor_rec.override_tax_category_id := nvl(ln_default_tax_category_id

,ln_override_tax_category_id);
END IF;

-- added by rishin for bug#26786337 begin


IF (p_det_factor_rec.entity_code in ('RELEASE','PURCHASE_ORDER') OR
(p_det_factor_rec.entity_code='RCV_TRANSACTION'
AND
p_det_factor_rec.ref_doc_entity_code='PURCHASE_ORDER')) THEN
IF nvl(p_det_factor_rec.default_tax_category_id
,0) > 0 THEN

OPEN
cur_validate_tax_category_id( p_det_factor_rec.default_tax_category_id
,p_det_factor_rec.trx_date);
FETCH cur_validate_tax_category_id
INTO lv_val_tax_category_id;
IF cur_validate_tax_category_id%NOTFOUND THEN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)
THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'Fetched Category ID '||
p_det_factor_rec.default_tax_category_id||' is not Active. Re-setting to
jai_tax_determination_pkg.rule_basis');
END IF;
p_det_factor_rec.tax_determination_basis :=
jai_tax_determination_pkg.rule_basis ;
p_det_factor_rec.default_tax_category_id := NULL ;
p_det_factor_rec.override_tax_category_id := NULL ;
RETURN ;
END IF ;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)
THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name ||
'p_det_factor_rec.tax_determination_basis is re-set to : ' ||
p_det_factor_rec.tax_determination_basis);
END IF;
CLOSE cur_validate_tax_category_id;
-- added by rishin for bug#26786337 end
END IF;
END IF ;
END IF;
--UPTO HERE BY MANI FOR BUG 26397775 COPY BASIS

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN

FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || ':Return lv_tax_determination_basis as ' ||
lv_tax_determination_basis ||
'p_det_factor_rec.default_tax_category_id=' ||
p_det_factor_rec.default_tax_category_id ||
'p_det_factor_rec.override_tax_category_id=' ||
p_det_factor_rec.override_tax_category_id);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');

END IF;

EXCEPTION
WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
pv_process_status := FND_API.G_RET_STS_UNEXP_ERROR;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,SQLERRM);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;

WHEN OTHERS THEN


pv_process_status := FND_API.G_RET_STS_UNEXP_ERROR;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,SQLERRM);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
END get_tax_determination_basis;

/*---------------------------------------------------------------------------------
-------------------------------+
| Created By : Wenqiong Zhou
|
| Creation Date : 10/Apr/2013
|
| Bug Number/ER Name : Phase IV Tax Determination
|
| SubProgram Name : get_location_state_country
|
| Type : PROCEDURE
|
| Purpose : This procedure should be called by
validate_init_det_factors to get the state and |
| country for
|
| ship from and ship to location which will be used to
determine taxes |
| TDD Reference : Section 6.5
|
| Assumptions :
|
| Called From : validate_init_det_factors
|

|----------------------------------------------------------------------------------
------------------------------|
| parameters IN/OUT Type Required
Description and Purpose |
| ------------ -------- ------ ----------
------------------------- |
| pn_location_id IN NUMBER yes ship
from loaction id/ship to location id|
| pv_state IN VARCHAR2 yes State of
the location |
| pv_country IN VARCHAR2 yes Country
of the location |
| pv_process_status OUT VARCHAR2 yes Return
status |
| pv_process_message OUT VARCHAR2 yes Return
message |

*----------------------------------------------------------------------------------
-------------------------------*/
PROCEDURE get_location_state_country
(
pn_location_id IN NUMBER
,pv_state OUT NOCOPY VARCHAR2
,pv_country OUT NOCOPY VARCHAR2
,pv_process_status OUT NOCOPY VARCHAR2
,pv_process_message OUT NOCOPY VARCHAR2
) IS
CURSOR c_state_country IS
SELECT state
,country
FROM hz_locations
WHERE location_id = pn_location_id;

/*CURSOR c_hr_state_country IS
SELECT LOC_INFORMATION16 state, country
FROM hr_locations
WHERE location_id = pn_location_id;
*/
-- commented out starts by chris due to bug#25145766
/*SELECT hzgeo.GEOGRAPHY_NAME state, hrloc.country
FROM hr_locations hrloc, hz_geographies hzgeo
WHERE hrloc.location_id = pn_location_id
and hzgeo.geography_type(+) = 'STATE'
and hzgeo.country_code(+)='IN'
AND hrloc.country = 'IN'
AND hrloc.LOC_INFORMATION16 = hzgeo.geography_code(+) ; */ -- commented out
ends by chris due to bug#25145766
--addition starts by chris due to bug#25145766
CURSOR c_hr_state_country IS
SELECT hl.meaning state
,hrlo.country
FROM hr_locations_v hrlo
,hr_lookups hl
WHERE hrlo.location_id = pn_location_id
AND hrlo.style LIKE 'IN%' -- AElluru for 25943417
AND hrlo.loc_information16 = hl.lookup_code
AND hl.lookup_type = 'IN_STATES';

--addition starts by chris due to bug#25145766


lv_api_name CONSTANT VARCHAR2(50) := 'GET_LOCATION_STATE_COUNTRY';
BEGIN

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----Begin----' || '()+');
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Input parameter: pn_location is ' || pn_location_id);
END IF;

pv_process_status := FND_API.G_RET_STS_SUCCESS;

OPEN c_state_country;
FETCH c_state_country
INTO pv_state
,pv_country;
CLOSE c_state_country;

IF pv_state IS NULL
AND pv_country IS NULL THEN
OPEN c_hr_state_country;
FETCH c_hr_state_country
INTO pv_state
,pv_country;
CLOSE c_hr_state_country;

END IF;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'return state and country as:' || pv_state || ',' ||
pv_country);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
EXCEPTION
WHEN OTHERS THEN
pv_process_status := FND_API.G_RET_STS_UNEXP_ERROR;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'unexpected error:' || SQLERRM);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;

END get_location_state_country;

PROCEDURE get_tax_event_class
(
pn_application_id IN NUMBER
,pv_entity_code IN VARCHAR2
,pv_event_class_code IN VARCHAR2
,pv_tax_event_class_code OUT NOCOPY VARCHAR2
,pv_process_status OUT NOCOPY VARCHAR2
,pv_process_message OUT NOCOPY VARCHAR2
) IS
CURSOR c_tax_event_class IS
SELECT DISTINCT tax_event_class_code
FROM jai_evnt_cls_options
WHERE application_id = pn_application_id
AND entity_code = pv_entity_code
AND event_class_code = pv_event_class_code;

lv_api_name CONSTANT VARCHAR2(50) := 'get_tax_event_class';


BEGIN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----Begin----' || '()+');
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'get_tax_event_class for application id:' || pn_application_id
|| ', entity code:' ||
pv_entity_code || ', event class code:' ||
pv_event_class_code);
END IF;
pv_process_status := FND_API.G_RET_STS_SUCCESS;
OPEN c_tax_event_class;
FETCH c_tax_event_class
INTO pv_tax_event_class_code;
CLOSE c_tax_event_class;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'return tax_event_class as:' || pv_tax_event_class_code);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;

EXCEPTION
WHEN OTHERS THEN
pv_process_status := FND_API.G_RET_STS_UNEXP_ERROR;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,SQLERRM);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
END get_tax_event_class;
PROCEDURE get_tax_event_type
(
pn_application_id IN NUMBER
,pv_entity_code IN VARCHAR2
,pv_event_class_code IN VARCHAR2
,pv_event_type_code IN VARCHAR2
,pv_tax_event_type_code OUT NOCOPY VARCHAR2
,pv_process_status OUT NOCOPY VARCHAR2
,pv_process_message OUT NOCOPY VARCHAR2
) IS
CURSOR c_tax_event_type IS
SELECT DISTINCT tax_event_type_code
FROM jai_evnt_cls_options
WHERE application_id = pn_application_id
AND entity_code = pv_entity_code
AND event_class_code = pv_event_class_code
AND event_type_code = pv_event_type_code;

lv_api_name CONSTANT VARCHAR2(50) := 'get_tax_event_type';

BEGIN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----Begin----' || '()+');
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'get_tax_event_type for application id:' || pn_application_id
|| ', entity code:' ||
pv_entity_code || ', event class code:' || pv_event_class_code
|| ', event type code:' ||
pv_event_type_code);
END IF;

pv_process_status := FND_API.G_RET_STS_SUCCESS;
OPEN c_tax_event_type;
FETCH c_tax_event_type
INTO pv_tax_event_type_code;
CLOSE c_tax_event_type;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'return tax_event_type as:' || pv_tax_event_type_code);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;

EXCEPTION
WHEN OTHERS THEN
pv_process_status := FND_API.G_RET_STS_UNEXP_ERROR;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,SQLERRM);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;

END get_tax_event_type;

/*---------------------------------------------------------------------------------
-------------------------------+
| Created By : Wenqiong Zhou
|
| Creation Date : 10/Apr/2013
|
| Bug Number/ER Name : Phase IV Tax Determination
|
| SubProgram Name : check_required_params
|
| Type : PROCEDURE
|
| Purpose : Validates parameters for the insert/update
JAI_TAX_DET_FACTORS, will be called by |
| validate_init_det_factors.
|
| TDD Reference : Section 6.6
|
| Assumptions :
|
| Called From : validate_init_det_factors
|

|----------------------------------------------------------------------------------
------------------------------|
| parameters IN/OUT Type Required
Description and Purpose |
| ------------ -------- ------ ----------
------------------------- |
| prec_det_factor IN RECORD yes
JAI_TAX_DET_FACTORS record |
| pv_process_status OUT VARCHAR2 yes Return
status |

*----------------------------------------------------------------------------------
-------------------------------*/
PROCEDURE check_required_params
(
p_det_factor_rec IN jai_tax_det_factors%ROWTYPE
,pv_return_status OUT NOCOPY VARCHAR2
) IS
lv_api_name CONSTANT VARCHAR2(50) := 'check_required_params';
BEGIN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----Begin----' || '()+');
END IF;
pv_return_status := FND_API.G_RET_STS_SUCCESS;

IF p_det_factor_rec.org_id IS NULL THEN


pv_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || ' org_id is required');
END IF;
END IF;

--Modified by Junjian on 07-01-2014 begin


/* Bug#18032985, modified to add project invoices logic. */
--IF p_det_factor_rec.entity_code IN ('AP_INVOICES','TRANSACTIONS') THEN
IF p_det_factor_rec.entity_code IN ('AP_INVOICES'
,'TRANSACTIONS'
,'PROJECTS') THEN
NULL;
pv_return_status := FND_API.G_RET_STS_SUCCESS;
ELSE
IF p_det_factor_rec.det_factor_id IS NOT NULL
AND p_det_factor_rec.organization_id IS NULL THEN
pv_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || ' organization_id is required for update
case.');
END IF;

END IF;
END IF;
--Modified by Junjian on 07-01-2014 end

IF p_det_factor_rec.application_id IS NULL THEN


pv_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || ' application_id is required');
END IF;
END IF;

IF p_det_factor_rec.entity_code IS NULL THEN


pv_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || ' entity_code is required');
END IF;
END IF;

IF p_det_factor_rec.event_class_code IS NULL THEN


pv_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || ' event_class_code is required');
END IF;
END IF;

IF p_det_factor_rec.legal_entity_id IS NULL THEN


pv_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || ' legal_entity_id is required');
END IF;
END IF;
IF p_det_factor_rec.trx_id IS NULL THEN
pv_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || ' trx_id is required');
END IF;
END IF;
IF p_det_factor_rec.trx_level_type IS NULL THEN
pv_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || ' trx_level_type is required');
END IF;
END IF;

IF p_det_factor_rec.tax_determination_basis IS NULL
-- AND p_det_factor_rec.trx_type <> 'RETURN TO VENDOR' --MANI FOR RTV
CHANGES----commented by mani for bug 26567585
AND p_det_factor_rec.entity_code <> 'AP_INVOICES' --ADDED BY MANI FOR BUG
26410257
THEN
pv_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || ' tax_determination_basis is required');
END IF;
END IF;

IF p_det_factor_rec.trx_date IS NULL THEN


pv_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || ' trx_date is required');
END IF;

END IF;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'return pv_return_status is:' || pv_return_status);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
END check_required_params;

/*---------------------------------------------------------------------------------
--------------------------------+
| Created By : Wenqiong Zhou
|
| Creation Date : 10/Apr/2013
|
| Bug Number/ER Name : Phase IV Tax Determination
|
| SubProgram Name : determine_tax
|
| Type : PROCEDURE
|
| Purpose : This procedure will determine the taxes and calculate
the taxes based on setup, |
| and populate into jai_tax_lines table. It can be called
at trx level or line level |
| base on input parameters.
|
| For the case of trx creation, will call determine tax
at trx level by grouping |
| by det factors to improve the performance, trx line
info will not be passed. |
| For the case of trx updating, will call determine tax
at trx line level, |
| trx line info will be passed.
|
| TDD Reference : Section 6.8
|
| Assumptions :
|
| Called From : called by product for document creation or called by
update_line_det_factors |

|----------------------------------------------------------------------------------
-------------------------------|
| parameters IN/OUT Type Required
Description and Purpose |
| ------------ -------- ------ ----------
------------------------- |
| pn_application_id IN NUMBER yes
Application ID |
| pv_entity_code IN VARCHAR2 yes Entity
Code |
| pv_event_class_code IN VARCHAR2 yes Event
Class Code |
| pn_org_id IN NUMBER yes Org ID
|
| pn_trx_id IN NUMBER yes
Transaction ID |
| pn_trx_line_id IN NUMBER default null
Transaction Line ID |
| pn_trx_loc_line_id IN NUMBER default null
Transaction Loc line ID |
| pv_trx_level_type IN VARCHAR2 default null
Transaction level Type |
| pv_process_status OUT VARCHAR2 yes Process
status |
| pv_process_message OUT VARCHAR2 yes Process
message |

*----------------------------------------------------------------------------------
--------------------------------*/
PROCEDURE determine_tax
(
pn_application_id IN NUMBER
,pv_entity_code IN VARCHAR2
,pv_event_class_code IN VARCHAR2
,pn_org_id IN NUMBER
,pn_trx_id IN NUMBER
,pn_trx_line_id IN NUMBER DEFAULT NULL
,pn_trx_loc_line_id IN NUMBER DEFAULT NULL
,pv_trx_level_type IN VARCHAR2 DEFAULT NULL
,pv_trx_type IN VARCHAR2 DEFAULT NULL --Added by Qinglei for Receiving
09-Jul-2013
,pv_call_from IN VARCHAR2 DEFAULT NULL --Added by Qinglei for Receiving
09-Jul-2013
,pv_process_status OUT NOCOPY VARCHAR2
,pv_process_message OUT NOCOPY VARCHAR2
) IS
CURSOR c_trx_lines IS
SELECT det_factor_id
,trx_id
,trx_line_id
,trx_loc_line_id
,trx_level_type
,tax_determination_basis
,override_tax_category_id
--added by chris due to bug#25942639 on 20170627
--Updated by Wenqiong for O2C flow

--decode(tax_determination_basis,'COPY_BASIS',0,default_tax_category_id)
default_tax_category_id
,default_tax_category_id --modified by mani for copy basis changes bug
26397775
,nvl(user_modified_flag
,'N') user_modified_flag --added by mani for bug 26397775
,REF_DOC_APPLICATION_ID --MANI FOR BUG 27469527
FROM jai_tax_det_factors
WHERE ((pn_trx_line_id IS NOT NULL AND trx_line_id = pn_trx_line_id) OR
(pn_trx_line_id IS NULL))
AND trx_id = pn_trx_id
AND application_id = pn_application_id
AND entity_code = pv_entity_code
AND event_class_code = pv_event_class_code
-- AND trx_id = pn_trx_id
-- AND (trx_line_id = nvl(pn_trx_line_id, trx_line_id) OR
nvl(trx_line_id,-1) = nvl(pn_trx_line_id,-1))
AND (trx_loc_line_id = nvl(pn_trx_loc_line_id
,trx_loc_line_id) OR
nvl(trx_loc_line_id
,-1) = nvl(pn_trx_loc_line_id
,-1))
AND trx_level_type = nvl(pv_trx_level_type
,trx_level_type)
AND ((nvl(default_tax_category_id
,0) > 0 AND tax_determination_basis <>
jai_tax_determination_pkg.copy_basis) OR
tax_determination_basis = jai_tax_determination_pkg.copy_basis)
AND nvl(trx_type
,'X') = nvl(pv_trx_type
,nvl(trx_type
,'X')) --Added by Qinglei for Receiving 09-Jul-2013
AND nvl(pv_call_from
,'BASE') <> 'INTERFACE' --Added by Qinglei for Receiving 09-Jul-
2013
UNION
--Added by Qinglei for Receiving 09-Jul-2013 begin
SELECT interface_det_factor_id det_factor_id
,interface_trx_hdr_id trx_id
,interface_transaction_id trx_line_id
,NULL
,NULL
,tax_determination_basis
,override_tax_category_id
--added by chris due to bug#25942639 on 20170627
--Updated by Qinglei for bug#18527707 on 15-APR-2014

--decode(tax_determination_basis,'COPY_BASIS',0,default_tax_category_id)
default_tax_category_id
,default_tax_category_id --modified by mani for copy basis changes bug
26397775
,nvl(user_modified_flag
,'N') user_modified_flag --added by mani for bug 26397775
,REF_DOC_APPLICATION_ID --MANI FOR BUG 27469527
FROM jai_det_factors_interface
WHERE
/*26399170*/
((pn_trx_line_id IS NOT NULL AND interface_transaction_id = pn_trx_line_id)
OR (pn_trx_line_id IS NULL))
AND interface_trx_hdr_id = pn_trx_id
AND application_id = pn_application_id
AND entity_code = pv_entity_code
AND event_class_code = pv_event_class_code
--AND interface_trx_hdr_id = pn_trx_id
/*AND (interface_transaction_id =
NVL(pn_trx_line_id,interface_transaction_id)
OR NVL(interface_transaction_id,-1) = NVL(pn_trx_id,-1))*/
AND ((nvl(default_tax_category_id
,0) > 0 AND tax_determination_basis <>
jai_tax_determination_pkg.copy_basis) OR
tax_determination_basis = jai_tax_determination_pkg.copy_basis)
AND nvl(trx_type
,'X') = nvl(pv_trx_type
,nvl(trx_type
,'X'))
AND nvl(pv_call_from
,'BASE') = 'INTERFACE';

R_TRX_LINES C_TRX_LINES%ROWTYPE;--MANI FOR BUG 27469527

--Added by Qinglei for Receiving 09-Jul-2013 end


--Added by WEnqiong for Exemption begin
CURSOR c_source_exemption_info(cn_det_factor_id NUMBER) IS
SELECT DISTINCT exemption_type
,exemption_num
,exemption_date
,tracking_num
,proof_of_export_num
,proof_received_date
FROM jai_tax_lines tl
WHERE nvl(exemption_hdr_id
,0) > 0
AND EXISTS
(SELECT 1
FROM jai_tax_det_factors df
WHERE df.tax_determination_basis = 'COPY_BASIS'
AND df.det_factor_id = cn_det_factor_id
--Changed by Zhhou for bug#18797245 begin
AND ((df.ref_doc_application_id = tl.application_id AND
df.ref_doc_entity_code = tl.entity_code AND
df.ref_doc_event_class_code = tl.event_class_code AND
df.ref_doc_trx_id = tl.trx_id AND
df.ref_doc_line_id = tl.trx_line_id) OR
(df.applied_from_application_id = tl.application_id AND
df.applied_from_entity_code = tl.entity_code AND
df.applied_from_event_class_code = tl.event_class_code AND
df.applied_from_trx_id = tl.trx_id AND
df.applied_from_trx_line_id = tl.trx_line_id))
--Changed by Zhhou for bug#18797245 end
);
rec_source_exemption_info c_source_exemption_info%ROWTYPE;
/*AELLURU 27053774*/
CURSOR c_default_exemption_info(cn_det_factor_id NUMBER) IS
SELECT jprl.exemption_type ,
jprl.exemption_num ,
det_fct.trx_date,
jprl.tracking_num ,
NULL,
NULL
FROM jai_party_reg_lines jprl ,
jai_party_regs jpr ,
ja_lookups exemption_type ,
jai_tax_det_factors det_fct ,
jai_exemption_hdrs jeh -- Bug#21173608 added, Dejiang.Liu/150602.
WHERE jprl.party_reg_id = jpr.party_reg_id
AND exemption_type.lookup_type(+) = 'JAI_EXEMPTION_TYPE'
AND jprl.exemption_type = exemption_type.lookup_code(+)
AND jpr.party_type_code IN ('THIRD_PARTY' ,'THIRD_PARTY_SITE')
AND jprl.line_context = 'EXEMPTION'
AND jpr.customer_flag =
DECODE(det_fct.party_type ,'Customer' ,'Y' ,'N')
AND jpr.party_id = det_fct.party_id
AND det_fct.party_site_id = NVL(jpr.party_site_id ,det_fct.party_site_id)
AND TRUNC(SYSDATE) BETWEEN TRUNC(jprl.effective_from) AND
TRUNC(NVL(jprl.effective_to ,SYSDATE + 1))
AND jprl.EXEMPTION_type = jeh.EXEMPTION_type
AND jprl.TRACKING_NUM =jeh.TRACKING_NUM
AND jeh.registration_type_code = jprl.registration_type_code
AND jeh.registration_num = jprl.registration_number
AND jeh.exemption_type = jprl.exemption_type
AND (jeh.organization_id IS NULL
OR jeh.organization_id = det_fct.organization_id)
AND (jeh.location_id IS NULL
OR jeh.location_id = det_fct.location_id)
AND det_fct.det_factor_id =cn_det_factor_id;
/*AELLURU*/
--Added by WEnqiong for Exemption end
--Added by Junjian for bug#19907577 begin
CURSOR c_osp_count(cp_trx_id NUMBER) IS
SELECT COUNT(1)
FROM po_distributions_all pda
WHERE pda.po_header_id = cp_trx_id
AND pda.destination_type_code = 'SHOP FLOOR';
ln_osp_count NUMBER;
--Added by Junjian for bug#19907577 end
lv_api_name CONSTANT VARCHAR2(50) := 'determine_tax';
rec_trx_lines c_trx_lines%ROWTYPE;
lv_return_status VARCHAR2(30);
lv_process_message VARCHAR2(150);
l_tax_lines_tbl tax_lines_tbl;
ln_det_factor_id NUMBER;
ln_tax_category_id NUMBER; --added by chris due to bug#25942639 on 20170627
l_tax_lines_tbl_tmp tax_lines_tbl;
is_boe NUMBER; --25978487

/*Commented By AELLURU FOR 26382539


--VKARANAM For bug#26321149
CURSOR c_get_oe_trn_info
is
SELECT oel.header_id
,oel.line_id
,oel.line_category_code
FROM oe_order_lines_all oel
WHERE
oel.header_id=pn_trx_id
and oel.line_id=pn_trx_line_id;
*/

--r_oe_trn_info c_get_oe_trn_info%ROWTYPE;--26382539

--start additions by vkaranam for bug#26399170


CURSOR c_tax_det_basis IS
SELECT tax_defaulting_basis
FROM jai_tax_defaulting_basis
WHERE org_id = pn_org_id
AND nvl(effective_from
,SYSDATE - 1) <= SYSDATE
AND nvl(effective_to
,SYSDATE + 1) >= SYSDATE
AND nvl(regime_type
,'T') = 'T';

lv_tax_determination_basis jai_tax_defaulting_basis.tax_defaulting_basis%TYPE;

lv_amt_factor_updated VARCHAR2(1);
--added by chris for bug#26715321
ln_is_intercompany NUMBER;

--ADDITION STARTS by chris on 20171101 for bug 26967180


--get payment status
CURSOR c_inv_payment_status(cp_invoice_id NUMBER) IS
SELECT PAYMENT_STATUS_FLAG
,SOURCE --MANI FOR BUG 27189951
from ap_invoices_all
WHERE invoice_id = cp_invoice_id;

ln_payment_status_flag ap_invoices_all.PAYMENT_STATUS_FLAG%type;
lv_inv_source ap_invoices_all.SOURCE%type; --MANI FOR BUG 27189951

--ADDITION STARTS by chris on 20171101 for bug 26967180

BEGIN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----Begin----' || '()+');
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Input parameter: ' || 'pn_application_id,' ||
pn_application_id || ',pv_entity_code:' ||
pv_entity_code || ',pv_event_class_code:' ||
pv_event_class_code || 'pn_org_id:' || pn_org_id ||
',pn_trx_id:' || pn_trx_id || ',pn_trx_line_id:' ||
pn_trx_line_id || 'pn_trx_loc_line_id:' ||
pn_trx_loc_line_id || 'pv_trx_level_type:' ||
pv_trx_level_type);
END IF;
pv_process_status := FND_API.G_RET_STS_SUCCESS;

--Added by Junjian for bug#19907577 begin


--If the transaction is OSP, do not do the following process
/*IF pv_entity_code = 'PURCHASE_ORDER' THEN
ln_osp_count := 0;
OPEN c_osp_count(pn_trx_id);
FETCH c_osp_count
INTO ln_osp_count;
CLOSE c_osp_count;

IF ln_osp_count > 0 THEN


IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'No tax determination for OSP Purchase Order.');
END IF;
RETURN;
END IF;
END IF;*/--commented by mani for bug 25656371
--Added by Junjian for bug#19907577 end

--start additions by vkaranam for bug#25978487

IF pv_entity_code = 'AP_INVOICES'
AND pv_event_class_code = 'STANDARD INVOICES' THEN
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'1 check whether the invoice is BOE or
not for invoice id ' || pn_trx_id);
BEGIN
is_boe := 0;
SELECT COUNT(1)
INTO is_boe
FROM ap_invoices_all
WHERE invoice_id = pn_trx_id
AND SOURCE = 'INDIA - BOE/PLA INVOICES';
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,' trx is boe ' || is_boe);
EXCEPTION
WHEN OTHERS THEN
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'1 trx is boe exception');
is_boe := 0;
END;

IF nvl(is_boe
,0) > 0 THEN
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'NO tax determination for BOE
invoice');
RETURN;
END IF;
END IF;
--end addiitons for bug#25978487

----ADDITION STARTS by chris on 20171101 for bug 26967180


--CASE1For paid invoices, Tax category from TP default must
--Not default and not generate any tax lines.
IF pv_entity_code = 'AP_INVOICES'
AND pv_event_class_code = 'STANDARD INVOICES' THEN
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'0 check whether the invoice is paid or
partially paid for invoice id ' || pn_trx_id);
--if paid, partially paid, ought to skip GST population
open c_inv_payment_status(pn_trx_id);
fetch c_inv_payment_status into ln_payment_status_flag
,lv_inv_source; --MANI FOR BUG 27189951
close c_inv_payment_status;

jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
, '0 ln_payment_status_flag =' ||ln_payment_status_flag);

IF NVL(ln_payment_status_flag, 'N') = 'Y' --FULLY


OR NVL(ln_payment_status_flag, 'N') = 'P' -- PARTIALLY PAID
OR NVL(lv_inv_source,'X') = 'INDIA TDS'--MANI FOR BUG 27189951
THEN
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'0 NO tax determination for PAID
invoice');
RETURN;
END IF;
END IF;
--ADDITION ENDS by chris on 20171101 for bug 26967180

/*--start additions by vkaranam for bug# 26321149


--Commented BY AELLURU FOR 26382539
IF pv_entity_code ='OE_ORDER_HEADERS'
then
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME||lv_api_name
,'before checking whether the order is rma
order or not order header id '
||pn_trx_id|| ' order line id '||
pn_trx_line_id);

open c_get_oe_trn_info;
fetch c_get_oe_trn_info into r_oe_trn_info;
close c_get_oe_trn_info;
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME||lv_api_name
,'r_oe_trn_info .line_category_code '||
r_oe_trn_info.line_category_code);

IF nvl(r_oe_trn_info.line_category_code,'ABC') ='RETURN' THEN


jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME||lv_api_name
,'Order is Return order line,no tax
determination/defaultation required');
RETURN;
END IF;
end if;
Commented By AELLURU for 26382539
--end additions for bug#26321149 */
/* Bug#19584708 start, add trx_line_id for input parameter.
When check multiple line which called by Tax Common Form, there may
pick the wrong factor line. */
/*
check_io_location( pn_application_id
,pv_entity_code
,pv_event_class_code
,pn_org_id
,pn_trx_id
,lv_return_status
,lv_process_message );
*/
check_io_location(pn_application_id => pn_application_id
,pv_entity_code => pv_entity_code
,pv_event_class_code => pv_event_class_code
,pn_org_id => pn_org_id
,pn_trx_id => pn_trx_id
,pn_trx_line_id => pn_trx_line_id
,pv_process_status => lv_return_status
,pv_process_message => lv_process_message);

IF lv_return_status <> FND_API.G_RET_STS_SUCCESS THEN


IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'check_io_location return msg:' || lv_process_message);
END IF;
RETURN;
END IF;

--start additions for bug 26399170


lv_tax_determination_basis := NULL;
OPEN c_tax_det_basis;
FETCH c_tax_det_basis
INTO lv_tax_determination_basis;
CLOSE c_tax_det_basis;

--start additions by vkaranam for bug#26595512

IF pv_entity_code = 'AP_INVOICES' THEN


BEGIN
ln_is_intercompany := 0;

jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,' trx is ln_is_intercompany check');
SELECT COUNT(1)
into ln_is_intercompany
FROM DUAL
WHERE EXISTS (SELECT 1
FROM AP_INVOICE_LINES_ALL line
--, ap_invoices_all inv --added by mani for bug 27189951
WHERE line.INVOICE_ID = pn_trx_id AND
--inv.SOURCE <> 'INDIA TDS' AND --added by mani for bug
27189951
--line.INVOICE_ID=inv.INVOICE_ID AND--added by mani for bug
27189951
line.LINE_TYPE_LOOKUP_CODE = 'ITEM' AND
(line.trx_business_category = 'INTERCOMPANY_TRANSACTION'
or line.source_event_class_code='INTERCOMPANY_TRX'
)
/* Bug#27247954, dejiang.liu/20171220. Add condition to limit non-
interface AP. */
AND (line.reference_key3 IS NULL OR
line.reference_key3 <> 'OFI TAX IMPORT'));
/*
AND NOT EXISTS (SELECT 1
FROM JAI_TAX_DET_FACTORS
WHERE TRX_ID = pn_trx_id AND
ENTITY_CODE = 'AP_INVOICES')*/

jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,' trx is ln_is_intercompany ' ||
ln_is_intercompany);
EXCEPTION
WHEN OTHERS THEN
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'ln_is_intercompany exception');
ln_is_intercompany := 0;
END;

IF nvl(ln_is_intercompany
,0) > 0 THEN

--FROM HERE MANI FOR BUG 27469527


OPEN C_TRX_LINES;
FETCH C_TRX_LINES INTO R_TRX_LINES;
CLOSE C_TRX_LINES;

jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'R_TRX_LINES.REF_DOC_APPLICATION_ID='||
R_TRX_LINES.REF_DOC_APPLICATION_ID);

IF R_TRX_LINES.REF_DOC_APPLICATION_ID IS NOT NULL THEN


--UPTO HERE MANI FOR BUG 27469527

lv_tax_determination_basis:='COPY_BASIS';

jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'tax determination basis is copy
basis');

END IF;

END IF;

end if;
--end additions for bug#26595512

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,' common configuration tax defaulting basis is ' ||
lv_tax_determination_basis);
END IF;

/*---------------------------------------------------------------------------------
-------
| Since at the time point of determine tax, tax determince basis has been
populated. |
| determine_tax_by_item_category and determine_tax_by_tax_rule will process
the records |
| by determine tax basis respectively, no need add tax determince basis
condition here |

-----------------------------------------------------------------------------------
------*/
/*added nvl clause for bug#26399170*/
IF nvl(lv_tax_determination_basis
,jai_tax_determination_pkg.item_category_basis) =
jai_tax_determination_pkg.item_category_basis THEN
jai_tax_determination_pkg.determine_tax_by_item_category(pn_application_id
,pv_entity_code
,pv_event_class_code
,pn_org_id
,pn_trx_id
,pn_trx_line_id
,pn_trx_loc_line_id
,pv_trx_level_type
,pv_trx_type --Added
by Qinglei for Receiving
,pv_call_from --Added
by Qinglei for Receiving
,lv_return_status
,lv_process_message);
IF lv_return_status <> FND_API.G_RET_STS_SUCCESS THEN
pv_process_status := lv_return_status;
pv_process_message := lv_process_message;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'determine_tax_by_item_category return status:' ||
pv_process_status);
END IF;
RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
END IF;
END IF; --26399170
/*added nvl clause for bug#26399170*/
IF nvl(lv_tax_determination_basis
,jai_tax_determination_pkg.item_category_basis) =
jai_tax_determination_pkg.rule_basis THEN
jai_tax_determination_pkg.determine_tax_by_tax_rule(pn_application_id
,pv_entity_code
,pv_event_class_code
,pn_org_id
,pn_trx_id
,pn_trx_line_id
,pn_trx_loc_line_id
,pv_trx_level_type
,pv_trx_type --Added by
Qinglei for Receiving
,pv_call_from --Added by
Qinglei for Receiving
,lv_return_status
,lv_process_message);
IF lv_return_status <> FND_API.G_RET_STS_SUCCESS THEN
pv_process_status := lv_return_status;
pv_process_message := lv_process_message;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'determine_tax_by_tax_rule return status:' ||
pv_process_status);
END IF;
RAISE FND_API.G_EXC_UNEXPECTED_ERROR;

END IF;
END IF; --26399170

/*---------------------------------------------------------------------------------
--
| After calling determine_tax_by_item_category and determine_tax_by_tax_rule,
|
| tax rule/tax category determined. Loop tax det factors, to prepare tax lines
tbl.|

-----------------------------------------------------------------------------------
--*/
FOR rec_trx_lines IN c_trx_lines LOOP
ln_det_factor_id := rec_trx_lines.det_factor_id;
/*-------------------------
| prepare tax line tbl |
---------------------------*/

jai_cmn_utils_pkg.write_fnd_log_msg('JAI_TAX_DETERMINATION_PKG'
,'lOOP c_trx_lines
rec_trx_lines.tax_determination_basis=' ||
rec_trx_lines.tax_determination_basis ||
'rec_trx_lines.override_tax_category_id='
||
rec_trx_lines.override_tax_category_id ||
'rec_trx_lines.default_tax_category_id='
||
rec_trx_lines.default_tax_category_id ||
'ln_det_factor_id=' ||
ln_det_factor_id);

--MODIFIED BY MANI FOR BUG 26397775


IF nvl(rec_trx_lines.tax_determination_basis
,'DUMMY') <> 'COPY_BASIS' THEN
--RULE BASIS--1

--addition starts by chris for bug#26715321


--if tax lines have tax rate type = UNIT_OF_MEASURE_ADHOC
-- tax uom rate will be manually input by user, user modified flag at
factor line ought to be Y
-- it should copy tax lines, as uom tax rate was manully input by user.

if rec_trx_lines.user_modified_flag = 'Y' THEN


lv_amt_factor_updated := 'Y' ;
ELSE
lv_amt_factor_updated := 'N' ;
END IF;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'UNIT_OF_MEASURE_ADHOC lv_amt_factor_updated :' ||
lv_amt_factor_updated);
END IF;

--addition ends by chris for bug#26715321

--additon starts by chris due to bug#25942639 on 20170627


IF rec_trx_lines.override_tax_category_id IS NOT NULL
AND rec_trx_lines.override_tax_category_id <>
rec_trx_lines.default_tax_category_id THEN
ln_tax_category_id := rec_trx_lines.override_tax_category_id;
ELSE
ln_tax_category_id := rec_trx_lines.default_tax_category_id;
END IF;
--addition ends by chris due to bug#25942639 on 20170627

jai_tax_determination_pkg.prepare_tax_lines_tbl(pn_det_factor_id =>
ln_det_factor_id
--commented by chris on
20170627
--,pn_tax_category_id =>
rec_trx_lines.default_tax_category_id
-- added by chris due to
bug#25942639 on 20170627
,pn_tax_category_id =>
ln_tax_category_id
--Added by Wenqiong for
Receiving
,pv_amt_factor_updated =>
lv_amt_factor_updated
--Added by chris for UOM
adhoc tax type due to bug#26715321
,pv_call_from =>
pv_call_from
,p_tax_lines_tbl =>
l_tax_lines_tbl
,pv_process_status =>
lv_return_status
/*from here 26387349*/
,pn_application_id =>
pn_application_id
,pv_entity_code =>
pv_entity_code
,pv_event_class_code =>
pv_event_class_code
,pn_trx_id =>
pn_trx_id
,pn_trx_line_id =>
pn_trx_line_id
,pn_trx_loc_line_id =>
pn_trx_loc_line_id
/*till here 26387349*/);

ELSE
--COPY BASIS
IF nvl(rec_trx_lines.override_tax_category_id
,0) <> nvl(rec_trx_lines.default_tax_category_id
,0)
AND rec_trx_lines.override_tax_category_id IS NOT NULL
AND nvl(rec_trx_lines.user_modified_flag
,'N') = 'Y' THEN
--change tax category manually on TAX UI.--2

jai_tax_determination_pkg.prepare_tax_lines_tbl(pn_det_factor_id =>
ln_det_factor_id
,pn_tax_category_id =>
nvl(rec_trx_lines.override_tax_category_id

,rec_trx_lines.default_tax_category_id)
,pv_call_from =>
pv_call_from
,p_tax_lines_tbl =>
l_tax_lines_tbl
,pv_process_status =>
lv_return_status
,pn_application_id =>
pn_application_id
/*from here 26387349*/
--,pv_entity_code
=> pv_entity_code
--,pv_event_class_code
=> pv_event_class_code
--,pn_trx_id
=> pn_trx_id
--,pn_trx_line_id
=> pn_trx_line_id
--,pn_trx_loc_line_id
=> pn_trx_loc_line_id
/*till here 26387349*/);

ELSE
--SIMPLY COPY TAXES

jai_tax_determination_pkg.prepare_tax_lines_tbl(pn_det_factor_id =>
ln_det_factor_id

--nvl(lv_src_ovrd_tax_category_id,lv_src_dflt_tax_category_id)
,pn_tax_category_id =>
NULL
,pv_call_from =>
pv_call_from
,p_tax_lines_tbl =>
l_tax_lines_tbl
,pv_process_status =>
lv_return_status
--from here 26387349
,pn_application_id =>
pn_application_id
,pv_entity_code =>
pv_entity_code
,pv_event_class_code =>
pv_event_class_code
,pn_trx_id =>
pn_trx_id
,pn_trx_line_id =>
pn_trx_line_id
,pn_trx_loc_line_id =>
pn_trx_loc_line_id
--till here 26387349
);
END IF; --2

END IF; --1

--MODIFIED BY MANI FOR BUG 26397775

IF lv_return_status <> FND_API.G_RET_STS_SUCCESS THEN


pv_process_status := lv_return_status;
pv_process_message := lv_process_message;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'prepare_tax_lines_tbl return status:' ||
pv_process_status);
END IF;
RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
END IF;

/*--------------------------
| calculate_tax |
---------------------------*/
jai_tax_determination_pkg.calculate_tax(p_tax_lines_tbl => l_tax_lines_tbl
,pv_call_from => pv_call_from
--Added by Wenqiong for Receiving
,pv_process_status =>
lv_return_status
,pv_process_message =>
lv_process_message);

IF lv_return_status <> FND_API.G_RET_STS_SUCCESS THEN


pv_process_status := lv_return_status;
pv_process_message := lv_process_message;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'calculate_tax return status:' || pv_process_status);
END IF;
RAISE FND_API.G_EXC_UNEXPECTED_ERROR;

END IF;
ln_det_factor_id := rec_trx_lines.det_factor_id;
/*---------------------------------------
| delete tax lines |
| populate tax lines after calculation.|
---------------------------------------*/
jai_tax_determination_pkg.delete_tax_lines(ln_det_factor_id
,pv_call_from); --Added by Qinglei
for Receiving
jai_tax_determination_pkg.populate_tax_lines(l_tax_lines_tbl
,pv_call_from --Added by Wenqiong
,lv_return_status
,lv_process_message);
IF lv_return_status <> FND_API.G_RET_STS_SUCCESS THEN
pv_process_status := lv_return_status;
pv_process_message := lv_process_message;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'populate_tax_lines return status before Exemption call:'
|| pv_process_status);
END IF;
RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
END IF;
--Added by Wenqiong for Exemption begin
OPEN c_source_exemption_info(ln_det_factor_id);
FETCH c_source_exemption_info
INTO rec_source_exemption_info;
CLOSE c_source_exemption_info;

--27053774
IF rec_source_exemption_info.exemption_type IS NULL
THEN
OPEN c_default_exemption_info(ln_det_factor_id);
FETCH c_default_exemption_info
INTO rec_source_exemption_info;
CLOSE c_default_exemption_info;
END IF;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'After Default c_default_exemption_info' ||
rec_source_exemption_info.exemption_type);
END IF;
--27053774
IF nvl(rec_source_exemption_info.exemption_type
,'X') <> 'X' THEN
jai_tax_determination_pkg.determine_exemption(pn_det_factor_id =>
ln_det_factor_id
,pv_exemption_type =>
rec_source_exemption_info.exemption_type
,pv_tracking_num =>
rec_source_exemption_info.tracking_num
,pv_exemption_num =>
rec_source_exemption_info.exemption_num
,pd_exemption_date =>
rec_source_exemption_info.exemption_date
,pv_proof_exp_num =>
rec_source_exemption_info.proof_of_export_num
,pd_proof_rcv_date =>
rec_source_exemption_info.proof_received_date
,pv_process_status =>
lv_return_status
,pv_process_message =>
lv_process_message);
IF lv_return_status <> FND_API.G_RET_STS_SUCCESS THEN
pv_process_status := lv_return_status;
pv_process_message := lv_process_message;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'determine_exemption return status:' ||
pv_process_status);
END IF;
RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
END IF;
END IF;
--Added by Wenqiong for Exemption end

END LOOP;

-- added by zhiwei.xin for AR transaction begin


l_tax_lines_tbl.delete;
jai_tax_determination_pkg.jai_update_tax_dist(p_trx_id => pn_trx_id
,p_application_id =>
pn_application_id
,p_entity_code =>
pv_entity_code
,p_event_class_code =>
pv_event_class_code
,p_tax_lines_tbl =>
l_tax_lines_tbl
,x_process_status =>
lv_return_status
,x_process_message =>
lv_process_message);

IF lv_return_status <> FND_API.G_RET_STS_SUCCESS THEN


pv_process_status := lv_return_status;
pv_process_message := lv_process_message;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'jai_update_tax_dist return status:' || pv_process_status);
END IF;
RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
END IF;
-- added by zhiwei.xin for AR transaction end.

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
EXCEPTION
WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
pv_process_status := FND_API.G_RET_STS_UNEXP_ERROR;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,pv_process_message);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
WHEN OTHERS THEN
pv_process_status := FND_API.G_RET_STS_UNEXP_ERROR;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,SQLERRM);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
END determine_tax;

/*---------------------------------------------------------------------------------
------------------------------+
| Created By : Wenqiong Zhou
|
| Creation Date : 10/Apr/2013
|
| Bug Number/ER Name : Phase IV Tax Determination
|
| SubProgram Name : determine_tax_by_item_category
|
| Type : PROCEDURE
|
| Purpose : This procedure will determine the taxes for item
category basis |
| It can be called at trx level or line level base on
input parameters. |
| For the case of trx creation, will call determine tax
at trx level by grouping |
| by det factors to improve the performance, trx line
info will not be passed. |
| For the case of trx updating, will call determine tax
at trx line level, |
| trx line info will be passed.
|
| TDD Reference : Section 6.9
|
| Assumptions :
|
| Called From : called by determine_tax
|

|----------------------------------------------------------------------------------
-----------------------------|
| parameters IN/OUT Type Required
Description and Purpose |
| ------------ -------- ------ ----------
------------------------- |
| pn_application_id IN NUMBER yes
Application ID |
| pv_entity_code IN VARCHAR2 yes Entity
Code |
| pv_event_class_code IN VARCHAR2 yes Event
Class Code |
| pn_org_id IN NUMBER yes Org ID
|
| pn_trx_id IN NUMBER yes
Transaction ID |
| pn_trx_line_id IN NUMBER default null
Transaction Line ID |
| pn_trx_loc_line_id IN NUMBER default null
Transaction Loc line ID |
| pv_trx_level_type IN VARCHAR2 default null
Transaction level Type |
| pv_process_status OUT VARCHAR2 yes
Process status |
| pv_process_message OUT VARCHAR2 yes
Process message |

*----------------------------------------------------------------------------------
------------------------------*/
PROCEDURE determine_tax_by_item_category
(
pn_application_id IN NUMBER
,pv_entity_code IN VARCHAR2
,pv_event_class_code IN VARCHAR2
,pn_org_id IN NUMBER
,pn_trx_id IN NUMBER
,pn_trx_line_id IN NUMBER DEFAULT NULL
,pn_trx_loc_line_id IN NUMBER DEFAULT NULL
,pv_trx_level_type IN VARCHAR2 DEFAULT NULL
,pv_trx_type IN VARCHAR2 DEFAULT NULL --Added by Qinglei for Receiving
09-Jul-2013
,pv_call_from IN VARCHAR2 DEFAULT NULL --Added by Qinglei for Receiving
09-Jul-2013
,pv_process_status OUT NOCOPY VARCHAR2
,pv_process_message OUT NOCOPY VARCHAR2
) IS
CURSOR c_line_det_factors IS
SELECT DISTINCT party_id
,party_site_id
,party_type
,item_id
,organization_id
,trx_date -- Added By Rishin for Bug#26448163
FROM jai_tax_det_factors
WHERE /*26399170*/
((pn_trx_line_id IS NOT NULL AND trx_line_id = pn_trx_line_id) OR
(pn_trx_line_id IS NULL))
AND trx_id = pn_trx_id
AND application_id = pn_application_id
AND entity_code = pv_entity_code
AND event_class_code = pv_event_class_code
AND tax_determination_basis =
jai_tax_determination_pkg.item_category_basis
-- AND trx_id = pn_trx_id
-- AND (trx_line_id = nvl(pn_trx_line_id, trx_line_id) OR nvl(trx_line_id,-1)
= nvl(pn_trx_line_id,-1))
AND (trx_loc_line_id = nvl(pn_trx_loc_line_id
,trx_loc_line_id) OR
nvl(trx_loc_line_id
,-1) = nvl(pn_trx_loc_line_id
,-1))
AND trx_level_type = nvl(pv_trx_level_type
,trx_level_type)
AND nvl(trx_type
,'X') = nvl(pv_trx_type
,nvl(trx_type
,'X')) --Added by Qinglei for Receiving 09-Jul-2013
AND nvl(pv_call_from
,'BASE') <> 'INTERFACE' --Added by Qinglei for Receiving 09-Jul-2013
--Added by Qinglei for Receiving 09-Jul-2013 begin
UNION
SELECT DISTINCT party_id
,party_site_id
,party_type
,item_id
,organization_id
,trx_date -- Added By Rishin for Bug#26448163
FROM jai_det_factors_interface
WHERE /*26399170*/
((pn_trx_line_id IS NOT NULL AND interface_transaction_id = pn_trx_line_id)
OR (pn_trx_line_id IS NULL))
AND interface_trx_hdr_id = pn_trx_id
AND application_id = pn_application_id
AND entity_code = pv_entity_code
AND event_class_code = pv_event_class_code
AND tax_determination_basis =
jai_tax_determination_pkg.item_category_basis
/*
AND interface_trx_hdr_id = pn_trx_id
AND (interface_transaction_id = NVL(pn_trx_line_id,interface_transaction_id)
OR NVL(interface_transaction_id,-1) = NVL(pn_trx_line_id,-1))*/
AND nvl(trx_type
,'X') = nvl(pv_trx_type
,nvl(trx_type
,'X')) --Added by Qinglei for Receiving 09-Jul-2013
AND pv_call_from = 'INTERFACE';
--Added by Qinglei for Receiving 09-Jul-2013 end

CURSOR c_3rd_party_regs
(
cv_party_type VARCHAR2
,cn_party_id NUMBER
,cn_party_site_id NUMBER
) IS
SELECT item_category_list
,invoice_tax_category_id
FROM jai_party_regs
WHERE party_type_code IN ('THIRD_PARTY'
,'THIRD_PARTY_SITE')
AND supplier_flag = decode(cv_party_type
,PARTY_TYPE_SUPPLIER
,'Y'
,'N')
AND customer_flag = decode(cv_party_type
,PARTY_TYPE_CUSTOMER
,'Y'
,'N')
AND party_id = cn_party_id
AND party_site_id = nvl(cn_party_site_id
,party_site_id)
--OR nvl(party_site_id,-1) = nvl(cn_party_site_id,-1)--commented by
mani for bug 25888076
AND org_id = nvl(pn_org_id
,org_id) --added by mani for bug 25888076
;

--added by mani for bug 25888076


CURSOR c_3rd_prty_null_site
(
cv_party_type VARCHAR2
,cn_party_id NUMBER
) IS
SELECT item_category_list
,invoice_tax_category_id
FROM jai_party_regs
WHERE party_type_code IN ('THIRD_PARTY'
,'THIRD_PARTY_SITE')
AND supplier_flag = decode(cv_party_type
,PARTY_TYPE_SUPPLIER
,'Y'
,'N')
AND customer_flag = decode(cv_party_type
,PARTY_TYPE_CUSTOMER
,'Y'
,'N')
AND party_id = cn_party_id
AND nvl(party_site_id
,-1) = -1
AND nvl(org_id
,0) = 0;
--added by mani for bug 25888076

CURSOR c_org_tax_catg_id
(
cn_item_id NUMBER
,cn_organization_id NUMBER
) IS
SELECT b.tax_category_id
FROM jai_item_templ_hdr a
,jai_tax_categories b
WHERE a.item_classification = b.item_class_code
AND a.inventory_item_id = cn_item_id
AND a.organization_id = cn_organization_id
AND b.org_id = pn_org_id
AND nvl(b.effective_from
,SYSDATE - 1) <= SYSDATE
AND nvl(b.effective_to
,SYSDATE + 1) >= SYSDATE;

-- Added By Rishin for bug#26448163 start


/*
CURSOR cur_validate_tax_category_id
(
cn_item_id NUMBER
,cn_organization_id NUMBER
,cn_trx_date DATE
) IS
SELECT b.tax_category_id
FROM jai_item_templ_hdr a
,jai_tax_categories b
WHERE a.item_classification = b.item_class_code
AND a.inventory_item_id = cn_item_id
AND a.organization_id = cn_organization_id
AND b.org_id = pn_org_id
AND nvl(b.effective_from
,SYSDATE -1 ) <= trunc(cn_trx_date)
AND nvl(b.effective_to
,SYSDATE +1) >= trunc(cn_trx_date);*/--commented by mani.
CURSOR cur_validate_tax_category_id (
cn_tax_category_id number,
cn_trx_date date
) is
select tax_category_id from jai_tax_categories JTG
where jtg.tax_category_id=cn_tax_category_id
AND nvl(jtg.effective_from
,SYSDATE -1 ) <= trunc(cn_trx_date)
-- AND nvl(jtg.effective_to
-- ,SYSDATE +1) >= trunc(cn_trx_date); --commented by chris due to
bug 27160692
AND nvl(jtg.effective_to, to_date('4712/12/31', 'YYYY/MM/DD')) >=
trunc(cn_trx_date);
-- added by chris to replace sysdate+1 with 4712/12/31, as future date as
invoice date is regular practice for PA invoices due to bug 27160692
-- Added By Rishin for bug#26448163 end

--Change cn_item_category_list from number to varchar by Qiong for bug17084225


CURSOR c_party_tax_catg_id
(
cn_item_category_list VARCHAR2
,cn_item_id NUMBER
) IS
SELECT tax_category_id
FROM jai_inv_itm_taxctg_dtls a
WHERE a.tax_category_list = cn_item_category_list
AND a.inventory_item_id = cn_item_id;

lv_api_name CONSTANT VARCHAR2(50) := 'determine_tax_by_item_category';


lv_return_status VARCHAR2(30);
lv_process_message VARCHAR2(150);
ln_party_id NUMBER;
ln_party_site_id NUMBER;
lv_party_type VARCHAR2(50);
ln_item_id NUMBER;
--Change cn_item_category_list from number to varchar2(30) by Qiong for
bug17084225
ln_item_category_list VARCHAR2(30);
ln_invoice_tax_category_id NUMBER;
ln_default_tax_category_id NUMBER;
ln_organization_id NUMBER;
lv_val_tax_category_id NUMBER;
BEGIN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----Begin----' || '()+');
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Input parameter:pn_application_id,' || pn_application_id ||
',pv_entity_code:' || pv_entity_code ||
',pv_event_class_code:' || pv_event_class_code || 'pn_org_id:'
|| pn_org_id || ',pn_trx_id:' ||
pn_trx_id || ',pn_trx_line_id:' || pn_trx_line_id ||
'pn_trx_loc_line_id:' || pn_trx_loc_line_id ||
'pv_trx_level_type:' || pv_trx_level_type);
END IF;
pv_process_status := FND_API.G_RET_STS_SUCCESS;
--Group by party_id,party_site_id,party_type,item_id,organization_id
-- which are the det factors for item category basis.
FOR rec_line_det_factors IN c_line_det_factors LOOP
--initialize the variables at the begining of loop.
ln_item_id := NULL;
ln_organization_id := NULL;
ln_invoice_tax_category_id := NULL;
ln_item_category_list := NULL;
ln_default_tax_category_id := NULL;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'rec_line_det_factors.party_type=' ||
rec_line_det_factors.party_type ||
',rec_line_det_factors.party_id=' ||
rec_line_det_factors.party_id ||
',rec_line_det_factors.party_site_id is ' ||
rec_line_det_factors.party_site_id ||
'party_type_supplier=' || PARTY_TYPE_SUPPLIER ||
'party_type_customer=' || PARTY_TYPE_CUSTOMER||
',rec_line_det_factors.trx_date is ' ||
rec_line_det_factors.trx_date);
END IF;

OPEN c_3rd_party_regs(rec_line_det_factors.party_type
,rec_line_det_factors.party_id
,rec_line_det_factors.party_site_id);
FETCH c_3rd_party_regs
INTO ln_item_category_list
,ln_invoice_tax_category_id;
CLOSE c_3rd_party_regs;

ln_item_id := rec_line_det_factors.item_id;
ln_organization_id := rec_line_det_factors.organization_id;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || ':ln_item_category_list is ' ||
ln_item_category_list ||
',ln_invoice_tax_category_id is ' ||
ln_invoice_tax_category_id || ',ln_item_id is ' ||
ln_item_id || ',ln_organization_id is ' ||
ln_organization_id);
END IF;

IF nvl(ln_item_id
,0) = 0 THEN
IF pn_application_id IN (200
,222)
AND pv_entity_code IN ('AP_INVOICES'
,'TRANSACTIONS')
AND pv_event_class_code IN ('STANDARD INVOICES'
,'INVOICE') THEN

IF nvl(ln_invoice_tax_category_id
,0) > 0 THEN
ln_default_tax_category_id := ln_invoice_tax_category_id;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'Use invoice tax category setup at 3rd
party reg.');
END IF;
END IF; --ln_invoice_tax_category_id > 0
END IF; --AP/AR standardalone invoices

ELSE
--Changed by Qiong for bug17084225 begin
--IF nvl(ln_item_category_list,0) > 0 THEN
IF ln_item_category_list IS NOT NULL THEN
--Changed by Qiong for bug17084225 end
OPEN c_party_tax_catg_id(ln_item_category_list
,ln_item_id);
FETCH c_party_tax_catg_id
INTO ln_default_tax_category_id;
CLOSE c_party_tax_catg_id;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'Get tax category from the item category
list setup at 3rd party reg.');
END IF;

ELSE
--If item category list is null for the party site, get it from null
party site.
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name ||
':ln_item_category_list is null on party site setup, get
it from null party setup.');
END IF;

--modified by mani for bug 25888076


/*OPEN
c_3rd_party_regs(rec_line_det_factors.party_type,rec_line_det_factors.party_id,NULL
);
FETCH c_3rd_party_regs INTO
ln_item_category_list,ln_invoice_tax_category_id;
CLOSE c_3rd_party_regs;*/

OPEN c_3rd_prty_null_site(rec_line_det_factors.party_type
,rec_line_det_factors.party_id);
FETCH c_3rd_prty_null_site
INTO ln_item_category_list
,ln_invoice_tax_category_id;
CLOSE c_3rd_prty_null_site;
--modified by mani for bug 25888076

--Changed by Qiong for bug17084225 begin


--IF nvl(ln_item_category_list,0) > 0 THEN
IF ln_item_category_list IS NOT NULL THEN
--Changed by Qiong for bug17084225 end
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || ':ln_item_category_list from null site
setup is:' || ln_item_category_list);
END IF;
OPEN c_party_tax_catg_id(ln_item_category_list
,ln_item_id);
FETCH c_party_tax_catg_id
INTO ln_default_tax_category_id;
CLOSE c_party_tax_catg_id;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name ||
'Get tax category from the item category list setup
for null site at 3rd party reg.');
END IF;
END IF; --nvl(ln_item_category_list,0) > 0
END IF; --ln_item_category_list not null
IF nvl(ln_default_tax_category_id
,0) = 0 THEN
OPEN c_org_tax_catg_id(ln_item_id
,ln_organization_id);
FETCH c_org_tax_catg_id
INTO ln_default_tax_category_id;
CLOSE c_org_tax_catg_id;
END IF; --ln_default_tax_category_id is null
END IF; -- item_id is null
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || ': at end,detaulted_tax_category_id is ' ||
ln_default_tax_category_id);
END IF;

IF nvl(ln_default_tax_category_id
,0) > 0 THEN
-- added by rishin for bug#26448163 begin
OPEN cur_validate_tax_category_id( ln_default_tax_category_id
,rec_line_det_factors.trx_date);
FETCH cur_validate_tax_category_id
INTO lv_val_tax_category_id;
IF cur_validate_tax_category_id%NOTFOUND THEN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'Fetched Category ID '||
ln_default_tax_category_id||' is not Active.');
END IF;
RETURN;
END IF ;

CLOSE cur_validate_tax_category_id;
-- added by rishin for bug#26448163 end
END IF;

IF nvl(ln_default_tax_category_id
,0) > 0 THEN
--Modified by Qinglei for Receiving 09-Jul-2013 begin
IF nvl(pv_call_from
,'BASE') <> 'INTERFACE' THEN
--Modified by Junjian
UPDATE jai_tax_det_factors
SET default_tax_category_id = ln_default_tax_category_id
WHERE /*26399170*/
((pn_trx_line_id IS NOT NULL AND trx_line_id = pn_trx_line_id) OR
(pn_trx_line_id IS NULL))
AND trx_id = pn_trx_id
AND application_id = pn_application_id
AND entity_code = pv_entity_code
AND event_class_code = pv_event_class_code
AND tax_determination_basis =
jai_tax_determination_pkg.item_category_basis
-- AND trx_id = pn_trx_id
AND nvl(item_id
,-99) = nvl(ln_item_id
,-99) --Modified by Junjian for AP tax flow
AND nvl(organization_id
,-99) = nvl(ln_organization_id
,-99) --Modified by Junjian on 07-01-2014
--AND (trx_line_id = nvl(pn_trx_line_id, trx_line_id) OR
nvl(trx_line_id,-1) = nvl(pn_trx_line_id,-1))
AND (trx_loc_line_id = nvl(pn_trx_loc_line_id
,trx_loc_line_id) OR
nvl(trx_loc_line_id
,-1) = nvl(pn_trx_loc_line_id
,-1))
AND trx_level_type = nvl(pv_trx_level_type
,trx_level_type);
ELSE
UPDATE jai_det_factors_interface
SET default_tax_category_id = ln_default_tax_category_id
WHERE
/*26399170*/
((pn_trx_line_id IS NOT NULL AND interface_transaction_id =
pn_trx_line_id) OR (pn_trx_line_id IS NULL))
AND interface_trx_hdr_id = pn_trx_id
AND application_id = pn_application_id
AND entity_code = pv_entity_code
AND event_class_code = pv_event_class_code
AND tax_determination_basis =
jai_tax_determination_pkg.item_category_basis
/* AND interface_trx_hdr_id = pn_trx_id
AND (interface_transaction_id =
NVL(pn_trx_line_id,interface_transaction_id)
OR NVL(interface_transaction_id,-1) = nvl(pn_trx_line_id,-1))*/
AND item_id = ln_item_id
AND organization_id = ln_organization_id;
END IF;
--Modified by Qinglei for Receiving 09-Jul-2013 end

END IF;
END LOOP;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
EXCEPTION
WHEN OTHERS THEN
pv_process_status := FND_API.G_RET_STS_UNEXP_ERROR;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,SQLERRM);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
END determine_tax_by_item_category;

/*---------------------------------------------------------------------------------
--------------------------------+
| Created By : Wenqiong Zhou
|
| Creation Date : 10/Apr/2013
|
| Bug Number/ER Name : Phase IV Tax Determination
|
| SubProgram Name : determine_tax_by_tax_rule
|
| Type : PROCEDURE
|
| Purpose : This procedure will determine the taxes for rule basis
|
| It can be called at trx level or line level base on
input parameters. |
| For the case of trx creation, will call determine tax
at trx level by grouping |
| by det factors to improve the performance, trx line
info will not be passed. |
| For the case of trx updating, will call determine tax
at trx line level, |
| trx line info will be passed.
|
| TDD Reference : Section 6.10
|
| Assumptions :
|
| Called From : called by determine_tax
|

|----------------------------------------------------------------------------------
-------------------------------|
| parameters IN/OUT Type Required
Description and Purpose |
| ------------ -------- ------ ----------
------------------------- |
| pn_application_id IN NUMBER yes
Application ID |
| pv_entity_code IN VARCHAR2 yes Entity
Code |
| pv_event_class_code IN VARCHAR2 yes Event
Class Code |
| pn_org_id IN NUMBER yes Org ID
|
| pn_trx_id IN NUMBER yes
Transaction ID |
| pn_trx_line_id IN NUMBER default null
Transaction Line ID |
| pn_trx_loc_line_id IN NUMBER default null
Transaction Loc line ID |
| pv_trx_level_type IN VARCHAR2 default null
Transaction level Type |
| pv_process_status OUT VARCHAR2 yes Process
status |
| pv_process_message OUT VARCHAR2 yes Process
message |

*----------------------------------------------------------------------------------
--------------------------------*/
PROCEDURE determine_tax_by_tax_rule
(
pn_application_id IN NUMBER
,pv_entity_code IN VARCHAR2
,pv_event_class_code IN VARCHAR2
,pn_org_id IN NUMBER
,pn_trx_id IN NUMBER
,pn_trx_line_id IN NUMBER DEFAULT NULL
,pn_trx_loc_line_id IN NUMBER DEFAULT NULL
,pv_trx_level_type IN VARCHAR2 DEFAULT NULL
,pv_trx_type IN VARCHAR2 DEFAULT NULL --Added by Qinglei for Receiving
09-Jul-2013
,pv_call_from IN VARCHAR2 DEFAULT NULL --Added by Qinglei for Receiving
09-Jul-2013
,pv_process_status OUT NOCOPY VARCHAR2
,pv_process_message OUT NOCOPY VARCHAR2
) IS
--Cursors Declare
CURSOR c_line_det_factors IS
SELECT DISTINCT ship_from_country
,ship_from_state
,ship_to_country
,ship_to_state
,bill_to_country
,bill_to_state
--added by mani for bug 26030089
,item_classification
,first_party_report_code_id
,third_party_report_code_id
,item_report_code_id
,party_type
,trx_type --Added by Junjian for Application Tax Rule
-- added by zhiwei.xin for bug#21354361 begin
,party_id
,party_site_id
-- added by zhiwei.xin for bug#21354361 end.
-- added by zhiwei.xin for GST changes begin
,organization_id
,location_id
-- added by zhiwei.xin for GST changes end.
/* Bug#25760740, dejiang.liu/20170322. Add item ID. */
,item_id
,trx_date -- Added By Rishin for Bug#26448163
FROM jai_tax_det_factors
WHERE
/*26399170*/
((pn_trx_line_id IS NOT NULL AND trx_line_id = pn_trx_line_id) OR
(pn_trx_line_id IS NULL))
AND trx_id = pn_trx_id
AND application_id = pn_application_id
AND entity_code = pv_entity_code
AND event_class_code = pv_event_class_code
AND tax_determination_basis = jai_tax_determination_pkg.rule_basis
--AND trx_id = pn_trx_id
--AND (trx_line_id = nvl(pn_trx_line_id, trx_line_id) OR nvl(trx_line_id,-1)
= nvl(pn_trx_line_id,-1))
AND (trx_loc_line_id = nvl(pn_trx_loc_line_id
,trx_loc_line_id) OR
nvl(trx_loc_line_id
,-1) = nvl(pn_trx_loc_line_id
,-1))
AND trx_level_type = nvl(pv_trx_level_type
,trx_level_type)
AND nvl(trx_type
,'X') = nvl(pv_trx_type
,nvl(trx_type
,'X')) --Added by Qinglei for Receiving 09-Jul-2013
AND nvl(pv_call_from
,'BASE') <> 'INTERFACE' --Added by Qinglei for Receiving 09-Jul-2013
UNION
--Added by Qinglei for Receiving 09-Jul-2013 begin
SELECT DISTINCT ship_from_country
,ship_from_state
,ship_to_country
,ship_to_state
,bill_to_country
,bill_to_state
--added by mani for bug 26030089
,item_classification
,first_party_report_code_id
,third_party_report_code_id
,item_report_code_id
,party_type
,trx_type --Added by Junjian for Application Tax Rule
-- added by zhiwei.xin for bug#21354361 begin
,party_id
,party_site_id
-- added by zhiwei.xin for bug#21354361 end.
-- added by zhiwei.xin for GST changes begin
,organization_id
,location_id
-- added by zhiwei.xin for GST changes end.
/* Bug#25760740, dejiang.liu/20170322. Add item ID. */
,item_id
,trx_date -- Added By Rishin for Bug#26448163
FROM jai_det_factors_interface
WHERE
/*26399170*/
((pn_trx_line_id IS NOT NULL AND interface_transaction_id = pn_trx_line_id)
OR (pn_trx_line_id IS NULL))
AND interface_trx_hdr_id = pn_trx_id
AND application_id = pn_application_id
AND entity_code = pv_entity_code
AND event_class_code = pv_event_class_code
AND tax_determination_basis = jai_tax_determination_pkg.rule_basis
/*AND interface_trx_hdr_id = pn_trx_id
AND (interface_transaction_id = NVL(pn_trx_line_id,interface_transaction_id)
OR NVL(interface_transaction_id,-1) = NVL(pn_trx_line_id,-1))*/
AND nvl(trx_type
,'X') = nvl(pv_trx_type
,nvl(trx_type
,'X'))
AND pv_call_from = 'INTERFACE';
--Added by Qinglei for Receiving 09-Jul-2013 end

/* Bug#25760740, dejiang.liu/20170322. Add cursor to get item reporting code.


*/
CURSOR c_item_report_code_id
(
p_inventory_item_id NUMBER
,p_organization_id NUMBER
) IS
SELECT jra.reporting_code_id
FROM jai_item_templ_hdr jith
,jai_reporting_associations jra
,jai_reporting_types jrt
WHERE jra.reporting_type_id = jrt.reporting_type_id
AND jith.inventory_item_id = p_inventory_item_id
AND jith.organization_id = p_organization_id
AND jra.entity_id = jith.template_hdr_id
AND jra.entity_code = 'ITEM' -- Item
AND jrt.reporting_usage = 'TD' -- Tax Determination
AND SYSDATE BETWEEN nvl(jra.effective_from
,SYSDATE) AND nvl(jra.effective_to
,SYSDATE + 1)
AND SYSDATE BETWEEN nvl(jrt.effective_from
,SYSDATE) AND nvl(jrt.effective_to
,SYSDATE + 1);

l_item_report_code_id NUMBER;

/* Bug#25760740, dejiang.liu/20170322. Add cursor to get third party reporting


code. */
CURSOR c_third_party_report_code_id
(
p_party_id NUMBER
,p_party_site_id NUMBER
,p_party_type_code VARCHAR2
) IS
SELECT first_value(jra.reporting_code_id) over(ORDER BY party_site_id NULLS
LAST)
FROM jai_reporting_associations jra
,jai_reporting_types jrt
,jai_party_regs jpr
WHERE jra.reporting_type_id = jrt.reporting_type_id
AND jra.entity_id = jpr.party_reg_id
AND jra.entity_code = 'THIRD_PARTY'
AND jra.entity_source_table = 'JAI_PARTY_REGS'
AND jrt.reporting_usage = 'TD' -- Tax Determination
-- Filter only null site or same site.
AND jpr.party_id = p_party_id
AND (jpr.party_site_id IS NULL OR jpr.party_site_id = p_party_site_id)
AND jpr.supplier_flag = decode(upper(p_party_type_code)
,'SUPPLIER'
,'Y'
,'N')
AND jpr.customer_flag = decode(upper(p_party_type_code)
,'CUSTOMER'
,'Y'
,'N')
-- Filter by effective date.
AND SYSDATE BETWEEN nvl(jra.effective_from
,SYSDATE - 1) AND nvl(jra.effective_to
,SYSDATE + 1)
AND SYSDATE BETWEEN nvl(jrt.effective_from
,SYSDATE - 1) AND nvl(jra.effective_to
,SYSDATE + 1);

l_third_party_report_code_id NUMBER;

CURSOR c_tax_rule
(
cv_ship_from_state VARCHAR2
,cv_ship_from_country VARCHAR2
,cv_ship_to_state VARCHAR2
,cv_ship_to_country VARCHAR2
,cv_bill_to_state VARCHAR2 --mani for bug 26030089
,cv_bill_to_country VARCHAR2 --mani for bug 26030089
,cv_item_classfication VARCHAR2
,cn_item_report_code_id NUMBER
,cn_first_party_report_code_id NUMBER
,cn_third_party_report_code_id NUMBER
,cv_party_type VARCHAR2
-- added by zhiwei.xin for GST changes begin
,cn_party_id NUMBER
,cn_party_site_id NUMBER
,cn_organization_id NUMBER
,cn_location_id NUMBER
-- added by zhiwei.xin for GST changes end.
--Added by Junjian for Application Tax Rule begin
,cv_trx_type VARCHAR2
,cn_application_id VARCHAR2 --NUMBER--MODIFIED BY MANI FOR BUG 26452519
,cv_app_code VARCHAR2
--Added by Junjian for Application Tax Rule end
/* Bug#18032985 start, added for project invoices. */
,cv_pa_distribution_rule VARCHAR2
,cn_pa_event_type NUMBER
,cn_pa_expenditure_type NUMBER
,cn_pa_project_id NUMBER
/* Bug#18032985 end. */
) IS
SELECT max_prec_level.tax_rule_id
,max_prec_level.tax_category_id
FROM (SELECT tr.tax_rule_id
,tr.tax_category_id
FROM /* if there are multiple tax rules with same determinates
matched then select the one with highest precedence level*/
(SELECT rule_line.tax_rule_id
/*sum the determination values as when NULL count as
1, with Value count as 2,
then the top 1 of the sum will be the rule has max
determinates matched*/
,rank() over(ORDER BY
SUM(decode(tax_determination_value, NULL, 1, 'OTHERS', decode(country, NULL, 1, 2),
2)) DESC) rank
FROM jai_tax_rule_lines rule_line
WHERE rule_line.tax_determination_basis <>
decode(cv_party_type

,PARTY_TYPE_SUPPLIER
,'CUSTOMER_
REPORTING_CODE'

,PARTY_TYPE_CUSTOMER
,'SUPPLIER_
REPORTING_CODE'
-- added
by zhiwei.xin for GST Changes begin

,PARTY_TYPE_INVENTORY
,'FP_REPORT
ING_CODE'
-- added
by zhiwei.xin for GST changes end.
)
/* Commented out by Wenqiong for removing date range
in tax rule line.
--Added by Qiong for bug17084225 begin
AND NVL( rule_line.effective_from, SYSDATE - 1 ) <=
SYSDATE
AND NVL( rule_line.effective_to, SYSDATE + 1 ) >=
SYSDATE
--Added by Qiong for bug17084225 end
*/ /*tax rule id in the below list which are matched
the determinates*/
AND rule_line.tax_rule_id IN
(SELECT a.tax_rule_id
FROM jai_tax_rules a
WHERE nvl(a.effective_from
,SYSDATE - 1) <= SYSDATE
AND nvl(a.effective_to
,SYSDATE + 1) >= SYSDATE
AND a.org_id = pn_org_id
-- bug 26848979
-- when looking for customer, please eliminate
supplier rules and viceversa
AND ( ( cv_party_type IN
(PARTY_TYPE_SUPPLIER,PARTY_TYPE_CUSTOMER)
AND NOT (EXISTS (select 1
from jai_tax_rule_lines sup1
where sup1.tax_rule_id =
a.tax_rule_id
and sup1.tax_determination_basis
=
DECODE(cv_party_type,
PARTY_TYPE_SUPPLIER, 'CUSTOMER_REPORTING_CODE'

,PARTY_TYPE_CUSTOMER, 'SUPPLIER_REPORTING_CODE'

,G_PKG_NAME
)
)
AND NOT EXISTS
(select 1
from jai_tax_rule_lines sup2
where sup2.tax_rule_id =
a.tax_rule_id
AND sup2.tax_determination_basis
=
DECODE(cv_party_type,
PARTY_TYPE_SUPPLIER, 'SUPPLIER_REPORTING_CODE'

,PARTY_TYPE_CUSTOMER, 'CUSTOMER_REPORTING_CODE'

,G_PKG_NAME
)
)
)
)
OR
( cv_party_type NOT IN
(PARTY_TYPE_SUPPLIER,PARTY_TYPE_CUSTOMER)
)
)
AND (EXISTS
(SELECT 1
FROM jai_tax_rule_lines b
,hz_geographies geo -- added by
zhiwei.xin for bug#21101685
WHERE a.tax_rule_id = b.tax_rule_id
AND tax_determination_basis =
'SHIP_FROM'
-- commented out by zhiwei.xin for
bug#21101685
--AND (TAX_DETERMINATION_VALUE =
cv_ship_from_state
-- OR TAX_DETERMINATION_VALUE IS
NULL)
-- added by zhiwei.xin for
bug#21101685 begin
AND ((
--b.TAX_DETERMINATION_VALUE =
geo.GEOGRAPHY_CODE AND
instr(b.tax_determination_value
,geo.geography_code) > 0
--mani for rule process changes
AND geo.geography_name =
cv_ship_from_state AND
geo.geography_type = 'STATE' AND
geo.geography_element1_code = 'IN') OR
b.tax_determination_value IS NULL)
-- added by zhiwei.xin for bug#21101685
end.
/* Commented out by Wenqiong for removing
date range in tax rule line.
AND NVL( b.effective_from, SYSDATE - 1 ) <=
SYSDATE
AND NVL( b.effective_to, SYSDATE + 1 ) >=
SYSDATE*/
) OR EXISTS (SELECT 1
FROM jai_tax_rule_lines b2
WHERE a.tax_rule_id = b2.tax_rule_id
AND b2.tax_determination_basis =
'SHIP_FROM'
--AND b2.TAX_DETERMINATION_VALUE
='OTHERS'
AND instr(b2.tax_determination_value
,'OTHERS') > 0 --mani for rule
process changes
AND (b2.country = cv_ship_from_country
OR b2.country IS NULL)
/* Commented out by Wenqiong for removing
date range in tax rule line.
AND NVL( b2.effective_from, SYSDATE - 1 )
<= SYSDATE
AND NVL( b2.effective_to, SYSDATE + 1 ) >=
SYSDATE*/
)

OR NOT EXISTS (SELECT 1


FROM jai_tax_rule_lines b1
WHERE a.tax_rule_id = b1.tax_rule_id
AND b1.tax_determination_basis =
'SHIP_FROM'
/* Commented out by Wenqiong for removing
date range in tax rule line.
AND NVL( b1.effective_from, SYSDATE - 1 )
<= SYSDATE
AND NVL( b1.effective_to, SYSDATE + 1 ) >=
SYSDATE*/
)

)
AND (EXISTS
(SELECT 1
FROM jai_tax_rule_lines c
,hz_geographies geo -- added by
zhiwei.xin for bug#21101685
WHERE a.tax_rule_id = c.tax_rule_id
--AND c.tax_determination_basis =
'SHIP_TO' -- commented by Chris due to ER#26559416
AND c.tax_determination_basis =
decode(cn_application_id, '275', 'PA_SHIP_TO', 'SHIP_TO')--Added by Chris due to
ER#26559416
-- commented out by zhiwei.xin for
bug#21101685
-- AND (c.TAX_DETERMINATION_VALUE =
cv_ship_to_state
-- OR c.TAX_DETERMINATION_VALUE
IS NULL)
-- added by zhiwei.xin for
bug#21101685 begin
AND ((
--c.TAX_DETERMINATION_VALUE =
geo.GEOGRAPHY_CODE AND
instr(c.tax_determination_value
,geo.geography_code) > 0
--mani for rule process changes
AND geo.geography_name =
cv_ship_to_state AND
geo.geography_type = 'STATE' AND
geo.geography_element1_code = 'IN') OR
c.tax_determination_value IS NULL)
-- added by zhiwei.xin for bug#21101685
end.
/* Commented out by Wenqiong for removing
date range in tax rule line.
AND NVL( c.effective_from, SYSDATE - 1 ) <=
SYSDATE
AND NVL( c.effective_to, SYSDATE + 1 ) >=
SYSDATE*/
) OR EXISTS (SELECT 1
FROM jai_tax_rule_lines c2
WHERE a.tax_rule_id = c2.tax_rule_id
--AND c2.tax_determination_basis =
'SHIP_TO' -- commented by Chris due to ER#26559416
AND c2.tax_determination_basis =
decode(cn_application_id, '275', 'PA_SHIP_TO', 'SHIP_TO')--Added by Chris due to
ER#26559416
--AND c2.TAX_DETERMINATION_VALUE
='OTHERS'
AND instr(c2.tax_determination_value
,'OTHERS') > 0 --mani for rule
process changes
AND (c2.country = cv_ship_to_country OR
c2.country IS NULL)
/* Commented out by Wenqiong for removing
date range in tax rule line.
AND NVL( c2.effective_from, SYSDATE - 1 )
<= SYSDATE
AND NVL( c2.effective_to, SYSDATE + 1 ) >=
SYSDATE*/
) OR NOT EXISTS (SELECT 1
FROM jai_tax_rule_lines c1
WHERE a.tax_rule_id = c1.tax_rule_id
--AND tax_determination_basis =
'SHIP_TO' -- commented by Chris due to ER#26559416
--AND tax_determination_basis =
decode(cn_application_id, '275', 'PA_SHIP_TO', 'SHIP_TO')--Added by Chris due to
ER#26559416
AND tax_determination_basis IN
('PA_SHIP_TO', 'SHIP_TO')--COMMENTED ABOVE AND ADDED BY MANI FOR BUG 27963227
/* Commented out by Wenqiong for removing
date range in tax rule line.
AND NVL( c1.effective_from, SYSDATE - 1 )
<= SYSDATE
AND NVL( c1.effective_to, SYSDATE + 1 ) >=
SYSDATE*/
))

--added by mani for bug 26030089


AND (EXISTS
(SELECT 1
FROM jai_tax_rule_lines c
,hz_geographies geo -- added by
zhiwei.xin for bug#21101685
WHERE a.tax_rule_id = c.tax_rule_id
--AND c.tax_determination_basis =
'BILL_TO' -- commented by Chris due to ER#26559416
AND c.tax_determination_basis =
decode(cn_application_id, '275', 'PA_BILL_TO', 'BILL_TO')--Added by Chris due to
ER#26559416
-- commented out by zhiwei.xin for
bug#21101685
-- AND (c.TAX_DETERMINATION_VALUE =
cv_ship_to_state
-- OR c.TAX_DETERMINATION_VALUE
IS NULL)
-- added by zhiwei.xin for
bug#21101685 begin
AND ((
--c.TAX_DETERMINATION_VALUE =
geo.GEOGRAPHY_CODE
instr(c.tax_determination_value
,geo.geography_code) > 0
--mani for rule process changes
AND geo.geography_name =
cv_bill_to_state AND
geo.geography_type = 'STATE' AND
geo.geography_element1_code = 'IN') OR
c.tax_determination_value IS NULL)
-- added by zhiwei.xin for bug#21101685
end.
/* Commented out by Wenqiong for removing
date range in tax rule line.
AND NVL( c.effective_from, SYSDATE - 1 ) <=
SYSDATE
AND NVL( c.effective_to, SYSDATE + 1 ) >=
SYSDATE*/
) OR EXISTS (SELECT 1
FROM jai_tax_rule_lines c2
WHERE a.tax_rule_id = c2.tax_rule_id
--AND c2.tax_determination_basis =
'BILL_TO' -- commented by Chris due to ER#26559416
AND c2.tax_determination_basis =
decode(cn_application_id, '275', 'PA_BILL_TO', 'BILL_TO')--Added by Chris due to
ER#26559416
--AND c2.TAX_DETERMINATION_VALUE
='OTHERS'
AND instr(c2.tax_determination_value
,'OTHERS') > 0 --mani for rule
process changes
AND (c2.country = cv_bill_to_country OR
c2.country IS NULL)
/* Commented out by Wenqiong for removing
date range in tax rule line.
AND NVL( c2.effective_from, SYSDATE - 1 )
<= SYSDATE
AND NVL( c2.effective_to, SYSDATE + 1 ) >=
SYSDATE*/
) OR NOT EXISTS (SELECT 1
FROM jai_tax_rule_lines c1
WHERE a.tax_rule_id = c1.tax_rule_id
--AND c1.tax_determination_basis =
'BILL_TO' -- commented by Chris due to ER#26559416
--AND c1.tax_determination_basis =
decode(cn_application_id, '275', 'PA_BILL_TO', 'BILL_TO')--Added by Chris due to
ER#26559416
AND
c1.tax_determination_basis IN ('PA_BILL_TO', 'BILL_TO')--COMMENTED ABOVE AND ADDED
BY MANI FOR BUG 27963227
/* Commented out by Wenqiong for removing
date range in tax rule line.
AND NVL( c1.effective_from, SYSDATE - 1 )
<= SYSDATE
AND NVL( c1.effective_to, SYSDATE + 1 ) >=
SYSDATE*/
))

--added by mani for bug 26030089


-- added by zhiwei.xin for GST changes begin
AND (EXISTS (SELECT 1
FROM jai_tax_rule_lines rule
,jai_party_regs reg
,jai_party_reg_lines line
WHERE a.tax_rule_id = rule.tax_rule_id
--AND rule.tax_determination_basis =
'FP_REG_NUM' -- commented by Chris due to ER#26559416
AND rule.tax_determination_basis =
decode(cn_application_id, '275', 'PA_FP_REG_NUM', 'FP_REG_NUM')--Added by Chris due
to ER#26559416
AND rule.tax_determination_value =
line.registration_number
--commented by mani for bug 26410566.
--NVL(line.REGISTRATION_NUMBER,
line.SECONDARY_REGISTRATION_NUMBER)
AND line.party_reg_id = reg.party_reg_id
/*added decode of party_type_code
condition for bug#23169078*/
AND reg.party_id =
decode(reg.party_type_code
,'OU'
,pn_org_id

,cn_organization_id)
AND nvl(reg.party_site_id
,-1) = decode(reg.party_type_code
,'OU'

,nvl(reg.party_site_id
,-1)
,nvl(cn_location_id
,-1))
AND reg.party_type_code IN ('IO'
,'OU')) OR
NOT EXISTS
(SELECT 1
FROM jai_tax_rule_lines rule
WHERE a.tax_rule_id = rule.tax_rule_id
--AND rule.tax_determination_basis =
'FP_REG_NUM' -- commented by Chris due to ER#26559416
--AND rule.tax_determination_basis =
decode(cn_application_id, '275', 'PA_FP_REG_NUM', 'FP_REG_NUM')--Added by Chris due
to ER#26559416
AND
rule.tax_determination_basis IN ('PA_FP_REG_NUM', 'FP_REG_NUM')--COMMENTED ABOVE
AND ADDED BY MANI FOR BUG 27963227
))
AND (EXISTS
(SELECT 1
FROM jai_tax_rule_lines rule
,jai_party_regs reg
,jai_party_reg_lines line
WHERE a.tax_rule_id = rule.tax_rule_id
--AND rule.tax_determination_basis =
'TP_REG_NUM' -- commented by Chris due to ER#26559416
AND rule.tax_determination_basis =
decode(cn_application_id, '275', 'PA_TP_REG_NUM', 'TP_REG_NUM')--Added by Chris due
to ER#26559416
AND rule.tax_determination_value =
line.registration_number
--commented by mani for bug 26410566.
--NVL(line.REGISTRATION_NUMBER,
line.SECONDARY_REGISTRATION_NUMBER)
AND line.party_reg_id = reg.party_reg_id
AND reg.party_id = cn_party_id
AND nvl(reg.party_site_id
,-1) = nvl(cn_party_site_id
,-1)
AND ((cv_party_type =
PARTY_TYPE_INVENTORY AND
reg.party_type_code IN ('IO'
,'OU')) OR
(cv_party_type IN
(PARTY_TYPE_SUPPLIER

,PARTY_TYPE_CUSTOMER) AND
reg.party_type_code IN ('THIRD_PARTY'
,'THIRD_PAR
TY_SITE')))) OR NOT EXISTS
(SELECT 1
FROM jai_tax_rule_lines rule
WHERE a.tax_rule_id = rule.tax_rule_id
--AND rule.tax_determination_basis =
'TP_REG_NUM' -- commented by Chris due to ER#26559416
--AND rule.tax_determination_basis =
decode(cn_application_id, '275', 'PA_TP_REG_NUM', 'TP_REG_NUM')--Added by Chris due
to ER#26559416
AND rule.tax_determination_basis IN
('PA_TP_REG_NUM', 'TP_REG_NUM')--COMMENTED ABOVE AND ADDED BY MANI FOR BUG 27963227
))
-- added by zhiwei.xin for GST changes end.
AND (EXISTS (SELECT 1
FROM jai_tax_rule_lines d
WHERE a.tax_rule_id = d.tax_rule_id
AND d.tax_determination_basis =
'ITEM_CLASSIFICATION'
AND (d.tax_determination_value =
cv_item_classfication OR
d.tax_determination_value IS NULL)
/* Commented out by Wenqiong for removing
date range in tax rule line.
AND NVL( d.effective_from, SYSDATE - 1 ) <=
SYSDATE
AND NVL( d.effective_to, SYSDATE + 1 ) >=
SYSDATE*/
) OR NOT EXISTS (SELECT 1
FROM jai_tax_rule_lines d1
WHERE a.tax_rule_id = d1.tax_rule_id
AND d1.tax_determination_basis =
'ITEM_CLASSIFICATION'
/* Commented out by Wenqiong for removing
date range in tax rule line.
AND NVL( d1.effective_from, SYSDATE - 1 )
<= SYSDATE
AND NVL( d1.effective_to, SYSDATE + 1 ) >=
SYSDATE*/
)

)
AND (EXISTS (SELECT 1
FROM jai_tax_rule_lines e
WHERE a.tax_rule_id = e.tax_rule_id
AND e.tax_determination_basis =
'ITEM_REPORTING_CODE'
AND ((cn_item_report_code_id IS NOT NULL
AND
e.tax_determination_value =
to_char(cn_item_report_code_id)) OR
e.tax_determination_value IS NULL)
/* Commented out by Wenqiong for removing
date range in tax rule line.
AND NVL( e.effective_from, SYSDATE - 1 ) <=
SYSDATE
AND NVL( e.effective_to, SYSDATE + 1 ) >=
SYSDATE*/
) OR NOT EXISTS (SELECT 1
FROM jai_tax_rule_lines e1
WHERE a.tax_rule_id = e1.tax_rule_id
AND e1.tax_determination_basis =
'ITEM_REPORTING_CODE'
/* Commented out by Wenqiong for removing
date range in tax rule line.
AND NVL( e1.effective_from, SYSDATE - 1 )
<= SYSDATE
AND NVL( e1.effective_to, SYSDATE + 1 ) >=
SYSDATE*/
)

)
--added by mani for bug 26104459
AND (EXISTS
(SELECT 1
FROM jai_tax_rule_lines e
WHERE a.tax_rule_id = e.tax_rule_id
--AND e.tax_determination_basis =
'FP_REPORTING_CODE' -- commented by Chris due to ER#26559416
AND e.tax_determination_basis =
decode(cn_application_id, '275', 'PA_FP_REPORTING_CODE', 'FP_REPORTING_CODE')--
Added by Chris due to ER#26559416
AND ((cn_first_party_report_code_id IS
NOT NULL AND
e.tax_determination_value =
to_char(cn_first_party_report_code_id)) OR
e.tax_determination_value IS NULL))
OR NOT EXISTS
(SELECT 1
FROM jai_tax_rule_lines e1
WHERE a.tax_rule_id = e1.tax_rule_id
--AND e1.tax_determination_basis =
'FP_REPORTING_CODE' -- commented by Chris due to ER#26559416
--AND e1.tax_determination_basis =
decode(cn_application_id, '275', 'PA_FP_REPORTING_CODE', 'FP_REPORTING_CODE')--
Added by Chris due to ER#26559416
AND e1.tax_determination_basis IN
('PA_FP_REPORTING_CODE', 'FP_REPORTING_CODE')--COMMENTED ABOVE AND ADDED BY MANI
FOR BUG 27963227
)

)
--added by mani for bug 26104459

AND (EXISTS
(SELECT 1
FROM jai_tax_rule_lines f
WHERE a.tax_rule_id = f.tax_rule_id
AND f.tax_determination_basis =
DECODE(cn_application_id,
'275','PA_CUSTOMER_REPORTING_CODE', decode(cv_party_type
,PARTY_TYPE_SUPPLIER
,'SUPPLIER_REPORTING_CODE'
,PARTY_TYPE_CUSTOMER
,'CUSTOMER_REPORTING_CODE'))
--decode to PA_CUSTOMER_REPORTING_CODE if application_id =275
----Added by Chris due to
ER#26559416
AND ((cn_third_party_report_code_id IS
NOT NULL AND
f.tax_determination_value =
to_char(cn_third_party_report_code_id)) OR
f.tax_determination_value IS NULL)

/* Commented out by Wenqiong for removing


date range in tax rule line.
AND NVL( f.effective_from, SYSDATE - 1 ) <=
SYSDATE
AND NVL( f.effective_to, SYSDATE + 1 ) >=
SYSDATE*/
) OR NOT EXISTS (SELECT 1
FROM jai_tax_rule_lines f1
WHERE a.tax_rule_id = f1.tax_rule_id
/*AND f1.tax_determination_basis =
DECODE(cn_application_id,
'275','PA_CUSTOMER_REPORTING_CODE', decode(cv_party_type
,PARTY_TYPE_SUPPLIER
,'SUPPLIER_REPORTING_CODE'
,PARTY_TYPE_CUSTOMER
,'CUSTOMER_REPORTING_CODE')
) --decode to
PA_CUSTOMER_REPORTING_CODE if application_id =275*/
AND
f1.tax_determination_basis in (
'PA_CUSTOMER_REPORTING_CODE',
decode(cv_party_type
,PARTY_TYPE_SUPPLIER
,'SUPPLIER_REPORTING_CODE'
,PARTY_TYPE_CUSTOMER
,'CUSTOMER_REPORTING_CODE'))-
-COMMENTED ABOVE AND ADDED BY MANI FOR BUG 27963227
----Added by Chris due to
ER#26559416
/* Commented out by Wenqiong for removing
date range in tax rule line.
AND NVL( f1.effective_from, SYSDATE - 1 )
<= SYSDATE
AND NVL( f1.effective_to, SYSDATE + 1 ) >=
SYSDATE*/
)

)
--Added by Junjian for Application Tax Rule
begin
AND (EXISTS (SELECT 1
FROM jai_tax_rule_lines g
WHERE a.tax_rule_id = g.tax_rule_id
AND g.tax_determination_basis =
'APPLICATION'
--TO_CHAR REMOVED BY MANI AS IT IS
ALREADY CONVERTED
--TO CHAR ABOVE AS PART OF BUG
26452519
AND ((g.tax_determination_value =
cn_application_id
--to_char(cn_application_id))
) OR g.tax_determination_value IS
NULL)
AND (g.country = cv_app_code || '_' ||
cv_trx_type OR g.country IS NULL)) OR
NOT EXISTS (SELECT 1
FROM jai_tax_rule_lines g1
WHERE a.tax_rule_id = g1.tax_rule_id
AND g1.tax_determination_basis =
'APPLICATION'))
--Added by Junjian for Application Tax Rule
end
--todo: may need add 1st party reporting code
condition
/* Bug#18032985 start,added for project
invoices. */
AND (EXISTS (SELECT 1
FROM jai_tax_rule_lines g
WHERE a.tax_rule_id = g.tax_rule_id
AND g.tax_determination_basis =
'PA_DIST_RULE'
AND ((g.tax_determination_value =
cv_pa_distribution_rule) OR
g.tax_determination_value IS NULL))
OR NOT EXISTS
(SELECT 1
FROM jai_tax_rule_lines g1
WHERE a.tax_rule_id = g1.tax_rule_id
AND g1.tax_determination_basis =
'PA_DIST_RULE')

)
/* Bug#25655604, dejiang.liu/20170322. Remove
duplicate logic. */
/*
AND (EXISTS (SELECT 1 FROM
JAI_TAX_RULE_LINES g
WHERE a.tax_rule_id = g.tax_rule_id
AND g.TAX_DETERMINATION_BASIS
='PA_EVENT_TYPE'
AND ( (g.TAX_DETERMINATION_VALUE =
to_char(cn_pa_event_type))
OR g.TAX_DETERMINATION_VALUE IS
NULL
)
)
OR NOT EXISTS (SELECT 1 FROM
JAI_TAX_RULE_LINES g1
WHERE a.tax_rule_id = g1.tax_rule_id
AND g1.TAX_DETERMINATION_BASIS
='PA_EVENT_TYPE'
)

)
*/
AND (EXISTS (SELECT 1
FROM jai_tax_rule_lines g
WHERE a.tax_rule_id = g.tax_rule_id
AND g.tax_determination_basis =
'PA_EVENT_TYPE'
AND ((g.tax_determination_value =
to_char(cn_pa_event_type)) OR
g.tax_determination_value IS NULL))
OR NOT EXISTS
(SELECT 1
FROM jai_tax_rule_lines g1
WHERE a.tax_rule_id = g1.tax_rule_id
AND g1.tax_determination_basis =
'PA_EVENT_TYPE')

)
AND (EXISTS (SELECT 1
FROM jai_tax_rule_lines g
WHERE a.tax_rule_id = g.tax_rule_id
AND g.tax_determination_basis =
'PA_EXPEND_TYPE'
AND ((g.tax_determination_value =
to_char(cn_pa_expenditure_type)) OR
g.tax_determination_value IS NULL))
OR NOT EXISTS
(SELECT 1
FROM jai_tax_rule_lines g1
WHERE a.tax_rule_id = g1.tax_rule_id
AND g1.tax_determination_basis =
'PA_EXPEND_TYPE')

)
AND (EXISTS (SELECT 1
FROM jai_tax_rule_lines g
WHERE a.tax_rule_id = g.tax_rule_id
AND g.tax_determination_basis =
'PA_PRJ_NUMBER'
AND ((g.tax_determination_value =
to_char(cn_pa_project_id)) OR
g.tax_determination_value IS NULL))
OR NOT EXISTS
(SELECT 1
FROM jai_tax_rule_lines g1
WHERE a.tax_rule_id = g1.tax_rule_id
AND g1.tax_determination_basis =
'PA_PRJ_NUMBER')

)
/* Bug#18032985 end. */

)
GROUP BY rule_line.tax_rule_id) x
,jai_tax_rules tr
WHERE x.rank = 1
AND x.tax_rule_id = tr.tax_rule_id
ORDER BY tr.precedence_level ASC --Update by Qinglei for
bug#18463754 on 16-Apr-2014
) max_prec_level
WHERE rownum = 1;

-- bug 27027302
CURSOR c_tax_rule_perf
(
cv_ship_from_state VARCHAR2
,cv_ship_from_country VARCHAR2
,cv_ship_to_state VARCHAR2
,cv_ship_to_country VARCHAR2
,cv_bill_to_state VARCHAR2
,cv_bill_to_country VARCHAR2
,cv_item_classfication VARCHAR2
,cn_item_report_code_id NUMBER
,cn_first_party_report_code_id NUMBER
,cn_third_party_report_code_id NUMBER
,cv_party_type VARCHAR2
,cn_party_id NUMBER
,cn_party_site_id NUMBER
,cn_organization_id NUMBER
,cn_location_id NUMBER
,cv_trx_type VARCHAR2
,cn_application_id VARCHAR2
,cv_app_code VARCHAR2
,cv_pa_distribution_rule VARCHAR2
,cn_pa_event_type NUMBER
,cn_pa_expenditure_type NUMBER
,cn_pa_project_id NUMBER
) IS
SELECT tax_rule.tax_rule_id, tax_rule.tax_category_id,
tax_rule.precedence_level
,(CASE WHEN a.tax_determination_basis IS NULL
THEN 0
ELSE decode(a.tax_determination_value, NULL, 1, 'OTHERS',
decode(a.country, NULL, 1, 2), 2) END
+
CASE WHEN b.tax_determination_basis IS NULL
THEN 0
ELSE decode(b.tax_determination_value, NULL, 1, 'OTHERS',
decode(b.country, NULL, 1, 2), 2) END
+
CASE WHEN c.tax_determination_basis IS NULL
THEN 0
ELSE decode(c.tax_determination_value, NULL, 1, 'OTHERS',
decode(c.country, NULL, 1, 2), 2) END
+
CASE WHEN d.tax_determination_basis IS NULL
THEN 0
ELSE decode(d.tax_determination_value, NULL, 1, 'OTHERS',
decode(d.country, NULL, 1, 2), 2) END
+
CASE WHEN e.tax_determination_basis IS NULL
THEN 0
ELSE decode(e.tax_determination_value, NULL, 1, 'OTHERS',
decode(e.country, NULL, 1, 2), 2) END
+
CASE WHEN f.tax_determination_basis IS NULL
THEN 0
ELSE decode(f.tax_determination_value, NULL, 1, 'OTHERS',
decode(f.country, NULL, 1, 2), 2) END
+
CASE WHEN g.tax_determination_basis IS NULL
THEN 0
ELSE decode(g.tax_determination_value, NULL, 1, 'OTHERS',
decode(g.country, NULL, 1, 2), 2) END
+
CASE WHEN h.tax_determination_basis IS NULL OR cv_party_type =
'PARTY_TYPE_INVENTORY'
THEN 0
ELSE decode(h.tax_determination_value, NULL, 1, 'OTHERS',
decode(h.country, NULL, 1, 2), 2) END
+
CASE WHEN i.tax_determination_basis IS NULL OR cv_party_type =
'PARTY_TYPE_SUPPLIER'
THEN 0
ELSE decode(i.tax_determination_value, NULL, 1, 'OTHERS',
decode(i.country, NULL, 1, 2), 2) END
+
CASE WHEN j.tax_determination_basis IS NULL OR cv_party_type =
'PARTY_TYPE_CUSTOMER'
THEN 0
ELSE decode(j.tax_determination_value, NULL, 1, 'OTHERS',
decode(j.country, NULL, 1, 2), 2) END
+
CASE WHEN k.tax_determination_basis IS NULL
THEN 0
ELSE decode(k.tax_determination_value, NULL, 1, 'OTHERS',
decode(k.country, NULL, 1, 2), 2) END
+
CASE WHEN l.tax_determination_basis IS NULL
THEN 0
ELSE decode(l.tax_determination_value, NULL, 1, 'OTHERS',
decode(l.country, NULL, 1, 2), 2) END
+
CASE WHEN m.tax_determination_basis IS NULL
THEN 0
ELSE decode(m.tax_determination_value, NULL, 1, 'OTHERS',
decode(m.country, NULL, 1, 2), 2) END
+
CASE WHEN n.tax_determination_basis IS NULL
THEN 0
ELSE decode(n.tax_determination_value, NULL, 1, 'OTHERS',
decode(n.country, NULL, 1, 2), 2) END
+
CASE WHEN o.tax_determination_basis IS NULL
THEN 0
ELSE decode(o.tax_determination_value, NULL, 1, 'OTHERS',
decode(o.country, NULL, 1, 2), 2) END
) as rule_rank
FROM JAI_TAX_RULES tax_rule
,JAI_TAX_RULE_LINES a
,JAI_TAX_RULE_LINES b
,JAI_TAX_RULE_LINES c
,JAI_TAX_RULE_LINES d
,JAI_TAX_RULE_LINES e
,JAI_TAX_RULE_LINES f
,JAI_TAX_RULE_LINES g
,JAI_TAX_RULE_LINES h
,JAI_TAX_RULE_LINES i
,JAI_TAX_RULE_LINES j
,JAI_TAX_RULE_LINES k
,JAI_TAX_RULE_LINES l
,JAI_TAX_RULE_LINES m
,JAI_TAX_RULE_LINES n
,JAI_TAX_RULE_LINES o
WHERE tax_rule.org_id = pn_org_id
AND nvl(tax_rule.effective_from, SYSDATE - 1) <= SYSDATE
AND nvl(tax_rule.effective_to, SYSDATE + 1) >= SYSDATE
-- bug 26848979
-- when looking for customer, please eliminate supplier rules and viceversa
AND ( ( cv_party_type IN (PARTY_TYPE_SUPPLIER,PARTY_TYPE_CUSTOMER)
AND NOT (EXISTS (select 1
from jai_tax_rule_lines sup1
where sup1.tax_rule_id = a.tax_rule_id
and sup1.tax_determination_basis =
DECODE(cv_party_type, PARTY_TYPE_SUPPLIER,
'CUSTOMER_REPORTING_CODE'
,PARTY_TYPE_CUSTOMER,
'SUPPLIER_REPORTING_CODE'
,G_PKG_NAME
)
)
AND NOT EXISTS
(select 1
from jai_tax_rule_lines sup2
where sup2.tax_rule_id = a.tax_rule_id
AND sup2.tax_determination_basis =
DECODE(cv_party_type, PARTY_TYPE_SUPPLIER,
'SUPPLIER_REPORTING_CODE'
,PARTY_TYPE_CUSTOMER,
'CUSTOMER_REPORTING_CODE'
,G_PKG_NAME
)
)
)
)
OR
( NVL(cv_party_type,G_PKG_NAME) NOT IN
(PARTY_TYPE_SUPPLIER,PARTY_TYPE_CUSTOMER)
)
)
AND tax_rule.tax_rule_id = a.tax_rule_id(+)
AND a.tax_determination_basis(+) = 'SHIP_FROM'
AND ( a.tax_determination_basis IS NULL
OR
( a.tax_determination_basis ='SHIP_FROM'
AND instr(a.tax_determination_value,'OTHERS') > 0
AND (a.country = cv_ship_from_country
OR
a.country IS NULL
)
)
OR
( a.tax_determination_basis = 'SHIP_FROM'
AND ( a.tax_determination_value IS NULL
OR EXISTS (SELECT 1
FROM hz_geographies geo
WHERE instr(a.tax_determination_value,
geo.geography_code) > 0
AND geo.geography_type = 'STATE'
AND geo.geography_element1_code = 'IN'
AND geo.GEOGRAPHY_NAME = cv_ship_from_state
)
)
)
)
and tax_rule.tax_rule_id = b.tax_rule_id(+)
and b.tax_determination_basis(+) = 'SHIP_TO'
AND ( b.tax_determination_basis IS NULL
OR
( b.tax_determination_basis = 'SHIP_TO'
AND instr(b.tax_determination_value,'OTHERS') > 0
AND (b.country = cv_ship_to_country
OR
b.country IS NULL
)
)
OR
( b.tax_determination_basis = 'SHIP_TO'
AND ( b.tax_determination_value IS NULL
OR EXISTS (SELECT 1
FROM hz_geographies geo
WHERE
instr(b.tax_determination_value,geo.geography_code) > 0
AND geo.geography_type = 'STATE'
AND geo.geography_element1_code = 'IN'
AND geo.GEOGRAPHY_NAME = cv_ship_to_state
)
)
)
)
and tax_rule.tax_rule_id = c.tax_rule_id(+)
and c.tax_determination_basis(+) = 'BILL_TO'
AND ( c.tax_determination_basis IS NULL
OR
( c.tax_determination_basis ='BILL_TO'
AND instr(c.tax_determination_value,'OTHERS') > 0
AND (c.country = cv_bill_to_country
OR
c.country IS NULL
)
)
OR
( c.tax_determination_basis = 'BILL_TO'
AND ( c.tax_determination_value IS NULL
OR EXISTS (SELECT 1
FROM hz_geographies geo
WHERE
instr(c.tax_determination_value,geo.geography_code) > 0
AND geo.geography_type = 'STATE'
AND geo.geography_element1_code = 'IN'
AND geo.GEOGRAPHY_NAME = cv_bill_to_state
)
)
)
)
and tax_rule.tax_rule_id = d.tax_rule_id(+)
and d.tax_determination_basis(+) = 'FP_REG_NUM'
AND ( d.tax_determination_basis IS NULL
OR
( d.tax_determination_basis = 'FP_REG_NUM'
AND EXISTS (SELECT 1
FROM JAI_PARTY_REG_LINES line, JAI_PARTY_REGS reg
WHERE line.registration_number =
d.tax_determination_value
AND reg.party_reg_id = line.party_reg_id
AND reg.PARTY_TYPE_CODE IN ('IO', 'OU')
AND reg.PARTY_ID =
decode(reg.PARTY_TYPE_CODE,
'OU', pn_org_id,
cn_organization_id)
AND nvl(reg.PARTY_SITE_ID, -1) =
decode(reg.PARTY_TYPE_CODE,
'OU', nvl(reg.PARTY_SITE_ID, -1),
nvl(cn_location_id, -1))
)
)
)
and tax_rule.tax_rule_id = e.tax_rule_id(+)
and e.tax_determination_basis(+) = 'TP_REG_NUM'
AND ( e.tax_determination_basis IS NULL
OR
( e.tax_determination_basis = 'TP_REG_NUM'
AND cv_party_type IN (PARTY_TYPE_INVENTORY, PARTY_TYPE_SUPPLIER,
PARTY_TYPE_CUSTOMER)
AND EXISTS (SELECT 1
FROM JAI_PARTY_REG_LINES line, JAI_PARTY_REGS reg
WHERE line.registration_number =
e.tax_determination_value
AND line.party_reg_id = reg.party_reg_id
AND reg.PARTY_ID = cn_party_id
AND NVL(reg.party_site_id, -1) = NVL(cn_party_site_id,
-1)
AND (
( cv_party_type = PARTY_TYPE_INVENTORY
AND reg.PARTY_TYPE_CODE IN ('IO', 'OU')
)
OR
( cv_party_type IN (PARTY_TYPE_SUPPLIER,
PARTY_TYPE_CUSTOMER)
AND reg.PARTY_TYPE_CODE IN ('THIRD_PARTY',
'THIRD_PARTY_SITE')
)
)
)
)
)
and tax_rule.tax_rule_id = f.tax_rule_id(+)
and f.tax_determination_basis(+) = 'ITEM_CLASSIFICATION'
AND ( f.tax_determination_basis IS NULL
OR
( f.tax_determination_basis = 'ITEM_CLASSIFICATION'
AND (f.tax_determination_value = cv_item_classfication
OR
f.tax_determination_value IS NULL
)
)
)
and tax_rule.tax_rule_id = g.tax_rule_id(+)
and g.tax_determination_basis(+) = 'ITEM_REPORTING_CODE'
AND ( g.tax_determination_basis IS NULL
OR
( g.tax_determination_basis = 'ITEM_REPORTING_CODE'
AND ( ( cn_item_report_code_id IS NOT NULL
AND g.tax_determination_value = to_char(cn_item_report_code_id)
)
OR
g.tax_determination_value IS NULL
)
)
)
and tax_rule.tax_rule_id = h.tax_rule_id(+)
and h.tax_determination_basis(+) = 'FP_REPORTING_CODE'
AND ( h.tax_determination_basis IS NULL
OR
( h.tax_determination_basis = 'FP_REPORTING_CODE'
AND NVL(cv_party_type,G_PKG_NAME) <> PARTY_TYPE_INVENTORY
AND ( ( cn_first_party_report_code_id IS NOT NULL
AND h.tax_determination_value =
to_char(cn_first_party_report_code_id)
)
OR
h.tax_determination_value IS NULL
)
)
)
and tax_rule.tax_rule_id = i.tax_rule_id(+)
and i.tax_determination_basis(+) = 'CUSTOMER_REPORTING_CODE'
AND ( i.tax_determination_basis IS NULL
OR
( i.tax_determination_basis = 'CUSTOMER_REPORTING_CODE'
AND cv_party_type = PARTY_TYPE_CUSTOMER
AND ( ( cn_third_party_report_code_id IS NOT NULL
AND i.tax_determination_value =
to_char(cn_third_party_report_code_id)
)
OR
i.tax_determination_value IS NULL
)
)
)
and tax_rule.tax_rule_id = j.tax_rule_id(+)
and j.tax_determination_basis(+) = 'SUPPLIER_REPORTING_CODE'
AND ( j.tax_determination_basis IS NULL
OR
( j.tax_determination_basis = 'SUPPLIER_REPORTING_CODE'
AND cv_party_type = PARTY_TYPE_SUPPLIER
AND ( ( cn_third_party_report_code_id IS NOT NULL
AND j.tax_determination_value =
to_char(cn_third_party_report_code_id)
)
OR
j.tax_determination_value IS NULL
)
)
)
and tax_rule.tax_rule_id = k.tax_rule_id(+)
and k.tax_determination_basis(+) = 'APPLICATION'
AND ( k.tax_determination_basis IS NULL
OR
( k.tax_determination_basis = 'APPLICATION'
AND ( k.tax_determination_value = cn_application_id
OR
k.tax_determination_value IS NULL
)
AND ( k.country = cv_app_code||'_'||cv_trx_type
OR
k.country IS NULL
)
)
)
and tax_rule.tax_rule_id = l.tax_rule_id(+)
and l.tax_determination_basis(+) = 'PA_DIST_RULE'
AND ( l.tax_determination_basis IS NULL
OR
( l.tax_determination_basis ='PA_DIST_RULE'
AND (l.tax_determination_value = cv_pa_distribution_rule
OR
l.tax_determination_value IS NULL
)
)
)
and tax_rule.tax_rule_id = m.tax_rule_id(+)
and m.tax_determination_basis(+) = 'PA_EVENT_TYPE'
AND ( m.tax_determination_basis IS NULL
OR
( m.tax_determination_basis ='PA_EVENT_TYPE'
AND ( m.tax_determination_value = to_char(cn_pa_event_type)
OR
m.tax_determination_value IS NULL
)
)
)
and tax_rule.tax_rule_id = n.tax_rule_id(+)
and n.tax_determination_basis(+) = 'PA_EXPEND_TYPE'
AND ( n.tax_determination_basis IS NULL
OR
( n.tax_determination_basis ='PA_EXPEND_TYPE'
AND ( n.tax_determination_value =
to_char(cn_pa_expenditure_type)
OR
n.tax_determination_value IS NULL
)
)
)
and tax_rule.tax_rule_id = o.tax_rule_id(+)
and o.tax_determination_basis(+) = 'PA_PRJ_NUMBER'
AND ( o.tax_determination_basis IS NULL
OR
( o.tax_determination_basis ='PA_PRJ_NUMBER'
AND ( o.tax_determination_value = to_char(cn_pa_project_id)
OR
o.tax_determination_value IS NULL
)
)
)
AND ( a.tax_determination_basis IS NOT NULL
OR
b.tax_determination_basis IS NOT NULL
OR
c.tax_determination_basis IS NOT NULL
OR
d.tax_determination_basis IS NOT NULL
OR
e.tax_determination_basis IS NOT NULL
OR
f.tax_determination_basis IS NOT NULL
OR
g.tax_determination_basis IS NOT NULL
OR
h.tax_determination_basis IS NOT NULL
OR
i.tax_determination_basis IS NOT NULL
OR
j.tax_determination_basis IS NOT NULL
OR
k.tax_determination_basis IS NOT NULL
OR
l.tax_determination_basis IS NOT NULL
OR
m.tax_determination_basis IS NOT NULL
OR
n.tax_determination_basis IS NOT NULL
OR
o.tax_determination_basis IS NOT NULL
)
ORDER BY 4 DESC, 3 ASC
;
-- ER#26559416
CURSOR c_tax_rule_perf_275
(
cv_ship_from_state VARCHAR2
,cv_ship_from_country VARCHAR2
,cv_ship_to_state VARCHAR2
,cv_ship_to_country VARCHAR2
,cv_bill_to_state VARCHAR2
,cv_bill_to_country VARCHAR2
,cv_item_classfication VARCHAR2
,cn_item_report_code_id NUMBER
,cn_first_party_report_code_id NUMBER
,cn_third_party_report_code_id NUMBER
,cv_party_type VARCHAR2
,cn_party_id NUMBER
,cn_party_site_id NUMBER
,cn_organization_id NUMBER
,cn_location_id NUMBER
,cv_trx_type VARCHAR2
,cn_application_id VARCHAR2
,cv_app_code VARCHAR2
,cv_pa_distribution_rule VARCHAR2
,cn_pa_event_type NUMBER
,cn_pa_expenditure_type NUMBER
,cn_pa_project_id NUMBER
) IS
SELECT tax_rule.tax_rule_id, tax_rule.tax_category_id,
tax_rule.precedence_level
,(CASE WHEN a.tax_determination_basis IS NULL
THEN 0
ELSE decode(a.tax_determination_value, NULL, 1, 'OTHERS',
decode(a.country, NULL, 1, 2), 2) END
+
CASE WHEN b.tax_determination_basis IS NULL
THEN 0
ELSE decode(b.tax_determination_value, NULL, 1, 'OTHERS',
decode(b.country, NULL, 1, 2), 2) END
+
CASE WHEN c.tax_determination_basis IS NULL
THEN 0
ELSE decode(c.tax_determination_value, NULL, 1, 'OTHERS',
decode(c.country, NULL, 1, 2), 2) END
+
CASE WHEN d.tax_determination_basis IS NULL
THEN 0
ELSE decode(d.tax_determination_value, NULL, 1, 'OTHERS',
decode(d.country, NULL, 1, 2), 2) END
+
CASE WHEN e.tax_determination_basis IS NULL
THEN 0
ELSE decode(e.tax_determination_value, NULL, 1, 'OTHERS',
decode(e.country, NULL, 1, 2), 2) END
+
CASE WHEN h.tax_determination_basis IS NULL OR cv_party_type =
'PARTY_TYPE_INVENTORY'
THEN 0
ELSE decode(h.tax_determination_value, NULL, 1, 'OTHERS',
decode(h.country, NULL, 1, 2), 2) END
+
CASE WHEN i.tax_determination_basis IS NULL OR cv_party_type =
'PARTY_TYPE_SUPPLIER'
THEN 0
ELSE decode(i.tax_determination_value, NULL, 1, 'OTHERS',
decode(i.country, NULL, 1, 2), 2) END
+
CASE WHEN k.tax_determination_basis IS NULL
THEN 0
ELSE decode(k.tax_determination_value, NULL, 1, 'OTHERS',
decode(k.country, NULL, 1, 2), 2) END
+
CASE WHEN l.tax_determination_basis IS NULL
THEN 0
ELSE decode(l.tax_determination_value, NULL, 1, 'OTHERS',
decode(l.country, NULL, 1, 2), 2) END
+
CASE WHEN m.tax_determination_basis IS NULL
THEN 0
ELSE decode(m.tax_determination_value, NULL, 1, 'OTHERS',
decode(m.country, NULL, 1, 2), 2) END
+
CASE WHEN n.tax_determination_basis IS NULL
THEN 0
ELSE decode(n.tax_determination_value, NULL, 1, 'OTHERS',
decode(n.country, NULL, 1, 2), 2) END
+
CASE WHEN o.tax_determination_basis IS NULL
THEN 0
ELSE decode(o.tax_determination_value, NULL, 1, 'OTHERS',
decode(o.country, NULL, 1, 2), 2) END
) as rule_rank
FROM JAI_TAX_RULES tax_rule
,JAI_TAX_RULE_LINES a
,JAI_TAX_RULE_LINES b
,JAI_TAX_RULE_LINES c
,JAI_TAX_RULE_LINES d
,JAI_TAX_RULE_LINES e
,JAI_TAX_RULE_LINES h
,JAI_TAX_RULE_LINES i
,JAI_TAX_RULE_LINES k
,JAI_TAX_RULE_LINES l
,JAI_TAX_RULE_LINES m
,JAI_TAX_RULE_LINES n
,JAI_TAX_RULE_LINES o
WHERE tax_rule.org_id = pn_org_id
AND nvl(tax_rule.effective_from, SYSDATE - 1) <= SYSDATE
AND nvl(tax_rule.effective_to, SYSDATE + 1) >= SYSDATE
AND tax_rule.tax_rule_id = a.tax_rule_id(+)
AND a.tax_determination_basis(+) = 'SHIP_FROM'
AND ( a.tax_determination_basis IS NULL
OR
( a.tax_determination_basis ='SHIP_FROM'
AND instr(a.tax_determination_value,'OTHERS') > 0
AND (a.country = cv_ship_from_country
OR
a.country IS NULL
)
)
OR
( a.tax_determination_basis = 'SHIP_FROM'
AND ( a.tax_determination_value IS NULL
OR EXISTS (SELECT 1
FROM hz_geographies geo
WHERE instr(a.tax_determination_value,
geo.geography_code) > 0
AND geo.geography_type = 'STATE'
AND geo.geography_element1_code = 'IN'
AND geo.GEOGRAPHY_NAME = cv_ship_from_state
)
)
)
)
and tax_rule.tax_rule_id = b.tax_rule_id(+)
and b.tax_determination_basis(+) = 'PA_SHIP_TO'
AND ( b.tax_determination_basis IS NULL
OR
( b.tax_determination_basis = 'PA_SHIP_TO'
AND instr(b.tax_determination_value,'OTHERS') > 0
AND (b.country = cv_ship_to_country
OR
b.country IS NULL
)
)
OR
( b.tax_determination_basis = 'PA_SHIP_TO'
AND ( b.tax_determination_value IS NULL
OR EXISTS (SELECT 1
FROM hz_geographies geo
WHERE
instr(b.tax_determination_value,geo.geography_code) > 0
AND geo.geography_type = 'STATE'
AND geo.geography_element1_code = 'IN'
AND geo.GEOGRAPHY_NAME = cv_ship_to_state
)
)
)
)
and tax_rule.tax_rule_id = c.tax_rule_id(+)
and c.tax_determination_basis(+) = 'PA_BILL_TO'
AND ( c.tax_determination_basis IS NULL
OR
( c.tax_determination_basis ='PA_BILL_TO'
AND instr(c.tax_determination_value,'OTHERS') > 0
AND (c.country = cv_bill_to_country
OR
c.country IS NULL
)
)
OR
( c.tax_determination_basis = 'PA_BILL_TO'
AND ( c.tax_determination_value IS NULL
OR EXISTS (SELECT 1
FROM hz_geographies geo
WHERE
instr(c.tax_determination_value,geo.geography_code) > 0
AND geo.geography_type = 'STATE'
AND geo.geography_element1_code = 'IN'
AND geo.GEOGRAPHY_NAME = cv_bill_to_state
)
)
)
)
and tax_rule.tax_rule_id = d.tax_rule_id(+)
and d.tax_determination_basis(+) = 'PA_FP_REG_NUM'
AND ( d.tax_determination_basis IS NULL
OR
( d.tax_determination_basis = 'PA_FP_REG_NUM'
AND EXISTS (SELECT 1
FROM JAI_PARTY_REG_LINES line, JAI_PARTY_REGS reg
WHERE line.registration_number =
d.tax_determination_value
AND reg.party_reg_id = line.party_reg_id
AND reg.PARTY_TYPE_CODE IN ('IO', 'OU')
AND reg.PARTY_ID =
decode(reg.PARTY_TYPE_CODE,
'OU', pn_org_id,
cn_organization_id)
AND nvl(reg.PARTY_SITE_ID, -1) =
decode(reg.PARTY_TYPE_CODE,
'OU', nvl(reg.PARTY_SITE_ID, -1),
nvl(cn_location_id, -1))
)
)
)
and tax_rule.tax_rule_id = e.tax_rule_id(+)
and e.tax_determination_basis(+) = 'PA_TP_REG_NUM'
AND ( e.tax_determination_basis IS NULL
OR
( e.tax_determination_basis = 'PA_TP_REG_NUM'
AND cv_party_type IN (PARTY_TYPE_INVENTORY, PARTY_TYPE_SUPPLIER,
PARTY_TYPE_CUSTOMER)
AND EXISTS (SELECT 1
FROM JAI_PARTY_REG_LINES line, JAI_PARTY_REGS reg
WHERE line.registration_number =
e.tax_determination_value
AND line.party_reg_id = reg.party_reg_id
AND reg.PARTY_ID = cn_party_id
AND NVL(reg.party_site_id, -1) = NVL(cn_party_site_id,
-1)
AND (
( cv_party_type = PARTY_TYPE_INVENTORY
AND reg.PARTY_TYPE_CODE IN ('IO', 'OU')
)
OR
( cv_party_type IN (PARTY_TYPE_SUPPLIER,
PARTY_TYPE_CUSTOMER)
AND reg.PARTY_TYPE_CODE IN ('THIRD_PARTY',
'THIRD_PARTY_SITE')
)
)
)
)
)
and tax_rule.tax_rule_id = h.tax_rule_id(+)
and h.tax_determination_basis(+) = 'PA_FP_REPORTING_CODE'
AND ( h.tax_determination_basis IS NULL
OR
( h.tax_determination_basis = 'PA_FP_REPORTING_CODE'
AND NVL(cv_party_type,G_PKG_NAME) <> PARTY_TYPE_INVENTORY
AND ( ( cn_first_party_report_code_id IS NOT NULL
AND h.tax_determination_value =
to_char(cn_first_party_report_code_id)
)
OR
h.tax_determination_value IS NULL
)
)
)
and tax_rule.tax_rule_id = i.tax_rule_id(+)
and i.tax_determination_basis(+) = 'PA_CUSTOMER_REPORTING_CODE'
AND ( i.tax_determination_basis IS NULL
OR
( i.tax_determination_basis = 'PA_CUSTOMER_REPORTING_CODE'
AND cv_party_type = PARTY_TYPE_CUSTOMER
AND ( ( cn_third_party_report_code_id IS NOT NULL
AND i.tax_determination_value =
to_char(cn_third_party_report_code_id)
)
OR
i.tax_determination_value IS NULL
)
)
)
and tax_rule.tax_rule_id = k.tax_rule_id(+)
and k.tax_determination_basis(+) = 'APPLICATION'
AND ( k.tax_determination_basis IS NULL
OR
( k.tax_determination_basis = 'APPLICATION'
AND ( k.tax_determination_value = cn_application_id
OR
k.tax_determination_value IS NULL
)
AND ( k.country = cv_app_code||'_'||cv_trx_type
OR
k.country IS NULL
)
)
)
and tax_rule.tax_rule_id = l.tax_rule_id(+)
and l.tax_determination_basis(+) = 'PA_DIST_RULE'
AND ( l.tax_determination_basis IS NULL
OR
( l.tax_determination_basis ='PA_DIST_RULE'
AND (l.tax_determination_value = cv_pa_distribution_rule
OR
l.tax_determination_value IS NULL
)
)
)
and tax_rule.tax_rule_id = m.tax_rule_id(+)
and m.tax_determination_basis(+) = 'PA_EVENT_TYPE'
AND ( m.tax_determination_basis IS NULL
OR
( m.tax_determination_basis ='PA_EVENT_TYPE'
AND ( m.tax_determination_value = to_char(cn_pa_event_type)
OR
m.tax_determination_value IS NULL
)
)
)
and tax_rule.tax_rule_id = n.tax_rule_id(+)
and n.tax_determination_basis(+) = 'PA_EXPEND_TYPE'
AND ( n.tax_determination_basis IS NULL
OR
( n.tax_determination_basis ='PA_EXPEND_TYPE'
AND ( n.tax_determination_value =
to_char(cn_pa_expenditure_type)
OR
n.tax_determination_value IS NULL
)
)
)
and tax_rule.tax_rule_id = o.tax_rule_id(+)
and o.tax_determination_basis(+) = 'PA_PRJ_NUMBER'
AND ( o.tax_determination_basis IS NULL
OR
( o.tax_determination_basis ='PA_PRJ_NUMBER'
AND ( o.tax_determination_value = to_char(cn_pa_project_id)
OR
o.tax_determination_value IS NULL
)
)
)
AND ( a.tax_determination_basis IS NOT NULL
OR
b.tax_determination_basis IS NOT NULL
OR
c.tax_determination_basis IS NOT NULL
OR
d.tax_determination_basis IS NOT NULL
OR
e.tax_determination_basis IS NOT NULL
OR
h.tax_determination_basis IS NOT NULL
OR
i.tax_determination_basis IS NOT NULL
OR
k.tax_determination_basis IS NOT NULL
OR
l.tax_determination_basis IS NOT NULL
OR
m.tax_determination_basis IS NOT NULL
OR
n.tax_determination_basis IS NOT NULL
OR
o.tax_determination_basis IS NOT NULL
)
ORDER BY 4 DESC, 3 ASC
;

--Added by Junjian for Application Tax Rule begin


CURSOR c_app_code(cn_application_id NUMBER) IS
SELECT application_short_name
FROM fnd_application
WHERE application_id = cn_application_id;

lv_app_code VARCHAR2(30);
--Added by Junjian for Application Tax Rule end

/* Bug#18032985, add for project invoices to get project info. */


CURSOR c_pa_info IS
SELECT ev.project_id
,p.distribution_rule
,et.event_type_id
,NULL expenditure_type_id
FROM pa_draft_invoice_items i
,pa_projects_all p
,pa_events ev
,pa_event_types et
,jai_tax_det_factors jtdf
WHERE i.project_id = p.project_id
AND ev.project_id(+) = i.project_id
AND ev.event_num(+) = i.event_num
AND nvl(ev.task_id(+)
,0) = nvl(i.event_task_id
,0)
AND ev.event_type = et.event_type
AND i.project_id = jtdf.trx_loc_line_id
AND i.draft_invoice_num = jtdf.trx_number
AND i.line_num = jtdf.trx_line_number
AND jtdf.trx_id = pn_trx_id
AND jtdf.trx_line_id = pn_trx_line_id
/* Bug#25655604, dejiang.liu/20170322. Add entity code for projects. */
AND jtdf.application_id = 275
UNION ----Addition starts due to bug#26543045
SELECT i.project_id -- ev.project_id
,p.distribution_rule
,et.event_type_id
,NULL expenditure_type_id
FROM pa_draft_invoice_items i
,pa_projects_all p
,pa_event_types et
,jai_tax_det_factors jtdf
WHERE i.project_id = p.project_id
AND et.event_type(+) = i.text
AND i.project_id = jtdf.trx_loc_line_id
AND i.draft_invoice_num = jtdf.trx_number
AND i.line_num = jtdf.trx_line_number
AND jtdf.trx_id = pn_trx_id
AND jtdf.trx_line_id = pn_trx_line_id
AND jtdf.application_id = 275 -- to fetch project info for non-event lines
; --Addition ends due to bug#26543045

rec_pa_info c_pa_info%ROWTYPE;

lv_api_name CONSTANT VARCHAR2(50) := 'determine_tax_by_tax_rule';


ln_tax_rule_id jai_tax_rules.tax_rule_id%TYPE;
ln_tax_category_id jai_tax_rules.tax_category_id%TYPE;
l_precedence_level NUMBER;
l_rule_rank NUMBER;
l_use_perf_query NUMBER;

-- added by zhiwei.xin for bug#21354361 begin


CURSOR c_3rd_party_regs
(
cp_party_type VARCHAR2
,cp_party_id NUMBER
,cp_party_site_id NUMBER
) IS
SELECT invoice_tax_category_id
FROM jai_party_regs
WHERE party_type_code IN ('THIRD_PARTY'
,'THIRD_PARTY_SITE')
AND supplier_flag = decode(cp_party_type
,PARTY_TYPE_SUPPLIER
,'Y'
,'N')
AND customer_flag = decode(cp_party_type
,PARTY_TYPE_CUSTOMER
,'Y'
,'N')
AND party_id = cp_party_id
AND nvl(party_site_id
,-1) = nvl(cp_party_site_id
,-1);
-- added by zhiwei.xin for bug#21354361 end.

-- Added By Rishin for bug#26448163 start


/*CURSOR cur_validate_tax_category_id
(
cn_item_id NUMBER
,cn_organization_id NUMBER
,cn_trx_date DATE
) IS
SELECT b.tax_category_id
FROM jai_item_templ_hdr a
,jai_tax_categories b
WHERE a.item_classification = b.item_class_code
AND a.inventory_item_id = cn_item_id
AND a.organization_id = cn_organization_id
AND b.org_id = pn_org_id
AND nvl(b.effective_from
,SYSDATE -1 ) <= trunc(cn_trx_date)
AND nvl(b.effective_to
,SYSDATE +1) >= trunc(cn_trx_date);*/--commented by mani

CURSOR cur_validate_tax_category_id (
cn_tax_category_id number,
cn_trx_date date
) is
select tax_category_id from jai_tax_categories JTG
where jtg.tax_category_id=cn_tax_category_id
AND nvl(jtg.effective_from
,SYSDATE -1 ) <= trunc(cn_trx_date)
-- AND nvl(jtg.effective_to
-- ,SYSDATE +1) >= trunc(cn_trx_date); --commented by chris due to
bug 27160692
AND nvl(jtg.effective_to, to_date('4712/12/31', 'YYYY/MM/DD')) >=
trunc(cn_trx_date);
-- added by chris to replace sysdate+1 with 4712/12/31, as future date as
invoice date is regular practice for PA invoices due to bug 27160692
-- Added By Rishin for bug#26448163 end
------ Added By Rishin for Bug#26767049(start) ---------------
CURSOR c_1st_party_reporting_code
(
cn_organization_id NUMBER
,cn_location_id NUMBER
,cn_party_reg_id IN NUMBER
) IS
SELECT rep_ass.reporting_code_id
FROM jai_party_regs reg
,jai_reporting_associations rep_ass
,jai_reporting_types rep_type
WHERE rep_ass.reporting_type_id = rep_type.reporting_type_id
AND reg.party_reg_id = cn_party_reg_id
AND (rep_ass.entity_code = 'FIRST_PARTY'
AND rep_ass.entity_id = reg.party_reg_id)
AND rep_type.reporting_usage = 'TD' --Tax Determination
AND nvl(rep_ass.effective_from
,SYSDATE - 1) <= SYSDATE
AND nvl(rep_ass.effective_to
,SYSDATE + 1) >= SYSDATE
AND nvl(rep_type.effective_from
,SYSDATE - 1) <= SYSDATE
AND nvl(rep_type.effective_to
,SYSDATE + 1) >= SYSDATE;
------ Added By Rishin for Bug#26767049(end) ---------------

lv_application_id VARCHAR2(50); --ADDED BY MANI FOR BUG 26452519


lv_val_tax_category_id NUMBER; -- added by rishin for bug#26448163
ln_party_reg_id NUMBER; -- Added By Rishin for Bug#26767049

BEGIN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----Begin----' || '()+');
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Input parameter:pn_application_id,' || pn_application_id ||
',pv_entity_code:' || pv_entity_code ||
',pv_event_class_code:' || pv_event_class_code || 'pn_org_id:'
|| pn_org_id || ',pn_trx_id:' ||
pn_trx_id || ',pn_trx_line_id:' || pn_trx_line_id ||
'pn_trx_loc_line_id:' || pn_trx_loc_line_id ||
'pv_trx_level_type:' || pv_trx_level_type);
END IF;
pv_process_status := FND_API.G_RET_STS_SUCCESS;

--Group by
SHIP_FROM_COUNTRY,SHIP_FROM_STATE,SHIP_TO_COUNTRY,SHIP_TO_STATE,ITEM_CLASSIFICATION
, ITEM REPORT code id, party report code id
-- which are the det factors for rule basis.
FOR rec_line_det_factors IN c_line_det_factors LOOP
--Initialize variables at the begining of LOOP
ln_tax_rule_id := NULL;
ln_tax_category_id := NULL;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
, 'pn_application_id:' || pn_application_id ||
',pv_entity_code:' || pv_entity_code ||
'pv_event_class_code:' || pv_event_class_code ||
'pn_trx_id:' || pn_trx_id ||
'SHIP_FROM_STATE:' || rec_line_det_factors.ship_from_state
|| 'SHIP_FROM_COUNTRY:' ||
rec_line_det_factors.ship_from_country || 'SHIP_TO_STATE:'
||
rec_line_det_factors.ship_to_state || 'SHIP_TO_COUNTRY:' ||
rec_line_det_factors.ship_to_country || 'BILL_TO_STATE:' ||
rec_line_det_factors.bill_to_state ||
'BILL_TO_COUNTRY:' || rec_line_det_factors.bill_to_country
|| 'ITEM_CLASSIFICATION:' ||
rec_line_det_factors.item_classification ||
'item_report_code_id:' ||
rec_line_det_factors.item_report_code_id ||
'first_party_report_code_id:' ||
rec_line_det_factors.first_party_report_code_id ||
'third_party_report_code_id:' ||
rec_line_det_factors.third_party_report_code_id ||
'party_type:' ||
rec_line_det_factors.party_type
-- added by zhiwei.xin for GST changes begin
|| 'party_id:' || rec_line_det_factors.party_id ||
'party_site_id:' ||
rec_line_det_factors.party_site_id || 'organization_id:' ||
rec_line_det_factors.organization_id || 'location_id:' ||
rec_line_det_factors.location_id
-- added by zhiwei.xin for GST changes end.
|| 'pn_trx_line_id:' || pn_trx_line_id ||
'trx_loc_line_id:' || pn_trx_loc_line_id ||
'trx_type:' || rec_line_det_factors.trx_type --Added by
Junjian for Application Tax Rule
|| 'pn_trx_loc_line_id:' || pn_trx_loc_line_id);
END IF;

----------------------------- Added By Rishin for Bug#26767049(Start)


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

/* ----------------------------------------------------------------------+
| Get first party's reporting code with type of determination |
+ ----------------------------------------------------------------------*/
IF (rec_line_det_factors.first_party_report_code_id is NULL AND pv_entity_code =
'TRANSACTIONS' ) THEN
IF nvl(rec_line_det_factors.organization_id , 0) > 0 THEN
ln_party_reg_id := NULL;

ln_party_reg_id := get_fp_matched_id(p_organization_id =>


rec_line_det_factors.organization_id
,p_location_id =>
rec_line_det_factors.location_id
,p_org_id => pn_org_id
,p_regime_type => 'T'
,p_regime_id => NULL);

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'ln_party_Reg_id retrieved is ' || ln_party_reg_id);
END IF;

OPEN c_1st_party_reporting_code(rec_line_det_factors.organization_id
,rec_line_det_factors.location_id
,ln_party_reg_id);
FETCH c_1st_party_reporting_code
INTO rec_line_det_factors.first_party_report_code_id;
CLOSE c_1st_party_reporting_code;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN

FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Retrive determine tax type report code for 1st party as
first_party_report_code_id:' ||
rec_line_det_factors.first_party_report_code_id);
END IF;

END IF;

END IF;
----------------------------- Added By Rishin for Bug#26767049(End)
------------------

--Added by Junjian for Application Tax Rule begin


OPEN c_app_code(pn_application_id);
FETCH c_app_code
INTO lv_app_code;
CLOSE c_app_code;
--Added by Junjian for Application Tax Rule end

/* Bug#18032985, added project invoices info. */


OPEN c_pa_info;
FETCH c_pa_info
INTO rec_pa_info;
CLOSE c_pa_info;

----Addition starts due to bug#26543045


IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'rec_pa_info.project_id=' || rec_pa_info.project_id || ',
rec_pa_info.event_type_id=:' ||
rec_pa_info.event_type_id);
END IF;

----Addition ends due to bug#26543045

/* Bug#25760740 start, dejiang.liu/20170322. Add logic to use override item


reporting code and third party reporting code. */
-- Get item report code ID for tax determination.
l_item_report_code_id :=NULL ;--27921405
OPEN c_item_report_code_id(rec_line_det_factors.item_id
,rec_line_det_factors.organization_id);
FETCH c_item_report_code_id
INTO l_item_report_code_id;
CLOSE c_item_report_code_id;
l_third_party_report_code_id :=NULL ; --27921405
-- Get third party report code ID for tax determination.
OPEN c_third_party_report_code_id(rec_line_det_factors.party_id
,rec_line_det_factors.party_site_id
,rec_line_det_factors.party_type);
FETCH c_third_party_report_code_id
INTO l_third_party_report_code_id;
CLOSE c_third_party_report_code_id;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Actual item_report_code_id=' || l_item_report_code_id || ',
third_party_report_code_id=:' ||
l_third_party_report_code_id);
END IF;
/* Bug#25760740 end. */

--FROM HERE ADDED BY MANI FOR BUG 26452519

IF pn_application_id = 707 THEN


--1--RECEIVING

IF pv_entity_code = 'SALES_ORDER_ISSUE' --PICK RELEASE OR SHIP CONFIRM


/*CONSIDER RULE WITH APPLICATON NAME AS Order Management*/
THEN
--2
lv_application_id := '660,707';

ELSIF pv_entity_code = 'RCV_TRANSACTION'


/*CONSIDER RULE WITH APPLICATON NAME AS Purchasing*/
THEN
lv_application_id := '201,707';

ELSIF pv_entity_code = 'MTL_TRANSACTION' --Inter Org Transfer


THEN

lv_application_id := '401,707';

ELSE

lv_application_id := to_char(pn_application_id);

END IF; --2

ELSIF pn_application_id = 201 THEN

lv_application_id := '201,707';

ELSIF pn_application_id = 660 THEN

lv_application_id := '660,707';

ELSIF pn_application_id = 401 THEN

lv_application_id := '401,707';

ELSE

lv_application_id := to_char(pn_application_id);
END IF; --1
IF (G_LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_STATEMENT
,G_MODULE_NAME || lv_api_name
,'before opening tax rule application_id=' ||
lv_application_id);
END IF;
--UPTO HERE ADDED BY MANI FOR BUG 26452519

-- BUG 27027302
-- use the existing query of perf query based on the below seeded setup
SELECT COUNT(*)
INTO l_use_perf_query
FROM jai_reporting_types a, jai_reporting_codes b
WHERE a.reporting_type_code = 'JAI_INTERNAL_PERF'
AND a.reporting_type_id = b.reporting_type_id
AND b.reporting_code = 'RULES'
AND b.effective_to IS NULL;

IF l_use_perf_query = 0 THEN

OPEN c_tax_rule(rec_line_det_factors.ship_from_state
,rec_line_det_factors.ship_from_country
,rec_line_det_factors.ship_to_state
,rec_line_det_factors.ship_to_country
,rec_line_det_factors.bill_to_state
,rec_line_det_factors.bill_to_country
--added by mani for bug 26030089
,rec_line_det_factors.item_classification
/* Bug#25760740, dejiang.liu/20170322. Use override item
report code ID. */
--rec_line_det_factors.item_report_code_id,
,l_item_report_code_id
,rec_line_det_factors.first_party_report_code_id
/* Bug#25760740, dejiang.liu/20170322. Use override third
party report code ID. */
--rec_line_det_factors.third_party_report_code_id,
,l_third_party_report_code_id
,rec_line_det_factors.party_type
-- added by zhiwei.xin for GST Changes begin
,rec_line_det_factors.party_id
,rec_line_det_factors.party_site_id
,rec_line_det_factors.organization_id
,rec_line_det_factors.location_id
-- added by zhiwei.xin for GST Changes end.
--Added by Junjian for Application Tax Rule begin
,rec_line_det_factors.trx_type
--pn_application_id,
,lv_application_id
--MODIFIED BY MANI FOR BUG 26452519
,lv_app_code
--Added by Junjian for Application Tax Rule end
/* Bug#18032985 start, added for project invoices. */
,rec_pa_info.distribution_rule
,rec_pa_info.event_type_id
,rec_pa_info.expenditure_type_id
,rec_pa_info.project_id
/* Bug#18032985 end. */);
FETCH c_tax_rule
INTO ln_tax_rule_id
,ln_tax_category_id;
CLOSE c_tax_rule;

ELSE -- l_use_perf_query = 0
-- ER#26559416 using different cursor for PA
IF lv_application_id = '275' THEN
OPEN c_tax_rule_perf_275
(rec_line_det_factors.ship_from_state
,rec_line_det_factors.ship_from_country
,rec_line_det_factors.ship_to_state
,rec_line_det_factors.ship_to_country
,rec_line_det_factors.bill_to_state
,rec_line_det_factors.bill_to_country
,rec_line_det_factors.item_classification
,l_item_report_code_id
,rec_line_det_factors.first_party_report_code_id
,l_third_party_report_code_id
,rec_line_det_factors.party_type
,rec_line_det_factors.party_id
,rec_line_det_factors.party_site_id
,rec_line_det_factors.organization_id
,rec_line_det_factors.location_id
,rec_line_det_factors.trx_type
,lv_application_id
,lv_app_code
,rec_pa_info.distribution_rule
,rec_pa_info.event_type_id
,rec_pa_info.expenditure_type_id
,rec_pa_info.project_id
);
FETCH c_tax_rule_perf_275
INTO ln_tax_rule_id
,ln_tax_category_id
,l_precedence_level
,l_rule_rank;
CLOSE c_tax_rule_perf_275;
ELSE
OPEN c_tax_rule_perf
(rec_line_det_factors.ship_from_state
,rec_line_det_factors.ship_from_country
,rec_line_det_factors.ship_to_state
,rec_line_det_factors.ship_to_country
,rec_line_det_factors.bill_to_state
,rec_line_det_factors.bill_to_country
,rec_line_det_factors.item_classification
,l_item_report_code_id
,rec_line_det_factors.first_party_report_code_id
,l_third_party_report_code_id
,rec_line_det_factors.party_type
,rec_line_det_factors.party_id
,rec_line_det_factors.party_site_id
,rec_line_det_factors.organization_id
,rec_line_det_factors.location_id
,rec_line_det_factors.trx_type
,lv_application_id
,lv_app_code
,rec_pa_info.distribution_rule
,rec_pa_info.event_type_id
,rec_pa_info.expenditure_type_id
,rec_pa_info.project_id
);
FETCH c_tax_rule_perf
INTO ln_tax_rule_id
,ln_tax_category_id
,l_precedence_level
,l_rule_rank;
CLOSE c_tax_rule_perf;
END IF;

END IF; -- l_use_perf_query = 0

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Rule picked up is: Rule id:' || ln_tax_rule_id ||
': Category_id:' || ln_tax_category_id ||
': Precedence Level:' || l_precedence_level ||
': Rule Line Rank:' || l_rule_rank
);
END IF;

-- added by zhiwei.xin for bug#21354361 begin


IF nvl(ln_tax_category_id
,-1) = -1 THEN
IF pn_application_id IN (200
,222)
AND pv_entity_code IN ('AP_INVOICES'
,'TRANSACTIONS')
AND pv_event_class_code IN ('STANDARD INVOICES'
,'INVOICE') THEN
ln_tax_category_id :=NULL ; --27921405
OPEN c_3rd_party_regs(rec_line_det_factors.party_type
,rec_line_det_factors.party_id
,rec_line_det_factors.party_site_id);
FETCH c_3rd_party_regs
INTO ln_tax_category_id;
CLOSE c_3rd_party_regs;
END IF;
END IF;
-- added by zhiwei.xin for bug#21354361 end.

-- added by rishin for bug#26448163 begin


IF nvl(ln_tax_category_id
,-1) <> -1 THEN
lv_val_tax_category_id :=NULL;--27921405
OPEN cur_validate_tax_category_id( ln_tax_category_id
,rec_line_det_factors.trx_date);
FETCH cur_validate_tax_category_id
INTO lv_val_tax_category_id;
IF cur_validate_tax_category_id%NOTFOUND THEN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'Fetched Category ID '||ln_tax_category_id||'
is not Active.');
END IF ;
RETURN;
END IF ;

CLOSE cur_validate_tax_category_id;
-- added by rishin for bug#26448163 end

end if;

IF
NVL(rec_line_det_factors.first_party_report_code_id,0)<>NVL(l_item_report_code_id,0
) AND l_item_report_code_id IS NOT NULL THEN
--if condition added by mani for bug 27350585
----------------- Added By Rishin for Bug#26767049 (Start)
---------------------------
IF (nvl(pv_call_from ,'BASE_TABLE') <> 'INTERFACE' AND
NVL(l_item_report_code_id,-1) <> -1
AND NVL(rec_line_det_factors.first_party_report_code_id,-1) <> -1 )
THEN
UPDATE jai_tax_det_factors
SET item_report_code_id = l_item_report_code_id
,first_party_report_code_id =
rec_line_det_factors.first_party_report_code_id
WHERE application_id = pn_application_id
AND entity_code = pv_entity_code
AND event_class_code = pv_event_class_code
AND tax_determination_basis =
jai_tax_determination_pkg.rule_basis
AND trx_id = pn_trx_id
AND ITEM_ID = rec_line_det_factors.ITEM_ID --added by mani
for bug 27350585
AND ORGANIZATION_ID = rec_line_det_factors.ORGANIZATION_ID
--added by mani for bug 27350585
AND (trx_line_id = nvl(pn_trx_line_id ,trx_line_id) OR
nvl(trx_line_id,-1) = nvl(pn_trx_line_id ,-1))
AND (trx_loc_line_id = nvl(pn_trx_loc_line_id
,trx_loc_line_id)
OR nvl(trx_loc_line_id,-1) = nvl(pn_trx_loc_line_id ,-
1))
AND trx_level_type = nvl(pv_trx_level_type ,trx_level_type);

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Updating First Party Info and Item_code_id. No of
records Updated=' || SQL%ROWCOUNT);
END IF;

END IF ;

----------------- Added By Rishin for Bug#26767049 (End)


---------------------------
END IF;
--IF nvl(ln_tax_rule_id,0) > 0 AND nvl(ln_tax_category_id,0) > 0 THEN --
commented out by zhiwei.xin for bug#21354361
IF nvl(ln_tax_category_id
,-1) <> -1 THEN
-- added by zhiwei.xin for bug#21354361
--Modified by Qinglei for Receiving 09-Jul-2013 begin
IF nvl(pv_call_from
,'BASE_TABLE') <> 'INTERFACE' THEN
UPDATE jai_tax_det_factors
SET default_tax_category_id = ln_tax_category_id
,tax_rule_id = ln_tax_rule_id
WHERE application_id = pn_application_id
AND entity_code = pv_entity_code
AND event_class_code = pv_event_class_code
AND tax_determination_basis = jai_tax_determination_pkg.rule_basis
AND trx_id = pn_trx_id
-- added by zhiwei.xin for GST changes begin
AND nvl(organization_id
,-1) = nvl(rec_line_det_factors.organization_id
,-1)
AND nvl(location_id
,-1) = nvl(rec_line_det_factors.location_id
,-1)
AND nvl(party_type
,'###') = nvl(rec_line_det_factors.party_type
,'###')
AND nvl(party_id
,-1) = nvl(rec_line_det_factors.party_id
,-1)
AND nvl(party_site_id
,-1) = nvl(rec_line_det_factors.party_site_id
,-1)
-- added by zhiwei.xin for GST changes end.
AND nvl(ship_from_state
,'blank') = nvl(rec_line_det_factors.ship_from_state
,nvl(ship_from_state
,'blank'))
AND nvl(ship_to_state
,'blank') = nvl(rec_line_det_factors.ship_to_state
,nvl(ship_to_state
,'blank'))
AND nvl(ship_from_country
,'blank') = nvl(rec_line_det_factors.ship_from_country
,nvl(ship_from_country
,'blank'))
AND nvl(ship_to_country
,'blank') = nvl(rec_line_det_factors.ship_to_country
,nvl(ship_to_country
,'blank'))
AND nvl(item_classification
,'blank') = nvl(rec_line_det_factors.item_classification
,nvl(item_classification
,'blank'))
AND nvl(item_report_code_id
,0) = nvl(rec_line_det_factors.item_report_code_id
,nvl(item_report_code_id
,0))
AND nvl(first_party_report_code_id
,0) = nvl(rec_line_det_factors.first_party_report_code_id
,nvl(first_party_report_code_id
,0))
AND nvl(third_party_report_code_id
,0) = nvl(rec_line_det_factors.third_party_report_code_id
,nvl(third_party_report_code_id
,0))
AND (trx_line_id = nvl(pn_trx_line_id
,trx_line_id) OR
nvl(trx_line_id
,-1) = nvl(pn_trx_line_id
,-1))
AND (trx_loc_line_id = nvl(pn_trx_loc_line_id
,trx_loc_line_id) OR
nvl(trx_loc_line_id
,-1) = nvl(pn_trx_loc_line_id
,-1))
AND trx_level_type = nvl(pv_trx_level_type
,trx_level_type);
ELSE
UPDATE jai_det_factors_interface
SET default_tax_category_id = ln_tax_category_id
,tax_rule_id = ln_tax_rule_id
WHERE /*26399170*/
((pn_trx_line_id IS NOT NULL AND interface_transaction_id =
pn_trx_line_id) OR (pn_trx_line_id IS NULL))
AND interface_trx_hdr_id = pn_trx_id
AND application_id = pn_application_id
AND entity_code = pv_entity_code
AND event_class_code = pv_event_class_code
AND tax_determination_basis = jai_tax_determination_pkg.rule_basis
/*AND interface_trx_hdr_id = pn_trx_id
AND (interface_transaction_id =
nvl(pn_trx_line_id,interface_transaction_id) OR nvl(interface_transaction_id,-1) =
nvl(pn_trx_line_id,-1))*/
AND nvl(ship_from_state
,'blank') = nvl(rec_line_det_factors.ship_from_state
,'blank')
AND nvl(ship_to_state
,'blank') = nvl(rec_line_det_factors.ship_to_state
,'blank')
AND nvl(ship_from_country
,'blank') = nvl(rec_line_det_factors.ship_from_country
,'blank')
AND nvl(ship_to_country
,'blank') = nvl(rec_line_det_factors.ship_to_country
,'blank')
AND nvl(item_classification
,'blank') = nvl(rec_line_det_factors.item_classification
,'blank')
AND nvl(item_report_code_id
,0) = nvl(rec_line_det_factors.item_report_code_id
,0)
AND nvl(first_party_report_code_id
,0) = nvl(rec_line_det_factors.first_party_report_code_id
,0)
AND nvl(third_party_report_code_id
,0) = nvl(rec_line_det_factors.third_party_report_code_id
,0);
END IF;
--Modified by Qinglei for Receiving 09-Jul-2013 end

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'ln_tax_category_id:' || ln_tax_category_id
|| ',ln_tax_rule_id:' ||
ln_tax_rule_id || 'row count of update:' || SQL%ROWCOUNT);
END IF;
ELSE
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'No tax rule/tax category available for this trx line.');
END IF;

END IF;
END LOOP;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
EXCEPTION
WHEN OTHERS THEN
pv_process_status := FND_API.G_RET_STS_UNEXP_ERROR;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,SQLERRM);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;

END determine_tax_by_tax_rule;

/*---------------------------------------------------------------------------------
--------------------------------+
| Created By : Wenqiong Zhou
|
| Creation Date : 10/Apr/2013
|
| Bug Number/ER Name : Phase IV Tax Determination
|
| SubProgram Name : calculate_tax
|
| Type : PROCEDURE
|
| Purpose : This procedure is to calculate tax for every
transaction line /shipment line |
| which taxes attached.
|
| 1.Check if required parameters missing and initialize
some params |
| 2. Validation on tax regime, tax type, tax rate
|
| 3. Convert UOM for UOM based rate, calculate tax amount
for UOM based rate. |
| 4. Apply exception, abatement rule for non UOM based
rate. |
| 5. Currency Conversion and rounding on taxable amt
before actual calculation. |
| 6. Prepare parameters for calcualte_tax_pvt.
|
| 7. Currency Conversion after actual calculation.
|
| 8. calculated recoverable /non-recoverable tax amount.
|
|
|
| TDD Reference : Section 6.14
|
| Assumptions :
|
| Called From : called by determine_tax, recalculate_tax_wrapper, and
apply btn in tax detail UI, |

|----------------------------------------------------------------------------------
-------------------------------|
| parameters IN/OUT Type Required
Description and Purpose |
| ------------ -------- ------ ----------
------------------------- |
| p_tax_lines_tbl IN/OUT TAX_LINES_TBL yes Tax
Lines Table type |
| pv_process_status OUT VARCHAR2 yes Process
status |
| pv_process_message OUT VARCHAR2 yes Process
message |

*----------------------------------------------------------------------------------
--------------------------------*/
PROCEDURE calculate_tax
(
p_tax_lines_tbl IN OUT NOCOPY tax_lines_tbl
,pv_call_from IN VARCHAR2 DEFAULT NULL --Added by Qinglei for Receiving
,pv_process_status OUT NOCOPY VARCHAR2
,pv_process_message OUT NOCOPY VARCHAR2
) IS
lv_call_from VARCHAR2(100); --Added by sunzheng bug#26105490
--Added by Wenqiong for intended use impact recovery amount begin
CURSOR c_det_factor(cn_det_factor_id NUMBER) IS
SELECT intended_use
/*start additions by vkaranam for bug#27441146*/
,eway_bill_num
,eway_bill_date
, eway_bill_acceptance_flaG
,item_classification
,tax_confirmed_flag
/* --Added by Wenqiong for Exemption 20140409 begin
,exemption_type
,bond_num
--Added by Wenqiong for Exemption 20140409 end*/
,record_type_code -- added by zhiwei.xin for AP Open Interface
,applied_to_trx_id --Added by Junjian for bug#18729209
,party_id --Added by Junjian for bug#19018333
,party_site_id --Added by Junjian for bug#19018333
,TRX_UOM_CODE --AELLURU 27331963
,cancel_flag --AELLURU 27773358
FROM jai_tax_det_factors
WHERE det_factor_id = cn_det_factor_id
AND nvl(lv_call_from
,'BASE') <> 'INTERFACE'
UNION
SELECT intended_use
/*start additions by vkaranam for bug#27441146*/
,eway_bill_num
,eway_bill_date
, eway_bill_acceptance_flaG
,item_classification
,tax_confirmed_flag
/* --Added by Wenqiong for Exemption 20140409 begin
,NULL exemption_type
,NULL bond_num
--Added by Wenqiong for Exemption 20140409 end*/
,record_type_code -- added by zhiwei.xin for AP Open Interface
,applied_to_trx_id --Added by Junjian for bug#18729209
,party_id --Added by Junjian for bug#19018333
,party_site_id --Added by Junjian for bug#19018333
,TRX_UOM_CODE --AELLURU 27331963
,NULL --AELLURU 27773358
FROM jai_det_factors_interface
WHERE interface_det_factor_id = cn_det_factor_id
AND lv_call_from = 'INTERFACE';
--Added by Wenqiong for intended use impact recovery amount end
l_modifier_exists NUMBER :=0 ;--26523740
ln_TRX_UOM_CODE JAI_TAX_DET_FACTORS.TRX_UOM_CODE%TYPE ; --AELLURU
27331963
l_cancel_flag JAI_TAX_DET_FACTORS.cancel_flag%TYPE ; --27331963
--Added by Zhhou for ATO 20140214 begin
CURSOR chk_config_item
(
cn_organization_id NUMBER
,cn_item_id NUMBER
) IS
SELECT 1
FROM mtl_system_items_b
WHERE organization_id = cn_organization_id
AND inventory_item_id = cn_item_id
AND auto_created_config_flag = 'Y';

CURSOR get_model_item
(
cn_trx_id NUMBER
,cn_trx_line_id NUMBER
,cn_org_id NUMBER
,cn_organization_id NUMBER
,cn_location_id NUMBER
,cv_tax_event_class_code VARCHAR2
,cv_tax_event_type_code VARCHAR2
) IS
SELECT DISTINCT (item_id)
FROM jai_tax_det_factors
WHERE trx_id = cn_trx_id
AND trx_line_id = cn_trx_line_id
AND org_id = cn_org_id
AND organization_id = cn_organization_id
AND location_id = cn_location_id
AND tax_event_class_code = cv_tax_event_class_code
AND tax_event_type_code = cv_tax_event_type_code;

CURSOR get_basis(cn_det_factor_id NUMBER) IS


SELECT 1
FROM jai_tax_det_factors
WHERE det_factor_id = cn_det_factor_id
AND tax_determination_basis = 'COPY_BASIS';

ln_copy_flag NUMBER;
ln_config_item NUMBER;
ln_model_item_id NUMBER;
ln_use_item_id NUMBER;

--Added by Zhhou for ATO 20140214 end

--Added by Wenqiong for Exemption 20140409 begin


/*CURSOR c_exemption_hdr_id (cn_org_id NUMBER
, cn_regime_id NUMBER
, cv_first_party_reg_type VARCHAR2
, cv_first_party_reg_num VARCHAR2
, cv_EXEMPTION_TYPE VARCHAR2
, cv_bond_num VARCHAR2
, cn_tax_type_id NUMBER
) IS
SELECT
jeh.exemption_hdr_id
FROM JAI_EXEMPTION_HDRS jeh
WHERE jeh.tax_regime_id= cn_regime_id
AND jeh.org_id = cn_org_id
AND jeh.registration_type_code = cv_first_party_reg_type
AND jeh.REGISTRATION_NUM = cv_first_party_reg_num
AND jeh.EXEMPTION_TYPE = cv_EXEMPTION_TYPE
AND nvl(jeh.bond_num,'X') = nvl(cv_bond_num,nvl(jeh.bond_num,'X'))
AND EXISTS (SELECT 1 FROM JAI_EXEMPTION_LINES jel
WHERE jel.EXEMPTION_HDR_ID = jeh.EXEMPTION_HDR_ID
AND jel.tax_type_id = cn_tax_type_id
AND NVL( jel.effective_from, SYSDATE - 1) <= SYSDATE
AND NVL( jel.effective_to, SYSDATE + 1) >= SYSDATE);
lv_exemption_type VARCHAR2(50);
lv_bond_num VARCHAR2(50);*/
ln_exemption_hdr_id NUMBER;
--Added by Wenqiong for Exemption 20140409 begin

rec_jai_tax_line jai_tax_lines%ROWTYPE;
l_pvt_tax_line_tbl pvt_tax_line_rec_type;
l_precedence_rec precedence_rec_type;
lv_independency_flag VARCHAR2(1) := 'N';
ln_uom_conversion_rate NUMBER;
ln_uom_converted_qty NUMBER;
ln_rounded_quantity NUMBER;
lv_tax_rate_type jai_tax_lines.tax_rate_type%TYPE;
lv_regime_return_status VARCHAR2(30);
lv_tax_type_return_status VARCHAR2(30);
lv_tax_rate_return_status VARCHAR2(30);
ln_assessable_price NUMBER;
ln_func_assessable_price NUMBER;
ln_func_assessable_value NUMBER;
ln_func_line_amt NUMBER;
ln_rounded_assessable_value NUMBER;
ln_rounded_line_amt NUMBER;
lv_process_status VARCHAR2(30);
lv_process_message VARCHAR2(150);
ln_actual_line_amt NUMBER;
ln_actual_rate NUMBER;
ln_quantity NUMBER;
ln_trx_curr_conv_rate NUMBER;
ln_tax_curr_conv_rate NUMBER;

--start additions by vkaranam for bug#28040022


cursor get_price_list_currency(cp_ASSESSABLE_PRICE_LIST_ID in number)
is
select
currency_code
FROM qp_list_headers_VL
WHERE list_header_id = CP_ASSESSABLE_PRICE_LIST_ID
AND nvl(active_flag,'N') = 'Y';

lv_price_list_currency_code varchar2(100);
--end additions by vkaranam for bug#28040022

--Added by Wenqiong for intended use impact recovery amount begin


lv_intended_use VARCHAR2(30);
LV_eway_bill_num jai_tax_det_factors.eway_bill_num%TYPE;
LV_eway_bill_date jai_tax_det_factors.eway_bill_date%TYPE;
LV_eway_bill_acceptance_flaG jai_tax_det_factors.eway_bill_acceptance_flag%TYPE;
--27441146
lv_item_class VARCHAR2(30);
ln_det_factor_id NUMBER;
lv_tax_confirmed_flag VARCHAR2(1);
--Added by Wenqiong for intended use impact recovery amount end
lv_tradding_flag VARCHAR2(5); --Added by Junjian for Trading
lv_inclusive_flag VARCHAR2(1); --Add by Junjian for Advance receipt use.
lv_boe_flag VARCHAR2(1); --Added by Junjian for bug#18729209
ln_applied_to_trx_id NUMBER; --Added by Junjian for bug#18729209
ln_det_party_id NUMBER; --Added by Junjian for bug#19018333
ln_det_party_site_id NUMBER; --Added by Junjian for bug#19018333
ln_cost_method NUMBER; --Added for bug#19171934 20140912
lv_processed_flag VARCHAR2(1);
l_source_uom JAI_TAX_DET_FACTORS.TRX_UOM_CODE%TYPE :=NULL;--27610308
lv_api_name CONSTANT VARCHAR2(50) := 'calculate_tax';

lv_iso_flag VARCHAR2(1); --Added by Qinglei for bug#19909334

lv_record_type_code jai_tax_det_factors.record_type_code%TYPE; -- added by


zhiwei.xin for AP Open Interface

lv_apply_flag VARCHAR2(1) := 'N'; --Added by sunzheng bug#26105490

/*Added by Qinglei for bug#20090376 begin*/


CURSOR c_ra_cust_trx_type(pn_trx_id NUMBER) IS
SELECT rctta.type
FROM ra_customer_trx_all rcta
,ra_cust_trx_types_all rctta
WHERE customer_trx_id = pn_trx_id
AND rcta.cust_trx_type_id = rctta.cust_trx_type_id;
lv_ra_cust_type VARCHAR2(50);
/*Added by Qinglei for bug#20090376 end*/
--Added by Junjian for bug#20476394 begin
CURSOR c_settle_count
(
cn_tax_rate_id NUMBER
,cn_trx_id NUMBER
,cn_trx_line_id NUMBER
,cv_entity_code VARCHAR2
) IS
SELECT COUNT(1)
FROM jai_rgm_recovery_lines rgm
WHERE EXISTS (SELECT 'X'
FROM jai_tax_lines tax
WHERE rgm.entity_code = tax.entity_code
AND rgm.document_id = tax.trx_id
AND rgm.document_line_id = tax.trx_line_id
AND rgm.tax_rate_id = tax.tax_rate_id
AND rgm.tax_rate_id = cn_tax_rate_id
AND rgm.document_id = cn_trx_id
AND rgm.document_line_id = cn_trx_line_id
AND rgm.entity_code = cv_entity_code)
AND settlement_id IS NOT NULL
AND liability_amount IS NOT NULL;

CURSOR c_credit_reversal_count(cp_tax_rate_id NUMBER) IS


SELECT COUNT(1)
FROM jai_extension_setups
WHERE setup_for = 'CR'
AND tax_rate_id = cp_tax_rate_id
AND trunc(SYSDATE) BETWEEN trunc(line_effective_from) AND
trunc(nvl(line_effective_to
,SYSDATE));
ln_cred_rev_count NUMBER;
ln_settle_count NUMBER;
--Added by Junjian for bug#20476394 end
BEGIN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----Begin----' || '()+');
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Count of p_tax_lines_tbl:' || p_tax_lines_tbl.count);
END IF;

pv_process_status := FND_API.G_RET_STS_SUCCESS;

/*Added by Sunzheng for bug#26105490 begin*/

IF pv_call_from = 'INTERFACE_APPLY' THEN


lv_call_from := 'INTERFACE';
lv_apply_flag := 'Y';

ELSIF pv_call_from = 'BASE_APPLY' THEN


lv_call_from := 'BASE';
lv_apply_flag := 'Y';

ELSE
lv_call_from := pv_call_from;
lv_apply_flag := 'N';
END IF;

/*Added by Sunzheng for bug#26105490 end*/


/*Added by Qinglei for bug#18395084 begin*/
IF nvl(p_tax_lines_tbl.count
,0) = 0 THEN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Count of p_tax_lines_tbl is 0. Return from
calculate_tax.');
END IF;
RETURN;
END IF;
/*Added by Qinglei for bug#18395084 end*/

--Added by Wenqiong for intended use impact recovery amount begin


ln_det_factor_id := p_tax_lines_tbl(1).det_factor_id;
--Added by Junjian for TCS bug#20057641 begin
determine_tcs_tax(pn_det_factor_id => ln_det_factor_id
,p_tax_lines_tbl => p_tax_lines_tbl
/*Modified by Sunzheng for bug#26105490. Modify to use
lv_call_from.*/
--,pv_call_from => pv_call_from
,pv_call_from => lv_call_from
,pv_process_status => lv_process_status
,pv_process_message => lv_process_message);
IF lv_process_status <> FND_API.G_RET_STS_SUCCESS THEN
pv_process_status := lv_process_status;
pv_process_message := lv_process_message;
RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
END IF;

IF ( p_tax_lines_tbl(1).entity_code = 'TRANSACTIONS'
AND p_tax_lines_tbl(1).application_id = 222
AND p_tax_lines_tbl(1).APPLIED_FROM_TRX_ID IS NOT NULL )THEN

--Caluclate tax for last is not applicable in AR because ,we are copying
--delivery_id and delivery_detail_id of first record so in this case it will be
failed
--As one to one mapping will not be there ,in case of RMA CM also
-- We are populating applied to to RMA Recipet and RMA CM also in this case
also it will failed
-- So by passing this logic 27498614
NULL;

ELSE
--Added by Junjian for TCS bug#20057641 end
--Added by Wenqiong for Rounding issue 19244914 begin
calculate_tax_for_last(pn_det_factor_id => ln_det_factor_id
,p_tax_lines_tbl => p_tax_lines_tbl
/*Modified by Sunzheng for bug#26105490. Modify to use
lv_call_from.*/
--,pv_call_from => pv_call_from
,pv_call_from => lv_call_from
,pv_processed_flag => lv_processed_flag
,pv_process_status => lv_process_status
,pv_process_message => lv_process_message);

IF lv_process_status <> FND_API.G_RET_STS_SUCCESS THEN


pv_process_status := lv_process_status;
pv_process_message := lv_process_message;
RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
END IF;
IF lv_processed_flag = 'Y' THEN
RETURN;
END IF;

END IF ;--27498614
--Added by Wenqiong for Rounding issue 19244914 begin
OPEN c_det_factor(ln_det_factor_id);
FETCH c_det_factor
INTO lv_intended_use
/*start additions by vkaranam for bug#27441146*/
,lv_eway_bill_num
,lv_eway_bill_date
, lv_eway_bill_acceptance_flaG
,lv_item_class
,lv_tax_confirmed_flag
,lv_record_type_code -- added lv_record_type_code for AP Open Interface
,ln_applied_to_trx_id --Modified by Junjian for bug#18729209
--Added by Junjian for bug#19018333 begin
,ln_det_party_id
,ln_det_party_site_id
,ln_TRX_UOM_CODE --AELLURU 27331963
,l_cancel_flag --AELLURU 27773358
--Added by Junjian for bug#19018333 end
;
CLOSE c_det_factor;
--Added by Wenqiong for intended use impact recovery amount end
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'ln_TRX_UOM_CODE' || ln_TRX_UOM_CODE);
END IF;
FOR i IN p_tax_lines_tbl.first .. p_tax_lines_tbl.last LOOP
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'No.' || i || ' record. tax rate is:' ||
p_tax_lines_tbl(i).tax_rate_id);
END IF;

rec_jai_tax_line := p_tax_lines_tbl(i);
jai_tax_determination_pkg.log_tax_line(rec_jai_tax_line);

--AELLURU 27603853
IF rec_jai_tax_line.trx_uom IS NULL
THEN
rec_jai_tax_line.trx_uom := ln_TRX_UOM_CODE ;
END IF;
--AELLURU 27603853

--Check if required parameters missing and initialize some params


jai_tax_determination_pkg.validate_init_tax_line(p_tax_line_rec =>
rec_jai_tax_line
--Modified by Sunzheng for
bug#26105490.
--Modify to use
lv_call_from.
--Added by Qinglei for
Receiving
--,pv_call_from =>
pv_call_from
,pv_call_from =>
lv_call_from
,pv_process_status =>
lv_process_status
,pv_process_message =>
lv_process_message);
IF lv_process_status <> FND_API.G_RET_STS_SUCCESS THEN
pv_process_status := lv_process_status;
pv_process_message := lv_process_message;
RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
END IF;
--Validate if tax regime/type/rate valid.
jai_tax_determination_pkg.validate_tax_regime(pn_tax_regime_id =>
rec_jai_tax_line.tax_regime_id
,pd_tax_point_date =>
rec_jai_tax_line.tax_point_date
,pv_return_status =>
lv_regime_return_status);

jai_tax_determination_pkg.validate_tax_type(pn_tax_type_id =>
rec_jai_tax_line.tax_type_id
,pd_tax_point_date =>
rec_jai_tax_line.tax_point_date
,pv_return_status =>
lv_tax_type_return_status);

jai_tax_determination_pkg.validate_tax_rate(pn_tax_rate_id =>
rec_jai_tax_line.tax_rate_id
,pd_tax_point_date =>
rec_jai_tax_line.tax_point_date
,pv_return_status =>
lv_tax_rate_return_status);

IF lv_regime_return_status = FND_API.G_RET_STS_SUCCESS
AND lv_tax_type_return_status = FND_API.G_RET_STS_SUCCESS
AND lv_tax_rate_return_status = FND_API.G_RET_STS_SUCCESS THEN

--Initialize the variables at the begining.


ln_assessable_price := NULL;
ln_func_assessable_price := NULL;
ln_func_assessable_value := NULL;
ln_func_line_amt := NULL;
ln_rounded_assessable_value := NULL;
ln_rounded_line_amt := NULL;
ln_actual_line_amt := NULL;
ln_actual_rate := NULL;
ln_quantity := NULL;
ln_uom_conversion_rate := NULL;
ln_rounded_quantity := NULL;
ln_trx_curr_conv_rate := 1;
ln_tax_curr_conv_rate := 1;
ln_exemption_hdr_id := NULL; --Added by Wenqiong for exemption.
lv_tax_rate_type := rec_jai_tax_line.tax_rate_type;
ln_quantity := rec_jai_tax_line.trx_line_quantity;
IF lv_tax_rate_type IN ('UNIT_OF_MEASURE'
,'UNIT_OF_MEASURE_ADHOC')
AND nvl(ln_quantity
,0) <> 0 THEN
/*inv_convert.inv_um_conversion(rec_jai_tax_line.trx_uom
,rec_jai_tax_line.tax_rate_uom
,rec_jai_tax_line.item_id
,ln_uom_conversion_rate);*/--AELLURU FOR
UDIT 26621849

--AELLURU For 26621849


ln_uom_conversion_rate :=
JAI_WSH_TAX_DET_PKG.uom_conversion(rec_jai_tax_line.trx_uom,

rec_jai_tax_line.tax_rate_uom,

rec_jai_tax_line.item_id) ;
--AELLURU For 26621849
IF ln_uom_conversion_rate < 0 THEN
pv_process_status := FND_API.G_RET_STS_ERROR;
pv_process_message := 'UOM conversion is not defined for tax line #Sl
No' || rec_jai_tax_line.tax_line_num;
RAISE FND_API.G_EXC_ERROR;
END IF;

ln_uom_converted_qty := ln_quantity * nvl(ln_uom_conversion_rate


,1);

jai_tax_determination_pkg.apply_rounding_rule(rec_jai_tax_line.quantity_rounded_to

,rec_jai_tax_line.quantity_rounding_factor
,ln_uom_converted_qty
,ln_rounded_quantity
,lv_process_status);
rec_jai_tax_line.unrounded_uom_conv_qty := ln_uom_converted_qty;
rec_jai_tax_line.rounded_quantity := ln_rounded_quantity;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'UOM based tax rate: ln_uom_converted_qty' ||
ln_uom_converted_qty ||
',ln_rounded_quantity:' || ln_rounded_quantity);
END IF;
--Modified by Qiong for bug17078570 begin
--IF lv_tax_rate_type = 'UNIT_OF_MEASURE' THEN
IF lv_tax_rate_type IN ('UNIT_OF_MEASURE'
,'UNIT_OF_MEASURE_ADHOC') THEN
--Modified by Qiong for bug17078570 end

-- addition/modify starts by chris due to 26770011


--PA UOM adhoc uom rate can be negative, after importing to AR,
quantity is set as negative
-- needs to set the tax amount to negative
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'before calculate UOM tax amount: ' ||','||
'ln_rounded_quantity= '||ln_rounded_quantity||','||
'rec_jai_tax_line.applied_from_application_id= '||
rec_jai_tax_line.applied_from_application_id||','||
'rec_jai_tax_line.tax_rate_uom_rate= '||
rec_jai_tax_line.tax_rate_uom_rate);
END IF;

if ln_rounded_quantity <0
and rec_jai_tax_line.tax_rate_uom_rate <0
and rec_jai_tax_line.applied_from_application_id = 275 then
rec_jai_tax_line.unround_tax_amt_tax_curr := -1*
( ln_rounded_quantity * rec_jai_tax_line.tax_rate_uom_rate);
else
-- rec_jai_tax_line.unround_tax_amt_fun_curr :=
ln_rounded_quantity * rec_jai_tax_line.tax_rate_uom_rate;
rec_jai_tax_line.unround_tax_amt_tax_curr := ln_rounded_quantity *
rec_jai_tax_line.tax_rate_uom_rate;
/*26710933 changed from functional currency to tax currency */
end if;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'after calculating UOM tax amount: ' ||','||
'rec_jai_tax_line.unround_tax_amt_tax_curr= '||
rec_jai_tax_line.unround_tax_amt_tax_curr);
END IF;

-- addition/modify ends by chris due to 26770011

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'UOM based tax rate: UNROUND_TAX_AMT_FUN_CURR' ||
rec_jai_tax_line.unround_tax_amt_fun_curr);
END IF;
END IF; -- if tax_rate_type = 'UNIT_OF_MEASURE'
lv_independency_flag := 'Y';
ELSIF lv_tax_rate_type IN ('ADHOC_AMOUNT') THEN
lv_independency_flag := 'Y';

-- addition/modify starts by chris due to 26965798


IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'before calculate ADHOC_AMOUNT tax amount: ' ||','||
'ln_quantity= '||ln_quantity||','||
'rec_jai_tax_line.applied_from_application_id= '||
rec_jai_tax_line.applied_from_application_id||','||
'rec_jai_tax_line.event_class_code= '||
rec_jai_tax_line.event_class_code||','||
'rec_jai_tax_line.unround_tax_amt_tax_curr= '||
rec_jai_tax_line.unround_tax_amt_tax_curr);
END IF;
--Addition starts internal bug CM reversal issue 20171026

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'before calculate ADHOC_AMOUNT tax amount: ' ||','||
'rec_jai_tax_line.REF_DOC_APPLICATION_ID = '||
rec_jai_tax_line.REF_DOC_APPLICATION_ID ||','||
'rec_jai_tax_line.REF_DOC_TRX_ID = '||
rec_jai_tax_line.REF_DOC_TRX_ID ||','||
'rec_jai_tax_line.REF_DOC_LINE_ID= '||
rec_jai_tax_line.REF_DOC_LINE_ID||','||
'rec_jai_tax_line.REF_DOC_ENTITY_CODE= '||
rec_jai_tax_line.REF_DOC_ENTITY_CODE);
END IF;

--PA invoice line amount is negative, after importing to AR,


trx_line_quantity is set as -1
-- needs to set the tax amount to negative
if (ln_quantity = -1 --PA AMOUNT IS NEGAGITVE
and rec_jai_tax_line.applied_from_application_id = 275 --'SOURCE= PA'
AND rec_jai_tax_line.entity_code = 'TRANSACTIONS'
AND rec_jai_tax_line.event_class_code IN ('INVOICE', 'CREDIT_MEMO')
) or
(ln_quantity = 1 --PA CM INVOICE
and rec_jai_tax_line.REF_DOC_APPLICATION_ID = 275 --'SOURCE= PA'
AND rec_jai_tax_line.REF_DOC_ENTITY_CODE = 'PROJECTS'
AND rec_jai_tax_line.REF_DOC_EVENT_CLASS_CODE = 'DRAFT INVOICES'
AND rec_jai_tax_line.REF_DOC_TRX_ID IS NOT NULL
AND rec_jai_tax_line.REF_DOC_LINE_ID IS NOT NULL
AND rec_jai_tax_line.REF_DOC_TRX_TYPE = 'STANDARD'
) -- --ENDS 20171026

--ends internal bug CM reversal issue


--20171026 set CM invoice to COPY_BASIS ER#26559416
then

rec_jai_tax_line.unround_tax_amt_tax_curr := -1*
rec_jai_tax_line.unround_tax_amt_tax_curr;

end if;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'after calculating ADHOC_AMOUNT tax amount: ' ||','||
'rec_jai_tax_line.unround_tax_amt_tax_curr= '||
rec_jai_tax_line.unround_tax_amt_tax_curr);
END IF;

-- addition/modify ends by chris due to 26965798

ELSE
--for the cases of non UOM based rate
lv_independency_flag := 'N';
IF rec_jai_tax_line.assessable_price_list_id IS NOT NULL THEN

--Added by zhhou for ATO 20140214 begin


ln_use_item_id := rec_jai_tax_line.item_id;

OPEN get_basis(rec_jai_tax_line.det_factor_id);
FETCH get_basis
INTO ln_copy_flag;
CLOSE get_basis;

ln_copy_flag := nvl(ln_copy_flag
,0);

IF (ln_copy_flag = 1) THEN

OPEN chk_config_item(rec_jai_tax_line.organization_id
,rec_jai_tax_line.item_id);
FETCH chk_config_item
INTO ln_config_item;
CLOSE chk_config_item;

ln_config_item := nvl(ln_config_item
,0);

IF ln_config_item = 1 THEN
OPEN get_model_item(cn_trx_id =>
rec_jai_tax_line.trx_id
,cn_trx_line_id =>
rec_jai_tax_line.applied_from_trx_line_id
,cn_org_id =>
rec_jai_tax_line.org_id
,cn_organization_id =>
rec_jai_tax_line.organization_id
,cn_location_id =>
rec_jai_tax_line.location_id
,cv_tax_event_class_code =>
rec_jai_tax_line.tax_event_class_code
,cv_tax_event_type_code =>
rec_jai_tax_line.tax_event_type_code);
FETCH get_model_item
INTO ln_model_item_id;
CLOSE get_model_item;

ln_use_item_id := ln_model_item_id;

END IF;
END IF;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'ln_use_item_id: ' || ln_use_item_id ||
';ln_copy_flag:' || ln_copy_flag ||
';rec_jai_tax_line.item_id:' ||
rec_jai_tax_line.item_id);
END IF;
--Added by zhhou for ATO 20140214 end
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'rec_jai_tax_line.trx_uom'|| rec_jai_tax_line.trx_uom
||
'ln_TRX_UOM_CODE' || ln_TRX_UOM_CODE);
END IF;
--AELLURU 27331963
IF rec_jai_tax_line.trx_uom IS NULL
THEN
rec_jai_tax_line.trx_uom := ln_TRX_UOM_CODE ;
END IF;
--AELLURU 27331963

jai_tax_determination_pkg.get_assessable_price(pn_assessable_price_list_id =>
rec_jai_tax_line.assessable_price_list_id
,pv_transaction_uom
=> rec_jai_tax_line.trx_uom

--rec_jai_tax_line.item_id --Changed by Zhhou for ATO 20140214


,pn_item_id =>
ln_use_item_id
,pd_trx_date =>
rec_jai_tax_line.trx_date
,pn_assessable_price =>
ln_assessable_price
,pv_process_status =>
lv_process_status);
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'ln_assessable_price: ' || ln_assessable_price);
END IF;
END IF; --for the cases of assessable_price_list_id not null

-- commented out by zhiwei.xin after confirming with PM begin


/*IF nvl(rec_jai_tax_line.tax_rate_classification,'N') <> 'N' THEN

jai_tax_determination_pkg.apply_exception_rules(pv_tax_rate_classification =>

rec_jai_tax_line.tax_rate_classification
,pn_standard_rate =>
rec_jai_tax_line.standard_rate
,pn_actual_rate => ln_actual_rate
,pv_process_status =>
lv_process_status
);--Here ln_actual_rate is int before /100.
IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||lv_api_name
,'ln_actual_rate after apply exception rule:'||
ln_actual_rate);
END IF;
END IF; --for the cases of exception rule setup at tax rate */
-- commented out by zhiwei.xin after confirming with PM end.

IF nvl(rec_jai_tax_line.abatement_flag
,'N') = 'Y' THEN
jai_tax_determination_pkg.apply_abatement_rules(pv_abatement_type
=> rec_jai_tax_line.tax_rate_abatement_type
,pn_abatement_percentage
=> rec_jai_tax_line.abatement_percentage
,pn_item_id
=> rec_jai_tax_line.item_id
,pv_tax_regime_id
=> rec_jai_tax_line.tax_regime_id
,pn_organization_id
=> rec_jai_tax_line.organization_id
,pn_line_amount
=> rec_jai_tax_line.line_amt
,pn_tax_rate_percentage
=> nvl(ln_actual_rate

,rec_jai_tax_line.tax_rate_percentage)
,pn_actual_line_amt
=> ln_actual_line_amt
,pn_actual_tax_rate
=> ln_actual_rate
,pv_process_status
=> lv_process_status);
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'ln_actual_rate after apply abatement rule:' ||
ln_actual_rate);
END IF;

END IF; --for the cases of abatement rule setup at tax rate

END IF; --tax rate is UOM related.

--Added by Wenqiong for Exemption on 20140409 begin


/*IF nvl(lv_exemption_type,'X') <> 'X' THEN
OPEN c_exemption_hdr_id (rec_jai_tax_line.org_id
, rec_jai_tax_line.tax_regime_id
, rec_jai_tax_line.first_party_primary_reg_name
, rec_jai_tax_line.first_party_primary_reg_num
, lv_exemption_type
, lv_bond_num
, rec_jai_tax_line.tax_type_id
);
FETCH c_exemption_hdr_id INTO ln_exemption_hdr_id;
CLOSE c_exemption_hdr_id;
*/
ln_exemption_hdr_id := rec_jai_tax_line.exemption_hdr_id;
IF nvl(ln_exemption_hdr_id
,0) > 0 THEN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Apply exemption with exemption hdr id:' ||
ln_exemption_hdr_id ||
' ,tax_amt_before_exemption:' ||
rec_jai_tax_line.unround_tax_amt_fun_curr);
END IF;
lv_independency_flag := 'Y';
rec_jai_tax_line.tax_amt_before_exemption :=
rec_jai_tax_line.unround_tax_amt_fun_curr;
rec_jai_tax_line.unround_tax_amt_fun_curr := 0;
rec_jai_tax_line.rounded_tax_amt_fun_curr := 0; --Added by Junjian for
bug#18795517

END IF;
/* END IF;
--Added by Wenqiong for Exemption on 20140409 end */
rec_jai_tax_line.actual_tax_rate := nvl(ln_actual_rate
,rec_jai_tax_line.tax_rate_percentage);

l_precedence_rec := NULL;

l_precedence_rec.p(1) := nvl(rec_jai_tax_line.precedence_1
,-1);
l_precedence_rec.p(2) := nvl(rec_jai_tax_line.precedence_2
,-1);
l_precedence_rec.p(3) := nvl(rec_jai_tax_line.precedence_3
,-1);
l_precedence_rec.p(4) := nvl(rec_jai_tax_line.precedence_4
,-1);
l_precedence_rec.p(5) := nvl(rec_jai_tax_line.precedence_5
,-1);
l_precedence_rec.p(6) := nvl(rec_jai_tax_line.precedence_6
,-1);
l_precedence_rec.p(7) := nvl(rec_jai_tax_line.precedence_7
,-1);
l_precedence_rec.p(8) := nvl(rec_jai_tax_line.precedence_8
,-1);
l_precedence_rec.p(9) := nvl(rec_jai_tax_line.precedence_9
,-1);
l_precedence_rec.p(10) := nvl(rec_jai_tax_line.precedence_10
,-1);
l_precedence_rec.p(11) := nvl(rec_jai_tax_line.precedence_11
,-1);
l_precedence_rec.p(12) := nvl(rec_jai_tax_line.precedence_12
,-1);
l_precedence_rec.p(13) := nvl(rec_jai_tax_line.precedence_13
,-1);
l_precedence_rec.p(14) := nvl(rec_jai_tax_line.precedence_14
,-1);
l_precedence_rec.p(15) := nvl(rec_jai_tax_line.precedence_15
,-1);
l_precedence_rec.p(16) := nvl(rec_jai_tax_line.precedence_16
,-1);
l_precedence_rec.p(17) := nvl(rec_jai_tax_line.precedence_17
,-1);
l_precedence_rec.p(18) := nvl(rec_jai_tax_line.precedence_18
,-1);
l_precedence_rec.p(19) := nvl(rec_jai_tax_line.precedence_19
,-1);
l_precedence_rec.p(20) := nvl(rec_jai_tax_line.precedence_20
,-1);

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'after prepare l_precedence_rec, the count of
l_precedence_rec is' ||
l_precedence_rec.p.count);
END IF;
IF rec_jai_tax_line.trx_currency_code <>
rec_jai_tax_line.functional_currency_code THEN

-- Bug 17188478 Begin, add logic for default currency conversion date and
conversion type.
IF rec_jai_tax_line.currency_conversion_date IS NULL THEN
-- Use transaction date as default conversion date if conversion date
is null.
rec_jai_tax_line.currency_conversion_date :=
trunc(rec_jai_tax_line.trx_date);
END IF;

IF rec_jai_tax_line.currency_conversion_type IS NULL THEN


-- Use 'Corporate' as default conversion type is conversion type is
null.
rec_jai_tax_line.currency_conversion_type := 'Corporate';
END IF;
-- Bug 17188478 End.

ln_trx_curr_conv_rate :=
jai_cmn_utils_pkg.currency_conversion(rec_jai_tax_line.ledger_id

,rec_jai_tax_line.trx_currency_code

,rec_jai_tax_line.currency_conversion_date

,rec_jai_tax_line.currency_conversion_type

,rec_jai_tax_line.currency_conversion_rate);
ln_trx_curr_conv_rate := nvl(ln_trx_curr_conv_rate
,1);

-- Bug 17188478, Update conversion rate.


rec_jai_tax_line.currency_conversion_rate := ln_trx_curr_conv_rate;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'ln_trx_curr_conv_rate is' || ln_trx_curr_conv_rate);
END IF;
END IF; -- trx_currency <> func currency
IF rec_jai_tax_line.tax_currency_code <>
rec_jai_tax_line.functional_currency_code THEN

-- Bug 17188478 Begin, add logic for default currency conversion date and
conversion type.
IF rec_jai_tax_line.tax_currency_conversion_date IS NULL THEN
-- Use transaction date as default conversion date if conversion date
is null.
rec_jai_tax_line.tax_currency_conversion_date :=
trunc(rec_jai_tax_line.trx_date);
END IF;

IF rec_jai_tax_line.tax_currency_conversion_type IS NULL THEN


-- Use 'Corporate' as default conversion type is conversion type is
null.
rec_jai_tax_line.tax_currency_conversion_type := 'Corporate';
END IF;
-- Bug 17188478 End.

ln_tax_curr_conv_rate :=
jai_cmn_utils_pkg.currency_conversion(rec_jai_tax_line.ledger_id

,rec_jai_tax_line.tax_currency_code
,rec_jai_tax_line.tax_currency_conversion_date

,rec_jai_tax_line.tax_currency_conversion_type

,rec_jai_tax_line.tax_currency_conversion_rate);
ln_tax_curr_conv_rate := nvl(ln_tax_curr_conv_rate
,1);

-- Bug 17188478, Update conversion rate.


--commented by mani for bug 25501797
--rec_jai_tax_line.tax_currency_conversion_rate :=
rec_jai_tax_line.currency_conversion_rate;
--from here added by mani for 25501797
IF rec_jai_tax_line.entity_code = 'BILL_OF_ENTRY' THEN
rec_jai_tax_line.tax_currency_conversion_rate :=
rec_jai_tax_line.currency_conversion_rate;
--AELLURU 27491890
IF(rec_jai_tax_line.TRX_CURRENCY_CODE = 'INR' and
rec_jai_tax_line.TAX_CURRENCY_CODE<> 'INR')
THEN
rec_jai_tax_line.tax_currency_conversion_rate :=ln_tax_curr_conv_rate;
END IF;
--27491890
ELSIF rec_jai_tax_line.entity_code = 'RCV_TRANSACTION'
AND lv_apply_flag = 'N'
AND nvl(lv_tax_confirmed_flag
,'N') = 'N'
AND rec_jai_tax_line.applied_to_event_class_code <> 'BILL_OF_ENTRY'
THEN --- Condition added by Rishin for Bug26670612
-- Bug 26105490 add zheng,sun 21-jun-2017
rec_jai_tax_line.tax_currency_conversion_rate :=
rec_jai_tax_line.currency_conversion_rate;
ELSE
rec_jai_tax_line.tax_currency_conversion_rate := ln_tax_curr_conv_rate;
END IF;
--upto here added by mani for 25501797

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'ln_tax_curr_conv_rate is' || ln_tax_curr_conv_rate);
END IF;
END IF; -- tax_currency <> func currency
--27610308
IF (rec_jai_tax_line.applied_from_trx_id is not null)
THEN
l_source_uom :=NULL;
BEGIN

SELECT TRX_UOM_CODE
INTO l_source_uom
FROM JAI_TAX_DET_FACTORS
WHERE TRX_LINE_ID =rec_jai_tax_line.applied_from_trx_line_id
AND TRX_ID =rec_jai_tax_line.applied_from_trx_id
AND ENTITY_CODE =rec_jai_tax_line.APPLIED_FROM_ENTITY_CODE
AND NVL(TRX_LOC_LINE_ID,-99) =
NVL(rec_jai_tax_line.APPLIED_FROM_LOC_LINE_ID,-99)
AND TRX_TYPE =rec_jai_tax_line.APPLIED_FROM_TRX_TYPE;
EXCEPTION
WHEN OTHERS
THEN
l_source_uom :=NULL;
END ;
END IF;
--27610308
--Modified by Qinglei for Receiving begin
IF nvl(rec_jai_tax_line.user_entered_av
,0) <> 0 AND (rec_jai_tax_line.ASSESSABLE_PRICE_LIST_ID IS NULL
--27610308
OR (rec_jai_tax_line.ENTITY_CODE = 'RCV_TRANSACTION'
AND rec_jai_tax_line.APPLIED_FROM_ENTITY_CODE IN
('SALES_ORDER_ISSUE','RCV_TRANSACTION', 'OE_ORDER_HEADERS'))
AND NVL(rec_jai_tax_line.TRX_UOM,'-ABC') =NVL(l_source_uom,'-ABC'))
THEN
--27610308
--AELLURU FOR 26033796
--ln_func_assessable_value := rec_jai_tax_line.user_entered_av; --
commented out by zhiwei.xin for bug#19915573
/* Bug#25795858, dejiang.liu/20170522. Modify to make assessable value
take effective. */
-- added out by zhiwei.xin for bug#19915573
--ln_func_assessable_value := rec_jai_tax_line.user_entered_av *
nvl(ln_quantity,0);
ln_func_assessable_value := rec_jai_tax_line.user_entered_av *
nvl(ln_quantity
,1);
ELSE
--start additions by vkaranam for bug#28040022
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME||lv_api_name,'before
checking price list currency for list id '||
rec_jai_tax_line.ASSESSABLE_PRICE_LIST_ID);
open
get_price_list_currency(rec_jai_tax_line.ASSESSABLE_PRICE_LIST_ID);
fetch get_price_list_currency into lv_price_list_currency_code;
close get_price_list_currency;
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME||lv_api_name,'after
checking price list currency code is '||lv_price_list_currency_code);
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME||lv_api_name,'
rec_jai_tax_line.functional_currency_code '||
rec_jai_tax_line.functional_currency_code);
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME||lv_api_name,'
rec_jai_tax_line.tax_currency_code '||rec_jai_tax_line.tax_currency_code);
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME||
lv_api_name,'ln_trx_curr_conv_rate '||ln_trx_curr_conv_rate);

if
lv_price_list_currency_code<>rec_jai_tax_line.functional_currency_code
then

IF nvl(ln_assessable_price
,0) <> 0 THEN
ln_func_assessable_price := ln_assessable_price *
ln_trx_curr_conv_rate;
/* Bug#25795858, dejiang.liu/20170522. Modify to make assessable value
take effective. */
--ln_func_assessable_value := ln_func_assessable_price *
nvl(ln_quantity,0);
ln_func_assessable_value := ln_func_assessable_price * nvl(ln_quantity
,1);

/*jai_tax_determination_pkg.apply_rounding_rule
(rec_jai_tax_line.taxable_rounded_to,
rec_jai_tax_line.taxable_rounding_factor,
ln_func_assessable_value,
ln_rounded_assessable_value,
lv_process_status
);*/
rec_jai_tax_line.line_assessable_value := ln_func_assessable_value;
rec_jai_tax_line.user_entered_av := ln_func_assessable_price; --
added by zhiwei.xin for bug#19915573

END IF; -- ln_assessable_price <> 0


--added else condition for bug#28040022
else

IF nvl(ln_assessable_price
,0) <> 0 THEN
ln_func_assessable_price := ln_assessable_price ;
/* Bug#25795858, dejiang.liu/20170522. Modify to make assessable value
take effective. */
--ln_func_assessable_value := ln_func_assessable_price *
nvl(ln_quantity,0);
ln_func_assessable_value := ln_func_assessable_price * nvl(ln_quantity
,1);

/*jai_tax_determination_pkg.apply_rounding_rule
(rec_jai_tax_line.taxable_rounded_to,
rec_jai_tax_line.taxable_rounding_factor,
ln_func_assessable_value,
ln_rounded_assessable_value,
lv_process_status
);*/
rec_jai_tax_line.line_assessable_value := ln_func_assessable_value;
rec_jai_tax_line.user_entered_av := ln_func_assessable_price; --
added by zhiwei.xin for bug#19915573

END IF; -- ln_assessable_price <> 0


END IF;
end if;--28040022
IF nvl(ln_func_assessable_value
,0) <> 0 THEN

jai_tax_determination_pkg.apply_rounding_rule(rec_jai_tax_line.taxable_rounded_to

,rec_jai_tax_line.taxable_rounding_factor
,ln_func_assessable_value
,ln_rounded_assessable_value
,lv_process_status);

END IF;
--Modified by Qinglei for Receiving end
--AELLURU FOR HITMANKI 26575529
--Modified by Qiong for bug17078570 begin
--IF lv_independency_flag = 'Y' AND
nvl(rec_jai_tax_line.UNROUND_TAX_AMT_TAX_CURR,0) <> 0 THEN
IF lv_tax_rate_type IN
('ADHOC_AMOUNT','UNIT_OF_MEASURE_ADHOC','UNIT_OF_MEASURE')--26925193
AND nvl(rec_jai_tax_line.unround_tax_amt_tax_curr
,0) <> 0
AND nvl(ln_exemption_hdr_id
,-1) = -1 --added by zhiwei.xin for bug#21146625
THEN
--AELLURU FOR 26621849
IF lv_tax_rate_type IN ('ADHOC_AMOUNT')
THEN
rec_jai_tax_line.unround_tax_amt_fun_curr :=
nvl(rec_jai_tax_line.unround_tax_amt_tax_curr
,0) *
ln_tax_curr_conv_rate;
END IF;

IF lv_tax_rate_type IN ('UNIT_OF_MEASURE_ADHOC','UNIT_OF_MEASURE')--
26925193

THEN
rec_jai_tax_line.unround_tax_amt_fun_curr :=
nvl(rec_jai_tax_line.unround_tax_amt_tax_curr
,0) *
ln_tax_curr_conv_rate ;
--26710933 comment uom
rate
END IF;
--AELLURU FOR 26621849

/*---------------------------------------------------------------------------------
--------
In case of price modifer ADHOC TAX IS NOT APPLICABLE,SO Making amount as 0
for calucaltion
later while inserting we are skipping the line

-----------------------------------------------------------------------------------
--------*/

/*26523740 :Start*/
BEGIN
IF rec_jai_tax_line.tax_rate_type IN
('ADHOC_AMOUNT','UNIT_OF_MEASURE_ADHOC','UNIT_OF_MEASURE')--26925193'
AND rec_jai_tax_line.entity_code = 'TRANSACTIONS'
AND rec_jai_tax_line.application_id = 222
--AND rec_jai_tax_line.APPLIED_FROM_ENTITY_CODE = 'SALES_ORDER_ISSUE'
-- AELLURU FOR 26840297
AND rec_jai_tax_line.APPLIED_FROM_TRX_ID IS NOT NULL THEN
BEGIN
l_modifier_exists :=0;
BEGIN
SELECT INTERFACE_LINE_ATTRIBUTE11
INTO l_modifier_exists
FROM RA_CUSTOMER_TRX_LINES_all a,
OE_PRICE_ADJUSTMENTS b
WHERE customer_trx_id =rec_jai_tax_line.TRX_ID
AND b.line_id =a.INTERFACE_LINE_ATTRIBUTE6
AND customer_trx_line_id =
rec_jai_tax_line.TRX_LINE_ID
AND NVL(INTERFACE_LINE_ATTRIBUTE11,0)>0
AND ROWNUM =1;
EXCEPTION
WHEN OTHERS
THEN
l_modifier_exists :=0;
END ;
IF (G_LEVEL_PROCEDURE >=
FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE ,G_MODULE_NAME || lv_api_name
,lv_api_name || 'Inside ADHOC DELIVERY TO AR MODIFIER CASE ,l_modifier_exists :' ||
l_modifier_exists);
FND_LOG.STRING(G_LEVEL_PROCEDURE ,G_MODULE_NAME || lv_api_name
,lv_api_name || 'Tax_rate_type :' || rec_jai_tax_line.tax_rate_type);
END IF;

--Check if modifier is applied on header Visakha changes 27120878


IF NVL(l_modifier_exists,0) =0 THEN
BEGIN
SELECT INTERFACE_LINE_ATTRIBUTE11
INTO l_modifier_exists
FROM RA_CUSTOMER_TRX_LINES_all a,
OE_PRICE_ADJUSTMENTS b,
oe_order_lines_all c
WHERE a.customer_trx_id =rec_jai_tax_line.TRX_ID
AND c.line_id =
a.INTERFACE_LINE_ATTRIBUTE6
AND c.header_id =b.header_id
AND b.line_id IS NULL
AND a.customer_trx_line_id =
rec_jai_tax_line.TRX_LINE_ID
AND NVL(a.INTERFACE_LINE_ATTRIBUTE11,0)>0
AND ROWNUM =1;

IF (G_LEVEL_PROCEDURE >=
FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE ,G_MODULE_NAME || lv_api_name
,lv_api_name || 'Inside ADHOC DELIVERY TO AR MODIFIER HEADER CASE
,l_modifier_exists :' || l_modifier_exists);
END IF;
EXCEPTION
WHEN OTHERS
THEN
l_modifier_exists :=0;
END ;

END IF;
--Check if modifier is applied on header Visakha changes 27120878

IF NVL(l_modifier_exists,0) >0 THEN


IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE ,G_MODULE_NAME || lv_api_name
,lv_api_name || 'In case of price modifiers ADHOC AMOUNT IS NOT APPLICABLE SO NO
INSERTING 0 line');
END IF;
rec_jai_tax_line.unround_tax_amt_fun_curr := 0;
END IF;
EXCEPTION
WHEN OTHERS THEN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE ,G_MODULE_NAME || lv_api_name
,lv_api_name || 'Inside ADHOC DELIVERY TO AR CASE' || SQLERRM);
END IF;
END;
END IF;
END ;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'l_cancel_flag'|| l_cancel_flag );
END IF;
--AELLURU 27773358
IF l_cancel_flag = 'Y' AND rec_jai_tax_line.tax_rate_type IN
('ADHOC_AMOUNT')
THEN
rec_jai_tax_line.unround_tax_amt_fun_curr := 0;
END IF;
--AELLURU 27773358
/*END: 26523740*/

END IF;

--Added by Junjian for Trading begin


lv_tradding_flag :=
jai_cmn_trad_proc_pkg.get_tax_trading_flag(pn_tax_type_id =>
rec_jai_tax_line.tax_type_id
--added for
trading change bug#18676759

,pn_first_party_reg_id => rec_jai_tax_line.first_party_reg_id


--added for
trading change bug#18676759

,pn_tax_rate_id => rec_jai_tax_line.tax_rate_id);


IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'tradding flag:' || lv_tradding_flag);
END IF;

IF lv_tradding_flag = 'Y'
AND rec_jai_tax_line.entity_code IN ('OE_ORDER_HEADERS'
,'SALES_ORDER_ISSUE'
,'TRANSACTIONS'
,'MTL_TRANSACTION') THEN
lv_independency_flag := 'Y';
rec_jai_tax_line.inclusive_flag := 'Y'; --added for trading
change bug#18676759
rec_jai_tax_line.unround_tax_amt_fun_curr :=
nvl(rec_jai_tax_line.unround_tax_amt_tax_curr
,0) *
ln_tax_curr_conv_rate;
END IF;
--Added by Junjian for Trading end
--Added by Wenqiong for bug18607074 begin
IF ((rec_jai_tax_line.update_vendor_on_transaction = 'Y' AND
(ln_det_party_id <> rec_jai_tax_line.party_id OR ln_det_party_site_id <>
rec_jai_tax_line.party_site_id)) OR
rec_jai_tax_line.self_assessed_flag = 'Y') THEN
IF (rec_jai_tax_line.entity_code IN ('RCV_TRANSACTION') AND
rec_jai_tax_line.trx_type = 'RETURN TO VENDOR')
OR (rec_jai_tax_line.applied_to_entity_code IN ('RCV_TRANSACTION') AND
rec_jai_tax_line.entity_code IN ('AP_INVOICES') AND
rec_jai_tax_line.trx_type = 'DEBIT' AND
rec_jai_tax_line.trx_line_quantity < 0)
OR (rec_jai_tax_line.entity_code IN ('AP_INVOICES') AND
rec_jai_tax_line.trx_type IN ('DEBIT'
,'CREDIT')) THEN
--Added by Junjian for bug#19699703
--Modified by Junjian for bug#20476394 begin
IF rec_jai_tax_line.entity_code IN ('RCV_TRANSACTION')
AND rec_jai_tax_line.trx_type = 'RETURN TO VENDOR'
AND rec_jai_tax_line.self_assessed_flag = 'Y' THEN
ln_settle_count := 0;
OPEN c_settle_count(cn_tax_rate_id => rec_jai_tax_line.tax_rate_id
,cn_trx_id =>
rec_jai_tax_line.applied_from_trx_id
,cn_trx_line_id =>
rec_jai_tax_line.applied_from_trx_line_id
,cv_entity_code => rec_jai_tax_line.entity_code);
FETCH c_settle_count
INTO ln_settle_count;
CLOSE c_settle_count;
IF ln_settle_count > 0 THEN
lv_independency_flag := 'Y';
rec_jai_tax_line.unround_tax_amt_fun_curr := 0;
rec_jai_tax_line.rounded_tax_amt_tax_curr := 0;
rec_jai_tax_line.frozen_flag := 'Y';
ELSE
NULL;
END IF;

/*commented by vkaranam for 27078939


ELSE
lv_independency_flag := 'Y';
--commented for bug 26549651
/*
rec_jai_tax_line.unround_tax_amt_fun_curr := 0;
rec_jai_tax_line.rounded_tax_amt_tax_curr := 0;
rec_jai_tax_line.frozen_flag := 'Y';
*/

END IF;
--Modified by Junjian for bug#20476394 end
END IF;
END IF;
--Added by Wenqiong for bug18607074 end
--Added by Junjian for bug#20476394 begin
IF rec_jai_tax_line.entity_code IN ('RCV_TRANSACTION')
AND rec_jai_tax_line.trx_type = 'CORRECT'
AND rec_jai_tax_line.self_assessed_flag = 'Y'
AND rec_jai_tax_line.trx_line_quantity < 0 THEN
ln_settle_count := 0;
OPEN c_settle_count(cn_tax_rate_id => rec_jai_tax_line.tax_rate_id
,cn_trx_id =>
rec_jai_tax_line.applied_from_trx_id
,cn_trx_line_id =>
rec_jai_tax_line.applied_from_trx_line_id
,cv_entity_code => rec_jai_tax_line.entity_code);
FETCH c_settle_count
INTO ln_settle_count;
CLOSE c_settle_count;
IF ln_settle_count > 0 THEN
lv_independency_flag := 'Y';
rec_jai_tax_line.unround_tax_amt_fun_curr := 0;
rec_jai_tax_line.rounded_tax_amt_tax_curr := 0;
rec_jai_tax_line.frozen_flag := 'Y';
ELSE
NULL;
END IF;
END IF;
--Added by Junjian for bug#20476394 end
--Added by Junjian for bug#18729209 begin
lv_boe_flag := jai_boe_tax_det_pkg.is_boe_tax(pn_tax_type_id =>
rec_jai_tax_line.tax_type_id);
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'BOE tax flag:' || lv_boe_flag);
END IF;
IF nvl(lv_boe_flag
,'N') = 'Y'
AND rec_jai_tax_line.entity_code = 'AP_INVOICES'
AND ln_applied_to_trx_id IS NOT NULL THEN
lv_independency_flag := 'Y';
rec_jai_tax_line.unround_tax_amt_fun_curr := 0;
END IF;
--Added by Junjian for bug#18729209 end

--Added by Junjian for bug#20476394 begin


IF rec_jai_tax_line.entity_code IN ('AP_INVOICES'
,'RCV_TRANSACTION'
,'PURCHASE_ORDER'
,'RELEASE'
,'REQUISITION') THEN
OPEN c_credit_reversal_count(rec_jai_tax_line.tax_rate_id);
FETCH c_credit_reversal_count
INTO ln_cred_rev_count;
CLOSE c_credit_reversal_count;
IF ln_cred_rev_count > 0 THEN
lv_independency_flag := 'Y';
rec_jai_tax_line.unround_tax_amt_fun_curr := 0;
rec_jai_tax_line.rounded_tax_amt_tax_curr := 0;
rec_jai_tax_line.frozen_flag := 'Y';
END IF;
END IF;
--Added by Junjian for bug#20476394 end

-- added by zhiwei.xin for bug#19828976 begin


IF nvl(rec_jai_tax_line.self_assessed_flag
,'N') = 'Y'
AND rec_jai_tax_line.entity_code = 'TRANSACTIONS'
AND rec_jai_tax_line.event_class_code = 'CREDIT_MEMO' THEN
lv_independency_flag := 'Y';
rec_jai_tax_line.unround_tax_amt_fun_curr := 0;
END IF;
-- added by zhiwei.xin for bug#19828976 end.

-- added by zhiwei.xin for AP Open Interface begin


IF nvl(lv_record_type_code
,'DEFINED') = 'OI_EXT' THEN
lv_independency_flag := 'Y';
rec_jai_tax_line.unround_tax_amt_fun_curr :=
nvl(rec_jai_tax_line.unround_tax_amt_tax_curr
,0) *
ln_tax_curr_conv_rate;
END IF;
-- added by zhiwei.xin for AP Open Interface end.

/*ln_func_line_amt := nvl(ln_actual_line_amt
,rec_jai_tax_line.line_amt) *
ln_tax_curr_conv_rate ; ---ln_trx_curr_conv_rate -- Changed by Rishin for Bug#
26670612*/--COMMENTED BY MANI FOR BUG 27459792

--FROM HERE ADDED BY MANI FOR BUG 27459792

IF rec_jai_tax_line.tax_currency_code <>
rec_jai_tax_line.functional_currency_code THEN
--MULTIPLY WITH TAX CONVERSION FACTOR WHEN TAX CURRENCY IS NON INR ONLY
ln_func_line_amt := nvl(ln_actual_line_amt
,rec_jai_tax_line.line_amt) *
ln_tax_curr_conv_rate ;

else
--ELSE IT SHOULD AS PER INITIAL LOGIC
ln_func_line_amt := nvl(ln_actual_line_amt
,rec_jai_tax_line.line_amt) *
ln_trx_curr_conv_rate ;

end if;
--UPTO HERE ADDED BY MANI FOR BUG 27459792--commented by mani for bug
27610530

--refer previous code for deriving functional amount ,below code


changes added for bug 27610530-------
/*
ln_func_line_amt := nvl(ln_actual_line_amt
,rec_jai_tax_line.line_amt) * ln_trx_curr_conv_rate;
*/
-----------------------------------------------------------------

jai_tax_determination_pkg.apply_rounding_rule(rec_jai_tax_line.taxable_rounded_to

,rec_jai_tax_line.taxable_rounding_factor
,ln_func_line_amt
,ln_rounded_line_amt
,lv_process_status);
----AELLURU FOR Huhtamaki 26621849
IF lv_tax_rate_type IN ('UNIT_OF_MEASURE'
,'UNIT_OF_MEASURE_ADHOC')
THEN
rec_jai_tax_line.unround_taxable_amt_fun_curr :=
rec_jai_tax_line.unround_taxable_amt_fun_curr;
rec_jai_tax_line.rounded_taxable_amt_fun_curr :=
rec_jai_tax_line.rounded_taxable_amt_fun_curr;
ELSE
rec_jai_tax_line.unround_taxable_amt_fun_curr :=
nvl(ln_func_assessable_value
,ln_func_line_amt);
rec_jai_tax_line.rounded_taxable_amt_fun_curr :=
nvl(ln_rounded_assessable_value
,ln_rounded_line_amt);
END IF;
----AELLURU FOR Huhtamaki 26621849
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'---before actual
calculation:unround_taxable_amt_fun_curr:' ||
rec_jai_tax_line.unround_taxable_amt_fun_curr ||
'rounded_taxable_amt_fun_curr:' ||
rec_jai_tax_line.rounded_taxable_amt_fun_curr);
END IF;

ELSE
--tax regime/type /rate is invalid
--make tax_rate as 0.
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'tax rate/type/regime is invalid, setup tax
rate = 0.');
END IF;
rec_jai_tax_line.tax_rate_percentage := 0;
ln_actual_rate := 0;
l_precedence_rec := NULL;

l_precedence_rec.p(1) := -1;
l_precedence_rec.p(2) := -1;
l_precedence_rec.p(3) := -1;
l_precedence_rec.p(4) := -1;
l_precedence_rec.p(5) := -1;
l_precedence_rec.p(6) := -1;
l_precedence_rec.p(7) := -1;
l_precedence_rec.p(8) := -1;
l_precedence_rec.p(9) := -1;
l_precedence_rec.p(10) := -1;
l_precedence_rec.p(11) := -1;
l_precedence_rec.p(12) := -1;
l_precedence_rec.p(13) := -1;
l_precedence_rec.p(14) := -1;
l_precedence_rec.p(15) := -1;
l_precedence_rec.p(16) := -1;
l_precedence_rec.p(17) := -1;
l_precedence_rec.p(18) := -1;
l_precedence_rec.p(19) := -1;
l_precedence_rec.p(20) := -1;
END IF;
p_tax_lines_tbl(i) := rec_jai_tax_line;
l_pvt_tax_line_tbl.tax_line_num(i) := rec_jai_tax_line.tax_line_num;
l_pvt_tax_line_tbl.precedence(i) := l_precedence_rec;
l_pvt_tax_line_tbl.rounded_assessable_value_func(i) :=
ln_rounded_assessable_value;
l_pvt_tax_line_tbl.rounded_line_amount_func(i) := ln_rounded_line_amt;
l_pvt_tax_line_tbl.actual_tax_rate_per_rupee(i) := nvl(ln_actual_rate

,rec_jai_tax_line.tax_rate_percentage) / 100;
l_pvt_tax_line_tbl.tax_amount_func(i) :=
rec_jai_tax_line.unround_tax_amt_fun_curr;
l_pvt_tax_line_tbl.inclusive_flag(i) := nvl(rec_jai_tax_line.inclusive_flag
,'N');
l_pvt_tax_line_tbl.independency_flag(i) := lv_independency_flag;
l_pvt_tax_line_tbl.tax_rounded_to(i) := rec_jai_tax_line.tax_rounded_to;
l_pvt_tax_line_tbl.tax_rounding_factor(i) :=
rec_jai_tax_line.tax_rounding_factor;
--Added by Wenqiong for bug19244914 begin
l_pvt_tax_line_tbl.taxable_rounded_to(i) :=
rec_jai_tax_line.taxable_rounded_to;
--Added by Wenqiong for bug19244914 end
-- added by zhiwei.xin for form tracking phaseIV on 13-DEC-2013 begin
l_pvt_tax_line_tbl.taxable_rounding_factor(i) :=
rec_jai_tax_line.taxable_rounding_factor;
-- added by zhiwei.xin for form tracking phaseIV on 13-DEC-2013 end.

l_pvt_tax_line_tbl.tax_curr_conv_rate(i) := ln_tax_curr_conv_rate;
l_pvt_tax_line_tbl.trx_curr_conv_rate(i) := ln_trx_curr_conv_rate;
l_pvt_tax_line_tbl.inclusive_tax_rate(i) := NULL;
l_pvt_tax_line_tbl.non_rate_amount(i) := NULL;
l_pvt_tax_line_tbl.taxable_amount(i) := NULL;
l_pvt_tax_line_tbl.rounded_tax_amt(i) := NULL;

--Added by Junjian for Advance Receipt begin


-- If advance receipt, set inclusive_flag to Y for all taxes.
/* jls commented for bug 25580593
For adv rcpt the tax should be selfassessed and exlusive
IF(rec_jai_tax_line.entity_code = 'RECEIPTS'
and rec_jai_tax_line.event_type_code='RECEIPT_CREATE') THEN
l_pvt_tax_line_tbl.inclusive_flag(I) := 'Y';
rec_jai_tax_line.inclusive_flag := 'Y'; --Added by Zhhou for Bug#18741804
on 20140618
p_tax_lines_tbl(I).inclusive_flag := 'Y'; --Added by Zhhou for Bug#18741804
on 20140618
END IF;
jls for bug 25580593 */
--Added by Junjian for Advance Receipt end
/*Added by Qinglei for bug#20090376 begin*/
IF (rec_jai_tax_line.entity_code = 'TRANSACTIONS' AND
rec_jai_tax_line.event_type_code = 'DEPOSIT_CREATE') THEN
OPEN c_ra_cust_trx_type(rec_jai_tax_line.trx_id);
FETCH c_ra_cust_trx_type
INTO lv_ra_cust_type;
CLOSE c_ra_cust_trx_type;
IF lv_ra_cust_type = 'DEP' THEN
l_pvt_tax_line_tbl.inclusive_flag(i) := 'Y';
rec_jai_tax_line.inclusive_flag := 'Y';
p_tax_lines_tbl(i).inclusive_flag := 'Y';
END IF;
END IF;
/*Added by Qinglei for bug#20090376 end*/

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'tax line num:' ||
l_pvt_tax_line_tbl.tax_line_num(i) || 'independency_flag:' ||
l_pvt_tax_line_tbl.independency_flag(i) ||
',ln_func_line_amt:' || ln_func_line_amt ||
',ln_rounded_assessable_value:' ||
ln_rounded_assessable_value || ',actual_tax_rate_per_rupee:' ||
l_pvt_tax_line_tbl.actual_tax_rate_per_rupee(i) ||
',tax_amount_func:' ||
l_pvt_tax_line_tbl.tax_amount_func(i) || ',inclusive_flag:'
||
l_pvt_tax_line_tbl.inclusive_flag(i) || ',tax_rounded_to:'
||
l_pvt_tax_line_tbl.tax_rounded_to(i) ||
',tax_rounding_factor:' ||
l_pvt_tax_line_tbl.tax_rounding_factor(i));
END IF;

END LOOP;

calculate_tax_pvt(pvt_tax_line_rec => l_pvt_tax_line_tbl


,pn_line_amount_func => p_tax_lines_tbl(1).line_amt *
ln_trx_curr_conv_rate
,pv_process_status => lv_process_status
,pv_process_message => lv_process_message);

-- convert the calculated amount into trx curr, tax curr and populate into tax
line table
FOR i IN p_tax_lines_tbl.first .. p_tax_lines_tbl.last LOOP

IF l_pvt_tax_line_tbl.tax_line_num.exists(i)
AND l_pvt_tax_line_tbl.tax_line_num(i) = p_tax_lines_tbl(i).tax_line_num
THEN
rec_jai_tax_line := p_tax_lines_tbl(i);
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name ||
'convert the calculated amount into trx curr, tax curr and
populate into tax line table ');
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'unround_tax_amt_fun_curr: ' ||
l_pvt_tax_line_tbl.tax_amount_func(i));
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'rounded_taxable_amt_fun_curr: ' ||
rec_jai_tax_line.rounded_taxable_amt_fun_curr);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'unround_taxable_amt_fun_curr: ' ||
rec_jai_tax_line.unround_taxable_amt_fun_curr);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'ln_trx_curr_conv_rate: ' ||
l_pvt_tax_line_tbl.trx_curr_conv_rate(i) ||
',ln_tax_curr_conv_rate:' ||
l_pvt_tax_line_tbl.tax_curr_conv_rate(i));

END IF;

ln_trx_curr_conv_rate := l_pvt_tax_line_tbl.trx_curr_conv_rate(i);
ln_tax_curr_conv_rate := l_pvt_tax_line_tbl.tax_curr_conv_rate(i);

rec_jai_tax_line.unround_tax_amt_fun_curr :=
l_pvt_tax_line_tbl.tax_amount_func(i);
--Commented by Zhhou for bug#19434516
--rec_jai_tax_line.rounded_tax_amt_fun_curr :=
l_pvt_tax_line_tbl.rounded_tax_amt(I);
rec_jai_tax_line.rounded_tax_amt_fun_curr :=
nvl(l_pvt_tax_line_tbl.rounded_tax_amt(i)
--Added by Zhhou for
bug#19434516

,rec_jai_tax_line.rounded_tax_amt_fun_curr);

-- added by zhiwei.xin for form tracking on 13-DEC-2013 begin


rec_jai_tax_line.taxable_basis := l_pvt_tax_line_tbl.taxable_amount(i);
-- addded by zhiwei.xin for form tracking on 13-DEC-2013 end.

--Added by Junjian for bug#19659883 begin


rec_jai_tax_line.unround_tax_amt_fun_curr :=
round(rec_jai_tax_line.unround_tax_amt_fun_curr
,2);
rec_jai_tax_line.rounded_tax_amt_fun_curr :=
round(rec_jai_tax_line.rounded_tax_amt_fun_curr
,2);
--Added by Junjian for bug#19659883 end

--Changed by Zhhou for bug#18964435 on 20140617 begin to add round with 2


rec_jai_tax_line.unround_tax_amt_trx_curr :=
round(rec_jai_tax_line.unround_tax_amt_fun_curr /
ln_trx_curr_conv_rate
,2);
rec_jai_tax_line.unround_tax_amt_tax_curr :=
round(rec_jai_tax_line.unround_tax_amt_fun_curr /
ln_tax_curr_conv_rate
,2);
rec_jai_tax_line.rounded_tax_amt_trx_curr :=
round(rec_jai_tax_line.rounded_tax_amt_fun_curr /
ln_trx_curr_conv_rate
,2);
rec_jai_tax_line.rounded_tax_amt_tax_curr :=
round(rec_jai_tax_line.rounded_tax_amt_fun_curr /
ln_tax_curr_conv_rate
,2);
--Changed by Zhhou for bug#18964435 on 20140617 end

rec_jai_tax_line.unround_taxable_amt_trx_curr :=
rec_jai_tax_line.unround_taxable_amt_fun_curr /
ln_trx_curr_conv_rate;
rec_jai_tax_line.unround_taxable_amt_tax_curr :=
rec_jai_tax_line.unround_taxable_amt_fun_curr /
ln_tax_curr_conv_rate;
rec_jai_tax_line.rounded_taxable_amt_trx_curr :=
rec_jai_tax_line.rounded_taxable_amt_fun_curr /
ln_trx_curr_conv_rate;
rec_jai_tax_line.rounded_taxable_amt_tax_curr :=
rec_jai_tax_line.rounded_taxable_amt_fun_curr /
ln_tax_curr_conv_rate;

--calculated recoverable /non-recoverable tax amount


jai_tax_determination_pkg.determine_recovery(pn_rounded_tax_amt_fun_curr =>
rec_jai_tax_line.rounded_tax_amt_fun_curr
,pn_recovery_percentage =>
rec_jai_tax_line.recovery_percentage
,pn_tax_regime_id =>
rec_jai_tax_line.tax_regime_id
,pn_tax_type_id =>
rec_jai_tax_line.tax_type_id
,pn_org_id =>
rec_jai_tax_line.org_id --Added by Junjian
,pn_organization_id =>
rec_jai_tax_line.organization_id
,pn_location_id =>
rec_jai_tax_line.location_id
,pv_intended_use =>
lv_intended_use
,pv_item_class =>
lv_item_class
,pn_item_id =>
rec_jai_tax_line.item_id
,pv_registration_num =>
rec_jai_tax_line.first_party_primary_reg_num
,pn_rec_tax_amt_funcl_curr =>
rec_jai_tax_line.rec_tax_amt_funcl_curr
,pn_nrec_tax_amt_funcl_curr =>
rec_jai_tax_line.nrec_tax_amt_funcl_curr
,pv_process_status =>
lv_process_status
,pv_process_message =>
lv_process_message);

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'determine_recovery return
pn_rec_tax_amt_funcl_curr:' ||
rec_jai_tax_line.rec_tax_amt_funcl_curr ||
',pn_nrec_tax_amt_funcl_curr:' ||
rec_jai_tax_line.nrec_tax_amt_funcl_curr);
END IF;
IF lv_process_status <> FND_API.G_RET_STS_SUCCESS THEN
pv_process_status := lv_process_status;
pv_process_message := lv_process_message;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'calling determine_recovery with error:' ||
lv_process_message);
END IF;
RETURN;
END IF;
IF nvl(rec_jai_tax_line.rec_tax_amt_funcl_curr
,0) <> 0 THEN
rec_jai_tax_line.recoverable_flag := 'Y';
IF nvl(rec_jai_tax_line.rec_tax_amt_funcl_curr
,0) = -1
AND nvl(rec_jai_tax_line.rounded_tax_amt_fun_curr
,0) = 0 THEN
rec_jai_tax_line.rec_tax_amt_funcl_curr := 0;
END IF;
ELSE
rec_jai_tax_line.recoverable_flag := 'N';
END IF;
/* commentted out by shyan for bug#26250109, begin
--Added by Junjian for bug#19018333 begin
IF nvl(rec_jai_tax_line.update_vendor_on_transaction,'N') = 'Y' THEN
IF ln_det_party_id <> rec_jai_tax_line.party_id OR
ln_det_party_site_id <> rec_jai_tax_line.party_site_id THEN
rec_jai_tax_line.recoverable_flag := 'N';
rec_jai_tax_line.rec_tax_amt_funcl_curr := 0;
/*Added by Qinglei for bug#19634018 begin*/
/* rec_jai_tax_line.nrec_tax_amt_funcl_curr :=
rec_jai_tax_line.rounded_tax_amt_fun_curr; */
/*Added by Qinglei for bug#19634018 end*/
/* END IF;
END IF; */
/*commentted out by shyan for bug#26250109, end */
--Added by Junjian for bug#19018333 end
/*Revert the changes done for bug#19171934 by Wenqiong on Dec 30, 2014
--Added for bug#19171934 20140912 Begin
IF rec_jai_tax_line.application_id = 707
AND rec_jai_tax_line.entity_code = 'RCV_TRANSACTION'
AND rec_jai_tax_line.event_class_code = 'RECEIVING'
AND rec_jai_tax_line.tax_event_class_code = 'PURCHASE_TRANSACTION'
THEN
--Derive cost method
ln_cost_method := NULL;
jai_tax_accounting_pkg.drv_cost_method(
pn_det_factor_id => rec_jai_tax_line.det_factor_id
,pv_trx_type => rec_jai_tax_line.trx_type
,pn_cost_method => ln_cost_method
,pv_process_status => lv_process_status
,pv_process_message => lv_process_message
);

IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||lv_api_name
,lv_api_name||' Transaction Type : ' ||
rec_jai_tax_line.trx_type);
FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||lv_api_name
,lv_api_name||' Derive cost method : ' || ln_cost_method);
END IF;
IF lv_process_status <> FND_API.G_RET_STS_SUCCESS THEN
pv_process_status := lv_process_status;
pv_process_message := lv_process_message;
IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||lv_api_name
,'Calling drv_cost_method with error:'||
lv_process_message);
END IF;
RETURN;
END IF;

IF ln_cost_method = 0 THEN
rec_jai_tax_line.recoverable_flag := 'N';
rec_jai_tax_line.rec_tax_amt_funcl_curr := 0;
--Added by Zhhou for issue fix.
rec_jai_tax_line.nrec_tax_amt_funcl_curr :=
rec_jai_tax_line.rounded_tax_amt_fun_curr;
END IF;
END IF;
--Added for bug#19171934 20140912 End*/
--Added by Junjian for bug#19659883 begin
rec_jai_tax_line.rec_tax_amt_funcl_curr :=
round(rec_jai_tax_line.rec_tax_amt_funcl_curr
,2);
rec_jai_tax_line.nrec_tax_amt_funcl_curr :=
round(rec_jai_tax_line.nrec_tax_amt_funcl_curr
,2);
--Added by Junjian for bug#19659883 end
--Changed by Zhhou for bug#18964435 on 20140617 begin to add round with 2
rec_jai_tax_line.rec_tax_amt_trx_curr :=
round(rec_jai_tax_line.rec_tax_amt_funcl_curr / ln_trx_curr_conv_rate
,2);
rec_jai_tax_line.rec_tax_amt_tax_curr :=
round(rec_jai_tax_line.rec_tax_amt_funcl_curr / ln_tax_curr_conv_rate
,2);
rec_jai_tax_line.nrec_tax_amt_trx_curr :=
round(rec_jai_tax_line.nrec_tax_amt_funcl_curr /
ln_trx_curr_conv_rate
,2);
rec_jai_tax_line.nrec_tax_amt_tax_curr :=
round(rec_jai_tax_line.nrec_tax_amt_funcl_curr /
ln_tax_curr_conv_rate
,2);

/* jls added for Bug 28372303 roundng */


IF NVL (rec_jai_tax_line.rec_tax_amt_funcl_curr, 0) > 0
AND NVL (rec_jai_tax_line.nrec_tax_amt_funcl_curr, 0) > 0
THEN
rec_jai_tax_line.rounded_tax_amt_fun_curr :=
NVL (rec_jai_tax_line.rec_tax_amt_funcl_curr, 0)
+ NVL (rec_jai_tax_line.nrec_tax_amt_funcl_curr, 0);
rec_jai_tax_line.rounded_tax_amt_tax_curr :=
NVL (rec_jai_tax_line.rec_tax_amt_tax_curr, 0)
+ NVL (rec_jai_tax_line.nrec_tax_amt_tax_curr, 0);
rec_jai_tax_line.rounded_tax_amt_trx_curr :=
NVL (rec_jai_tax_line.rec_tax_amt_trx_curr, 0)
+ NVL (rec_jai_tax_line.nrec_tax_amt_trx_curr, 0);

IF (g_level_procedure >= fnd_log.g_current_runtime_level)


THEN
fnd_log.STRING
(g_level_procedure,
g_module_name || lv_api_name,
lv_api_name
|| 'determine_recovery return
rec_jai_tax_line.rounded_tax_amt_fun_curr:'
|| rec_jai_tax_line.rounded_tax_amt_fun_curr
|| ' rec_jai_tax_line.rounded_tax_amt_tax_curr '
|| rec_jai_tax_line.rounded_tax_amt_tax_curr
);
END IF;
ELSE
rec_jai_tax_line.rounded_tax_amt_fun_curr :=
rec_jai_tax_line.rounded_tax_amt_fun_curr;
END IF;
--Changed by Zhhou for bug#18964435 on 20140617 end
--Added by Junjian for Advance Receipt begin
--If advance receipt, should set inclusive_flag to what it should be after
calculation
/* IF (rec_jai_tax_line.entity_code = 'RECEIPTS' and
rec_jai_tax_line.event_type_code='RECEIPT_CREATE')then

SELECT nvl(inclusive_flag,'N')
INTO lv_inclusive_flag
FROM jai_tax_rates
WHERE tax_rate_id = rec_jai_tax_line.tax_rate_id;

rec_jai_tax_line.inclusive_flag := lv_inclusive_flag;
END IF;*/ --Commented by Zhhou for Bug#18741804 on 20140618
--Added by Junjian for Advance Receipt end

END IF;
--Modified by Junjian for ERS flow begin
IF rec_jai_tax_line.entity_code = 'AP_INVOICES' THEN
IF rec_jai_tax_line.tax_point_basis = 'DELIVERY' THEN
rec_jai_tax_line.frozen_flag := 'Y';
ELSE
rec_jai_tax_line.frozen_flag := 'N';
END IF;
ELSE
IF nvl(lv_tax_confirmed_flag
,'N') = 'Y' THEN
rec_jai_tax_line.frozen_flag := 'Y';
END IF;
END IF;
--Modified by Junjian for ERS flow end

/*Added by Qinglei for Interorg/ISO accounting bug#19909334 begin*/


IF rec_jai_tax_line.application_id = 707
AND rec_jai_tax_line.entity_code = 'SALES_ORDER_ISSUE' THEN
lv_iso_flag := jai_om_tax_det_pkg.get_iso_flag(p_oe_line_id =>
rec_jai_tax_line.ref_doc_line_id);
--rec_jai_tax_line.trx_line_id);AELLURU for IRISO
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Internal Sales Order flag: ' || lv_iso_flag);
END IF;
IF lv_iso_flag = 'Y' THEN
rec_jai_tax_line.tax_point_basis := 'DELIVERY';
END IF;
END IF;
IF rec_jai_tax_line.application_id = 707
AND rec_jai_tax_line.entity_code = 'MTL_TRANSACTION'
AND rec_jai_tax_line.event_class_code = 'DIR_INTERORG_SHIP' THEN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Update TPB to Delivery for Inter org transfer');
END IF;
rec_jai_tax_line.tax_point_basis := 'DELIVERY';
END IF;
/*Added by Qinglei for Interorg/ISO accounting bug#19909334 end*/

p_tax_lines_tbl(i) := rec_jai_tax_line;
jai_tax_determination_pkg.log_tax_line(p_tax_lines_tbl(i));
END LOOP;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;

EXCEPTION
WHEN FND_API.G_EXC_ERROR THEN
pv_process_status := FND_API.G_RET_STS_ERROR;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,pv_process_message);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
pv_process_status := FND_API.G_RET_STS_ERROR;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,pv_process_message);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
WHEN OTHERS THEN
pv_process_status := FND_API.G_RET_STS_UNEXP_ERROR;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,SQLERRM);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;

END calculate_tax;

/*---------------------------------------------------------------------------------
--------------------------------+
| Created By : Wenqiong Zhou
|
| Creation Date : 10/Apr/2013
|
| Bug Number/ER Name : Phase IV Tax Determination
|
| SubProgram Name : calculate_tax_pvt
|
| Type : PROCEDURE
|
| Purpose : This procedure is to calculate tax actually.
|
|
|
| TDD Reference : Section 6.15
|
| Assumptions : All the amount in input parameters are functional amt.
|
| for independency flag = Y, will not care its precedence
|
| Called From : called by calculate_tax
|

|----------------------------------------------------------------------------------
-------------------------------|
| parameters IN/OUT Type Required
Description and Purpose |
| ------------ -------- ------
---------- ------------------------- |
| pvt_tax_line_rec IN/OUT pvt_tax_line_rec_type yes
private tax line rec |
| pn_line_amount_func IN NUMBER yes
Functional line amt |
| pv_process_status OUT VARCHAR2 yes
Process status |
| pv_process_message OUT VARCHAR2 yes
Process message |

*----------------------------------------------------------------------------------
--------------------------------*/
PROCEDURE calculate_tax_pvt
(
pvt_tax_line_rec IN OUT NOCOPY pvt_tax_line_rec_type
,pn_line_amount_func IN NUMBER
,pv_process_status OUT NOCOPY VARCHAR2
,pv_process_message OUT NOCOPY VARCHAR2
) IS
ln_total_inclusive_rate NUMBER;
ln_total_inclu_non_rate_amt NUMBER;
ln_exclusive_price NUMBER;
ln_p1_0_rate NUMBER;
ln_p1_0_non_rate NUMBER;
ln_p1_0_taxable_amt NUMBER;
ln_inclusive_rate NUMBER;
ln_non_rate_amt NUMBER;
ln_taxable_amt NUMBER;
ln_pre_line_no NUMBER;
ln_line_amt NUMBER;
ln_rounded_tax_amt NUMBER;
ln_rounded_exclusive_price NUMBER;
lv_process_status VARCHAR2(30);
lv_api_name CONSTANT VARCHAR2(50) := 'calculate_tax_pvt';
BEGIN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----Begin----' || '()+');
END IF;
pv_process_status := FND_API.G_RET_STS_SUCCESS;
log_pvt_tax_line(pvt_tax_line_rec);
--1st loop to calculate inclusive tax rate,
--non rate amount for each tax line and calculate exclusive price based on that
FOR i IN 1 .. nvl(pvt_tax_line_rec.tax_line_num.last
,-99) LOOP
--IF nvl(pvt_tax_line_rec.independency_flag(i),'N') = 'Y'
-- AND nvl(pvt_tax_line_rec.tax_amount_func(i), 0) <> 0 THEN -- commented
out by zhiwei.xin for bug#19828976
IF nvl(pvt_tax_line_rec.independency_flag(i)
,'N') = 'Y' THEN
-- added by zhiwei.xin for bug#19828976
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'Its adhoc tax amount or calculated tax amt
for UOM base rate');
END IF;
--Means It's adhoc tax amount or calculated tax amt for UOM base rate
apply_rounding_rule(pvt_tax_line_rec.tax_rounded_to(i)
,pvt_tax_line_rec.tax_rounding_factor(i)
,pvt_tax_line_rec.tax_amount_func(i)
,ln_rounded_tax_amt
,lv_process_status);
IF lv_process_status <> FND_API.G_RET_STS_SUCCESS THEN
pv_process_status := lv_process_status;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'apply_rounding_rule return error');
END IF;
RETURN;
END IF;
pvt_tax_line_rec.rounded_tax_amt(i) := ln_rounded_tax_amt;
pvt_tax_line_rec.inclusive_tax_rate(i) := 0;
pvt_tax_line_rec.non_rate_amount(i) := pvt_tax_line_rec.rounded_tax_amt(i);
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'rounded_tax_amt:' || ln_rounded_tax_amt ||
',inclusive_tax_rate:0, non rate amt:' ||
pvt_tax_line_rec.non_rate_amount(i));
END IF;

ELSE
IF nvl(pvt_tax_line_rec.rounded_assessable_value_func(i)
,-1) > 0
OR nvl(pvt_tax_line_rec.inclusive_flag(i)
,'N') = 'N' THEN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'Its the tax with AV or its exclusive
tax');
END IF;
--Means the tax with AV or it's exclusive tax
--Set inclusive tax rate and non rate amount for p1 = 0
ln_p1_0_rate := 0;
ln_p1_0_non_rate := nvl(pvt_tax_line_rec.rounded_assessable_value_func(i)
,pvt_tax_line_rec.rounded_line_amount_func(i));
ELSE
--IF nvl(pvt_tax_line_rec.inclusive_flag(i),'N' ) = 'Y' THEN
--Means it's inclusive tax without AV
--Set inclusive tax rate and non rate amount for p1 = 0
ln_p1_0_rate := 1;
ln_p1_0_non_rate := 0;
END IF;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'ln_p1_0_rate:' || ln_p1_0_rate ||
',ln_p1_0_non_rate:' || ln_p1_0_non_rate ||
',ln_inclusive_rate:' || ln_inclusive_rate ||
',ln_non_rate_amt:' || ln_non_rate_amt);
END IF;

END IF;

ln_inclusive_rate := 0; --Initialize to 0 out of below loop.


ln_non_rate_amt := 0; --Initialize to 0 .

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'start process the precedence loop for line' || i);
END IF;

--Loop precedence tbl for calculate inclusive tax rate and non rate amount
--inclusive tax rate = sum of dependencies inclusive tax rate *
actual_tax_rate_per_rupee
--non rate amount = sum of dependencies non rate amount *
actual_tax_rate_per_rupee
FOR j IN 1 .. 20 LOOP
IF nvl(pvt_tax_line_rec.precedence(i).p(j)
,-1) <> -1 THEN
ln_pre_line_no := pvt_tax_line_rec.precedence(i).p(j);
IF j = 1
AND ln_pre_line_no = 0 THEN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'for the case of p1 = 0:');
END IF;
ln_inclusive_rate := ln_p1_0_rate;
ln_non_rate_amt := ln_p1_0_non_rate;
ELSE
/*Commented out by Wenqiong for bug18417418, replace it by below code.
ln_inclusive_rate := nvl(ln_inclusive_rate,0) +
nvl(pvt_tax_line_rec.inclusive_tax_rate(ln_pre_line_no),0) ;
ln_non_rate_amt := nvl(ln_non_rate_amt,0) +
nvl(pvt_tax_line_rec.non_rate_amount(ln_pre_line_no),0);*/
--Added by Wenqiong for bug 18417418, ignore all the inclusive
dependencies begin
IF nvl(pvt_tax_line_rec.inclusive_flag(ln_pre_line_no)
,'N') = 'Y' THEN
NULL;
ELSE
ln_inclusive_rate := nvl(ln_inclusive_rate
,0) +
nvl(pvt_tax_line_rec.inclusive_tax_rate(ln_pre_line_no)
,0);
ln_non_rate_amt := nvl(ln_non_rate_amt
,0) +
nvl(pvt_tax_line_rec.non_rate_amount(ln_pre_line_no)
,0);
END IF;
--Added by Wenqiong for bug 18417418, ignore all the inclusive
dependencies end
END IF; -- j=1 and ln_pre_line_no = 0
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'p(' || j || ')=' || ln_pre_line_no ||
',ln_inclusive_rate:' ||
ln_inclusive_rate || ',ln_non_rate_amt:' ||
ln_non_rate_amt);
END IF;

END IF; -- p(j) <> -1


END LOOP;
IF nvl(pvt_tax_line_rec.independency_flag(i)
,'N') = 'N' THEN
pvt_tax_line_rec.inclusive_tax_rate(i) := ln_inclusive_rate *
nvl(pvt_tax_line_rec.actual_tax_rate_per_rupee(i)
,0);
pvt_tax_line_rec.non_rate_amount(i) := ln_non_rate_amt *
nvl(pvt_tax_line_rec.actual_tax_rate_per_rupee(i)
,0);
END IF;
--calcuate sum of inclusive tax rate and non rate amount for all inclusive
taxes
--which will be used for exclusive price
IF nvl(pvt_tax_line_rec.inclusive_flag(i)
,'N') = 'Y' THEN
ln_total_inclusive_rate := nvl(ln_total_inclusive_rate
,0) +
pvt_tax_line_rec.inclusive_tax_rate(i);
ln_total_inclu_non_rate_amt := nvl(ln_total_inclu_non_rate_amt
,0) +
pvt_tax_line_rec.non_rate_amount(i);
END IF;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'at the end of 1st loop,inclusive_tax_rate(' || i || ')' ||
pvt_tax_line_rec.inclusive_tax_rate(i) || '
,non_rate_amount(' || i || ')' ||
pvt_tax_line_rec.non_rate_amount(i));
END IF;
END LOOP;
ln_line_amt := pn_line_amount_func;
--exclusive price: =(line amount-total non rate amount for all inclusive
taxes)/
-- (1+total calculate tax rate for all inclusive taxes)
ln_exclusive_price := (ln_line_amt - ln_total_inclu_non_rate_amt) / (1 +
ln_total_inclusive_rate);

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'after 1st loop, ln_line_amt:' || ln_line_amt
|| ',ln_total_inclusive_rate:' ||
ln_total_inclusive_rate || ',ln_total_inclu_non_rate_amt:' ||
ln_total_inclu_non_rate_amt ||
',ln_exclusive_price:' || ln_exclusive_price);
END IF;
--2nd Loop to calculate taxable amount
--taxable amount = sum of dependencies taxable amount
FOR i IN 1 .. nvl(pvt_tax_line_rec.tax_line_num.last
,-99) LOOP
ln_taxable_amt := 0;

IF nvl(pvt_tax_line_rec.independency_flag(i)
,'N') = 'Y' THEN
pvt_tax_line_rec.taxable_amount(i) := pvt_tax_line_rec.non_rate_amount(i);
ELSE
IF nvl(pvt_tax_line_rec.rounded_assessable_value_func(i)
,-1) > 0
OR nvl(pvt_tax_line_rec.inclusive_flag(i)
,'N') = 'N' THEN
--Means the tax with AV or it's exclusive tax
ln_p1_0_taxable_amt :=
nvl(pvt_tax_line_rec.rounded_assessable_value_func(i)
,pvt_tax_line_rec.rounded_line_amount_func(i));
ELSE
--IF nvl(pvt_tax_line_rec.inclusive_flag(i),'N' ) = 'Y' THEN
--Means it's inclusive tax without AV
--Added by Wenqiong for bug19244914 begin, apply rounding rule on
exclusive price for inclusive price.
apply_rounding_rule(pvt_tax_line_rec.taxable_rounded_to(i)
,pvt_tax_line_rec.taxable_rounding_factor(i)
,ln_exclusive_price
,ln_rounded_exclusive_price
,lv_process_status);
--Added by Wenqiong for bug19244914 end
ln_p1_0_taxable_amt := ln_rounded_exclusive_price;
END IF;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'In 2.1 loop, ln_p1_0_taxable_amt:' ||
ln_p1_0_taxable_amt);
END IF;
FOR j IN 1 .. 20 LOOP
IF nvl(pvt_tax_line_rec.precedence(i).p(j)
,-1) <> -1 THEN
ln_pre_line_no := pvt_tax_line_rec.precedence(i).p(j);
IF j = 1
AND ln_pre_line_no = 0 THEN
ln_taxable_amt := nvl(ln_p1_0_taxable_amt
,0);
ELSE
--Added for bug 18144880 and 18145185, not consider dependent on
inclusive tax.
IF /*nvl(pvt_tax_line_rec.inclusive_flag(i),'N' ) = 'N' AND */
nvl(pvt_tax_line_rec.inclusive_flag(ln_pre_line_no)
,'N') = 'Y' THEN
NULL;
ELSE
--ln_taxable_amt := nvl(ln_taxable_amt,0) +
nvl(pvt_tax_line_rec.rounded_tax_amt(ln_pre_line_no),0) ;
--Comment above for the bug 19244914, count dependency tax amount
as unrounded amount.
ln_taxable_amt := nvl(ln_taxable_amt
,0) +
nvl(pvt_tax_line_rec.tax_amount_func(ln_pre_line_no)
,0);
END IF;
END IF;
END IF;
END LOOP;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'In 2.2 loop, ln_taxable_amt:' ||
ln_taxable_amt);
END IF;
--tax amount = taxable amount * actual tax rate per rupee
-- pvt_tax_line_rec.taxable_amount(i) := ln_taxable_amt;
-- pvt_tax_line_rec.rounded_taxable_amt(i) :=
round(pvt_tax_line_rec.taxable_amount(i)
--
,pvt_tax_line_rec.taxable_rounding_factor(i));
pvt_tax_line_rec.tax_amount_func(i) := ln_taxable_amt *
nvl(pvt_tax_line_rec.actual_tax_rate_per_rupee(i)
,0);
apply_rounding_rule(pvt_tax_line_rec.tax_rounded_to(i)
,pvt_tax_line_rec.tax_rounding_factor(i)
,pvt_tax_line_rec.tax_amount_func(i)
,pvt_tax_line_rec.rounded_tax_amt(i)
,lv_process_status);

-- added by zhiwei.xin for form tracking on 13-DEC-2013 begin


pvt_tax_line_rec.taxable_amount(i) := round(ln_taxable_amt

,pvt_tax_line_rec.taxable_rounding_factor(i));
-- added by zhiwei.xin for form tracking on 13-DEC-2013 end.

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || ' tax_amount_func:' ||
pvt_tax_line_rec.tax_amount_func(i) ||
',rounded tax amt:' || pvt_tax_line_rec.rounded_tax_amt(i)
|| ', taxable_basis : ' ||
pvt_tax_line_rec.taxable_amount(i));
END IF;

END IF; -- independency flag = Y

END LOOP;
log_pvt_tax_line(pvt_tax_line_rec);
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;

EXCEPTION
WHEN FND_API.G_EXC_ERROR THEN
pv_process_status := FND_API.G_RET_STS_ERROR;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,pv_process_message);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
pv_process_status := FND_API.G_RET_STS_ERROR;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,pv_process_message);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
WHEN OTHERS THEN
pv_process_status := FND_API.G_RET_STS_UNEXP_ERROR;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,SQLERRM);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
END calculate_tax_pvt;

/*---------------------------------------------------------------------------------
--------------------------------+
| Created By : Wenqiong Zhou
|
| Creation Date : 10/Apr/2013
|
| Bug Number/ER Name : Phase IV Tax Determination
|
| SubProgram Name : get_assessable_price
|
| Type : PROCEDURE
|
| Purpose : This procedure is to get assessble price based on
assessable price list and UOM . |
|
|
| TDD Reference : Section 6.20
|
| Assumptions : Refering to existing logic in
jai_general_pkg.ja_in_vat_assessable_value |
| Called From : called by calculate_tax
|

|----------------------------------------------------------------------------------
-------------------------------|
| parameters IN/OUT Type Required
Description and Purpose |
| ------------ -------- ------
---------- ------------------------- |
| pn_assessable_price_list_id IN NUMBER yes
AV Price List id |
| pv_transaction_uom IN VARCHAR2 yes
Trx UOM |
| pn_item_id IN NUMBER yes
ITEM id |
| pd_trx_date IN NUMBER yes
trx_date |
| pn_assessable_price OUT NUMBER yes
AV price |
| pv_process_status OUT VARCHAR2 yes
Process status |

*----------------------------------------------------------------------------------
--------------------------------*/
PROCEDURE get_assessable_price
(
pn_assessable_price_list_id IN NUMBER
,pv_transaction_uom IN VARCHAR2
,pn_item_id IN NUMBER
,pd_trx_date IN DATE
,pn_assessable_price OUT NOCOPY NUMBER
,pv_process_status OUT NOCOPY VARCHAR2
) IS
CURSOR c_get_assessable_value(cp_item qp_list_lines_v.product_attribute_context
%TYPE) IS
SELECT operand
FROM qp_list_lines qpll
,qp_pricing_attributes qppr
WHERE qpll.list_line_id = qppr.list_line_id
AND qpll.list_header_id = pn_assessable_price_list_id
AND qppr.product_attribute_context = cp_item
AND qppr.product_attr_value = to_char(pn_item_id)
AND qppr.product_uom_code = pv_transaction_uom
AND TRUNC(pd_trx_date) BETWEEN nvl(qpll.start_date_active
,TRUNC(pd_trx_date)) AND
nvl(qpll.end_date_active
,TRUNC(pd_trx_date))
AND EXISTS (SELECT 1
FROM qp_list_headers_all qlh
WHERE qlh.list_header_id = qpll.list_header_id
AND nvl(qlh.start_date_active
,TRUNC(pd_trx_date) - 1) <= TRUNC(pd_trx_date) --
27292027
AND nvl(qlh.end_date_active
,TRUNC(pd_trx_date) + 1) >= TRUNC(pd_trx_date) --
27292027
AND nvl(qlh.active_flag
,'N') = 'Y')
AND ROWNUM=1; -- 27292027
--Adding Trunc to handle 27557135

CURSOR c_category_set_name IS
SELECT category_set_name
FROM mtl_default_category_sets_fk_v
WHERE functional_area_desc = 'Order Entry';
CURSOR c_get_av_by_category_set(cv_category_set_name VARCHAR2) IS
SELECT b.operand list_price
FROM qp_list_lines b
,qp_pricing_attributes c
WHERE b.list_header_id = pn_assessable_price_list_id
AND c.list_line_id = b.list_line_id
AND c.product_uom_code = pv_transaction_uom
AND TRUNC(pd_trx_date) BETWEEN nvl(b.start_date_active
,TRUNC(pd_trx_date)) AND nvl(b.end_date_active
,TRUNC(pd_trx_date))
AND EXISTS (SELECT 'x'
FROM mtl_item_categories_v d
WHERE d.category_set_name = cv_category_set_name
AND d.inventory_item_id = pn_item_id
AND c.product_attr_value = decode(c.product_attr_value
,'ALL'
,c.product_attr_value
,to_char(d.category_id)));
CURSOR c_get_av_primary_uom(cp_item qp_list_lines_v.product_attribute_context
%TYPE) IS
SELECT operand
,qppr.product_uom_code list_price_uom_code
FROM qp_list_lines qpll
,qp_pricing_attributes qppr
WHERE qpll.list_line_id = qppr.list_line_id
AND qpll.list_header_id = pn_assessable_price_list_id
AND qppr.product_attribute_context = cp_item
AND qppr.product_attr_value = to_char(pn_item_id)
AND TRUNC(pd_trx_date) BETWEEN nvl(qpll.start_date_active
,TRUNC(pd_trx_date)) AND
nvl(qpll.end_date_active
,TRUNC(pd_trx_date))
AND nvl(primary_uom_flag
,'N') = 'Y'
AND EXISTS
(SELECT 1
FROM qp_list_headers qlh
WHERE qlh.list_header_id = qpll.list_header_id
AND TRUNC(pd_trx_date) BETWEEN nvl(qlh.start_date_active
,TRUNC(pd_trx_date)) AND
nvl(qlh.end_date_active

,TRUNC(pd_trx_date))
AND nvl(qlh.active_flag
,'N') = 'Y');
CURSOR c_get_av_other_uom(cp_item qp_list_lines_v.product_attribute_context
%TYPE) IS
SELECT operand
,qppr.product_uom_code list_price_uom_code
FROM qp_list_lines qpll
,qp_pricing_attributes qppr
WHERE qpll.list_line_id = qppr.list_line_id
AND qpll.list_header_id = pn_assessable_price_list_id
AND qppr.product_attribute_context = cp_item
AND qppr.product_attr_value = to_char(pn_item_id)

/* AND TO_DATE(pd_trx_date,'YYYY/MM/DD') BETWEEN nvl(TO_DATE


(qpll.start_date_active,'YYYY/MM/DD')
,TO_DATE(pd_trx_date,'YYYY/MM/DD') ) AND
nvl(TO_DATE(qpll.end_date_active,'YYYY/MM/DD')

,TO_DATE(pd_trx_date,'YYYY/MM/DD'))*/
/* 27622360*/
AND TRUNC(pd_trx_date) BETWEEN
nvl(qpll.start_date_active,TRUNC(pd_trx_date) )
AND nvl(qpll.end_date_active,TRUNC(pd_trx_date))
AND EXISTS
(SELECT 1
FROM qp_list_headers qlh
WHERE qlh.list_header_id = qpll.list_header_id
/*AND TO_DATE(pd_trx_date,'YYYY/MM/DD') BETWEEN
nvl(TO_DATE(qlh.start_date_active,'YYYY/MM/DD')
,TO_DATE(pd_trx_date,'YYYY/MM/DD')) AND
nvl(TO_DATE(qlh.end_date_active,'YYYY/MM/DD')

,TO_DATE(pd_trx_date,'YYYY/MM/DD'))*/
/*27622360*/
AND TRUNC(pd_trx_date) BETWEEN nvl(qlh.start_date_active
,TRUNC(pd_trx_date)) AND
nvl(qlh.end_date_active

,TRUNC(pd_trx_date))
AND nvl(qlh.active_flag
,'N') = 'Y');

lv_category_set_name VARCHAR2(30);
ln_assessable_price NUMBER;
lv_list_primary_uom_code qp_pricing_attributes.product_uom_code%TYPE;
ln_uom_conv_rate NUMBER;
lv_return_status VARCHAR2(30);
lv_api_name CONSTANT VARCHAR2(50) := 'get_assessable_price';
BEGIN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----Begin----' || '()+');
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Input parameters: pn_assessable_price_list_id ,' ||
pn_assessable_price_list_id ||
'pv_transaction_uom ,' || pv_transaction_uom || 'pn_item_id ,'
|| pn_item_id || 'pd_trx_date ,' ||
pd_trx_date||',SYSDATE'||SYSDATE);
END IF;
pv_process_status := FND_API.G_RET_STS_SUCCESS;
--1. Check whether there is more than one Item-UOM combination existing
-- in used AV list for the Item selected in the transaction.
jai_tax_determination_pkg.check_avlist_validation(pn_assessable_price_list_id
,pn_item_id
,pd_trx_date
,lv_return_status);

IF lv_return_status <> FND_API.G_RET_STS_SUCCESS THEN


pv_process_status := lv_return_status;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Return error when call check_avlist_validation');
END IF;

RETURN;
END IF;
OPEN c_category_set_name;
FETCH c_category_set_name
INTO lv_category_set_name;
CLOSE c_category_set_name;

IF pn_assessable_price_list_id IS NOT NULL THEN


OPEN c_get_assessable_value('ITEM');

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----Begin----' || '()+');
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Inside ITEM parameters: pn_assessable_price_list_id ,' ||
pn_assessable_price_list_id ||
'pv_transaction_uom ,' || pv_transaction_uom || 'pn_item_id ,'
|| pn_item_id || 'pd_trx_date ,' ||
pd_trx_date||',SYSDATE'||SYSDATE);
END IF;

FETCH c_get_assessable_value
INTO ln_assessable_price;
CLOSE c_get_assessable_value;
IF ln_assessable_price IS NULL THEN
OPEN c_get_av_by_category_set(lv_category_set_name);
FETCH c_get_av_by_category_set
INTO ln_assessable_price;
CLOSE c_get_av_by_category_set;
IF ln_assessable_price IS NULL THEN
OPEN c_get_av_primary_uom('ITEM');
FETCH c_get_av_primary_uom
INTO ln_assessable_price
,lv_list_primary_uom_code;
CLOSE c_get_av_primary_uom;
IF lv_list_primary_uom_code IS NOT NULL THEN
inv_convert.inv_um_conversion(pv_transaction_uom
,lv_list_primary_uom_code
,pn_item_id
,ln_uom_conv_rate);
IF nvl(ln_uom_conv_rate
,0) <= 0 THEN
inv_convert.inv_um_conversion(pv_transaction_uom
,lv_list_primary_uom_code
,0
,ln_uom_conv_rate);
IF nvl(ln_uom_conv_rate
,0) <= 0 THEN
ln_uom_conv_rate := 0;
END IF;
END IF;

END IF;
ln_assessable_price := nvl(ln_assessable_price
,0) * ln_uom_conv_rate;
IF nvl(ln_assessable_price
,0) = 0 THEN
OPEN c_get_av_other_uom('ITEM');
FETCH c_get_av_other_uom
INTO ln_assessable_price
,lv_list_primary_uom_code;
CLOSE c_get_av_other_uom;
IF lv_list_primary_uom_code IS NOT NULL THEN
inv_convert.inv_um_conversion(pv_transaction_uom
,lv_list_primary_uom_code
,pn_item_id
,ln_uom_conv_rate);
IF nvl(ln_uom_conv_rate
,0) <= 0 THEN
inv_convert.inv_um_conversion(pv_transaction_uom
,lv_list_primary_uom_code
,0
,ln_uom_conv_rate);
IF nvl(ln_uom_conv_rate
,0) <= 0 THEN
ln_uom_conv_rate := 0;
END IF;
END IF;

END IF;
ln_assessable_price := nvl(ln_assessable_price
,0) * ln_uom_conv_rate;
END IF;
END IF;

END IF;

END IF;
pn_assessable_price := ln_assessable_price;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'----return assessable price:' ||
to_char(ln_assessable_price));
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
EXCEPTION
WHEN OTHERS THEN
pv_process_status := FND_API.G_RET_STS_UNEXP_ERROR;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,SQLERRM);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
END get_assessable_price;

/*---------------------------------------------------------------------------------
---------------------------------+
| Created By : Wenqiong Zhou
|
| Creation Date : 10/Apr/2013
|
| Bug Number/ER Name : Phase IV Tax Determination
|
| SubProgram Name : check_avlist_validation
|
| Type : PROCEDURE
|
| Purpose : This procedure is to check avlist valid or not. mostly
like the existing procedure |
| Jai_Avlist_Validate_Pkg.Check_AvList_Validation
|
| TDD Reference :
|
| Assumptions :
|
| Called From : called by get_assessable_price
|

|----------------------------------------------------------------------------------
--------------------------------|
| parameters IN/OUT Type Required
Description and Purpose |
| ------------ -------- ------
---------- ------------------------- |
| pn_pricing_list_id IN NUMBER yes
AV Price List id |
| pn_item_id IN NUMBER yes
ITEM id |
| pd_trx_date IN NUMBER yes
trx_date |
| pv_process_status OUT VARCHAR2 yes
Process status |

*----------------------------------------------------------------------------------
---------------------------------*/
PROCEDURE check_avlist_validation
(
pn_pricing_list_id IN NUMBER
,pn_item_id IN NUMBER
,pd_trx_date IN DATE
,pv_process_status OUT NOCOPY VARCHAR2
) IS
CURSOR check_category_exist_cur(pn_list_header_id NUMBER) IS
SELECT COUNT(1)
FROM qp_list_lines a
,qp_list_lines_v b
WHERE a.list_line_id = b.list_line_id
AND b.product_attribute = 'PRICING_ATTRIBUTE2'
AND a.list_header_id = pn_list_header_id;
-- Get category_set_name
CURSOR category_set_name_cur IS
SELECT category_set_name
FROM mtl_default_category_sets_fk_v
WHERE functional_area_desc = 'Order Entry';

CURSOR check_item_category_cur
(
pn_list_header_id NUMBER
,cv_category_set_name VARCHAR2
) IS
SELECT micv.category_id category_id
FROM qp_list_lines ql1
,qp_pricing_attributes qp1
,mtl_item_categories_v micv
,qp_list_lines ql2
,qp_pricing_attributes qp2
WHERE ql1.list_header_id = pn_list_header_id
AND ql1.list_line_id = qp1.list_line_id
AND qp1.product_attr_value = to_char(micv.category_id)
AND micv.inventory_item_id = nvl(pn_item_id
,micv.inventory_item_id)
AND micv.category_set_name = cv_category_set_name
AND qp2.product_attr_value = to_char(micv.inventory_item_id)
AND qp1.list_header_id = qp2.list_header_id
AND ql2.list_line_id = qp2.list_line_id
AND qp1.product_uom_code = qp2.product_uom_code
AND pd_trx_date BETWEEN nvl(ql1.start_date_active
,pd_trx_date) AND nvl(ql1.end_date_active
,SYSDATE)
AND pd_trx_date BETWEEN nvl(ql2.start_date_active
,pd_trx_date) AND nvl(ql2.end_date_active
,SYSDATE)
/*Added both conditions of product_attribute by mmurtuza for bug
13915552*/
AND qp1.product_attribute = 'PRICING_ATTRIBUTE2'
AND qp2.product_attribute = 'PRICING_ATTRIBUTE1'
GROUP BY micv.inventory_item_id
,micv.category_id;
-- Check same UOM ,whether multiple item categories that contains the same item
existing in a same price list.
CURSOR check_multi_category_cur
(
pn_list_header_id NUMBER
,cv_category_set_name VARCHAR2
) IS
SELECT qp.product_uom_code uom_code
,COUNT(DISTINCT qp.product_attr_value) category_number
,micv.inventory_item_id
FROM qp_list_lines ql
,qp_pricing_attributes qp
,mtl_item_categories_v micv
WHERE ql.list_header_id = pn_list_header_id
AND ql.list_line_id = qp.list_line_id
AND micv.inventory_item_id = nvl(pn_item_id
,micv.inventory_item_id)
AND micv.category_set_name = cv_category_set_name
AND to_char(micv.category_id) = qp.product_attr_value
AND pd_trx_date BETWEEN nvl(ql.start_date_active
,pd_trx_date) AND nvl(ql.end_date_active
,SYSDATE)
GROUP BY qp.product_uom_code
,micv.inventory_item_id;

lv_api_name CONSTANT VARCHAR2(50) := 'check_avlist_validation';


ln_category_count NUMBER;
lv_category_set_name mtl_category_sets_tl.category_set_name%TYPE;
ln_category_id NUMBER;
le_multi_row EXCEPTION;

BEGIN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----Begin----' || '()+');
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Input parameters:' || pn_pricing_list_id || ' ,pn_item_id' ||
pn_item_id || ' ,pd_trx_date' ||
pd_trx_date);
END IF;
pv_process_status := FND_API.G_RET_STS_SUCCESS;
OPEN category_set_name_cur;
FETCH category_set_name_cur
INTO lv_category_set_name;
CLOSE category_set_name_cur;

OPEN check_category_exist_cur(pn_pricing_list_id);
FETCH check_category_exist_cur
INTO ln_category_count;
CLOSE check_category_exist_cur;
IF ln_category_count > 0 THEN
-- Check same UOM ,whether item and item category that contains the same item
existing in a same price list.
OPEN check_item_category_cur(pn_pricing_list_id
,lv_category_set_name);
FETCH check_item_category_cur
INTO ln_category_id;
CLOSE check_item_category_cur;

IF ln_category_id IS NOT NULL THEN


RAISE le_multi_row;
END IF;

-- Check same UOM ,whether multiple item categories that contains the same
item existing in a same price list.
FOR multi_category_csr IN check_multi_category_cur(pn_pricing_list_id
,lv_category_set_name) LOOP
IF multi_category_csr.category_number > 1 THEN
RAISE le_multi_row;
END IF;
END LOOP;
END IF; -- ln_category_count > 0 ends
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
EXCEPTION
WHEN le_multi_row THEN
pv_process_status := FND_API.G_RET_STS_UNEXP_ERROR;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'There are multiple item categories that contains the same
item existing in a same price list.');
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
app_exception.raise_exception;
WHEN OTHERS THEN
pv_process_status := FND_API.G_RET_STS_UNEXP_ERROR;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,SQLERRM);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
END check_avlist_validation;

/*---------------------------------------------------------------------------------
---------------------------------+
| Created By : Wenqiong Zhou
|
| Creation Date : 10/Apr/2013
|
| Bug Number/ER Name : Phase IV Tax Determination
|
| SubProgram Name : apply_exception_rules
|
| Type : PROCEDURE
|
| Purpose : This procedure is to apply exception rule if any
exception setup at tax rate |
|
|
| TDD Reference : Section 6.22
|
| Assumptions :
|
| Called From : called by calculate_tax
|

|----------------------------------------------------------------------------------
--------------------------------|
| parameters IN/OUT Type Required
Description and Purpose |
| ------------ -------- ------ ----------
------------------------- |
| pv_tax_rate_classification IN jai_tax_lines.
|
| tax_rate_classification%TYPE yes
tax_rate_classification |
| pn_standard_rate IN jai_tax_lines.
|
| pn_standard_rate%TYPE yes
standard rate |
| pn_actual_rate OUT NUMBER yes
Actual rate after apply exception rule|
| pv_process_status OUT VARCHAR2 yes
Process status |

*----------------------------------------------------------------------------------
---------------------------------*/
PROCEDURE apply_exception_rules
(
pv_tax_rate_classification IN jai_tax_lines.tax_rate_classification%TYPE
,pn_standard_rate IN jai_tax_lines.standard_rate%TYPE
,pn_actual_rate OUT NOCOPY jai_tax_lines.tax_rate_percentage%TYPE
,pv_process_status OUT NOCOPY VARCHAR2
) IS
lv_api_name CONSTANT VARCHAR2(50) := 'apply_exception_rules';
BEGIN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----Begin----' || '()+');
END IF;

pv_process_status := FND_API.G_RET_STS_SUCCESS;
IF pv_tax_rate_classification IS NOT NULL
AND nvl(pn_standard_rate
,0) <> 0 THEN
pn_actual_rate := pn_standard_rate;
END IF;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'return pn_actual_rate is:' || to_char(pn_actual_rate));
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;

EXCEPTION
WHEN OTHERS THEN
pv_process_status := FND_API.G_RET_STS_UNEXP_ERROR;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,SQLERRM);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;

END apply_exception_rules;

/*---------------------------------------------------------------------------------
------------------------------+
| Created By : Wenqiong Zhou
|
| Creation Date : 10/Apr/2013
|
| Bug Number/ER Name : Phase IV Tax Determination
|
| SubProgram Name : apply_abatement_rules
|
| Type : PROCEDURE
|
| Purpose : This procedure is to apply abatement rule if any
exception setup at tax rate |
|
|
| TDD Reference : Section 6.22
|
| Assumptions :
|
| Called From : called by calculate_tax
|

|----------------------------------------------------------------------------------
-----------------------------|
| parameters IN/OUT Type
Required Description and Purpose |
| ------------ -------- ------
---------- ------------------------- |
| pv_abatement_type IN jai_tax_lines.
|
| tax_rate_abatement_type%TYPE
yes abatement type |
| pn_abatement_percentage IN jai_tax_lines.
|
| abatement_percentage%TYPE
yes abatement rate |
| pn_item_id IN jai_tax_lines.item_id%TYPE
yes |
| pv_tax_regime_code IN jai_tax_lines.tax_regime_code%TYPE
yes |
| pn_organization_id IN jai_tax_lines.organization_id%TYPE
yes |
| pn_line_amount IN jai_tax_lines.line_amt%TYPE
yes |
| pn_tax_rate_percentage IN jai_tax_lines.tax_rate_percentage%TYPE
yes |
| pn_actual_line_amt OUT jai_tax_lines.line_amt%TYPE
yes |
| pn_actual_tax_rate OUT jai_tax_lines.tax_rate_percentage%TYPE
yes |
| pv_process_status OUT VARCHAR2
yes Process status |

*----------------------------------------------------------------------------------
------------------------------*/
PROCEDURE apply_abatement_rules
(
pv_abatement_type IN jai_tax_lines.tax_rate_abatement_type%TYPE
,pn_abatement_percentage IN jai_tax_lines.abatement_percentage%TYPE
,pn_item_id IN jai_tax_lines.item_id%TYPE
,pv_tax_regime_id IN jai_tax_lines.tax_regime_id%TYPE
,pn_organization_id IN jai_tax_lines.organization_id%TYPE
,pn_line_amount IN jai_tax_lines.line_amt%TYPE
,pn_tax_rate_percentage IN jai_tax_lines.tax_rate_percentage%TYPE
,pn_actual_line_amt OUT NOCOPY jai_tax_lines.line_amt%TYPE
,pn_actual_tax_rate OUT NOCOPY jai_tax_lines.tax_rate_percentage%TYPE
,pv_process_status OUT NOCOPY VARCHAR2
) IS
lv_item_abatement_flag jai_rgm_itm_tmpl_attrs.attribute_value%TYPE;
lv_process_flag VARCHAR2(30);
lv_process_msg VARCHAR2(150);
lv_api_name CONSTANT VARCHAR2(50) := 'apply_abatement_rules';
BEGIN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----Begin----' || '()+');
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Input parameters: pv_abatement_type: ' || pv_abatement_type
|| ' ,pn_abatement_percentage: ' ||
pn_abatement_percentage || ' ,pn_item_id: ' || pn_item_id || '
,pv_tax_regime_id: ' ||
pv_tax_regime_id || ' ,pn_organization_id: ' ||
pn_organization_id || ' ,pn_line_amount: ' ||
pn_line_amount || ' ,pn_tax_rate_percentage: ' ||
pn_tax_rate_percentage);
END IF;
pv_process_status := FND_API.G_RET_STS_SUCCESS;
pn_actual_line_amt := pn_line_amount;
pn_actual_tax_rate := pn_tax_rate_percentage;
IF pv_abatement_type = 'ON_INVOICE_VALUE' THEN
IF pn_item_id IS NULL THEN
--ON_INVOICE_VALUE only apply to non item transaction
pn_actual_line_amt := nvl(pn_line_amount
,0) * (100 - nvl(pn_abatement_percentage
,0)) / 100;
END IF;
ELSIF pv_abatement_type = 'ON_TAX_RATE' THEN
--Get item's attribute 'abatement'
jai_item_classification_pkg.jai_get_attrib(p_regime_id =>
pv_tax_regime_id
,p_organization_id =>
pn_organization_id
,p_inventory_item_id => pn_item_id
,p_attribute_code => 'ABATEMENT'
,p_attribute_value =>
lv_item_abatement_flag
,p_process_flag =>
lv_process_flag
,p_process_msg =>
lv_process_msg);
IF lv_process_flag <> jai_constants.successful THEN
--FND_API.G_RET_STS_SUCCESS THEN
-- pv_process_status := lv_process_flag;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'call jai_get_attrib, return status:' ||
pv_process_status || ' msg :' || lv_process_msg);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
-- RETURN;
END IF;
IF nvl(lv_item_abatement_flag
,'N') = 'Y' THEN
pn_actual_tax_rate := nvl(pn_tax_rate_percentage
,0) * (100 - nvl(pn_abatement_percentage
,0)) / 100;
END IF;
END IF;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'return pn_actual_rate is:' || to_char(pn_actual_tax_rate));
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;

EXCEPTION
WHEN OTHERS THEN
pv_process_status := FND_API.G_RET_STS_UNEXP_ERROR;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,SQLERRM);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;

END apply_abatement_rules;

/*---------------------------------------------------------------------------------
------------------------+
| Created By : Wenqiong Zhou
|
| Creation Date : 10/Apr/2013
|
| Bug Number/ER Name : Phase IV Tax Determination
|
| SubProgram Name : validate_tax_regime
|
| Type : PROCEDURE
|
| Purpose : This procedure is to check if tax regime is effective
|
|
|
| TDD Reference : Section 6.17
|
| Assumptions :
|
| Called From : called by calculate_tax
|

|----------------------------------------------------------------------------------
-----------------------|
| parameters IN/OUT Type Required
Description and Purpose |
| ------------ -------- ------ ----------
------------------------- |
| pn_tax_type_id IN jai_regimes.
|
| regime_id%TYPE yes
tax regime id |
| pv_process_status OUT VARCHAR2 yes
Process status |

*----------------------------------------------------------------------------------
------------------------*/
PROCEDURE validate_tax_regime
(
pn_tax_regime_id IN jai_regimes.regime_id%TYPE
,pd_tax_point_date IN DATE
,pv_return_status OUT NOCOPY VARCHAR2
) IS
CURSOR c_validate_flag IS
SELECT 'Y'
FROM jai_regimes
WHERE regime_id = pn_tax_regime_id
-- commented out by zhiwei.xin for bug#18619014 begin
/*AND NVL( effective_from, pd_tax_point_date - 1) <= pd_tax_point_date
AND NVL( effective_to, pd_tax_point_date + 1) >= pd_tax_point_date*/
-- commented out by zhiwei.xin for bug#18619014 end.
-- added by zhiwei.xin for bug#18619014 begin
AND nvl(effective_from
,nvl(pd_tax_point_date
,SYSDATE) - 1) <= nvl(pd_tax_point_date
,SYSDATE)
AND nvl(effective_to
,nvl(pd_tax_point_date
,SYSDATE) + 1) >= nvl(pd_tax_point_date
,SYSDATE)
-- added by zhiwei.xin for bug#18619014 end.
;
lv_api_name CONSTANT VARCHAR2(50) := 'validate_tax_regime';
lv_validate_flag VARCHAR2(1);
BEGIN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----begin----' || '()+');
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Input regime id: ' || pn_tax_regime_id || '
pd_tax_point_date:' || pd_tax_point_date);
END IF;

pv_return_status := FND_API.G_RET_STS_SUCCESS;
OPEN c_validate_flag;
FETCH c_validate_flag
INTO lv_validate_flag;
CLOSE c_validate_flag;

IF nvl(lv_validate_flag
,'N') = 'N' THEN
pv_return_status := FND_API.G_RET_STS_ERROR;
END IF;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'return status as :' || pv_return_status);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
END validate_tax_regime;

/*---------------------------------------------------------------------------------
---------------------------------+
| Created By : Wenqiong Zhou
|
| Creation Date : 10/Apr/2013
|
| Bug Number/ER Name : Phase IV Tax Determination
|
| SubProgram Name : validate_tax_type
|
| Type : PROCEDURE
|
| Purpose : This procedure is to check if tax type is effective
|
|
|
| TDD Reference : Section 6.18
|
| Assumptions :
|
| Called From : called by calculate_tax
|

|----------------------------------------------------------------------------------
--------------------------------|
| parameters IN/OUT Type
Required Description and Purpose |
| ------------ -------- ------
---------- ------------------------- |
| pn_tax_type_id IN jai_tax_types.
|
| tax_type_id%TYPE yes
tax type id |
| pv_process_status OUT VARCHAR2
yes Process status |

*----------------------------------------------------------------------------------
---------------------------------*/
PROCEDURE validate_tax_type
(
pn_tax_type_id IN jai_tax_types.tax_type_id%TYPE
,pd_tax_point_date IN DATE
,pv_return_status OUT NOCOPY VARCHAR2
) IS
CURSOR c_validate_flag IS
SELECT 'Y'
FROM jai_tax_types
WHERE tax_type_id = pn_tax_type_id
AND nvl(effective_from
,nvl(pd_tax_point_date
,SYSDATE) - 1) <= nvl(pd_tax_point_date
,SYSDATE)
AND nvl(effective_to
,nvl(pd_tax_point_date
,SYSDATE) + 1) >= nvl(pd_tax_point_date
,SYSDATE);
lv_api_name CONSTANT VARCHAR2(50) := 'validate_tax_type';
lv_validate_flag VARCHAR2(1);
BEGIN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----begin----' || '()+');
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Input pn_tax_type_id id: ' || pn_tax_type_id || '
pd_tax_point_date:' || pd_tax_point_date);
END IF;

pv_return_status := FND_API.G_RET_STS_SUCCESS;
OPEN c_validate_flag;
FETCH c_validate_flag
INTO lv_validate_flag;
CLOSE c_validate_flag;

IF nvl(lv_validate_flag
,'N') = 'N' THEN
pv_return_status := FND_API.G_RET_STS_ERROR;
END IF;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'return status as :' || pv_return_status);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
EXCEPTION
WHEN OTHERS THEN
pv_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,SQLERRM);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;

END validate_tax_type;

/*---------------------------------------------------------------------------------
-----------------------+
| Created By : Wenqiong Zhou
|
| Creation Date : 10/Apr/2013
|
| Bug Number/ER Name : Phase IV Tax Determination
|
| SubProgram Name : validate_tax_rate
|
| Type : PROCEDURE
|
| Purpose : This procedure is to check if tax rate is effective
|
|
|
| TDD Reference : Section 6.19
|
| Assumptions :
|
| Called From : called by calculate_tax
|

|----------------------------------------------------------------------------------
----------------------|
| parameters IN/OUT Type Required
Description and Purpose |
| ------------ -------- ------ ----------
------------------------- |
| pn_tax_type_id IN jai_tax_rates.
|
| tax_rate_id%TYPE yes
tax rate id |
| pv_process_status OUT VARCHAR2 yes
Process status |

*----------------------------------------------------------------------------------
-----------------------*/
PROCEDURE validate_tax_rate
(
pn_tax_rate_id IN jai_tax_rates.tax_rate_id%TYPE
,pd_tax_point_date IN DATE
,pv_return_status OUT NOCOPY VARCHAR2
) IS
CURSOR c_validate_flag IS
SELECT 'Y'
FROM jai_tax_rates rate
,jai_tax_rate_details rate_detail
WHERE rate.tax_rate_id = rate_detail.tax_rate_id
AND rate.tax_rate_type <> 'ADHOC_AMOUNT'
AND rate.tax_rate_id = pn_tax_rate_id
AND nvl(rate_detail.effective_from
,nvl(pd_tax_point_date
,SYSDATE) - 1) <= nvl(pd_tax_point_date
,SYSDATE)
AND nvl(rate_detail.effective_to
,nvl(pd_tax_point_date
,SYSDATE) + 1) >= nvl(pd_tax_point_date
,SYSDATE);

lv_api_name CONSTANT VARCHAR2(50) := 'validate_tax_rate';


lv_validate_flag VARCHAR2(1) := 'Y';
BEGIN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----begin----' || '()+');
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Input pn_tax_rate_id id: ' || pn_tax_rate_id || '
pd_tax_point_date:' || pd_tax_point_date);
END IF;
pv_return_status := FND_API.G_RET_STS_SUCCESS;
OPEN c_validate_flag;
FETCH c_validate_flag
INTO lv_validate_flag;
CLOSE c_validate_flag;

IF nvl(lv_validate_flag
,'N') = 'N' THEN
pv_return_status := FND_API.G_RET_STS_ERROR;
END IF;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'return status as :' || pv_return_status);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
EXCEPTION
WHEN OTHERS THEN
pv_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,SQLERRM);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;

END validate_tax_rate;

/*---------------------------------------------------------------------------------
-------------------------+
| Created By : Wenqiong Zhou
|
| Creation Date : 10/Apr/2013
|
| Bug Number/ER Name : Phase IV Tax Determination
|
| SubProgram Name : apply_rounding_rule
|
| Type : PROCEDURE
|
| Purpose : This procedure is to do rounding based on rounding rule
|
|
|
| TDD Reference : Section 6.25
|
| Assumptions :
|
| Called From : called by calculate_tax /calculate_tax_pvt
|

|----------------------------------------------------------------------------------
------------------------|
| parameters IN/OUT Type Required
Description and Purpose |
| ------------ -------- ------ ----------
------------------------- |
| pv_rounding_rule IN VARCHAR2 yes
|
| pv_rounding_factor IN VARCHAR2 yes
|
| pn_unrounded_amt IN NUMBER yes
|
| pn_rounded_amt OUT NUMBER yes
|
| pv_process_status OUT VARCHAR2 yes
Process status |

*----------------------------------------------------------------------------------
-------------------------*/
PROCEDURE apply_rounding_rule
(
pv_rounding_rule IN VARCHAR2
,pv_rounding_factor IN VARCHAR2
,pn_unrounded_amt IN NUMBER
,pn_rounded_amt OUT NOCOPY NUMBER
,pv_return_status OUT NOCOPY VARCHAR2
) IS
ln_rounding_factor NUMBER;
ln_unrounded_amt NUMBER;
ln_last_digit_num NUMBER;
lv_api_name CONSTANT VARCHAR2(50) := 'apply_rounding_rule';
BEGIN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----begin----' || '()+');
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'Input parameters: pv_rounding_rule: ' ||
pv_rounding_rule ||
',pv_rounding_factor:' || pv_rounding_factor ||
',pn_unrounded_amt:' || pn_unrounded_amt);
END IF;
pv_return_status := FND_API.G_RET_STS_SUCCESS;
pn_rounded_amt := pn_unrounded_amt; --Initialize the output para in case of
no rounding rule setup

IF pv_rounding_rule = 'ND' THEN


--Neareast Decimal
pn_rounded_amt := round(pn_unrounded_amt
,to_number(pv_rounding_factor));
ELSIF pv_rounding_rule IN ('NU'
,'NR') THEN
IF pv_rounding_factor IN ('0'
,'1'
,'10'
,'100'
,'1000') THEN
-- ln_rounding_factor := -to_number(pv_rounding_factor)/10; --Commented out
for bug 17084109 by Wenqiong
--Added for bug 17084109 by Wenqiong begin
IF pv_rounding_factor IN ('0'
,'1') THEN
ln_rounding_factor := 0;
ELSIF pv_rounding_factor IN ('10') THEN
ln_rounding_factor := -1;
ELSIF pv_rounding_factor IN ('100') THEN
ln_rounding_factor := -2;
ELSIF pv_rounding_factor IN ('1000') THEN
ln_rounding_factor := -3;
END IF;
--Added for bug 17084109 by Wenqiong end

pn_rounded_amt := round(pn_unrounded_amt
,ln_rounding_factor);

ELSIF pv_rounding_factor = '5' THEN


ln_unrounded_amt := round(pn_unrounded_amt
,-1); --1st, rounded to 10.
ln_last_digit_num := round(MOD(pn_unrounded_amt
,10)
,0); --2nd, get last digit.
IF ln_last_digit_num IN (3
,4) THEN
pn_rounded_amt := ln_unrounded_amt + 5;
ELSIF ln_last_digit_num IN (5
,6
,7) THEN
pn_rounded_amt := ln_unrounded_amt - 5;
ELSE
pn_rounded_amt := ln_unrounded_amt;
END IF;
END IF;
END IF;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'output parameters: pn_rounded_amt: ' ||
pn_rounded_amt);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
EXCEPTION
WHEN OTHERS THEN
pv_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,SQLERRM);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
END apply_rounding_rule;

/*---------------------------------------------------------------------------------
------------------------+
| Created By : Wenqiong Zhou
|
| Creation Date : 10/Apr/2013
|
| Bug Number/ER Name : Phase IV Tax Determination
|
| SubProgram Name : get_rounding_rules
|
| Type : PROCEDURE
|
| Purpose : This procedure is to get rounding rules from setup
|
|
|
| TDD Reference : Section 6.24
|
| Assumptions :
|
| Called From : called by prepare_tax_lines_tbl
|

|----------------------------------------------------------------------------------
-----------------------|
| parameters IN/OUT Type Required
Description and Purpose |
| ------------ -------- ------ ----------
------------------------- |
| pn_org_id IN NUMBER yes
|
| pn_organization_id IN NUMBER yes
|
| pn_location_id IN NUMBER yes
|
| pn_regime_id IN NUMBER yes
|
| pv_tax_rounded_to OUT VARCHAR2 yes
|
| pv_tax_rounding_factor OUT VARCHAR2 yes
|
| pv_taxable_rounded_to OUT VARCHAR2 yes
|
| pv_taxable_rounding_factor OUT VARCHAR2 yes
|
| pv_qty_rounding_rule OUT VARCHAR2 yes
|
| pv_qty_rounding_factor OUT VARCHAR2 yes
|
| pv_process_status OUT VARCHAR2 yes
Process status |

*----------------------------------------------------------------------------------
------------------------*/
PROCEDURE get_rounding_rules
(
pn_org_id IN NUMBER
,pn_organization_id IN NUMBER
,pn_location_id IN NUMBER
,pn_regime_id IN NUMBER
,pv_tax_rounded_to OUT NOCOPY VARCHAR2
,pv_tax_rounding_factor OUT NOCOPY VARCHAR2
,pv_taxable_rounded_to OUT NOCOPY VARCHAR2
,pv_taxable_rounding_factor OUT NOCOPY VARCHAR2
,pv_qty_rounding_rule OUT NOCOPY VARCHAR2
,pv_qty_rounding_factor OUT NOCOPY VARCHAR2
,pv_process_status OUT NOCOPY VARCHAR2
) IS
/* Bug#18033001 start, change first party matching rule. */
/*
Cursor c_1st_party_rounding_rules(cv_rounding_basis Varchar2, cn_location_id
NUMBER) IS
SELECT rounded_to, rounded_factor
FROM JAI_TAX_OTHER_ROUNDING roundings
WHERE regime_id = pn_regime_id
AND rounding_basis = cv_rounding_basis
AND roundings.entity_code = 'FIRST_PARTY'
AND NVL( effective_from, SYSDATE - 1 ) <= SYSDATE
AND NVL( effective_to, SYSDATE + 1 ) >= SYSDATE
AND EXISTS (SELECT 1 FROM JAI_PARTY_REGS reg ,
JAI_REGIMES regime
WHERE reg.party_type_code = decode(regime.regime_type,'T','IO','W','OU')
AND reg.party_id =
decode(reg.party_type_code,'IO',pn_organization_id,'OU',pn_org_id)
AND nvl(reg.party_site_id,0) =
decode(reg.party_type_code,'IO',nvl(cn_location_id,0),0)
AND roundings.entity_id = reg.party_reg_id
AND NVL( regime.effective_from, SYSDATE - 1 ) <= SYSDATE
AND NVL( regime.effective_to, SYSDATE + 1 ) >= SYSDATE
);
*/
CURSOR c_1st_party_rounding_rules
(
cv_rounding_basis VARCHAR2
,cn_location_id NUMBER
,cn_party_reg_id NUMBER
) IS
SELECT jtor.rounded_to
,jtor.rounded_factor
FROM jai_tax_other_rounding jtor
-- ,jai_regimes jr 26513387
WHERE jtor.regime_id = pn_regime_id
--AND jr.regime_id = jtor.regime_id--26410163,hond performance 26513387
AND jtor.rounding_basis = cv_rounding_basis
AND jtor.entity_code = 'FIRST_PARTY'
AND jtor.entity_id = cn_party_reg_id
/* 26399170
(SELECT get_fp_matched_id(p_organization_id => pn_organization_id
,p_location_id => pn_location_id
,p_org_id => pn_org_id
,p_regime_type => jr.regime_type
,p_regime_id => pn_regime_id)
FROM dual)*/
AND nvl(jtor.effective_from
,SYSDATE - 1) <= SYSDATE
AND nvl(jtor.effective_to
,SYSDATE + 1) >= SYSDATE
/*AND nvl(jr.effective_from
,SYSDATE - 1) <= SYSDATE
AND nvl(jr.effective_to
,SYSDATE + 1) >= SYSDATE;26513387*/
;
/* Bug#18033001 end. */

CURSOR c_regime_rounding_rules(cv_rounding_basis VARCHAR2) IS


SELECT rounded_to
,rounding_rule
FROM jai_tax_rounding rnd
,jai_regimes regime
WHERE rnd.regime_id = pn_regime_id
AND rnd.regime_id = regime.regime_id
AND rnd.rounding_basis = cv_rounding_basis
AND nvl(rnd.effective_from
,SYSDATE - 1) <= SYSDATE
AND nvl(rnd.effective_to
,SYSDATE + 1) >= SYSDATE
AND nvl(regime.effective_from
,SYSDATE - 1) <= SYSDATE
AND nvl(regime.effective_to
,SYSDATE + 1) >= SYSDATE;

lv_api_name CONSTANT VARCHAR2(50) := 'get_rounding_rules';


ln_party_reg_id NUMBER;
BEGIN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----begin----' || '()+');
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'Input parameters: pn_org_id: ' || pn_org_id ||
',pn_organization_id:' ||
pn_organization_id || ',pn_location_id:' || pn_location_id ||
',pn_regime_id:' || pn_regime_id);
END IF;
pv_process_status := FND_API.G_RET_STS_SUCCESS;

/*26399170 ,start*/
/*
ln_party_Reg_id:=null;

ln_party_Reg_id :=get_fp_matched_id(p_organization_id => pn_organization_id


,p_location_id =>pn_location_id
,p_org_id =>pn_org_id
,p_regime_type => 'T'
,p_regime_id => pn_regime_id);

IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||
lv_api_name,'ln_party_Reg_id retrieved is '||ln_party_Reg_id);
END IF;
--end bug#26399170

OPEN c_1st_party_rounding_rules('TAX',pn_location_id,ln_party_Reg_id);--
26399170
FETCH c_1st_party_rounding_rules INTO
pv_tax_rounded_to,pv_tax_rounding_factor;
CLOSE c_1st_party_rounding_rules;
OPEN c_1st_party_rounding_rules('TAXABLE',pn_location_id,ln_party_Reg_id);--
26399170
FETCH c_1st_party_rounding_rules INTO
pv_taxable_rounded_to,pv_taxable_rounding_factor;
CLOSE c_1st_party_rounding_rules;
OPEN c_1st_party_rounding_rules('QUANTITY',pn_location_id,ln_party_Reg_id);--
26399170
FETCH c_1st_party_rounding_rules INTO
pv_qty_rounding_rule,pv_qty_rounding_factor;
CLOSE c_1st_party_rounding_rules;
--Added by Wenqiong for bug17227324 begin
IF nvl(pv_tax_rounded_to,'X') = 'X' AND nvl(pv_taxable_rounded_to,'X') = 'X'
AND nvl(pv_qty_rounding_rule,'X') = 'X' THEN--Get rounding rules from null
site

OPEN c_1st_party_rounding_rules('TAX',NULL,ln_party_Reg_id);--26399170
FETCH c_1st_party_rounding_rules INTO
pv_tax_rounded_to,pv_tax_rounding_factor;
CLOSE c_1st_party_rounding_rules;
OPEN c_1st_party_rounding_rules('TAXABLE',NULL,ln_party_Reg_id);--26399170
FETCH c_1st_party_rounding_rules INTO
pv_taxable_rounded_to,pv_taxable_rounding_factor;
CLOSE c_1st_party_rounding_rules;
OPEN c_1st_party_rounding_rules('QUANTITY',NULL,ln_party_Reg_id);--26399170
FETCH c_1st_party_rounding_rules INTO
pv_qty_rounding_rule,pv_qty_rounding_factor;
CLOSE c_1st_party_rounding_rules;
END IF;
--Added by Wenqiong for bug17227324 end
*/
IF nvl(pv_tax_rounded_to
,'X') = 'X'
AND nvl(pv_taxable_rounded_to
,'X') = 'X'
AND nvl(pv_qty_rounding_rule
,'X') = 'X' THEN
OPEN c_regime_rounding_rules('TAX');
FETCH c_regime_rounding_rules
INTO pv_tax_rounded_to
,pv_tax_rounding_factor;
CLOSE c_regime_rounding_rules;
OPEN c_regime_rounding_rules('TAXABLE');
FETCH c_regime_rounding_rules
INTO pv_taxable_rounded_to
,pv_taxable_rounding_factor;
CLOSE c_regime_rounding_rules;
OPEN c_regime_rounding_rules('QUANTITY');
FETCH c_regime_rounding_rules
INTO pv_qty_rounding_rule
,pv_qty_rounding_factor;
CLOSE c_regime_rounding_rules;
END IF;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'output parameters: pv_tax_rounded_to: ' ||
pv_tax_rounded_to ||
',pv_tax_rounding_factor:' || pv_tax_rounding_factor ||
',pv_taxable_rounded_to:' ||
pv_taxable_rounded_to || ',pv_taxable_rounding_factor:' ||
pv_taxable_rounding_factor ||
',pv_qty_rounding_rule:' || pv_qty_rounding_rule ||
',pv_qty_rounding_factor:' ||
pv_qty_rounding_factor);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
EXCEPTION
WHEN OTHERS THEN
pv_process_status := FND_API.G_RET_STS_UNEXP_ERROR;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,SQLERRM);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
END get_rounding_rules;

/*---------------------------------------------------------------------------------
------------------------------+
| Created By : Wenqiong Zhou
|
| Creation Date : 10/Apr/2013
|
| Bug Number/ER Name : Phase IV Tax Determination
|
| SubProgram Name : derive_tax_point_basis
|
| Type : PROCEDURE
|
| Purpose : This procedure is to derive tax point basis
|
|
|
| TDD Reference : Section
|
| Assumptions :
|
| Called From : called by prepare_tax_lines_tbl
|

|----------------------------------------------------------------------------------
-----------------------------|
| parameters IN/OUT Type Required
Description and Purpose |
| ------------ -------- ------ ----------
------------------------- |
| pn_application_id IN NUMBER yes
Application ID |
| pv_entity_code IN VARCHAR2 yes
Entity Code |
| pv_event_class_code IN VARCHAR2 yes
Event Class Code |
| pv_tax_type_tpb IN VARCHAR2 yes
Tax point basis at tax type |
| pv_tax_line_tpb OUT VARCHAR2 yes
Tax point basis derived |

*----------------------------------------------------------------------------------
------------------------------*/
PROCEDURE derive_tax_point_basis
(
pn_application_id IN NUMBER
,pv_entity_code IN VARCHAR2
,pv_event_class_code IN VARCHAR2
,pv_event_type_code IN VARCHAR2 --Added by Junjian
,pv_tax_type_tpb IN VARCHAR2
,pv_tax_line_tpb OUT NOCOPY VARCHAR2
) IS
CURSOR c_event_tpb IS
SELECT DISTINCT tax_point_basis
FROM jai_evnt_cls_options
WHERE application_id = pn_application_id
AND entity_code = pv_entity_code
AND event_class_code = pv_event_class_code
AND event_type_code = pv_event_type_code; --Added by Junjian;

lv_event_tpb jai_evnt_cls_options.tax_point_basis%TYPE;
ln_event_tpb NUMBER;
ln_tax_type_tpb NUMBER;
lv_api_name CONSTANT VARCHAR2(50) := 'derive_tax_point_basis';
BEGIN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '---Begin----' || '()+');
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Input parameter:pn_application_id,' || pn_application_id ||
',pv_entity_code:' || pv_entity_code ||
',pv_event_class_code:' || pv_event_class_code ||
',pv_event_type_code:' || pv_event_type_code ||
',pv_tax_type_tpb:' || pv_tax_type_tpb);
END IF;
--Added by Junjian for AP tax flow begin
OPEN c_event_tpb;
FETCH c_event_tpb
INTO lv_event_tpb;
CLOSE c_event_tpb;
--Added by Junjian for AP tax flow end

-- added by zhiwei.xin for O2C Accounting Changes begin


IF pv_entity_code = 'OE_ORDER_HEADERS'
AND pv_event_type_code = 'BOOK' THEN
lv_event_tpb := 'DELIVERY';
/*added elsif condition for redetermining the taxes at the shipment event*/
ELSIF pv_entity_code = 'SALES_ORDER_ISSUE'
AND pv_event_type_code = 'SHIPMENT_UPDATED' THEN
lv_event_tpb := 'DELIVERY';
END IF;

jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'lv_event_tpb arrived is ' ||
lv_event_tpb);
-- added by zhiwei.xin for O2C Accounting Changes end.

-- added by zhiwei.xin for bug#19828976 begin


IF pv_entity_code = 'TRANSACTIONS'
AND pv_event_type_code IN ('INV_UPDATE'
,'CM_UPDATE'
, 'INV_CREATE' --Added by Chris due to
bug#26599408
,'CM_CREATE' /*26678960*/
,'DM_CREATE'
,'DM_UPDATE') THEN
lv_event_tpb := 'INVOICE';
END IF;
-- added by zhiwei.xin for bug#19828976 end.

IF lv_event_tpb = 'DELIVERY' THEN


ln_event_tpb := tpb_delivery;
ELSIF lv_event_tpb = 'INVOICE' THEN
ln_event_tpb := tpb_invoice;
ELSIF lv_event_tpb = 'ACCOUNTING' THEN
ln_event_tpb := tpb_accounting;
ELSIF lv_event_tpb = 'PAYMENT' THEN
ln_event_tpb := tpb_payment;
END IF;

IF pv_tax_type_tpb = 'DELIVERY' THEN


ln_tax_type_tpb := tpb_delivery;
ELSIF pv_tax_type_tpb = 'INVOICE' THEN
ln_tax_type_tpb := tpb_invoice;
ELSIF pv_tax_type_tpb = 'ACCOUNTING' THEN
ln_tax_type_tpb := tpb_accounting;
ELSIF pv_tax_type_tpb = 'PAYMENT' THEN
ln_tax_type_tpb := tpb_payment;
END IF;

jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'ln_tax_type_tpb arrived is ' ||
ln_tax_type_tpb);

jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'lv_event_tpb arrived is ' ||
lv_event_tpb);
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'ln_event_tpb arrived is ' ||
ln_event_tpb);
IF nvl(ln_event_tpb
,99) > nvl(ln_tax_type_tpb
,0) THEN
pv_tax_line_tpb := NVL(lv_event_tpb,pv_tax_type_tpb);--added nvl condition
for bug#26678960
ELSE
pv_tax_line_tpb := pv_tax_type_tpb;
END IF;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Output parameter:pv_tax_line_tpb,' || pv_tax_line_tpb);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '---End----' || '()+');

END IF;
END derive_tax_point_basis;

/*---------------------------------------------------------------------------------
-------------------------+
| Created By : Wenqiong Zhou
|
| Creation Date : 10/Apr/2013
|
| Bug Number/ER Name : Phase IV Tax Determination
|
| SubProgram Name : populate_tax_lines
|
| Type : PROCEDURE
|
| Purpose : This procedure is to insert data into tax lines after
calculation |
|
|
| TDD Reference : Section 6.16
|
| Assumptions :
|
| Called From : called by determine_tax
|

|----------------------------------------------------------------------------------
-------------------------|
| parameters IN/OUT Type Required
Description and Purpose |
| ------------ -------- ------ ----------
------------------------- |
| p_tax_lines_tbl IN TAX_LINES_TBL yes Tax
Lines Table type |
| pv_process_status OUT VARCHAR2 yes
Process status |
| pv_process_message OUT VARCHAR2 yes
Process message |

*----------------------------------------------------------------------------------
------------------------*/
PROCEDURE populate_tax_lines
(
p_tax_lines_tbl IN OUT NOCOPY tax_lines_tbl
,pv_call_from IN VARCHAR2 DEFAULT NULL --Added by Qinglei for Receiving
09-Jul-2013
,pv_process_status OUT NOCOPY VARCHAR2
,pv_process_message OUT NOCOPY VARCHAR2
) IS
--Added by Qinglei for Receiving begin
CURSOR get_intf_tran_info(pn_interface_det_factor_id NUMBER) IS
SELECT interface_trx_hdr_id
,interface_transaction_id
FROM jai_det_factors_interface
WHERE interface_det_factor_id = pn_interface_det_factor_id;
ln_interface_trx_hdr_id NUMBER;
ln_interface_transaction_id NUMBER;
--Added by Qinglei for Receiving end

CURSOR c_tax_line_id IS
SELECT jai_tax_lines_s.nextval
FROM dual;

ln_tax_line_id NUMBER;
rec_tax_line jai_tax_lines%ROWTYPE;
lv_api_name CONSTANT VARCHAR2(50) := 'populate_tax_lines';
lv_process_status VARCHAR2(30);
lv_process_message VARCHAR2(4000); --Modified by Junjian on 08-01-2014
l_modifier_exists NUMBER :=0 ;--26523740
BEGIN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----begin----' || '()+');
END IF;
pv_process_status := FND_API.G_RET_STS_SUCCESS;
/*Added by Qinglei for bug#18395084 begin*/
IF nvl(p_tax_lines_tbl.count
,0) = 0 THEN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Count of p_tax_lines_tbl is 0. Return from
populate_tax_lines.');
END IF;
RETURN;
END IF;
/*Added by Qinglei for bug#18395084 end*/

FOR i IN p_tax_lines_tbl.first .. p_tax_lines_tbl.last LOOP


rec_tax_line := NULL;
ln_tax_line_id := NULL;
rec_tax_line := p_tax_lines_tbl(i);

/*Modified by qinglei for retroactive pricing on 08-Jan-2014 begin*/


IF rec_tax_line.tax_line_id IS NULL THEN
OPEN c_tax_line_id;
FETCH c_tax_line_id
INTO ln_tax_line_id;
CLOSE c_tax_line_id;
rec_tax_line.tax_line_id := ln_tax_line_id;
END IF;
/*Modified by qinglei for retroactive pricing on 08-Jan-2014 end*/

/*Start :AELLURU FOR 25370256 In case of Tax category id ussage accesable


value is not getting cascaded*/
IF rec_tax_line.user_entered_av IS NULL THEN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,' Deriving Accesable value from reference ' ||
'rec_tax_line.TAX_TYPE_ID' ||
rec_tax_line.tax_type_id ||
'rec_tax_line.APPLIED_FROM_TRX_ID->' ||
rec_tax_line.applied_from_trx_id ||
'rec_tax_line.APPLIED_FROM_TRX_LINE_ID = ' ||
rec_tax_line.applied_from_trx_line_id ||
'rec_tax_line.APPLIED_FROM_EVENT_CLASS_CODE' ||
rec_tax_line.applied_from_event_class_code);
END IF;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,' Deriving Accesable value from reference 2 ' ||
'rec_tax_line.TAX_TYPE_ID' ||
rec_tax_line.tax_type_id || 'rec_tax_line.REF_DOC_TRX_ID-
>' || rec_tax_line.ref_doc_trx_id ||
'rec_tax_line.REF_DOC_LINE_ID = ' ||
rec_tax_line.ref_doc_line_id);
END IF;
IF rec_tax_line.applied_from_trx_id IS NOT NULL
AND rec_tax_line.applied_from_trx_line_id IS NOT NULL
AND rec_tax_line.applied_from_event_class_code = 'SALES_ORDER_ISSUE'
THEN
BEGIN
SELECT user_entered_av
,assessable_price_list_id
INTO rec_tax_line.user_entered_av
,rec_tax_line.assessable_price_list_id
FROM jai_tax_lines
WHERE
/*26399170*/
trx_line_id = rec_tax_line.applied_from_trx_line_id
AND trx_id = rec_tax_line.applied_from_trx_id
AND trx_type = 'STANDARD'
AND tax_type_id = rec_tax_line.tax_type_id;
EXCEPTION
WHEN OTHERS THEN
rec_tax_line.user_entered_av := NULL;
rec_tax_line.assessable_price_list_id := NULL;
END;
ELSIF rec_tax_line.ref_doc_trx_id IS NOT NULL
AND rec_tax_line.ref_doc_line_id IS NOT NULL THEN
BEGIN
SELECT user_entered_av
,assessable_price_list_id
INTO rec_tax_line.user_entered_av
,rec_tax_line.assessable_price_list_id
FROM jai_tax_lines
WHERE trx_id = rec_tax_line.ref_doc_trx_id
AND trx_line_id = rec_tax_line.ref_doc_line_id
AND tax_type_id = rec_tax_line.tax_type_id;
EXCEPTION
WHEN OTHERS THEN
rec_tax_line.user_entered_av := NULL;
rec_tax_line.assessable_price_list_id := NULL;
END;
END IF;
END IF;
/*End :AELLURU FOR 25370256 --27498614
/*26523740 :Start
BEGIN
IF rec_tax_line.tax_rate_type IN ('UNIT_OF_MEASURE_ADHOC','ADHOC_AMOUNT')
AND rec_tax_line.entity_code = 'TRANSACTIONS'
AND rec_tax_line.application_id = 222
AND rec_tax_line.APPLIED_FROM_ENTITY_CODE = 'SALES_ORDER_ISSUE'
AND rec_tax_line.APPLIED_FROM_TRX_ID IS NOT NULL THEN
BEGIN
l_modifier_exists :=0;

BEGIN
SELECT INTERFACE_LINE_ATTRIBUTE11
INTO l_modifier_exists
FROM RA_CUSTOMER_TRX_LINES_all a,
OE_PRICE_ADJUSTMENTS b
WHERE customer_trx_id =rec_tax_line.TRX_ID
AND b.line_id =a.INTERFACE_LINE_ATTRIBUTE6
AND customer_trx_line_id = rec_tax_line.TRX_LINE_ID
AND NVL(INTERFACE_LINE_ATTRIBUTE11,0)>0
AND ROWNUM =1;

EXCEPTION
WHEN OTHERS
THEN
l_modifier_exists :=0;
END ;

IF (G_LEVEL_PROCEDURE >=
FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE ,G_MODULE_NAME || lv_api_name
,lv_api_name || 'Inside ADHOC DELIVERY TO AR MODIFIER CASE ,l_modifier_exists :' ||
l_modifier_exists);
FND_LOG.STRING(G_LEVEL_PROCEDURE ,G_MODULE_NAME || lv_api_name
,lv_api_name || 'Tax_rate_type :' || rec_tax_line.tax_rate_type);
END IF;

--Check if modifier is applied on header Visakha changes 27120878


IF NVL(l_modifier_exists,0) =0 THEN
BEGIN
SELECT INTERFACE_LINE_ATTRIBUTE11
INTO l_modifier_exists
FROM RA_CUSTOMER_TRX_LINES_all a,
OE_PRICE_ADJUSTMENTS b,
oe_order_lines_all c
WHERE a.customer_trx_id =rec_tax_line.TRX_ID
AND c.line_id =
a.INTERFACE_LINE_ATTRIBUTE6
AND c.header_id =b.header_id
AND b.line_id IS NULL
AND a.customer_trx_line_id = rec_tax_line.TRX_LINE_ID
AND NVL(a.INTERFACE_LINE_ATTRIBUTE11,0)>0
AND ROWNUM =1;

IF (G_LEVEL_PROCEDURE >=
FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE ,G_MODULE_NAME || lv_api_name
,lv_api_name || 'Inside ADHOC DELIVERY TO AR MODIFIER HEADER CASE
,l_modifier_exists :' || l_modifier_exists);
END IF;
EXCEPTION
WHEN OTHERS
THEN
l_modifier_exists :=0;
END ;

END IF;
--Check if modifier is applied on header Visakha changes 27120878
IF nvl(l_modifier_exists,0) >0 THEN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE ,G_MODULE_NAME || lv_api_name
,lv_api_name || 'In case of price modifiers ADHOC AMOUNT IS NOT APPLICABLE SO NO
INSERTING ADOC LINES');
END IF;
CONTINUE;
END IF;
EXCEPTION
WHEN OTHERS THEN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE ,G_MODULE_NAME || lv_api_name
,lv_api_name || 'Inside ADHOC DELIVERY TO AR CASE' || SQLERRM);
END IF;
END;
END IF;
END ;
/*END: 26523740*/--27498614
--Modified by Qinglei for Receiving 09-Jul-2013 begin
IF nvl(pv_call_from
,'BASE_TABLE') <> 'INTERFACE' THEN

---start additions by vkaranam for bug#27735601

if nvl(rec_tax_line.recoverable_flag,'N')='Y' and
rec_tax_line.tax_point_basis is not null
and
(rec_tax_line.entity_code IN ('RCV_TRANSACTION') AND
rec_tax_line.TRX_TYPE='DELIVER' and rec_tax_line.tax_point_basis='DELIVERY')
and nvl(rec_tax_line.rec_tax_amt_funcl_curr,0)<>0
and rec_tax_line.tax_line_id>0
then
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME||lv_api_name,'before insert into
jai_process_recovery_dtls');
INSERT INTO jai_process_recovery_dtls
(tax_line_id
,det_factor_id
,org_id
,ledger_id
,organization_id
,location_id
,application_id
,entity_code
,event_class_code
,event_type_code
,tax_event_class_code
,tax_event_type_code
,trx_id
,trx_line_id
,trx_level_type
,trx_number
,trx_date
,trx_line_number
,trx_loc_line_id
,trx_type
,legal_entity_id
,frozen_flag
,party_type
,party_id
,party_site_id
,trx_uom
,item_id
,unit_price
,line_amt
,trx_line_quantity
,trx_currency_code
,currency_conversion_date
,currency_conversion_type
,currency_conversion_rate
,tax_currency_code
,tax_currency_conversion_date
,tax_currency_conversion_type
,tax_currency_conversion_rate
,functional_currency_code
,line_assessable_value
,tax_regime_id
,tax_regime_code
,tax_regime_type
,first_party_reg_id
,first_party_primary_reg_name
,first_party_primary_reg_num
,first_party_secondary_reg_name
,first_party_secondary_reg_num
,num_of_return_days
,reporting_only_flag
,tax_authority_id
,tax_authority_site_id
,third_party_reg_id
,third_party_primary_reg_name
,third_party_primary_reg_num
,third_party_secondary_reg_name
,third_party_secondary_reg_num
,assessable_price_list_id
,tax_type_id
,abatement_flag
,update_vendor_on_transaction
,offset_flag
,recoverable_flag
,self_assessed_flag
,reverse_credit_on_shipment
,credit_basis_self_assessed
,tax_point_basis
,tax_point_date
,tax_rate_id
,tax_rate_code
,tax_rate_type
,tax_status
,recovery_percentage
,inclusive_flag
,tax_rate_percentage
,tax_rate_uom
,tax_rate_uom_rate
,tax_rate_abatement_type
,abatement_percentage
,tax_rate_classification
,standard_rate
,form_type
,actual_tax_rate
,rounding_level
,tax_rounded_to
,tax_rounding_factor
,taxable_rounded_to
,taxable_rounding_factor
,quantity_rounded_to
,quantity_rounding_factor
,unround_taxable_amt_trx_curr
,unround_taxable_amt_tax_curr
,unround_taxable_amt_fun_curr
,unround_tax_amt_trx_curr
,unround_tax_amt_tax_curr
,unround_tax_amt_fun_curr
,unrounded_uom_conv_qty
,rounded_tax_amt_trx_curr
,rounded_tax_amt_tax_curr
,rounded_tax_amt_fun_curr
,rounded_taxable_amt_trx_curr
,rounded_taxable_amt_tax_curr
,rounded_taxable_amt_fun_curr
,rounded_quantity
,rec_tax_amt_trx_curr
,rec_tax_amt_tax_curr
,rec_tax_amt_funcl_curr
,nrec_tax_amt_trx_curr
,nrec_tax_amt_tax_curr
,nrec_tax_amt_funcl_curr
,manual_overridden_flag
,manual_tax_line_flag
,copied_from_other_doc_flag
,encumberance_nr_tax_amt
,encumberance_nr_func_tax_amt
,encumberance_status_flag
,tax_line_num
,precedence_1
,precedence_2
,precedence_3
,precedence_4
,precedence_5
,precedence_6
,precedence_7
,precedence_8
,precedence_9
,precedence_10
,precedence_11
,precedence_12
,precedence_13
,precedence_14
,precedence_15
,precedence_16
,precedence_17
,precedence_18
,precedence_19
,precedence_20
,ref_doc_application_id
,ref_doc_entity_code
,ref_doc_event_class_code
,ref_doc_trx_id
,ref_doc_trx_type
,ref_doc_line_id
,ref_doc_loc_line_id
,ref_doc_trx_level_type
,applied_to_application_id
,applied_to_entity_code
,applied_to_event_class_code
,applied_to_trx_id
,applied_to_trx_line_id
,applied_from_application_id
,applied_from_entity_code
,applied_from_event_class_code
,applied_from_trx_id
,applied_from_trx_line_id
,reporting_type_id
,reporting_code
,tax_invoice_date
,tax_invoice_num
,user_entered_av --Added by Wenqiong for bug19442352
,taxable_basis -- added by zhiwei.xin for form tracking on 13-DEC-2013
--,RETROACTIVE_FLAG --Added by qinglei for retroactive pricing 24-Dec-
2013
--added by Wenqiong for Exemption begin
,exemption_hdr_id
,tax_amt_before_exemption
,exemption_type
,tracking_num
,exemption_num
,exemption_date
,proof_of_export_num
,proof_received_date
--added by Wenqiong for Exemption end
,record_type_code
,creation_date
,created_by
,last_update_date
,last_updated_by
,last_update_login
,object_version_number)
VALUES
(rec_tax_line.tax_line_id
,rec_tax_line.det_factor_id
,rec_tax_line.org_id
,rec_tax_line.ledger_id
,rec_tax_line.organization_id
,rec_tax_line.location_id
,rec_tax_line.application_id
,rec_tax_line.entity_code
,rec_tax_line.event_class_code
,rec_tax_line.event_type_code
,rec_tax_line.tax_event_class_code
,rec_tax_line.tax_event_type_code
,rec_tax_line.trx_id
,rec_tax_line.trx_line_id
,rec_tax_line.trx_level_type
,rec_tax_line.trx_number
,rec_tax_line.trx_date
,rec_tax_line.trx_line_number
,rec_tax_line.trx_loc_line_id
,rec_tax_line.trx_type
,rec_tax_line.legal_entity_id
,nvl(rec_tax_line.frozen_flag
,'N')
,rec_tax_line.party_type
,rec_tax_line.party_id
,rec_tax_line.party_site_id
,rec_tax_line.trx_uom
,rec_tax_line.item_id
,rec_tax_line.unit_price
,rec_tax_line.line_amt
,rec_tax_line.trx_line_quantity
,rec_tax_line.trx_currency_code
,rec_tax_line.currency_conversion_date
,rec_tax_line.currency_conversion_type
,rec_tax_line.currency_conversion_rate
,rec_tax_line.tax_currency_code
,rec_tax_line.tax_currency_conversion_date
,rec_tax_line.tax_currency_conversion_type
,rec_tax_line.tax_currency_conversion_rate
,rec_tax_line.functional_currency_code
,rec_tax_line.line_assessable_value
,rec_tax_line.tax_regime_id
,rec_tax_line.tax_regime_code
,rec_tax_line.tax_regime_type
--,rec_tax_line.REGIME_JURISDICTION
,rec_tax_line.first_party_reg_id
,rec_tax_line.first_party_primary_reg_name
,rec_tax_line.first_party_primary_reg_num
,rec_tax_line.first_party_secondary_reg_name
,rec_tax_line.first_party_secondary_reg_num
,rec_tax_line.num_of_return_days
,rec_tax_line.reporting_only_flag
,rec_tax_line.tax_authority_id
,rec_tax_line.tax_authority_site_id
,rec_tax_line.third_party_reg_id
,rec_tax_line.third_party_primary_reg_name
,rec_tax_line.third_party_primary_reg_num
,rec_tax_line.third_party_secondary_reg_name
,rec_tax_line.third_party_secondary_reg_num
,rec_tax_line.assessable_price_list_id
,rec_tax_line.tax_type_id
,rec_tax_line.abatement_flag
,rec_tax_line.update_vendor_on_transaction
,rec_tax_line.offset_flag
,rec_tax_line.recoverable_flag
,rec_tax_line.self_assessed_flag
,rec_tax_line.reverse_credit_on_shipment
,rec_tax_line.credit_basis_self_assessed
,rec_tax_line.tax_point_basis
,rec_tax_line.tax_point_date
,rec_tax_line.tax_rate_id
,rec_tax_line.tax_rate_code
,rec_tax_line.tax_rate_type
,rec_tax_line.tax_status
,rec_tax_line.recovery_percentage
,rec_tax_line.inclusive_flag
,rec_tax_line.tax_rate_percentage
,rec_tax_line.tax_rate_uom
,rec_tax_line.tax_rate_uom_rate
,rec_tax_line.tax_rate_abatement_type
,rec_tax_line.abatement_percentage
,rec_tax_line.tax_rate_classification
,rec_tax_line.standard_rate
,rec_tax_line.form_type
,rec_tax_line.actual_tax_rate
,rec_tax_line.rounding_level
,rec_tax_line.tax_rounded_to
,rec_tax_line.tax_rounding_factor
,rec_tax_line.taxable_rounded_to
,rec_tax_line.taxable_rounding_factor
,rec_tax_line.quantity_rounded_to
,rec_tax_line.quantity_rounding_factor
,rec_tax_line.unround_taxable_amt_trx_curr
,rec_tax_line.unround_taxable_amt_tax_curr
,rec_tax_line.unround_taxable_amt_fun_curr
,rec_tax_line.unround_tax_amt_trx_curr
,rec_tax_line.unround_tax_amt_tax_curr
,rec_tax_line.unround_tax_amt_fun_curr
,rec_tax_line.unrounded_uom_conv_qty
,rec_tax_line.rounded_tax_amt_trx_curr
,rec_tax_line.rounded_tax_amt_tax_curr
,rec_tax_line.rounded_tax_amt_fun_curr
,rec_tax_line.rounded_taxable_amt_trx_curr
,rec_tax_line.rounded_taxable_amt_tax_curr
,rec_tax_line.rounded_taxable_amt_fun_curr
,rec_tax_line.rounded_quantity
,rec_tax_line.rec_tax_amt_trx_curr
,rec_tax_line.rec_tax_amt_tax_curr
,rec_tax_line.rec_tax_amt_funcl_curr
,rec_tax_line.nrec_tax_amt_trx_curr
,rec_tax_line.nrec_tax_amt_tax_curr
,rec_tax_line.nrec_tax_amt_funcl_curr
,nvl(rec_tax_line.manual_overridden_flag
,'N')
,nvl(rec_tax_line.manual_tax_line_flag
,'N')
,rec_tax_line.copied_from_other_doc_flag
,rec_tax_line.encumberance_nr_tax_amt
,rec_tax_line.encumberance_nr_func_tax_amt
,rec_tax_line.encumberance_status_flag
,rec_tax_line.tax_line_num
,rec_tax_line.precedence_1
,rec_tax_line.precedence_2
,rec_tax_line.precedence_3
,rec_tax_line.precedence_4
,rec_tax_line.precedence_5
,rec_tax_line.precedence_6
,rec_tax_line.precedence_7
,rec_tax_line.precedence_8
,rec_tax_line.precedence_9
,rec_tax_line.precedence_10
,rec_tax_line.precedence_11
,rec_tax_line.precedence_12
,rec_tax_line.precedence_13
,rec_tax_line.precedence_14
,rec_tax_line.precedence_15
,rec_tax_line.precedence_16
,rec_tax_line.precedence_17
,rec_tax_line.precedence_18
,rec_tax_line.precedence_19
,rec_tax_line.precedence_20
,rec_tax_line.ref_doc_application_id
,rec_tax_line.ref_doc_entity_code
,rec_tax_line.ref_doc_event_class_code
,rec_tax_line.ref_doc_trx_id
,rec_tax_line.ref_doc_trx_type
,rec_tax_line.ref_doc_line_id
,rec_tax_line.ref_doc_loc_line_id
,rec_tax_line.ref_doc_trx_level_type
,rec_tax_line.applied_to_application_id
,rec_tax_line.applied_to_entity_code
,rec_tax_line.applied_to_event_class_code
,rec_tax_line.applied_to_trx_id
,rec_tax_line.applied_to_trx_line_id
,rec_tax_line.applied_from_application_id
,rec_tax_line.applied_from_entity_code
,rec_tax_line.applied_from_event_class_code
,rec_tax_line.applied_from_trx_id
,rec_tax_line.applied_from_trx_line_id
,rec_tax_line.reporting_type_id
,rec_tax_line.reporting_code
,rec_tax_line.tax_invoice_date
,rec_tax_line.tax_invoice_num
,rec_tax_line.user_entered_av --Added by Wenqiong for bug19442352
,rec_tax_line.taxable_basis -- added by zhiwei.xin for form tracking on
13-DEC-2013
--,rec_tax_line.RETROACTIVE_FLAG --Added by qinglei for retroactive
pricing 24-Dec-2013
--added by Wenqiong for Exemption begin
,rec_tax_line.exemption_hdr_id
,rec_tax_line.tax_amt_before_exemption
,rec_tax_line.exemption_type
,rec_tax_line.tracking_num
,rec_tax_line.exemption_num
,rec_tax_line.exemption_date
,rec_tax_line.proof_of_export_num
,rec_tax_line.proof_received_date
--added by Wenqiong for Exemption end
,nvl(rec_tax_line.record_type_code
,'DEFINED') --Updated by Wenqiong for Migration
,SYSDATE
,fnd_global.user_id
,SYSDATE
,fnd_global.user_id
,fnd_global.user_id
,1);
end if;

---end additions by vkaranam for bug#27735601


INSERT INTO jai_tax_lines
(tax_line_id
,det_factor_id
,org_id
,ledger_id
,organization_id
,location_id
,application_id
,entity_code
,event_class_code
,event_type_code
,tax_event_class_code
,tax_event_type_code
,trx_id
,trx_line_id
,trx_level_type
,trx_number
,trx_date
,trx_line_number
,trx_loc_line_id
,trx_type
,legal_entity_id
,frozen_flag
,party_type
,party_id
,party_site_id
,trx_uom
,item_id
,unit_price
,line_amt
,trx_line_quantity
,trx_currency_code
,currency_conversion_date
,currency_conversion_type
,currency_conversion_rate
,tax_currency_code
,tax_currency_conversion_date
,tax_currency_conversion_type
,tax_currency_conversion_rate
,functional_currency_code
,line_assessable_value
,tax_regime_id
,tax_regime_code
,tax_regime_type
,first_party_reg_id
,first_party_primary_reg_name
,first_party_primary_reg_num
,first_party_secondary_reg_name
,first_party_secondary_reg_num
,num_of_return_days
,reporting_only_flag
,tax_authority_id
,tax_authority_site_id
,third_party_reg_id
,third_party_primary_reg_name
,third_party_primary_reg_num
,third_party_secondary_reg_name
,third_party_secondary_reg_num
,assessable_price_list_id
,tax_type_id
,abatement_flag
,update_vendor_on_transaction
,offset_flag
,recoverable_flag
,self_assessed_flag
,reverse_credit_on_shipment
,credit_basis_self_assessed
,tax_point_basis
,tax_point_date
,tax_rate_id
,tax_rate_code
,tax_rate_type
,tax_status
,recovery_percentage
,inclusive_flag
,tax_rate_percentage
,tax_rate_uom
,tax_rate_uom_rate
,tax_rate_abatement_type
,abatement_percentage
,tax_rate_classification
,standard_rate
,form_type
,actual_tax_rate
,rounding_level
,tax_rounded_to
,tax_rounding_factor
,taxable_rounded_to
,taxable_rounding_factor
,quantity_rounded_to
,quantity_rounding_factor
,unround_taxable_amt_trx_curr
,unround_taxable_amt_tax_curr
,unround_taxable_amt_fun_curr
,unround_tax_amt_trx_curr
,unround_tax_amt_tax_curr
,unround_tax_amt_fun_curr
,unrounded_uom_conv_qty
,rounded_tax_amt_trx_curr
,rounded_tax_amt_tax_curr
,rounded_tax_amt_fun_curr
,rounded_taxable_amt_trx_curr
,rounded_taxable_amt_tax_curr
,rounded_taxable_amt_fun_curr
,rounded_quantity
,rec_tax_amt_trx_curr
,rec_tax_amt_tax_curr
,rec_tax_amt_funcl_curr
,nrec_tax_amt_trx_curr
,nrec_tax_amt_tax_curr
,nrec_tax_amt_funcl_curr
,manual_overridden_flag
,manual_tax_line_flag
,copied_from_other_doc_flag
,encumberance_nr_tax_amt
,encumberance_nr_func_tax_amt
,encumberance_status_flag
,tax_line_num
,precedence_1
,precedence_2
,precedence_3
,precedence_4
,precedence_5
,precedence_6
,precedence_7
,precedence_8
,precedence_9
,precedence_10
,precedence_11
,precedence_12
,precedence_13
,precedence_14
,precedence_15
,precedence_16
,precedence_17
,precedence_18
,precedence_19
,precedence_20
,ref_doc_application_id
,ref_doc_entity_code
,ref_doc_event_class_code
,ref_doc_trx_id
,ref_doc_trx_type
,ref_doc_line_id
,ref_doc_loc_line_id
,ref_doc_trx_level_type
,applied_to_application_id
,applied_to_entity_code
,applied_to_event_class_code
,applied_to_trx_id
,applied_to_trx_line_id
,applied_from_application_id
,applied_from_entity_code
,applied_from_event_class_code
,applied_from_trx_id
,applied_from_trx_line_id
,reporting_type_id
,reporting_code
,tax_invoice_date
,tax_invoice_num
,user_entered_av --Added by Wenqiong for bug19442352
,taxable_basis -- added by zhiwei.xin for form tracking on 13-DEC-2013
--,RETROACTIVE_FLAG --Added by qinglei for retroactive pricing 24-Dec-
2013
--added by Wenqiong for Exemption begin
,exemption_hdr_id
,tax_amt_before_exemption
,exemption_type
,tracking_num
,exemption_num
,exemption_date
,proof_of_export_num
,proof_received_date
--added by Wenqiong for Exemption end
,record_type_code
,creation_date
,created_by
,last_update_date
,last_updated_by
,last_update_login
,object_version_number)
VALUES
(rec_tax_line.tax_line_id
,rec_tax_line.det_factor_id
,rec_tax_line.org_id
,rec_tax_line.ledger_id
,rec_tax_line.organization_id
,rec_tax_line.location_id
,rec_tax_line.application_id
,rec_tax_line.entity_code
,rec_tax_line.event_class_code
,rec_tax_line.event_type_code
,rec_tax_line.tax_event_class_code
,rec_tax_line.tax_event_type_code
,rec_tax_line.trx_id
,rec_tax_line.trx_line_id
,rec_tax_line.trx_level_type
,rec_tax_line.trx_number
,rec_tax_line.trx_date
,rec_tax_line.trx_line_number
,rec_tax_line.trx_loc_line_id
,rec_tax_line.trx_type
,rec_tax_line.legal_entity_id
,nvl(rec_tax_line.frozen_flag
,'N')
,rec_tax_line.party_type
,rec_tax_line.party_id
,rec_tax_line.party_site_id
,rec_tax_line.trx_uom
,rec_tax_line.item_id
,rec_tax_line.unit_price
,rec_tax_line.line_amt
,rec_tax_line.trx_line_quantity
,rec_tax_line.trx_currency_code
,rec_tax_line.currency_conversion_date
,rec_tax_line.currency_conversion_type
,rec_tax_line.currency_conversion_rate
,rec_tax_line.tax_currency_code
,rec_tax_line.tax_currency_conversion_date
,rec_tax_line.tax_currency_conversion_type
,rec_tax_line.tax_currency_conversion_rate
,rec_tax_line.functional_currency_code
,rec_tax_line.line_assessable_value
,rec_tax_line.tax_regime_id
,rec_tax_line.tax_regime_code
,rec_tax_line.tax_regime_type
--,rec_tax_line.REGIME_JURISDICTION
,rec_tax_line.first_party_reg_id
,rec_tax_line.first_party_primary_reg_name
,rec_tax_line.first_party_primary_reg_num
,rec_tax_line.first_party_secondary_reg_name
,rec_tax_line.first_party_secondary_reg_num
,rec_tax_line.num_of_return_days
,rec_tax_line.reporting_only_flag
,rec_tax_line.tax_authority_id
,rec_tax_line.tax_authority_site_id
,rec_tax_line.third_party_reg_id
,rec_tax_line.third_party_primary_reg_name
,rec_tax_line.third_party_primary_reg_num
,rec_tax_line.third_party_secondary_reg_name
,rec_tax_line.third_party_secondary_reg_num
,rec_tax_line.assessable_price_list_id
,rec_tax_line.tax_type_id
,rec_tax_line.abatement_flag
,rec_tax_line.update_vendor_on_transaction
,rec_tax_line.offset_flag
,rec_tax_line.recoverable_flag
,rec_tax_line.self_assessed_flag
,rec_tax_line.reverse_credit_on_shipment
,rec_tax_line.credit_basis_self_assessed
,rec_tax_line.tax_point_basis
,rec_tax_line.tax_point_date
,rec_tax_line.tax_rate_id
,rec_tax_line.tax_rate_code
,rec_tax_line.tax_rate_type
,rec_tax_line.tax_status
,rec_tax_line.recovery_percentage
,rec_tax_line.inclusive_flag
,rec_tax_line.tax_rate_percentage
,rec_tax_line.tax_rate_uom
,rec_tax_line.tax_rate_uom_rate
,rec_tax_line.tax_rate_abatement_type
,rec_tax_line.abatement_percentage
,rec_tax_line.tax_rate_classification
,rec_tax_line.standard_rate
,rec_tax_line.form_type
,rec_tax_line.actual_tax_rate
,rec_tax_line.rounding_level
,rec_tax_line.tax_rounded_to
,rec_tax_line.tax_rounding_factor
,rec_tax_line.taxable_rounded_to
,rec_tax_line.taxable_rounding_factor
,rec_tax_line.quantity_rounded_to
,rec_tax_line.quantity_rounding_factor
,rec_tax_line.unround_taxable_amt_trx_curr
,rec_tax_line.unround_taxable_amt_tax_curr
,rec_tax_line.unround_taxable_amt_fun_curr
,rec_tax_line.unround_tax_amt_trx_curr
,rec_tax_line.unround_tax_amt_tax_curr
,rec_tax_line.unround_tax_amt_fun_curr
,rec_tax_line.unrounded_uom_conv_qty
,rec_tax_line.rounded_tax_amt_trx_curr
,rec_tax_line.rounded_tax_amt_tax_curr
,rec_tax_line.rounded_tax_amt_fun_curr
,rec_tax_line.rounded_taxable_amt_trx_curr
,rec_tax_line.rounded_taxable_amt_tax_curr
,rec_tax_line.rounded_taxable_amt_fun_curr
,rec_tax_line.rounded_quantity
,rec_tax_line.rec_tax_amt_trx_curr
,rec_tax_line.rec_tax_amt_tax_curr
,rec_tax_line.rec_tax_amt_funcl_curr
,rec_tax_line.nrec_tax_amt_trx_curr
,rec_tax_line.nrec_tax_amt_tax_curr
,rec_tax_line.nrec_tax_amt_funcl_curr
,nvl(rec_tax_line.manual_overridden_flag
,'N')
,nvl(rec_tax_line.manual_tax_line_flag
,'N')
,rec_tax_line.copied_from_other_doc_flag
,rec_tax_line.encumberance_nr_tax_amt
,rec_tax_line.encumberance_nr_func_tax_amt
,rec_tax_line.encumberance_status_flag
,rec_tax_line.tax_line_num
,rec_tax_line.precedence_1
,rec_tax_line.precedence_2
,rec_tax_line.precedence_3
,rec_tax_line.precedence_4
,rec_tax_line.precedence_5
,rec_tax_line.precedence_6
,rec_tax_line.precedence_7
,rec_tax_line.precedence_8
,rec_tax_line.precedence_9
,rec_tax_line.precedence_10
,rec_tax_line.precedence_11
,rec_tax_line.precedence_12
,rec_tax_line.precedence_13
,rec_tax_line.precedence_14
,rec_tax_line.precedence_15
,rec_tax_line.precedence_16
,rec_tax_line.precedence_17
,rec_tax_line.precedence_18
,rec_tax_line.precedence_19
,rec_tax_line.precedence_20
,rec_tax_line.ref_doc_application_id
,rec_tax_line.ref_doc_entity_code
,rec_tax_line.ref_doc_event_class_code
,rec_tax_line.ref_doc_trx_id
,rec_tax_line.ref_doc_trx_type
,rec_tax_line.ref_doc_line_id
,rec_tax_line.ref_doc_loc_line_id
,rec_tax_line.ref_doc_trx_level_type
,rec_tax_line.applied_to_application_id
,rec_tax_line.applied_to_entity_code
,rec_tax_line.applied_to_event_class_code
,rec_tax_line.applied_to_trx_id
,rec_tax_line.applied_to_trx_line_id
,rec_tax_line.applied_from_application_id
,rec_tax_line.applied_from_entity_code
,rec_tax_line.applied_from_event_class_code
,rec_tax_line.applied_from_trx_id
,rec_tax_line.applied_from_trx_line_id
,rec_tax_line.reporting_type_id
,rec_tax_line.reporting_code
,rec_tax_line.tax_invoice_date
,rec_tax_line.tax_invoice_num
,rec_tax_line.user_entered_av --Added by Wenqiong for bug19442352
,rec_tax_line.taxable_basis -- added by zhiwei.xin for form tracking on
13-DEC-2013
--,rec_tax_line.RETROACTIVE_FLAG --Added by qinglei for retroactive
pricing 24-Dec-2013
--added by Wenqiong for Exemption begin
,rec_tax_line.exemption_hdr_id
,rec_tax_line.tax_amt_before_exemption
,rec_tax_line.exemption_type
,rec_tax_line.tracking_num
,rec_tax_line.exemption_num
,rec_tax_line.exemption_date
,rec_tax_line.proof_of_export_num
,rec_tax_line.proof_received_date
--added by Wenqiong for Exemption end
,nvl(rec_tax_line.record_type_code
,'DEFINED') --Updated by Wenqiong for Migration
,SYSDATE
,fnd_global.user_id
,SYSDATE
,fnd_global.user_id
,fnd_global.user_id
,1);
ELSE
--Added by Qinglei for Receiving begin
OPEN get_intf_tran_info(rec_tax_line.det_factor_id);
FETCH get_intf_tran_info
INTO ln_interface_trx_hdr_id
,ln_interface_transaction_id;
CLOSE get_intf_tran_info;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Before inserting jai_tax_lines_interface
ln_interface_trx_hdr_id = ' ||
ln_interface_trx_hdr_id || '; ln_interface_transaction_id
= ' || ln_interface_transaction_id ||
'; pv_call_from = ' || pv_call_from ||
';rec_tax_line.USER_ENTERED_AV' ||
rec_tax_line.user_entered_av);
END IF;

/*Start :AELLURU FOR 25370256 In case of Tax category id ussage accesable


value is not getting cascaded*/
IF rec_tax_line.user_entered_av IS NULL THEN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,' Deriving Accesable value from reference ' ||
'rec_tax_line.TAX_TYPE_ID' ||
rec_tax_line.tax_type_id ||
'rec_tax_line.APPLIED_FROM_TRX_ID->' ||
rec_tax_line.applied_from_trx_id ||
'rec_tax_line.APPLIED_FROM_TRX_LINE_ID = ' ||
rec_tax_line.applied_from_trx_line_id ||
'rec_tax_line.APPLIED_FROM_EVENT_CLASS_CODE' ||
rec_tax_line.applied_from_event_class_code);
END IF;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,' Deriving Accesable value from reference 2 ' ||
'rec_tax_line.TAX_TYPE_ID' ||
rec_tax_line.tax_type_id ||
'rec_tax_line.REF_DOC_TRX_ID->' || rec_tax_line.ref_doc_trx_id ||
'rec_tax_line.REF_DOC_LINE_ID = ' ||
rec_tax_line.ref_doc_line_id);
END IF;
IF rec_tax_line.applied_from_trx_id IS NOT NULL
AND rec_tax_line.applied_from_trx_line_id IS NOT NULL
AND rec_tax_line.applied_from_event_class_code = 'SALES_ORDER_ISSUE'
THEN
BEGIN
SELECT user_entered_av
INTO rec_tax_line.user_entered_av
FROM jai_tax_lines
WHERE
/*26399170*/
trx_line_id = rec_tax_line.applied_from_trx_line_id
AND trx_id = rec_tax_line.applied_from_trx_id
AND trx_type = 'STANDARD'
AND tax_type_id = rec_tax_line.tax_type_id;
EXCEPTION
WHEN OTHERS THEN
rec_tax_line.user_entered_av := NULL;
END;
ELSIF rec_tax_line.ref_doc_trx_id IS NOT NULL
AND rec_tax_line.ref_doc_line_id IS NOT NULL THEN
BEGIN
SELECT user_entered_av
INTO rec_tax_line.user_entered_av
FROM jai_tax_lines
WHERE trx_id = rec_tax_line.ref_doc_trx_id
AND trx_line_id = rec_tax_line.ref_doc_line_id
AND tax_type_id = rec_tax_line.tax_type_id;
EXCEPTION
WHEN OTHERS THEN
rec_tax_line.user_entered_av := NULL;
END;
END IF;
END IF;
/*End :AELLURU FOR 25370256*/

INSERT INTO jai_tax_lines_interface


(interface_tax_line_id
,interface_det_factor_id
,org_id
,ledger_id
,organization_id
,location_id
,application_id
,entity_code
,event_class_code
,event_type_code
,tax_event_class_code
,tax_event_type_code
--,TRX_ID
--,TRX_LINE_ID
--,TRX_LEVEL_TYPE
--,TRX_NUMBER
,trx_date
--,TRX_LINE_NUMBER
--,TRX_LOC_LINE_ID
,trx_type
,legal_entity_id
,frozen_flag
,party_type
,party_id
,party_site_id
,trx_uom
,item_id
,unit_price
,line_amt
,trx_line_quantity
,trx_currency_code
,currency_conversion_date
,currency_conversion_type
,currency_conversion_rate
,tax_currency_code
,tax_currency_conversion_date
,tax_currency_conversion_type
,tax_currency_conversion_rate
,functional_currency_code
,line_assessable_value

/* Bug#23102735, dejiang.liu/20160118, Add assessable value pass from


interface to tax lines. */
,user_entered_av

,tax_regime_id
,tax_regime_code
,tax_regime_type
,first_party_reg_id
,first_party_primary_reg_name
,first_party_primary_reg_num
,first_party_secondary_reg_name
,first_party_secondary_reg_num
,num_of_return_days
,reporting_only_flag
,tax_authority_id
,tax_authority_site_id
,third_party_reg_id
,third_party_primary_reg_name
,third_party_primary_reg_num
,third_party_secondary_reg_name
,third_party_secondary_reg_num
,assessable_price_list_id
,tax_type_id
,abatement_flag
,update_vendor_on_transaction
,offset_flag
,recoverable_flag
,self_assessed_flag
,reverse_credit_on_shipment
,credit_basis_self_assessed
,tax_point_basis
,tax_point_date
,tax_rate_id
,tax_rate_code
,tax_rate_type
,tax_status
,recovery_percentage
,inclusive_flag
,tax_rate_percentage
,tax_rate_uom
,tax_rate_uom_rate
,tax_rate_abatement_type
,abatement_percentage
,tax_rate_classification
,standard_rate
,form_type
,actual_tax_rate
,rounding_level
,tax_rounded_to
,tax_rounding_factor
,taxable_rounded_to
,taxable_rounding_factor
,quantity_rounded_to
,quantity_rounding_factor
,unround_taxable_amt_trx_curr
,unround_taxable_amt_tax_curr
,unround_taxable_amt_fun_curr
,unround_tax_amt_trx_curr
,unround_tax_amt_tax_curr
,unround_tax_amt_fun_curr
,unrounded_uom_conv_qty
,rounded_tax_amt_trx_curr
,rounded_tax_amt_tax_curr
,rounded_tax_amt_fun_curr
,rounded_taxable_amt_trx_curr
,rounded_taxable_amt_tax_curr
,rounded_taxable_amt_fun_curr
,rounded_quantity
,rec_tax_amt_trx_curr
,rec_tax_amt_tax_curr
,rec_tax_amt_funcl_curr
,nrec_tax_amt_trx_curr
,nrec_tax_amt_tax_curr
,nrec_tax_amt_funcl_curr
,manual_overridden_flag
,manual_tax_line_flag
,copied_from_other_doc_flag
,encumberance_nr_tax_amt
,encumberance_nr_func_tax_amt
,encumberance_status_flag
,tax_line_num
,precedence_1
,precedence_2
,precedence_3
,precedence_4
,precedence_5
,precedence_6
,precedence_7
,precedence_8
,precedence_9
,precedence_10
,precedence_11
,precedence_12
,precedence_13
,precedence_14
,precedence_15
,precedence_16
,precedence_17
,precedence_18
,precedence_19
,precedence_20
,ref_doc_application_id
,ref_doc_entity_code
,ref_doc_event_class_code
,ref_doc_trx_id
,ref_doc_trx_type
,ref_doc_line_id
,ref_doc_loc_line_id
,ref_doc_trx_level_type
,applied_to_application_id
,applied_to_entity_code
,applied_to_event_class_code
,applied_to_trx_id
,applied_to_trx_line_id
,applied_from_application_id
,applied_from_entity_code
,applied_from_event_class_code
,applied_from_trx_id
,applied_from_trx_line_id
,reporting_type_id
,reporting_code
,tax_invoice_date
,tax_invoice_num
,interface_trx_hdr_id
,interface_transaction_id
--,RECORD_TYPE_CODE
,creation_date
,created_by
,last_update_date
,last_updated_by
,last_update_login
,object_version_number)
VALUES
(rec_tax_line.tax_line_id
,rec_tax_line.det_factor_id
,rec_tax_line.org_id
,rec_tax_line.ledger_id
,rec_tax_line.organization_id
,rec_tax_line.location_id
,rec_tax_line.application_id
,rec_tax_line.entity_code
,rec_tax_line.event_class_code
,rec_tax_line.event_type_code
,rec_tax_line.tax_event_class_code
,rec_tax_line.tax_event_type_code
--,rec_tax_line.TRX_ID
--,rec_tax_line.TRX_LINE_ID
--,rec_tax_line.TRX_LEVEL_TYPE
--,rec_tax_line.TRX_NUMBER
,rec_tax_line.trx_date
--,rec_tax_line.TRX_LINE_NUMBER
--,rec_tax_line.TRX_LOC_LINE_ID
,rec_tax_line.trx_type
,rec_tax_line.legal_entity_id
,nvl(rec_tax_line.frozen_flag
,'N')
,rec_tax_line.party_type
,rec_tax_line.party_id
,rec_tax_line.party_site_id
,rec_tax_line.trx_uom
,rec_tax_line.item_id
,rec_tax_line.unit_price
,rec_tax_line.line_amt
,rec_tax_line.trx_line_quantity
,rec_tax_line.trx_currency_code
,rec_tax_line.currency_conversion_date
,rec_tax_line.currency_conversion_type
,rec_tax_line.currency_conversion_rate
,rec_tax_line.tax_currency_code
,rec_tax_line.tax_currency_conversion_date
,rec_tax_line.tax_currency_conversion_type
,rec_tax_line.tax_currency_conversion_rate
,rec_tax_line.functional_currency_code
,rec_tax_line.line_assessable_value

/* Bug#23102735, dejiang.liu/20160118, Add assessable value pass from


interface to tax lines. */
,rec_tax_line.user_entered_av

,rec_tax_line.tax_regime_id
,rec_tax_line.tax_regime_code
,rec_tax_line.tax_regime_type
--,rec_tax_line.REGIME_JURISDICTION
,rec_tax_line.first_party_reg_id
,rec_tax_line.first_party_primary_reg_name
,rec_tax_line.first_party_primary_reg_num
,rec_tax_line.first_party_secondary_reg_name
,rec_tax_line.first_party_secondary_reg_num
,rec_tax_line.num_of_return_days
,rec_tax_line.reporting_only_flag
,rec_tax_line.tax_authority_id
,rec_tax_line.tax_authority_site_id
,rec_tax_line.third_party_reg_id
,rec_tax_line.third_party_primary_reg_name
,rec_tax_line.third_party_primary_reg_num
,rec_tax_line.third_party_secondary_reg_name
,rec_tax_line.third_party_secondary_reg_num
,rec_tax_line.assessable_price_list_id
,rec_tax_line.tax_type_id
,rec_tax_line.abatement_flag
,rec_tax_line.update_vendor_on_transaction
,rec_tax_line.offset_flag
,rec_tax_line.recoverable_flag
,rec_tax_line.self_assessed_flag
,rec_tax_line.reverse_credit_on_shipment
,rec_tax_line.credit_basis_self_assessed
,rec_tax_line.tax_point_basis
,rec_tax_line.tax_point_date
,rec_tax_line.tax_rate_id
,rec_tax_line.tax_rate_code
,rec_tax_line.tax_rate_type
,rec_tax_line.tax_status
,rec_tax_line.recovery_percentage
,rec_tax_line.inclusive_flag
,rec_tax_line.tax_rate_percentage
,rec_tax_line.tax_rate_uom
,rec_tax_line.tax_rate_uom_rate
,rec_tax_line.tax_rate_abatement_type
,rec_tax_line.abatement_percentage
,rec_tax_line.tax_rate_classification
,rec_tax_line.standard_rate
,rec_tax_line.form_type
,rec_tax_line.actual_tax_rate
,rec_tax_line.rounding_level
,rec_tax_line.tax_rounded_to
,rec_tax_line.tax_rounding_factor
,rec_tax_line.taxable_rounded_to
,rec_tax_line.taxable_rounding_factor
,rec_tax_line.quantity_rounded_to
,rec_tax_line.quantity_rounding_factor
,rec_tax_line.unround_taxable_amt_trx_curr
,rec_tax_line.unround_taxable_amt_tax_curr
,rec_tax_line.unround_taxable_amt_fun_curr
,rec_tax_line.unround_tax_amt_trx_curr
,rec_tax_line.unround_tax_amt_tax_curr
,rec_tax_line.unround_tax_amt_fun_curr
,rec_tax_line.unrounded_uom_conv_qty
,rec_tax_line.rounded_tax_amt_trx_curr
,rec_tax_line.rounded_tax_amt_tax_curr
,rec_tax_line.rounded_tax_amt_fun_curr
,rec_tax_line.rounded_taxable_amt_trx_curr
,rec_tax_line.rounded_taxable_amt_tax_curr
,rec_tax_line.rounded_taxable_amt_fun_curr
,rec_tax_line.rounded_quantity
,rec_tax_line.rec_tax_amt_trx_curr
,rec_tax_line.rec_tax_amt_tax_curr
,rec_tax_line.rec_tax_amt_funcl_curr
,rec_tax_line.nrec_tax_amt_trx_curr
,rec_tax_line.nrec_tax_amt_tax_curr
,rec_tax_line.nrec_tax_amt_funcl_curr
,nvl(rec_tax_line.manual_overridden_flag
,'N')
,nvl(rec_tax_line.manual_tax_line_flag
,'N')
,rec_tax_line.copied_from_other_doc_flag
,rec_tax_line.encumberance_nr_tax_amt
,rec_tax_line.encumberance_nr_func_tax_amt
,rec_tax_line.encumberance_status_flag
,rec_tax_line.tax_line_num
,rec_tax_line.precedence_1
,rec_tax_line.precedence_2
,rec_tax_line.precedence_3
,rec_tax_line.precedence_4
,rec_tax_line.precedence_5
,rec_tax_line.precedence_6
,rec_tax_line.precedence_7
,rec_tax_line.precedence_8
,rec_tax_line.precedence_9
,rec_tax_line.precedence_10
,rec_tax_line.precedence_11
,rec_tax_line.precedence_12
,rec_tax_line.precedence_13
,rec_tax_line.precedence_14
,rec_tax_line.precedence_15
,rec_tax_line.precedence_16
,rec_tax_line.precedence_17
,rec_tax_line.precedence_18
,rec_tax_line.precedence_19
,rec_tax_line.precedence_20
,rec_tax_line.ref_doc_application_id
,rec_tax_line.ref_doc_entity_code
,rec_tax_line.ref_doc_event_class_code
,rec_tax_line.ref_doc_trx_id
,rec_tax_line.ref_doc_trx_type
,rec_tax_line.ref_doc_line_id
,rec_tax_line.ref_doc_loc_line_id
,rec_tax_line.ref_doc_trx_level_type
,rec_tax_line.applied_to_application_id
,rec_tax_line.applied_to_entity_code
,rec_tax_line.applied_to_event_class_code
,rec_tax_line.applied_to_trx_id
,rec_tax_line.applied_to_trx_line_id
,rec_tax_line.applied_from_application_id
,rec_tax_line.applied_from_entity_code
,rec_tax_line.applied_from_event_class_code
,rec_tax_line.applied_from_trx_id
,rec_tax_line.applied_from_trx_line_id
,rec_tax_line.reporting_type_id
,rec_tax_line.reporting_code
,rec_tax_line.tax_invoice_date
,rec_tax_line.tax_invoice_num
,ln_interface_trx_hdr_id
,ln_interface_transaction_id
--,'DEFINED'
,SYSDATE
,fnd_global.user_id
,SYSDATE
,fnd_global.user_id
,fnd_global.user_id
,1);
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,SQL%ROWCOUNT || ' rows inserted into
jai_tax_lines_interface');
END IF;
END IF;
--Modified by Qinglei for Receiving 09-Jul-2013 end
--Modified by Junjian for bug#20476394 begin
/* Bug#26735296, dejiang.liu/20170924. Remove condition for amount checking
to allow zero tax amount populated to AP dists.
NOTE:
This change is for P2P Exempt tax populated to AP dists.
But there is no Exempt process on P2P side.
If exempt process finally defined on P2P cycle, the solution maybe
revised.
*/

--IF rec_tax_line.rounded_tax_amt_fun_curr <> 0 THEN


--Modified by Junjian for AP tax flow begin
jai_populate_tax_dist(pr_tax_line => rec_tax_line
,pv_process_status => lv_process_status
,pv_process_message => lv_process_message);
--Modified by Junjian for AP tax flow end

IF lv_process_status <> FND_API.G_RET_STS_SUCCESS THEN


pv_process_status := lv_process_status;
pv_process_message := lv_process_message;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'populate_tax_lines return status:' || pv_process_status
|| ',message:' ||
lv_process_message);
END IF;
RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
END IF;
--END IF;
--Modified by Junjian for bug#20476394 end

p_tax_lines_tbl(i) := rec_tax_line;

END LOOP;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'return status as :' || pv_process_status);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
EXCEPTION
WHEN FND_API.G_EXC_ERROR THEN
pv_process_status := FND_API.G_RET_STS_ERROR;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,pv_process_message);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;

WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN

pv_process_status := FND_API.G_RET_STS_UNEXP_ERROR;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,pv_process_message);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;

WHEN OTHERS THEN

pv_process_status := FND_API.G_RET_STS_UNEXP_ERROR;
pv_process_message := lv_process_message; --Added by Junjian
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,SQLERRM);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
app_exception.raise_exception; --Added by Junjian
END populate_tax_lines;

/*---------------------------------------------------------------------------------
-------------------------+
| Created By : Wenqiong Zhou
|
| Creation Date : 10/Apr/2013
|
| Bug Number/ER Name : Phase IV Tax Determination
|
| SubProgram Name : delete_tax_lines
|
| Type : PROCEDURE
|
| Purpose : This procedure is to delete tax lines before population
|
|
|
| TDD Reference : Section
|
| Assumptions :
|
| Called From : called by determine_tax and recalculate_tax_wrapper
|

|----------------------------------------------------------------------------------
-------------------------|
| parameters IN/OUT Type Required
Description and Purpose |
| ------------ -------- ------ ----------
------------------------- |
| pn_det_factor_id IN NUMBER yes
Det factor id |

*----------------------------------------------------------------------------------
------------------------*/

PROCEDURE delete_tax_lines (
pn_det_factor_id IN NUMBER,
pv_call_from IN VARCHAR2 DEFAULT NULL
) --Added by Qinglei for Receiving 09-Jul-2013
IS
lv_api_name CONSTANT VARCHAR2 (30) := 'delete_tax_lines';
--Added by Junjian for AP tax flow
lv_misc ap_invoice_distributions_all.line_type_lookup_code
%TYPE
:= 'MISCELLANEOUS';
lv_process_status VARCHAR2 (30);
lv_process_message VARCHAR2 (150);

/* Bug#27479551, dejiang.liu/20180310. Add cursor to get invoice line with


posted flag. */
CURSOR c_dist_posted (p_invoice_id NUMBER, p_line_number NUMBER)
IS
SELECT 'Y'
FROM DUAL
WHERE EXISTS (
SELECT 'Distribution Posted'
FROM ap_invoice_distributions_all aid
WHERE aid.invoice_id = p_invoice_id
AND aid.invoice_line_number = p_line_number
AND aid.posted_flag = 'Y'
AND ROWNUM = 1);

l_dist_posted VARCHAR2 (1) := 'N';


l_discard_line_ok BOOLEAN := FALSE;

CURSOR c_factor_line (p_det_factor_id NUMBER)


IS
SELECT *
FROM jai_tax_det_factors
WHERE det_factor_id = p_det_factor_id;

rec_factor c_factor_line%ROWTYPE;

CURSOR c_tax_clearable (p_tax_line_id NUMBER)


IS
SELECT 'Y'
FROM jai_tax_lines jtl
WHERE jtl.tax_line_id = p_tax_line_id
AND ( NVL (jtl.recoverable_flag, 'N') = 'N'
OR EXISTS (
SELECT 'Recoverable and Not Claimed'
FROM DUAL
WHERE NVL (jtl.recoverable_flag, 'N') = 'Y'
AND NOT EXISTS (
SELECT 'Recovery Claimed'
FROM jai_rgm_recovery_lines jrrl
WHERE jrrl.entity_code = jtl.entity_code
AND jrrl.document_id = jtl.trx_id
AND jrrl.document_line_id =
jtl.trx_line_id
AND jrrl.tax_line_id = jtl.tax_line_id
AND jrrl.status IN
('RECOVERED' -- Recovered
,
'PARTI_REC' -- Partial Recovered
)))
);
l_tax_clear_flag VARCHAR2 (1) := 'N';
l_tax_line_id NUMBER;
BEGIN
IF (g_level_procedure >= fnd_log.g_current_runtime_level)
THEN
fnd_log.STRING (g_level_procedure,
g_module_name || lv_api_name,
lv_api_name || '----begin----' || '()+'
);
fnd_log.STRING (g_level_procedure,
g_module_name || lv_api_name,
'Input pn_det_factor_id id: ' || pn_det_factor_id
);
END IF;

--Modified by Qinglei for Receiving 09-Jul-2013 begin


IF NVL (pv_call_from, 'BASE') <> 'INTERFACE'
THEN
/* Bug#27479551 start, dejiang.liu/20180310. Add special logic for AP
invoice. */
OPEN c_factor_line (pn_det_factor_id);

FETCH c_factor_line
INTO rec_factor;

CLOSE c_factor_line;

IF rec_factor.application_id = 200
AND rec_factor.entity_code = 'AP_INVOICES'
THEN
IF (g_level_procedure >= fnd_log.g_current_runtime_level)
THEN
fnd_log.STRING
(g_level_procedure,
g_module_name || '.' || lv_api_name,
'Loop to discard/delete tax miscellaneous lines'
);
END IF;

--IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)


FOR misc_line IN (SELECT *
FROM ap_invoice_lines_all ail
WHERE ail.invoice_id = rec_factor.trx_id
AND TO_NUMBER (ail.reference_1) =
rec_factor.trx_line_number
AND ail.line_type_lookup_code =
'MISCELLANEOUS'
AND NVL (discarded_flag, 'N') = 'N')
LOOP
-- Get distribution posted flag.
OPEN c_dist_posted (misc_line.invoice_id,
misc_line.line_number
);

FETCH c_dist_posted
INTO l_dist_posted;

IF c_dist_posted%NOTFOUND
THEN
l_dist_posted := 'N';
END IF;

CLOSE c_dist_posted;

IF l_dist_posted = 'Y'
THEN
IF (g_level_procedure >= fnd_log.g_current_runtime_level)
THEN
fnd_log.STRING
(g_level_procedure,
g_module_name || '.' || lv_api_name,
'Discard misc line with there are distributions posted'
);
END IF;

--IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)

-- Bypass PO/Receiving reversal check before discard.


UPDATE ap_invoice_distributions_all aid
SET aid.po_distribution_id = NULL,
aid.rcv_transaction_id = NULL
WHERE invoice_id = misc_line.invoice_id
AND invoice_line_number = misc_line.line_number;

l_discard_line_ok :=
ap_invoice_lines_pkg.discard_inv_line
(p_line_rec => misc_line,
p_calling_mode => 'DISCARD',
p_inv_cancellable => NULL,
p_last_updated_by => fnd_global.user_id,
p_last_update_login => fnd_global.login_id,
p_error_code => lv_process_status,
p_token => lv_process_message,
p_calling_sequence => 'JAI PLSQL'
);

IF (g_level_procedure >= fnd_log.g_current_runtime_level)


THEN
IF l_discard_line_ok
THEN
fnd_log.STRING
(g_level_procedure,
g_module_name || '.' || lv_api_name,
'AP_INVOICE_LINES_PKG.DISCARD_INV_LINE returns: TRUE'
);
ELSE
fnd_log.STRING
(g_level_procedure,
g_module_name || '.' || lv_api_name,
'AP_INVOICE_LINES_PKG.DISCARD_INV_LINE returns:
FALSE'
|| 'with error_code: '
|| lv_process_status
|| ' token: '
|| lv_process_message
);
END IF;
END IF;

--IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)

--Update invoice lines reference back.


UPDATE ap_invoice_distributions_all aid
SET (aid.po_distribution_id, aid.rcv_transaction_id) =
(SELECT DISTINCT FIRST_VALUE
(aid_item.po_distribution_id)
OVER (ORDER BY aid_item.distribution_line_number),
FIRST_VALUE
(aid_item.rcv_transaction_id)
OVER (ORDER BY aid_item.distribution_line_number)
FROM ap_invoice_distributions_all aid_item
WHERE aid_item.invoice_id =
rec_factor.trx_id
AND aid_item.invoice_line_number =
rec_factor.trx_line_number)
WHERE aid.invoice_id = misc_line.invoice_id
AND aid.invoice_line_number = misc_line.line_number;

/* Bug#27747242 start, dejiang.liu/20180403. Add logic to clear


tax amount
after misc line discarded. */
-- Reset clearable flag.
l_tax_clear_flag := 'N';
l_tax_line_id := TO_NUMBER (misc_line.reference_2);

OPEN c_tax_clearable (l_tax_line_id);

FETCH c_tax_clearable
INTO l_tax_clear_flag;

IF c_tax_clearable%NOTFOUND
THEN
l_tax_clear_flag := 'N';
END IF;

CLOSE c_tax_clearable;

IF (g_level_procedure >= fnd_log.g_current_runtime_level)


THEN
fnd_log.STRING (g_level_procedure,
g_module_name || '.' || lv_api_name,
'Tax clearable for tax line '
|| l_tax_line_id
|| ': '
|| l_tax_clear_flag
);
END IF;

--IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)


IF l_tax_clear_flag = 'Y'
THEN
-- Clear tax amount for recoverable-not-claimed or non-
recoverable tax rate.
UPDATE jai_tax_lines jtl
SET rounded_tax_amt_tax_curr = 0,
rec_tax_amt_tax_curr = 0,
rounded_tax_amt_fun_curr = 0,
rounded_tax_amt_trx_curr = 0,
rec_tax_amt_funcl_curr = 0,
rec_tax_amt_trx_curr = 0,
unround_tax_amt_fun_curr = 0,
unround_tax_amt_tax_curr = 0,
unround_tax_amt_trx_curr = 0,
nrec_tax_amt_funcl_curr = 0,
nrec_tax_amt_tax_curr = 0,
nrec_tax_amt_trx_curr = 0,
last_updated_by = fnd_global.user_id,
last_update_date = SYSDATE,
object_version_number = object_version_number + 1
WHERE tax_line_id = l_tax_line_id;
ELSE
-- Tax not clearable, for accounted and claimed recoverable
tax.
-- Reserved.
NULL;
END IF;
/* Bug#27747242 end, dejiang.liu/20180403. */
ELSE
-- For not posted tax.
-- Delete invoice distributions.
DELETE ap_invoice_distributions_all invoice_dist
WHERE line_type_lookup_code = lv_misc
AND invoice_id = misc_line.invoice_id
AND invoice_line_number = misc_line.line_number;

IF (g_level_procedure >= fnd_log.g_current_runtime_level)


THEN
fnd_log.STRING
(g_level_procedure,
g_module_name || '.' || lv_api_name,
'Delete from ap_invoice_distributions_all: '
|| SQL%ROWCOUNT
|| ' ROWS DELETED'
);
END IF;

--IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)

-- Delete invoice lines.


DELETE ap_invoice_lines_all invoice_line
WHERE line_type_lookup_code = lv_misc
AND invoice_id = misc_line.invoice_id
AND line_number = misc_line.line_number;

IF (g_level_procedure >= fnd_log.g_current_runtime_level)


THEN
fnd_log.STRING (g_level_procedure,
g_module_name || '.' || lv_api_name,
'Delete from ap_invoice_lines_all: '
|| SQL%ROWCOUNT
|| ' ROWS DELETED'
);
END IF;

--IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)


-- Delete JAI dist lines.
DELETE jai_rec_nrec_dist tax_dist
WHERE EXISTS (
SELECT 1
FROM jai_tax_lines tax_line
WHERE tax_line.tax_line_id =
tax_dist.tax_line_id
AND tax_line.det_factor_id =
pn_det_factor_id
AND tax_line.entity_code = 'AP_INVOICES');

IF (g_level_procedure >= fnd_log.g_current_runtime_level)


THEN
fnd_log.STRING (g_level_procedure,
g_module_name || '.' || lv_api_name,
'Delete from jai_rec_nrec_dist: '
|| SQL%ROWCOUNT
|| ' ROWS DELETED'
);
END IF;

--IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)

-- Delete JAI tax lines.


DELETE jai_tax_lines
WHERE det_factor_id = pn_det_factor_id;

IF (g_level_procedure >= fnd_log.g_current_runtime_level)


THEN
fnd_log.STRING (g_level_procedure,
g_module_name || '.' || lv_api_name,
'Delete from jai_tax_lines: '
|| SQL%ROWCOUNT
|| ' ROWS DELETED'
);
END IF;
--IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)
END IF;
--IF l_dist_posted = 'Y'.
END LOOP;

IF (g_level_procedure >= fnd_log.g_current_runtime_level)


THEN
fnd_log.STRING (g_level_procedure,
g_module_name || '.' || lv_api_name,
'JLS Delete from jai_tax_lines: '
|| SQL%ROWCOUNT
|| ' ROWS DELETED'||'pn_det_factor_id '||
pn_det_factor_id
);
END IF;

-- added by zhiwei.xin for O2C flow end.


DELETE FROM jai_tax_lines
WHERE det_factor_id = pn_det_factor_id;
/* DELETE FROM jai_tax_lines tl
WHERE det_factor_id = pn_det_factor_id
AND EXISTS (SELECT 1
FROM jai_tax_det_factors det_fac
,ap_invoice_lines_all invl
WHERE det_fac.trx_id = invl.invoice_id
AND det_fac.trx_line_id = TO_NUMBER(invl.reference_1)
AND det_fac.entity_code = 'AP_INVOICES'
AND tl.det_factor_id = det_fac.det_factor_id
AND det_fac.det_factor_id = pn_det_factor_id
AND EXISTS (SELECT 1
FROM ap_invoice_distributions_all ind
WHERE invl.invoice_id = ind.invoice_id
AND invl.line_number = ind.invoice_line_number
AND ind.posted_flag = 'N'));
*/

ELSE
-- For other entities.

-- added by zhiwei.xin for O2C flow begin


jai_delete_tax_dist (p_det_factor_id => pn_det_factor_id,
x_process_status => lv_process_status,
x_process_message => lv_process_message
);

IF lv_process_status <> fnd_api.g_ret_sts_success


THEN
IF (g_level_procedure >= fnd_log.g_current_runtime_level)
THEN
fnd_log.STRING (g_level_procedure,
g_module_name || lv_api_name,
'delete_tax_dist return status:'
|| lv_process_status
);
END IF;

RAISE fnd_api.g_exc_unexpected_error;
END IF;

-- added by zhiwei.xin for O2C flow end.


DELETE FROM jai_tax_lines
WHERE det_factor_id = pn_det_factor_id;

IF (g_level_procedure >= fnd_log.g_current_runtime_level)


THEN
fnd_log.STRING (g_level_procedure,
g_module_name || '.' || lv_api_name,
'Delete from jai_tax_lines: '
|| SQL%ROWCOUNT
|| ' ROWS DELETED'
);
END IF;
--IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)
END IF; -- IF rec_factor.application_id = 200
/*
--Added by Junjian for AP tax flow on 17-Jul-2013 begin
--tii performance issue
\* jls for bug 27747242
DELETE ap_invoice_distributions_all invoice_dist
WHERE line_type_lookup_code = lv_misc
AND invoice_id IN (
SELECT trx_id
FROM jai_tax_det_factors det
WHERE det.entity_code = 'AP_INVOICES'
AND det.det_factor_id = pn_det_factor_id)
AND EXISTS (
SELECT 1
FROM jai_tax_det_factors det_fac,
ap_invoices_all aia,
ap_invoice_lines_all inv_line
WHERE \*26399170
det_fac.det_factor_id = pn_det_factor_id
AND TO_NUMBER (inv_line.reference_1) =
det_fac.trx_line_id
AND det_fac.trx_id = aia.invoice_id
AND det_fac.entity_code = 'AP_INVOICES'
AND det_fac.trx_id = invoice_dist.invoice_id
AND aia.invoice_id = inv_line.invoice_id
AND inv_line.line_type_lookup_code =
'MISCELLANEOUS'
AND inv_line.line_number =
invoice_dist.invoice_line_number);
*\

DELETE ap_invoice_distributions_all invoice_dist


WHERE line_type_lookup_code = lv_misc
--AND invoice_dist.posted_flag <> 'Y'
\* Bug#27479551, dejiang.liu/20180310. Add condition. *\
AND invoice_id = misc_line.invoice_id
AND invoice_line_number = misc_line.line_number
\*AND invoice_id IN (SELECT trx_id
FROM jai_tax_det_factors det
WHERE det.entity_code = 'AP_INVOICES'
AND det.det_factor_id = pn_det_factor_id)*\
\*
AND EXISTS (SELECT 1
FROM jai_tax_det_factors det_fac
,ap_invoices_all aia
,ap_invoice_lines_all inv_line
WHERE \*26399170*\
det_fac.det_factor_id = pn_det_factor_id
AND TO_NUMBER(inv_line.reference_1) = det_fac.trx_line_id
AND det_fac.trx_id = aia.invoice_id
AND det_fac.entity_code = 'AP_INVOICES'
AND det_fac.trx_id = invoice_dist.invoice_id
AND aia.invoice_id = inv_line.invoice_id
AND inv_line.line_type_lookup_code = 'MISCELLANEOUS'
AND inv_line.line_number = invoice_dist.invoice_line_number)*\
;

IF (g_level_procedure >= fnd_log.g_current_runtime_level) THEN


fnd_log.STRING(g_level_procedure
,g_module_name || lv_api_name
,'.Delete from ap_invoice_distributions_all, ' || SQL
%ROWCOUNT || ' ROWS DELETED ');
END IF; --( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)
\* jls for bug 27747242
DELETE ap_invoice_lines_all invoice_line
WHERE line_type_lookup_code = lv_misc
AND EXISTS (
SELECT 1
FROM jai_tax_det_factors det_fac
WHERE det_fac.trx_id = invoice_line.invoice_id
AND det_fac.trx_line_id =
TO_NUMBER (invoice_line.reference_1)
AND det_fac.det_factor_id = pn_det_factor_id
AND det_fac.entity_code = 'AP_INVOICES');

*\

DELETE ap_invoice_lines_all invoice_line


WHERE line_type_lookup_code = lv_misc
\* Bug#27479551, dejiang.liu/20180310. Add condition. *\
AND invoice_id = misc_line.invoice_id
AND line_number = misc_line.line_number
\*AND EXISTS (SELECT 1
FROM jai_tax_det_factors det_fac
WHERE det_fac.trx_id = invoice_line.invoice_id
AND det_fac.trx_line_id = TO_NUMBER(invoice_line.reference_1)
AND det_fac.det_factor_id = pn_det_factor_id
AND det_fac.entity_code = 'AP_INVOICES')
AND NOT EXISTS (SELECT 1
FROM ap_invoice_distributions_all ind
WHERE invoice_line.invoice_id = ind.invoice_id
AND invoice_line.line_number = ind.invoice_line_number
AND ind.posted_flag = 'Y')*\
;

IF (g_level_procedure >= fnd_log.g_current_runtime_level) THEN


fnd_log.STRING(g_level_procedure
,g_module_name || lv_api_name
,'.Delete from ap_invoice_lines_all, ' || SQL%ROWCOUNT || '
ROWS DELETED ');
END IF; --( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)

\* jls for bug 27747242

DELETE jai_rec_nrec_dist tax_dist


WHERE EXISTS (
SELECT 1
FROM jai_tax_lines tax_line
WHERE tax_line.tax_line_id = tax_dist.tax_line_id
AND tax_line.det_factor_id = pn_det_factor_id
AND tax_line.entity_code = 'AP_INVOICES');

*\

DELETE jai_rec_nrec_dist tax_dist


WHERE EXISTS (SELECT 1
FROM jai_tax_lines tax_line
WHERE tax_line.tax_line_id = tax_dist.tax_line_id
AND tax_line.det_factor_id = pn_det_factor_id
AND tax_line.entity_code = 'AP_INVOICES')
AND NOT EXISTS (SELECT 1
FROM ap_invoice_distributions_all ind
WHERE ind.invoice_distribution_id = tax_dist.tax_dist_id
AND ind.invoice_id = tax_dist.trx_id
AND ind.posted_flag = 'Y');

IF (g_level_procedure >= fnd_log.g_current_runtime_level) THEN


fnd_log.STRING(g_level_procedure
,g_module_name || lv_api_name
,'.Delete from jai_rec_nrec_dist, ' || SQL%ROWCOUNT || ' ROWS
DELETED ');
END IF; --( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)

--Added by Junjian for AP tax flow on 17-Jul-2013 end

-- added by zhiwei.xin for O2C flow begin


jai_delete_tax_dist(p_det_factor_id => pn_det_factor_id
,x_process_status => lv_process_status
,x_process_message => lv_process_message);

IF lv_process_status <> fnd_api.g_ret_sts_success THEN


IF (g_level_procedure >= fnd_log.g_current_runtime_level) THEN
fnd_log.STRING(g_level_procedure
,g_module_name || lv_api_name
,'delete_tax_dist return status:' || lv_process_status);
END IF;

RAISE fnd_api.g_exc_unexpected_error;
END IF;

-- added by zhiwei.xin for O2C flow end.

\* jls for bug 27747242


*\
DELETE FROM jai_tax_lines
WHERE det_factor_id = pn_det_factor_id;

\*DELETE FROM jai_tax_lines tl


WHERE det_factor_id = pn_det_factor_id
AND EXISTS (SELECT 1
FROM jai_tax_det_factors det_fac
,ap_invoice_lines_all invl
WHERE det_fac.trx_id = invl.invoice_id
AND det_fac.trx_line_id = TO_NUMBER(invl.reference_1)
AND det_fac.entity_code = 'AP_INVOICES'
AND tl.det_factor_id = det_fac.det_factor_id
AND det_fac.det_factor_id = pn_det_factor_id
AND EXISTS (SELECT 1
FROM ap_invoice_distributions_all ind
WHERE invl.invoice_id = ind.invoice_id
AND invl.line_number = ind.invoice_line_number
AND ind.posted_flag = 'N'));*\
*/
ELSE
DELETE FROM jai_tax_lines_interface
WHERE interface_det_factor_id = pn_det_factor_id;
END IF;

--Modified by Qinglei for Receiving 09-Jul-2013 end


IF (g_level_procedure >= fnd_log.g_current_runtime_level)
THEN
fnd_log.STRING (g_level_procedure,
g_module_name || lv_api_name,
lv_api_name || '----End----' || '()+'
);
END IF;
EXCEPTION
WHEN fnd_api.g_exc_unexpected_error
THEN
IF (g_level_unexpected >= fnd_log.g_current_runtime_level)
THEN
fnd_log.STRING (g_level_unexpected,
g_module_name || lv_api_name,
lv_process_message
);
END IF;
WHEN OTHERS
THEN
IF (g_level_procedure >= fnd_log.g_current_runtime_level)
THEN
fnd_log.STRING (g_level_procedure,
g_module_name || lv_api_name,
SQLERRM
);
fnd_log.STRING (g_level_procedure,
g_module_name || lv_api_name,
lv_api_name || '----End----' || '()+'
);
END IF;
END delete_tax_lines;

/*---------------------------------------------------------------------------------
----------------------------+
| Created By : Wenqiong Zhou
|
| Creation Date : 10/Apr/2013
|
| Bug Number/ER Name : Phase IV Tax Determination
|
| SubProgram Name : delete_tax_det_factors
|
| Type : PROCEDURE
|
| Purpose : This procedure is to delete tax det factors
|
|
|
| TDD Reference : Section
|
| Assumptions :
|
| Called From : called by product determine pkg for trx line delete
action. |

|----------------------------------------------------------------------------------
----------------------------|
| parameters IN/OUT Type Required
Description and Purpose |
| ------------ -------- ------ ----------
------------------------- |
| pn_application_id IN NUMBER yes
Application ID |
| pv_entity_code IN VARCHAR2 yes
Entity Code |
| pv_event_class_code IN VARCHAR2 yes Event
Class Code |
| pn_trx_id IN NUMBER yes
Transaction ID |
| pn_trx_line_id IN NUMBER default null
Transaction Line ID |
| pn_trx_loc_line_id IN NUMBER default null
Transaction Loc line ID |
| pv_trx_level_type IN VARCHAR2 default null
Transaction level Type |
| pv_process_status OUT VARCHAR2 yes
Process status |

*----------------------------------------------------------------------------------
---------------------------*/
PROCEDURE delete_tax_det_factors
(
pn_application_id IN NUMBER
,pv_entity_code IN VARCHAR2
,pv_event_class_code IN VARCHAR2
,pn_trx_id IN NUMBER
,pn_trx_line_id IN NUMBER DEFAULT NULL
,pn_trx_loc_line_id IN NUMBER DEFAULT NULL
,pv_trx_level_type IN VARCHAR2 DEFAULT NULL
,pv_trx_type IN VARCHAR2 DEFAULT NULL --Added by Qinglei for Receiving
09-Jul-2013
,pv_process_status OUT NOCOPY VARCHAR2
) IS
lv_api_name CONSTANT VARCHAR2(30) := 'delete_tax_det_factors';
BEGIN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----begin----' || '()+');
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Input parameter: ' || 'pn_application_id,' ||
pn_application_id || ',pv_entity_code:' ||
pv_entity_code || ',pv_event_class_code:' ||
pv_event_class_code || ',pn_trx_id:' || pn_trx_id ||
',pn_trx_line_id:' || pn_trx_line_id || 'pn_trx_loc_line_id:'
|| pn_trx_loc_line_id ||
'pv_trx_level_type:' || pv_trx_level_type);
END IF;
pv_process_status := FND_API.G_RET_STS_SUCCESS;
DELETE FROM jai_tax_lines
WHERE application_id = pn_application_id
AND entity_code = pv_entity_code
AND event_class_code = pv_event_class_code
AND trx_id = pn_trx_id
AND (trx_line_id = nvl(pn_trx_line_id
,trx_line_id) OR
nvl(trx_line_id
,-1) = nvl(pn_trx_line_id
,-1))
AND (trx_loc_line_id = nvl(pn_trx_loc_line_id
,trx_loc_line_id) OR
nvl(trx_loc_line_id
,-1) = nvl(pn_trx_loc_line_id
,-1))
AND trx_level_type = nvl(pv_trx_level_type
,trx_level_type)
AND nvl(trx_type
,'X') = nvl(pv_trx_type
,nvl(trx_type
,'X')); --Added by Qinglei for Receiving 09-Jul-2013

DELETE FROM jai_tax_det_factors


WHERE application_id = pn_application_id
AND entity_code = pv_entity_code
AND event_class_code = pv_event_class_code
AND trx_id = pn_trx_id
AND (trx_line_id = nvl(pn_trx_line_id
,trx_line_id) OR
nvl(trx_line_id
,-1) = nvl(pn_trx_line_id
,-1))
AND (trx_loc_line_id = nvl(pn_trx_loc_line_id
,trx_loc_line_id) OR
nvl(trx_loc_line_id
,-1) = nvl(pn_trx_loc_line_id
,-1))
AND trx_level_type = nvl(pv_trx_level_type
,trx_level_type)
AND nvl(trx_type
,'X') = nvl(pv_trx_type
,nvl(trx_type
,'X')); --Added by Qinglei for Receiving 09-Jul-2013

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'return status as :' || pv_process_status);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
EXCEPTION
WHEN OTHERS THEN
pv_process_status := FND_API.G_RET_STS_UNEXP_ERROR;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,SQLERRM);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
END delete_tax_det_factors;

/*---------------------------------------------------------------------------------
-----------------------------+
| Created By : Wenqiong Zhou
|
| Creation Date : 10/Apr/2013
|
| Bug Number/ER Name : Phase IV Tax Determination
|
| SubProgram Name : cancel_trx
|
| Type : PROCEDURE
|
| Purpose : This procedure is to update tax det factors's cancel
flag to Y |
|
|
| TDD Reference : Section
|
| Assumptions :
|
| Called From : called by product determine pkg for trx line cancel
action. |

|----------------------------------------------------------------------------------
-----------------------------|
| parameters IN/OUT Type Required
Description and Purpose |
| ------------ -------- ----- ----------
------------------------- |
| pn_application_id IN NUMBER yes
Application ID |
| pv_entity_code IN VARCHAR2 yes Entity
Code |
| pv_event_class_code IN VARCHAR2 yes Event
Class Code |
| pn_trx_id IN NUMBER yes
Transaction ID |
| pn_trx_line_id IN NUMBER default null
Transaction Line ID |
| pn_trx_loc_line_id IN NUMBER default null
Transaction Loc line ID |
| pv_trx_level_type IN VARCHAR2 default null
Transaction level Type |
| pv_process_status OUT VARCHAR2 yes
Process status |

*----------------------------------------------------------------------------------
----------------------------*/
PROCEDURE cancel_trx
(
pn_application_id IN NUMBER
,pv_entity_code IN VARCHAR2
,pv_event_class_code IN VARCHAR2
,pn_trx_id IN NUMBER
,pn_trx_line_id IN NUMBER DEFAULT NULL
,pn_trx_loc_line_id IN NUMBER DEFAULT NULL
,pv_trx_level_type IN VARCHAR2 DEFAULT NULL
,pv_process_status OUT NOCOPY VARCHAR2
) IS
lv_api_name CONSTANT VARCHAR2(30) := 'cancel_trx';
BEGIN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----begin----' || '()+');
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Input parameter: ' || 'pn_application_id,' ||
pn_application_id || ',pv_entity_code:' ||
pv_entity_code || ',pv_event_class_code:' ||
pv_event_class_code || ',pn_trx_id:' || pn_trx_id ||
',pn_trx_line_id:' || pn_trx_line_id || 'pn_trx_loc_line_id:'
|| pn_trx_loc_line_id ||
'pv_trx_level_type:' || pv_trx_level_type);
END IF;
pv_process_status := FND_API.G_RET_STS_SUCCESS;
UPDATE jai_tax_det_factors
SET cancel_flag = 'Y'
WHERE application_id = pn_application_id
AND entity_code = pv_entity_code
AND event_class_code = pv_event_class_code
AND trx_id = pn_trx_id
AND (trx_line_id = nvl(pn_trx_line_id
,trx_line_id) OR
nvl(trx_line_id
,-1) = nvl(pn_trx_line_id
,-1))
AND (trx_loc_line_id = nvl(pn_trx_loc_line_id
,trx_loc_line_id) OR
nvl(trx_loc_line_id
,-1) = nvl(pn_trx_loc_line_id
,-1))
AND trx_level_type = nvl(pv_trx_level_type
,trx_level_type);

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'return status as :' || pv_process_status);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
EXCEPTION
WHEN OTHERS THEN
pv_process_status := FND_API.G_RET_STS_UNEXP_ERROR;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,SQLERRM);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
END cancel_trx;

PROCEDURE get_fun_curr_dtls
(
p_operating_unit_id IN hr_operating_units.organization_id%TYPE
,p_fun_currency_code OUT NOCOPY gl_sets_of_books.currency_code%TYPE
,p_ledger_id OUT NOCOPY NUMBER
) IS

lv_sob_currency_code gl_sets_of_books.currency_code%TYPE;

l_func_curr_det jai_plsql_cache_pkg.func_curr_details;
BEGIN

l_func_curr_det := jai_plsql_cache_pkg.return_sob_curr(p_org_id =>


p_operating_unit_id);

p_ledger_id := l_func_curr_det.ledger_id;
p_fun_currency_code := l_func_curr_det.currency_code;

END get_fun_curr_dtls;

/*---------------------------------------------------------------------------------
-----------------------------+
| Created By : Wenqiong Zhou
|
| Creation Date : 10/Apr/2013
|
| Bug Number/ER Name : Phase IV Tax Determination
|
| SubProgram Name : validate_init_tax_line
|
| Type : PROCEDURE
|
| Purpose : This procedure is to validate and initialize the tax
line in |
| calculate tax input parameter
|
|
|
| TDD Reference : Section
|
| Assumptions :
|
| Called From : called by calculate_tax
|

|----------------------------------------------------------------------------------
-----------------------------|
| parameters IN/OUT Type Required
Description and Purpose |
| ------------ -------- ------ ----------
------------------------- |
| p_tax_line_rec IN JAI_TAX_LINES%rowtype yes
Tax Lines type |
| pv_process_status OUT VARCHAR2 yes
Process status |
| pv_process_message OUT VARCHAR2 yes
Process message |

*----------------------------------------------------------------------------------
----------------------------*/
PROCEDURE validate_init_tax_line
(
p_tax_line_rec IN OUT NOCOPY jai_tax_lines%ROWTYPE
,pv_call_from IN VARCHAR2 DEFAULT NULL --Added by Qinglei for Receiving
,pv_process_status OUT NOCOPY VARCHAR2
,pv_process_message OUT NOCOPY VARCHAR2
) IS

CURSOR c_tax_regime_type_rate_info IS
SELECT regime.regime_id
,tax_type.tax_type_id
,regime.regime_code
,regime.regime_type
,tax_type.allow_abatement
,tax_type.update_vendor_on_transaction
,tax_type.offset_flag
,tax_type.recoverable_flag
,tax_type.self_assessed_flag
,tax_type.reverse_credit_on_shipment
,tax_type.credit_basis_self_assessed
,tax_type.reporting_only_flag
,tax_type.tax_point_basis
,tax_rate.tax_rate_code
,tax_rate.tax_rate_type
,tax_rate.tax_status
,tax_rate.recovery_percentage
,tax_rate.inclusive_flag
FROM jai_regimes regime
,jai_tax_types tax_type
,jai_tax_rates tax_rate
WHERE tax_rate.tax_rate_id = p_tax_line_rec.tax_rate_id
AND tax_type.tax_type_id = tax_rate.tax_type_id
AND regime.regime_id = tax_rate.regime_id;

CURSOR c_1st_party_reg
(
cn_organization_id NUMBER
,cn_org_id NUMBER
,cn_location_id NUMBER
,cn_regime_id NUMBER
,cn_party_reg_id NUMBER /*26399170*/
) IS
SELECT reg_lines.party_reg_id first_party_reg_id
, /*26399170*/reg_lines.registration_type_code
first_party_primary_reg_name
,reg_lines.registration_number first_party_primary_reg_num
,reg_lines.sec_registration_type_code first_party_secondary_reg_name
,reg_lines.secondary_registration_number first_party_secondary_reg_num
,reg_lines.num_of_return_days
,reg_lines.tax_authority_id
,reg_lines.tax_authority_site_id
FROM /*JAI_PARTY_REGS reg,*/ /*26399170*/ jai_party_reg_lines reg_lines
/* JAI_REGIMES regime*/ /*26399170*/
/* Bug#18033001 start, change first party matching rule. */
/*
WHERE reg.party_type_code = decode(regime.regime_type,'T','IO','W','OU')
AND reg.party_reg_id = reg_lines.party_reg_id
AND reg.party_id =
decode(reg.party_type_code,'IO',cn_organization_id,'OU',cn_org_id)
AND reg.party_site_id =
decode(reg.party_type_code,'IO',cn_location_id,NULL)
*/
WHERE reg_lines.party_reg_id = cn_party_reg_id --26399170
/* (SELECT get_fp_matched_id(p_organization_id => cn_organization_id
,p_location_id => cn_location_id
,p_org_id => cn_org_id
,p_regime_type => regime.regime_type
,p_regime_id => cn_regime_id)
FROM dual)*/
/* Bug#18033001 end. */
AND reg_lines.regime_id = cn_regime_id
-- AND reg_lines.regime_id = regime.regime_id 26399170
--Added by Wenqiong for bug19450693 begin
AND reg_lines.line_context = 'REGISTRATIONS' /*For bug#19512503*/
AND nvl(reg_lines.effective_from
,SYSDATE - 1) <= SYSDATE
AND nvl(reg_lines.effective_to
,SYSDATE + 1) >= SYSDATE
--Added by Wenqiong for bug19450693 end
;

CURSOR c_3rd_party_reg
(
cv_party_type VARCHAR2
,cn_party_id NUMBER
,cn_party_site_id NUMBER
,cn_regime_id NUMBER
) IS
SELECT reg.party_reg_id third_party_reg_id
,reg_lines.registration_type_code third_party_primary_reg_name
,reg_lines.registration_number third_party_primary_reg_num
,reg_lines.sec_registration_type_code third_party_secondary_reg_name
,reg_lines.secondary_registration_number third_party_secondary_reg_num
,reg_lines.assessable_price_list_id
FROM jai_party_regs reg
,jai_party_reg_lines reg_lines
WHERE reg.party_type_code IN ('THIRD_PARTY'
,'THIRD_PARTY_SITE')
AND reg.supplier_flag = decode(cv_party_type
,PARTY_TYPE_SUPPLIER
,'Y'
,'N')
AND reg.customer_flag = decode(cv_party_type
,PARTY_TYPE_CUSTOMER
,'Y'
,'N')
AND reg.party_reg_id = reg_lines.party_reg_id
AND reg.party_id = cn_party_id
AND nvl(reg.party_site_id,-1)=nvl(cn_party_site_id,-1)
/* AND nvl(reg.party_site_id
,0) = nvl(cn_party_site_id
,nvl(reg.party_site_id
,0)) bug 28218686 */--Added by Wenqiong 0722
AND reg_lines.regime_id = cn_regime_id
--Added by Wenqiong for bug19450693 begin
AND reg_lines.line_context = 'REGISTRATIONS' /*For bug#19512503*/
AND nvl(reg_lines.effective_from
,SYSDATE - 1) <= SYSDATE
AND nvl(reg_lines.effective_to
,SYSDATE + 1) >= SYSDATE
--Added by Wenqiong for bug19450693 end
;
CURSOR c_3rd_party_reporting
(
cn_third_party_reg_id NUMBER
,cn_regime_id NUMBER
) IS
SELECT rep_ass.reporting_type_id
,rep_ass.reporting_code
FROM jai_reporting_associations rep_ass
,jai_reporting_types rep_type
WHERE rep_ass.reporting_type_id = rep_type.reporting_type_id
AND rep_ass.entity_code = 'THIRD_PARTY'
AND rep_ass.entity_id = cn_third_party_reg_id
AND rep_ass.regime_id = cn_regime_id
AND rep_type.reporting_usage = 'TR' --Transaction Attribute
AND nvl(rep_ass.effective_from
,SYSDATE - 1) <= SYSDATE
AND nvl(rep_ass.effective_to
,SYSDATE + 1) >= SYSDATE
AND nvl(rep_type.effective_from
,SYSDATE - 1) <= SYSDATE
AND nvl(rep_type.effective_to
,SYSDATE + 1) >= SYSDATE;

CURSOR c_tax_rate_percentage
(
cn_tax_rate_id NUMBER
,cd_tax_point_date DATE
) IS
SELECT tax_rate_percentage
FROM jai_tax_rates rate
,jai_tax_rate_details detail
WHERE rate.tax_rate_id = detail.tax_rate_id
AND rate.tax_rate_id = cn_tax_rate_id
AND rate.tax_rate_type = 'PERCENTAGE'
AND detail.tax_rate_detail_code = 'RATE_DETAILS'
-- commented out by zhiwei.xin for bug#18619014 begin
/*AND NVL( detail.effective_from, cd_tax_point_date - 1 ) <=
cd_tax_point_date
AND NVL( detail.effective_to, cd_tax_point_date + 1 ) >=
cd_tax_point_date*/
-- commented out by zhiwei.xin for bug#18619014 end.
-- added by zhiwei.xin for bug#18619014 begin
AND nvl(detail.effective_from
,nvl(cd_tax_point_date
,SYSDATE) - 1) <= nvl(cd_tax_point_date
,SYSDATE)
AND nvl(detail.effective_to
,nvl(cd_tax_point_date
,SYSDATE) + 1) >= nvl(cd_tax_point_date
,SYSDATE)
-- added by zhiwei.xin for bug#18619014 end.

CURSOR c_tax_rate_uom
(
cn_tax_rate_id NUMBER
,cd_tax_point_date DATE
) IS
SELECT (SELECT mum.uom_code
FROM mtl_units_of_measure mum
WHERE mum.unit_of_measure = detail.tax_rate_uom) tax_rate_uom
,tax_rate_uom_rate
FROM jai_tax_rates rate
,jai_tax_rate_details detail
WHERE rate.tax_rate_id = detail.tax_rate_id
AND rate.tax_rate_id = cn_tax_rate_id
AND rate.tax_rate_type LIKE 'UNIT_OF_MEASURE%'
AND detail.tax_rate_detail_code = 'RATE_DETAILS'
-- commented out by zhiwei.xin for bug#18619014 begin
/*AND NVL( detail.effective_from, cd_tax_point_date - 1 ) <=
cd_tax_point_date
AND NVL( detail.effective_to, cd_tax_point_date + 1 ) >=
cd_tax_point_date*/
-- commented out by zhiwei.xin for bug#18619014 end.
-- added by zhiwei.xin for bug#18619014 begin
AND nvl(detail.effective_from
,nvl(cd_tax_point_date
,SYSDATE) - 1) <= nvl(cd_tax_point_date
,SYSDATE)
AND nvl(detail.effective_to
,nvl(cd_tax_point_date
,SYSDATE) + 1) >= nvl(cd_tax_point_date
,SYSDATE)
-- added by zhiwei.xin for bug#18619014 end.
;

CURSOR c_tax_rate_abatement
(
cn_tax_rate_id NUMBER
,cd_tax_point_date DATE
) IS
SELECT tax_rate_abatement_type
,abatement_percentage
FROM jai_tax_rates rate
,jai_tax_rate_details detail
WHERE rate.tax_rate_id = detail.tax_rate_id
AND rate.tax_rate_id = cn_tax_rate_id
AND detail.tax_rate_detail_code = 'RATE_ABATEMENT'
-- commented out by zhiwei.xin for bug#18619014 begin
/*AND NVL( detail.effective_from, cd_tax_point_date - 1 ) <=
cd_tax_point_date
AND NVL( detail.effective_to, cd_tax_point_date + 1 ) >=
cd_tax_point_date*/
-- commented out by zhiwei.xin for bug#18619014 end.
-- added by zhiwei.xin for bug#18619014 begin
AND nvl(detail.effective_from
,nvl(cd_tax_point_date
,SYSDATE) - 1) <= nvl(cd_tax_point_date
,SYSDATE)
AND nvl(detail.effective_to
,nvl(cd_tax_point_date
,SYSDATE) + 1) >= nvl(cd_tax_point_date
,SYSDATE)
-- added by zhiwei.xin for bug#18619014 end.
;
CURSOR c_tax_rate_exception
(
cn_tax_rate_id NUMBER
,cd_tax_point_date DATE
) IS
SELECT tax_rate_classification
,standard_rate_percentage
,form_type
FROM jai_tax_rates rate
,jai_tax_rate_details detail
WHERE rate.tax_rate_id = detail.tax_rate_id
AND rate.tax_rate_id = cn_tax_rate_id
AND detail.tax_rate_detail_code = 'TAX_EXCEPTION'
-- commented out by zhiwei.xin for bug#18619014 begin
/*AND NVL( detail.effective_from, cd_tax_point_date - 1 ) <=
cd_tax_point_date
AND NVL( detail.effective_to, cd_tax_point_date + 1 ) >=
cd_tax_point_date*/
-- commented out by zhiwei.xin for bug#18619014 end.
-- added by zhiwei.xin for bug#18619014 begin
AND nvl(detail.effective_from
,nvl(cd_tax_point_date
,SYSDATE) - 1) <= nvl(cd_tax_point_date
,SYSDATE)
AND nvl(detail.effective_to
,nvl(cd_tax_point_date
,SYSDATE) + 1) >= nvl(cd_tax_point_date
,SYSDATE)
-- added by zhiwei.xin for bug#18619014 end.
;

r_tax_regime_type_rate_info c_tax_regime_type_rate_info%ROWTYPE;

rec_tax_det_factor jai_tax_det_factors%ROWTYPE;
ln_party_id jai_tax_det_factors.party_id%TYPE :=
rec_tax_det_factor.party_id;
ln_party_site_id jai_tax_det_factors.party_site_id%TYPE :=
rec_tax_det_factor.party_site_id;
lv_party_type jai_tax_det_factors.party_type%TYPE :=
rec_tax_det_factor.party_type;
ln_org_id jai_tax_det_factors.org_id%TYPE :=
rec_tax_det_factor.org_id;
ln_organization_id jai_tax_det_factors.organization_id%TYPE :=
rec_tax_det_factor.organization_id;
ln_location_id jai_tax_det_factors.location_id%TYPE :=
rec_tax_det_factor.location_id;
lv_tax_line_tpb jai_tax_lines.tax_point_basis%TYPE;
ld_tax_point_date DATE;
ln_tax_rate_percentage jai_tax_lines.tax_rate_percentage%TYPE;
lv_tax_rate_uom jai_tax_lines.tax_rate_uom%TYPE;
ln_tax_rate_uom_rate jai_tax_lines.tax_rate_uom_rate%TYPE;
lv_tax_rate_abatement_type jai_tax_lines.tax_rate_abatement_type%TYPE;
ln_tax_abatement_percentage jai_tax_lines.abatement_percentage%TYPE;
lv_tax_rate_classification jai_tax_lines.tax_rate_classification%TYPE;
ln_standard_rate jai_tax_lines.standard_rate%TYPE;
lv_form_type jai_tax_lines.form_type%TYPE;
rec_1st_party_reg c_1st_party_reg%ROWTYPE;
rec_3rd_party_reg c_3rd_party_reg%ROWTYPE;
lv_func_currency jai_tax_det_factors.trx_currency_code%TYPE;
ln_ledger_id NUMBER;
ln_party_reg_id NUMBER; --26399170
lv_process_message VARCHAR2(150);
l_precedence_rec precedence_rec_type;

lv_api_name CONSTANT VARCHAR2(50) := 'validate_init_tax_line';


BEGIN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----begin----' || '()+');
END IF;
pv_process_status := FND_API.G_RET_STS_SUCCESS;
--1. check trx info
IF p_tax_line_rec.det_factor_id IS NULL THEN
pv_process_status := FND_API.G_RET_STS_UNEXP_ERROR;
pv_process_message := 'det_factor_id is required';
RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
END IF;
--2. check tax info
IF p_tax_line_rec.tax_line_num IS NULL
OR p_tax_line_rec.tax_rate_id IS NULL THEN
pv_process_status := FND_API.G_RET_STS_UNEXP_ERROR;
pv_process_message := 'tax rate and tax line num are required. is required';
RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
END IF;

l_precedence_rec := NULL;

l_precedence_rec.p(1) := nvl(p_tax_line_rec.precedence_1
,-1);
l_precedence_rec.p(2) := nvl(p_tax_line_rec.precedence_2
,-1);
l_precedence_rec.p(3) := nvl(p_tax_line_rec.precedence_3
,-1);
l_precedence_rec.p(4) := nvl(p_tax_line_rec.precedence_4
,-1);
l_precedence_rec.p(5) := nvl(p_tax_line_rec.precedence_5
,-1);
l_precedence_rec.p(6) := nvl(p_tax_line_rec.precedence_6
,-1);
l_precedence_rec.p(7) := nvl(p_tax_line_rec.precedence_7
,-1);
l_precedence_rec.p(8) := nvl(p_tax_line_rec.precedence_8
,-1);
l_precedence_rec.p(9) := nvl(p_tax_line_rec.precedence_9
,-1);
l_precedence_rec.p(10) := nvl(p_tax_line_rec.precedence_10
,-1);
l_precedence_rec.p(11) := nvl(p_tax_line_rec.precedence_11
,-1);
l_precedence_rec.p(12) := nvl(p_tax_line_rec.precedence_12
,-1);
l_precedence_rec.p(13) := nvl(p_tax_line_rec.precedence_13
,-1);
l_precedence_rec.p(14) := nvl(p_tax_line_rec.precedence_14
,-1);
l_precedence_rec.p(15) := nvl(p_tax_line_rec.precedence_15
,-1);
l_precedence_rec.p(16) := nvl(p_tax_line_rec.precedence_16
,-1);
l_precedence_rec.p(17) := nvl(p_tax_line_rec.precedence_17
,-1);
l_precedence_rec.p(18) := nvl(p_tax_line_rec.precedence_18
,-1);
l_precedence_rec.p(19) := nvl(p_tax_line_rec.precedence_19
,-1);
l_precedence_rec.p(20) := nvl(p_tax_line_rec.precedence_20
,-1);

jai_tax_determination_pkg.validate_precedence(pn_tax_line_num =>
p_tax_line_rec.tax_line_num
,precedence =>
l_precedence_rec
,pv_process_status =>
pv_process_status
,pv_process_message =>
lv_process_message);

IF pv_process_status <> FND_API.G_RET_STS_SUCCESS THEN


pv_process_message := lv_process_message;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'validate_precedence returned errors as: ' ||
lv_process_message);
END IF;
RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
END IF;

IF p_tax_line_rec.org_id IS NULL
OR p_tax_line_rec.application_id IS NULL THEN
jai_tax_determination_pkg.get_tax_det_factor(pn_application_id => NULL
,pv_entity_code => NULL
,pv_event_class_code => NULL
,pv_trx_level_type => NULL
,pn_trx_id => NULL
,pn_trx_line_id => NULL
,pn_trx_loc_line_id => NULL
,pn_det_factor_id =>
p_tax_line_rec.det_factor_id
,pv_call_from =>
pv_call_from --Added by Qinglei for Receiving
,pr_det_factor =>
rec_tax_det_factor);

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'rec_tax_det_factor.TAX_INVOICE_DATE=' ||
rec_tax_det_factor.tax_invoice_date);
END IF;

ln_party_id := rec_tax_det_factor.party_id;
ln_party_site_id := rec_tax_det_factor.party_site_id;
lv_party_type := rec_tax_det_factor.party_type;
ln_org_id := rec_tax_det_factor.org_id;
ln_organization_id := rec_tax_det_factor.organization_id;
ln_location_id := rec_tax_det_factor.location_id;

p_tax_line_rec.org_id := rec_tax_det_factor.org_id;
p_tax_line_rec.organization_id := rec_tax_det_factor.organization_id;
p_tax_line_rec.location_id := rec_tax_det_factor.location_id;

p_tax_line_rec.application_id := rec_tax_det_factor.application_id;
p_tax_line_rec.entity_code := rec_tax_det_factor.entity_code;
p_tax_line_rec.event_class_code := rec_tax_det_factor.event_class_code;
p_tax_line_rec.event_type_code := rec_tax_det_factor.event_type_code;
p_tax_line_rec.tax_event_class_code :=
rec_tax_det_factor.tax_event_class_code;
p_tax_line_rec.tax_event_type_code :=
rec_tax_det_factor.tax_event_type_code;
p_tax_line_rec.trx_id := rec_tax_det_factor.trx_id;
p_tax_line_rec.trx_line_id := rec_tax_det_factor.trx_line_id;
p_tax_line_rec.trx_loc_line_id := rec_tax_det_factor.trx_loc_line_id;
p_tax_line_rec.trx_level_type := rec_tax_det_factor.trx_level_type;
/*ADDED nvl condition to get the trx_date as tax invoice date ,bug#25879349*/
p_tax_line_rec.trx_date :=
nvl(rec_tax_det_factor.tax_invoice_date
,rec_tax_det_factor.trx_date);
p_tax_line_rec.legal_entity_id :=
rec_tax_det_factor.legal_entity_id;
p_tax_line_rec.trx_number := rec_tax_det_factor.trx_number;
p_tax_line_rec.trx_type := rec_tax_det_factor.trx_type;
p_tax_line_rec.trx_line_number :=
rec_tax_det_factor.trx_line_number;
p_tax_line_rec.party_id := nvl(p_tax_line_rec.party_id
,ln_party_id);
p_tax_line_rec.party_site_id := nvl(p_tax_line_rec.party_site_id
,ln_party_site_id);
p_tax_line_rec.party_type := rec_tax_det_factor.party_type;
p_tax_line_rec.trx_currency_code :=
rec_tax_det_factor.trx_currency_code;
p_tax_line_rec.currency_conversion_date :=
rec_tax_det_factor.currency_conversion_date;
p_tax_line_rec.currency_conversion_rate :=
rec_tax_det_factor.currency_conversion_rate;
p_tax_line_rec.currency_conversion_type :=
rec_tax_det_factor.currency_conversion_type;
IF p_tax_line_rec.tax_currency_code IS NULL THEN
p_tax_line_rec.tax_currency_code :=
rec_tax_det_factor.trx_currency_code;
p_tax_line_rec.tax_currency_conversion_date :=
rec_tax_det_factor.currency_conversion_date;
p_tax_line_rec.tax_currency_conversion_type :=
rec_tax_det_factor.currency_conversion_type;
p_tax_line_rec.tax_currency_conversion_rate :=
rec_tax_det_factor.currency_conversion_rate;
END IF;
p_tax_line_rec.item_id := rec_tax_det_factor.item_id;
--bug 27013873 p_tax_line_rec.trx_uom :=
rec_tax_det_factor.trx_uom_code;
p_tax_line_rec.unit_price := rec_tax_det_factor.unit_price;
p_tax_line_rec.trx_line_quantity :=
rec_tax_det_factor.trx_line_quantity;
p_tax_line_rec.line_amt := rec_tax_det_factor.line_amt;
p_tax_line_rec.ref_doc_application_id :=
rec_tax_det_factor.ref_doc_application_id;
p_tax_line_rec.ref_doc_entity_code :=
rec_tax_det_factor.ref_doc_entity_code;
p_tax_line_rec.ref_doc_event_class_code :=
rec_tax_det_factor.ref_doc_event_class_code;
p_tax_line_rec.ref_doc_trx_id :=
rec_tax_det_factor.ref_doc_trx_id;
p_tax_line_rec.ref_doc_line_id :=
rec_tax_det_factor.ref_doc_line_id;
p_tax_line_rec.ref_doc_loc_line_id :=
rec_tax_det_factor.ref_doc_loc_line_id;
p_tax_line_rec.ref_doc_trx_type :=
rec_tax_det_factor.ref_doc_trx_type;
p_tax_line_rec.ref_doc_trx_level_type :=
rec_tax_det_factor.ref_doc_trx_level_type;
p_tax_line_rec.applied_to_application_id :=
rec_tax_det_factor.applied_to_application_id;
p_tax_line_rec.applied_to_entity_code :=
rec_tax_det_factor.applied_to_entity_code;
p_tax_line_rec.applied_to_event_class_code :=
rec_tax_det_factor.applied_to_event_class_code;
p_tax_line_rec.applied_to_trx_id :=
rec_tax_det_factor.applied_to_trx_id;
p_tax_line_rec.applied_to_trx_line_id :=
rec_tax_det_factor.applied_to_trx_line_id;
p_tax_line_rec.applied_to_loc_line_id :=
rec_tax_det_factor.applied_to_loc_line_id;
p_tax_line_rec.applied_to_trx_type :=
rec_tax_det_factor.applied_to_trx_type;
p_tax_line_rec.applied_to_trx_level_type :=
rec_tax_det_factor.applied_to_trx_level_type;

p_tax_line_rec.applied_from_application_id :=
rec_tax_det_factor.applied_from_application_id;
p_tax_line_rec.applied_from_entity_code :=
rec_tax_det_factor.applied_from_entity_code;
p_tax_line_rec.applied_from_event_class_code :=
rec_tax_det_factor.applied_from_event_class_code;
p_tax_line_rec.applied_from_trx_id :=
rec_tax_det_factor.applied_from_trx_id;
p_tax_line_rec.applied_from_trx_line_id :=
rec_tax_det_factor.applied_from_trx_line_id;
p_tax_line_rec.applied_from_loc_line_id :=
rec_tax_det_factor.applied_from_loc_line_id;
p_tax_line_rec.applied_from_trx_type :=
rec_tax_det_factor.applied_from_trx_type;
p_tax_line_rec.applied_from_trx_level_type :=
rec_tax_det_factor.applied_from_trx_level_type;

END IF;
IF p_tax_line_rec.ledger_id IS NULL
OR p_tax_line_rec.functional_currency_code IS NULL THEN
jai_tax_determination_pkg.get_fun_curr_dtls(p_tax_line_rec.org_id
,lv_func_currency
,ln_ledger_id);
p_tax_line_rec.ledger_id := ln_ledger_id;
p_tax_line_rec.functional_currency_code := lv_func_currency;
END IF;
-- 2. populated tax type, tax regime, 1st party
IF p_tax_line_rec.tax_type_id IS NULL
OR p_tax_line_rec.tax_regime_id IS NULL
OR p_tax_line_rec.tax_point_date IS NULL
OR p_tax_line_rec.tax_point_basis IS NULL
OR p_tax_line_rec.actual_tax_rate IS NULL THEN

OPEN c_tax_regime_type_rate_info;
FETCH c_tax_regime_type_rate_info
INTO r_tax_regime_type_rate_info;
CLOSE c_tax_regime_type_rate_info;

--Modified by Junjian for AP tax flow on 16-Aug-2013 begin


IF p_tax_line_rec.tax_point_basis IS NULL THEN
jai_tax_determination_pkg.derive_tax_point_basis(pn_application_id =>
p_tax_line_rec.application_id
,pv_entity_code =>
rec_tax_det_factor.entity_code
,pv_event_class_code =>
p_tax_line_rec.event_class_code
,pv_event_type_code =>
p_tax_line_rec.event_type_code
,pv_tax_type_tpb =>
r_tax_regime_type_rate_info.tax_point_basis
,pv_tax_line_tpb =>
lv_tax_line_tpb);
ELSE
lv_tax_line_tpb := p_tax_line_rec.tax_point_basis;
END IF;

IF p_tax_line_rec.tax_point_date IS NULL THEN


jai_tax_determination_pkg.derive_tax_point_date(pn_application_id =>
p_tax_line_rec.application_id
,pv_entity_code =>
p_tax_line_rec.entity_code
,pv_event_class_code =>
p_tax_line_rec.event_class_code
,pn_trx_id =>
p_tax_line_rec.trx_id
,pn_trx_line_id =>
p_tax_line_rec.trx_line_id
,pn_trx_loc_line_id =>
p_tax_line_rec.trx_loc_line_id
,pd_trx_date =>
p_tax_line_rec.trx_date
-- added by zhiwei.xin for
bug#18619014
,pv_tax_point_basis =>
lv_tax_line_tpb
,pd_tax_point_date =>
ld_tax_point_date);
ELSE
ld_tax_point_date := p_tax_line_rec.tax_point_date;
END IF;
--Modified by Junjian for AP tax flow on 16-Aug-2013 end

p_tax_line_rec.tax_rate_code :=
r_tax_regime_type_rate_info.tax_rate_code;
p_tax_line_rec.tax_rate_type :=
r_tax_regime_type_rate_info.tax_rate_type;
p_tax_line_rec.tax_status :=
r_tax_regime_type_rate_info.tax_status;
p_tax_line_rec.recovery_percentage :=
r_tax_regime_type_rate_info.recovery_percentage;
p_tax_line_rec.inclusive_flag :=
nvl(r_tax_regime_type_rate_info.inclusive_flag
,'N');
p_tax_line_rec.tax_type_id :=
r_tax_regime_type_rate_info.tax_type_id;
p_tax_line_rec.abatement_flag :=
nvl(r_tax_regime_type_rate_info.allow_abatement
,'N');
p_tax_line_rec.update_vendor_on_transaction :=
nvl(r_tax_regime_type_rate_info.update_vendor_on_transaction
,'N');
p_tax_line_rec.reporting_only_flag :=
nvl(r_tax_regime_type_rate_info.reporting_only_flag
,'N');
p_tax_line_rec.offset_flag :=
r_tax_regime_type_rate_info.offset_flag;
p_tax_line_rec.recoverable_flag :=
nvl(r_tax_regime_type_rate_info.recoverable_flag
,'N');
p_tax_line_rec.self_assessed_flag :=
nvl(r_tax_regime_type_rate_info.self_assessed_flag
,'N');
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'prepare attributes from 2nd part tax info');
END IF;

p_tax_line_rec.reverse_credit_on_shipment :=
r_tax_regime_type_rate_info.reverse_credit_on_shipment;
p_tax_line_rec.credit_basis_self_assessed :=
r_tax_regime_type_rate_info.credit_basis_self_assessed;

p_tax_line_rec.tax_point_basis := lv_tax_line_tpb;
p_tax_line_rec.tax_point_date := ld_tax_point_date;
p_tax_line_rec.tax_regime_id := r_tax_regime_type_rate_info.regime_id;

p_tax_line_rec.tax_regime_code := r_tax_regime_type_rate_info.regime_code;
p_tax_line_rec.tax_regime_type := r_tax_regime_type_rate_info.regime_type;

--populate 1st party related attributes


/*start additions for bug#26399170*/
ln_party_reg_id := NULL;

ln_party_reg_id := get_fp_matched_id(p_organization_id =>


p_tax_line_rec.organization_id
,p_location_id =>
p_tax_line_rec.location_id
,p_org_id =>
p_tax_line_rec.org_id
,p_regime_type => 'T'
,p_regime_id =>
p_tax_line_rec.tax_regime_id);

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'ln_party_Reg_id retrieved is ' || ln_party_reg_id);
END IF;
/*end bug#26399170*/
OPEN c_1st_party_reg(cn_organization_id => p_tax_line_rec.organization_id
,cn_org_id => p_tax_line_rec.org_id
,cn_location_id => p_tax_line_rec.location_id
,cn_regime_id => p_tax_line_rec.tax_regime_id
,cn_party_reg_id => ln_party_reg_id); --26399170
FETCH c_1st_party_reg
INTO rec_1st_party_reg;
CLOSE c_1st_party_reg;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'prepare attributes from 1st party reg');
END IF;
p_tax_line_rec.first_party_reg_id :=
rec_1st_party_reg.first_party_reg_id;
p_tax_line_rec.first_party_primary_reg_name :=
rec_1st_party_reg.first_party_primary_reg_name;
p_tax_line_rec.first_party_primary_reg_num :=
rec_1st_party_reg.first_party_primary_reg_num;
p_tax_line_rec.first_party_secondary_reg_name :=
rec_1st_party_reg.first_party_secondary_reg_name;
p_tax_line_rec.first_party_secondary_reg_num :=
rec_1st_party_reg.first_party_secondary_reg_num;
p_tax_line_rec.tax_authority_id :=
rec_1st_party_reg.tax_authority_id;
p_tax_line_rec.tax_authority_site_id :=
rec_1st_party_reg.tax_authority_site_id;

--populate 3rd party related attributes


rec_3rd_party_reg := NULL;
OPEN c_3rd_party_reg(cv_party_type => p_tax_line_rec.party_type
,cn_party_id => p_tax_line_rec.party_id
,cn_party_site_id => p_tax_line_rec.party_site_id
,cn_regime_id => p_tax_line_rec.tax_regime_id);
FETCH c_3rd_party_reg
INTO rec_3rd_party_reg;
CLOSE c_3rd_party_reg;
--Added by Wenqiong 0722 begin
IF nvl(rec_3rd_party_reg.third_party_reg_id
,0) = 0 THEN
OPEN c_3rd_party_reg(cv_party_type => p_tax_line_rec.party_type
,cn_party_id => p_tax_line_rec.party_id
,cn_party_site_id => NULL
,cn_regime_id => p_tax_line_rec.tax_regime_id);
FETCH c_3rd_party_reg
INTO rec_3rd_party_reg;
CLOSE c_3rd_party_reg;
END IF;
--Added by Wenqiong 0722 end
p_tax_line_rec.third_party_reg_id :=
rec_3rd_party_reg.third_party_reg_id;
p_tax_line_rec.third_party_primary_reg_name :=
rec_3rd_party_reg.third_party_primary_reg_name;
p_tax_line_rec.third_party_primary_reg_num :=
rec_3rd_party_reg.third_party_primary_reg_num;
p_tax_line_rec.third_party_secondary_reg_name :=
rec_3rd_party_reg.third_party_secondary_reg_name;
p_tax_line_rec.third_party_secondary_reg_num :=
rec_3rd_party_reg.third_party_secondary_reg_num;
-- commented out by zhiwei.xin for bug#19915573
--p_tax_line_rec.assessable_price_list_id :=
rec_3rd_party_reg.assessable_price_list_id ;
-- added by zhiwei.xin for bug#19915573 begin
IF nvl(p_tax_line_rec.assessable_price_list_id
,-1) = -1
AND nvl(p_tax_line_rec.user_entered_av
,0) = 0 THEN
p_tax_line_rec.assessable_price_list_id :=
rec_3rd_party_reg.assessable_price_list_id;
END IF;
-- added by zhiwei.xin for bug#19915573 end.

OPEN c_3rd_party_reporting(rec_3rd_party_reg.third_party_reg_id
,p_tax_line_rec.tax_regime_id);
FETCH c_3rd_party_reporting
INTO p_tax_line_rec.reporting_type_id
,p_tax_line_rec.reporting_code;
CLOSE c_3rd_party_reporting;

get_rounding_rules(pn_org_id => p_tax_line_rec.org_id


,pn_organization_id =>
p_tax_line_rec.organization_id
,pn_location_id => p_tax_line_rec.location_id
,pn_regime_id => p_tax_line_rec.tax_regime_id
,pv_tax_rounded_to =>
p_tax_line_rec.tax_rounded_to
,pv_tax_rounding_factor =>
p_tax_line_rec.tax_rounding_factor
,pv_taxable_rounded_to =>
p_tax_line_rec.taxable_rounded_to
,pv_taxable_rounding_factor =>
p_tax_line_rec.taxable_rounding_factor
,pv_qty_rounding_rule =>
p_tax_line_rec.quantity_rounded_to
,pv_qty_rounding_factor =>
p_tax_line_rec.quantity_rounding_factor
,pv_process_status => pv_process_status);

OPEN c_tax_rate_percentage(p_tax_line_rec.tax_rate_id
,ld_tax_point_date);
FETCH c_tax_rate_percentage
INTO ln_tax_rate_percentage;
CLOSE c_tax_rate_percentage;

OPEN c_tax_rate_uom(p_tax_line_rec.tax_rate_id
,ld_tax_point_date);
FETCH c_tax_rate_uom
INTO lv_tax_rate_uom
,ln_tax_rate_uom_rate;
CLOSE c_tax_rate_uom;

OPEN c_tax_rate_abatement(p_tax_line_rec.tax_rate_id
,ld_tax_point_date);
FETCH c_tax_rate_abatement
INTO lv_tax_rate_abatement_type
,ln_tax_abatement_percentage;
CLOSE c_tax_rate_abatement;

OPEN c_tax_rate_exception(p_tax_line_rec.tax_rate_id
,ld_tax_point_date);
FETCH c_tax_rate_exception
INTO lv_tax_rate_classification
,ln_standard_rate
,lv_form_type;
CLOSE c_tax_rate_exception;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'prepare attributes from tax rate details');
END IF;
p_tax_line_rec.tax_rate_percentage := ln_tax_rate_percentage;
--bug 27013873: Start
IF p_tax_line_rec.tax_rate_type NOT IN ('UNIT_OF_MEASURE_ADHOC') THEN
p_tax_line_rec.tax_rate_uom := lv_tax_rate_uom;
END IF;
--bug 27013873: End
--Changed by Qiong for bug 17078570 Begin
--p_tax_line_rec.tax_rate_uom_rate := ln_tax_rate_uom_rate;
p_tax_line_rec.tax_rate_uom_rate := nvl(p_tax_line_rec.tax_rate_uom_rate
,ln_tax_rate_uom_rate);
--Changed by Qiong for bug 17078570 End
p_tax_line_rec.tax_rate_abatement_type := lv_tax_rate_abatement_type;
p_tax_line_rec.abatement_percentage := ln_tax_abatement_percentage;
p_tax_line_rec.tax_rate_classification := lv_tax_rate_classification;
p_tax_line_rec.standard_rate := ln_standard_rate;
p_tax_line_rec.form_type := lv_form_type;

END IF;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;

EXCEPTION
WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
pv_process_status := FND_API.G_RET_STS_UNEXP_ERROR;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Error message as:' || pv_process_message);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
WHEN OTHERS THEN
pv_process_status := FND_API.G_RET_STS_UNEXP_ERROR;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,SQLERRM);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;

END validate_init_tax_line;

/*---------------------------------------------------------------------------------
-----------------------+
| Created By : Wenqiong Zhou
|
| Creation Date : 10/Apr/2013
|
| Bug Number/ER Name : Phase IV Tax Determination
|
| SubProgram Name : log_line_det_factor
|
| Type : PROCEDURE
|
| Purpose : This procedure is to log all the fields of det factor
line |
|
|
| TDD Reference : Section
|
| Assumptions :
|
| Called From :
|

|----------------------------------------------------------------------------------
-----------------------|
| parameters IN/OUT Type Required
Description and Purpose |
| ------------ -------- ------ ----------
------------------------- |
| r_det_factor IN JAI_TAX_DET_FACTORS %rowtype yes
Det factor record |
| pv_process_status OUT VARCHAR2 yes
Process status |
| pv_process_message OUT VARCHAR2 yes
Process message |

*----------------------------------------------------------------------------------
----------------------*/
PROCEDURE log_line_det_factor(r_det_factor jai_tax_det_factors%ROWTYPE) IS
lv_api_name CONSTANT VARCHAR2(50) := 'log_line_det_factor';
BEGIN

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----begin----' || '()+');
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
, 'det_factor_id:' || r_det_factor.det_factor_id || ',org_id:'
|| r_det_factor.org_id ||
',organization_id :' || r_det_factor.organization_id ||
',location_id :' ||
r_det_factor.location_id || ',ship_from_location_id :' ||
r_det_factor.ship_from_location_id ||
',ship_to_location_id :' ||
r_det_factor.ship_to_location_id || ',bill_from_location_id :' ||
r_det_factor.bill_from_location_id ||
',bill_to_location_id :' ||
r_det_factor.bill_to_location_id || ',application_id :' ||
r_det_factor.application_id ||
',entity_code:' || r_det_factor.entity_code ||
',event_class_code:' ||
r_det_factor.event_class_code || ',event_type_code:' ||
r_det_factor.event_type_code ||
',tax_event_class_code :' ||
r_det_factor.tax_event_class_code || ',tax_event_type_code:' ||
r_det_factor.tax_event_type_code || ',line_level_action :'
|| r_det_factor.line_level_action ||
',trx_id :' || r_det_factor.trx_id || ',trx_line_id:' ||
r_det_factor.trx_line_id ||
',trx_level_type:' || r_det_factor.trx_level_type ||
',trx_loc_line_id:' ||
r_det_factor.trx_loc_line_id || ',trx_date:' ||
r_det_factor.trx_date || ',legal_entity_id:' ||
r_det_factor.legal_entity_id || ',trx_number:' ||
r_det_factor.trx_number || ',trx_type:' ||
r_det_factor.trx_type || ',trx_line_number:' ||
r_det_factor.trx_line_number ||
',trx_currency_code:' || r_det_factor.trx_currency_code ||
',currency_conversion_date :' ||
r_det_factor.currency_conversion_date ||
',currency_conversion_rate :' ||
r_det_factor.currency_conversion_rate ||
',currency_conversion_type :' ||
r_det_factor.currency_conversion_type || ',item_id :' ||
r_det_factor.item_id || ',trx_uom_code:' ||
r_det_factor.trx_uom_code || ',unit_price:' ||
r_det_factor.unit_price || ',trx_line_quantity :' ||
r_det_factor.trx_line_quantity || ',line_amt:' ||
r_det_factor.line_amt || ',party_type :' ||
r_det_factor.party_type || ',party_id:' ||
r_det_factor.party_id || ',party_site_id:' ||
r_det_factor.party_site_id || ',item_classification:' ||
r_det_factor.item_classification ||
',cancel_flag:' || r_det_factor.cancel_flag ||
',tax_rule_id:' || r_det_factor.tax_rule_id ||
',default_tax_category_id:' ||
r_det_factor.default_tax_category_id ||
',override_tax_category_id:' ||
r_det_factor.override_tax_category_id || ',user_modified_flag:' ||
r_det_factor.user_modified_flag ||
',tax_determination_basis:' ||
r_det_factor.tax_determination_basis ||
',first_party_report_code_id:' ||
r_det_factor.first_party_report_code_id ||
',third_party_report_code_id:' ||
r_det_factor.third_party_report_code_id ||
',item_report_code_id:' ||
r_det_factor.item_report_code_id
/* Bug#26279373, dejiang.liu/20170615. Add column for HSN/SAC.
*/
|| ',hsn_code_id:' || r_det_factor.hsn_code_id ||
',sac_code_id:' || r_det_factor.sac_code_id ||
',ref_doc_application_id:' ||
r_det_factor.ref_doc_application_id || ',ref_doc_entity_code:' ||
r_det_factor.ref_doc_entity_code ||
',ref_doc_event_class_code:' ||
r_det_factor.ref_doc_event_class_code || ',ref_doc_trx_id:'
|| r_det_factor.ref_doc_trx_id ||
',ref_doc_line_id:' || r_det_factor.ref_doc_line_id ||
',ref_doc_loc_line_id:' ||
r_det_factor.ref_doc_loc_line_id ||
',ref_doc_trx_level_type:' ||
r_det_factor.ref_doc_trx_level_type || ',ref_doc_trx_type:'
|| r_det_factor.ref_doc_trx_type ||
',applied_from_application_id:' ||
r_det_factor.applied_from_application_id ||
',applied_from_entity_code:' ||
r_det_factor.applied_from_entity_code ||
',applied_from_event_class_code:' ||
r_det_factor.applied_from_event_class_code ||
',applied_from_trx_id:' || r_det_factor.applied_from_trx_id
|| ',applied_from_line_id:' ||
r_det_factor.applied_from_trx_line_id ||
',applied_from_loc_line_id:' ||
r_det_factor.applied_from_loc_line_id ||
',applied_from_trx_level_type:' ||
r_det_factor.applied_from_trx_level_type ||
',applied_from_trx_type:' ||
r_det_factor.applied_from_trx_type ||
',applied_to_application_id:' ||
r_det_factor.applied_to_application_id ||
',applied_to_entity_code:' ||
r_det_factor.applied_to_entity_code ||
',applied_to_event_class_code:' ||
r_det_factor.applied_to_event_class_code ||
',applied_to_trx_id:' ||
r_det_factor.applied_to_trx_id || ',applied_to_line_id:' ||
r_det_factor.applied_to_trx_line_id ||
',applied_to_loc_line_id:' ||
r_det_factor.applied_to_loc_line_id ||
',applied_to_trx_level_type:' ||
r_det_factor.applied_to_trx_level_type ||
',applied_to_trx_type:' || r_det_factor.applied_to_trx_type
|| ',intended_use:' ||
r_det_factor.intended_use --Added by Junjian for bug#19659883
|| ',tax_invoice_num:' || r_det_factor.tax_invoice_num --mani
for RTV bug 26321149
|| ',tax_invoice_date:' || r_det_factor.tax_invoice_date
--mani for RTV bug 26321149
|| ',acknowledgement_number:' ||
r_det_factor.acknowledgement_number --mani for RTV bug 26321149
|| ',acknowledgement_date:' ||
r_det_factor.acknowledgement_date --mani for RTV bug 26321149
|| ',original_tax_invoice_num:' ||
r_det_factor.original_tax_invoice_num --mani for RTV bug 26321149
|| ',original_tax_invoice_date:' ||
r_det_factor.original_tax_invoice_date --mani for RTV bug 26321149
);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
END log_line_det_factor;

/*---------------------------------------------------------------------------------
---------------------------+
| Created By : Wenqiong Zhou
|
| Creation Date : 10/Apr/2013
|
| Bug Number/ER Name : Phase IV Tax Determination
|
| SubProgram Name : log_tax_line
|
| Type : PROCEDURE
|
| Purpose : This procedure is to log all the fields of tax line
|
|
|
| TDD Reference : Section
|
| Assumptions :
|
| Called From :
|

|----------------------------------------------------------------------------------
---------------------------|
| parameters IN/OUT Type Required
Description and Purpose |
| ------------ -------- ------ ----------
------------------------- |
| r_tax_line IN JAI_TAX_LINES%rowtype yes
tax line record |
| pv_process_status OUT VARCHAR2 yes
Process status |
| pv_process_message OUT VARCHAR2 yes
Process message |

*----------------------------------------------------------------------------------
--------------------------*/
PROCEDURE log_tax_line(r_tax_line jai_tax_lines%ROWTYPE) IS
lv_api_name CONSTANT VARCHAR2(50) := 'log_tax_line';
BEGIN

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '---Start----');
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'tax_line_id' || r_tax_line.tax_line_id || ',det_factor_id,
' ||
r_tax_line.det_factor_id || ',org_id, '
|| r_tax_line.org_id ||
',organization_id , ' ||
r_tax_line.organization_id ||
',location_id , ' || r_tax_line.location_id ||
',application_id , ' ||
r_tax_line.application_id || ',entity_code , '
|| r_tax_line.entity_code ||
',event_class_code , ' ||
r_tax_line.event_class_code ||
',event_type_code, ' ||
r_tax_line.event_type_code ||
',tax_event_class_code , ' ||
r_tax_line.tax_event_class_code ||
',tax_event_type_code , ' ||
r_tax_line.tax_event_type_code ||
',ledger_id , ' || r_tax_line.ledger_id ||
',trx_id , ' ||
r_tax_line.trx_id || ',trx_line_id , ' ||
r_tax_line.trx_line_id ||
',trx_loc_line_id , ' ||
r_tax_line.trx_loc_line_id ||
',trx_level_type , ' || r_tax_line.trx_level_type
||
',trx_number , ' || r_tax_line.trx_number ||
',trx_line_number , ' ||
r_tax_line.trx_line_number || ',trx_type ,
' || r_tax_line.trx_type ||
',trx_date, ' || r_tax_line.trx_date ||
',legal_entity_id, ' ||
r_tax_line.legal_entity_id || ',frozen_flag ,
' || r_tax_line.frozen_flag ||
',party_type, ' || r_tax_line.party_type ||
',party_id , ' ||
r_tax_line.party_id || ',party_site_id, ' ||
r_tax_line.party_site_id ||
',trx_uom , ' || r_tax_line.trx_uom ||
',item_id , ' ||
r_tax_line.item_id || ',unit_price , ' ||
r_tax_line.unit_price ||
',line_amt , ' || r_tax_line.line_amt ||
',trx_line_quantity, ' ||
r_tax_line.trx_line_quantity || ',trx_currency_code ,
' || r_tax_line.trx_currency_code ||
',currency_conversion_date, ' ||
r_tax_line.currency_conversion_date ||
',currency_conversion_type, ' ||
r_tax_line.currency_conversion_type ||
',currency_conversion_rate, ' ||
r_tax_line.currency_conversion_rate ||
',tax_currency_code , ' ||
r_tax_line.tax_currency_code ||
',tax_currency_conversion_date, ' ||
r_tax_line.tax_currency_conversion_date ||
',tax_currency_conversion_type, ' ||
r_tax_line.tax_currency_conversion_type ||
',tax_currency_conversion_rate ,' ||
r_tax_line.tax_currency_conversion_rate ||
',functional_currency_code , ' ||
r_tax_line.functional_currency_code ||
',line_assessable_value, ' ||
r_tax_line.line_assessable_value ||
',tax_regime_id , ' || r_tax_line.tax_regime_id
||
',tax_regime_code , ' ||
r_tax_line.tax_regime_code ||
',tax_regime_type , ' ||
r_tax_line.tax_regime_type ||
',first_party_reg_id , ' ||
r_tax_line.first_party_reg_id ||
',first_party_primary_reg_name, ' ||
r_tax_line.first_party_primary_reg_name ||
',first_party_primary_reg_num, ' ||
r_tax_line.first_party_primary_reg_num ||
',first_party_secondary_reg_name,' ||
r_tax_line.first_party_secondary_reg_name ||
',first_party_secondary_reg_num,' ||
r_tax_line.first_party_secondary_reg_num ||
',num_of_return_days , ' ||
r_tax_line.num_of_return_days || ',REPORTING_ONLY_FLAG ,' ||
r_tax_line.reporting_only_flag || ',tax_authority_id ,
' ||
r_tax_line.tax_authority_id || ',tax_authority_site_id,
' ||
r_tax_line.tax_authority_site_id || ',third_party_reg_id ,
' ||
r_tax_line.third_party_reg_id ||
',third_party_primary_reg_name, ' ||
r_tax_line.third_party_primary_reg_name ||
',third_party_primary_reg_num, ' ||
r_tax_line.third_party_primary_reg_num ||
',third_party_secondary_reg_nam,' ||
r_tax_line.third_party_secondary_reg_name ||
',third_party_secondary_reg_num,' ||
r_tax_line.third_party_secondary_reg_num ||
',assessable_price_list_id, ' ||
r_tax_line.assessable_price_list_id || ',tax_type_id ,
' ||
r_tax_line.tax_type_id || ',abatement_flag , ' ||
r_tax_line.abatement_flag ||
',update_vendor_on_transaction, ' ||
r_tax_line.update_vendor_on_transaction ||
',offset_flag , ' || r_tax_line.offset_flag ||
',recoverable_flag, ' ||
r_tax_line.recoverable_flag || ',self_assessed_flag ,
' || r_tax_line.self_assessed_flag ||
',reverse_credit_on_shipment, ' ||
r_tax_line.reverse_credit_on_shipment ||
',credit_basis_self_assessed , ' ||
r_tax_line.credit_basis_self_assessed ||
',tax_point_basis , ' ||
r_tax_line.tax_point_basis ||
',tax_point_date , ' || r_tax_line.tax_point_date
||
',tax_rate_id , ' || r_tax_line.tax_rate_id ||
',tax_rate_code , ' ||
r_tax_line.tax_rate_code || ',tax_rate_type, '
|| r_tax_line.tax_rate_type ||
',tax_status , ' || r_tax_line.tax_status ||
',recovery_percentage , ' ||
r_tax_line.recovery_percentage || ',inclusive_flag ,
' || r_tax_line.inclusive_flag ||
',tax_rate_percentage , ' ||
r_tax_line.tax_rate_percentage ||
',tax_rate_uom , ' || r_tax_line.tax_rate_uom
|| ',tax_rate_uom_rate , ' ||
r_tax_line.tax_rate_uom_rate || ',tax_rate_abatement_type,
' ||
r_tax_line.tax_rate_abatement_type || ',abatement_percentage ,
' ||
r_tax_line.abatement_percentage || ',tax_rate_classification,
' ||
r_tax_line.tax_rate_classification || ',standard_rate ,
' ||
r_tax_line.standard_rate || ',form_type , '
|| r_tax_line.form_type ||
',actual_tax_rate , ' ||
r_tax_line.actual_tax_rate ||
',rounding_level , ' || r_tax_line.rounding_level
|| ',tax_rounded_to , ' ||
r_tax_line.tax_rounded_to || ',tax_rounding_factor , '
|| r_tax_line.tax_rounding_factor ||
',taxable_rounded_to, ' ||
r_tax_line.taxable_rounded_to ||
',taxable_rounding_factor , ' ||
r_tax_line.taxable_rounding_factor ||
',quantity_rounded_to , ' ||
r_tax_line.quantity_rounded_to ||
',quantity_rounding_factor , ' ||
r_tax_line.quantity_rounding_factor ||
',unround_taxable_amt_trx_curr, ' ||
r_tax_line.unround_taxable_amt_trx_curr ||
',unround_taxable_amt_tax_curr,' ||
r_tax_line.unround_taxable_amt_tax_curr ||
',unround_taxable_amt_fun_curr,' ||
r_tax_line.unround_taxable_amt_fun_curr ||
',unround_tax_amt_trx_curr, ' ||
r_tax_line.unround_tax_amt_trx_curr ||
',unround_tax_amt_tax_curr, ' ||
r_tax_line.unround_tax_amt_tax_curr ||
',unround_tax_amt_fun_curr, ' ||
r_tax_line.unround_tax_amt_fun_curr ||
',unrounded_uom_conv_qty, ' ||
r_tax_line.unrounded_uom_conv_qty ||
',rounded_tax_amt_trx_curr , ' ||
r_tax_line.rounded_tax_amt_trx_curr ||
',rounded_tax_amt_tax_curr , ' ||
r_tax_line.rounded_tax_amt_tax_curr ||
',rounded_tax_amt_fun_curr, ' ||
r_tax_line.rounded_tax_amt_fun_curr ||
',rounded_taxable_amt_trx_curr, ' ||
r_tax_line.rounded_taxable_amt_trx_curr ||
',rounded_taxable_amt_tax_curr, ' ||
r_tax_line.rounded_taxable_amt_tax_curr ||
',rounded_taxable_amt_fun_curr, ' ||
r_tax_line.rounded_taxable_amt_fun_curr ||
',rounded_quantity , ' ||
r_tax_line.rounded_quantity ||
',rec_tax_amt_trx_curr , ' ||
r_tax_line.rec_tax_amt_trx_curr ||
',rec_tax_amt_tax_curr , ' ||
r_tax_line.rec_tax_amt_tax_curr ||
',rec_tax_amt_funcl_curr , ' ||
r_tax_line.rec_tax_amt_funcl_curr ||
',nrec_tax_amt_trx_curr , ' ||
r_tax_line.nrec_tax_amt_trx_curr ||
',nrec_tax_amt_tax_curr , ' ||
r_tax_line.nrec_tax_amt_tax_curr ||
',nrec_tax_amt_funcl_curr , ' ||
r_tax_line.nrec_tax_amt_funcl_curr ||
',manual_overridden_flag , ' ||
r_tax_line.manual_overridden_flag ||
',manual_tax_line_flag , ' ||
r_tax_line.manual_tax_line_flag ||
',copied_from_other_doc_flag, ' ||
r_tax_line.copied_from_other_doc_flag);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'encumberance_nr_tax_amt , ' ||
r_tax_line.encumberance_nr_tax_amt ||
',encumberance_nr_func_tax_amt, ' ||
r_tax_line.encumberance_nr_func_tax_amt ||
',encumberance_status_flag , ' ||
r_tax_line.encumberance_status_flag ||
',tax_line_num, ' || r_tax_line.tax_line_num
|| ',precedence_1, ' ||
r_tax_line.precedence_1 || ',precedence_2, '
|| r_tax_line.precedence_2 ||
',precedence_3 , ' || r_tax_line.precedence_3
|| ',precedence_4 , ' ||
r_tax_line.precedence_4 || ',precedence_5 , '
|| r_tax_line.precedence_5 ||
',precedence_6 , ' || r_tax_line.precedence_6
|| ',precedence_7 , ' ||
r_tax_line.precedence_7 || ',precedence_8 , '
|| r_tax_line.precedence_8 ||
',precedence_9 , ' || r_tax_line.precedence_9
|| ',precedence_10, ' ||
r_tax_line.precedence_10 || ',precedence_11 , '
|| r_tax_line.precedence_11 ||
',precedence_12 , ' || r_tax_line.precedence_12
||
',precedence_13 , ' || r_tax_line.precedence_13
||
',precedence_14 , ' || r_tax_line.precedence_14
||
',precedence_15 , ' || r_tax_line.precedence_15
||
',precedence_16 , ' || r_tax_line.precedence_16
||
',precedence_17 , ' || r_tax_line.precedence_17
||
',precedence_18 , ' || r_tax_line.precedence_18
||
',precedence_19 , ' || r_tax_line.precedence_19
||
',precedence_20 , ' || r_tax_line.precedence_20
||
',ref_doc_application_id , ' ||
r_tax_line.ref_doc_application_id ||
',ref_doc_entity_code, ' ||
r_tax_line.ref_doc_entity_code ||
',ref_doc_event_class_code , ' ||
r_tax_line.ref_doc_event_class_code ||
',ref_doc_trx_id , ' || r_tax_line.ref_doc_trx_id
||
',ref_doc_trx_type , ' ||
r_tax_line.ref_doc_trx_type ||
',ref_doc_line_id , ' ||
r_tax_line.ref_doc_line_id ||
',ref_doc_loc_line_id , ' ||
r_tax_line.ref_doc_loc_line_id ||
',applied_to_application_id , ' ||
r_tax_line.applied_to_application_id ||
',applied_to_entity_code , ' ||
r_tax_line.applied_to_entity_code ||
',applied_to_event_class_code , ' ||
r_tax_line.applied_to_event_class_code ||
',applied_to_trx_id , ' ||
r_tax_line.applied_to_trx_id ||
',applied_to_trx_line_id , ' ||
r_tax_line.applied_to_trx_line_id ||
',applied_from_application_id, ' ||
r_tax_line.applied_from_application_id ||
',applied_from_entity_code , ' ||
r_tax_line.applied_from_entity_code ||
',applied_from_event_class_code,' ||
r_tax_line.applied_from_event_class_code ||
',applied_from_trx_id , ' ||
r_tax_line.applied_from_trx_id ||
',applied_from_trx_line_id , ' ||
r_tax_line.applied_from_trx_line_id ||
',reporting_type_id , ' ||
r_tax_line.reporting_type_id ||
',reporting_code , ' || r_tax_line.reporting_code
||
',tax_invoice_date , ' ||
r_tax_line.tax_invoice_date ||
',tax_invoice_num , ' ||
r_tax_line.tax_invoice_num ||
',taxable_basis , ' ||
r_tax_line.taxable_basis);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '---End----');
END IF;

END log_tax_line;

/*---------------------------------------------------------------------------------
------------------------+
| Created By : Wenqiong Zhou
|
| Creation Date : 10/Apr/2013
|
| Bug Number/ER Name : Phase IV Tax Determination
|
| SubProgram Name : log_pvt_tax_line
|
| Type : PROCEDURE
|
| Purpose : This procedure is to log all the fields
ofpvt_tax_line_rec |
|
|
| TDD Reference : Section
|
| Assumptions :
|
| Called From :
|

|----------------------------------------------------------------------------------
------------------------|
| parameters IN/OUT Type Required
Description and Purpose |
| ------------ -------- ------ ----------
------------------------- |
| pvt_tax_line_rec IN pvt_tax_line_rec yes
pvt_tax_line_rec record |

*----------------------------------------------------------------------------------
-----------------------*/
PROCEDURE log_pvt_tax_line(pvt_tax_line_rec IN pvt_tax_line_rec_type) IS
precedence_rec precedence_rec_type;
lv_api_name CONSTANT VARCHAR2(50) := 'log_pvt_tax_line';
BEGIN

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----begin----' || '()+');
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'count of lines is:' ||
pvt_tax_line_rec.tax_line_num.count);

FOR i IN nvl(pvt_tax_line_rec.tax_line_num.first
,1) .. nvl(pvt_tax_line_rec.tax_line_num.count
,-99) LOOP
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'tax line NO.' || i || ',tax_line_num : ' ||
pvt_tax_line_rec.tax_line_num(i) ||
',rounded_assessable_value_func:' ||
pvt_tax_line_rec.rounded_assessable_value_func(i) ||
',rounded_line_amount_func: ' ||
pvt_tax_line_rec.rounded_line_amount_func(i) ||
',actual_tax_rate_per_rupee: ' ||
pvt_tax_line_rec.actual_tax_rate_per_rupee(i) ||
',tax_amount_func: ' ||
pvt_tax_line_rec.tax_amount_func(i) ||
',tax_rounding_factor: ' ||
pvt_tax_line_rec.tax_rounding_factor(i) ||
',tax_rounded_to: ' ||
pvt_tax_line_rec.tax_rounded_to(i) ||
',inclusive_flag : ' ||
pvt_tax_line_rec.inclusive_flag(i) ||
',independency_flag : ' ||
pvt_tax_line_rec.independency_flag(i) ||
',inclusive_tax_rate : ' ||
pvt_tax_line_rec.inclusive_tax_rate(i) ||
',non_rate_amount : ' ||
pvt_tax_line_rec.non_rate_amount(i) ||
',taxable_amount : ' ||
pvt_tax_line_rec.taxable_amount(i) ||
',rounded_tax_amt : ' ||
pvt_tax_line_rec.rounded_tax_amt(i));
precedence_rec := pvt_tax_line_rec.precedence(i);
FOR j IN 1 .. nvl(precedence_rec.p.count
,-99) LOOP
IF precedence_rec.p(j) > -1 THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'pvt_tax_line_rec.precedence_rec, p(' || j || '):' ||
precedence_rec.p(j));
END IF;
END LOOP;
END LOOP;
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
END log_pvt_tax_line;

/*---------------------------------------------------------------------------------
---------------------+
| Created By : Wenqiong Zhou
|
| Creation Date : 10/Apr/2013
|
| Bug Number/ER Name : Phase IV Tax Determination
|
| SubProgram Name : get_default_legal_entity_id
|
| Type : PROCEDURE
|
| Purpose : This procedure is to get legal entity id by org id.
|
|
|
| TDD Reference : Section
|
| Assumptions :
|
| Called From : Call by products to prepare the det factor record
|

|----------------------------------------------------------------------------------
---------------------|
| parameters IN/OUT Type Required
Description and Purpose |
| ------------ -------- ------ ----------
------------------------- |
| p_org_id IN NUMBER yes
Operating Unit ID |
*----------------------------------------------------------------------------------
--------------------*/
FUNCTION get_default_legal_entity_id(p_org_id IN NUMBER) RETURN NUMBER IS
l_legal_entity_id NUMBER;
lv_api_name CONSTANT VARCHAR2(50) := 'get_default_legal_entity_id';
BEGIN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----begin----' || '()+');
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Input p_org_id:' || p_org_id);
END IF;

l_legal_entity_id := xle_utilities_grp.get_defaultlegalcontext_ou(p_org_id);

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'l_legal_entity_id:' || l_legal_entity_id);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
RETURN l_legal_entity_id;

EXCEPTION
WHEN OTHERS THEN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,SQLERRM);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;

RAISE;
END get_default_legal_entity_id;

/*---------------------------------------------------------------------------------
--------------------------+
| Created By : Wenqiong Zhou
|
| Creation Date : 10/Apr/2013
|
| Bug Number/ER Name : Phase IV Tax Determination
|
| SubProgram Name : any_tax_det_factors_change
|
| Type : FUNCTION
|
| Purpose : This procedure is to check if any attributes of det
factors changed. |
| (which will impact determination)
|
|
|
| TDD Reference : Section
|
| Assumptions :
|
| Called From : Call by update_line_det_factors
|

|----------------------------------------------------------------------------------
-------------------------|
| parameters IN/OUT Type Required
Description and Purpose |
| ------------ -------- ------ ----------
------------------------- |
| p_det_factor_rec IN RECORD yes
JAI_TAX_DET_FACTORS record |
| pv_process_status OUT VARCHAR2 yes
Return status |
| pv_process_message OUT VARCHAR2 yes
Return message |

*----------------------------------------------------------------------------------
--------------------------*/
FUNCTION any_tax_det_factors_change
(
p_det_factor_rec IN jai_tax_det_factors%ROWTYPE
,pv_process_status OUT NOCOPY VARCHAR2
,pv_process_message OUT NOCOPY VARCHAR2
) RETURN VARCHAR2 IS
CURSOR c_det_factor IS
SELECT organization_id
,location_id
,ship_from_location_id
,ship_to_location_id
,bill_to_location_id --26030089 Rule Process changes added by aditya
,item_id
,party_id
,party_site_id
,event_type_code
FROM jai_tax_det_factors
WHERE det_factor_id = p_det_factor_rec.det_factor_id;
/*AELLURU FOR KIT ITEMS 26255114*/
CURSOR inv_num_lines IS
SELECT COUNT(1)
FROM jai_tax_lines
WHERE det_factor_id = p_det_factor_rec.det_factor_id
AND tax_invoice_num IS NOT NULL;
l_inv_num_lines NUMBER;
/*AELLURU FOR KIT ITEMS 26255114*/

lv_api_name CONSTANT VARCHAR2(50) := 'any_tax_det_factors_change';


rec_det_factor c_det_factor%ROWTYPE;
lv_changed_flag VARCHAR2(1) := 'N';
BEGIN
/*AELLURU FOR KIT ITEMS 26255114*/
OPEN inv_num_lines;
FETCH inv_num_lines
INTO l_inv_num_lines;
CLOSE inv_num_lines;
IF nvl(l_inv_num_lines
,0) = 0 THEN
/*Added this condition because we need to update only if there are lines with
no invoice number
if invoice number is already generated no modifications are allowed
AELLURU FOR KIT ITEMS*/
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----Begin----' || '()+');
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'Input params:organization_id:' ||
p_det_factor_rec.organization_id ||
',location_id:' || p_det_factor_rec.location_id ||
',SHIP_FROM_LOCATION_ID:' ||
p_det_factor_rec.ship_from_location_id ||
',SHIP_TO_LOCATION_ID:' ||
p_det_factor_rec.ship_to_location_id || ',ITEM_ID:' ||
p_det_factor_rec.item_id || ',party_id:' ||
p_det_factor_rec.party_id || ',party_site_id:' ||
p_det_factor_rec.party_site_id ||
',event_type_code:' || p_det_factor_rec.event_type_code ||
'BILL_TO_LOCATION_ID' ||
p_det_factor_rec.bill_to_location_id);
END IF;
pv_process_status := FND_API.G_RET_STS_SUCCESS;
OPEN c_det_factor;
FETCH c_det_factor
INTO rec_det_factor;
CLOSE c_det_factor;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'attrs from DB:organization_id:' ||
rec_det_factor.organization_id ||
',location_id:' || rec_det_factor.location_id ||
',SHIP_FROM_LOCATION_ID:' ||
rec_det_factor.ship_from_location_id ||
',SHIP_TO_LOCATION_ID:' ||
rec_det_factor.ship_to_location_id || ',ITEM_ID:' ||
rec_det_factor.item_id || ',party_id:' ||
rec_det_factor.party_id || ',party_site_id:' ||
rec_det_factor.party_site_id ||
'BILL_TO_LOCATION_ID' ||
rec_det_factor.bill_to_location_id);
END IF;
--Modified by Junjain for bug#18893253 begin
IF (nvl(rec_det_factor.organization_id
,-1) <> nvl(p_det_factor_rec.organization_id
,-1) OR
nvl(rec_det_factor.location_id
,-1) <> nvl(p_det_factor_rec.location_id
,-1) OR
--Modified by Junjain for bug#18893253 end
rec_det_factor.ship_from_location_id <>
p_det_factor_rec.ship_from_location_id OR
rec_det_factor.ship_to_location_id <> p_det_factor_rec.ship_to_location_id
OR
rec_det_factor.item_id <> p_det_factor_rec.item_id OR
rec_det_factor.party_id <> p_det_factor_rec.party_id OR
rec_det_factor.party_site_id <> p_det_factor_rec.party_site_id OR
-- (rec_det_factor.event_type_code <> p_det_factor_rec.event_type_code AND
p_det_factor_rec.entity_code <>'PURCHASE_ORDER')OR
--AELLURU AS EVENT TYPE IS NOT VALID CHANGE DETERMINANT FOR RULES
28302774
rec_det_factor.bill_to_location_id <> p_det_factor_rec.bill_to_location_id
--added by aditya for rule process change
) THEN
lv_changed_flag := 'Y';
END IF;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'return lv_changed_flag:' ||
lv_changed_flag);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
END IF; --AELLURU FOR KIT ITEMS 26255114
RETURN lv_changed_flag;

END any_tax_det_factors_change;

/*---------------------------------------------------------------------------------
--------------------------------+
| Created By : Wenqiong Zhou
|
| Creation Date : 10/Apr/2013
|
| Bug Number/ER Name : Phase IV Tax Determination
|
| SubProgram Name : any_amount_factors_change
|
| Type : FUNCTION
|
| Purpose : This procedure is to check if any amount related
attributes of det factors changed which |
| will not impactdetermination but will impact
calculation result. |
| TDD Reference : Section
|
| Assumptions :
|
| Called From : Call by update_line_det_factors
|

|----------------------------------------------------------------------------------
-------------------------------|
| parameters IN/OUT Type Required
Description and Purpose |
| ------------ -------- ------ ----------
------------------------- |
| p_det_factor_rec IN RECORD yes
JAI_TAX_DET_FACTORS record |
| pv_process_status OUT VARCHAR2 yes
Return status |
| pv_process_message OUT VARCHAR2 yes
Return message |

*----------------------------------------------------------------------------------
--------------------------------*/
FUNCTION any_amount_factors_change
(
p_det_factor_rec IN jai_tax_det_factors%ROWTYPE
,pv_process_status OUT NOCOPY VARCHAR2
,pv_process_message OUT NOCOPY VARCHAR2
) RETURN VARCHAR2 IS
CURSOR c_det_factor IS
SELECT trx_currency_code
,currency_conversion_date
,currency_conversion_rate
,currency_conversion_type
,trx_uom_code
,unit_price
,trx_line_quantity
,line_amt
FROM jai_tax_det_factors
WHERE det_factor_id = p_det_factor_rec.det_factor_id;
rec_det_factor c_det_factor%ROWTYPE;
lv_api_name CONSTANT VARCHAR2(50) := 'any_amount_factors_change';
lv_changed_flag VARCHAR2(1) := 'N';
BEGIN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----Begin----' || '()+');
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'Input params:TRX_CURRENCY_CODE:' ||
p_det_factor_rec.trx_currency_code ||
',CURRENCY_CONVERSION_DATE:' ||
p_det_factor_rec.currency_conversion_date ||
',CURRENCY_CONVERSION_RATE:' ||
p_det_factor_rec.currency_conversion_rate ||
',CURRENCY_CONVERSION_TYPE:' ||
p_det_factor_rec.currency_conversion_type || ',TRX_UOM_CODE:' ||
p_det_factor_rec.trx_uom_code || ',UNIT_PRICE:' ||
p_det_factor_rec.unit_price ||
',TRX_LINE_QUANTITY:' || p_det_factor_rec.trx_line_quantity ||
',LINE_AMT:' ||
p_det_factor_rec.line_amt);
END IF;
pv_process_status := FND_API.G_RET_STS_SUCCESS;
OPEN c_det_factor;
FETCH c_det_factor
INTO rec_det_factor;
CLOSE c_det_factor;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'Attributes in DB:TRX_CURRENCY_CODE:' ||
rec_det_factor.trx_currency_code ||
',CURRENCY_CONVERSION_DATE:' ||
rec_det_factor.currency_conversion_date ||
',CURRENCY_CONVERSION_RATE:' ||
rec_det_factor.currency_conversion_rate ||
',CURRENCY_CONVERSION_TYPE:' ||
rec_det_factor.currency_conversion_type || ',TRX_UOM_CODE:' ||
rec_det_factor.trx_uom_code || ',UNIT_PRICE:' ||
rec_det_factor.unit_price ||
',TRX_LINE_QUANTITY:' || rec_det_factor.trx_line_quantity ||
',LINE_AMT:' ||
rec_det_factor.line_amt);
END IF;
IF (rec_det_factor.trx_currency_code <> p_det_factor_rec.trx_currency_code OR
NVL(rec_det_factor.currency_conversion_date,to_date('31-12-9999', 'dd-mm-
yyyy'))
<> NVL(p_det_factor_rec.currency_conversion_date, to_date('31-12-
9999', 'dd-mm-yyyy')) OR -- 27163960
--27232740
rec_det_factor.currency_conversion_rate <>
p_det_factor_rec.currency_conversion_rate OR
rec_det_factor.currency_conversion_type <>
p_det_factor_rec.currency_conversion_type OR
rec_det_factor.trx_uom_code <> p_det_factor_rec.trx_uom_code OR
rec_det_factor.unit_price <> p_det_factor_rec.unit_price OR
rec_det_factor.trx_line_quantity <> p_det_factor_rec.trx_line_quantity OR
rec_det_factor.line_amt <> p_det_factor_rec.line_amt) THEN
lv_changed_flag := 'Y';
END IF;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'return lv_changed_flag:' || lv_changed_flag);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
RETURN lv_changed_flag;

END any_amount_factors_change;

/*---------------------------------------------------------------------------------
---------------------------------+
| Type : procedure get_source_details
|
| Purpose : This procedure is will return the source details like
application id entity_code... |
| for the target document it can be
ref_doc_application_id/applied_from_application_id |
| based on entity_code being passed
|
|
|
| Assumptions :
|
| Called From : Call by update_line_det_factors
|

|----------------------------------------------------------------------------------
-------------------------------|
| parameters IN/OUT Type Required
Description and Purpose |
| ------------ -------- ------ ----------
------------------------- |
| p_det_factor_rec IN RECORD yes
JAI_TAX_DET_FACTORS record |
| pv_process_status OUT VARCHAR2 yes
Return status |
| pv_process_message OUT VARCHAR2 yes
Return message |
| pn_src_rec OUT RECORD yes
returns the source record details.|

*----------------------------------------------------------------------------------
--------------------------------*/

PROCEDURE get_source_details
(
p_det_factor_rec IN OUT NOCOPY jai_tax_det_factors%ROWTYPE
,pv_process_status OUT NOCOPY VARCHAR2
,pv_process_message OUT NOCOPY VARCHAR2
,pn_src_rec OUT NOCOPY src_type
)

IS
--start additions for bug#26595512
cursor GET_INTERCOMPNAY_DTLS
is
select * from
ap_invoice_lines_all
where invoice_id=p_det_factor_rec.trx_id
and line_number=p_det_Factor_rec.trx_line_id;

LR_INTERCOMPANY_DTLS GET_INTERCOMPNAY_DTLS%rowtype ;

cursor get_src_dtls(cp_source_id number,cp_source_line_id number)


is
select * from
jai_tax_det_factors
where trx_id=cp_source_id
and trx_line_id=cp_source_line_id;

lr_det_factor_rec get_src_dtls%rowtype;

BEGIN
/*Purchase order created from Requisition*/
IF p_det_factor_rec.entity_code = 'PURCHASE_ORDER'
AND p_det_factor_rec.ref_doc_entity_code = 'REQUISITION' THEN
pn_src_rec.application_id := p_det_factor_rec.ref_doc_application_id;
pn_src_rec.entity_code := p_det_factor_rec.ref_doc_entity_code;
pn_src_rec.event_class_code := p_det_factor_rec.ref_doc_event_class_code;
pn_src_rec.trx_id := p_det_factor_rec.ref_doc_trx_id;
pn_src_rec.trx_line_id := p_det_factor_rec.ref_doc_line_id;
pn_src_rec.trx_loc_line_id := p_det_factor_rec.ref_doc_loc_line_id;
pn_src_rec.trx_level_type := p_det_factor_rec.ref_doc_trx_level_type;
pn_src_rec.trx_type := p_det_factor_rec.ref_doc_trx_type;

---ISO FROM IR added by mani for bug 26558687


ELSIF p_det_factor_rec.entity_code = 'OE_ORDER_HEADERS'
AND p_det_factor_rec.ref_doc_entity_code = 'REQUISITION'
AND p_det_factor_rec.ref_doc_trx_type = 'INTERNAL' THEN

pn_src_rec.application_id := p_det_factor_rec.ref_doc_application_id;
pn_src_rec.entity_code := p_det_factor_rec.ref_doc_entity_code;
pn_src_rec.event_class_code := p_det_factor_rec.ref_doc_event_class_code;
pn_src_rec.trx_id := p_det_factor_rec.ref_doc_trx_id;
pn_src_rec.trx_line_id := p_det_factor_rec.ref_doc_line_id;
pn_src_rec.trx_loc_line_id := p_det_factor_rec.ref_doc_loc_line_id;
pn_src_rec.trx_level_type := p_det_factor_rec.ref_doc_trx_level_type;
pn_src_rec.trx_type := p_det_factor_rec.ref_doc_trx_type;
---till here added by mani for bug 26558687
/*added or condition for 26595512*/
ELSIF
(p_det_factor_rec.entity_code = 'AP_INVOICES'
AND p_det_factor_rec.ref_doc_entity_code = 'REQUISITION'
AND p_det_factor_rec.ref_doc_trx_type = 'INTERNAL'
) THEN

OPEN GET_INTERCOMPNAY_DTLS;
FETCH GET_INTERCOMPNAY_DTLS INTO LR_INTERCOMPANY_DTLS;
close GET_INTERCOMPNAY_DTLS;

open
get_src_dtls(LR_INTERCOMPANY_DTLS.source_trx_id,LR_INTERCOMPANY_DTLS.source_line_id
);
fetch get_src_dtls into lr_det_factor_rec;
close get_src_dtls;

jai_cmn_utils_pkg.write_fnd_log_msg('JAI_TAX_DETERMINATION_PKG.get_source_details',
'fetch the details from AR intercompany');
pn_src_rec.application_id := lr_det_factor_rec.application_id;
pn_src_rec.entity_code := lr_det_factor_rec.entity_code;
pn_src_rec.event_class_code := lr_det_factor_rec.event_class_code;
pn_src_rec.trx_id := lr_det_factor_rec.trx_id;
pn_src_rec.trx_line_id := lr_det_factor_rec.trx_line_id;
pn_src_rec.trx_loc_line_id := lr_det_factor_rec.trx_loc_line_id;
pn_src_rec.trx_level_type := lr_det_factor_rec.trx_level_type;
pn_src_rec.trx_type := lr_det_factor_rec.trx_type;

p_det_factor_rec.applied_from_application_id:=pn_src_rec.application_id ;
p_det_factor_rec.applied_from_entity_code :=
pn_src_rec.entity_code ;
p_det_factor_rec.applied_from_event_class_code :=
pn_src_rec.event_class_code;
p_det_factor_rec.applied_from_trx_id :=
pn_src_rec.trx_id ;
p_det_factor_rec.applied_from_trx_line_id :=
pn_src_rec.trx_line_id ;
p_det_factor_rec.applied_from_loc_line_id :=
pn_src_rec.trx_loc_line_id ;
p_det_factor_rec.applied_from_trx_level_type :=
pn_src_rec.trx_level_type ;
p_det_factor_rec.applied_from_trx_type :=
pn_src_rec.trx_type ;
/*for QUOTATIONS created from RFQ.*/
ELSIF p_det_factor_rec.trx_type = 'QUOTATION' --1102
THEN
pn_src_rec.application_id := p_det_factor_rec.ref_doc_application_id;
pn_src_rec.entity_code := p_det_factor_rec.ref_doc_entity_code;
pn_src_rec.event_class_code := p_det_factor_rec.ref_doc_event_class_code;
pn_src_rec.trx_id := p_det_factor_rec.ref_doc_trx_id;
pn_src_rec.trx_line_id := p_det_factor_rec.ref_doc_line_id;
pn_src_rec.trx_loc_line_id := p_det_factor_rec.ref_doc_loc_line_id;
pn_src_rec.trx_level_type := p_det_factor_rec.ref_doc_trx_level_type;
pn_src_rec.trx_type := p_det_factor_rec.ref_doc_trx_type;
--FOR bpa'S CREATED from QUOTATIONS.
ELSIF (p_det_factor_rec.entity_code = 'PURCHASE_ORDER' AND
p_det_factor_rec.trx_type = 'BLANKET') THEN
/*AELLURU FOR BUG 26381241 */
pn_src_rec.application_id := p_det_factor_rec.ref_doc_application_id;
pn_src_rec.entity_code := p_det_factor_rec.ref_doc_entity_code;
pn_src_rec.event_class_code :=
p_det_factor_rec.ref_doc_event_class_code;
pn_src_rec.trx_id := p_det_factor_rec.ref_doc_trx_id;
pn_src_rec.trx_line_id := p_det_factor_rec.ref_doc_line_id;
pn_src_rec.trx_loc_line_id := p_det_factor_rec.ref_doc_loc_line_id;
pn_src_rec.trx_level_type := p_det_factor_rec.ref_doc_trx_level_type;
pn_src_rec.trx_type := p_det_factor_rec.ref_doc_trx_type;
/*AELLURU FOR BUG 26381241 */
--COPY PO
ELSIF (p_det_factor_rec.entity_code = 'PURCHASE_ORDER' AND
p_det_factor_rec.ref_doc_entity_code = 'PURCHASE_ORDER') THEN
pn_src_rec.application_id := p_det_factor_rec.ref_doc_application_id;
pn_src_rec.entity_code := p_det_factor_rec.ref_doc_entity_code;
pn_src_rec.event_class_code := p_det_factor_rec.ref_doc_event_class_code;
pn_src_rec.trx_id := p_det_factor_rec.ref_doc_trx_id;
pn_src_rec.trx_line_id := p_det_factor_rec.ref_doc_line_id;
pn_src_rec.trx_loc_line_id := p_det_factor_rec.ref_doc_loc_line_id;
pn_src_rec.trx_level_type := p_det_factor_rec.ref_doc_trx_level_type;
pn_src_rec.trx_type := p_det_factor_rec.ref_doc_trx_type;

ELSIF (p_det_factor_rec.entity_code = 'RELEASE' AND p_det_factor_rec.trx_type =


'BLANKET') --Release from BPA
THEN
pn_src_rec.application_id := p_det_factor_rec.ref_doc_application_id;
pn_src_rec.entity_code := p_det_factor_rec.ref_doc_entity_code;
pn_src_rec.event_class_code := p_det_factor_rec.ref_doc_event_class_code;
pn_src_rec.trx_id := p_det_factor_rec.ref_doc_trx_id;
pn_src_rec.trx_line_id := p_det_factor_rec.ref_doc_line_id;
pn_src_rec.trx_loc_line_id := p_det_factor_rec.ref_doc_loc_line_id;
pn_src_rec.trx_level_type := p_det_factor_rec.ref_doc_trx_level_type;
pn_src_rec.trx_type := p_det_factor_rec.ref_doc_trx_type;

/*PO to PO MATCHED INVOICE**/


ELSIF (p_det_factor_rec.entity_code = 'AP_INVOICES' AND
p_det_factor_rec.ref_doc_entity_code = 'PURCHASE_ORDER') THEN

pn_src_rec.application_id := p_det_factor_rec.ref_doc_application_id;
pn_src_rec.entity_code := p_det_factor_rec.ref_doc_entity_code;
pn_src_rec.event_class_code := p_det_factor_rec.ref_doc_event_class_code;
pn_src_rec.trx_id := p_det_factor_rec.ref_doc_trx_id;
pn_src_rec.trx_line_id := p_det_factor_rec.ref_doc_line_id;
pn_src_rec.trx_loc_line_id := p_det_factor_rec.ref_doc_loc_line_id;
pn_src_rec.trx_level_type := p_det_factor_rec.ref_doc_trx_level_type;
pn_src_rec.trx_type := p_det_factor_rec.ref_doc_trx_type;
/*Purchase order to Receipt creation**/
/*BOE to Receipt creation**/
ELSIF (p_det_factor_rec.entity_code = 'RCV_TRANSACTION' AND
p_det_factor_rec.trx_type = 'RECEIVE' AND -- Added By Rishin for Bug#26561366
p_det_factor_rec.applied_to_entity_code = 'BILL_OF_ENTRY') THEN

jai_cmn_utils_pkg.write_fnd_log_msg('JAI_TAX_DETERMINATION_PKG.get_source_details',
'ASSIGN bill_of_entry p_det_factor_rec.APPLIED_TO_trx_id='||
p_det_factor_rec.APPLIED_TO_trx_id);
pn_src_rec.application_id := p_det_factor_rec.applied_to_application_id;
pn_src_rec.entity_code := p_det_factor_rec.applied_to_entity_code;
pn_src_rec.event_class_code := p_det_factor_rec.applied_to_event_class_code;
pn_src_rec.trx_id := p_det_factor_rec.applied_to_trx_id;
pn_src_rec.trx_line_id := p_det_factor_rec.applied_to_trx_line_id;
pn_src_rec.trx_loc_line_id := p_det_factor_rec.applied_to_loc_line_id;
pn_src_rec.trx_level_type := p_det_factor_rec.applied_to_trx_level_type;
pn_src_rec.trx_type := p_det_factor_rec.applied_to_trx_type;
/*BOE to Receipt creation**/
/*Purchase order to Receipt creation**/
ELSIF (p_det_factor_rec.entity_code = 'RCV_TRANSACTION' AND
p_det_factor_rec.trx_type = 'RECEIVE' AND
p_det_factor_rec.ref_doc_entity_code = 'PURCHASE_ORDER') THEN
pn_src_rec.application_id := p_det_factor_rec.ref_doc_application_id;
pn_src_rec.entity_code := p_det_factor_rec.ref_doc_entity_code;
pn_src_rec.event_class_code := p_det_factor_rec.ref_doc_event_class_code;
pn_src_rec.trx_id := p_det_factor_rec.ref_doc_trx_id;
pn_src_rec.trx_line_id := p_det_factor_rec.ref_doc_line_id;
pn_src_rec.trx_loc_line_id := p_det_factor_rec.ref_doc_loc_line_id;
pn_src_rec.trx_level_type := p_det_factor_rec.ref_doc_trx_level_type;
pn_src_rec.trx_type := p_det_factor_rec.ref_doc_trx_type;
/*Sales order to Sales order shipment**/
ELSIF (p_det_factor_rec.entity_code = 'SALES_ORDER_ISSUE' AND
p_det_factor_rec.event_type_code = 'SHIPMENT_CREATED' AND
p_det_factor_rec.ref_doc_entity_code = 'OE_ORDER_HEADERS') THEN

pn_src_rec.application_id := p_det_factor_rec.ref_doc_application_id;
pn_src_rec.entity_code := p_det_factor_rec.ref_doc_entity_code;
pn_src_rec.event_class_code := p_det_factor_rec.ref_doc_event_class_code;
pn_src_rec.trx_id := p_det_factor_rec.ref_doc_trx_id;
pn_src_rec.trx_line_id := p_det_factor_rec.ref_doc_line_id;
pn_src_rec.trx_loc_line_id := p_det_factor_rec.ref_doc_loc_line_id;
pn_src_rec.trx_level_type := p_det_factor_rec.ref_doc_trx_level_type;
pn_src_rec.trx_type := p_det_factor_rec.ref_doc_trx_type;
/*Receipt to RTV */
ELSIF (p_det_factor_rec.ref_doc_entity_code = 'PURCHASE_ORDER' AND
p_det_factor_rec.entity_code = 'RCV_TRANSACTION' AND
p_det_factor_rec.trx_type = 'RETURN TO VENDOR') --RTV
THEN
NULL;
/*PPO to Release Flow */ -- Added By Rishin for Bug# 26936163
ELSIF(p_det_factor_rec.ref_doc_entity_code = 'PURCHASE_ORDER' AND
p_det_factor_rec.entity_code = 'RELEASE' AND
p_det_factor_rec.trx_type = 'SCHEDULED')
THEN

jai_cmn_utils_pkg.write_fnd_log_msg('JAI_TAX_DETERMINATION_PKG.get_source_details',
'Assign ref doc columns to pn_src_rec.trx_id ='||p_det_factor_rec.ref_doc_trx_id);
pn_src_rec.application_id := p_det_factor_rec.ref_doc_application_id;
pn_src_rec.entity_code := p_det_factor_rec.ref_doc_entity_code;
pn_src_rec.event_class_code := p_det_factor_rec.ref_doc_event_class_code;
pn_src_rec.trx_id := p_det_factor_rec.ref_doc_trx_id;
pn_src_rec.trx_line_id := p_det_factor_rec.ref_doc_line_id;
pn_src_rec.trx_loc_line_id := p_det_factor_rec.ref_doc_loc_line_id;
pn_src_rec.trx_level_type := p_det_factor_rec.ref_doc_trx_level_type;
pn_src_rec.trx_type := p_det_factor_rec.ref_doc_trx_type;
END IF;

END;

/*---------------------------------------------------------------------------------
---------------------------------+
| Created By : Wenqiong Zhou
|
| Creation Date : 10/Apr/2013
|
| Bug Number/ER Name : Phase IV Tax Determination
|
| SubProgram Name : get_tax_det_factor
|
| Type : PROCEDURE
|
| Purpose : This procedure is to provide two ways to get one record
of tax det factor record. |
| 1. Provide application_id, entity code,event
class_code, trx level type, trx id, |
| trx line id, trx loc to get ONE record.
|
| 2. provide det factor id to get one record.
|
| TDD Reference :
|
| Assumptions : Based on the input paramter, only one record can be
retrived. |
| Called From : called by prepare_tax_lines_tbl,product when document
updating . |

|----------------------------------------------------------------------------------
--------------------------------|
| parameters IN/OUT Type Required
Description and Purpose |
| ------------ -------- ------ ----------
------------------------- |
| pn_application_id IN NUMBER yes
Application ID |
| pv_entity_code IN VARCHAR2 yes Entity
Code |
| pv_event_class_code IN VARCHAR2 yes Event
Class Code |
| pv_trx_level_type IN VARCHAR2 yes
Transaction level Type |
| pn_trx_id IN NUMBER yes
Transaction ID |
| pn_trx_line_id IN NUMBER yes
Transaction Line ID |
| pn_trx_loc_line_id IN NUMBER yes
Transaction Loc line ID |
| pn_det_factor_id IN NUMBER yes Tax det
factor ID |
| pv_process_status OUT VARCHAR2 yes Process
status |
| pv_process_message OUT VARCHAR2 yes Process
message |

*----------------------------------------------------------------------------------
---------------------------------*/
PROCEDURE get_tax_det_factor
(
pn_application_id IN NUMBER
,pv_entity_code IN VARCHAR2
,pv_event_class_code IN VARCHAR2
,pv_trx_level_type IN VARCHAR2
,pn_trx_id IN NUMBER
,pn_trx_line_id IN NUMBER
,pn_trx_loc_line_id IN NUMBER
,pn_det_factor_id IN NUMBER
,pv_trx_type IN VARCHAR2 DEFAULT NULL --Added by Qinglei for Receiving
09-Jul-2013
,pv_call_from IN VARCHAR2 DEFAULT NULL --Added by Qinglei for Receiving
09-Jul-2013
,pr_det_factor OUT NOCOPY jai_tax_det_factors%ROWTYPE
) IS
CURSOR c_det_factor IS
SELECT det_factor_id
,org_id
,organization_id
,location_id
,ship_from_location_id
,ship_from_state
,ship_from_country
,ship_to_location_id
,ship_to_state
,ship_to_country
,bill_from_location_id
,bill_to_location_id
,application_id
,entity_code
,event_class_code
,event_type_code
,tax_event_class_code
,tax_event_type_code
,line_level_action
,trx_id
,trx_line_id
,trx_level_type
,trx_loc_line_id
,trx_date
,legal_entity_id
,trx_number
,trx_line_number
,doc_revision_num
,trx_type
,trx_currency_code
,currency_conversion_date
,currency_conversion_rate
,currency_conversion_type
,item_id
,trx_uom_code
,unit_price
,trx_line_quantity
,line_amt
,trx_line_gl_date
,party_type
,party_id
,party_site_id
,item_classification
-- ,item_category_id
,tax_rule_id
,default_tax_category_id
,override_tax_category_id
,user_modified_flag
,tax_determination_basis
,ref_doc_application_id
,ref_doc_entity_code
,ref_doc_event_class_code
,ref_doc_trx_id
,ref_doc_line_id
,ref_doc_trx_type
,ref_doc_loc_line_id
,ref_doc_trx_level_type
,applied_from_application_id
,applied_from_entity_code
,applied_from_event_class_code
,applied_from_trx_id
,applied_from_trx_line_id
,applied_from_trx_type
,applied_from_loc_line_id
,applied_from_trx_level_type
,applied_to_application_id
,applied_to_entity_code
,applied_to_event_class_code
,applied_to_trx_id
,applied_to_trx_line_id
,applied_to_trx_type
,applied_to_loc_line_id
,applied_to_trx_level_type
,tax_confirmed_flag
,intended_use --Added by Qinglei for bug#18648074
/*start additions by vkaranam for bug#27441146*/
,eway_bill_num
,eway_bill_date
, eway_bill_acceptance_flaG
,record_type_code --added by zhiwei.xin for bug#20485509
--Added by shasha for bug#24838926 --begin
,item_report_code_id
,third_party_report_code_id
--Added by shasha for bug#24838926 --end
/* Bug#26279373, dejiang.liu/20170615. Add column for HSN/SAC. */
,hsn_code_id
,sac_code_id
,tax_invoice_date --added for bug 25879349
,lc_applicability_flag --AELLURU FOR EMERSON 26624885
FROM jai_tax_det_factors
WHERE
/*application_id = nvl(pn_application_id,application_id)
AND entity_code = nvl(pv_entity_code, entity_code)
AND event_class_code = nvl(pv_event_class_code,event_class_code)
AND trx_level_type = nvl(pv_trx_level_type,trx_level_type)
AND trx_id = nvl(pn_trx_id,trx_id)
AND (trx_line_id = nvl(pn_trx_line_id, trx_line_id) OR nvl(trx_line_id,-1) =
nvl(pn_trx_line_id,-1))
*/ --26387349
/*26399170*/
trx_id = pn_trx_id
AND ((pn_trx_line_id IS NOT NULL AND trx_line_id = pn_trx_line_id) OR
(pn_trx_line_id IS NULL))
AND application_id = pn_application_id /*26387349*/
AND entity_code = pv_entity_code
AND event_class_code = pv_event_class_code
AND (trx_loc_line_id = nvl(pn_trx_loc_line_id
,trx_loc_line_id) OR
nvl(trx_loc_line_id
,-1) = nvl(pn_trx_loc_line_id
,-1))
AND det_factor_id = nvl(pn_det_factor_id
,det_factor_id)
AND nvl(trx_type
,'X') = nvl(pv_trx_type
,nvl(trx_type
,'X')) --Added by Qinglei for Receiving 09-Jul-2013
AND nvl(pv_call_from
,'BASE') <> 'INTERFACE' --Added by Qinglei for Receiving 09-Jul-2013
UNION
--Added by Qinglei for Receiving 09-Jul-2013 begin
SELECT interface_det_factor_id det_factor_id
,org_id
,organization_id
,location_id
,ship_from_location_id
,ship_from_state
,ship_from_country
,ship_to_location_id
,ship_to_state
,ship_to_country
,bill_from_location_id
,bill_to_location_id
,application_id
,entity_code
,event_class_code
,event_type_code
,tax_event_class_code
,tax_event_type_code
,line_level_action
,interface_trx_hdr_id trx_id
,interface_transaction_id trx_line_id
,NULL trx_level_type
,NULL trx_loc_line_id
,trx_date
,legal_entity_id
,trx_number
,trx_line_number
,doc_revision_num
,trx_type
,trx_currency_code
,currency_conversion_date
,currency_conversion_rate
,currency_conversion_type
,item_id
,trx_uom_code
,unit_price
,trx_line_quantity
,line_amt
,trx_line_gl_date
,party_type
,party_id
,party_site_id
,item_classification
-- ,item_category_id
,tax_rule_id
,default_tax_category_id
,override_tax_category_id
,user_modified_flag
,tax_determination_basis
,ref_doc_application_id
,ref_doc_entity_code
,ref_doc_event_class_code
,ref_doc_trx_id
,ref_doc_line_id
,ref_doc_trx_type
,ref_doc_loc_line_id
,ref_doc_trx_level_type
,applied_from_application_id
,applied_from_entity_code
,applied_from_event_class_code
,applied_from_trx_id
,applied_from_trx_line_id
,applied_from_trx_type
,applied_from_loc_line_id
,applied_from_trx_level_type
,applied_to_application_id
,applied_to_entity_code
,applied_to_event_class_code
,applied_to_trx_id
,applied_to_trx_line_id
,applied_to_trx_type
,applied_to_loc_line_id
,applied_to_trx_level_type
,tax_confirmed_flag
,intended_use --Added by Qinglei for bug#18648074
/*start additions by vkaranam for bug#27441146*/
,eway_bill_num
,eway_bill_date
, eway_bill_acceptance_flaG
,record_type_code --added by zhiwei.xin for bug#20485509
--Added by shasha for bug#24838926 --begin
,item_report_code_id
,third_party_report_code_id
--Added by shasha for bug#24838926 --end
/* Bug#26279373, dejiang.liu/20170615. Add column for HSN/SAC. */
,hsn_code_id
,sac_code_id
,tax_invoice_date --added for bug 25879349
,NULL lc_applicability_flag --AELLURU FOR EMERSON
FROM jai_det_factors_interface
WHERE /*26399170*/
/*application_id = nvl(pn_application_id,application_id)
AND entity_code = nvl(pv_entity_code, entity_code)
AND event_class_code = nvl(pv_event_class_code,event_class_code)
--AND trx_level_type = nvl(pv_trx_level_type,trx_level_type)
AND interface_trx_hdr_id = nvl(pn_trx_id,interface_trx_hdr_id)*/
--26387349
((pn_trx_line_id IS NOT NULL AND interface_transaction_id = pn_trx_line_id)
OR (pn_trx_line_id IS NULL))
AND interface_trx_hdr_id = pn_trx_id /*till here 26387349*/
AND application_id = pn_application_id /*from here 26387349*/
AND entity_code = pv_entity_code
AND event_class_code = pv_event_class_code
-- AND (interface_transaction_id = nvl(pn_trx_line_id,
interface_transaction_id)
-- OR nvl(interface_transaction_id,-1) = nvl(pn_trx_line_id,-1))
--AND (trx_loc_line_id = nvl(pn_trx_loc_line_id,trx_loc_line_id)
-- OR nvl(trx_loc_line_id,-1) = nvl(pn_trx_loc_line_id,-1))
AND interface_det_factor_id = nvl(pn_det_factor_id
,interface_det_factor_id)
AND nvl(trx_type
,'X') = nvl(pv_trx_type
,nvl(trx_type
,'X'))
AND pv_call_from = 'INTERFACE';
--Added by Qinglei for Receiving 09-Jul-2013 end
/*upto here 26387349*/
CURSOR c_null_det_factor IS
SELECT det_factor_id
,org_id
,organization_id
,location_id
,ship_from_location_id
,ship_from_state
,ship_from_country
,ship_to_location_id
,ship_to_state
,ship_to_country
,bill_from_location_id
,bill_to_location_id
,application_id
,entity_code
,event_class_code
,event_type_code
,tax_event_class_code
,tax_event_type_code
,line_level_action
,trx_id
,trx_line_id
,trx_level_type
,trx_loc_line_id
,trx_date
,legal_entity_id
,trx_number
,trx_line_number
,doc_revision_num
,trx_type
,trx_currency_code
,currency_conversion_date
,currency_conversion_rate
,currency_conversion_type
,item_id
,trx_uom_code
,unit_price
,trx_line_quantity
,line_amt
,trx_line_gl_date
,party_type
,party_id
,party_site_id
,item_classification
-- ,item_category_id
,tax_rule_id
,default_tax_category_id
,override_tax_category_id
,user_modified_flag
,tax_determination_basis
,ref_doc_application_id
,ref_doc_entity_code
,ref_doc_event_class_code
,ref_doc_trx_id
,ref_doc_line_id
,ref_doc_trx_type
,ref_doc_loc_line_id
,ref_doc_trx_level_type
,applied_from_application_id
,applied_from_entity_code
,applied_from_event_class_code
,applied_from_trx_id
,applied_from_trx_line_id
,applied_from_trx_type
,applied_from_loc_line_id
,applied_from_trx_level_type
,applied_to_application_id
,applied_to_entity_code
,applied_to_event_class_code
,applied_to_trx_id
,applied_to_trx_line_id
,applied_to_trx_type
,applied_to_loc_line_id
,applied_to_trx_level_type
,tax_confirmed_flag
,intended_use --Added by Qinglei for bug#18648074
/*start additions by vkaranam for bug#27441146*/
,eway_bill_num
,eway_bill_date
, eway_bill_acceptance_flaG
,record_type_code --added by zhiwei.xin for bug#20485509
--Added by shasha for bug#24838926 --begin
,item_report_code_id
,third_party_report_code_id
--Added by shasha for bug#24838926 --end
,hsn_code_id
,sac_code_id
,tax_invoice_date --added for bug 25879349
,lc_applicability_flag --AELLURU FOR EMERSON
FROM jai_tax_det_factors
WHERE
/*26387349*/
(pn_application_id IS NULL OR (pn_application_id IS NOT NULL AND
application_id = pn_application_id))
AND (pv_entity_code IS NULL OR (pv_entity_code IS NOT NULL AND
entity_code = pv_entity_code))
AND (pv_event_class_code IS NULL OR (pv_event_class_code IS NOT NULL AND
event_class_code = pv_event_class_code))
AND (pn_trx_id IS NULL OR (pn_trx_id IS NOT NULL AND trx_id = pn_trx_id))
AND (pn_trx_line_id IS NULL OR (pn_trx_line_id IS NOT NULL AND
trx_line_id = pn_trx_line_id))
-- AND entity_code = nvl(pv_entity_code, entity_code)
--AND event_class_code = nvl(pv_event_class_code,event_class_code)
AND trx_level_type = nvl(pv_trx_level_type
,trx_level_type)
--AND trx_id = nvl(pn_trx_id,trx_id)
--AND (trx_line_id = nvl(pn_trx_line_id, trx_line_id) OR nvl(trx_line_id,-1)
= nvl(pn_trx_line_id,-1))
AND (trx_loc_line_id = nvl(pn_trx_loc_line_id
,trx_loc_line_id) OR
nvl(trx_loc_line_id
,-1) = nvl(pn_trx_loc_line_id
,-1))
AND det_factor_id = pn_det_factor_id
--nvl(pn_det_factor_id,det_factor_id) --commented by mani for bug 26410566
AND nvl(trx_type
,'X') = nvl(pv_trx_type
,nvl(trx_type
,'X')) --Added by Qinglei for Receiving 09-Jul-2013
AND nvl(pv_call_from
,'BASE') <> 'INTERFACE' --Added by Qinglei for Receiving 09-Jul-2013
UNION
--Added by Qinglei for Receiving 09-Jul-2013 begin
SELECT interface_det_factor_id det_factor_id
,org_id
,organization_id
,location_id
,ship_from_location_id
,ship_from_state
,ship_from_country
,ship_to_location_id
,ship_to_state
,ship_to_country
,bill_from_location_id
,bill_to_location_id
,application_id
,entity_code
,event_class_code
,event_type_code
,tax_event_class_code
,tax_event_type_code
,line_level_action
,interface_trx_hdr_id trx_id
,interface_transaction_id trx_line_id
,NULL trx_level_type
,NULL trx_loc_line_id
,trx_date
,legal_entity_id
,trx_number
,trx_line_number
,doc_revision_num
,trx_type
,trx_currency_code
,currency_conversion_date
,currency_conversion_rate
,currency_conversion_type
,item_id
,trx_uom_code
,unit_price
,trx_line_quantity
,line_amt
,trx_line_gl_date
,party_type
,party_id
,party_site_id
,item_classification
-- ,item_category_id
,tax_rule_id
,default_tax_category_id
,override_tax_category_id
,user_modified_flag
,tax_determination_basis
,ref_doc_application_id
,ref_doc_entity_code
,ref_doc_event_class_code
,ref_doc_trx_id
,ref_doc_line_id
,ref_doc_trx_type
,ref_doc_loc_line_id
,ref_doc_trx_level_type
,applied_from_application_id
,applied_from_entity_code
,applied_from_event_class_code
,applied_from_trx_id
,applied_from_trx_line_id
,applied_from_trx_type
,applied_from_loc_line_id
,applied_from_trx_level_type
,applied_to_application_id
,applied_to_entity_code
,applied_to_event_class_code
,applied_to_trx_id
,applied_to_trx_line_id
,applied_to_trx_type
,applied_to_loc_line_id
,applied_to_trx_level_type
,tax_confirmed_flag
,intended_use --Added by Qinglei for bug#18648074
/*start additions by vkaranam for bug#27441146*/
,eway_bill_num
,eway_bill_date
, eway_bill_acceptance_flaG
,record_type_code --added by zhiwei.xin for bug#20485509
--Added by shasha for bug#24838926 --begin
,item_report_code_id
,third_party_report_code_id
--Added by shasha for bug#24838926 --end
,hsn_code_id
,sac_code_id
,tax_invoice_date --added for bug 25879349
,NULL lc_applicability_flag --AELLURU FOR EMERSON
FROM jai_det_factors_interface
WHERE
/*26399170*/
(pn_trx_line_id IS NULL OR (pn_trx_line_id IS NOT NULL AND
interface_transaction_id = pn_trx_line_id))
AND (pn_trx_id IS NULL OR (pn_trx_id IS NOT NULL AND interface_trx_hdr_id
= pn_trx_id))
/*26387349*/
AND (pn_application_id IS NULL OR (pn_application_id IS NOT NULL AND
application_id = pn_application_id))
AND (pv_entity_code IS NULL OR (pv_entity_code IS NOT NULL AND
entity_code = pv_entity_code))
AND (pv_event_class_code IS NULL OR (pv_event_class_code IS NOT NULL AND
event_class_code = pv_event_class_code))
/*
application_id = nvl(pn_application_id,application_id)
AND entity_code = nvl(pv_entity_code, entity_code)
AND event_class_code = nvl(pv_event_class_code,event_class_code)
--AND trx_level_type = nvl(pv_trx_level_type,trx_level_type)
AND interface_trx_hdr_id = nvl(pn_trx_id,interface_trx_hdr_id)
AND (interface_transaction_id = nvl(pn_trx_line_id,
interface_transaction_id)
OR nvl(interface_transaction_id,-1) = nvl(pn_trx_line_id,-1))
*/ /*26387349*/
--AND (trx_loc_line_id = nvl(pn_trx_loc_line_id,trx_loc_line_id)
-- OR nvl(trx_loc_line_id,-1) = nvl(pn_trx_loc_line_id,-1))
AND interface_det_factor_id = pn_det_factor_id
--nvl(pn_det_factor_id,interface_det_factor_id)--commented by mani for bug
26410566
AND nvl(trx_type
,'X') = nvl(pv_trx_type
,nvl(trx_type
,'X'))
AND pv_call_from = 'INTERFACE';
r_null_det_factor c_null_det_factor%ROWTYPE;

/*upto here 26387349*/


r_det_factor c_det_factor%ROWTYPE;

lv_api_name CONSTANT VARCHAR2(50) := 'get_tax_det_factor';


BEGIN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----begin----' || '()+');
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Input parameter:pn_application_id,' || pn_application_id ||
',pv_entity_code:' || pv_entity_code ||
',pv_event_class_code:' || pv_event_class_code ||
',pn_trx_id:' || pn_trx_id ||
',pn_trx_line_id:' || pn_trx_line_id || 'pn_trx_loc_line_id:'
|| pn_trx_loc_line_id ||
'pv_trx_level_type:' || pv_trx_level_type);
END IF;
/*from here 26387349*/
IF (pn_application_id IS NULL OR pv_entity_code IS NULL OR pv_event_class_code
IS NULL OR pn_trx_id IS NULL) THEN
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'fetch the determination factors using
det factor id ');
OPEN c_null_det_factor;
FETCH c_null_det_factor
INTO r_det_factor;
CLOSE c_null_det_factor;

ELSE
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'fetch the determination factors using
event class record');
OPEN c_det_factor;
FETCH c_det_factor
INTO r_det_factor;
CLOSE c_det_factor;

END IF;
/*upto here 26387349*/
pr_det_factor.det_factor_id := r_det_factor.det_factor_id;
pr_det_factor.org_id := r_det_factor.org_id;
pr_det_factor.organization_id := r_det_factor.organization_id;
pr_det_factor.location_id := r_det_factor.location_id;
pr_det_factor.ship_from_location_id := r_det_factor.ship_from_location_id;
pr_det_factor.ship_from_state := r_det_factor.ship_from_state;
pr_det_factor.ship_from_country := r_det_factor.ship_from_country;
pr_det_factor.ship_to_location_id := r_det_factor.ship_to_location_id;
pr_det_factor.ship_to_state := r_det_factor.ship_to_state;
pr_det_factor.ship_to_country := r_det_factor.ship_to_country;
pr_det_factor.bill_from_location_id := r_det_factor.bill_from_location_id;
pr_det_factor.bill_to_location_id := r_det_factor.bill_to_location_id;
pr_det_factor.application_id := r_det_factor.application_id;
pr_det_factor.entity_code := r_det_factor.entity_code;
pr_det_factor.event_class_code := r_det_factor.event_class_code;
pr_det_factor.event_type_code := r_det_factor.event_type_code;
pr_det_factor.tax_event_class_code := r_det_factor.tax_event_class_code;
pr_det_factor.tax_event_type_code := r_det_factor.tax_event_type_code;
pr_det_factor.line_level_action := r_det_factor.line_level_action;
pr_det_factor.trx_id := r_det_factor.trx_id;
pr_det_factor.trx_line_id := r_det_factor.trx_line_id;
pr_det_factor.trx_level_type := r_det_factor.trx_level_type;
pr_det_factor.trx_loc_line_id := r_det_factor.trx_loc_line_id;
pr_det_factor.trx_date := r_det_factor.trx_date;
pr_det_factor.legal_entity_id := r_det_factor.legal_entity_id;
pr_det_factor.trx_number := r_det_factor.trx_number;
pr_det_factor.trx_line_number := r_det_factor.trx_line_number;
pr_det_factor.doc_revision_num := r_det_factor.doc_revision_num;
pr_det_factor.trx_type := r_det_factor.trx_type;
pr_det_factor.trx_line_gl_date := r_det_factor.trx_line_gl_date;
pr_det_factor.party_type := r_det_factor.party_type;
pr_det_factor.party_id := r_det_factor.party_id;
pr_det_factor.party_site_id := r_det_factor.party_site_id;
pr_det_factor.trx_currency_code := r_det_factor.trx_currency_code;
pr_det_factor.currency_conversion_date :=
r_det_factor.currency_conversion_date;
pr_det_factor.currency_conversion_rate :=
r_det_factor.currency_conversion_rate;
pr_det_factor.currency_conversion_type :=
r_det_factor.currency_conversion_type;
pr_det_factor.item_id := r_det_factor.item_id;
pr_det_factor.item_classification := r_det_factor.item_classification;
-- pr_det_factor.item_category_id :=
r_det_factor.item_category_id ;
pr_det_factor.trx_uom_code := r_det_factor.trx_uom_code;
pr_det_factor.unit_price := r_det_factor.unit_price;
pr_det_factor.trx_line_quantity := r_det_factor.trx_line_quantity;
pr_det_factor.line_amt := r_det_factor.line_amt;
pr_det_factor.tax_rule_id := r_det_factor.tax_rule_id;
pr_det_factor.default_tax_category_id :=
r_det_factor.default_tax_category_id;
pr_det_factor.override_tax_category_id :=
r_det_factor.override_tax_category_id;
pr_det_factor.user_modified_flag := r_det_factor.user_modified_flag;
pr_det_factor.tax_determination_basis :=
r_det_factor.tax_determination_basis;
pr_det_factor.ref_doc_application_id :=
r_det_factor.ref_doc_application_id;
pr_det_factor.ref_doc_entity_code :=
r_det_factor.ref_doc_entity_code;
pr_det_factor.ref_doc_event_class_code :=
r_det_factor.ref_doc_event_class_code;
pr_det_factor.ref_doc_trx_id := r_det_factor.ref_doc_trx_id;
pr_det_factor.ref_doc_line_id := r_det_factor.ref_doc_line_id;
pr_det_factor.ref_doc_trx_type := r_det_factor.ref_doc_trx_type;
pr_det_factor.ref_doc_loc_line_id :=
r_det_factor.ref_doc_loc_line_id;
pr_det_factor.ref_doc_trx_level_type :=
r_det_factor.ref_doc_trx_level_type;
pr_det_factor.applied_from_application_id :=
r_det_factor.applied_from_application_id;
pr_det_factor.applied_from_entity_code :=
r_det_factor.applied_from_entity_code;
pr_det_factor.applied_from_event_class_code :=
r_det_factor.applied_from_event_class_code;
pr_det_factor.applied_from_trx_id :=
r_det_factor.applied_from_trx_id;
pr_det_factor.applied_from_trx_line_id :=
r_det_factor.applied_from_trx_line_id;
pr_det_factor.applied_from_trx_type :=
r_det_factor.applied_from_trx_type;
pr_det_factor.applied_from_loc_line_id :=
r_det_factor.applied_from_loc_line_id;
pr_det_factor.applied_from_trx_level_type :=
r_det_factor.applied_from_trx_level_type;
pr_det_factor.applied_to_application_id :=
r_det_factor.applied_to_application_id;
pr_det_factor.applied_to_entity_code :=
r_det_factor.applied_to_entity_code;
pr_det_factor.applied_to_event_class_code :=
r_det_factor.applied_to_event_class_code;
pr_det_factor.applied_to_trx_id := r_det_factor.applied_to_trx_id;
pr_det_factor.applied_to_trx_line_id :=
r_det_factor.applied_to_trx_line_id;
pr_det_factor.applied_to_trx_type :=
r_det_factor.applied_to_trx_type;
pr_det_factor.applied_to_loc_line_id :=
r_det_factor.applied_to_loc_line_id;
pr_det_factor.applied_to_trx_level_type :=
r_det_factor.applied_to_trx_level_type;
pr_det_factor.tax_confirmed_flag := r_det_factor.tax_confirmed_flag;
pr_det_factor.intended_use := r_det_factor.intended_use;
--Added by Qinglei for bug#18648074

--27441146
pr_det_factor.eway_bill_num := r_det_factor.eway_bill_num
;
pr_det_factor.eway_bill_date := r_det_factor.eway_bill_date
;
pr_det_factor.eway_bill_acceptance_flaG :=
r_det_factor.eway_bill_acceptance_flaG ;
pr_det_factor.record_type_code := r_det_factor.record_type_code;
--added by zhiwei.xin for bug#20485509
pr_det_factor.item_report_code_id :=
r_det_factor.item_report_code_id; --Added by shasha for bug#24838926
--Added by shasha for bug#24838926
pr_det_factor.third_party_report_code_id :=
r_det_factor.third_party_report_code_id;

/* Bug#26279373, dejiang.liu/20170615. Add column for HSN/SAC. */


pr_det_factor.hsn_code_id := r_det_factor.hsn_code_id;
pr_det_factor.sac_code_id := r_det_factor.sac_code_id;
pr_det_factor.lc_applicability_flag :=r_det_factor.lc_applicability_flag;--
AELLURU FOR EMERSON
jai_tax_determination_pkg.log_line_det_factor(pr_det_factor);
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
END get_tax_det_factor;

/*---------------------------------------------------------------------------------
------------------------------+
| Created By : Wenqiong Zhou
|
| Creation Date : 10/Apr/2013
|
| Bug Number/ER Name : Phase IV Tax Determination
|
| SubProgram Name : prepare_tax_lines_tbl
|
| Type : PROCEDURE
|
| Purpose : This procedure is to prepare tax line tbl as input
parameter for calculate tax. |
| It can be used in many cases.
|
| 1. After determine tax, a tax category is determined,
need prepare the tax line tbl |
| for calculation.
|
| 2. Prepare tax line tbl for copy taxes case, copy most
fields from source and |
| derive TPB and tax rate.
|
| 3. Prepare tax line tbl for amount related factor
updated,prepare the tax line tbl |
| for re-calculation.
|
| TDD Reference : Section 6.13
|
| Assumptions : Based on the input paramter, only one record can be
retrived. |
| Called From : called by product when document updating, get the
exsiting det factor record firstly. |

|----------------------------------------------------------------------------------
-----------------------------|
| parameters IN/OUT Type Required
Description and Purpose |
| ------------ -------- ------ ----------
------------------------- |
| pn_det_factor_id IN NUMBER yes
Tax det factor ID |
| pn_tax_category_id IN NUMBER yes
Tax Category ID |
| pv_amt_factor_updated IN VARCHAR2 default N
Indicate called by amt update |
| p_tax_lines_tbl OUT TAX_LINES_TBL yes
Tax Lines Table type |
| pv_process_status OUT VARCHAR2 yes
Process status |

*----------------------------------------------------------------------------------
------------------------------*/
PROCEDURE prepare_tax_lines_tbl
(
pn_det_factor_id IN NUMBER
,pn_tax_category_id IN NUMBER
,pv_amt_factor_updated IN VARCHAR2 DEFAULT 'N'
,pv_call_from IN VARCHAR2 DEFAULT NULL --Added by Qinglei for Receiving
,p_tax_lines_tbl OUT NOCOPY tax_lines_tbl
,pv_process_status OUT NOCOPY VARCHAR2
,pn_application_id IN NUMBER DEFAULT NULL /*26387349*/
,pv_entity_code IN VARCHAR2 DEFAULT NULL
,pv_event_class_code IN VARCHAR2 DEFAULT NULL
,pn_trx_id IN NUMBER DEFAULT NULL
,pn_trx_line_id IN NUMBER DEFAULT NULL
,pn_trx_loc_line_id IN NUMBER DEFAULT NULL /*26387349*/
) IS
CURSOR c_tax_category_lines(cn_tax_category_id NUMBER) IS
SELECT category_line.line_number
,category_line.regime_id
,category_line.tax_type_id
,category_line.tax_rate_id
,category_line.precedence_1
,category_line.precedence_2
,category_line.precedence_3
,category_line.precedence_4
,category_line.precedence_5
,category_line.precedence_6
,category_line.precedence_7
,category_line.precedence_8
,category_line.precedence_9
,category_line.precedence_10
,category_line.precedence_11
,category_line.precedence_12
,category_line.precedence_13
,category_line.precedence_14
,category_line.precedence_15
,category_line.precedence_16
,category_line.precedence_17
,category_line.precedence_18
,category_line.precedence_19
,category_line.precedence_20
,regime.regime_code
,regime.regime_type
,tax_type.allow_abatement
,tax_type.update_vendor_on_transaction
,tax_type.offset_flag
,tax_type.recoverable_flag
,tax_type.self_assessed_flag
,tax_type.reverse_credit_on_shipment
,tax_type.credit_basis_self_assessed
,tax_type.reporting_only_flag
,tax_type.tax_point_basis
,tax_rate.tax_rate_code
,tax_rate.tax_rate_type
,tax_rate.tax_status
,tax_rate.recovery_percentage
,tax_rate.inclusive_flag
FROM jai_tax_category_lines category_line
,jai_regimes regime
,jai_tax_types tax_type
,jai_tax_rates tax_rate
WHERE category_line.tax_category_id = cn_tax_category_id
AND category_line.tax_rate_id = tax_rate.tax_rate_id
AND category_line.tax_type_id = tax_type.tax_type_id
AND category_line.regime_id = regime.regime_id
/* Bug#24838796/GST start, dejiang.liu/20161012, add logic to filter
out
exclusive self-assessed tax for Prepayments. */
AND ((nvl(pv_call_from
,'BASE') = 'BASE' AND EXISTS
(SELECT 1
FROM jai_tax_det_factors jtdf
WHERE jtdf.det_factor_id = pn_det_factor_id
AND (((jtdf.entity_code = 'AP_INVOICES' AND jtdf.trx_type =
'PREPAYMENT' AND
nvl(tax_type.self_assessed_flag
,'N') = 'Y' AND nvl(tax_rate.inclusive_flag
,'N') = 'N') OR
( /* Bug#25265137, dejiang.liu/20170118. Add logic to fix
filter.*/
jtdf.trx_type IS NULL OR jtdf.trx_type <> 'PREPAYMENT'))))
OR
((nvl(pv_call_from
,'BASE') = 'INTERFACE' AND EXISTS
(SELECT 1
FROM jai_det_factors_interface jtdf
WHERE jtdf.interface_det_factor_id = pn_det_factor_id
AND ((jtdf.entity_code = 'AP_INVOICES' AND jtdf.trx_type =
'PREPAYMENT' AND
nvl(tax_type.self_assessed_flag
,'N') = 'Y' AND nvl(tax_rate.inclusive_flag
,'N') = 'N') OR
( /* Bug#25265137, dejiang.liu/20170118. Add logic to fix
filter.*/
jtdf.trx_type IS NULL OR jtdf.trx_type <>
'PREPAYMENT')))))))
/* Bug#24838796/GST end. */
ORDER BY category_line.line_number ASC;

CURSOR c_1st_party_reg
(
cn_organization_id NUMBER
,cn_org_id NUMBER
,cn_location_id NUMBER
,cn_regime_id NUMBER
,cn_party_reg_id NUMBER
) IS
SELECT reg_lines.party_reg_id first_party_reg_id
, /*26399170*/reg_lines.registration_type_code
first_party_primary_reg_name
,reg_lines.registration_number first_party_primary_reg_num
,reg_lines.sec_registration_type_code first_party_secondary_reg_name
,reg_lines.secondary_registration_number first_party_secondary_reg_num

--reg_lines.num_of_return_days,
--reg_lines.create_validated_inv_on_intf,
--reg_lines.copy_rcv_taxes_to_shipment,
--reg_lines.sub_inventory_code,
,reg_lines.tax_authority_id
,reg_lines.tax_authority_site_id
FROM /*JAI_PARTY_REGS reg, 26399170*/ jai_party_reg_lines reg_lines
/*,
JAI_REGIMES regime 26399170*/
/* Bug#18033001 start, change first party matching rule. */
/*
WHERE reg.party_type_code = decode(regime.regime_type,'T','IO','W','OU')
AND reg.party_reg_id = reg_lines.party_reg_id
AND reg.party_id =
decode(reg.party_type_code,'IO',cn_organization_id,'OU',cn_org_id)
AND reg.party_site_id =
decode(reg.party_type_code,'IO',cn_location_id,NULL)
*/
WHERE /*reg.party_reg_id = reg_lines.party_reg_id 26399170*/
-- AND
reg_lines.party_reg_id = cn_party_reg_id
/*26399170(SELECT get_fp_matched_id(p_organization_id => cn_organization_id
,p_location_id => cn_location_id
,p_org_id => cn_org_id
,p_regime_type => regime.regime_type
,p_regime_id => cn_regime_id)
FROM dual)
/* Bug#18033001 end. */
--AND reg_lines.regime_id = cn_regime_id 26399170
--AND reg_lines.regime_id = regime.regime_id 26399170
--Added by Wenqiong for bug19450693 begin
AND reg_lines.line_context = 'REGISTRATIONS' /*For bug#19512503*/
AND nvl(reg_lines.effective_from
,SYSDATE - 1) <= SYSDATE
AND nvl(reg_lines.effective_to
,SYSDATE + 1) >= SYSDATE;
--Added by Wenqiong for bug19450693 end

CURSOR c_3rd_party_reg
(
cv_party_type VARCHAR2
,cn_party_id NUMBER
,cn_party_site_id NUMBER
,cn_regime_id NUMBER
) IS
SELECT reg.party_reg_id third_party_reg_id
,reg_lines.registration_type_code third_party_primary_reg_name
,reg_lines.registration_number third_party_primary_reg_num
,reg_lines.sec_registration_type_code third_party_secondary_reg_name
,reg_lines.secondary_registration_number third_party_secondary_reg_num
,reg_lines.assessable_price_list_id
FROM jai_party_regs reg
,jai_party_reg_lines reg_lines
WHERE reg.party_type_code IN ('THIRD_PARTY'
,'THIRD_PARTY_SITE')
AND reg.supplier_flag = decode(cv_party_type
,PARTY_TYPE_SUPPLIER
,'Y'
,'N')
AND reg.customer_flag = decode(cv_party_type
,PARTY_TYPE_CUSTOMER
,'Y'
,'N')
AND reg.party_reg_id = reg_lines.party_reg_id
AND reg.party_id = cn_party_id
AND nvl(reg.party_site_id
,0) = nvl(cn_party_site_id,0
) --Added by Wenqiong 0722
AND reg_lines.regime_id = cn_regime_id
--Added by Wenqiong for bug19450693 begin
AND reg_lines.line_context = 'REGISTRATIONS' /*For bug#19512503*/
AND nvl(reg_lines.effective_from
,SYSDATE - 1) <= SYSDATE
AND nvl(reg_lines.effective_to
,SYSDATE + 1) >= SYSDATE;
--Added by Wenqiong for bug19450693 end

CURSOR c_3rd_party_reporting
(
cn_third_party_reg_id NUMBER
,cn_regime_id NUMBER
) IS
SELECT rep_ass.reporting_type_id
,rep_ass.reporting_code
FROM jai_reporting_associations rep_ass
,jai_reporting_types rep_type
WHERE rep_ass.reporting_type_id = rep_type.reporting_type_id
AND rep_ass.entity_code = 'THIRD_PARTY'
AND rep_ass.entity_id = cn_third_party_reg_id
AND rep_ass.regime_id = cn_regime_id
AND rep_type.reporting_usage = 'TR' --Transaction Attribute
AND nvl(rep_ass.effective_from
,SYSDATE - 1) <= SYSDATE
AND nvl(rep_ass.effective_to
,SYSDATE + 1) >= SYSDATE
AND nvl(rep_type.effective_from
,SYSDATE - 1) <= SYSDATE
AND nvl(rep_type.effective_to
,SYSDATE + 1) >= SYSDATE;

CURSOR c_tax_rate_percentage
(
cn_tax_rate_id NUMBER
,cd_tax_point_date DATE
) IS
SELECT tax_rate_percentage
FROM jai_tax_rates rate
,jai_tax_rate_details detail
WHERE rate.tax_rate_id = detail.tax_rate_id
AND rate.tax_rate_id = cn_tax_rate_id
AND rate.tax_rate_type = 'PERCENTAGE'
AND detail.tax_rate_detail_code = 'RATE_DETAILS'
-- commented out by zhiwei.xin for bug#18619014 begin
/*AND NVL( detail.effective_from, cd_tax_point_date - 1 ) <=
cd_tax_point_date
AND NVL( detail.effective_to, cd_tax_point_date + 1 ) >=
cd_tax_point_date*/
-- commented out by zhiwei.xin for bug#18619014 end.
-- added by zhiwei.xin for bug#18619014 begin
AND nvl(detail.effective_from
,nvl(cd_tax_point_date
,SYSDATE) - 1) <= nvl(cd_tax_point_date
,SYSDATE)
AND nvl(detail.effective_to
,nvl(cd_tax_point_date
,SYSDATE) + 1) >= nvl(cd_tax_point_date
,SYSDATE)
-- added by zhiwei.xin for bug#18619014 end.
;

CURSOR c_tax_rate_uom
(
cn_tax_rate_id NUMBER
,cd_tax_point_date DATE
) IS
SELECT (SELECT mum.uom_code
FROM mtl_units_of_measure mum
WHERE mum.unit_of_measure = detail.tax_rate_uom) tax_rate_uom
,tax_rate_uom_rate
FROM jai_tax_rates rate
,jai_tax_rate_details detail
WHERE rate.tax_rate_id = detail.tax_rate_id
AND rate.tax_rate_id = cn_tax_rate_id
AND rate.tax_rate_type LIKE 'UNIT_OF_MEASURE%'
AND detail.tax_rate_detail_code = 'RATE_DETAILS'
-- commented out by zhiwei.xin for bug#18619014 begin
/*AND NVL( detail.effective_from, cd_tax_point_date - 1 ) <=
cd_tax_point_date
AND NVL( detail.effective_to, cd_tax_point_date + 1 ) >=
cd_tax_point_date*/
-- commented out by zhiwei.xin for bug#18619014 end.
-- added by zhiwei.xin for bug#18619014 begin
AND nvl(detail.effective_from
,nvl(cd_tax_point_date
,SYSDATE) - 1) <= nvl(cd_tax_point_date
,SYSDATE)
AND nvl(detail.effective_to
,nvl(cd_tax_point_date
,SYSDATE) + 1) >= nvl(cd_tax_point_date
,SYSDATE)
-- added by zhiwei.xin for bug#18619014 end.
;

CURSOR c_tax_rate_abatement
(
cn_tax_rate_id NUMBER
,cd_tax_point_date DATE
) IS
SELECT tax_rate_abatement_type
,abatement_percentage
FROM jai_tax_rates rate
,jai_tax_rate_details detail
WHERE rate.tax_rate_id = detail.tax_rate_id
AND rate.tax_rate_id = cn_tax_rate_id
AND detail.tax_rate_detail_code = 'RATE_ABATEMENT'
-- commented out by zhiwei.xin for bug#18619014 begin
/*AND NVL( detail.effective_from, cd_tax_point_date - 1 ) <=
cd_tax_point_date
AND NVL( detail.effective_to, cd_tax_point_date + 1 ) >=
cd_tax_point_date*/
-- commented out by zhiwei.xin for bug#18619014 end.
-- added by zhiwei.xin for bug#18619014 begin
AND nvl(detail.effective_from
,nvl(cd_tax_point_date
,SYSDATE) - 1) <= nvl(cd_tax_point_date
,SYSDATE)
AND nvl(detail.effective_to
,nvl(cd_tax_point_date
,SYSDATE) + 1) >= nvl(cd_tax_point_date
,SYSDATE)
-- added by zhiwei.xin for bug#18619014 end.
;

CURSOR c_tax_rate_exception
(
cn_tax_rate_id NUMBER
,cd_tax_point_date DATE
) IS
SELECT tax_rate_classification
,standard_rate_percentage
,form_type
FROM jai_tax_rates rate
,jai_tax_rate_details detail
WHERE rate.tax_rate_id = detail.tax_rate_id
AND rate.tax_rate_id = cn_tax_rate_id
AND detail.tax_rate_detail_code = 'TAX_EXCEPTION'
-- commented out by zhiwei.xin for bug#18619014 begin
/*AND NVL( detail.effective_from, cd_tax_point_date - 1 ) <=
cd_tax_point_date
AND NVL( detail.effective_to, cd_tax_point_date + 1 ) >=
cd_tax_point_date*/
-- commented out by zhiwei.xin for bug#18619014 end.
-- added by zhiwei.xin for bug#18619014 begin
AND nvl(detail.effective_from
,nvl(cd_tax_point_date
,SYSDATE) - 1) <= nvl(cd_tax_point_date
,SYSDATE)
AND nvl(detail.effective_to
,nvl(cd_tax_point_date
,SYSDATE) + 1) >= nvl(cd_tax_point_date
,SYSDATE)
-- added by zhiwei.xin for bug#18619014 end.
;

CURSOR c_tax_type_tpb(cn_tax_type_id NUMBER) IS


SELECT tax_point_basis
FROM jai_tax_types
WHERE tax_type_id = cn_tax_type_id;

lv_source VARCHAR2(10); -- added by zhiwei.xin for bug#20056694

CURSOR c_tax_lines_for_update IS
SELECT org_id
,organization_id
,location_id
,application_id
,entity_code
,event_class_code
,event_type_code
,tax_event_class_code
,tax_event_type_code
,ledger_id
,trx_id
,trx_line_id
,trx_loc_line_id
,trx_level_type
,trx_number
,trx_line_number
,trx_type
,trx_date
,legal_entity_id
,frozen_flag
,party_type
,party_id
,party_site_id
,trx_uom
,item_id
,unit_price
,line_amt
,trx_line_quantity
,trx_currency_code
,currency_conversion_date
,currency_conversion_type
,currency_conversion_rate
,tax_currency_code
,tax_currency_conversion_date
,tax_currency_conversion_type
,tax_currency_conversion_rate
,functional_currency_code
,tax_regime_id
,tax_regime_code
,tax_regime_type
,first_party_reg_id
,first_party_primary_reg_name
,first_party_primary_reg_num
,first_party_secondary_reg_name
,first_party_secondary_reg_num
,num_of_return_days
,tax_authority_id
,tax_authority_site_id
,third_party_reg_id
,third_party_primary_reg_name
,third_party_primary_reg_num
,third_party_secondary_reg_name
,third_party_secondary_reg_num
,assessable_price_list_id
,tax_type_id
,abatement_flag
,update_vendor_on_transaction
,offset_flag
,recoverable_flag
,self_assessed_flag
,reverse_credit_on_shipment
,credit_basis_self_assessed
,reporting_only_flag
,tax_point_basis
,tax_point_date
,tax_rate_id
,tax_rate_code
,tax_rate_type
,tax_status
,recovery_percentage
,inclusive_flag
,tax_rate_percentage
,tax_rate_uom
,tax_rate_uom_rate
,tax_rate_abatement_type
,abatement_percentage
,tax_rate_classification
,standard_rate
,form_type
,actual_tax_rate
,rounding_level
,tax_rounded_to
,tax_rounding_factor
,taxable_rounded_to
,taxable_rounding_factor
,quantity_rounded_to
,quantity_rounding_factor
,unround_tax_amt_fun_curr
,unround_tax_amt_tax_curr --AELLURU FOR SPLIT CASES 26474759
,unrounded_uom_conv_qty
,rounded_quantity
,manual_overridden_flag
,manual_tax_line_flag
,copied_from_other_doc_flag
,tax_line_num
,precedence_1
,precedence_2
,precedence_3
,precedence_4
,precedence_5
,precedence_6
,precedence_7
,precedence_8
,precedence_9
,precedence_10
,precedence_11
,precedence_12
,precedence_13
,precedence_14
,precedence_15
,precedence_16
,precedence_17
,precedence_18
,precedence_19
,precedence_20
,ref_doc_application_id
,ref_doc_entity_code
,ref_doc_event_class_code
,ref_doc_trx_id
,ref_doc_trx_type
,ref_doc_line_id
,ref_doc_loc_line_id
,ref_doc_trx_level_type
,applied_from_application_id
,applied_from_entity_code
,applied_from_event_class_code
,applied_from_trx_id
,applied_from_trx_line_id
,applied_from_trx_type
,applied_from_loc_line_id
,applied_from_trx_level_type
,applied_to_application_id
,applied_to_entity_code
,applied_to_event_class_code
,applied_to_trx_id
,applied_to_trx_line_id
,applied_to_trx_type
,applied_to_loc_line_id
,applied_to_trx_level_type
,reporting_type_id
,reporting_code
,tax_invoice_date
,tax_invoice_num
,exemption_hdr_id -- added by zhiwei.xin for bug#21146625
/* Bug#23102735, dejiang.liu/20160118, modify to add assessable value
pass from interface to tax lines. */
,line_assessable_value
,user_entered_av
,tax_line_id /*AELLURU 27666686*/
FROM jai_tax_lines
WHERE det_factor_id = pn_det_factor_id
AND nvl(pv_call_from
,'BASE') <> 'INTERFACE'
--Added by Qinglei for Receiving 09-Jul-2013 begin
UNION
SELECT org_id
,organization_id
,location_id
,application_id
,entity_code
,event_class_code
,event_type_code
,tax_event_class_code
,tax_event_type_code
,ledger_id
,NULL trx_id
,NULL trx_line_id
,NULL trx_loc_line_id
,NULL trx_level_type
,NULL trx_number
,NULL trx_line_number
,trx_type
,trx_date
,legal_entity_id
,frozen_flag
,party_type
,party_id
,party_site_id
,trx_uom
,item_id
,unit_price
,line_amt
,trx_line_quantity
,trx_currency_code
,currency_conversion_date
,currency_conversion_type
,currency_conversion_rate
,tax_currency_code
,tax_currency_conversion_date
,tax_currency_conversion_type
,tax_currency_conversion_rate
,functional_currency_code
,tax_regime_id
,tax_regime_code
,tax_regime_type
,first_party_reg_id
,first_party_primary_reg_name
,first_party_primary_reg_num
,first_party_secondary_reg_name
,first_party_secondary_reg_num
,num_of_return_days
,tax_authority_id
,tax_authority_site_id
,third_party_reg_id
,third_party_primary_reg_name
,third_party_primary_reg_num
,third_party_secondary_reg_name
,third_party_secondary_reg_num
,assessable_price_list_id
,tax_type_id
,abatement_flag
,update_vendor_on_transaction
,offset_flag
,recoverable_flag
,self_assessed_flag
,reverse_credit_on_shipment
,credit_basis_self_assessed
,reporting_only_flag
,tax_point_basis
,tax_point_date
,tax_rate_id
,tax_rate_code
,tax_rate_type
,tax_status
,recovery_percentage
,inclusive_flag
,tax_rate_percentage
,tax_rate_uom
,tax_rate_uom_rate
,tax_rate_abatement_type
,abatement_percentage
,tax_rate_classification
,standard_rate
,form_type
,actual_tax_rate
,rounding_level
,tax_rounded_to
,tax_rounding_factor
,taxable_rounded_to
,taxable_rounding_factor
,quantity_rounded_to
,quantity_rounding_factor
,unround_tax_amt_fun_curr
,unround_tax_amt_tax_curr --AELLURU FOR SPLIT CASES 26474759
,unrounded_uom_conv_qty
,rounded_quantity
,manual_overridden_flag
,manual_tax_line_flag
,copied_from_other_doc_flag
,tax_line_num
,precedence_1
,precedence_2
,precedence_3
,precedence_4
,precedence_5
,precedence_6
,precedence_7
,precedence_8
,precedence_9
,precedence_10
,precedence_11
,precedence_12
,precedence_13
,precedence_14
,precedence_15
,precedence_16
,precedence_17
,precedence_18
,precedence_19
,precedence_20
,ref_doc_application_id
,ref_doc_entity_code
,ref_doc_event_class_code
,ref_doc_trx_id
,ref_doc_trx_type
,ref_doc_line_id
,ref_doc_loc_line_id
,ref_doc_trx_level_type
,applied_from_application_id
,applied_from_entity_code
,applied_from_event_class_code
,applied_from_trx_id
,applied_from_trx_line_id
,applied_from_trx_type
,applied_from_loc_line_id
,applied_from_trx_level_type
,applied_to_application_id
,applied_to_entity_code
,applied_to_event_class_code
,applied_to_trx_id
,applied_to_trx_line_id
,applied_to_trx_type
,applied_to_loc_line_id
,applied_to_trx_level_type
,reporting_type_id
,reporting_code
,tax_invoice_date
,tax_invoice_num
,NULL exemption_hdr_id -- added by zhiwei.xin
for bug#21146625
/* Bug#23102735, dejiang.liu/20160118, modify to add assessable value
pass from interface to tax lines. */
,line_assessable_value
,user_entered_av
,INTERFACE_TAX_LINE_ID tax_line_id /*AELLURU 27666686*/
FROM jai_tax_lines_interface
WHERE interface_det_factor_id = pn_det_factor_id
AND pv_call_from = 'INTERFACE'
ORDER BY tax_line_num ASC;
--Added by Qinglei for Receiving 09-Jul-2013 end

--mani for bug 27279110


cursor c_parent_det_fact(cn_det_factor_id number) is
SELECT trx_uom_code
FROM jai_tax_det_factors
WHERE det_factor_id = cn_det_factor_id
UNION
SELECT trx_uom_code
FROM jai_det_factors_interface
WHERE interface_det_factor_id = cn_det_factor_id;

rec_sour_tax_det_factor c_parent_det_fact%ROWTYPE;
--mani for bug 27279110

rec_tax_det_factor jai_tax_det_factors%ROWTYPE;
rec_jai_tax_line jai_tax_lines%ROWTYPE;
rec_1st_party_reg c_1st_party_reg%ROWTYPE;
rec_3rd_party_reg c_3rd_party_reg%ROWTYPE;
lv_tax_line_tpb jai_tax_lines.tax_point_basis%TYPE;
ln_tax_line_num jai_tax_lines.tax_line_num%TYPE;
ln_tax_rate_id jai_tax_lines.tax_rate_id%TYPE;
ln_party_id jai_tax_lines.party_id%TYPE;
ln_party_site_id jai_tax_lines.party_site_id%TYPE;
lv_party_type jai_tax_lines.party_type%TYPE;
ln_tax_rate_vendor_id jai_tax_lines.party_id%TYPE;
ln_tax_rate_vendor_site_id jai_tax_lines.party_site_id%TYPE;
ln_regime_id jai_tax_lines.tax_regime_id%TYPE;
ln_tax_rate_percentage jai_tax_lines.tax_rate_percentage%TYPE;
lv_tax_rate_uom jai_tax_lines.tax_rate_uom%TYPE;
ln_tax_rate_uom_rate jai_tax_lines.tax_rate_uom_rate%TYPE;
lv_tax_rate_abatement_type jai_tax_lines.tax_rate_abatement_type%TYPE;
ln_tax_abatement_percentage jai_tax_lines.abatement_percentage%TYPE;
lv_tax_rate_classification jai_tax_lines.tax_rate_classification%TYPE;
ln_standard_rate jai_tax_lines.standard_rate%TYPE;
lv_form_type jai_tax_lines.form_type%TYPE;
ln_organization_id jai_tax_lines.organization_id%TYPE;
ln_org_id jai_tax_lines.org_id%TYPE;
ln_location_id jai_tax_lines.location_id%TYPE;
ln_tax_category_id jai_tax_category_lines.tax_category_id%TYPE;
ln_src_application_id jai_tax_det_factors.application_id%TYPE;
lv_src_entity_code jai_tax_det_factors.entity_code%TYPE;
lv_src_event_class_code jai_tax_det_factors.event_class_code%TYPE;
ln_src_trx_id jai_tax_det_factors.trx_id%TYPE;
ln_src_trx_line_id jai_tax_det_factors.trx_line_id%TYPE;
lv_src_trx_type jai_tax_det_factors.trx_type%TYPE;
ln_src_loc_line_id jai_tax_det_factors.trx_loc_line_id%TYPE;
lv_src_trx_level_type jai_tax_det_factors.trx_level_type%TYPE;
lv_tax_type_tpb jai_tax_lines.tax_point_basis%TYPE;
ld_tax_point_date jai_tax_lines.tax_point_date%TYPE;
lv_func_currency jai_tax_det_factors.trx_currency_code%TYPE;
ln_ledger_id NUMBER;
CURSOR c_src_doc_tax_lines IS
SELECT tax_regime_id
,tax_regime_code
,tax_regime_type
,tax_type_id
,abatement_flag
,update_vendor_on_transaction
,offset_flag
,recoverable_flag
,self_assessed_flag
,reverse_credit_on_shipment
,credit_basis_self_assessed
,reporting_only_flag
,tax_point_basis
,tax_point_date --added by Wenqiong for redetermination in copy cases
,tax_rate_id
,tax_rate_code
,tax_rate_type
,tax_status
,recovery_percentage
,inclusive_flag
,tax_rate_percentage
,tax_rate_uom
,tax_rate_uom_rate
,tax_rate_abatement_type
,abatement_percentage
,tax_rate_classification
,standard_rate
,form_type
,trx_line_quantity
,tax_currency_code
,tax_currency_conversion_date
,tax_currency_conversion_type
,tax_currency_conversion_rate
,unround_tax_amt_tax_curr
,tax_line_num
,precedence_1
,precedence_2
,precedence_3
,precedence_4
,precedence_5
,precedence_6
,precedence_7
,precedence_8
,precedence_9
,precedence_10
,precedence_11
,precedence_12
,precedence_13
,precedence_14
,precedence_15
,precedence_16
,precedence_17
,precedence_18
,precedence_19
,precedence_20
,party_id --Added by Junjian for bug#18548713
,party_site_id --Added by Junjian for bug#18548713
,first_party_reg_id --Added by Junjian for bug#19303523
-- added by zhiwei.xin for AR Open Interface begin
,tax_invoice_num
,tax_invoice_date
-- added by zhiwei.xin for AR Open Interface end.
--Added by Junjian for bug#19426429 begin
,user_entered_av
,line_assessable_value
--Added by Junjian for bug#19426429 end
,assessable_price_list_id /*26381084*/
,trx_uom /*26381084*/
,det_factor_id--mani for 27279110
FROM jai_tax_lines
WHERE application_id = ln_src_application_id
AND entity_code = lv_src_entity_code
AND event_class_code = lv_src_event_class_code
AND trx_id = ln_src_trx_id
AND nvl(trx_line_id
,-1) = nvl(ln_src_trx_line_id
,nvl(trx_line_id
,-1))
AND nvl(trx_type
,'X') = nvl(lv_src_trx_type
,nvl(trx_type
,'X'))
AND nvl(trx_loc_line_id
,-1) = nvl(ln_src_loc_line_id
,nvl(trx_loc_line_id
,-1))
AND NVL(trx_level_type,'##')=
NVL(lv_src_trx_level_type,NVL(trx_level_type,'##'))
-- added by zhiwei.xin for bug#20056694 begin --26381241
AND nvl(lv_source
,'BASE') = 'BASE'
UNION ALL
SELECT tax_regime_id
,tax_regime_code
,tax_regime_type
,tax_type_id
,abatement_flag
,update_vendor_on_transaction
,offset_flag
,recoverable_flag
,self_assessed_flag
,reverse_credit_on_shipment
,credit_basis_self_assessed
,reporting_only_flag
,tax_point_basis
,tax_point_date
,tax_rate_id
,tax_rate_code
,tax_rate_type
,tax_status
,recovery_percentage
,inclusive_flag
,tax_rate_percentage
,tax_rate_uom
,tax_rate_uom_rate
,tax_rate_abatement_type
,abatement_percentage
,tax_rate_classification
,standard_rate
,form_type
,trx_line_quantity
,tax_currency_code
,tax_currency_conversion_date
,tax_currency_conversion_type
,tax_currency_conversion_rate
,unround_tax_amt_tax_curr
,tax_line_num
,precedence_1
,precedence_2
,precedence_3
,precedence_4
,precedence_5
,precedence_6
,precedence_7
,precedence_8
,precedence_9
,precedence_10
,precedence_11
,precedence_12
,precedence_13
,precedence_14
,precedence_15
,precedence_16
,precedence_17
,precedence_18
,precedence_19
,precedence_20
,party_id
,party_site_id
,first_party_reg_id
,tax_invoice_num
,tax_invoice_date
--Added by Junjian for bug#19426429 begin
,user_entered_av
,line_assessable_value
--Added by Junjian for bug#19426429 end
,assessable_price_list_id /*26381084*/
,trx_uom /*26381084*/
,interface_det_factor_id det_factor_id--mani for 27279110
FROM jai_tax_lines_interface
WHERE ((ln_src_trx_line_id IS NOT NULL AND interface_transaction_id =
ln_src_trx_line_id) OR
(ln_src_trx_line_id IS NULL))
AND interface_trx_hdr_id = ln_src_trx_id
AND application_id = ln_src_application_id
AND entity_code = lv_src_entity_code
AND event_class_code = lv_src_event_class_code
/*
AND nvl(interface_transaction_id,-1) =
nvl(ln_src_trx_line_id,nvl(interface_transaction_id,-1))*/
AND nvl(trx_type
,'X') = nvl(lv_src_trx_type
,nvl(trx_type
,'X'))
AND nvl(lv_source
,'BASE') = 'INTERFACE'
-- added by zhiwei.xin for bug#20056694 end.
ORDER BY tax_line_num ASC;

--derive base order info


CURSOR c_get_order_info(cn_trx_line_id IN NUMBER) IS
SELECT COUNT(1) cnt
FROM oe_order_lines_all oola
WHERE oola.line_id = cn_trx_line_id
AND (EXISTS ( -- non-shippable / bill only
SELECT 1
FROM mtl_system_items_b ITEM
WHERE oola.inventory_item_id = item.inventory_item_id
AND nvl(item.shippable_item_flag
,'Y') = 'N' --non-shippable lines
) OR (nvl(oola.fulfilled_flag
,'N') = 'Y' --Bill only sales order
AND nvl(oola.line_category_code
,'RETURN') = 'ORDER' AND
nvl(oola.shipping_interfaced_flag
,'Y') = 'N'));
CURSOR c_src_doc_det_ref_to
(
cn_ref_application_id NUMBER
,cv_ref_entity_code VARCHAR2
,cv_ref_event_class_code VARCHAR2
,cn_ref_trx_id NUMBER
,cn_ref_trx_line_id NUMBER
,cv_ref_trx_type VARCHAR2
,cn_ref_trx_loc_line_id NUMBER
,cv_ref_trx_level_type VARCHAR
) IS
SELECT application_id
,entity_code
,event_class_code
,trx_level_type
,trx_id
,trx_line_id
,trx_loc_line_id
,trx_type
FROM jai_tax_det_factors
WHERE ref_doc_application_id = cn_ref_application_id
AND ref_doc_entity_code = cv_ref_entity_code
AND ref_doc_event_class_code = cv_ref_event_class_code
AND ref_doc_trx_id = cn_ref_trx_id
AND ref_doc_line_id = cn_ref_trx_line_id
AND nvl(ref_doc_trx_type
,'X') = nvl(cv_ref_trx_type
,nvl(ref_doc_trx_type
,'X'))
AND nvl(ref_doc_loc_line_id
,0) = nvl(cn_ref_trx_loc_line_id
,nvl(ref_doc_loc_line_id
,0))
AND nvl(ref_doc_trx_level_type
,'X') = nvl(cv_ref_trx_level_type
,nvl(ref_doc_trx_level_type
,'X'));

ln_non_ship_cnt NUMBER;
lv_api_name CONSTANT VARCHAR2(50) := 'prepare_tax_lines_tbl';
lv_tradding_flag VARCHAR2(5); --Added by Junjian for Trading
lv_boe_flag VARCHAR2(5); --Added by Junjian for bug#18729209
lv_iso_flag VARCHAR2(1); --Added by Qinglei for Interorg/ISO accounting
bug#19329120

ln_um_conversion_rate number:=1;--mani for bug 27279110


ln_um_converted_qty number:=1;--mani for bug 27279110

--Added by Junjian for bug#20476394 begin


CURSOR c_credit_reversal_count(cp_tax_rate_id NUMBER) IS
SELECT COUNT(1)
FROM jai_extension_setups
WHERE setup_for = 'CR'
AND tax_rate_id = cp_tax_rate_id
AND trunc(SYSDATE) BETWEEN trunc(line_effective_from) AND
trunc(nvl(line_effective_to
,SYSDATE));
ln_cred_rev_count NUMBER;
--Added by Junjian for bug#20476394 end
--26381084
CURSOR c_source_tax_info
(
cn_application_id NUMBER
,cv_entity_code VARCHAR2
,cv_event_class_code VARCHAR2
,cn_trx_id NUMBER
,cn_trx_line_id NUMBER
,cn_trx_loc_line_id NUMBER
,cv_trx_level_type VARCHAR2
,cv_trx_type VARCHAR2
) IS
SELECT assessable_price_list_id
,user_entered_av
,line_assessable_value
,trx_uom
,tax_rate_uom --bug 27013873
FROM jai_tax_lines
WHERE application_id = cn_application_id
AND entity_code = cv_entity_code
AND event_class_code = cv_event_class_code
AND trx_id = cn_trx_id
AND (trx_line_id = nvl(cn_trx_line_id
,trx_line_id) OR
nvl(trx_line_id
,-1) = nvl(cn_trx_line_id
,-1))
AND trx_level_type = cv_trx_level_type
AND (trx_loc_line_id = nvl(cn_trx_loc_line_id
,trx_loc_line_id) OR
nvl(trx_loc_line_id
,-1) = nvl(cn_trx_loc_line_id
,-1))
AND nvl(trx_type
,'X') = nvl(cv_trx_type
,nvl(trx_type
,'X'));

r_source_tax_info c_source_tax_info%ROWTYPE;
ln_assessable_conv_rate NUMBER; --1102
ln_party_reg_id NUMBER; --26399170
--added by mani for bug 26516124
/*CURSOR c_chck_rma
(
pn_header_id NUMBER
,pn_line_id NUMBER
) IS
SELECT 'Y'
FROM oe_order_lines_all
WHERE header_id = pn_header_id
AND line_id = pn_line_id
AND line_category_code = 'RETURN';*/
lv_rma_type VARCHAR2(1) := 'N';
--added by mani for bug 26516124

CURSOR C_CHK_MATCHED_INV(P_INV_ID NUMBER) IS


SELECT 'Y' FROM DUAL
WHERE EXISTS (
SELECT 1 FROM AP_INVOICE_LINES_ALL AILA
WHERE AILA.MATCH_TYPE IN ('ITEM_TO_PO','ITEM_TO_RECEIPT','ITEM_TO_SERVICE_PO')
AND AILA.INVOICE_ID = P_INV_ID
);

LV_CHK_MATCHED_INV VARCHAR2(1):='N';
/* Bug#28213561, dejiang.liu/20180628. Add cursor to get interface assessable
value. */
CURSOR c_import_assessable_value(p_entity_code VARCHAR2
,p_trx_id NUMBER
,p_trx_line_id NUMBER) IS
SELECT to_number(attribute1) user_entered_av
FROM jai_interface_lines_all
WHERE internal_trx_id = p_trx_id
AND internal_trx_line_id = p_trx_line_id
AND p_entity_code = decode(import_module
,'AP'
,'AP_INVOICES'
,'AR'
,'TRANSACTIONS'
,'');

l_default_av NUMBER;

BEGIN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----begin----' || '()+');
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Input pn_det_factor_id:' || pn_det_factor_id || '
pn_tax_category_id:' || pn_tax_category_id ||
' pv_amt_factor_updated:' || pv_amt_factor_updated);
END IF;
pv_process_status := FND_API.G_RET_STS_SUCCESS;
jai_tax_determination_pkg.get_tax_det_factor(pn_application_id => NULL
,pv_entity_code => NULL
,pv_event_class_code => NULL
,pv_trx_level_type => NULL
,pn_trx_id => NULL
,pn_trx_line_id => NULL
,pn_trx_loc_line_id => NULL
,pn_det_factor_id =>
pn_det_factor_id
,pv_call_from =>
pv_call_from --Added by Qinglei for Receving
,pr_det_factor =>
rec_tax_det_factor);

/* Bug#28213561 start, dejiang.liu/20180628. Apply assessable for import tax.


*/
IF rec_tax_det_factor.record_type_code = 'OI_STD' THEN
-- For interfaced tax in Standard tax event.
BEGIN
OPEN c_import_assessable_value(rec_tax_det_factor.entity_code
,rec_tax_det_factor.trx_id
,rec_tax_det_factor.trx_line_id);
FETCH c_import_assessable_value
INTO l_default_av;
CLOSE c_import_assessable_value;

EXCEPTION
WHEN OTHERS THEN
-- For unexpected exception, set to null;
l_default_av := to_number(NULL);
END;

ELSE
l_default_av := to_number(NULL);
END IF;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Get default assessable value=' || l_default_av ||
' by record_type_code=' || rec_tax_det_factor.record_type_code
|| ', ' ||
' entity_code=' || rec_tax_det_factor.entity_code || ', ' ||
' trx_id=' || rec_tax_det_factor.trx_id || ', ' ||
' trx_line_id=' || rec_tax_det_factor.trx_line_id);
END IF;
/* Bug#28213561 end, dejiang.liu/20180628. */

--mani for bug 27386717


IF rec_tax_det_factor.ENTITY_CODE = 'AP_INVOICES' AND
rec_tax_det_factor.APPLICATION_ID = 200 THEN

open C_CHK_MATCHED_INV(REC_TAX_DET_FACTOR.TRX_ID);
FETCH C_CHK_MATCHED_INV INTO LV_CHK_MATCHED_INV;
CLOSE C_CHK_MATCHED_INV;

END IF;
--mani for bug 27386717
ln_party_id := rec_tax_det_factor.party_id;
ln_party_site_id := rec_tax_det_factor.party_site_id;
lv_party_type := rec_tax_det_factor.party_type;
ln_org_id := rec_tax_det_factor.org_id;
ln_organization_id := rec_tax_det_factor.organization_id;
ln_location_id := rec_tax_det_factor.location_id;

/* Bug#26799523, dejiang.liu/20180108. Add FND log for organization


information. */
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Factor organization info: org_id=' || ln_org_id || '
organization_id=' || ln_organization_id ||
' location_id=' || ln_location_id ||' LV_CHK_MATCHED_INV='||
LV_CHK_MATCHED_INV);
END IF;

jai_tax_determination_pkg.get_fun_curr_dtls(ln_org_id
,lv_func_currency
,ln_ledger_id);

IF (rec_tax_det_factor.tax_determination_basis <>
jai_tax_determination_pkg.copy_basis OR
(nvl(pn_tax_category_id
,0) > 0 AND rec_tax_det_factor.tax_determination_basis =
jai_tax_determination_pkg.copy_basis) OR
--ADDED BY MANI FOR RTV CHANGES.
(rec_tax_det_factor.tax_determination_basis IS NULL AND
rec_tax_det_factor.trx_type = 'RETURN TO VENDOR'))
AND pv_amt_factor_updated <> 'Y' THEN
ln_tax_category_id := nvl(pn_tax_category_id
,rec_tax_det_factor.default_tax_category_id);

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'ln_tax_category_id:' || ln_tax_category_id);
END IF;
IF nvl(ln_tax_category_id
,0) > 0 THEN

/* Bug#24838796/GST, dejiang.liu/20161012, use sequence number instead


line number in tax categories. */
ln_tax_line_num := 0;

FOR rec_tax_category_lines IN c_tax_category_lines(ln_tax_category_id) LOOP


/* Bug#24838796/GST, dejiang.liu/20161012, use sequence number instead
line number in tax categories. */
--ln_tax_line_num :=
rec_tax_category_lines.line_number;
ln_tax_line_num := ln_tax_line_num + 1;

ln_tax_rate_id := rec_tax_category_lines.tax_rate_id;
ln_regime_id := rec_tax_category_lines.regime_id;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'tax line_number:' || rec_tax_category_lines.line_number
|| 'tax_rate_id:' ||
rec_tax_category_lines.tax_rate_id || 'regime_id:' ||
rec_tax_category_lines.regime_id);
END IF;
jai_tax_determination_pkg.derive_tax_point_basis(pn_application_id =>
rec_tax_det_factor.application_id
,pv_entity_code =>
rec_tax_det_factor.entity_code
,pv_event_class_code =>
rec_tax_det_factor.event_class_code
--Added by Junjian
,pv_event_type_code =>
rec_tax_det_factor.event_type_code
,pv_tax_type_tpb =>
rec_tax_category_lines.tax_point_basis
,pv_tax_line_tpb =>
lv_tax_line_tpb);

jai_tax_determination_pkg.derive_tax_point_date(pn_application_id =>
rec_tax_det_factor.application_id
,pv_entity_code =>
rec_tax_det_factor.entity_code
,pv_event_class_code =>
rec_tax_det_factor.event_class_code
,pn_trx_id =>
rec_tax_det_factor.trx_id
,pn_trx_line_id =>
rec_tax_det_factor.trx_line_id
,pn_trx_loc_line_id =>
rec_tax_det_factor.trx_loc_line_id
,pd_trx_date =>
rec_tax_det_factor.trx_date
-- added by zhiwei.xin
for bug#18619014
,pv_tax_point_basis =>
lv_tax_line_tpb
,pd_tax_point_date =>
ld_tax_point_date);

rec_jai_tax_line := NULL;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'prepare attributes from det facotrs');

END IF;
rec_jai_tax_line.org_id := ln_org_id;
rec_jai_tax_line.organization_id := ln_organization_id;
rec_jai_tax_line.location_id := ln_location_id;
rec_jai_tax_line.det_factor_id :=
rec_tax_det_factor.det_factor_id;
rec_jai_tax_line.application_id :=
rec_tax_det_factor.application_id;
rec_jai_tax_line.entity_code :=
rec_tax_det_factor.entity_code;
rec_jai_tax_line.event_class_code :=
rec_tax_det_factor.event_class_code;
rec_jai_tax_line.event_type_code :=
rec_tax_det_factor.event_type_code;
rec_jai_tax_line.tax_event_class_code :=
rec_tax_det_factor.tax_event_class_code;
rec_jai_tax_line.tax_event_type_code :=
rec_tax_det_factor.tax_event_type_code;
rec_jai_tax_line.trx_id :=
rec_tax_det_factor.trx_id;
rec_jai_tax_line.trx_line_id :=
rec_tax_det_factor.trx_line_id;
rec_jai_tax_line.trx_loc_line_id :=
rec_tax_det_factor.trx_loc_line_id;
rec_jai_tax_line.trx_level_type :=
rec_tax_det_factor.trx_level_type;
rec_jai_tax_line.trx_date :=
rec_tax_det_factor.trx_date;
rec_jai_tax_line.legal_entity_id :=
rec_tax_det_factor.legal_entity_id;
rec_jai_tax_line.trx_number :=
rec_tax_det_factor.trx_number;
rec_jai_tax_line.trx_type :=
rec_tax_det_factor.trx_type;
rec_jai_tax_line.trx_line_number :=
rec_tax_det_factor.trx_line_number;
rec_jai_tax_line.party_id := ln_party_id;
rec_jai_tax_line.party_site_id := ln_party_site_id;
rec_jai_tax_line.party_type :=
rec_tax_det_factor.party_type;
rec_jai_tax_line.trx_currency_code :=
rec_tax_det_factor.trx_currency_code;
rec_jai_tax_line.currency_conversion_date :=
rec_tax_det_factor.currency_conversion_date;
rec_jai_tax_line.currency_conversion_rate :=
rec_tax_det_factor.currency_conversion_rate;
rec_jai_tax_line.currency_conversion_type :=
rec_tax_det_factor.currency_conversion_type;
rec_jai_tax_line.tax_currency_code :=
rec_tax_det_factor.trx_currency_code;
rec_jai_tax_line.tax_currency_conversion_date :=
rec_tax_det_factor.currency_conversion_date;
rec_jai_tax_line.tax_currency_conversion_type :=
rec_tax_det_factor.currency_conversion_type;
rec_jai_tax_line.tax_currency_conversion_rate :=
rec_tax_det_factor.currency_conversion_rate;

rec_jai_tax_line.item_id :=
rec_tax_det_factor.item_id;
rec_jai_tax_line.trx_uom :=
rec_tax_det_factor.trx_uom_code;
rec_jai_tax_line.unit_price :=
rec_tax_det_factor.unit_price;
rec_jai_tax_line.trx_line_quantity :=
rec_tax_det_factor.trx_line_quantity;
rec_jai_tax_line.line_amt :=
rec_tax_det_factor.line_amt;
rec_jai_tax_line.ref_doc_application_id :=
rec_tax_det_factor.ref_doc_application_id;
rec_jai_tax_line.ref_doc_entity_code :=
rec_tax_det_factor.ref_doc_entity_code;
rec_jai_tax_line.ref_doc_event_class_code :=
rec_tax_det_factor.ref_doc_event_class_code;
rec_jai_tax_line.ref_doc_trx_id :=
rec_tax_det_factor.ref_doc_trx_id;
rec_jai_tax_line.ref_doc_line_id :=
rec_tax_det_factor.ref_doc_line_id;
rec_jai_tax_line.ref_doc_loc_line_id :=
rec_tax_det_factor.ref_doc_loc_line_id;
rec_jai_tax_line.ref_doc_trx_type :=
rec_tax_det_factor.ref_doc_trx_type;
rec_jai_tax_line.ref_doc_trx_level_type :=
rec_tax_det_factor.ref_doc_trx_level_type;
rec_jai_tax_line.applied_to_application_id :=
rec_tax_det_factor.applied_to_application_id;
rec_jai_tax_line.applied_to_entity_code :=
rec_tax_det_factor.applied_to_entity_code;
rec_jai_tax_line.applied_to_event_class_code :=
rec_tax_det_factor.applied_to_event_class_code;
rec_jai_tax_line.applied_to_trx_id :=
rec_tax_det_factor.applied_to_trx_id;
rec_jai_tax_line.applied_to_trx_line_id :=
rec_tax_det_factor.applied_to_trx_line_id;
rec_jai_tax_line.applied_to_loc_line_id :=
rec_tax_det_factor.applied_to_loc_line_id;
rec_jai_tax_line.applied_to_trx_type :=
rec_tax_det_factor.applied_to_trx_type;
rec_jai_tax_line.applied_to_trx_level_type :=
rec_tax_det_factor.applied_to_trx_level_type;

rec_jai_tax_line.applied_from_application_id :=
rec_tax_det_factor.applied_from_application_id;
rec_jai_tax_line.applied_from_entity_code :=
rec_tax_det_factor.applied_from_entity_code;
rec_jai_tax_line.applied_from_event_class_code :=
rec_tax_det_factor.applied_from_event_class_code;
rec_jai_tax_line.applied_from_trx_id :=
rec_tax_det_factor.applied_from_trx_id;
rec_jai_tax_line.applied_from_trx_line_id :=
rec_tax_det_factor.applied_from_trx_line_id;
rec_jai_tax_line.applied_from_loc_line_id :=
rec_tax_det_factor.applied_from_loc_line_id;
rec_jai_tax_line.applied_from_trx_type :=
rec_tax_det_factor.applied_from_trx_type;
rec_jai_tax_line.applied_from_trx_level_type :=
rec_tax_det_factor.applied_from_trx_level_type;
rec_jai_tax_line.ledger_id := ln_ledger_id;
rec_jai_tax_line.functional_currency_code := lv_func_currency;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'prepare attributes from tax info');
END IF;
rec_jai_tax_line.tax_rate_id := ln_tax_rate_id;
rec_jai_tax_line.tax_rate_code :=
rec_tax_category_lines.tax_rate_code;
rec_jai_tax_line.tax_rate_type :=
rec_tax_category_lines.tax_rate_type;
rec_jai_tax_line.tax_status :=
rec_tax_category_lines.tax_status;
rec_jai_tax_line.recovery_percentage :=
rec_tax_category_lines.recovery_percentage;
rec_jai_tax_line.inclusive_flag :=
nvl(rec_tax_category_lines.inclusive_flag
,'N');
rec_jai_tax_line.tax_type_id :=
rec_tax_category_lines.tax_type_id;
rec_jai_tax_line.abatement_flag :=
nvl(rec_tax_category_lines.allow_abatement
,'N');
rec_jai_tax_line.update_vendor_on_transaction :=
nvl(rec_tax_category_lines.update_vendor_on_transaction
,'N');
rec_jai_tax_line.reporting_only_flag :=
nvl(rec_tax_category_lines.reporting_only_flag
,'N');
rec_jai_tax_line.offset_flag :=
rec_tax_category_lines.offset_flag;
rec_jai_tax_line.recoverable_flag :=
nvl(rec_tax_category_lines.recoverable_flag
,'N');
rec_jai_tax_line.self_assessed_flag :=
nvl(rec_tax_category_lines.self_assessed_flag
,'N');
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'prepare attributes from 2nd part tax info');
END IF;
rec_jai_tax_line.reverse_credit_on_shipment :=
rec_tax_category_lines.reverse_credit_on_shipment;
rec_jai_tax_line.credit_basis_self_assessed :=
rec_tax_category_lines.credit_basis_self_assessed;

IF REC_TAX_DET_FACTOR.ENTITY_CODE <> 'AP_INVOICES' THEN--CONDITION ADDED


BY MANI FOR BUG 27386717

rec_jai_tax_line.party_id := nvl(ln_tax_rate_vendor_id
,ln_party_id);
rec_jai_tax_line.party_site_id :=
nvl(ln_tax_rate_vendor_site_id
,ln_party_site_id);
rec_jai_tax_line.party_type := lv_party_type;

END IF;

rec_jai_tax_line.tax_point_basis := lv_tax_line_tpb;
rec_jai_tax_line.tax_point_date := ld_tax_point_date;
rec_jai_tax_line.tax_regime_id := ln_regime_id;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'prepare attributes from 3nd part tax info');
END IF;
rec_jai_tax_line.tax_regime_code := rec_tax_category_lines.regime_code;
rec_jai_tax_line.tax_regime_type := rec_tax_category_lines.regime_type;
rec_jai_tax_line.tax_line_num := ln_tax_line_num;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'prepare attributes from 4nd part tax info');
END IF;
rec_jai_tax_line.precedence_1 := rec_tax_category_lines.precedence_1;
rec_jai_tax_line.precedence_2 := rec_tax_category_lines.precedence_2;
rec_jai_tax_line.precedence_3 := rec_tax_category_lines.precedence_3;
rec_jai_tax_line.precedence_4 := rec_tax_category_lines.precedence_4;
rec_jai_tax_line.precedence_5 := rec_tax_category_lines.precedence_5;
rec_jai_tax_line.precedence_6 := rec_tax_category_lines.precedence_6;
rec_jai_tax_line.precedence_7 := rec_tax_category_lines.precedence_7;
rec_jai_tax_line.precedence_8 := rec_tax_category_lines.precedence_8;
rec_jai_tax_line.precedence_9 := rec_tax_category_lines.precedence_9;
rec_jai_tax_line.precedence_10 := rec_tax_category_lines.precedence_10;
rec_jai_tax_line.precedence_11 := rec_tax_category_lines.precedence_11;
rec_jai_tax_line.precedence_12 := rec_tax_category_lines.precedence_12;
rec_jai_tax_line.precedence_13 := rec_tax_category_lines.precedence_13;
rec_jai_tax_line.precedence_14 := rec_tax_category_lines.precedence_14;
rec_jai_tax_line.precedence_15 := rec_tax_category_lines.precedence_15;
rec_jai_tax_line.precedence_16 := rec_tax_category_lines.precedence_16;
rec_jai_tax_line.precedence_17 := rec_tax_category_lines.precedence_17;
rec_jai_tax_line.precedence_18 := rec_tax_category_lines.precedence_18;
rec_jai_tax_line.precedence_19 := rec_tax_category_lines.precedence_19;
rec_jai_tax_line.precedence_20 := rec_tax_category_lines.precedence_20;

--populate 1st party related attributes


rec_1st_party_reg := NULL;
/*start additions for bug#26399170*/
ln_party_reg_id := NULL;
ln_party_reg_id := get_fp_matched_id(p_organization_id =>
ln_organization_id
,p_location_id => ln_location_id
,p_org_id => ln_org_id
,p_regime_type => 'T'
,p_regime_id => ln_regime_id);

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'ln_party_Reg_id retrieved is ' || ln_party_reg_id);
END IF;
/*end bug#26399170*/
OPEN c_1st_party_reg(cn_organization_id => ln_organization_id
,cn_org_id => ln_org_id
,cn_location_id => ln_location_id
,cn_regime_id => ln_regime_id
,cn_party_reg_id => ln_party_reg_id);
FETCH c_1st_party_reg
INTO rec_1st_party_reg;
CLOSE c_1st_party_reg;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'prepare attributes from 1st party reg');
END IF;
rec_jai_tax_line.first_party_reg_id :=
rec_1st_party_reg.first_party_reg_id;
rec_jai_tax_line.first_party_primary_reg_name :=
rec_1st_party_reg.first_party_primary_reg_name;
rec_jai_tax_line.first_party_primary_reg_num :=
rec_1st_party_reg.first_party_primary_reg_num;
rec_jai_tax_line.first_party_secondary_reg_name :=
rec_1st_party_reg.first_party_secondary_reg_name;
rec_jai_tax_line.first_party_secondary_reg_num :=
rec_1st_party_reg.first_party_secondary_reg_num;
/* rec_jai_tax_line.num_of_return_days :=
rec_1st_party_reg.num_of_return_days ;
rec_jai_tax_line.create_validated_inv_on_intf :=
rec_1st_party_reg.create_validated_inv_on_intf ;
rec_jai_tax_line.copy_rcv_taxes_to_shipment :=
rec_1st_party_reg.copy_rcv_taxes_to_shipment ;
rec_jai_tax_line.sub_inventory_code :=
rec_1st_party_reg.sub_inventory_code ;*/
rec_jai_tax_line.tax_authority_id :=
rec_1st_party_reg.tax_authority_id;
rec_jai_tax_line.tax_authority_site_id :=
rec_1st_party_reg.tax_authority_site_id;

--populate 3rd party related attributes


rec_3rd_party_reg := NULL;
OPEN c_3rd_party_reg(cv_party_type => rec_tax_det_factor.party_type
,cn_party_id => rec_tax_det_factor.party_id
,cn_party_site_id => rec_tax_det_factor.party_site_id
,cn_regime_id => ln_regime_id);
FETCH c_3rd_party_reg
INTO rec_3rd_party_reg;
CLOSE c_3rd_party_reg;
--Added by Wenqiong 0722 begin
IF nvl(rec_3rd_party_reg.third_party_reg_id
,0) = 0 THEN
OPEN c_3rd_party_reg(cv_party_type => rec_tax_det_factor.party_type
,cn_party_id => rec_tax_det_factor.party_id
,cn_party_site_id => NULL
,cn_regime_id => ln_regime_id);
FETCH c_3rd_party_reg
INTO rec_3rd_party_reg;
CLOSE c_3rd_party_reg;
END IF;
--Added by Wenqiong 0722 end
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'prepare attributes from 3rd party reg for regime:' ||
ln_regime_id);
END IF;
rec_jai_tax_line.third_party_reg_id :=
rec_3rd_party_reg.third_party_reg_id;
rec_jai_tax_line.third_party_primary_reg_name :=
rec_3rd_party_reg.third_party_primary_reg_name;
rec_jai_tax_line.third_party_primary_reg_num :=
rec_3rd_party_reg.third_party_primary_reg_num;
rec_jai_tax_line.third_party_secondary_reg_name :=
rec_3rd_party_reg.third_party_secondary_reg_name;
rec_jai_tax_line.third_party_secondary_reg_num :=
rec_3rd_party_reg.third_party_secondary_reg_num;

/* Bug#28213561, dejiang.liu/20180628. Set default assessable value. */


IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Set default assessable value for open interface
import:' || l_default_av);
END IF;
rec_jai_tax_line.user_entered_av := l_default_av;

--26381084,1102
OPEN c_source_tax_info(nvl(rec_jai_tax_line.applied_to_application_id

,nvl(rec_jai_tax_line.applied_from_application_id
,rec_jai_tax_line.ref_doc_application_id))
,nvl(rec_jai_tax_line.applied_to_entity_code
,nvl(rec_jai_tax_line.applied_from_entity_code
,rec_jai_tax_line.ref_doc_entity_code))
,nvl(rec_jai_tax_line.applied_to_event_class_code

,nvl(rec_jai_tax_line.applied_from_event_class_code

,rec_jai_tax_line.ref_doc_event_class_code))
,nvl(rec_jai_tax_line.applied_to_trx_id
,nvl(rec_jai_tax_line.applied_from_trx_id
,rec_jai_tax_line.ref_doc_trx_id))
,nvl(rec_jai_tax_line.applied_to_trx_line_id
,nvl(rec_jai_tax_line.applied_from_trx_line_id
,rec_jai_tax_line.ref_doc_line_id))
,nvl(rec_jai_tax_line.applied_to_loc_line_id
,nvl(rec_jai_tax_line.applied_from_loc_line_id
,rec_jai_tax_line.ref_doc_loc_line_id))
,nvl(rec_jai_tax_line.applied_to_trx_level_type

,nvl(rec_jai_tax_line.applied_from_trx_level_type
,rec_jai_tax_line.ref_doc_trx_level_type))
,nvl(rec_jai_tax_line.applied_to_trx_type
,nvl(rec_jai_tax_line.applied_from_trx_type
,rec_jai_tax_line.ref_doc_trx_type)));
FETCH c_source_tax_info
INTO r_source_tax_info;
CLOSE c_source_tax_info;

jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'1 after opening c_source_tax_info
price list id ' ||

r_source_tax_info.assessable_price_list_id);
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'1 after opening c_source_tax_info
user_entered_av ' ||
r_source_tax_info.user_entered_av);
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'1 after opening c_source_tax_info
line_assessable_value ' ||

r_source_tax_info.line_assessable_value);

rec_jai_tax_line.assessable_price_list_id :=
nvl(r_source_tax_info.assessable_price_list_id

,rec_3rd_party_reg.assessable_price_list_id); --26381084
jai_cmn_utils_pkg.write_fnd_log_msg('JAI_1102'
,' rec_jai_tax_line.trx_uom ' ||
rec_jai_tax_line.trx_uom);
jai_cmn_utils_pkg.write_fnd_log_msg('JAI_1102'
,' r_source_tax_info.trx_uom '
|| r_source_tax_info.trx_uom);
jai_cmn_utils_pkg.write_fnd_log_msg('JAI_1102'
,'
r_source_tax_info.tax_rate_uom ' || r_source_tax_info.tax_rate_uom);
ln_assessable_conv_rate := 1;
IF rec_jai_tax_line.trx_uom <> r_source_tax_info.trx_uom THEN
jai_cmn_utils_pkg.write_fnd_log_msg('JAI_1102'
,' inside trx uom not the source
UOM');
inv_convert.inv_um_conversion(rec_jai_tax_line.trx_uom
,r_source_tax_info.trx_uom
,rec_jai_tax_line.item_id
,ln_assessable_conv_rate);
jai_cmn_utils_pkg.write_fnd_log_msg('JAI_1102'
,' ln_assessable_conv_rate after
conversion ' ||
ln_assessable_conv_rate);

IF ln_assessable_conv_rate < 0 THEN

jai_cmn_utils_pkg.write_fnd_log_msg('JAI_1102'
,'UOM conversion is not defined
for tax line #Sl No' ||
rec_jai_tax_line.tax_line_num);
END IF;
END IF;
-------end additions for bug#26381084
jai_cmn_utils_pkg.write_fnd_log_msg('JAI_1102'
,' before applying conversion rate '
||
r_source_tax_info.user_entered_av);
/* Bug#28213561, dejiang.liu/20180628. Skip if default AV not null. */
/*rec_jai_tax_line.user_entered_av := r_source_tax_info.user_entered_av *
nvl(ln_assessable_conv_rate
,1);
*/
rec_jai_tax_line.user_entered_av := nvl(rec_jai_tax_line.user_entered_av
,r_source_tax_info.user_entered_av
*
nvl(ln_assessable_conv_rate
,1));

jai_cmn_utils_pkg.write_fnd_log_msg('JAI_1102'
,' after applying conversion rate '
|| r_source_tax_info.user_entered_av);
rec_jai_tax_line.line_assessable_value :=
r_source_tax_info.line_assessable_value *
nvl(ln_assessable_conv_rate
,1);
jai_cmn_utils_pkg.write_fnd_log_msg('JAI_1102'
,'
rec_jai_tax_line.line_assessable_value ' ||

rec_jai_tax_line.line_assessable_value);
OPEN c_3rd_party_reporting(rec_3rd_party_reg.third_party_reg_id
,ln_regime_id);
FETCH c_3rd_party_reporting
INTO rec_jai_tax_line.reporting_type_id
,rec_jai_tax_line.reporting_code;
CLOSE c_3rd_party_reporting;

get_rounding_rules(pn_org_id => ln_org_id


,pn_organization_id => ln_organization_id
,pn_location_id => ln_location_id
,pn_regime_id => ln_regime_id
,pv_tax_rounded_to =>
rec_jai_tax_line.tax_rounded_to
,pv_tax_rounding_factor =>
rec_jai_tax_line.tax_rounding_factor
,pv_taxable_rounded_to =>
rec_jai_tax_line.taxable_rounded_to
,pv_taxable_rounding_factor =>
rec_jai_tax_line.taxable_rounding_factor
,pv_qty_rounding_rule =>
rec_jai_tax_line.quantity_rounded_to
,pv_qty_rounding_factor =>
rec_jai_tax_line.quantity_rounding_factor
,pv_process_status => pv_process_status);

ln_tax_rate_percentage := NULL;
lv_tax_rate_uom := NULL;
ln_tax_rate_uom_rate := NULL;
lv_tax_rate_abatement_type := NULL;
ln_tax_abatement_percentage := NULL;
lv_tax_rate_classification := NULL;
ln_standard_rate := NULL;
lv_form_type := NULL;

OPEN c_tax_rate_percentage(ln_tax_rate_id
,ld_tax_point_date);
FETCH c_tax_rate_percentage
INTO ln_tax_rate_percentage;
CLOSE c_tax_rate_percentage;

OPEN c_tax_rate_uom(ln_tax_rate_id
,ld_tax_point_date);
FETCH c_tax_rate_uom
INTO lv_tax_rate_uom
,ln_tax_rate_uom_rate;
CLOSE c_tax_rate_uom;

OPEN c_tax_rate_abatement(ln_tax_rate_id
,ld_tax_point_date);
FETCH c_tax_rate_abatement
INTO lv_tax_rate_abatement_type
,ln_tax_abatement_percentage;
CLOSE c_tax_rate_abatement;

OPEN c_tax_rate_exception(ln_tax_rate_id
,ld_tax_point_date);
FETCH c_tax_rate_exception
INTO lv_tax_rate_classification
,ln_standard_rate
,lv_form_type;
CLOSE c_tax_rate_exception;

--1102

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'prepare attributes from tax rate details');
END IF;
rec_jai_tax_line.tax_rate_percentage := ln_tax_rate_percentage;
rec_jai_tax_line.tax_rate_uom := lv_tax_rate_uom;
rec_jai_tax_line.tax_rate_uom_rate := ln_tax_rate_uom_rate;
rec_jai_tax_line.tax_rate_abatement_type := lv_tax_rate_abatement_type;
rec_jai_tax_line.abatement_percentage := ln_tax_abatement_percentage;
rec_jai_tax_line.tax_rate_classification := lv_tax_rate_classification;
rec_jai_tax_line.standard_rate := ln_standard_rate;
rec_jai_tax_line.form_type := lv_form_type;

/*Added by Qinglei for Interorg/ISO accounting bug#19329120 begin*/


IF rec_tax_det_factor.application_id = 707
AND rec_tax_det_factor.entity_code = 'SALES_ORDER_ISSUE' THEN
lv_iso_flag := jai_om_tax_det_pkg.get_iso_flag(p_oe_line_id =>
rec_tax_det_factor.ref_doc_line_id);
--trx_line_id);Aelluru for IRISO
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Internal Sales Order flag: ' || lv_iso_flag);
END IF;
IF lv_iso_flag = 'Y' THEN
rec_jai_tax_line.tax_point_basis := 'DELIVERY';
END IF;
END IF;
IF rec_tax_det_factor.application_id = 707
AND rec_tax_det_factor.entity_code = 'MTL_TRANSACTION'
AND rec_tax_det_factor.event_class_code = 'DIR_INTERORG_SHIP' THEN

rec_jai_tax_line.tax_point_basis := 'DELIVERY';
END IF;
/*Added by Qinglei for Interorg/ISO accounting bug#19329120 end*/

p_tax_lines_tbl(ln_tax_line_num) := rec_jai_tax_line;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'ln_tax_line_num:' || ln_tax_line_num || ' count of
table :' || p_tax_lines_tbl.count);
END IF;
END LOOP;
ELSE
--non COPY case and no tax category input
pv_process_status := FND_API.G_RET_STS_UNEXP_ERROR;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Error: Its not copy case but without tax category
info.');
END IF;
RETURN;
END IF;
ELSIF pv_amt_factor_updated = 'Y' THEN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'Prepare tax lines tbl for amt factor updated
case.');
END IF;
FOR rec_tax_lines_for_update IN c_tax_lines_for_update LOOP

ln_tax_line_num :=
rec_tax_lines_for_update.tax_line_num;
rec_jai_tax_line := NULL;
rec_jai_tax_line.det_factor_id := pn_det_factor_id;
rec_jai_tax_line.tax_line_id :=
rec_tax_lines_for_update.tax_line_id; /*AELLURU 27666686*/
/* Bug#26799523, dejiang.liu/20180108. Modify to synchronize location info
default from factor. */
/*
rec_jai_tax_line.org_id :=
rec_tax_lines_for_update.org_id;
rec_jai_tax_line.organization_id :=
rec_tax_lines_for_update.organization_id;
rec_jai_tax_line.location_id :=
rec_tax_lines_for_update.location_id;
*/
rec_jai_tax_line.org_id := nvl(ln_org_id
,rec_tax_lines_for_update.org_id);
rec_jai_tax_line.organization_id := nvl(ln_organization_id

,rec_tax_lines_for_update.organization_id);
rec_jai_tax_line.location_id := nvl(ln_location_id

,rec_tax_lines_for_update.location_id);

rec_jai_tax_line.application_id :=
rec_tax_det_factor.application_id;
rec_jai_tax_line.entity_code :=
rec_tax_det_factor.entity_code;
rec_jai_tax_line.event_class_code :=
rec_tax_det_factor.event_class_code;
rec_jai_tax_line.event_type_code :=
rec_tax_det_factor.event_type_code;
rec_jai_tax_line.tax_event_class_code :=
rec_tax_det_factor.tax_event_class_code;
rec_jai_tax_line.tax_event_type_code :=
rec_tax_det_factor.tax_event_type_code;
rec_jai_tax_line.ledger_id :=
rec_tax_lines_for_update.ledger_id;
rec_jai_tax_line.trx_id :=
rec_tax_lines_for_update.trx_id;
rec_jai_tax_line.trx_line_id :=
rec_tax_lines_for_update.trx_line_id;
rec_jai_tax_line.trx_loc_line_id :=
rec_tax_lines_for_update.trx_loc_line_id;
rec_jai_tax_line.trx_level_type :=
rec_tax_lines_for_update.trx_level_type;
rec_jai_tax_line.trx_number :=
rec_tax_lines_for_update.trx_number;
rec_jai_tax_line.trx_line_number :=
rec_tax_lines_for_update.trx_line_number;
rec_jai_tax_line.trx_type :=
rec_tax_lines_for_update.trx_type;
rec_jai_tax_line.trx_date :=
rec_tax_lines_for_update.trx_date;
rec_jai_tax_line.legal_entity_id :=
rec_tax_lines_for_update.legal_entity_id;
rec_jai_tax_line.frozen_flag :=
rec_tax_lines_for_update.frozen_flag;
rec_jai_tax_line.party_type :=
rec_tax_lines_for_update.party_type;
rec_jai_tax_line.party_id :=
rec_tax_lines_for_update.party_id;
rec_jai_tax_line.party_site_id :=
rec_tax_lines_for_update.party_site_id;
rec_jai_tax_line.item_id :=
rec_tax_lines_for_update.item_id;
rec_jai_tax_line.functional_currency_code :=
rec_tax_lines_for_update.functional_currency_code;
rec_jai_tax_line.tax_regime_id :=
rec_tax_lines_for_update.tax_regime_id;
rec_jai_tax_line.tax_regime_code :=
rec_tax_lines_for_update.tax_regime_code;
rec_jai_tax_line.tax_regime_type :=
rec_tax_lines_for_update.tax_regime_type;
rec_jai_tax_line.first_party_reg_id :=
rec_tax_lines_for_update.first_party_reg_id;
rec_jai_tax_line.first_party_primary_reg_name :=
rec_tax_lines_for_update.first_party_primary_reg_name;
rec_jai_tax_line.first_party_primary_reg_num :=
rec_tax_lines_for_update.first_party_primary_reg_num;
rec_jai_tax_line.first_party_secondary_reg_name :=
rec_tax_lines_for_update.first_party_secondary_reg_name;
rec_jai_tax_line.first_party_secondary_reg_num :=
rec_tax_lines_for_update.first_party_secondary_reg_num;
rec_jai_tax_line.num_of_return_days :=
rec_tax_lines_for_update.num_of_return_days;
rec_jai_tax_line.reporting_only_flag :=
rec_tax_lines_for_update.reporting_only_flag;
rec_jai_tax_line.tax_authority_id :=
rec_tax_lines_for_update.tax_authority_id;
rec_jai_tax_line.tax_authority_site_id :=
rec_tax_lines_for_update.tax_authority_site_id;
rec_jai_tax_line.third_party_reg_id :=
rec_tax_lines_for_update.third_party_reg_id;
rec_jai_tax_line.third_party_primary_reg_name :=
rec_tax_lines_for_update.third_party_primary_reg_name;
rec_jai_tax_line.third_party_primary_reg_num :=
rec_tax_lines_for_update.third_party_primary_reg_num;
rec_jai_tax_line.third_party_secondary_reg_name :=
rec_tax_lines_for_update.third_party_secondary_reg_name;
rec_jai_tax_line.third_party_secondary_reg_num :=
rec_tax_lines_for_update.third_party_secondary_reg_num;
rec_jai_tax_line.assessable_price_list_id :=
rec_tax_lines_for_update.assessable_price_list_id;
rec_jai_tax_line.tax_type_id :=
rec_tax_lines_for_update.tax_type_id;
rec_jai_tax_line.abatement_flag :=
rec_tax_lines_for_update.abatement_flag;
rec_jai_tax_line.update_vendor_on_transaction :=
rec_tax_lines_for_update.update_vendor_on_transaction;
rec_jai_tax_line.reporting_only_flag :=
rec_tax_lines_for_update.reporting_only_flag;
rec_jai_tax_line.offset_flag :=
rec_tax_lines_for_update.offset_flag;
rec_jai_tax_line.recoverable_flag :=
rec_tax_lines_for_update.recoverable_flag;
rec_jai_tax_line.self_assessed_flag :=
rec_tax_lines_for_update.self_assessed_flag;
rec_jai_tax_line.reverse_credit_on_shipment :=
rec_tax_lines_for_update.reverse_credit_on_shipment;
rec_jai_tax_line.credit_basis_self_assessed :=
rec_tax_lines_for_update.credit_basis_self_assessed;
rec_jai_tax_line.tax_point_basis :=
rec_tax_lines_for_update.tax_point_basis;
rec_jai_tax_line.tax_point_date :=
rec_tax_lines_for_update.tax_point_date;
rec_jai_tax_line.tax_rate_id :=
rec_tax_lines_for_update.tax_rate_id;
rec_jai_tax_line.tax_rate_code :=
rec_tax_lines_for_update.tax_rate_code;
rec_jai_tax_line.tax_rate_type :=
rec_tax_lines_for_update.tax_rate_type;
rec_jai_tax_line.tax_status :=
rec_tax_lines_for_update.tax_status;
rec_jai_tax_line.recovery_percentage :=
rec_tax_lines_for_update.recovery_percentage;
rec_jai_tax_line.inclusive_flag :=
rec_tax_lines_for_update.inclusive_flag;
rec_jai_tax_line.tax_rate_percentage :=
rec_tax_lines_for_update.tax_rate_percentage;
rec_jai_tax_line.tax_rate_uom :=
rec_tax_lines_for_update.tax_rate_uom;
rec_jai_tax_line.tax_rate_uom_rate :=
rec_tax_lines_for_update.tax_rate_uom_rate;
rec_jai_tax_line.tax_rate_abatement_type :=
rec_tax_lines_for_update.tax_rate_abatement_type;
rec_jai_tax_line.abatement_percentage :=
rec_tax_lines_for_update.abatement_percentage;
rec_jai_tax_line.tax_rate_classification :=
rec_tax_lines_for_update.tax_rate_classification;
rec_jai_tax_line.standard_rate :=
rec_tax_lines_for_update.standard_rate;
rec_jai_tax_line.form_type :=
rec_tax_lines_for_update.form_type;
rec_jai_tax_line.actual_tax_rate :=
rec_tax_lines_for_update.actual_tax_rate;
rec_jai_tax_line.rounding_level :=
rec_tax_lines_for_update.rounding_level;
rec_jai_tax_line.tax_rounded_to :=
rec_tax_lines_for_update.tax_rounded_to;
rec_jai_tax_line.tax_rounding_factor :=
rec_tax_lines_for_update.tax_rounding_factor;
rec_jai_tax_line.taxable_rounded_to :=
rec_tax_lines_for_update.taxable_rounded_to;
rec_jai_tax_line.taxable_rounding_factor :=
rec_tax_lines_for_update.taxable_rounding_factor;
rec_jai_tax_line.quantity_rounded_to :=
rec_tax_lines_for_update.quantity_rounded_to;
rec_jai_tax_line.quantity_rounding_factor :=
rec_tax_lines_for_update.quantity_rounding_factor;
rec_jai_tax_line.unround_tax_amt_fun_curr :=
rec_tax_lines_for_update.unround_tax_amt_fun_curr;
rec_jai_tax_line.manual_overridden_flag :=
rec_tax_lines_for_update.manual_overridden_flag;
rec_jai_tax_line.manual_tax_line_flag :=
rec_tax_lines_for_update.manual_tax_line_flag;
rec_jai_tax_line.copied_from_other_doc_flag :=
rec_tax_lines_for_update.copied_from_other_doc_flag;

rec_jai_tax_line.tax_line_num :=
rec_tax_lines_for_update.tax_line_num;
rec_jai_tax_line.precedence_1 :=
rec_tax_lines_for_update.precedence_1;
rec_jai_tax_line.precedence_2 :=
rec_tax_lines_for_update.precedence_2;
rec_jai_tax_line.precedence_3 :=
rec_tax_lines_for_update.precedence_3;
rec_jai_tax_line.precedence_4 :=
rec_tax_lines_for_update.precedence_4;
rec_jai_tax_line.precedence_5 :=
rec_tax_lines_for_update.precedence_5;
rec_jai_tax_line.precedence_6 :=
rec_tax_lines_for_update.precedence_6;
rec_jai_tax_line.precedence_7 :=
rec_tax_lines_for_update.precedence_7;
rec_jai_tax_line.precedence_8 :=
rec_tax_lines_for_update.precedence_8;
rec_jai_tax_line.precedence_9 :=
rec_tax_lines_for_update.precedence_9;
rec_jai_tax_line.precedence_10 :=
rec_tax_lines_for_update.precedence_10;
rec_jai_tax_line.precedence_11 :=
rec_tax_lines_for_update.precedence_11;
rec_jai_tax_line.precedence_12 :=
rec_tax_lines_for_update.precedence_12;
rec_jai_tax_line.precedence_13 :=
rec_tax_lines_for_update.precedence_13;
rec_jai_tax_line.precedence_14 :=
rec_tax_lines_for_update.precedence_14;
rec_jai_tax_line.precedence_15 :=
rec_tax_lines_for_update.precedence_15;
rec_jai_tax_line.precedence_16 :=
rec_tax_lines_for_update.precedence_16;
rec_jai_tax_line.precedence_17 :=
rec_tax_lines_for_update.precedence_17;
rec_jai_tax_line.precedence_18 :=
rec_tax_lines_for_update.precedence_18;
rec_jai_tax_line.precedence_19 :=
rec_tax_lines_for_update.precedence_19;
rec_jai_tax_line.precedence_20 :=
rec_tax_lines_for_update.precedence_20;
rec_jai_tax_line.ref_doc_application_id :=
rec_tax_lines_for_update.ref_doc_application_id;
rec_jai_tax_line.ref_doc_entity_code :=
rec_tax_lines_for_update.ref_doc_entity_code;
rec_jai_tax_line.ref_doc_event_class_code :=
rec_tax_lines_for_update.ref_doc_event_class_code;
rec_jai_tax_line.ref_doc_trx_id :=
rec_tax_lines_for_update.ref_doc_trx_id;
rec_jai_tax_line.ref_doc_trx_type :=
rec_tax_lines_for_update.ref_doc_trx_type;
rec_jai_tax_line.ref_doc_line_id :=
rec_tax_lines_for_update.ref_doc_line_id;
rec_jai_tax_line.ref_doc_loc_line_id :=
rec_tax_lines_for_update.ref_doc_loc_line_id;
rec_jai_tax_line.ref_doc_trx_level_type :=
rec_tax_lines_for_update.ref_doc_trx_level_type;
rec_jai_tax_line.applied_from_application_id :=
rec_tax_lines_for_update.applied_from_application_id;
rec_jai_tax_line.applied_from_entity_code :=
rec_tax_lines_for_update.applied_from_entity_code;
rec_jai_tax_line.applied_from_event_class_code :=
rec_tax_lines_for_update.applied_from_event_class_code;
rec_jai_tax_line.applied_from_trx_id :=
rec_tax_lines_for_update.applied_from_trx_id;
rec_jai_tax_line.applied_from_trx_line_id :=
rec_tax_lines_for_update.applied_from_trx_line_id;
rec_jai_tax_line.applied_from_trx_type :=
rec_tax_lines_for_update.applied_from_trx_type;
rec_jai_tax_line.applied_from_loc_line_id :=
rec_tax_lines_for_update.applied_from_loc_line_id;
rec_jai_tax_line.applied_from_trx_level_type :=
rec_tax_lines_for_update.applied_from_trx_level_type;
rec_jai_tax_line.applied_to_application_id :=
rec_tax_lines_for_update.applied_to_application_id;
rec_jai_tax_line.applied_to_entity_code :=
rec_tax_lines_for_update.applied_to_entity_code;
rec_jai_tax_line.applied_to_event_class_code :=
rec_tax_lines_for_update.applied_to_event_class_code;
rec_jai_tax_line.applied_to_trx_id :=
rec_tax_lines_for_update.applied_to_trx_id;
rec_jai_tax_line.applied_to_trx_line_id :=
rec_tax_lines_for_update.applied_to_trx_line_id;
rec_jai_tax_line.applied_to_trx_type :=
rec_tax_lines_for_update.applied_to_trx_type;
rec_jai_tax_line.applied_to_loc_line_id :=
rec_tax_lines_for_update.applied_to_loc_line_id;
rec_jai_tax_line.applied_to_trx_level_type :=
rec_tax_lines_for_update.applied_to_trx_level_type;
rec_jai_tax_line.reporting_type_id :=
rec_tax_lines_for_update.reporting_type_id;
rec_jai_tax_line.reporting_code :=
rec_tax_lines_for_update.reporting_code;
rec_jai_tax_line.tax_invoice_date :=
rec_tax_lines_for_update.tax_invoice_date;
rec_jai_tax_line.tax_invoice_num :=
rec_tax_lines_for_update.tax_invoice_num;

rec_jai_tax_line.unit_price := rec_tax_det_factor.unit_price;
rec_jai_tax_line.line_amt := rec_tax_det_factor.line_amt;
rec_jai_tax_line.trx_line_quantity :=
rec_tax_det_factor.trx_line_quantity;
rec_jai_tax_line.trx_currency_code :=
rec_tax_det_factor.trx_currency_code;
rec_jai_tax_line.currency_conversion_date :=
rec_tax_det_factor.currency_conversion_date;
rec_jai_tax_line.currency_conversion_type :=
rec_tax_det_factor.currency_conversion_type;
rec_jai_tax_line.currency_conversion_rate :=
rec_tax_det_factor.currency_conversion_rate;
-- added by zhiwei.xin for bug#21146625
rec_jai_tax_line.exemption_hdr_id :=
rec_tax_lines_for_update.exemption_hdr_id;
--AELLURU FOR INGERSOLL 27163960
rec_jai_tax_line.TRX_DATE :=
rec_tax_det_factor.TRX_DATE;
--AELLURU FOR INGERSOLL 27163960

/* Bug#23102735, dejiang.liu/20160118, modify to add assessable value pass


from interface to tax lines. */
rec_jai_tax_line.line_assessable_value :=
rec_tax_lines_for_update.line_assessable_value;
rec_jai_tax_line.user_entered_av :=
rec_tax_lines_for_update.user_entered_av;

jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'rec_jai_tax_line.tax_rate_type ' ||
rec_jai_tax_line.tax_rate_type);
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'before
rec_tax_lines_for_update.tax_currency_code ' ||

rec_tax_lines_for_update.tax_currency_code);
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'before
rec_jai_tax_line.tax_currency_code ' ||
rec_jai_tax_line.tax_currency_code);

IF rec_jai_tax_line.tax_rate_type <> 'ADHOC_AMOUNT'


THEN
--Keep the tax currency of adhoc tax.
/* Bug#21142100 start, Dejiang.Liu/150526.
Tax currency and rate will keep if tax currency already set in tax
lines.
*/
/*
rec_jai_tax_line.tax_currency_code
:=rec_tax_det_factor.trx_currency_code ;
rec_jai_tax_line.tax_currency_conversion_date
:=rec_tax_det_factor.currency_conversion_date ;
rec_jai_tax_line.tax_currency_conversion_type
:=rec_tax_det_factor.currency_conversion_type ;
rec_jai_tax_line.tax_currency_conversion_rate
:=rec_tax_det_factor.currency_conversion_rate ;
*/
--from here ADDED BY MANI FOR BUG 27258178
IF NVL(PV_CALL_FROM,'X') = 'RCPT_COPY_INT_DATA' THEN

rec_jai_tax_line.unit_price :=
rec_tax_lines_for_update.unit_price;
rec_jai_tax_line.line_amt :=
rec_tax_lines_for_update.line_amt;
rec_jai_tax_line.trx_line_quantity :=
rec_tax_lines_for_update.trx_line_quantity;
rec_jai_tax_line.trx_currency_code :=
rec_tax_lines_for_update.trx_currency_code;
rec_jai_tax_line.currency_conversion_date :=
rec_tax_lines_for_update.currency_conversion_date;
rec_jai_tax_line.currency_conversion_type :=
rec_tax_lines_for_update.currency_conversion_type;
rec_jai_tax_line.currency_conversion_rate :=
rec_tax_lines_for_update.currency_conversion_rate;

rec_jai_tax_line.tax_currency_code :=
rec_tax_lines_for_update.tax_currency_code;
rec_jai_tax_line.tax_currency_conversion_date :=
rec_tax_lines_for_update.tax_currency_conversion_date;
rec_jai_tax_line.tax_currency_conversion_type :=
rec_tax_lines_for_update.tax_currency_conversion_type;
rec_jai_tax_line.tax_currency_conversion_rate :=
rec_tax_lines_for_update.tax_currency_conversion_rate;
ELSE
--upto here ADDED BY MANI FOR BUG 27258178
IF rec_tax_lines_for_update.tax_currency_code IS NOT NULL
AND (rec_tax_lines_for_update.tax_currency_code <>
NVL(rec_tax_lines_for_update.trx_currency_code,'-ABC')
--AELLURU 27935648 FOR EXPORTS
OR (rec_tax_lines_for_update.ENTITY_CODE IN
('SALES_ORDER_ISSUE' ,'TRANSACTIONS','OE_ORDER_HEADERS')
--AND rec_tax_lines_for_update.TAX_CURRENCY_CONVERSION_TYPE
='User'
AND rec_tax_lines_for_update.tax_currency_code =
NVL(rec_tax_lines_for_update.trx_currency_code,'-ABC')
AND (rec_tax_lines_for_update.TAX_CURRENCY_CONVERSION_TYPE
<> NVL(rec_tax_lines_for_update.CURRENCY_CONVERSION_TYPE,'-ABC'))))
--AELLURU 27935648 EXPORTS
THEN
/*
AND rec_tax_lines_for_update.tax_currency_code =
rec_tax_det_factor.trx_currency_code
AND rec_jai_tax_line.tax_currency_conversion_date =
rec_tax_det_factor.currency_conversion_date THEN
--AELLURU FOR INGERSOLL 27163960
Added below condition becuase tax currency will be diff from TRX currency
only when there is manual change
in India Tax details Tax block So to handle if TRX_CURR_CODE =
TAX_CURR_CODE we will cascade the changes
from det factors to tax lines else we will keep as previous only
27400221 */

--AELLURU FOR 26989353


rec_jai_tax_line.tax_currency_code :=
rec_tax_lines_for_update.tax_currency_code;
rec_jai_tax_line.tax_currency_conversion_date :=
rec_tax_lines_for_update.tax_currency_conversion_date;
rec_jai_tax_line.tax_currency_conversion_type :=
rec_tax_lines_for_update.tax_currency_conversion_type;
rec_jai_tax_line.tax_currency_conversion_rate :=
rec_tax_lines_for_update.tax_currency_conversion_rate;

ELSE
rec_jai_tax_line.tax_currency_code :=
rec_tax_det_factor.trx_currency_code;
rec_jai_tax_line.tax_currency_conversion_date :=
rec_tax_det_factor.currency_conversion_date;
rec_jai_tax_line.tax_currency_conversion_type :=
rec_tax_det_factor.currency_conversion_type;
rec_jai_tax_line.tax_currency_conversion_rate :=
rec_tax_det_factor.currency_conversion_rate;
END IF;

END IF;
/* Bug#21142100 end. */
ELSE
/*26350476*/
--AELLURU INGERSOLL 27163960
-- IF TAX CURRENCY CODE IS DIFF IN CASE OF ADHOC CONSIDER THAT ONLY

IF rec_tax_lines_for_update.tax_currency_code IS NOT NULL


AND NVL(rec_tax_lines_for_update.tax_currency_code,'-ABC') <>
NVL(rec_tax_det_factor.trx_currency_code,'-ABC') THEN

rec_jai_tax_line.tax_currency_code :=
rec_tax_lines_for_update.tax_currency_code;
rec_jai_tax_line.tax_currency_conversion_date :=
rec_tax_lines_for_update.tax_currency_conversion_date;
rec_jai_tax_line.tax_currency_conversion_type :=
rec_tax_lines_for_update.tax_currency_conversion_type;
rec_jai_tax_line.tax_currency_conversion_rate :=
rec_tax_lines_for_update.tax_currency_conversion_rate;

ELSE
rec_jai_tax_line.tax_currency_code :=
rec_tax_det_factor.trx_currency_code;
rec_jai_tax_line.tax_currency_conversion_date :=
rec_tax_det_factor.currency_conversion_date;
rec_jai_tax_line.tax_currency_conversion_type :=
rec_tax_det_factor.currency_conversion_type;
rec_jai_tax_line.tax_currency_conversion_rate :=
rec_tax_det_factor.currency_conversion_rate;
END IF;

--AELLURU INGERSOLL 27163960

--AELLURU FOR DOING ABORTION IN CASE OF SPLIT LINES 26474759


IF rec_tax_det_factor.trx_line_quantity <> 0 /*Updated Quatity*/
AND rec_tax_lines_for_update.trx_line_quantity <> 0 /*old Quatity*/
AND rec_tax_det_factor.trx_line_quantity <>
rec_tax_lines_for_update.trx_line_quantity THEN
rec_jai_tax_line.unround_tax_amt_tax_curr :=
round(rec_tax_lines_for_update.unround_tax_amt_tax_curr *

rec_tax_det_factor.trx_line_quantity /

rec_tax_lines_for_update.trx_line_quantity
,2);
--27163960
ELSE
rec_jai_tax_line.unround_tax_amt_tax_curr :=
rec_tax_lines_for_update.unround_tax_amt_tax_curr;
--27163960
END IF;
--AELLURU FOR DOING ABORTION IN CASE OF SPLIT LINES 26474759
/*end additions for bug#26350476*/
END IF;

jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'after
rec_tax_lines_for_update.tax_currency_code ' ||

rec_tax_lines_for_update.tax_currency_code);
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'after
rec_jai_tax_line.tax_currency_code ' ||
rec_jai_tax_line.tax_currency_code);
p_tax_lines_tbl(ln_tax_line_num) := rec_jai_tax_line;
END LOOP;

ELSIF rec_tax_det_factor.tax_determination_basis =
jai_tax_determination_pkg.copy_basis THEN
--meanse it's copy cases
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'Prepare tax lines tbl for copy case.');
END IF;
IF rec_tax_det_factor.applied_from_application_id IS NOT NULL THEN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'Prepare tax lines tbl for copy from
applied from.');
END IF;
--copy from applied from document's taxes no matter the taxes modified or
not.
ln_src_application_id := rec_tax_det_factor.applied_from_application_id;
lv_src_entity_code := rec_tax_det_factor.applied_from_entity_code;
lv_src_event_class_code :=
rec_tax_det_factor.applied_from_event_class_code;
ln_src_trx_id := rec_tax_det_factor.applied_from_trx_id;
ln_src_trx_line_id := rec_tax_det_factor.applied_from_trx_line_id;
lv_src_trx_type := rec_tax_det_factor.applied_from_trx_type;
ln_src_loc_line_id := rec_tax_det_factor.applied_from_loc_line_id;
lv_src_trx_level_type := rec_tax_det_factor.applied_from_trx_level_type;

-- commented out by zhiwei.xin for bug#20509985 begin


/*IF ln_src_application_id = 660 AND lv_src_entity_code =
'OE_ORDER_HEADERS'
--Add by Zhhou for make different for ATO and O2C
and rec_tax_det_factor.application_id = 222 and
rec_tax_det_factor.entity_code = 'TRANSACTIONS'
THEN
IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||
lv_api_name,lv_api_name||'its Order to AR');
END IF;
OPEN c_get_order_info(rec_tax_det_factor.applied_from_trx_line_id);
FETCH c_get_order_info INTO ln_non_ship_cnt;
CLOSE c_get_order_info;
IF nvl(ln_non_ship_cnt,0) = 0 THEN
IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||lv_api_name
,lv_api_name||'noshipable and bill only items = 0');
END IF;
OPEN c_src_doc_det_ref_to(rec_tax_det_factor.applied_from_application_id
, rec_tax_det_factor.applied_from_entity_code
, rec_tax_det_factor.applied_from_event_class_code
, rec_tax_det_factor.applied_from_trx_id
, rec_tax_det_factor.applied_from_trx_line_id
, rec_tax_det_factor.applied_from_trx_type
, rec_tax_det_factor.applied_from_loc_line_id
, rec_tax_det_factor.applied_from_trx_level_type );
FETCH c_src_doc_det_ref_to INTO ln_src_application_id,
lv_src_entity_code,
lv_src_event_class_code,
lv_src_trx_level_type,
ln_src_trx_id,
ln_src_trx_line_id,
ln_src_loc_line_id,
lv_src_trx_type;
CLOSE c_src_doc_det_ref_to;
END IF;
END IF;*/
-- commented out by zhiwei.xin for bug#20509985 end.
-- added by zhiwei.xin for bug#20056694 begin
IF ln_src_application_id = 707
AND lv_src_entity_code = 'RCV_TRANSACTION'
AND lv_src_trx_type = 'ASBN'
AND rec_tax_det_factor.application_id = 7000
AND rec_tax_det_factor.entity_code = 'BILL_OF_ENTRY' THEN
lv_source := 'INTERFACE';
END IF;
-- added by zhiwei.xin for bug#20056694 end.

lv_rma_type := f_chck_rma(rec_tax_det_factor.applied_from_trx_id
,rec_tax_det_factor.applied_from_trx_line_id); ---added by
mani for bug 26612926

ELSIF rec_tax_det_factor.applied_to_application_id IS NOT NULL THEN


IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'Prepare tax lines tbl for copy from
applied to.');
END IF;
--copy from applied to document's taxes no matter the taxes modified or
not.
ln_src_application_id := rec_tax_det_factor.applied_to_application_id;
lv_src_entity_code := rec_tax_det_factor.applied_to_entity_code;
lv_src_event_class_code := rec_tax_det_factor.applied_to_event_class_code;
ln_src_trx_id := rec_tax_det_factor.applied_to_trx_id;
ln_src_trx_line_id := rec_tax_det_factor.applied_to_trx_line_id;
lv_src_trx_type := rec_tax_det_factor.applied_to_trx_type;
ln_src_loc_line_id := rec_tax_det_factor.applied_to_loc_line_id;
lv_src_trx_level_type := rec_tax_det_factor.applied_to_trx_level_type;
ELSIF rec_tax_det_factor.ref_doc_application_id IS NOT NULL THEN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'Prepare tax lines tbl for copy from refer
to doc.');
END IF;
--copy from reference document's taxes since the taxes modified.

--FROM HERE ADDED BY MANI FOR COPY BASIS CHANGES BUG 26397775
IF rec_tax_det_factor.entity_code = 'SALES_ORDER_ISSUE'
AND rec_tax_det_factor.event_class_code = 'SALES_ORDER_ISSUE'
AND rec_tax_det_factor.event_type_code = 'SHIPMENT_UPDATED'
AND rec_tax_det_factor.tax_event_class_code = 'SALES_TRANSACTION' THEN
--PERFORMING SHIP CONFIRM

ln_src_application_id := rec_tax_det_factor.application_id;
lv_src_entity_code := rec_tax_det_factor.entity_code;
lv_src_event_class_code := rec_tax_det_factor.event_class_code;
ln_src_trx_id := rec_tax_det_factor.trx_id;
ln_src_trx_line_id := rec_tax_det_factor.trx_line_id;
lv_src_trx_type := rec_tax_det_factor.trx_type;
ln_src_loc_line_id := rec_tax_det_factor.trx_loc_line_id;
lv_src_trx_level_type := rec_tax_det_factor.trx_level_type;

ELSE
--UPTO HERE ADDED BY MANI FOR COPY BASIS CHANGES BUG 26397775
ln_src_application_id := rec_tax_det_factor.ref_doc_application_id;
lv_src_entity_code := rec_tax_det_factor.ref_doc_entity_code;
lv_src_event_class_code := rec_tax_det_factor.ref_doc_event_class_code;
ln_src_trx_id := rec_tax_det_factor.ref_doc_trx_id;
ln_src_trx_line_id := rec_tax_det_factor.ref_doc_line_id;
lv_src_trx_type := rec_tax_det_factor.ref_doc_trx_type;
ln_src_loc_line_id := rec_tax_det_factor.ref_doc_loc_line_id;
lv_src_trx_level_type := rec_tax_det_factor.ref_doc_trx_level_type;

--added by mani for 26516124


/* OPEN c_chck_rma(rec_tax_det_factor.ref_doc_trx_id
,rec_tax_det_factor.ref_doc_line_id);
FETCH c_chck_rma
INTO lv_rma_type;
CLOSE c_chck_rma;*/-- 26591251
lv_rma_type := f_chck_rma(rec_tax_det_factor.ref_doc_trx_id
,rec_tax_det_factor.ref_doc_line_id); --26591251
--added by mani for 26516124
END IF;

ELSE
pv_process_status := FND_API.G_RET_STS_UNEXP_ERROR;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Error: Its copy case but without source document info.');
END IF;
RETURN;
END IF;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'lv_rma_type=' || lv_rma_type);
END IF;

FOR rec_src_doc_tax_lines IN c_src_doc_tax_lines LOOP


ln_tax_rate_id := rec_src_doc_tax_lines.tax_rate_id;

--26727774 In Case of RMA credit memo we are making the RMA credit
memo
-- TPB as Invoice in order to reduce libility by litting repository
IF nvl(lv_rma_type ,'N') = 'Y' and
rec_tax_det_factor.application_id = 222 THEN
rec_src_doc_tax_lines.tax_point_basis := NULL;
END IF;
--26727774 In Case of RMA credit memo we are making the RMA credit
memo
-- TPB as Invoice in order to reduce libility by litting repository

IF rec_src_doc_tax_lines.tax_point_basis IS NULL THEN


OPEN c_tax_type_tpb(rec_src_doc_tax_lines.tax_type_id);
FETCH c_tax_type_tpb
INTO lv_tax_type_tpb;
CLOSE c_tax_type_tpb;
derive_tax_point_basis(pn_application_id =>
rec_tax_det_factor.application_id
,pv_entity_code =>
rec_tax_det_factor.entity_code
,pv_event_class_code =>
rec_tax_det_factor.event_class_code
,pv_event_type_code =>
rec_tax_det_factor.event_type_code --Added by Junjian
,pv_tax_type_tpb => lv_tax_type_tpb
,pv_tax_line_tpb => lv_tax_line_tpb);
ELSE
lv_tax_line_tpb := rec_src_doc_tax_lines.tax_point_basis;
END IF;
derive_tax_point_date(pn_application_id =>
rec_tax_det_factor.application_id
,pv_entity_code => rec_tax_det_factor.entity_code
,pv_event_class_code =>
rec_tax_det_factor.event_class_code
,pn_trx_id => rec_tax_det_factor.trx_id
,pn_trx_line_id => rec_tax_det_factor.trx_line_id
,pn_trx_loc_line_id =>
rec_tax_det_factor.trx_loc_line_id
,pd_trx_date => rec_tax_det_factor.trx_date
,pv_tax_point_basis => lv_tax_line_tpb -- added by
zhiwei.xin for bug#18619014
,pd_tax_point_date => ld_tax_point_date);

rec_jai_tax_line := NULL;
rec_jai_tax_line.org_id := ln_org_id;
rec_jai_tax_line.organization_id := ln_organization_id;
rec_jai_tax_line.location_id := ln_location_id;
rec_jai_tax_line.det_factor_id := rec_tax_det_factor.det_factor_id;
rec_jai_tax_line.application_id := rec_tax_det_factor.application_id;
rec_jai_tax_line.entity_code := rec_tax_det_factor.entity_code;
rec_jai_tax_line.event_class_code :=
rec_tax_det_factor.event_class_code;
rec_jai_tax_line.event_type_code :=
rec_tax_det_factor.event_type_code;
rec_jai_tax_line.tax_event_class_code :=
rec_tax_det_factor.tax_event_class_code;
rec_jai_tax_line.tax_event_type_code :=
rec_tax_det_factor.tax_event_type_code;
rec_jai_tax_line.trx_id := rec_tax_det_factor.trx_id;
rec_jai_tax_line.trx_line_id := rec_tax_det_factor.trx_line_id;
rec_jai_tax_line.trx_loc_line_id :=
rec_tax_det_factor.trx_loc_line_id;
rec_jai_tax_line.trx_level_type := rec_tax_det_factor.trx_level_type;
rec_jai_tax_line.trx_date := rec_tax_det_factor.trx_date;
rec_jai_tax_line.legal_entity_id :=
rec_tax_det_factor.legal_entity_id;
rec_jai_tax_line.trx_number := rec_tax_det_factor.trx_number;
rec_jai_tax_line.trx_type := rec_tax_det_factor.trx_type;
rec_jai_tax_line.trx_line_number :=
rec_tax_det_factor.trx_line_number;
--added by mani for bug 26516124
IF nvl(lv_rma_type
,'N') = 'Y'
-- start for bug 26434591 by sunagesh
OR (rec_tax_det_factor.APPLICATION_ID =
rec_tax_det_factor.REF_DOC_APPLICATION_ID
AND rec_tax_det_factor.ENTITY_CODE =
rec_tax_det_factor.REF_DOC_ENTITY_CODE
--- added by chris due to bug#27515252 if PO copy document to go to
ELSE case
---issue#2, party info of 3rd party can't be copied from source doc
if copy document
and rec_tax_det_factor.APPLICATION_ID <> 201 --PO
---
)
/*added the below condition for 26595512 ketal*/
OR (rec_tax_det_factor.applied_from_application_id=222)
or (rec_tax_det_factor.ENTITY_CODE IN
( 'SALES_ORDER_ISSUE','OE_ORDER_HEADERS')) --28031584
-- end for bug 26434591 by sunagesh
/* OR NVL(LV_CHK_MATCHED_INV,'N') = 'Y' jls commented for 27489373 */
--ADDED BY MANI FOR BUG 27386717
THEN
rec_jai_tax_line.party_id := rec_tax_det_factor.party_id;
rec_jai_tax_line.party_site_id := rec_tax_det_factor.party_site_id;
ELSE
--added by mani for bug 26516124
--added nvl() for bug 26717890
rec_jai_tax_line.party_id := nvl(rec_src_doc_tax_lines.party_id,
rec_tax_det_factor.party_id); /*ln_party_id*/
/*
rec_jai_tax_line.party_site_id :=
nvl(rec_src_doc_tax_lines.party_site_id, rec_tax_det_factor.party_site_id);
/*ln_party_site_id
jls for intuit Bug 28075630 */
IF rec_src_doc_tax_lines.party_id =
rec_tax_det_factor.party_id
AND rec_tax_det_factor.party_site_id <>
rec_src_doc_tax_lines.party_site_id
THEN
rec_jai_tax_line.party_site_id :=
NVL (rec_tax_det_factor.party_site_id,
rec_src_doc_tax_lines.party_site_id
);
ELSE
rec_jai_tax_line.party_site_id :=
NVL (rec_src_doc_tax_lines.party_site_id,
rec_tax_det_factor.party_site_id
);
END IF;

IF (g_level_procedure >= fnd_log.g_current_runtime_level)


THEN
fnd_log.STRING
(g_level_procedure,
g_module_name || lv_api_name,
lv_api_name
|| 'JLS 1 Party Site changing case
rec_jai_tax_line.party_site_id ->'
|| rec_jai_tax_line.party_site_id
|| 'rec_src_doc_tax_lines.party_site_id-->'
|| rec_src_doc_tax_lines.party_site_id
|| 'rec_tax_det_factor.party_site_id-->'
|| rec_tax_det_factor.party_site_id
|| ' rec_tax_det_factor.party_id ='
|| rec_tax_det_factor.party_id
|| ' rec_src_doc_tax_lines.party_id -> '
|| rec_src_doc_tax_lines.party_id
);
END IF;
--Modified by Junjian for bug#18548713
END IF;
/*END IF;*/
rec_jai_tax_line.party_type :=
rec_tax_det_factor.party_type;
rec_jai_tax_line.trx_currency_code :=
rec_tax_det_factor.trx_currency_code;
rec_jai_tax_line.currency_conversion_date :=
rec_tax_det_factor.currency_conversion_date;
rec_jai_tax_line.currency_conversion_rate :=
rec_tax_det_factor.currency_conversion_rate;
rec_jai_tax_line.currency_conversion_type :=
rec_tax_det_factor.currency_conversion_type;
rec_jai_tax_line.item_id := rec_tax_det_factor.item_id;
rec_jai_tax_line.trx_uom :=
rec_tax_det_factor.trx_uom_code;
rec_jai_tax_line.unit_price :=
rec_tax_det_factor.unit_price;
rec_jai_tax_line.trx_line_quantity :=
rec_tax_det_factor.trx_line_quantity;
rec_jai_tax_line.line_amt :=
rec_tax_det_factor.line_amt;
rec_jai_tax_line.ref_doc_application_id :=
rec_tax_det_factor.ref_doc_application_id;
rec_jai_tax_line.ref_doc_entity_code :=
rec_tax_det_factor.ref_doc_entity_code;
rec_jai_tax_line.ref_doc_event_class_code :=
rec_tax_det_factor.ref_doc_event_class_code;
rec_jai_tax_line.ref_doc_trx_id :=
rec_tax_det_factor.ref_doc_trx_id;
rec_jai_tax_line.ref_doc_line_id :=
rec_tax_det_factor.ref_doc_line_id;
rec_jai_tax_line.ref_doc_loc_line_id :=
rec_tax_det_factor.ref_doc_loc_line_id;
rec_jai_tax_line.ref_doc_trx_type :=
rec_tax_det_factor.ref_doc_trx_type;
rec_jai_tax_line.ref_doc_trx_level_type :=
rec_tax_det_factor.ref_doc_trx_level_type;
rec_jai_tax_line.applied_to_application_id :=
rec_tax_det_factor.applied_to_application_id;
rec_jai_tax_line.applied_to_entity_code :=
rec_tax_det_factor.applied_to_entity_code;
rec_jai_tax_line.applied_to_event_class_code :=
rec_tax_det_factor.applied_to_event_class_code;
rec_jai_tax_line.applied_to_trx_id :=
rec_tax_det_factor.applied_to_trx_id;
rec_jai_tax_line.applied_to_trx_line_id :=
rec_tax_det_factor.applied_to_trx_line_id;
rec_jai_tax_line.applied_to_loc_line_id :=
rec_tax_det_factor.applied_to_loc_line_id;
rec_jai_tax_line.applied_to_trx_type :=
rec_tax_det_factor.applied_to_trx_type;
rec_jai_tax_line.applied_to_trx_level_type :=
rec_tax_det_factor.applied_to_trx_level_type;

rec_jai_tax_line.applied_from_application_id :=
rec_tax_det_factor.applied_from_application_id;
rec_jai_tax_line.applied_from_entity_code :=
rec_tax_det_factor.applied_from_entity_code;
rec_jai_tax_line.applied_from_event_class_code :=
rec_tax_det_factor.applied_from_event_class_code;
rec_jai_tax_line.applied_from_trx_id :=
rec_tax_det_factor.applied_from_trx_id;
rec_jai_tax_line.applied_from_trx_line_id :=
rec_tax_det_factor.applied_from_trx_line_id;
rec_jai_tax_line.applied_from_loc_line_id :=
rec_tax_det_factor.applied_from_loc_line_id;
rec_jai_tax_line.applied_from_trx_type :=
rec_tax_det_factor.applied_from_trx_type;
rec_jai_tax_line.applied_from_trx_level_type :=
rec_tax_det_factor.applied_from_trx_level_type;
rec_jai_tax_line.ledger_id := ln_ledger_id;
rec_jai_tax_line.functional_currency_code := lv_func_currency;

ln_regime_id :=
rec_src_doc_tax_lines.tax_regime_id;
ln_tax_line_num :=
rec_src_doc_tax_lines.tax_line_num;
rec_jai_tax_line.tax_regime_id :=
rec_src_doc_tax_lines.tax_regime_id;
rec_jai_tax_line.tax_regime_code :=
rec_src_doc_tax_lines.tax_regime_code;
rec_jai_tax_line.tax_regime_type :=
rec_src_doc_tax_lines.tax_regime_type;
rec_jai_tax_line.tax_type_id :=
rec_src_doc_tax_lines.tax_type_id;
rec_jai_tax_line.abatement_flag :=
rec_src_doc_tax_lines.abatement_flag;
rec_jai_tax_line.update_vendor_on_transaction :=
rec_src_doc_tax_lines.update_vendor_on_transaction;
rec_jai_tax_line.reporting_only_flag :=
rec_src_doc_tax_lines.reporting_only_flag;
rec_jai_tax_line.offset_flag :=
rec_src_doc_tax_lines.offset_flag;
rec_jai_tax_line.recoverable_flag :=
rec_src_doc_tax_lines.recoverable_flag;
rec_jai_tax_line.self_assessed_flag :=
rec_src_doc_tax_lines.self_assessed_flag;
rec_jai_tax_line.reverse_credit_on_shipment :=
rec_src_doc_tax_lines.reverse_credit_on_shipment;
rec_jai_tax_line.credit_basis_self_assessed :=
rec_src_doc_tax_lines.credit_basis_self_assessed;

rec_jai_tax_line.tax_point_basis := lv_tax_line_tpb;
rec_jai_tax_line.tax_point_date := ld_tax_point_date;
rec_jai_tax_line.tax_rate_id := rec_src_doc_tax_lines.tax_rate_id;
rec_jai_tax_line.tax_rate_code :=
rec_src_doc_tax_lines.tax_rate_code;
rec_jai_tax_line.tax_rate_type :=
rec_src_doc_tax_lines.tax_rate_type;
rec_jai_tax_line.tax_status := rec_src_doc_tax_lines.tax_status;
rec_jai_tax_line.recovery_percentage :=
rec_src_doc_tax_lines.recovery_percentage;
rec_jai_tax_line.inclusive_flag :=
rec_src_doc_tax_lines.inclusive_flag;
ln_tax_rate_percentage := NULL;
lv_tax_rate_uom := NULL;
ln_tax_rate_uom_rate := NULL;
lv_tax_rate_abatement_type := NULL;
ln_tax_abatement_percentage := NULL;
lv_tax_rate_classification := NULL;
ln_standard_rate := NULL;
lv_form_type := NULL;

OPEN c_tax_rate_percentage(ln_tax_rate_id
,ld_tax_point_date);
FETCH c_tax_rate_percentage
INTO ln_tax_rate_percentage;
CLOSE c_tax_rate_percentage;

OPEN c_tax_rate_uom(ln_tax_rate_id
,ld_tax_point_date);
FETCH c_tax_rate_uom
INTO lv_tax_rate_uom
,ln_tax_rate_uom_rate;
CLOSE c_tax_rate_uom;

OPEN c_tax_rate_abatement(ln_tax_rate_id
,ld_tax_point_date);
FETCH c_tax_rate_abatement
INTO lv_tax_rate_abatement_type
,ln_tax_abatement_percentage;
CLOSE c_tax_rate_abatement;

OPEN c_tax_rate_exception(ln_tax_rate_id
,ld_tax_point_date);
FETCH c_tax_rate_exception
INTO lv_tax_rate_classification
,ln_standard_rate
,lv_form_type;
CLOSE c_tax_rate_exception;

rec_jai_tax_line.tax_rate_percentage := ln_tax_rate_percentage;
rec_jai_tax_line.tax_rate_uom := lv_tax_rate_uom;
IF rec_src_doc_tax_lines.tax_rate_type IN ('UNIT_OF_MEASURE_ADHOC') THEN
rec_jai_tax_line.tax_rate_uom_rate :=
rec_src_doc_tax_lines.tax_rate_uom_rate;
ELSE
rec_jai_tax_line.tax_rate_uom_rate := ln_tax_rate_uom_rate;
END IF;

/* Bug#19161937 start, add logic to copy unrounded tax amount for Adhoc. */
IF rec_jai_tax_line.tax_rate_type = 'ADHOC_AMOUNT' THEN
-- Calculate Adhoc amount by quantity.
--FROM HERE MANI FOR 27279110
IF rec_tax_det_factor.application_id = 707 and
rec_tax_det_factor.entity_code = 'RCV_TRANSACTION' then

open c_parent_det_fact(rec_src_doc_tax_lines.det_factor_id);
fetch c_parent_det_fact into rec_sour_tax_det_factor;
close c_parent_det_fact;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name ||
'Adhoc tax RCV_TRANSACTION
rec_src_doc_tax_lines.det_factor_id->' ||
rec_src_doc_tax_lines.det_factor_id||'rec_sour_tax_det_factor.trx_uom_code-->' ||
rec_sour_tax_det_factor.trx_uom_code
||'rec_tax_det_factor.trx_uom_code-->' ||
rec_tax_det_factor.trx_uom_code
||'rec_src_doc_tax_lines.trx_line_quantity='||
rec_src_doc_tax_lines.trx_line_quantity
);
END IF;

if
nvl(rec_src_doc_tax_lines.trx_uom,rec_sour_tax_det_factor.trx_uom_code) =
rec_tax_det_factor.trx_uom_code and
nvl(rec_src_doc_tax_lines.trx_uom,rec_sour_tax_det_factor.trx_uom_code)
is not null
and rec_tax_det_factor.trx_uom_code is not null
then

IF rec_src_doc_tax_lines.trx_line_quantity <> 0
AND rec_tax_det_factor.trx_line_quantity <> 0
AND rec_tax_det_factor.trx_line_quantity <>
rec_src_doc_tax_lines.trx_line_quantity THEN
--QA ISSUE WHEN SPLITTING QUANTITY
rec_jai_tax_line.unround_tax_amt_tax_curr :=
round(rec_src_doc_tax_lines.unround_tax_amt_tax_curr *

rec_tax_det_factor.trx_line_quantity /

rec_src_doc_tax_lines.trx_line_quantity
,2);

ELSE
rec_jai_tax_line.unround_tax_amt_tax_curr :=
rec_src_doc_tax_lines.unround_tax_amt_tax_curr;

END IF;

elsif
nvl(rec_src_doc_tax_lines.trx_uom,rec_sour_tax_det_factor.trx_uom_code) <>
rec_tax_det_factor.trx_uom_code and
nvl(rec_src_doc_tax_lines.trx_uom,rec_sour_tax_det_factor.trx_uom_code)
is not null
and rec_tax_det_factor.trx_uom_code is not null
then

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name ||
'Adhoc tax differnt UOM rec_jai_tax_line.trx_uom->'
||rec_jai_tax_line.trx_uom||
'rec_src_doc_tax_lines.trx_uom ->' ||
rec_src_doc_tax_lines.trx_uom ||
'rec_jai_tax_line.item_id-->' ||
rec_jai_tax_line.item_id);
END IF;

ln_um_conversion_rate :=
JAI_WSH_TAX_DET_PKG.uom_conversion(rec_jai_tax_line.trx_uom,

nvl(rec_src_doc_tax_lines.trx_uom,rec_sour_tax_det_factor.trx_uom_code),

nvl(rec_jai_tax_line.item_id,0)) ;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name ||
'ln_um_conversion_rate='||ln_um_conversion_rate);
END IF;
ln_um_converted_qty := round(rec_jai_tax_line.trx_line_quantity *
nvl(ln_um_conversion_rate,1));

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name ||
'ln_um_converted_qty='||
ln_um_converted_qty||'rec_src_doc_tax_lines.unround_tax_amt_tax_curr='
||rec_src_doc_tax_lines.unround_tax_amt_tax_curr
||'rec_src_doc_tax_lines.trx_line_quantity='||
rec_src_doc_tax_lines.trx_line_quantity );
END IF;

IF rec_src_doc_tax_lines.trx_line_quantity <> 0 and


ln_um_converted_qty <> 0
AND ln_um_converted_qty <> rec_src_doc_tax_lines.trx_line_quantity
THEN

rec_jai_tax_line.unround_tax_amt_tax_curr :=
round(rec_src_doc_tax_lines.unround_tax_amt_tax_curr *

ln_um_converted_qty /

rec_src_doc_tax_lines.trx_line_quantity
,2);

ELSE
rec_jai_tax_line.unround_tax_amt_tax_curr :=
rec_src_doc_tax_lines.unround_tax_amt_tax_curr;

END IF;

else

rec_jai_tax_line.unround_tax_amt_tax_curr :=
rec_src_doc_tax_lines.unround_tax_amt_tax_curr;

end if;
--UPTO HERE MANI FOR 27279110

else --other than RCV_TRANSACTION


IF rec_src_doc_tax_lines.trx_line_quantity <> 0
AND rec_tax_det_factor.trx_line_quantity <> 0
AND rec_tax_det_factor.trx_line_quantity <>
rec_src_doc_tax_lines.trx_line_quantity THEN
--QA ISSUE WHEN SPLITTING QUANTITY
rec_jai_tax_line.unround_tax_amt_tax_curr :=
round(rec_src_doc_tax_lines.unround_tax_amt_tax_curr *

rec_tax_det_factor.trx_line_quantity /

rec_src_doc_tax_lines.trx_line_quantity
,2);

ELSE
rec_jai_tax_line.unround_tax_amt_tax_curr :=
rec_src_doc_tax_lines.unround_tax_amt_tax_curr;

END IF;

-- Preventive fix moved here by jls


IF NVL (lv_chk_matched_inv, 'N') = 'Y'
THEN
rec_jai_tax_line.party_id :=
NVL (rec_jai_tax_line.party_id,
rec_tax_det_factor.party_id
);

/*
rec_jai_tax_line.party_site_id :=
NVL (rec_jai_tax_line.party_site_id,
rec_tax_det_factor.party_site_id
);

jls for intuit Bug 28075630 */


IF rec_src_doc_tax_lines.party_id =
rec_tax_det_factor.party_id
AND rec_tax_det_factor.party_site_id <>
rec_src_doc_tax_lines.party_site_id
THEN
rec_jai_tax_line.party_site_id :=
NVL (rec_tax_det_factor.party_site_id,
rec_src_doc_tax_lines.party_site_id
);
ELSE
rec_jai_tax_line.party_site_id :=
NVL (rec_src_doc_tax_lines.party_site_id,
rec_tax_det_factor.party_site_id
);
END IF;

IF (g_level_procedure >= fnd_log.g_current_runtime_level


)
THEN
fnd_log.STRING
(g_level_procedure,
g_module_name || lv_api_name,
lv_api_name
|| 'JLS lv_chk_matched_inv as Y Party Site changing
case rec_jai_tax_line.party_site_id ->'
|| rec_jai_tax_line.party_site_id
|| 'rec_src_doc_tax_lines.party_site_id-->'
|| rec_src_doc_tax_lines.party_site_id
|| 'rec_tax_det_factor.party_site_id-->'
|| rec_tax_det_factor.party_site_id
|| ' rec_tax_det_factor.party_id ='
|| rec_tax_det_factor.party_id
|| ' rec_src_doc_tax_lines.party_id -> '
|| rec_src_doc_tax_lines.party_id
);
END IF;
END IF;

end if;

--26389510 AELLURU
BEGIN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name ||
'Copy ADHOC TAX in as sum of ADHOC FROM DELVERY for
that particular line_id' ||
'ln_src_application_id ->' || ln_src_application_id ||
'rec_jai_tax_line.APPLICATION_ID=222 -->' ||
'lv_src_entity_code-->' ||
lv_src_entity_code || 'ln_src_trx_id -->' ||
ln_src_trx_id ||
'rec_jai_tax_line.tax_rate_id -->' ||
rec_jai_tax_line.tax_rate_id ||
'rec_jai_tax_line.trx_line_id' ||
rec_jai_tax_line.trx_line_id);
END IF;
IF ln_src_application_id = 707
AND rec_jai_tax_line.application_id = 222
AND lv_src_entity_code = 'SALES_ORDER_ISSUE'
AND ln_src_trx_id IS NOT NULL
AND rec_tax_det_factor.LC_APPLICABILITY_FLAG IS NULL THEN
--EMERSON 26624885
BEGIN
SELECT SUM(unround_tax_amt_tax_curr)
INTO rec_jai_tax_line.unround_tax_amt_tax_curr
FROM ra_customer_trx_lines_all rctl
,jai_tax_lines jtl
WHERE jtl. trx_id = to_number(rctl.interface_line_attribute3)
AND jtl.ref_doc_line_id =
to_number(rctl.interface_line_attribute6)
AND jtl. application_id = 707
AND entity_code = 'SALES_ORDER_ISSUE'
AND tax_rate_id = rec_jai_tax_line.tax_rate_id
AND rctl.customer_trx_line_id = rec_jai_tax_line.trx_line_id;
EXCEPTION
WHEN OTHERS THEN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'Inside ADHOC DELIVERY TO AR
CASE' || SQLERRM);
END IF;
END;
END IF;
END;
--26389510 AELLURU
END IF;
/* Bug#19161937 end. */
-- commented out by zhiwei.xin for santity check
--rec_jai_tax_line.tax_rate_uom_rate := ln_tax_rate_uom_rate;
rec_jai_tax_line.tax_rate_abatement_type := lv_tax_rate_abatement_type;
rec_jai_tax_line.abatement_percentage := ln_tax_abatement_percentage;
rec_jai_tax_line.tax_rate_classification := lv_tax_rate_classification;
rec_jai_tax_line.standard_rate := ln_standard_rate;
rec_jai_tax_line.form_type := lv_form_type;
rec_jai_tax_line.tax_line_num := ln_tax_line_num;
--Added by Wenqiong for 18607165 bug IPV/ERV begin
IF nvl(rec_tax_det_factor.trx_currency_code
,'INR') = nvl(rec_src_doc_tax_lines.tax_currency_code
,'INR')
AND nvl(rec_tax_det_factor.currency_conversion_type
,'-ABC') = nvl(rec_src_doc_tax_lines.tax_currency_conversion_type
,'-ABC') -- 27935648
AND nvl(rec_tax_det_factor.currency_conversion_rate
,1) <> nvl(rec_src_doc_tax_lines.tax_currency_conversion_rate
,1) THEN
rec_jai_tax_line.tax_currency_code :=
rec_tax_det_factor.trx_currency_code;
rec_jai_tax_line.tax_currency_conversion_date :=
rec_tax_det_factor.currency_conversion_date;
rec_jai_tax_line.tax_currency_conversion_type :=
rec_tax_det_factor.currency_conversion_type;
rec_jai_tax_line.tax_currency_conversion_rate :=
rec_tax_det_factor.currency_conversion_rate;

ELSE
rec_jai_tax_line.tax_currency_code :=
rec_src_doc_tax_lines.tax_currency_code;
rec_jai_tax_line.tax_currency_conversion_date :=
rec_src_doc_tax_lines.tax_currency_conversion_date;
rec_jai_tax_line.tax_currency_conversion_type :=
rec_src_doc_tax_lines.tax_currency_conversion_type;
rec_jai_tax_line.tax_currency_conversion_rate :=
rec_src_doc_tax_lines.tax_currency_conversion_rate;

END IF;
--Added by Wenqiong for 18607165 bug IPV/ERV end
rec_jai_tax_line.precedence_1 :=
rec_src_doc_tax_lines.precedence_1;
rec_jai_tax_line.precedence_2 :=
rec_src_doc_tax_lines.precedence_2;
rec_jai_tax_line.precedence_3 :=
rec_src_doc_tax_lines.precedence_3;
rec_jai_tax_line.precedence_4 :=
rec_src_doc_tax_lines.precedence_4;
rec_jai_tax_line.precedence_5 :=
rec_src_doc_tax_lines.precedence_5;
rec_jai_tax_line.precedence_6 :=
rec_src_doc_tax_lines.precedence_6;
rec_jai_tax_line.precedence_7 :=
rec_src_doc_tax_lines.precedence_7;
rec_jai_tax_line.precedence_8 :=
rec_src_doc_tax_lines.precedence_8;
rec_jai_tax_line.precedence_9 :=
rec_src_doc_tax_lines.precedence_9;
rec_jai_tax_line.precedence_10 :=
rec_src_doc_tax_lines.precedence_10;
rec_jai_tax_line.precedence_11 :=
rec_src_doc_tax_lines.precedence_11;
rec_jai_tax_line.precedence_12 :=
rec_src_doc_tax_lines.precedence_12;
rec_jai_tax_line.precedence_13 :=
rec_src_doc_tax_lines.precedence_13;
rec_jai_tax_line.precedence_14 :=
rec_src_doc_tax_lines.precedence_14;
rec_jai_tax_line.precedence_15 :=
rec_src_doc_tax_lines.precedence_15;
rec_jai_tax_line.precedence_16 :=
rec_src_doc_tax_lines.precedence_16;
rec_jai_tax_line.precedence_17 :=
rec_src_doc_tax_lines.precedence_17;
rec_jai_tax_line.precedence_18 :=
rec_src_doc_tax_lines.precedence_18;
rec_jai_tax_line.precedence_19 :=
rec_src_doc_tax_lines.precedence_19;
rec_jai_tax_line.precedence_20 :=
rec_src_doc_tax_lines.precedence_20;
rec_jai_tax_line.copied_from_other_doc_flag := 'Y';

/* Bug#28213561, dejiang.liu/20180628. Set default assessable value. */


--rec_jai_tax_line.user_entered_av := l_default_av;

--Added by Junjian for bug#19426429 begin

jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'
rec_src_doc_tax_lines.assessable_price_list_id ' ||

rec_src_doc_tax_lines.assessable_price_list_id);
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,' rec_src_doc_tax_lines.user_entered_av
' ||
rec_src_doc_tax_lines.user_entered_av);
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,' rec_src_doc_tax_lines.user_entered_av
' ||

rec_src_doc_tax_lines.line_assessable_value);
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,' rec_src_doc_tax_lines.TAX_RATE_UOM
' ||
rec_src_doc_tax_lines.TAX_RATE_UOM);

--1102,8jul

ln_assessable_conv_rate := 1;
IF rec_jai_tax_line.trx_uom <> rec_src_doc_tax_lines.trx_uom THEN
jai_cmn_utils_pkg.write_fnd_log_msg('JAI_1102'
,' Inside trx uom not the source
UOM');
inv_convert.inv_um_conversion(rec_jai_tax_line.trx_uom
,rec_src_doc_tax_lines.trx_uom
,rec_jai_tax_line.item_id
,ln_assessable_conv_rate);
jai_cmn_utils_pkg.write_fnd_log_msg('JAI_1102'
,' ln_assessable_conv_rate after
conversion ' ||
ln_assessable_conv_rate);

IF ln_assessable_conv_rate < 0 THEN

jai_cmn_utils_pkg.write_fnd_log_msg('JAI_1102'
,'UOM conversion is not defined for
tax line #Sl No' ||
rec_jai_tax_line.tax_line_num);

END IF;
END IF;
-------end additions for bug#26381084
jai_cmn_utils_pkg.write_fnd_log_msg('JAI_1102'
,' before applying conversion rate ' ||
r_source_tax_info.user_entered_av);
rec_jai_tax_line.user_entered_av := rec_src_doc_tax_lines.user_entered_av *
nvl(ln_assessable_conv_rate
,1);
jai_cmn_utils_pkg.write_fnd_log_msg('JAI_1102'
,' after applying conversion rate ' ||
r_source_tax_info.user_entered_av);
rec_jai_tax_line.line_assessable_value :=
rec_src_doc_tax_lines.line_assessable_value *
nvl(ln_assessable_conv_rate
,1);
jai_cmn_utils_pkg.write_fnd_log_msg('JAI_1102'
,'
rec_jai_tax_line.line_assessable_value ' ||

rec_jai_tax_line.line_assessable_value);
--rec_jai_tax_line.line_assessable_value :=
rec_src_doc_tax_lines.line_assessable_value ;
-- rec_jai_tax_line.USER_ENTERED_AV :=
rec_src_doc_tax_lines.user_entered_av ;
rec_jai_tax_line.assessable_price_list_id :=
rec_src_doc_tax_lines.assessable_price_list_id; --26381084
--Added by Junjian for bug#19426429 begin

/*Commented out the below for bug


IF rec_src_doc_tax_lines.tax_rate_type IN( 'ADHOC_AMOUNT' ) THEN
rec_jai_tax_line.unround_tax_amt_tax_curr :=
rec_src_doc_tax_lines.unround_tax_amt_tax_curr;
END IF;*/

--bug 27013873: Start


IF rec_src_doc_tax_lines.tax_rate_type IN ( 'UNIT_OF_MEASURE_ADHOC' ) THEN
rec_jai_tax_line.tax_rate_uom := rec_src_doc_tax_lines.tax_rate_uom;
END IF;
--bug 27013873: End
-- added by zhiwei.xin for AR Open Interface begin
IF rec_tax_det_factor.application_id = 222
AND rec_tax_det_factor.entity_code = 'TRANSACTIONS' THEN
-- copy tax invoice number and tax invoice date from source tax line
rec_jai_tax_line.tax_invoice_date :=
rec_src_doc_tax_lines.tax_invoice_date;
rec_jai_tax_line.tax_invoice_num :=
rec_src_doc_tax_lines.tax_invoice_num;
END IF;
-- added by zhiwei.xin for AR Open Interface end.

--Added by Junjian for Trading begin


lv_tradding_flag :=
jai_cmn_trad_proc_pkg.get_tax_trading_flag(pn_tax_type_id =>
rec_src_doc_tax_lines.tax_type_id
--added for
bug#19303523 begin

,pn_first_party_reg_id => rec_src_doc_tax_lines.first_party_reg_id

,pn_tax_rate_id => rec_src_doc_tax_lines.tax_rate_id


--added for
bug#19303523 end
);
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'tradding flag:' || lv_tradding_flag);
END IF;

IF lv_tradding_flag = 'Y'
AND rec_jai_tax_line.entity_code IN ('OE_ORDER_HEADERS'
,'SALES_ORDER_ISSUE'
,'TRANSACTIONS'
,'MTL_TRANSACTION') THEN
rec_jai_tax_line.unround_tax_amt_tax_curr :=
nvl(rec_src_doc_tax_lines.unround_tax_amt_tax_curr
,0);
END IF;
--Added by Junjian for Trading end

--Added by Junjian for bug#18729209 begin


lv_boe_flag := jai_boe_tax_det_pkg.is_boe_tax(pn_tax_type_id =>
rec_src_doc_tax_lines.tax_type_id);
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'BOE tax flag:' || lv_boe_flag);
END IF;
IF nvl(lv_boe_flag
,'N') = 'Y'
AND rec_tax_det_factor.entity_code = 'AP_INVOICES'
AND rec_tax_det_factor.applied_to_trx_id IS NOT NULL THEN
rec_jai_tax_line.unround_tax_amt_tax_curr := 0;
END IF;
--Added by Junjian for bug#18729209 end

--Added by Junjian for bug#20476394 begin


IF rec_jai_tax_line.entity_code IN ('AP_INVOICES'
,'RCV_TRANSACTION'
,'PURCHASE_ORDER'
,'RELEASE'
,'REQUISITION') THEN
OPEN c_credit_reversal_count(rec_jai_tax_line.tax_rate_id);
FETCH c_credit_reversal_count
INTO ln_cred_rev_count;
CLOSE c_credit_reversal_count;
IF ln_cred_rev_count > 0 THEN
rec_jai_tax_line.unround_tax_amt_fun_curr := 0;
rec_jai_tax_line.rounded_tax_amt_tax_curr := 0;
rec_jai_tax_line.frozen_flag := 'Y';
END IF;
END IF;
--Added by Junjian for bug#20476394 end

-- added by zhiwei.xin for bug#20485509 begin


IF (G_LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_STATEMENT
,G_MODULE_NAME || lv_api_name
,'RECORD_TYPE_CODE : ' ||
rec_tax_det_factor.record_type_code ||
',UNROUND_TAX_AMT_TAX_CURR : ' ||
rec_src_doc_tax_lines.unround_tax_amt_tax_curr);
END IF;
IF nvl(rec_tax_det_factor.record_type_code
,'DEFINED') = 'OI_EXT' THEN
-- commented out by zhiwei.xin for bug#20509985
--rec_jai_tax_line.unround_tax_amt_tax_curr :=
nvl(rec_src_doc_tax_lines.UNROUND_TAX_AMT_TAX_CURR,0);

-- added by zhiwei.xin for bug#20509985 begin


IF rec_src_doc_tax_lines.trx_line_quantity <> 0
AND rec_tax_det_factor.trx_line_quantity <> 0
AND rec_tax_det_factor.trx_line_quantity <=
rec_src_doc_tax_lines.trx_line_quantity THEN
rec_jai_tax_line.unround_tax_amt_tax_curr :=
round(rec_src_doc_tax_lines.unround_tax_amt_tax_curr *

rec_tax_det_factor.trx_line_quantity /

rec_src_doc_tax_lines.trx_line_quantity
,2);

ELSE
rec_jai_tax_line.unround_tax_amt_tax_curr :=
rec_src_doc_tax_lines.unround_tax_amt_tax_curr;

END IF;
rec_jai_tax_line.tax_invoice_date :=
rec_src_doc_tax_lines.tax_invoice_date;
rec_jai_tax_line.tax_invoice_num :=
rec_src_doc_tax_lines.tax_invoice_num;
-- added by zhiwei.xin for bug#20509985 end.

END IF;
-- added by zhiwei.xin for bug#20485509 end.
/*Added by Qinglei for Interorg/ISO accounting bug#19329120 begin*/
IF rec_tax_det_factor.application_id = 707
AND rec_tax_det_factor.entity_code = 'SALES_ORDER_ISSUE' THEN
lv_iso_flag := jai_om_tax_det_pkg.get_iso_flag(p_oe_line_id =>
rec_tax_det_factor.ref_doc_line_id);
--trx_line_id);AELLURU for IRISO
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Internal Sales Order flag: ' || lv_iso_flag);
END IF;
IF lv_iso_flag = 'Y' THEN
rec_jai_tax_line.tax_point_basis := 'DELIVERY';
END IF;
END IF;
/*Added by Qinglei for Interorg/ISO accounting bug#19329120 end*/
rec_1st_party_reg := NULL;

/*start additions for bug#26399170*/


ln_party_reg_id := NULL;

ln_party_reg_id := get_fp_matched_id(p_organization_id =>


ln_organization_id
,p_location_id => ln_location_id
,p_org_id => ln_regime_id
,p_regime_type => 'T'
,p_regime_id => ln_regime_id);

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'ln_party_Reg_id retrieved is ' || ln_party_reg_id);
END IF;
/*end bug#26399170*/

OPEN c_1st_party_reg(cn_organization_id => ln_organization_id


,cn_org_id => ln_org_id
,cn_location_id => ln_location_id
,cn_regime_id => ln_regime_id
,cn_party_reg_id => ln_party_reg_id);
FETCH c_1st_party_reg
INTO rec_1st_party_reg;
CLOSE c_1st_party_reg;

rec_jai_tax_line.first_party_reg_id :=
rec_1st_party_reg.first_party_reg_id;
rec_jai_tax_line.first_party_primary_reg_name :=
rec_1st_party_reg.first_party_primary_reg_name;
rec_jai_tax_line.first_party_primary_reg_num :=
rec_1st_party_reg.first_party_primary_reg_num;
rec_jai_tax_line.first_party_secondary_reg_name :=
rec_1st_party_reg.first_party_secondary_reg_name;
rec_jai_tax_line.first_party_secondary_reg_num :=
rec_1st_party_reg.first_party_secondary_reg_num;
/*rec_jai_tax_line.num_of_return_days :=
rec_1st_party_reg.num_of_return_days ;
rec_jai_tax_line.create_validated_inv_on_intf :=
rec_1st_party_reg.create_validated_inv_on_intf ;
rec_jai_tax_line.copy_rcv_taxes_to_shipment :=
rec_1st_party_reg.copy_rcv_taxes_to_shipment ;
rec_jai_tax_line.sub_inventory_code :=
rec_1st_party_reg.sub_inventory_code ;*/
rec_jai_tax_line.tax_authority_id :=
rec_1st_party_reg.tax_authority_id;
rec_jai_tax_line.tax_authority_site_id :=
rec_1st_party_reg.tax_authority_site_id;

rec_1st_party_reg := NULL;
OPEN c_3rd_party_reg(cv_party_type => rec_tax_det_factor.party_type
,cn_party_id => rec_tax_det_factor.party_id
,cn_party_site_id => rec_tax_det_factor.party_site_id
,cn_regime_id => ln_regime_id);
FETCH c_3rd_party_reg
INTO rec_3rd_party_reg;
CLOSE c_3rd_party_reg;
--Added by Wenqiong 0722 begin
IF nvl(rec_3rd_party_reg.third_party_reg_id
,0) = 0 THEN
OPEN c_3rd_party_reg(cv_party_type => rec_tax_det_factor.party_type
,cn_party_id => rec_tax_det_factor.party_id
,cn_party_site_id => NULL
,cn_regime_id => ln_regime_id);
FETCH c_3rd_party_reg
INTO rec_3rd_party_reg;
CLOSE c_3rd_party_reg;
END IF;
--Added by Wenqiong 0722 end
rec_jai_tax_line.third_party_reg_id :=
rec_3rd_party_reg.third_party_reg_id;
rec_jai_tax_line.third_party_primary_reg_name :=
rec_3rd_party_reg.third_party_primary_reg_name;
rec_jai_tax_line.third_party_primary_reg_num :=
rec_3rd_party_reg.third_party_primary_reg_num;
rec_jai_tax_line.third_party_secondary_reg_name :=
rec_3rd_party_reg.third_party_secondary_reg_name;
rec_jai_tax_line.third_party_secondary_reg_num :=
rec_3rd_party_reg.third_party_secondary_reg_num;
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'
rec_3rd_party_reg.assessable_price_list_id ' ||

rec_3rd_party_reg.assessable_price_list_id);
rec_jai_tax_line.assessable_price_list_id :=
nvl(rec_jai_tax_line.assessable_price_list_id

,rec_3rd_party_reg.assessable_price_list_id);
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'
rec_jai_tax_line.assessable_price_list_id ' ||

rec_3rd_party_reg.assessable_price_list_id);
OPEN c_3rd_party_reporting(rec_3rd_party_reg.third_party_reg_id
,ln_regime_id);
FETCH c_3rd_party_reporting
INTO rec_jai_tax_line.reporting_type_id
,rec_jai_tax_line.reporting_code;
CLOSE c_3rd_party_reporting;
get_rounding_rules(pn_org_id => ln_org_id
,pn_organization_id => ln_organization_id
,pn_location_id => ln_location_id
,pn_regime_id => ln_regime_id
,pv_tax_rounded_to =>
rec_jai_tax_line.tax_rounded_to
,pv_tax_rounding_factor =>
rec_jai_tax_line.tax_rounding_factor
,pv_taxable_rounded_to =>
rec_jai_tax_line.taxable_rounded_to
,pv_taxable_rounding_factor =>
rec_jai_tax_line.taxable_rounding_factor
,pv_qty_rounding_rule =>
rec_jai_tax_line.quantity_rounded_to
,pv_qty_rounding_factor =>
rec_jai_tax_line.quantity_rounding_factor
,pv_process_status => pv_process_status);

p_tax_lines_tbl(ln_tax_line_num) := rec_jai_tax_line;
END LOOP;

END IF;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
EXCEPTION
WHEN OTHERS THEN
pv_process_status := FND_API.G_RET_STS_UNEXP_ERROR;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,SQLERRM);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
END prepare_tax_lines_tbl;

/*---------------------------------------------------------------------------------
-------------------------+
| Created By : Wenqiong Zhou
|
| Creation Date : 10/Apr/2013
|
| Bug Number/ER Name : Phase IV Tax Determination
|
| SubProgram Name : derive_tax_point_date
|
| Type : PROCEDURE
|
| Purpose : This procedure is to derive tax point date, only for po
receipt, will use |
| will use shipped date as tax point date
|
| otherwise, will use trx date as tax point date.
|
| TDD Reference : Section
|
| Assumptions :
|
| Called From : called by prepare_tax_lines_tbl
|

|----------------------------------------------------------------------------------
------------------------|
| parameters IN/OUT Type Required
Description and Purpose |
| ------------ -------- ----- ----------
------------------------- |
| pn_application_id IN NUMBER yes
Application ID |
| pv_entity_code IN VARCHAR2 yes
Entity Code |
| pv_event_type_code IN VARCHAR2 yes
Event Type Code |
| pv_event_class_code IN VARCHAR2 yes
Event Class Code |
| pn_trx_id IN NUMBER yes
Trx ID |
| pn_trx_line_id IN NUMBER yes
Trx line ID |
| pd_trx_date IN DATE yes
Trx DATE |
| pv_tax_point_basis IN DATE yes
Tax Point Basis |
| pd_tax_point_date OUT DATE yes
Tax point date derived |

*----------------------------------------------------------------------------------
-------------------------*/
PROCEDURE derive_tax_point_date
(
pn_application_id IN NUMBER
,pv_entity_code IN VARCHAR2
,pv_event_type_code IN VARCHAR2 -- added by zhiwei.xin for bug#18619014
,pv_event_class_code IN VARCHAR2
,pn_trx_id IN NUMBER
,pn_trx_line_id IN NUMBER
,pn_trx_loc_line_id IN NUMBER DEFAULT NULL
,pd_trx_date IN DATE
,pv_tax_point_basis IN VARCHAR2 -- added by zhiwei.xin for bug#18619014
,pd_tax_point_date OUT NOCOPY DATE
) IS
-- commented out by zhiwei.xin for bug#18619014 begin
/*CURSOR c_get_shipped_date IS
SELECT shipped_date
FROM rcv_shipment_headers
WHERE shipment_header_id = pn_trx_id;

CURSOR c_so_shipment_date IS
SELECT ACTUAL_SHIPMENT_DATE
FROM oe_order_lines_all
WHERE header_id = pn_trx_id
AND line_id = pn_trx_line_id ;
CURSOR c_receive_trx IS
SELECT 'Y'
FROM rcv_transactions
WHERE transaction_id = pn_trx_loc_line_id
AND transaction_type IN( 'RECEIVE','RETURN TO VENDOR');
CURSOR c_source_doc_info IS
SELECT
applied_from_application_id
,applied_from_entity_code
,applied_from_event_class_code
,applied_from_trx_id
,applied_from_trx_line_id
,applied_from_loc_line_id
,applied_from_trx_level_type
,applied_from_trx_type
,applied_to_application_id
,applied_to_entity_code
,applied_to_event_class_code
,applied_to_trx_id
,applied_to_trx_line_id
,applied_to_loc_line_id
,applied_to_trx_level_type
,applied_to_trx_type
,ref_doc_application_id
,ref_doc_entity_code
,ref_doc_event_class_code
,ref_doc_trx_id
,ref_doc_line_id
,ref_doc_loc_line_id
,ref_doc_trx_level_type
,ref_doc_trx_type
FROM jai_tax_det_factors
WHERE application_id = pn_application_id
AND entity_code = pv_entity_code
AND event_class_code = pv_event_class_code
AND trx_id = pn_trx_id
AND trx_line_id = pn_trx_line_id
AND nvl(trx_loc_line_id,0) = nvl(pn_trx_loc_line_id,nvl(trx_loc_line_id,0))
AND tax_determination_basis = jai_tax_determination_pkg.COPY_BASIS;

CURSOR c_source_tpb_date (cn_application_id NUMBER


,cv_entity_code VARCHAR2
,cv_event_class_code VARCHAR2
,cn_trx_id NUMBER
,cn_trx_line_id NUMBER
,cn_trx_loc_line_id NUMBER
,cv_trx_level_type VARCHAR2
,cv_trx_type VARCHAR2)IS
SELECT DISTINCT tax_point_date
FROM JAI_TAX_LINES
WHERE application_id = cn_application_id
AND entity_code = cv_entity_code
AND event_class_code = cv_event_class_code
AND trx_id = cn_trx_id
AND (trx_line_id = nvl(cn_trx_line_id,trx_line_id) OR nvl(trx_line_id,-1) =
nvl(cn_trx_line_id,-1))
AND trx_level_type = cv_trx_level_type
AND ( trx_loc_line_id = nvl(cn_trx_loc_line_id,trx_loc_line_id)
OR nvl(trx_loc_line_id,-1) = nvl(cn_trx_loc_line_id,-1))
AND nvl(trx_type,'X') = nvl(cv_trx_type,nvl(trx_type,'X'));
ld_shipped_date DATE;
rec_source_doc_info c_source_doc_info%ROWTYPE;
ld_source_tpb_date DATE;
lv_redetermine_required VARCHAR2(1);*/
-- commented out by zhiwei.xin for bug#18619014 end.
lv_api_name CONSTANT VARCHAR2(50) := 'derive_tax_point_date';

-- added by zhiwei.xin for bug#18619014 begin


lv_derive_flag VARCHAR2(1);

CURSOR c_derive_rcv(cp_trx_id NUMBER) IS


SELECT 'Y'
FROM rcv_transactions
WHERE transaction_id = cp_trx_id
AND transaction_type IN ('DELIVER'
,'RETURN TO RECEIVING');

CURSOR c_rcv_shipped_date(cp_ship_hdr_id NUMBER) IS


SELECT shipped_date
FROM rcv_shipment_headers
WHERE shipment_header_id = cp_ship_hdr_id;

CURSOR c_so_shipped_date
(
cp_header_id NUMBER
,cp_line_id NUMBER
) IS
SELECT actual_shipment_date
FROM oe_order_lines_all
WHERE header_id = cp_header_id
AND line_id = cp_line_id;
-- added by zhiwei.xin for bug#18619014 end.

BEGIN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '---Begin----' || '()+');
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Input parameter:' || 'pn_application_id,' ||
pn_application_id || ',pv_entity_code:' ||
pv_entity_code || ',pv_event_type_code:' || pv_event_type_code
|| ',pv_event_class_code:' ||
pv_event_class_code || ',pn_trx_id:' || pn_trx_id ||
',pn_trx_line_id:' || pn_trx_line_id ||
',pd_trx_date:' || pd_trx_date || ',pv_tax_point_basis:' ||
pv_tax_point_basis);
END IF;

-- commented out by zhiwei.xin for bug#18619014 begin


/*OPEN c_source_doc_info;
FETCH c_source_doc_info INTO rec_source_doc_info;
CLOSE c_source_doc_info;

IF nvl(rec_source_doc_info.applied_from_application_id ,0) > 0 THEN


--for applied from columns not null, means will copy taxes from source anyway
unless source taxes not exist
OPEN c_source_tpb_date (rec_source_doc_info.applied_from_application_id
,rec_source_doc_info.applied_from_entity_code
,rec_source_doc_info.applied_from_event_class_code
,rec_source_doc_info.applied_from_trx_id
,rec_source_doc_info.applied_from_trx_line_id
,rec_source_doc_info.applied_from_loc_line_id
,rec_source_doc_info.applied_from_trx_level_type
,rec_source_doc_info.applied_from_trx_type);
FETCH c_source_tpb_date INTO ld_source_tpb_date;
CLOSE c_source_tpb_date;
ELSIF nvl(rec_source_doc_info.applied_to_application_id ,0) > 0 THEN
--for applied to columns not null, means will copy taxes from source anyway
unless source taxes not exist
OPEN c_source_tpb_date (rec_source_doc_info.applied_to_application_id
,rec_source_doc_info.applied_to_entity_code
,rec_source_doc_info.applied_to_event_class_code
,rec_source_doc_info.applied_to_trx_id
,rec_source_doc_info.applied_to_trx_line_id
,rec_source_doc_info.applied_to_loc_line_id
,rec_source_doc_info.applied_to_trx_level_type
,rec_source_doc_info.applied_to_trx_type);
FETCH c_source_tpb_date INTO ld_source_tpb_date;
CLOSE c_source_tpb_date;
ELSIF nvl(rec_source_doc_info.ref_doc_application_id ,0) > 0 THEN
--for ref doc columns not null, means will copy taxes from source if source
taxes modified
OPEN c_source_tpb_date (rec_source_doc_info.ref_doc_application_id
,rec_source_doc_info.ref_doc_entity_code
,rec_source_doc_info.ref_doc_event_class_code
,rec_source_doc_info.ref_doc_trx_id
,rec_source_doc_info.ref_doc_line_id
,rec_source_doc_info.ref_doc_loc_line_id
,rec_source_doc_info.ref_doc_trx_level_type
,rec_source_doc_info.ref_doc_trx_type);
FETCH c_source_tpb_date INTO ld_source_tpb_date;
CLOSE c_source_tpb_date;
END IF;--nvl(p_det_factor_rec.applied_from_application_id ,0) > 0
pd_tax_point_date := nvl(ld_source_tpb_date,pd_trx_date);
IF (pn_application_id = 707 AND pv_entity_code = 'RCV_TRANSACTION' AND
pv_event_class_code = 'RECEIVING') THEN
OPEN c_receive_trx;
FETCH c_receive_trx INTO lv_redetermine_required;
CLOSE c_receive_trx;
IF nvl(lv_redetermine_required,'N') = 'Y' THEN
OPEN c_get_shipped_date;
FETCH c_get_shipped_date INTO ld_shipped_date;
CLOSE c_get_shipped_date;
IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||
lv_api_name,'ld_shipped_date,'||ld_shipped_date);
END IF;
IF ld_shipped_date IS NOT NULL THEN
pd_tax_point_date := ld_shipped_date;
END IF;
END IF;
--TODO: need add ship date population for SO.
ELSIF (pn_application_id = 707 AND pv_entity_code = 'SALES_ORDER_ISSUE'
AND pv_event_class_code = 'SALES_ORDER_ISSUE') THEN
OPEN c_so_shipment_date;
FETCH c_so_shipment_date INTO ld_shipped_date;
CLOSE c_so_shipment_date;
IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||
lv_api_name,'ld_shipped_date,'||ld_shipped_date);
END IF;
IF ld_shipped_date IS NOT NULL THEN
pd_tax_point_date := ld_shipped_date;
END IF;
END IF;

--Added by Junjian for bug#18893118 begin


IF pn_application_id = 660 AND pv_entity_code = 'OE_ORDER_HEADERS'
and rec_source_doc_info.ref_doc_application_id = 660
AND rec_source_doc_info.ref_doc_entity_code = 'OE_ORDER_HEADERS'
THEN
pd_tax_point_date := pd_trx_date;
END IF;
--Added by Junjian for bug#18893118 end
*/
-- commented out by zhiwei.xin for bug#18619014 end.

-- added by zhiwei.xin for bug#18619014 begin


pd_tax_point_date := NULL;

IF pv_tax_point_basis = 'DELIVERY' THEN


IF (pn_application_id = 707 AND pv_entity_code = 'RCV_TRANSACTION' AND
pv_event_class_code = 'RECEIVING') THEN
OPEN c_derive_rcv(cp_trx_id => pn_trx_loc_line_id);
FETCH c_derive_rcv
INTO lv_derive_flag;
CLOSE c_derive_rcv;

IF nvl(lv_derive_flag
,'N') = 'Y' THEN
/*Commented by vkaranam for bug#25879349,as the tax point date should be
the tax invoice date
in case of receive and RTV
OPEN c_rcv_shipped_date(cp_ship_hdr_id => pn_trx_id);
FETCH c_rcv_shipped_date INTO pd_tax_point_date;
CLOSE c_rcv_shipped_date;
*/
pd_tax_point_date := pd_trx_date; --25879349
END IF;

ELSIF (pn_application_id = 707 AND pv_entity_code = 'SALES_ORDER_ISSUE' AND


pv_event_class_code = 'SALES_ORDER_ISSUE') THEN

OPEN c_so_shipped_date(cp_header_id => pn_trx_id


,cp_line_id => pn_trx_line_id);
FETCH c_so_shipped_date
INTO pd_tax_point_date;
CLOSE c_so_shipped_date;

END IF;
ELSIF pv_tax_point_basis = 'INVOICE' THEN

IF pn_application_id = 200
AND pv_entity_code = 'AP_INVOICES'
AND pv_event_type_code = 'STANDARD VALIDATED TAX' THEN
pd_tax_point_date := pd_trx_date;
ELSIF pn_application_id = 222
AND pv_entity_code = 'TRANSACTIONS'
AND pv_event_type_code IN ('CM_COMPLETE'
,'DM_COMPLETE'
,'INV_COMPLETE') THEN
pd_tax_point_date := pd_trx_date;
END IF;

END IF;
-- added by zhiwei.xin for bug#18619014 end.

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'return pd_tax_point_date as :' || pd_tax_point_date);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
END derive_tax_point_date;

/*---------------------------------------------------------------------------------
-------------------------+
| Created By : Wenqiong Zhou
|
| Creation Date : 10/Apr/2013
|
| Bug Number/ER Name : Phase IV Tax Determination
|
| SubProgram Name : update_tax_lines
|
| Type : PROCEDURE
|
| Purpose : This procedure is to update tax amt in tax lines after
re-calculation |
|
|
| TDD Reference : Section
|
| Assumptions :
|
| Called From : called by recalculate_tax_wrapper
|

|----------------------------------------------------------------------------------
-------------------------|
| parameters IN/OUT Type Required
Description and Purpose |
| ------------ -------- ------ ----------
------------------------- |
| p_tax_lines_tbl IN TAX_LINES_TBL yes Tax
Lines Table type |
| pv_process_status OUT VARCHAR2 yes
Process status |
| pv_process_message OUT VARCHAR2 yes
Process message |
*----------------------------------------------------------------------------------
------------------------*/
PROCEDURE update_tax_lines
(
p_tax_lines_tbl IN tax_lines_tbl
,pv_call_from IN VARCHAR2 DEFAULT NULL --Added by Qinglei for Integration
Test
,pv_process_status OUT NOCOPY VARCHAR2
,pv_process_message OUT NOCOPY VARCHAR2
) IS

rec_tax_line jai_tax_lines%ROWTYPE;
lv_api_name CONSTANT VARCHAR2(50) := 'update_tax_lines';
BEGIN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----begin----' || '()+');
END IF;
pv_process_status := FND_API.G_RET_STS_SUCCESS;

/*Added by Qinglei for bug#20090376 begin*/


IF p_tax_lines_tbl.count <= 0 THEN
RETURN;
END IF;
/*Added by Qinglei for bug#20090376 end*/
FOR i IN p_tax_lines_tbl.first .. p_tax_lines_tbl.last LOOP
rec_tax_line := NULL;
rec_tax_line := p_tax_lines_tbl(i);

IF nvl(pv_call_from
,'BASE') <> 'INTERFACE' THEN
--Added by Qinglei for integration test
UPDATE jai_tax_lines

SET original_tax_amt = rounded_tax_amt_fun_curr


-- keep the rounded_tax_amt_fun_curr in original tax amt col just
for tracking
,trx_uom = rec_tax_line.trx_uom
,item_id = rec_tax_line.item_id
,unit_price = rec_tax_line.unit_price
,line_amt = rec_tax_line.line_amt
,trx_line_quantity = rec_tax_line.trx_line_quantity
,trx_currency_code = rec_tax_line.trx_currency_code
,currency_conversion_date =
rec_tax_line.currency_conversion_date
,currency_conversion_type =
rec_tax_line.currency_conversion_type
,currency_conversion_rate =
rec_tax_line.currency_conversion_rate
,tax_currency_code = rec_tax_line.tax_currency_code
,tax_currency_conversion_date =
rec_tax_line.tax_currency_conversion_date
,tax_currency_conversion_type =
rec_tax_line.tax_currency_conversion_type
,tax_currency_conversion_rate =
rec_tax_line.tax_currency_conversion_rate
,trx_date = NVL(rec_tax_line.TRX_DATE,trx_date)
--AELLURU 27490388
,functional_currency_code =
rec_tax_line.functional_currency_code
,line_assessable_value = rec_tax_line.line_assessable_value
,tax_regime_id = rec_tax_line.tax_regime_id
,tax_regime_code = rec_tax_line.tax_regime_code
,tax_regime_type = rec_tax_line.tax_regime_type
,first_party_reg_id = rec_tax_line.first_party_reg_id
,first_party_primary_reg_name =
rec_tax_line.first_party_primary_reg_name
,first_party_primary_reg_num =
rec_tax_line.first_party_primary_reg_num
,first_party_secondary_reg_name =
rec_tax_line.first_party_secondary_reg_name
,first_party_secondary_reg_num =
rec_tax_line.first_party_secondary_reg_num
,num_of_return_days = rec_tax_line.num_of_return_days
,reporting_only_flag = rec_tax_line.reporting_only_flag
,tax_authority_id = rec_tax_line.tax_authority_id
,tax_authority_site_id = rec_tax_line.tax_authority_site_id
,third_party_reg_id = rec_tax_line.third_party_reg_id
,third_party_primary_reg_name =
rec_tax_line.third_party_primary_reg_name
,third_party_primary_reg_num =
rec_tax_line.third_party_primary_reg_num
,third_party_secondary_reg_name =
rec_tax_line.third_party_secondary_reg_name
,third_party_secondary_reg_num =
rec_tax_line.third_party_secondary_reg_num
,assessable_price_list_id =
rec_tax_line.assessable_price_list_id
,tax_type_id = rec_tax_line.tax_type_id
,abatement_flag = rec_tax_line.abatement_flag
,update_vendor_on_transaction =
rec_tax_line.update_vendor_on_transaction
,offset_flag = rec_tax_line.offset_flag
,recoverable_flag = rec_tax_line.recoverable_flag
,self_assessed_flag = rec_tax_line.self_assessed_flag
,reverse_credit_on_shipment =
rec_tax_line.reverse_credit_on_shipment
,credit_basis_self_assessed =
rec_tax_line.credit_basis_self_assessed
,tax_point_basis = rec_tax_line.tax_point_basis
,tax_point_date = rec_tax_line.tax_point_date
,tax_rate_id = rec_tax_line.tax_rate_id
,tax_rate_code = rec_tax_line.tax_rate_code
,tax_rate_type = rec_tax_line.tax_rate_type
,tax_status = rec_tax_line.tax_status
,recovery_percentage = rec_tax_line.recovery_percentage
,inclusive_flag = rec_tax_line.inclusive_flag
,tax_rate_percentage = rec_tax_line.tax_rate_percentage
,tax_rate_uom = rec_tax_line.tax_rate_uom
,tax_rate_uom_rate = rec_tax_line.tax_rate_uom_rate
,tax_rate_abatement_type =
rec_tax_line.tax_rate_abatement_type
,abatement_percentage = rec_tax_line.abatement_percentage
,tax_rate_classification =
rec_tax_line.tax_rate_classification
,standard_rate = rec_tax_line.standard_rate
,form_type = rec_tax_line.form_type
,actual_tax_rate = rec_tax_line.actual_tax_rate
,rounding_level = rec_tax_line.rounding_level
,tax_rounded_to = rec_tax_line.tax_rounded_to
,tax_rounding_factor = rec_tax_line.tax_rounding_factor
,taxable_rounded_to = rec_tax_line.taxable_rounded_to
,taxable_rounding_factor =
rec_tax_line.taxable_rounding_factor
,quantity_rounded_to = rec_tax_line.quantity_rounded_to
,quantity_rounding_factor =
rec_tax_line.quantity_rounding_factor
,unround_taxable_amt_trx_curr =
rec_tax_line.unround_taxable_amt_trx_curr
,unround_taxable_amt_tax_curr =
rec_tax_line.unround_taxable_amt_tax_curr
,unround_taxable_amt_fun_curr =
rec_tax_line.unround_taxable_amt_fun_curr
,unround_tax_amt_trx_curr =
rec_tax_line.unround_tax_amt_trx_curr
,unround_tax_amt_tax_curr =
rec_tax_line.unround_tax_amt_tax_curr
,unround_tax_amt_fun_curr =
rec_tax_line.unround_tax_amt_fun_curr
,unrounded_uom_conv_qty = rec_tax_line.unrounded_uom_conv_qty
,rounded_tax_amt_trx_curr =
rec_tax_line.rounded_tax_amt_trx_curr
,rounded_tax_amt_tax_curr =
rec_tax_line.rounded_tax_amt_tax_curr
,rounded_tax_amt_fun_curr =
rec_tax_line.rounded_tax_amt_fun_curr
,rounded_taxable_amt_trx_curr =
rec_tax_line.rounded_taxable_amt_trx_curr
,rounded_taxable_amt_tax_curr =
rec_tax_line.rounded_taxable_amt_tax_curr
,rounded_taxable_amt_fun_curr =
rec_tax_line.rounded_taxable_amt_fun_curr
,rounded_quantity = rec_tax_line.rounded_quantity
,rec_tax_amt_trx_curr = rec_tax_line.rec_tax_amt_trx_curr
,rec_tax_amt_tax_curr = rec_tax_line.rec_tax_amt_tax_curr
,rec_tax_amt_funcl_curr = rec_tax_line.rec_tax_amt_funcl_curr
,nrec_tax_amt_trx_curr = rec_tax_line.nrec_tax_amt_trx_curr
,nrec_tax_amt_tax_curr = rec_tax_line.nrec_tax_amt_tax_curr
,nrec_tax_amt_funcl_curr =
rec_tax_line.nrec_tax_amt_funcl_curr
,encumberance_nr_tax_amt =
rec_tax_line.encumberance_nr_tax_amt
,encumberance_nr_func_tax_amt =
rec_tax_line.encumberance_nr_func_tax_amt
,encumberance_status_flag =
rec_tax_line.encumberance_status_flag
-- added by zhiwei.xin for form tracking on 13-DEC-2013.
,taxable_basis = rec_tax_line.taxable_basis

/* Bug#26799523, dejiang.liu/20180108. Add logic to update


organization info. */
,org_id = rec_tax_line.org_id
,organization_id = rec_tax_line.organization_id
,location_id = rec_tax_line.location_id

,object_version_number = object_version_number + 1
,last_updated_by = fnd_global.user_id
,last_update_date = SYSDATE
,last_update_login = fnd_global.user_id
WHERE tax_line_num = rec_tax_line.tax_line_num
AND det_factor_id = rec_tax_line.det_factor_id;

delete from jai_process_recovery_dtls


where tax_line_num = rec_tax_line.tax_line_num
AND det_factor_id = rec_tax_line.det_factor_id;

---start additions by vkaranam for bug#27735601

if nvl(rec_tax_line.recoverable_flag,'N')='Y' and
rec_tax_line.tax_point_basis is not null
and
(rec_tax_line.entity_code IN ('RCV_TRANSACTION') AND rec_tax_line.TRX_TYPE not in
('RECEIVE','RETURN TO VENDOR') and rec_tax_line.tax_point_basis='DELIVERY')
and nvl(rec_tax_line.rec_tax_amt_funcl_curr,0)<>0
and rec_tax_line.tax_line_id>0
then

DELETE FROM jai_process_recovery_dtls


WHERE TAX_LINE_ID=rec_tax_line.tax_line_id;

jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME||lv_api_name,'before insert into


jai_process_recovery_dtls');

INSERT INTO jai_process_recovery_dtls


(tax_line_id
,det_factor_id
,org_id
,ledger_id
,organization_id
,location_id
,application_id
,entity_code
,event_class_code
,event_type_code
,tax_event_class_code
,tax_event_type_code
,trx_id
,trx_line_id
,trx_level_type
,trx_number
,trx_date
,trx_line_number
,trx_loc_line_id
,trx_type
,legal_entity_id
,frozen_flag
,party_type
,party_id
,party_site_id
,trx_uom
,item_id
,unit_price
,line_amt
,trx_line_quantity
,trx_currency_code
,currency_conversion_date
,currency_conversion_type
,currency_conversion_rate
,tax_currency_code
,tax_currency_conversion_date
,tax_currency_conversion_type
,tax_currency_conversion_rate
,functional_currency_code
,line_assessable_value
,tax_regime_id
,tax_regime_code
,tax_regime_type
,first_party_reg_id
,first_party_primary_reg_name
,first_party_primary_reg_num
,first_party_secondary_reg_name
,first_party_secondary_reg_num
,num_of_return_days
,reporting_only_flag
,tax_authority_id
,tax_authority_site_id
,third_party_reg_id
,third_party_primary_reg_name
,third_party_primary_reg_num
,third_party_secondary_reg_name
,third_party_secondary_reg_num
,assessable_price_list_id
,tax_type_id
,abatement_flag
,update_vendor_on_transaction
,offset_flag
,recoverable_flag
,self_assessed_flag
,reverse_credit_on_shipment
,credit_basis_self_assessed
,tax_point_basis
,tax_point_date
,tax_rate_id
,tax_rate_code
,tax_rate_type
,tax_status
,recovery_percentage
,inclusive_flag
,tax_rate_percentage
,tax_rate_uom
,tax_rate_uom_rate
,tax_rate_abatement_type
,abatement_percentage
,tax_rate_classification
,standard_rate
,form_type
,actual_tax_rate
,rounding_level
,tax_rounded_to
,tax_rounding_factor
,taxable_rounded_to
,taxable_rounding_factor
,quantity_rounded_to
,quantity_rounding_factor
,unround_taxable_amt_trx_curr
,unround_taxable_amt_tax_curr
,unround_taxable_amt_fun_curr
,unround_tax_amt_trx_curr
,unround_tax_amt_tax_curr
,unround_tax_amt_fun_curr
,unrounded_uom_conv_qty
,rounded_tax_amt_trx_curr
,rounded_tax_amt_tax_curr
,rounded_tax_amt_fun_curr
,rounded_taxable_amt_trx_curr
,rounded_taxable_amt_tax_curr
,rounded_taxable_amt_fun_curr
,rounded_quantity
,rec_tax_amt_trx_curr
,rec_tax_amt_tax_curr
,rec_tax_amt_funcl_curr
,nrec_tax_amt_trx_curr
,nrec_tax_amt_tax_curr
,nrec_tax_amt_funcl_curr
,manual_overridden_flag
,manual_tax_line_flag
,copied_from_other_doc_flag
,encumberance_nr_tax_amt
,encumberance_nr_func_tax_amt
,encumberance_status_flag
,tax_line_num
,precedence_1
,precedence_2
,precedence_3
,precedence_4
,precedence_5
,precedence_6
,precedence_7
,precedence_8
,precedence_9
,precedence_10
,precedence_11
,precedence_12
,precedence_13
,precedence_14
,precedence_15
,precedence_16
,precedence_17
,precedence_18
,precedence_19
,precedence_20
,ref_doc_application_id
,ref_doc_entity_code
,ref_doc_event_class_code
,ref_doc_trx_id
,ref_doc_trx_type
,ref_doc_line_id
,ref_doc_loc_line_id
,ref_doc_trx_level_type
,applied_to_application_id
,applied_to_entity_code
,applied_to_event_class_code
,applied_to_trx_id
,applied_to_trx_line_id
,applied_from_application_id
,applied_from_entity_code
,applied_from_event_class_code
,applied_from_trx_id
,applied_from_trx_line_id
,reporting_type_id
,reporting_code
,tax_invoice_date
,tax_invoice_num
,user_entered_av --Added by Wenqiong for bug19442352
,taxable_basis -- added by zhiwei.xin for form tracking on 13-DEC-2013
--,RETROACTIVE_FLAG --Added by qinglei for retroactive pricing 24-Dec-
2013
--added by Wenqiong for Exemption begin
,exemption_hdr_id
,tax_amt_before_exemption
,exemption_type
,tracking_num
,exemption_num
,exemption_date
,proof_of_export_num
,proof_received_date
--added by Wenqiong for Exemption end
,record_type_code
,creation_date
,created_by
,last_update_date
,last_updated_by
,last_update_login
,object_version_number)
VALUES
(rec_tax_line.tax_line_id
,rec_tax_line.det_factor_id
,rec_tax_line.org_id
,rec_tax_line.ledger_id
,rec_tax_line.organization_id
,rec_tax_line.location_id
,rec_tax_line.application_id
,rec_tax_line.entity_code
,rec_tax_line.event_class_code
,rec_tax_line.event_type_code
,rec_tax_line.tax_event_class_code
,rec_tax_line.tax_event_type_code
,rec_tax_line.trx_id
,rec_tax_line.trx_line_id
,rec_tax_line.trx_level_type
,rec_tax_line.trx_number
,rec_tax_line.trx_date
,rec_tax_line.trx_line_number
,rec_tax_line.trx_loc_line_id
,rec_tax_line.trx_type
,rec_tax_line.legal_entity_id
,nvl(rec_tax_line.frozen_flag
,'N')
,rec_tax_line.party_type
,rec_tax_line.party_id
,rec_tax_line.party_site_id
,rec_tax_line.trx_uom
,rec_tax_line.item_id
,rec_tax_line.unit_price
,rec_tax_line.line_amt
,rec_tax_line.trx_line_quantity
,rec_tax_line.trx_currency_code
,rec_tax_line.currency_conversion_date
,rec_tax_line.currency_conversion_type
,rec_tax_line.currency_conversion_rate
,rec_tax_line.tax_currency_code
,rec_tax_line.tax_currency_conversion_date
,rec_tax_line.tax_currency_conversion_type
,rec_tax_line.tax_currency_conversion_rate
,rec_tax_line.functional_currency_code
,rec_tax_line.line_assessable_value
,rec_tax_line.tax_regime_id
,rec_tax_line.tax_regime_code
,rec_tax_line.tax_regime_type
--,rec_tax_line.REGIME_JURISDICTION
,rec_tax_line.first_party_reg_id
,rec_tax_line.first_party_primary_reg_name
,rec_tax_line.first_party_primary_reg_num
,rec_tax_line.first_party_secondary_reg_name
,rec_tax_line.first_party_secondary_reg_num
,rec_tax_line.num_of_return_days
,rec_tax_line.reporting_only_flag
,rec_tax_line.tax_authority_id
,rec_tax_line.tax_authority_site_id
,rec_tax_line.third_party_reg_id
,rec_tax_line.third_party_primary_reg_name
,rec_tax_line.third_party_primary_reg_num
,rec_tax_line.third_party_secondary_reg_name
,rec_tax_line.third_party_secondary_reg_num
,rec_tax_line.assessable_price_list_id
,rec_tax_line.tax_type_id
,rec_tax_line.abatement_flag
,rec_tax_line.update_vendor_on_transaction
,rec_tax_line.offset_flag
,rec_tax_line.recoverable_flag
,rec_tax_line.self_assessed_flag
,rec_tax_line.reverse_credit_on_shipment
,rec_tax_line.credit_basis_self_assessed
,rec_tax_line.tax_point_basis
,rec_tax_line.tax_point_date
,rec_tax_line.tax_rate_id
,rec_tax_line.tax_rate_code
,rec_tax_line.tax_rate_type
,rec_tax_line.tax_status
,rec_tax_line.recovery_percentage
,rec_tax_line.inclusive_flag
,rec_tax_line.tax_rate_percentage
,rec_tax_line.tax_rate_uom
,rec_tax_line.tax_rate_uom_rate
,rec_tax_line.tax_rate_abatement_type
,rec_tax_line.abatement_percentage
,rec_tax_line.tax_rate_classification
,rec_tax_line.standard_rate
,rec_tax_line.form_type
,rec_tax_line.actual_tax_rate
,rec_tax_line.rounding_level
,rec_tax_line.tax_rounded_to
,rec_tax_line.tax_rounding_factor
,rec_tax_line.taxable_rounded_to
,rec_tax_line.taxable_rounding_factor
,rec_tax_line.quantity_rounded_to
,rec_tax_line.quantity_rounding_factor
,rec_tax_line.unround_taxable_amt_trx_curr
,rec_tax_line.unround_taxable_amt_tax_curr
,rec_tax_line.unround_taxable_amt_fun_curr
,rec_tax_line.unround_tax_amt_trx_curr
,rec_tax_line.unround_tax_amt_tax_curr
,rec_tax_line.unround_tax_amt_fun_curr
,rec_tax_line.unrounded_uom_conv_qty
,rec_tax_line.rounded_tax_amt_trx_curr
,rec_tax_line.rounded_tax_amt_tax_curr
,rec_tax_line.rounded_tax_amt_fun_curr
,rec_tax_line.rounded_taxable_amt_trx_curr
,rec_tax_line.rounded_taxable_amt_tax_curr
,rec_tax_line.rounded_taxable_amt_fun_curr
,rec_tax_line.rounded_quantity
,rec_tax_line.rec_tax_amt_trx_curr
,rec_tax_line.rec_tax_amt_tax_curr
,rec_tax_line.rec_tax_amt_funcl_curr
,rec_tax_line.nrec_tax_amt_trx_curr
,rec_tax_line.nrec_tax_amt_tax_curr
,rec_tax_line.nrec_tax_amt_funcl_curr
,nvl(rec_tax_line.manual_overridden_flag
,'N')
,nvl(rec_tax_line.manual_tax_line_flag
,'N')
,rec_tax_line.copied_from_other_doc_flag
,rec_tax_line.encumberance_nr_tax_amt
,rec_tax_line.encumberance_nr_func_tax_amt
,rec_tax_line.encumberance_status_flag
,rec_tax_line.tax_line_num
,rec_tax_line.precedence_1
,rec_tax_line.precedence_2
,rec_tax_line.precedence_3
,rec_tax_line.precedence_4
,rec_tax_line.precedence_5
,rec_tax_line.precedence_6
,rec_tax_line.precedence_7
,rec_tax_line.precedence_8
,rec_tax_line.precedence_9
,rec_tax_line.precedence_10
,rec_tax_line.precedence_11
,rec_tax_line.precedence_12
,rec_tax_line.precedence_13
,rec_tax_line.precedence_14
,rec_tax_line.precedence_15
,rec_tax_line.precedence_16
,rec_tax_line.precedence_17
,rec_tax_line.precedence_18
,rec_tax_line.precedence_19
,rec_tax_line.precedence_20
,rec_tax_line.ref_doc_application_id
,rec_tax_line.ref_doc_entity_code
,rec_tax_line.ref_doc_event_class_code
,rec_tax_line.ref_doc_trx_id
,rec_tax_line.ref_doc_trx_type
,rec_tax_line.ref_doc_line_id
,rec_tax_line.ref_doc_loc_line_id
,rec_tax_line.ref_doc_trx_level_type
,rec_tax_line.applied_to_application_id
,rec_tax_line.applied_to_entity_code
,rec_tax_line.applied_to_event_class_code
,rec_tax_line.applied_to_trx_id
,rec_tax_line.applied_to_trx_line_id
,rec_tax_line.applied_from_application_id
,rec_tax_line.applied_from_entity_code
,rec_tax_line.applied_from_event_class_code
,rec_tax_line.applied_from_trx_id
,rec_tax_line.applied_from_trx_line_id
,rec_tax_line.reporting_type_id
,rec_tax_line.reporting_code
,rec_tax_line.tax_invoice_date
,rec_tax_line.tax_invoice_num
,rec_tax_line.user_entered_av --Added by Wenqiong for bug19442352
,rec_tax_line.taxable_basis -- added by zhiwei.xin for form tracking on
13-DEC-2013
--,rec_tax_line.RETROACTIVE_FLAG --Added by qinglei for retroactive
pricing 24-Dec-2013
--added by Wenqiong for Exemption begin
,rec_tax_line.exemption_hdr_id
,rec_tax_line.tax_amt_before_exemption
,rec_tax_line.exemption_type
,rec_tax_line.tracking_num
,rec_tax_line.exemption_num
,rec_tax_line.exemption_date
,rec_tax_line.proof_of_export_num
,rec_tax_line.proof_received_date
--added by Wenqiong for Exemption end
,nvl(rec_tax_line.record_type_code
,'DEFINED') --Updated by Wenqiong for Migration
,SYSDATE
,fnd_global.user_id
,SYSDATE
,fnd_global.user_id
,fnd_global.user_id
,1);
end if;

---end additions by vkaranam for bug#27735601


ELSIF pv_call_from = 'INTERFACE' THEN
UPDATE jai_tax_lines_interface
SET original_tax_amt = rounded_tax_amt_fun_curr
-- keep the rounded_tax_amt_fun_curr in original tax amt col just
for tracking
,trx_uom = rec_tax_line.trx_uom
,item_id = rec_tax_line.item_id
,unit_price = rec_tax_line.unit_price
,line_amt = rec_tax_line.line_amt
,trx_line_quantity = rec_tax_line.trx_line_quantity
,trx_currency_code = rec_tax_line.trx_currency_code
,currency_conversion_date =
rec_tax_line.currency_conversion_date
,currency_conversion_type =
rec_tax_line.currency_conversion_type
,currency_conversion_rate =
rec_tax_line.currency_conversion_rate
,tax_currency_code = rec_tax_line.tax_currency_code
,tax_currency_conversion_date =
rec_tax_line.tax_currency_conversion_date
,trx_date = NVL(rec_tax_line.TRX_DATE,trx_date)
--AELLURU 27490388
,tax_currency_conversion_type =
rec_tax_line.tax_currency_conversion_type
,tax_currency_conversion_rate =
rec_tax_line.tax_currency_conversion_rate
,functional_currency_code =
rec_tax_line.functional_currency_code
,line_assessable_value = rec_tax_line.line_assessable_value
,tax_regime_id = rec_tax_line.tax_regime_id
,tax_regime_code = rec_tax_line.tax_regime_code
,tax_regime_type = rec_tax_line.tax_regime_type
,first_party_reg_id = rec_tax_line.first_party_reg_id
,first_party_primary_reg_name =
rec_tax_line.first_party_primary_reg_name
,first_party_primary_reg_num =
rec_tax_line.first_party_primary_reg_num
,first_party_secondary_reg_name =
rec_tax_line.first_party_secondary_reg_name
,first_party_secondary_reg_num =
rec_tax_line.first_party_secondary_reg_num
,num_of_return_days = rec_tax_line.num_of_return_days
,reporting_only_flag = rec_tax_line.reporting_only_flag
,tax_authority_id = rec_tax_line.tax_authority_id
,tax_authority_site_id = rec_tax_line.tax_authority_site_id
,third_party_reg_id = rec_tax_line.third_party_reg_id
,third_party_primary_reg_name =
rec_tax_line.third_party_primary_reg_name
,third_party_primary_reg_num =
rec_tax_line.third_party_primary_reg_num
,third_party_secondary_reg_name =
rec_tax_line.third_party_secondary_reg_name
,third_party_secondary_reg_num =
rec_tax_line.third_party_secondary_reg_num
,assessable_price_list_id =
rec_tax_line.assessable_price_list_id
,tax_type_id = rec_tax_line.tax_type_id
,abatement_flag = rec_tax_line.abatement_flag
,update_vendor_on_transaction =
rec_tax_line.update_vendor_on_transaction
,offset_flag = rec_tax_line.offset_flag
,recoverable_flag = rec_tax_line.recoverable_flag
,self_assessed_flag = rec_tax_line.self_assessed_flag
,reverse_credit_on_shipment =
rec_tax_line.reverse_credit_on_shipment
,credit_basis_self_assessed =
rec_tax_line.credit_basis_self_assessed
,tax_point_basis = rec_tax_line.tax_point_basis
,tax_point_date = rec_tax_line.tax_point_date
,tax_rate_id = rec_tax_line.tax_rate_id
,tax_rate_code = rec_tax_line.tax_rate_code
,tax_rate_type = rec_tax_line.tax_rate_type
,tax_status = rec_tax_line.tax_status
,recovery_percentage = rec_tax_line.recovery_percentage
,inclusive_flag = rec_tax_line.inclusive_flag
,tax_rate_percentage = rec_tax_line.tax_rate_percentage
,tax_rate_uom = rec_tax_line.tax_rate_uom
,tax_rate_uom_rate = rec_tax_line.tax_rate_uom_rate
,tax_rate_abatement_type =
rec_tax_line.tax_rate_abatement_type
,abatement_percentage = rec_tax_line.abatement_percentage
,tax_rate_classification =
rec_tax_line.tax_rate_classification
,standard_rate = rec_tax_line.standard_rate
,form_type = rec_tax_line.form_type
,actual_tax_rate = rec_tax_line.actual_tax_rate
,rounding_level = rec_tax_line.rounding_level
,tax_rounded_to = rec_tax_line.tax_rounded_to
,tax_rounding_factor = rec_tax_line.tax_rounding_factor
,taxable_rounded_to = rec_tax_line.taxable_rounded_to
,taxable_rounding_factor =
rec_tax_line.taxable_rounding_factor
,quantity_rounded_to = rec_tax_line.quantity_rounded_to
,quantity_rounding_factor =
rec_tax_line.quantity_rounding_factor
,unround_taxable_amt_trx_curr =
rec_tax_line.unround_taxable_amt_trx_curr
,unround_taxable_amt_tax_curr =
rec_tax_line.unround_taxable_amt_tax_curr
,unround_taxable_amt_fun_curr =
rec_tax_line.unround_taxable_amt_fun_curr
,unround_tax_amt_trx_curr =
rec_tax_line.unround_tax_amt_trx_curr
,unround_tax_amt_tax_curr =
rec_tax_line.unround_tax_amt_tax_curr
,unround_tax_amt_fun_curr =
rec_tax_line.unround_tax_amt_fun_curr
,unrounded_uom_conv_qty = rec_tax_line.unrounded_uom_conv_qty
,rounded_tax_amt_trx_curr =
rec_tax_line.rounded_tax_amt_trx_curr
,rounded_tax_amt_tax_curr =
rec_tax_line.rounded_tax_amt_tax_curr
,rounded_tax_amt_fun_curr =
rec_tax_line.rounded_tax_amt_fun_curr
,rounded_taxable_amt_trx_curr =
rec_tax_line.rounded_taxable_amt_trx_curr
,rounded_taxable_amt_tax_curr =
rec_tax_line.rounded_taxable_amt_tax_curr
,rounded_taxable_amt_fun_curr =
rec_tax_line.rounded_taxable_amt_fun_curr
,rounded_quantity = rec_tax_line.rounded_quantity
,rec_tax_amt_trx_curr = rec_tax_line.rec_tax_amt_trx_curr
,rec_tax_amt_tax_curr = rec_tax_line.rec_tax_amt_tax_curr
,rec_tax_amt_funcl_curr = rec_tax_line.rec_tax_amt_funcl_curr
,nrec_tax_amt_trx_curr = rec_tax_line.nrec_tax_amt_trx_curr
,nrec_tax_amt_tax_curr = rec_tax_line.nrec_tax_amt_tax_curr
,nrec_tax_amt_funcl_curr =
rec_tax_line.nrec_tax_amt_funcl_curr
,encumberance_nr_tax_amt =
rec_tax_line.encumberance_nr_tax_amt
,encumberance_nr_func_tax_amt =
rec_tax_line.encumberance_nr_func_tax_amt
,encumberance_status_flag =
rec_tax_line.encumberance_status_flag

/* Bug#26799523, dejiang.liu/20180108. Add logic to update


organization info. */
,org_id = rec_tax_line.org_id
,organization_id = rec_tax_line.organization_id
,location_id = rec_tax_line.location_id

,object_version_number = object_version_number + 1
,last_updated_by = fnd_global.user_id
,last_update_date = SYSDATE
,last_update_login = fnd_global.user_id
WHERE tax_line_num = rec_tax_line.tax_line_num
AND interface_det_factor_id = rec_tax_line.det_factor_id;
END IF;

/*Added by Qinglei for bug#19560241 begin*/


/*IF rec_tax_line.application_id = 200
AND rec_tax_line.entity_code = 'AP_INVOICES'
AND rec_tax_line.event_class_code = 'STANDARD INVOICES' THEN*/

jai_delete_tax_dist(pr_tax_line => rec_tax_line


,pv_process_status => pv_process_status
,pv_process_message => pv_process_message);
/*END IF;*/
/*Added by Qinglei for bug#19560241 end*/

--Modified by Junjian for AP tax flow begin


jai_populate_tax_dist(pr_tax_line => rec_tax_line
,pv_process_status => pv_process_status
,pv_process_message => pv_process_message);
--Modified by Junjian for AP tax flow end
END LOOP;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'return status as :' || pv_process_status);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
EXCEPTION
WHEN FND_API.G_EXC_ERROR THEN
pv_process_status := FND_API.G_RET_STS_ERROR;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,SQLERRM);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;

WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN

pv_process_status := FND_API.G_RET_STS_UNEXP_ERROR;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,SQLERRM);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;

WHEN OTHERS THEN

pv_process_status := FND_API.G_RET_STS_UNEXP_ERROR;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,SQLERRM);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
END update_tax_lines;

/*---------------------------------------------------------------------------------
---------------------------+
| Created By : Wenqiong Zhou
|
| Creation Date : 10/Apr/2013
|
| Bug Number/ER Name : Phase IV Tax Determination
|
| SubProgram Name : recalculate_tax_wrapper
|
| Type : PROCEDURE
|
| Purpose : This procedure is to recalculate tax when just amount
related attributes changed. |
|
|
| TDD Reference : Section
|
| Assumptions :
|
| Called From : called by update_line_det_factors
|

|----------------------------------------------------------------------------------
--------------------------|
| parameters IN/OUT Type Required
Description and Purpose |
| ------------ -------- ------ ----------
------------------------- |
| pn_det_factor_id IN NUMBER yes
Det Factor ID |
| pv_process_status OUT VARCHAR2 yes
Process status |

*----------------------------------------------------------------------------------
---------------------------*/
PROCEDURE recalculate_tax_wrapper
(
pn_det_factor_id IN NUMBER
,pv_call_from IN VARCHAR2 DEFAULT NULL --Added by Qinglei for Integration
test
,pv_process_status OUT NOCOPY VARCHAR2
) IS

l_tax_lines_tbl tax_lines_tbl;
lv_process_message VARCHAR2(150);
lv_api_name CONSTANT VARCHAR2(50) := 'recalculate_tax_wrapper';
BEGIN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----begin----' || '()+');
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Input parameter:pn_det_factor_id,' || pn_det_factor_id);
END IF;
pv_process_status := FND_API.G_RET_STS_SUCCESS;
jai_tax_determination_pkg.prepare_tax_lines_tbl(pn_det_factor_id =>
pn_det_factor_id
,pn_tax_category_id => NULL
,pv_amt_factor_updated => 'Y'
--Added by Qinglei for
Integration test
,pv_call_from =>
pv_call_from
,p_tax_lines_tbl =>
l_tax_lines_tbl
,pv_process_status =>
pv_process_status);
IF pv_process_status <> FND_API.G_RET_STS_SUCCESS THEN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'return status as :' || pv_process_status);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
RETURN;
END IF;

/* Bug#21142100 start, Dejiang.Liu/150526. Modify to add parameter of


CALL_FROM. */
/*
jai_tax_determination_pkg.calculate_tax(p_tax_lines_tbl => l_tax_lines_tbl
,pv_process_status => pv_process_status
,pv_process_message => lv_process_message);
*/
jai_tax_determination_pkg.calculate_tax(p_tax_lines_tbl => l_tax_lines_tbl
,pv_call_from => pv_call_from
,pv_process_status => pv_process_status
,pv_process_message =>
lv_process_message);
/* Bug#21142100 end. */
IF pv_process_status <> FND_API.G_RET_STS_SUCCESS THEN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'return status as :' || pv_process_status);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
RETURN;

END IF;
/*AELLURU 27666686*/
IF (l_tax_lines_tbl.count > 0 AND l_tax_lines_tbl(1).application_id =222 and
l_tax_lines_tbl(1).ENTITY_CODE ='TRANSACTIONS')
--27742015
THEN
jai_delete_tax_dist(p_det_factor_id => pn_det_factor_id
,x_process_status => pv_process_status
,x_process_message => lv_process_message);

IF pv_process_status <> FND_API.G_RET_STS_SUCCESS THEN


IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'delete_tax_dist return status:' || pv_process_status);
END IF;
RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
END IF;
/*AELLURU 27666686*/
END IF;

jai_tax_determination_pkg.update_tax_lines(l_tax_lines_tbl
,pv_call_from --Added by Qinglei for
Integration test
,pv_process_status
,lv_process_message);

IF pv_process_status <> FND_API.G_RET_STS_SUCCESS THEN


IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'return status as :' || pv_process_status);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
END IF;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
--AELLURU 27742015
EXCEPTION
WHEN OTHERS THEN

pv_process_status := FND_API.G_RET_STS_UNEXP_ERROR;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,SQLERRM);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
--27742015
END recalculate_tax_wrapper;

/*---------------------------------------------------------------------------------
---------------------------------+
| Created By : Wenqiong Zhou
|
| Creation Date : 10/Apr/2013
|
| Bug Number/ER Name : Phase IV Tax Determination
|
| SubProgram Name : validate_precedence
|
| Type : PROCEDURE
|
| Purpose : This procedure is to check if precendence entered
valid. |
|
|
| TDD Reference : Section
|
| Assumptions :
|
| Called From : called by calculate_tax
|

|----------------------------------------------------------------------------------
--------------------------------|
| parameters IN/OUT Type Required
Description and Purpose |
| ------------ -------- ------ ----------
------------------------- |
| pn_tax_line_num IN NUMBER yes
Tax Line Num |
| precedence IN precedence_rec_type yes
Precendence record of this tax line |
| pv_process_status OUT VARCHAR2 yes
Process status |
| pv_process_message OUT VARCHAR2 yes
Process message |

*----------------------------------------------------------------------------------
---------------------------------*/
PROCEDURE validate_precedence
(
pn_tax_line_num IN NUMBER
,precedence IN precedence_rec_type
,pv_process_status OUT NOCOPY VARCHAR2
,pv_process_message OUT NOCOPY VARCHAR2
) IS
lv_api_name CONSTANT VARCHAR2(50) := 'validate_precedence';
BEGIN

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----Begin----' || '()+');
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'In put parameter: pn_tax_line_num is ' || pn_tax_line_num);
END IF;
pv_process_status := FND_API.G_RET_STS_SUCCESS;

FOR i IN 1 .. precedence.p.count - 1 LOOP


IF precedence.p(i) = pn_tax_line_num THEN
pv_process_status := FND_API.G_RET_STS_ERROR;
pv_process_message := 'Precedence cannot depend on itself.';
RAISE FND_API.G_EXC_ERROR;
END IF;

IF nvl(precedence.p(i)
,-1) <> -1
AND precedence.p(i) < 0 THEN
pv_process_status := FND_API.G_RET_STS_ERROR;
pv_process_message := 'Precedence cannot be negative.';
RAISE FND_API.G_EXC_ERROR;
END IF;

IF precedence.p(i) <> trunc(precedence.p(i)) THEN


pv_process_status := FND_API.G_RET_STS_ERROR;
pv_process_message := 'Precedence cannot be decimals.';
RAISE FND_API.G_EXC_ERROR;
END IF;
FOR j IN i + 1 .. precedence.p.count LOOP

IF nvl(precedence.p(i)
,-1) = -1
AND nvl(precedence.p(j)
,-1) <> -1 THEN
pv_process_status := FND_API.G_RET_STS_ERROR;
pv_process_message := 'Precedence Number can not be null as subsequent
Precedence Number has a value.';
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'precedence.p(' || j || '): ' || precedence.p(j) || ',
precedence.p(' || i || '): ' ||
precedence.p(i));
END IF;
RAISE FND_API.G_EXC_ERROR;
END IF;
IF nvl(precedence.p(i)
,-1) <> -1
AND nvl(precedence.p(j)
,-1) <> -1 THEN

IF precedence.p(i) = precedence.p(j) THEN


pv_process_status := FND_API.G_RET_STS_ERROR;
pv_process_message := 'Precedences cannot equal to each other.';
RAISE FND_API.G_EXC_ERROR;
END IF;
END IF;
END LOOP;
END LOOP;
EXCEPTION
WHEN FND_API.G_EXC_ERROR THEN
pv_process_status := FND_API.G_RET_STS_ERROR;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || ' error message:' || pv_process_message);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
WHEN OTHERS THEN
pv_process_status := FND_API.G_RET_STS_UNEXP_ERROR;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,SQLERRM);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
END validate_precedence;

/*---------------------------------------------------------------------------------
--------------------------+
| Created By : Wenqiong Zhou
|
| Creation Date : 10/Apr/2013
|
| Bug Number/ER Name : Phase IV Tax Determination
|
| SubProgram Name : check_io_location
|
| Type : PROCEDURE
|
| Purpose : This procedure is to check if inventory
organization/location missing for the trx. |
|
|
| TDD Reference : Section
|
| Assumptions :
|
| Called From : called by determine_tax
|

|----------------------------------------------------------------------------------
-------------------------|
| parameters IN/OUT Type Required
Description and Purpose |
| ------------ -------- ------ ----------
------------------------- |
| pn_application_id IN NUMBER yes
Application ID |
| pv_entity_code IN VARCHAR2 yes
Entity Code |
| pv_event_class_code IN VARCHAR2 yes
Event Class Code |
| pn_org_id IN NUMBER yes
Org ID |
| pn_trx_id IN NUMBER yes
Transaction ID |
| pn_trx_line_id IN NUMBER yes
Transaction Line ID |
| pv_process_status OUT VARCHAR2 yes
Process status |
| pv_process_message OUT VARCHAR2 yes
Process message |

*----------------------------------------------------------------------------------
--------------------------*/
PROCEDURE check_io_location
(
pn_application_id IN NUMBER
,pv_entity_code IN VARCHAR2
,pv_event_class_code IN VARCHAR2
,pn_org_id IN NUMBER
,pn_trx_id IN NUMBER
,pn_trx_line_id IN NUMBER -- Bug#19584708 added.
,pv_process_status OUT NOCOPY VARCHAR2
,pv_process_message OUT NOCOPY VARCHAR2
) IS
CURSOR c_io_location_missing IS
SELECT 'Y'
FROM jai_tax_det_factors
WHERE application_id = pn_application_id
AND entity_code = pv_entity_code
AND event_class_code = pv_event_class_code
AND trx_id = pn_trx_id
/* Bug#19584708, add trx_line_id condition. */
AND (pn_trx_line_id IS NULL OR trx_line_id = pn_trx_line_id)

--AND (organization_id IS NULL OR location_id IS NULL); -- commented


out by zhiwei.xin for bug #18813338
AND organization_id IS NULL; -- added by zhiwei.xin for bug #188013338
lv_missing VARCHAR2(1) := 'N';
lv_api_name CONSTANT VARCHAR2(50) := 'check_io_location';
BEGIN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----Begin----' || '()+');
END IF;
pv_process_status := FND_API.G_RET_STS_SUCCESS;
--Modified by Junjian on 07-01-2014 begin
/* Bug#25655604, dejiang.liu/20170322. Modify to add skip PROJECTS. */
--IF pv_entity_code IN ('AP_INVOICES','TRANSACTIONS') THEN
IF pv_entity_code IN ('AP_INVOICES'
,'TRANSACTIONS'
,'PROJECTS') THEN
NULL;
ELSE
OPEN c_io_location_missing;
FETCH c_io_location_missing
INTO lv_missing;
CLOSE c_io_location_missing;

IF lv_missing = 'Y' THEN


pv_process_status := FND_API.G_RET_STS_ERROR;
-- commented out by zhiwei.xin for bug #18813338
--pv_process_message := 'Inventory organization or location is missing.';
pv_process_message := 'Inventory organization is missing.'; -- added by
zhiwei.xin for bug #18813338
END IF;
END IF;
--Modified by Junjian on 07-01-2014 begin
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'return status:' || pv_process_status || ' , message: ' ||
pv_process_message);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
END check_io_location;
PROCEDURE override_tax_category_rule
(
pn_tax_rule_id IN NUMBER
,pn_tax_category_id IN NUMBER
,pn_det_factor_id IN NUMBER
,pv_call_from IN VARCHAR2 DEFAULT NULL --Added by Qinglei for Receiving
09-Jul-2013
,pv_process_status OUT NOCOPY VARCHAR2
,pv_process_message OUT NOCOPY VARCHAR2
) IS
l_tax_lines_tbl tax_lines_tbl;
lv_return_status VARCHAR2(30);
lv_process_message VARCHAR2(150);
lv_api_name CONSTANT VARCHAR2(50) := 'override_tax_category_rule';

CURSOR c_det_factor IS
SELECT trx_id
,application_id
,entity_code
,event_class_code
FROM jai_tax_det_factors
WHERE det_factor_id = pn_det_factor_id;

l_det_factor c_det_factor%ROWTYPE;

BEGIN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----Begin----' || '()+');
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Input parameters: pn_tax_rule_id:' || pn_tax_rule_id || '
,pn_tax_category_id :' ||
pn_tax_category_id || ' ,pn_det_factor_id :' ||
pn_det_factor_id);
END IF;
pv_process_status := FND_API.G_RET_STS_SUCCESS;
IF nvl(pn_det_factor_id
,0) = 0 THEN
pv_process_status := FND_API.G_RET_STS_ERROR;
pv_process_message := 'det factor id is required.';
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'return status:' || pv_process_status || ' , message: ' ||
pv_process_message);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;

ELSE
IF nvl(pn_tax_category_id
,0) <> 0 THEN
/*-------------------------
| prepare tax line tbl |
---------------------------*/
jai_tax_determination_pkg.prepare_tax_lines_tbl(pn_det_factor_id =>
pn_det_factor_id
,pn_tax_category_id =>
pn_tax_category_id
--Added by Qinglei for
Receiving 09-Jul-2013
,pv_call_from =>
pv_call_from
,p_tax_lines_tbl =>
l_tax_lines_tbl
,pv_process_status =>
lv_return_status);
IF lv_return_status <> FND_API.G_RET_STS_SUCCESS THEN
pv_process_status := lv_return_status;
pv_process_message := lv_process_message;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'prepare_tax_lines_tbl return status:' ||
pv_process_status);
END IF;
RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
END IF;
/*--------------------------
| calculate_tax |
---------------------------*/
jai_tax_determination_pkg.calculate_tax(p_tax_lines_tbl => l_tax_lines_tbl
--Added by Junjian for bug#18851582
,pv_call_from => pv_call_from
,pv_process_status =>
lv_return_status
,pv_process_message =>
lv_process_message);

IF lv_return_status <> FND_API.G_RET_STS_SUCCESS THEN


pv_process_status := lv_return_status;
pv_process_message := lv_process_message;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'calculate_tax return status:' || pv_process_status);
END IF;
RAISE FND_API.G_EXC_UNEXPECTED_ERROR;

END IF;

/*---------------------------------------
| delete tax lines |
| populate tax lines after calculation.|
---------------------------------------*/
jai_tax_determination_pkg.delete_tax_lines(pn_det_factor_id
--Modified by Qinglei for
Receiving 09-Jul-2013
,pv_call_from);
jai_tax_determination_pkg.populate_tax_lines(l_tax_lines_tbl
--Modified by Qinglei for
Receiving 09-Jul-2013
,pv_call_from
,lv_return_status
,lv_process_message);

IF lv_return_status <> FND_API.G_RET_STS_SUCCESS THEN


pv_process_status := lv_return_status;
pv_process_message := lv_process_message;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'populate_tax_lines return status:' || pv_process_status
|| 'message:' ||
lv_process_message);
END IF;
RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
END IF;
ELSE
--pn_tax_category_id is null
jai_tax_determination_pkg.delete_tax_lines(pn_det_factor_id
,pv_call_from); --Modified by
Qinglei for Receiving 09-Jul-2013
END IF; --nvl(pn_tax_category_id ,0) <> 0

-- added by zhiwei.xin for AR Distribution begin


OPEN c_det_factor;
FETCH c_det_factor
INTO l_det_factor;
CLOSE c_det_factor;

IF (G_LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_STATEMENT
,G_MODULE_NAME || lv_api_name
,'APPLICATION_ID : ' || l_det_factor.application_id || ',
TRX_ID : ' || l_det_factor.trx_id ||
', ENTITY_CODE : ' || l_det_factor.entity_code || ',
EVENT_CLASS_CODE :' ||
l_det_factor.event_class_code);
END IF;
jai_tax_determination_pkg.jai_update_tax_dist(p_det_factor_id =>
pn_det_factor_id
,p_trx_id =>
l_det_factor.trx_id
,p_application_id =>
l_det_factor.application_id
,p_entity_code =>
l_det_factor.entity_code
,p_event_class_code =>
l_det_factor.event_class_code
,p_tax_lines_tbl =>
l_tax_lines_tbl
,x_process_status =>
lv_return_status
,x_process_message =>
lv_process_message);

IF lv_return_status <> FND_API.G_RET_STS_SUCCESS THEN


pv_process_status := lv_return_status;
pv_process_message := lv_process_message;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'update_tax_dist return status:' || pv_process_status ||
', message:' || pv_process_message);
END IF;
RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
END IF;

-- added by zhiwei.xin for AR Distribution end.

--Modified by Qinglei for Receiving 09-Jul-2013 begin


IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'pn_tax_category_id=' || pn_tax_category_id ||
'pv_call_from=' || pv_call_from);
END IF;

IF nvl(pv_call_from
,'BASE') <> 'INTERFACE' THEN
UPDATE jai_tax_det_factors
SET tax_rule_id = pn_tax_rule_id
,override_tax_category_id = pn_tax_category_id
,default_tax_category_id = decode(nvl(pn_tax_category_id
,0)
,0
,pn_tax_category_id
--added by mani for copy basis
changes bug 26397775
,decode(tax_determination_basis
,'COPY_BASIS'
,pn_tax_category_id
,default_tax_category_id))
,user_modified_flag = 'Y'
,last_updated_by = fnd_global.user_id
,last_update_date = SYSDATE
,last_update_login = fnd_global.user_id
,object_version_number = object_version_number + 1
WHERE det_factor_id = pn_det_factor_id;
ELSE
UPDATE jai_det_factors_interface
SET tax_rule_id = pn_tax_rule_id
,override_tax_category_id = pn_tax_category_id
,default_tax_category_id = decode(nvl(pn_tax_category_id
,0)
,0
,pn_tax_category_id
--added by mani for copy basis
changes bug 26397775
,decode(tax_determination_basis
,'COPY_BASIS'
,pn_tax_category_id
,default_tax_category_id))
,user_modified_flag = 'Y'
,last_updated_by = fnd_global.user_id
,last_update_date = SYSDATE
,last_update_login = fnd_global.user_id
,object_version_number = object_version_number + 1
WHERE interface_det_factor_id = pn_det_factor_id;
END IF;
--Modified by Qinglei for Receiving 09-Jul-2013 end

END IF; --nvl(pn_det_factor_id,0) = 0


IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
EXCEPTION
WHEN OTHERS THEN
pv_process_status := FND_API.G_RET_STS_UNEXP_ERROR;
pv_process_message := substr(lv_process_message || ' , sqlerr:' || SQLERRM
,1
,2000); --Added by Junjian
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,SQLERRM);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
END override_tax_category_rule;

/*---------------------------------------------------------------------------------
-------------------------------+
| Created By : zhiwei.xin
|
| Creation Date : 19-APR-2013
|
| Bug Number/ER Name : Phase IV Transaction Common UI
|
| SubProgram Name : lock line
|
| Type : PROCEDURE
|
| Purpose : lock determination factor line before updating
|
| TDD Reference :
|
| Assumptions :
|
| Called From : JAINOC.fmb
|

|----------------------------------------------------------------------------------
-------------------------------|
| parameters IN/OUT Type Required
Description and Purpose |
| ------------ -------- ------ ----------
------------------------- |
| p_det_factor_id IN NUMBER yes
sequence id |
| p_obj_ver_num IN NUMBER yes object
version number |

-----------------------------------------------------------------------------------
-------------------------------*/
PROCEDURE lock_line
(
p_det_factor_id IN NUMBER
,p_version IN NUMBER
) IS
ln_version NUMBER;
lv_api_name CONSTANT VARCHAR2(50) := 'lock_line';
BEGIN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----Begin----' || '()+');
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Input parameters: p_det_factor_id:' || p_det_factor_id ||
' ,p_version :' || p_version);
END IF;
SELECT object_version_number
INTO ln_version
FROM jai_tax_det_factors
WHERE det_factor_id = p_det_factor_id
FOR UPDATE NOWAIT;

IF ln_version <> p_version THEN


fnd_message.set_name('JA'
,'JAI_DET_FACTORS_CHANGED');
app_exception.raise_exception;
END IF;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
EXCEPTION
WHEN OTHERS THEN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,SQLERRM);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
RAISE;
END lock_line;

--Added by Junjian for AP tax flow begin


FUNCTION get_tax_tpb(pr_tax_line jai_tax_lines%ROWTYPE) RETURN NUMBER IS

lv_tax_line_tpb jai_tax_lines.tax_point_basis%TYPE;
ln_tax_line_tpb NUMBER;

BEGIN
lv_tax_line_tpb := pr_tax_line.tax_point_basis;
IF lv_tax_line_tpb = 'DELIVERY' THEN
ln_tax_line_tpb := tpb_delivery;
ELSIF lv_tax_line_tpb = 'INVOICE' THEN
ln_tax_line_tpb := tpb_invoice;
ELSIF lv_tax_line_tpb = 'ACCOUNTING' THEN
ln_tax_line_tpb := tpb_accounting;
ELSIF lv_tax_line_tpb = 'PAYMENT' THEN
ln_tax_line_tpb := tpb_payment;
END IF;
RETURN ln_tax_line_tpb;

END get_tax_tpb;

FUNCTION get_event_tpb
(
cn_application_id NUMBER
,cv_entity_code VARCHAR2
,cv_event_class_code VARCHAR2
,cv_event_type_code VARCHAR2
) RETURN NUMBER IS
CURSOR c_event_tpb
(
cn_application_id NUMBER
,cv_entity_code VARCHAR2
,cv_event_class_code VARCHAR2
,cv_event_type_code VARCHAR2
) IS
SELECT DISTINCT tax_point_basis
FROM jai_evnt_cls_options
WHERE application_id = cn_application_id
AND entity_code = cv_entity_code
AND event_class_code = cv_event_class_code
AND event_type_code = cv_event_type_code;
lv_event_tpb jai_evnt_cls_options.tax_point_basis%TYPE;
ln_event_tpb NUMBER;

BEGIN

OPEN c_event_tpb(cn_application_id
,cv_entity_code
,cv_event_class_code
,cv_event_type_code);
FETCH c_event_tpb
INTO lv_event_tpb;
CLOSE c_event_tpb;

IF lv_event_tpb = 'DELIVERY' THEN


ln_event_tpb := tpb_delivery;
ELSIF lv_event_tpb = 'INVOICE' THEN
ln_event_tpb := tpb_invoice;
ELSIF lv_event_tpb = 'ACCOUNTING' THEN
ln_event_tpb := tpb_accounting;
ELSIF lv_event_tpb = 'PAYMENT' THEN
ln_event_tpb := tpb_payment;
END IF;

RETURN ln_event_tpb;

END get_event_tpb;
--Added by Junjian for AP tax flow end

-----------------------------------------------------------------------
-- PUBLIC PROCEDURE
-- jai_delete_tax_dist
--
-- DESCRIPTION
-- delete distribution lines for AR taxes
--
-- CALLED BY
-- delete_tax_dist
-----------------------------------------------------------------------
PROCEDURE jai_delete_tax_dist
(
p_det_factor_id IN NUMBER
,x_process_status OUT NOCOPY VARCHAR2
,x_process_message OUT NOCOPY VARCHAR2
) IS

lv_api_name CONSTANT VARCHAR2(50) := 'jai_delete_tax_dist';


ln_det_factor_id NUMBER;
lv_object_name user_procedures.object_name%TYPE;
lv_procedure_name user_procedures.procedure_name%TYPE;
ln_exists NUMBER := 0;
lv_sqlstmt VARCHAR2(2000);
--Added by Junjian on 2013.12.16
lv_misc ap_invoice_distributions_all.line_type_lookup_code%TYPE :=
'MISCELLANEOUS';

CURSOR c_det_factor IS
SELECT trx_id
,trx_line_id
,application_id
,entity_code
,event_class_code
,org_id --Added for BUG#25135749
FROM jai_tax_det_factors
WHERE det_factor_id = p_det_factor_id;

CURSOR c_proc_exists
(
cp_object_name user_procedures.object_name%TYPE
,cp_procedure_name user_procedures.procedure_name%TYPE
) IS
SELECT 1
FROM user_procedures
WHERE object_name = cp_object_name
AND procedure_name = cp_procedure_name;

l_det_factor c_det_factor%ROWTYPE;
l_dist_count NUMBER; -- added by zhiwei.xin for bug#20970443

--start additions for bug#26513387


CURSOR get_ar_source(cp_trx_id IN NUMBER) IS
SELECT 'Y'
FROM ra_customer_trx_all
WHERE customer_trx_id = cp_trx_id
AND created_from = 'RAXTRX';
lv_ar_source VARCHAR2(10);
BEGIN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name || '.BEGIN'
,G_PKG_NAME || ': ' || lv_api_name || '()+');
END IF;

x_process_status := FND_API.G_RET_STS_SUCCESS;
ln_det_factor_id := p_det_factor_id;

IF (G_LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_STATEMENT
,G_MODULE_NAME || lv_api_name
,'DET_FACTOR_ID : ' || ln_det_factor_id);
END IF;

OPEN c_det_factor;
FETCH c_det_factor
INTO l_det_factor;
CLOSE c_det_factor;

IF (G_LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_STATEMENT
,G_MODULE_NAME || lv_api_name
,'TRX_ID : ' || l_det_factor.trx_id || ', TRX_LINE_ID : ' ||
l_det_factor.trx_line_id ||
', APPLICATION_ID : ' || l_det_factor.application_id || ',
ENTITY_CODE : ' ||
l_det_factor.entity_code || ', EVENT_CLASS_CODE : ' ||
l_det_factor.event_class_code);
END IF;

IF l_det_factor.application_id = 222
AND l_det_factor.entity_code = 'TRANSACTIONS'
AND l_det_factor.event_class_code IN ('INVOICE'
,'CREDIT_MEMO'
,'DEBIT_MEMO') THEN
/*COMMENTED for bug#26513387
lv_object_name := 'AR_MRC_ENGINE' ;
lv_procedure_name := 'MAINTAIN_MRC_DATA' ;

OPEN c_proc_exists(lv_object_name, lv_procedure_name) ;


FETCH c_proc_exists INTO ln_exists ;
CLOSE c_proc_exists ;
IF ln_exists = 1 THEN
--delete the mrc data from ra_cust_trx_line_gl_dist_all
FOR rec_mrc IN
( SELECT cust_trx_line_gl_dist_id
FROM ra_cust_trx_line_gl_dist_all
WHERE customer_trx_id = l_det_factor.TRX_ID
AND account_class IN ('TAX','FREIGHT')
AND customer_trx_line_id IN
(SELECT customer_trx_line_id
FROM ra_customer_trx_lines_all
WHERE customer_trx_id = l_det_factor.TRX_ID
AND link_to_cust_trx_line_id =
l_det_factor.TRX_LINE_ID/*26410163
AND line_type in ('TAX','FREIGHT')
)
)
LOOP

lv_sqlstmt := 'BEGIN ar_mrc_engine.maintain_mrc_data(


p_event_mode =>''DELETE'',
p_table_name =>''RA_CUST_TRX_LINE_GL_DIST'',
p_mode =>''SINGLE'',
p_key_value => :1
);

END; ' ;
EXECUTE IMMEDIATE lv_sqlstmt USING rec_mrc.cust_trx_line_gl_dist_id ;
END LOOP;
END IF ;

IF ( G_LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||lv_api_name
,G_PKG_NAME||': '||lv_api_name||': Delete
RA_CUST_TRX_LINE_GL_DIST_ALL.');
END IF;
*/
--start additions for bug#26513387
lv_ar_source := NULL;
OPEN get_ar_source(l_det_factor.trx_id);
FETCH get_ar_source
INTO lv_ar_source;
CLOSE get_ar_source;
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,' l_det_factor.trx_id ' ||
l_det_factor.trx_id || ' lv_ar_source ' ||
lv_ar_source);
/*IF nvl(lv_ar_source
,'N') = 'Y' THEN
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,' this is auto invoice record,no need
to delte,hence return');
RETURN;
END IF;*/
--end additions for bug#26513387

DELETE ra_cust_trx_line_gl_dist_all
WHERE account_class IN ('TAX'
,'FREIGHT'
,'REV')
AND customer_trx_id = l_det_factor.trx_id
AND customer_trx_line_id IN (SELECT customer_trx_line_id
FROM ra_customer_trx_lines_all
WHERE customer_trx_id = l_det_factor.trx_id
AND link_to_cust_trx_line_id =
l_det_factor.trx_line_id
AND line_type IN ('TAX'
,'FREIGHT'));

IF (G_LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_STATEMENT
,G_MODULE_NAME || lv_api_name
,G_PKG_NAME || ': ' || lv_api_name || ': Delete
RA_CUSTOMER_TRX_LINES_ALL.');
END IF;
DELETE ra_customer_trx_lines_all
WHERE customer_trx_id = l_det_factor.trx_id
AND link_to_cust_trx_line_id = l_det_factor.trx_line_id
AND line_type IN ('TAX'
,'FREIGHT');

IF (G_LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_STATEMENT
,G_MODULE_NAME || lv_api_name
,G_PKG_NAME || ': ' || lv_api_name || ': Delete
JAI_REC_NREC_DIST.');
END IF;
DELETE jai_rec_nrec_dist
WHERE
/*26399170*/
trx_line_id = l_det_factor.trx_line_id
AND trx_id = l_det_factor.trx_id;

--Added by Junjian for AP tax flow begin


--Commented by Junjian for deleting invoice lines error begin
/*ELSIF l_det_factor.APPLICATION_ID = 200 AND
l_det_factor.ENTITY_CODE = 'AP_INVOICES' THEN

DELETE ap_invoice_distributions_all invoice_dist


WHERE invoice_id = l_det_factor.TRX_ID
AND line_type_lookup_code = lv_misc
AND EXISTS
(SELECT 1 FROM jai_rec_nrec_dist tax_dist
WHERE tax_dist.tax_dist_id = invoice_dist.invoice_distribution_id
AND tax_dist.source_tax_line_num = invoice_dist.invoice_line_number
AND tax_dist.application_id = 200
AND tax_dist.entity_code = 'AP_INVOICES'
AND tax_dist.trx_id = l_det_factor.TRX_ID );
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE,
G_MODULE_NAME || lv_api_name,
'.Delete from ap_invoice_distributions_all, '||
SQL%ROWCOUNT || ' ROWS DELETED ');
END IF; --( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL)

DELETE ap_invoice_lines_all invoice_line


WHERE invoice_id = l_det_factor.TRX_ID
AND line_type_lookup_code = lv_misc
AND EXISTS
(SELECT 1 FROM jai_rec_nrec_dist tax_dist
WHERE tax_dist.trx_id = l_det_factor.TRX_ID
AND tax_dist.application_id = 200
AND tax_dist.entity_code = 'AP_INVOICES'
AND tax_dist.source_tax_line_num = invoice_line.line_number);

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE,
G_MODULE_NAME || lv_api_name,
'.Delete from ap_invoice_lines_all, '||
SQL%ROWCOUNT || ' ROWS DELETED ');
END IF; --( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL)

DELETE jai_rec_nrec_dist tax_dist


WHERE tax_dist.application_id = 200
AND tax_dist.entity_code = 'AP_INVOICES'
AND tax_dist.trx_id = l_det_factor.TRX_ID ;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE,
G_MODULE_NAME || lv_api_name,
'.Delete from jai_rec_nrec_dist, '||
SQL%ROWCOUNT || ' ROWS DELETED ');
END IF; --( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) */
--Commented by Junjian for deleting invoice lines error end
--Added by Junjian for AP tax flow end

-- added by zhiwei.xin for bug#20970443 begin


/* Once we insert accounting distributions, we must call arp_rounding to
fix the amounts on the REC dist to reflect the new tax */

MO_GLOBAL.SET_POLICY_CONTEXT('S',l_det_factor.org_id);--Added for
BUG#25135749
IF arp_rounding.correct_dist_rounding_errors(P_REQUEST_ID =>
NULL,
P_CUSTOMER_TRX_ID =>
l_det_factor.TRX_ID ,
P_CUSTOMER_TRX_LINE_ID => NULL,
P_ROWS_PROCESSED => l_dist_count,
P_ERROR_MESSAGE => x_process_message
,
P_BASE_PRECISION =>
arp_trx_global.system_info.base_precision ,
P_BASE_MIN_ACCOUNTABLE_UNIT =>
arp_trx_global.system_info.base_min_acc_unit ,
P_TRX_CLASS_TO_PROCESS => 'ALL' ,
P_CHECK_RULES_FLAG => NULL,
P_DEBUG_MODE => 'N' ,
P_TRX_HEADER_LEVEL_ROUNDING =>
arp_global.sysparam.trx_header_level_rounding ,
P_ACTIVITY_FLAG => 'N',
P_FIX_REC_OFFSET => 'N') = 0 -- FALSE

THEN
IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||lv_api_name
,'arp_rounding.correct_dist_rounding_errors :' ||
x_process_message);
END IF;

RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
END IF;

IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||lv_api_name
,'Row Processed for arp rounding :' || l_dist_count);
END IF;
-- added by zhiwei.xin for bug#20970443 end.
-- /*26513387*/ Un commented for 26861940
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,' commented the call to ARP_ROUNDING ');
END IF;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name || '.END'
,G_PKG_NAME || ': ' || lv_api_name || '()-' || ' RETURN_CODE =
' || x_process_status);
END IF;

EXCEPTION
WHEN OTHERS THEN
x_process_status := jai_constants.unexpected_error;
x_process_message := 'Encountered an error in
JAI_TAX_DETERMINATION_PKG.delete_tax_dist. ' ||
substr(SQLERRM
,1
,1900);

IF (G_LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_UNEXPECTED
,G_MODULE_NAME || lv_api_name
,SQLERRM);
END IF;

END jai_delete_tax_dist;

PROCEDURE jai_populate_tax_dist
(
pr_tax_line jai_tax_lines%ROWTYPE --Modified by Junjian for AP tax flow
,pv_process_status OUT NOCOPY VARCHAR2
,pv_process_message OUT NOCOPY VARCHAR2
) IS
CURSOR c_event_tpb
(
cn_application_id NUMBER
,cv_entity_code VARCHAR2
,cv_event_class_code VARCHAR2
) IS
SELECT DISTINCT tax_point_basis
FROM jai_evnt_cls_options
WHERE application_id = cn_application_id
AND entity_code = cv_entity_code
AND event_class_code = cv_event_class_code;
lv_api_name CONSTANT VARCHAR2(50) := 'jai_populate_tax_dist';
lv_event_tpb jai_evnt_cls_options.tax_point_basis%TYPE;
lv_tax_line_tpb jai_tax_lines.tax_point_basis%TYPE;
ln_event_tpb NUMBER;
ln_tax_line_tpb NUMBER;
lv_inclusive_flag VARCHAR2(1);
lv_recoverable_flag VARCHAR2(1);
ln_recovery_percentage NUMBER;
lv_tax_amount_type VARCHAR2(30);
ln_num_of_insert NUMBER;
lv_process_message VARCHAR2(150);
lv_process_status VARCHAR2(30);

--Added by Junjian for AP tax flow begin


CURSOR c_ap_inv_line_item
(
cn_invoice_id NUMBER
,cn_invoice_line_num NUMBER
) IS
SELECT *
FROM ap_invoice_lines_all
WHERE invoice_id = cn_invoice_id
AND line_number = cn_invoice_line_num;

CURSOR c_ap_inv_dist_item
(
cn_invoice_id NUMBER
,cn_invoice_line_num NUMBER
) IS
SELECT *
FROM ap_invoice_distributions_all
WHERE invoice_id = cn_invoice_id
AND invoice_line_number = cn_invoice_line_num
AND distribution_line_number =
(SELECT MIN(distribution_line_number)
FROM ap_invoice_distributions_all apid
WHERE apid.invoice_id = cn_invoice_id
AND apid.invoice_line_number = cn_invoice_line_num);

CURSOR c_max_line_num(cn_invoice_id NUMBER) IS


SELECT MAX(line_number)
FROM ap_invoice_lines_all
WHERE invoice_id = cn_invoice_id;

CURSOR get_match_type IS
SELECT match_type
FROM ap_invoice_lines_all
WHERE invoice_id = pr_tax_line.trx_id
AND line_number = pr_tax_line.trx_line_number;
lr_ap_inv_line_item ap_invoice_lines%ROWTYPE;
lr_ap_inv_line_tax ap_invoice_lines%ROWTYPE;
lr_ap_inv_dist_item ap_invoice_distributions_all%ROWTYPE;
lr_ap_inv_dist_tax ap_invoice_distributions_all%ROWTYPE;
lr_jai_tax_dist jai_rec_nrec_dist%ROWTYPE;
lv_misc ap_invoice_distributions_all.line_type_lookup_code%TYPE
:= 'MISCELLANEOUS';
ln_tax_variance_inv_cur NUMBER;
ln_tax_variance_fun_cur NUMBER;
ln_inv_line_num NUMBER;
lv_match_type VARCHAR2(30); --Modified by Qinglei for retroactive
pricing on 25-Dec-2013
lv_dist_class ap_invoice_distributions_all.distribution_class%TYPE :=
'PERMANENT';
--Added by Junjian for AP tax flow end
/*Added by Qinglei for retroactive pricing 0n 25-Dec-2013 begin*/
CURSOR get_corrected_match_type IS
SELECT a1.match_type
FROM ap_invoice_lines_all a1
,ap_invoice_lines_all a2
WHERE a1.invoice_id = a2.corrected_inv_id
AND a1.line_number = a2.corrected_line_number
AND a2.invoice_id = pr_tax_line.trx_id
AND a2.line_number = pr_tax_line.trx_line_number;
/*Added by Qinglei for retroactive pricing 0n 25-Dec-2013 end*/

--Added by Junjian for bug#18716478 begin


CURSOR c_tax_line
(
cp_tax_line_num NUMBER
,cp_det_factor_id NUMBER
) IS
SELECT COUNT(1)
FROM jai_tax_lines
WHERE tax_line_num = cp_tax_line_num
AND det_factor_id = cp_det_factor_id;
ln_line_count NUMBER;
--Added by Junjian for bug#18716478 end

-- added by zhiwei.xin for AP Open Interface begin


CURSOR c_is_external(cp_det_factor_id NUMBER) IS
SELECT 'Y'
FROM dual
WHERE EXISTS (SELECT 1
FROM jai_tax_det_factors
WHERE det_factor_id = cp_det_factor_id
AND nvl(record_type_code
,'DEFINED') = 'OI_EXT');
lv_external_flag VARCHAR2(1);
-- added by zhiwei.xin for AP Open Interface end.
lv_jai_dist_ist_flag VARCHAR2(1); --Added by Chong for P2P Accounting Change
bug#18835939

l_dist_count NUMBER; -- added by zhiwei.xin for bug#20970443

/* Bug#26474772, dejiang.liu/20170722. Add variable for recoverable split flag.


*/
lv_rec_split_flag VARCHAR2(1) := 'N';
--start additions by vkaranam for bug#27067242

CURSOR c_accrue_on_receipt_flag(p_po_distribution_id NUMBER) IS


SELECT pd.accrue_on_receipt_flag
FROM po_distributions_all pd
,po_line_locations_all pll
WHERE pd.line_location_id = pll.line_location_id
AND pd.po_distribution_id = p_po_distribution_id;
lv_accrue_on_receipt_flag po_distributions_all.accrue_on_receipt_flag%TYPE;

BEGIN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----Begin----' || '()+');
END IF;
pv_process_status := FND_API.G_RET_STS_SUCCESS;

/* Bug#26877071 start, dejiang.liu/20171008. Move logic of getting external


flag out of
if AP condition, since AR use same logic too. */
OPEN c_is_external(cp_det_factor_id => pr_tax_line.det_factor_id);
FETCH c_is_external
INTO lv_external_flag;
CLOSE c_is_external;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Get external flag: ' || lv_external_flag);
END IF;
/* Bug#26877071 end, dejiang.liu/20171008. */

--Just insert distribution lines for AP/AR currently


IF pr_tax_line.application_id IN (200)
AND pr_tax_line.entity_code IN ('AP_INVOICES')
AND pr_tax_line.event_class_code IN ('STANDARD INVOICES') THEN
--Added by Junjian for the case of manual add tax on the common UI begin
--Modified by Junjian for bug#18716478 begin
OPEN c_tax_line(pr_tax_line.tax_line_num
,pr_tax_line.det_factor_id);
FETCH c_tax_line
INTO ln_line_count;
CLOSE c_tax_line;
IF nvl(ln_line_count
,0) = 0 /*pr_tax_line.tax_line_id IS NULL*/
THEN
--Modified by Junjian for bug#18716478 end
--For the tax line has not been populated into table, so we didnot handle
this.
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'For the tax line has not been populated into table, so
process will not continue.');
END IF;
RETURN;
END IF;
--Added by Junjian for the case of manual add tax on the common UI end

OPEN c_event_tpb(pr_tax_line.application_id
,pr_tax_line.entity_code
,pr_tax_line.event_class_code);
FETCH c_event_tpb
INTO lv_event_tpb;
CLOSE c_event_tpb;

--Added by Junjian on 09-01-2014 begin


IF pr_tax_line.tax_regime_type = 'W' THEN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'For withholding tax, do not populate AP invoice tax
lines.');
END IF;
RETURN;
END IF;
--Added by Junjian on 09-01-2014 end

--Modified by Junjian for AP tax flow begin


ln_event_tpb := get_event_tpb(pr_tax_line.application_id
,pr_tax_line.entity_code
,pr_tax_line.event_class_code
,pr_tax_line.event_type_code);
ln_tax_line_tpb := get_tax_tpb(pr_tax_line);
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'ln_event_tpb->' || ln_event_tpb || ' ln_tax_line_tpb->'
|| ln_tax_line_tpb);
END IF;

lv_inclusive_flag := pr_tax_line.inclusive_flag;
lv_recoverable_flag := pr_tax_line.recoverable_flag;
ln_recovery_percentage := pr_tax_line.recovery_percentage;

OPEN get_match_type;
FETCH get_match_type
INTO lv_match_type;
CLOSE get_match_type;

/*Added by Qinglei for retroactive pricing 0n 25-Dec-2013 begin*/


IF lv_match_type = 'PO_PRICE_ADJUSTMENT' THEN
OPEN get_corrected_match_type;
FETCH get_corrected_match_type
INTO lv_match_type;
CLOSE get_corrected_match_type;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'The invoice is created from retroactive pricing. ' ||
'Treat it as the corrected invoice match type.
lv_match_type = ' || lv_match_type);
END IF;
END IF;
/*Added by Qinglei for retroactive pricing 0n 25-Dec-2013 end*/

--If Reversse Charge Tax, do nothing


--Commented by Junjian for Reverse Charge, only populate data into tax
distribution table begin
/*IF nvl(pr_tax_line.self_assessed_flag,'N') = 'Y' THEN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE,
G_MODULE_NAME || lv_api_name,
'For reverse charge tax, should not do the following
process.');
END IF;
RETURN;
END IF;*/
--Commented by Junjian for Reverse Charge, only populate data into tax
distribution table end

----For Third Party Tax, not populate AP invoice line/AP Dist line/JAI Dist
line
--Modified by Junjian for bug#19018333 begin
IF jai_ap_tax_process_pkg.is_third_party_flag(pn_tax_line_id =>
pr_tax_line.tax_line_id
,pn_det_factor_id =>
pr_tax_line.det_factor_id)
/*nvl(pr_tax_line.update_vendor_on_transaction,'N') */
= 'Y' THEN
--Delete the AP invoice lines created by third party
DELETE ap_invoice_distributions_all invoice_dist
WHERE invoice_id = pr_tax_line.trx_id
AND line_type_lookup_code = lv_misc
/* Bug#27479551, dejiang.liu/20180310. Add logic to not delete line with
distribution has been posted. */
AND NOT EXISTS (SELECT 'Invoice line has distribution posted'
FROM ap_invoice_distributions_all dist_ref
WHERE dist_ref.posted_flag = 'Y'
AND dist_ref.invoice_id = invoice_dist.invoice_id
AND dist_ref.invoice_line_number =
invoice_dist.invoice_line_number)

AND EXISTS (SELECT 1


FROM jai_rec_nrec_dist tax_dist
WHERE tax_dist.tax_dist_id = invoice_dist.invoice_distribution_id
AND tax_dist.trx_line_number = pr_tax_line.trx_line_number
AND tax_dist.source_tax_line_num =
invoice_dist.invoice_line_number
AND tax_dist.tax_rate_id = pr_tax_line.tax_rate_id
AND tax_dist.application_id = 200
AND tax_dist.entity_code = 'AP_INVOICES'
AND tax_dist.trx_id = pr_tax_line.trx_id);
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'.Delete from ap_invoice_distributions_all, ' || SQL
%ROWCOUNT || ' ROWS DELETED ');
END IF; --( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL)

DELETE ap_invoice_lines_all invoice_line


WHERE invoice_id = pr_tax_line.trx_id
AND line_type_lookup_code = lv_misc
/* Bug#27479551, dejiang.liu/20180310. Add logic to not delete line with
distribution has been posted. */
AND NOT EXISTS (SELECT 'Invoice line has distribution posted'
FROM ap_invoice_distributions_all dist_ref
WHERE dist_ref.posted_flag = 'Y'
AND dist_ref.invoice_id = invoice_line.invoice_id
AND dist_ref.invoice_line_number =
invoice_line.line_number)

AND EXISTS (SELECT 1


FROM jai_rec_nrec_dist tax_dist
WHERE tax_dist.trx_id = pr_tax_line.trx_id
AND tax_dist.trx_line_number = pr_tax_line.trx_line_number
AND tax_dist.tax_rate_id = pr_tax_line.tax_rate_id
AND tax_dist.application_id = 200
AND tax_dist.entity_code = 'AP_INVOICES'
AND tax_dist.source_tax_line_num = invoice_line.line_number);

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'.Delete from ap_invoice_lines_all, ' || SQL%ROWCOUNT || '
ROWS DELETED ');
END IF; --( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL)

DELETE jai_rec_nrec_dist tax_dist


WHERE tax_dist.trx_line_number = pr_tax_line.trx_line_number
AND tax_dist.tax_rate_id = pr_tax_line.tax_rate_id
AND tax_dist.application_id = 200
AND tax_dist.entity_code = 'AP_INVOICES'
AND tax_dist.trx_id = pr_tax_line.trx_id
/* Bug#27479551, dejiang.liu/20180310. Add logic to not delete line with
distribution has been posted. */
AND NOT EXISTS (SELECT 'Invoice line has distribution posted'
FROM ap_invoice_distributions_all dist_ref
WHERE dist_ref.posted_flag = 'Y'
AND dist_ref.invoice_id = tax_dist.trx_id
AND dist_ref.invoice_line_number =
tax_dist.source_tax_line_num);

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'.Delete from jai_rec_nrec_dist, ' || SQL%ROWCOUNT || '
ROWS DELETED ');
END IF; --( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL)

--Modified by Junjian for bug#19018333 end


IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'For third party tax, should not do the following
process.');
END IF;
RETURN;
END IF;

OPEN c_ap_inv_line_item(pr_tax_line.trx_id
,pr_tax_line.trx_line_id);
FETCH c_ap_inv_line_item
INTO lr_ap_inv_line_item;
CLOSE c_ap_inv_line_item;

OPEN c_ap_inv_dist_item(pr_tax_line.trx_id
,pr_tax_line.trx_line_id);
FETCH c_ap_inv_dist_item
INTO lr_ap_inv_dist_item;
CLOSE c_ap_inv_dist_item;

--START additions by vkaranam for bug#27067242*/


OPEN c_accrue_on_receipt_flag(lr_ap_inv_dist_item.po_distribution_id);
FETCH c_accrue_on_receipt_flag
INTO lv_accrue_on_receipt_flag;
CLOSE c_accrue_on_receipt_flag;
OPEN c_max_line_num(pr_tax_line.trx_id);
FETCH c_max_line_num
INTO ln_inv_line_num;
CLOSE c_max_line_num;

/* Bug#26877071, dejiang.liu/20171008. Move logic of getting external flag


out of
if AP condition, since AR use same logic too. */
/*
-- added by zhiwei.xin for AP Open Interface begin
OPEN c_is_external(cp_det_factor_id => pr_tax_line.det_factor_id);
FETCH c_is_external
INTO lv_external_flag;
CLOSE c_is_external;
*/

IF nvl(lv_external_flag
,'N') = 'Y' THEN
lv_tax_amount_type := tax_amount_type_total;
ln_num_of_insert := 1;
ELSE
-- added by zhiwei.xin for AP Open Interface end.

IF nvl(pr_tax_line.self_assessed_flag
,'N') <> 'Y' THEN
--Added by Junjian for Reverse Charge
--Added for P2P Accounting Change bug#18835939 Start
ln_tax_line_tpb := nvl(ln_tax_line_tpb
,99);
ln_event_tpb := nvl(ln_event_tpb
,99);
lv_jai_dist_ist_flag := 'N';

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'ln_tax_line_tpb :[' || ln_tax_line_tpb || '],' ||
'ln_event_tpb :[' || ln_event_tpb || ']');
END IF;
--reverted changes done for bug 27040931 by mani for bug 27323592

IF nvl(lv_match_type
,'STANDARD') IN ('STANDARD'
,'NOT_MATCHED'
,'ITEM_TO_PO'
,'ITEM_TO_RECEIPT'
,'ITEM_TO_SERVICE_PO')
/* Bug#26474772, dejiang.liu/20170722. TPB reached receipt matched
invoice also populate separate dists. */
/* Bug#27844852 OR (nvl(lv_match_type
,'STANDARD') = 'ITEM_TO_RECEIPT' AND ln_tax_line_tpb =
ln_event_tpb)
*/
THEN
--Process PO match/Standard Alone inovice
IF nvl(lv_inclusive_flag
,'N') = 'N' THEN
--Exclusive, Standard alone/PO match invoice
IF nvl(lv_recoverable_flag
,'N') = 'Y'
AND nvl(ln_recovery_percentage
,0) > 0 THEN
--1. insert 1 line into AP line amt = recoverable amt, acct =
interim recovery
--2. insert 1 line into AP distribution line amt = recoverable amt,
acct = interim recovery
--3. insert 1 line into Tax distribution line amt = recoverable
amt, acct = interim recovery
--Insert Recoverable part firstly
lv_tax_amount_type := tax_amount_type_rec;
ln_num_of_insert := 1;
lv_jai_dist_ist_flag := 'Y';

IF ln_recovery_percentage < 100 THEN


IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Insert Recoverable part firstly');
END IF;

/* Bug#26474772, dejiang.liu/20170722. Set split flag to 'Y'. */


lv_rec_split_flag := 'Y';

jai_populate_tax_dist_ap(pr_tax_line => pr_tax_line


,pv_tax_amount_type => lv_tax_amount_type
--possible values: 'Total','Rec','NRec'
,pn_num_lines_insert => ln_num_of_insert
--Number of lines need insert into AP
line/Dist
,pn_diff_tpb =>
(nvl(ln_tax_line_tpb
,99) -
nvl(ln_event_tpb
,
99))
,pv_jai_dist_ist_flag =>
lv_jai_dist_ist_flag
--Added by Chong for P2P Accounting
Change bug#18835939
/* Bug#26474772, dejiang.liu/20170722.
*/
/* Add parameter to indicate dist is for
REC split line. */
,pv_rec_split_flag => lv_rec_split_flag
,pv_process_status => pv_process_status
,pv_process_message =>
pv_process_message);

--Insert Non-Recoverable part secondly


lv_tax_amount_type := tax_amount_type_nrec;
ln_num_of_insert := 1;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Insert Non-Recoverable part secondly');
END IF;
END IF; --ln_recovery_percentage < 100

ELSE
--non recoverable tax
lv_tax_amount_type := tax_amount_type_nrec;
ln_num_of_insert := 1;

--1. insert 1 line into AP line line amt = non recoverable amt,
acct = item line acct
--2. insert 1 line into AP distribution line line amt = non
recoverable amt, acct = item line acct
--3. insert 1 line into Tax distribution line line amt = non
recoverable amt, acct = item line acct
END IF; --End recoverable flag
ELSE
--Inclusive, Standard alone/PO match invoice
--1. Do not insert AP distribution
--2. Do insert JAI Rec/N Rec Distribution
lv_tax_amount_type := tax_amount_type_total;
ln_num_of_insert := 0;
END IF;

lv_jai_dist_ist_flag := 'Y'; --Do insert jai Rec/N-Rec distribution for


Stadnard alone/PO match invoice
ELSE
--Else for receipt match invoice
--Process receipt match inovice
IF nvl(lv_inclusive_flag
,'N') = 'N' THEN
--Exclusive, Receipt match
--1. Insert AP distribution for total amount
--2. Do not insert JAI Rec/N Rec Distribution
lv_tax_amount_type := tax_amount_type_total;
ln_num_of_insert := 1;
ELSE
--Inclusive, Receipt match
--1. Do not insert AP distribution
--2. Do not insert JAI Rec/N Rec Distribution
lv_tax_amount_type := tax_amount_type_total;
ln_num_of_insert := 0;
END IF;

lv_jai_dist_ist_flag := 'Y'; --Do NOT insert jai Rec/N-Rec distribution


for Receipt match invoice
--AELLURU FOR GENPACT 26335118
END IF;
--Added for P2P Accounting Change bug#18835939 End

/* Commented out for P2P Accounting Change bug#18835939 Start

IF nvl(ln_tax_line_tpb,99) < nvl(ln_event_tpb,99) THEN


IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE,
G_MODULE_NAME || lv_api_name,
'tax line TPB < event TPB');
END IF;
IF nvl(lv_inclusive_flag,'N') = 'N' THEN
IF nvl(lv_match_type ,'STANDARD') in
('STANDARD','NOT_MATCHED','ITEM_TO_PO') THEN
IF nvl(lv_recoverable_flag,'N') = 'Y' AND
nvl(ln_recovery_percentage,0) > 0 THEN
--1. insert 1 line into AP line amt = recoverable amt, acct = interim
recovery
--2. insert 1 line into AP distribution line amt = recoverable amt,
acct = interim recovery
--3. insert 1 line into Tax distribution line amt = recoverable amt,
acct = interim recovery
--Insert Recoverable part firstly
lv_tax_amount_type := TAX_AMOUNT_TYPE_REC;
ln_num_of_insert := 1;

IF ln_recovery_percentage < 100 THEN


IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE,
G_MODULE_NAME || lv_api_name,
'Insert Recoverable part firstly');
END IF;

jai_populate_tax_dist_ap(pr_tax_line => pr_tax_line,


pv_tax_amount_type => lv_tax_amount_type, --possible
values: 'Total','Rec','NRec'
pn_num_lines_insert => ln_num_of_insert, --Number of
lines need insert into AP line/Dist
pn_diff_tpb => (nvl(ln_tax_line_tpb, 99) -
nvl(ln_event_tpb, 99)) ,
pv_process_status => pv_process_status,
pv_process_message => pv_process_message);

--Insert Non-Recoverable part secondly


lv_tax_amount_type := TAX_AMOUNT_TYPE_NREC;
ln_num_of_insert := 1;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE,
G_MODULE_NAME || lv_api_name,
'Insert Non-Recoverable part secondly');
END IF;
END IF; --ln_recovery_percentage < 100

ELSE --non recoverable tax


lv_tax_amount_type := TAX_AMOUNT_TYPE_NREC;
ln_num_of_insert := 1;

--1. insert 1 line into AP line line amt = non recoverable amt, acct
= item line acct
--2. insert 1 line into AP distribution line line amt = non
recoverable amt, acct = item line acct
--3. insert 1 line into Tax distribution line line amt = non
recoverable amt, acct = item line acct
END IF;
ELSE --Receipt match
lv_tax_amount_type := TAX_AMOUNT_TYPE_TOTAL;
ln_num_of_insert := 1;
END IF;
ELSE
NULL;
IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||lv_api_name
,'No distribution lines generated for inclusive tax
line');
END IF;
END IF;
ELSIF nvl(ln_tax_line_tpb,99) = nvl(ln_event_tpb,99) THEN
--ln_tax_line_tpb = ln_event_tpb
IF nvl(lv_inclusive_flag,'N') = 'N' THEN
IF nvl(lv_match_type ,'STANDARD') in
('STANDARD','NOT_MATCHED','ITEM_TO_PO') THEN
IF nvl(lv_recoverable_flag,'N') = 'Y' AND
nvl(ln_recovery_percentage,0) > 0 THEN
--1. insert 1 line into AP line amt = recoverable amt, acct = interim
recovery
--2. insert 1 line into AP distribution line amt = recoverable amt,
acct = interim recovery
--3. insert 1 line into Tax distribution line amt = recoverable amt,
acct = interim recovery
--Insert Recoverable part firstly
lv_tax_amount_type := TAX_AMOUNT_TYPE_REC;
ln_num_of_insert := 1;

IF ln_recovery_percentage < 100 THEN


IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE,
G_MODULE_NAME || lv_api_name,
'Insert Recoverable part firstly');
END IF;

jai_populate_tax_dist_ap(pr_tax_line => pr_tax_line,


pv_tax_amount_type => lv_tax_amount_type, --possible
values: 'Total','Rec','NRec'
pn_num_lines_insert => ln_num_of_insert, --Number of
lines need insert into AP line/Dist
pn_diff_tpb => (nvl(ln_tax_line_tpb, 99) -
nvl(ln_event_tpb, 99)) ,
pv_process_status => pv_process_status,
pv_process_message => pv_process_message);

--Insert Non-Recoverable part secondly


lv_tax_amount_type := TAX_AMOUNT_TYPE_NREC;
ln_num_of_insert := 1;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE,
G_MODULE_NAME || lv_api_name,
'Insert Non-Recoverable part secondly');
END IF;
END IF; --ln_recovery_percentage < 100

ELSE --non recoverable tax


lv_tax_amount_type := TAX_AMOUNT_TYPE_NREC;
ln_num_of_insert := 1;

--1. insert 1 line into AP line line amt = non recoverable amt, acct
= item line acct
--2. insert 1 line into AP distribution line line amt = non
recoverable amt, acct = item line acct
--3. insert 1 line into Tax distribution line line amt = non
recoverable amt, acct = item line acct
END IF;
ELSE --Receipt match
--1. insert 1 line into AP line line amt = total tax line amt, acct
= item line acct
--2. insert 1 line into AP distribution line line amt = total tax
line amt, acct = item line acct
--3. insert 1 line into Tax distribution line line amt = total tax
line amt, acct = item line acct
lv_tax_amount_type := TAX_AMOUNT_TYPE_TOTAL;
ln_num_of_insert := 1;
END IF;
ELSE--inclusive tax
IF nvl(lv_match_type ,'STANDARD') in
('STANDARD','NOT_MATCHED','ITEM_TO_PO') THEN
IF nvl(lv_recoverable_flag,'N') = 'Y' AND
nvl(ln_recovery_percentage,0) > 0 THEN
--1. insert 2 lines into AP line
--1.1 1st line amt = (+) recoverable amt, acct = interim recovery
--1.2 2nd line amt = (-) recoverable amt, acct = item line acct
--2. insert 2 lines into AP distribution line amt = recoverable amt,
acct = interim recovery
--2.1 1st line amt = (+) recoverable amt, acct = interim recovery
--2.2 2nd line amt = (-) recoverable amt, acct = item line acct
--3. insert 1 lines into Tax distribution line amt = recoverable amt,
acct = interim recovery
lv_tax_amount_type := TAX_AMOUNT_TYPE_REC;
ln_num_of_insert := 2;
ELSE --non recoverable tax
-- insert 1 lines into Tax distribution line amt = non recoverable
amt, acct = NULL
lv_tax_amount_type := TAX_AMOUNT_TYPE_NREC;
ln_num_of_insert := 0;

IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||lv_api_name
,'No AP distribution lines generated for non
recoverable inclusive tax amt');
END IF;
END IF;--nvl(lv_recoverable_flag,'N') = 'Y' AND
nvl(ln_recovery_percentage,0) > 0 for inclusive
ELSE --Receipt
NULL;
END IF;--nvl(lv_match_type ,'STANDARD') in ('STANDARD','ITEM_TO_PO')
END IF;--nvl(lv_inclusive_flag, 'N') = 'N'
ELSIF nvl(ln_tax_line_tpb,99) > nvl(ln_event_tpb,99) THEN
--Not arrived, populate the total amount
lv_tax_amount_type := TAX_AMOUNT_TYPE_TOTAL;
ln_num_of_insert := 1;
END IF;----nvl(ln_tax_line_tpb, 99) < nvl(ln_event_tpb, 99)
--Commented out for P2P Accounting Change bug#18835939 End
*/

--Added by Junjian for Reverse Charge begin


ELSE
lv_tax_amount_type := tax_amount_type_total;
ln_num_of_insert := 1;
END IF; -- nvl(pr_tax_line.self_assessed_flag,'N') <> 'Y'
--Added by Junjian for Reverse Charge end

-- added by zhiwei.xin for AP Open Interface begin


END IF;
-- added by zhiwei.xin for AP Open Interface end.

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Before calling populate_tax_dist_ap,' || '
lv_tax_amount_type->' || lv_tax_amount_type ||
' ln_num_of_insert->' || ln_num_of_insert || '
pr_tax_line.rounded_tax_amt_trx_curr->' ||
pr_tax_line.rounded_tax_amt_trx_curr || '
pr_tax_line.tax_line_id->' || pr_tax_line.tax_line_id);
END IF;
IF lv_tax_amount_type IS NOT NULL THEN
jai_populate_tax_dist_ap(pr_tax_line => pr_tax_line
,pv_tax_amount_type => lv_tax_amount_type
--possible values: 'Total','Rec','NRec'
--Number of lines need insert into AP line/Dist
,pn_num_lines_insert => ln_num_of_insert
,pn_diff_tpb => (nvl(ln_tax_line_tpb
,99) - nvl(ln_event_tpb
,99))
-- added by zhiwei.xin for AP Open Interface
,pv_external_flag => lv_external_flag
--Added by Chong for P2P Accounting Change
bug#18835939
,pv_jai_dist_ist_flag => lv_jai_dist_ist_flag
/* Bug#26474772, dejiang.liu/20170722. */
/* Add parameter to indicate dist is for REC split
line. */
,pv_rec_split_flag => lv_rec_split_flag
,pv_process_status => pv_process_status
,pv_process_message => pv_process_message);
END IF;
--Modified by Junjian for AP tax flow end
ELSIF pr_tax_line.application_id IN (222)
AND pr_tax_line.entity_code IN ('TRANSACTIONS')
AND pr_tax_line.event_class_code IN ('INVOICE'
,'CREDIT_MEMO'
,'DEBIT_MEMO') THEN
-- commented out by zhiwei.xin for AR Open Inteface begin
/* distribution lines for autoinvoice importing should be populated by 'CP :
India Local Process Order to AR',
so ingore it here.
*/
/*IF pr_tax_line.applied_from_trx_id IS NULL and
pr_tax_line.applied_from_trx_line_id IS NULL then

jai_populate_tax_dist_ar(pr_tax_line => pr_tax_line


,pv_process_status => lv_process_status
,pv_process_message => lv_process_message);

IF lv_process_status <> FND_API.G_RET_STS_SUCCESS THEN


IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||lv_api_name
,'update_tax_dist return status:'||lv_process_status||',
message:' || lv_process_message);
END IF;
RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
END IF;
END IF;*/
-- commented out by zhiwei.xin for AR Open Interface end.

-- added by zhiwei.xin for AR Open Interface begin


/* The CP will be obsoleted, so populate distribution also for autoinvoice
AR*/

jai_populate_tax_dist_ar(pr_tax_line => pr_tax_line


,pv_external_flag => lv_external_flag -- added by
zhiwei.xin for AR Open Interface
,pv_process_status => lv_process_status
,pv_process_message => lv_process_message);

IF lv_process_status <> FND_API.G_RET_STS_SUCCESS THEN


IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'jai_populate_tax_dist_ar return status:' ||
lv_process_status || ', message:' ||
lv_process_message);
END IF;
RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
END IF;

-- added by zhiwei.xin for AR Open Interface end.

-- added by zhiwei.xin for bug#20970443 begin


/* Once we insert accounting distributions, we must call arp_rounding to
fix the amounts on the REC dist to reflect the new tax */

IF arp_rounding.correct_dist_rounding_errors(P_REQUEST_ID
=> NULL,
P_CUSTOMER_TRX_ID =>
pr_tax_line.trx_id ,
P_CUSTOMER_TRX_LINE_ID => NULL,
P_ROWS_PROCESSED => l_dist_count,
P_ERROR_MESSAGE =>
lv_process_message ,
P_BASE_PRECISION =>
arp_trx_global.system_info.base_precision ,
P_BASE_MIN_ACCOUNTABLE_UNIT =>
arp_trx_global.system_info.base_min_acc_unit ,
P_TRX_CLASS_TO_PROCESS => 'ALL' ,
P_CHECK_RULES_FLAG => NULL,
P_DEBUG_MODE => 'N' ,
P_TRX_HEADER_LEVEL_ROUNDING =>
arp_global.sysparam.trx_header_level_rounding ,
P_ACTIVITY_FLAG => 'N',
P_FIX_REC_OFFSET => 'N') = 0 --
FALSE

THEN
IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||lv_api_name
,'arp_rounding.correct_dist_rounding_errors :' ||
lv_process_message);
END IF;

RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
END IF;

IF ( G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||lv_api_name
,'Row Processed for arp rounding :' || l_dist_count);
END IF;
-- added by zhiwei.xin for bug#20970443 end.
-- Un commented 26861940
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'2 commented the call to ARP_ROUNDING ');
END IF;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
EXCEPTION
WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
pv_process_status := FND_API.G_RET_STS_UNEXP_ERROR;
pv_process_message := lv_process_message;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_process_message);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
WHEN OTHERS THEN
pv_process_status := FND_API.G_RET_STS_ERROR;
pv_process_message := lv_process_message || SQLERRM; --Modified by Junjian on
08-01-2014
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,SQLERRM);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
app_exception.raise_exception;
END jai_populate_tax_dist; --Modified by Junjian for AP tax flow

PROCEDURE jai_populate_tax_dist_ap
(
pr_tax_line jai_tax_lines%ROWTYPE --Modified by Junjian for AP tax
flow
,pv_tax_amount_type VARCHAR2 --possible values: 'Total','Rec','NRec'
,pn_num_lines_insert NUMBER --Number of lines need insert into AP line/Dist
,pn_diff_tpb NUMBER --Number of tax line TPB minus event TPB --Added by
Junjian for AP tax flow
,pv_external_flag VARCHAR2 DEFAULT 'N' -- added by zhiwei.xin for AP Open
Interface
,pv_jai_dist_ist_flag VARCHAR2 DEFAULT 'N' --Added for P2P accounting change
bug#18835939
/* Bug#26474772, dejiang.liu/20170722. Add parameter to indicate dist is for
REC split line. */
,pv_rec_split_flag VARCHAR2 DEFAULT 'N'
,pv_process_status OUT NOCOPY VARCHAR2
,pv_process_message OUT NOCOPY VARCHAR2
) IS

CURSOR c_max_line_num(cn_invoice_id NUMBER) IS


SELECT MAX(line_number)
FROM ap_invoice_lines_all
WHERE invoice_id = cn_invoice_id;

CURSOR c_invoice_info(cn_invoice_id NUMBER) IS


SELECT accts_pay_code_combination_id
,batch_id
FROM ap_invoices_all
WHERE invoice_id = cn_invoice_id;

CURSOR c_ap_inv_line_item
(
cn_invoice_id NUMBER
,cn_invoice_line_num NUMBER
) IS
SELECT *
FROM ap_invoice_lines_all
WHERE invoice_id = cn_invoice_id
AND line_number = cn_invoice_line_num;

CURSOR c_ap_inv_dist_item
(
cn_invoice_id NUMBER
,cn_invoice_line_num NUMBER
) IS
SELECT *
FROM ap_invoice_distributions_all
WHERE invoice_id = cn_invoice_id
AND invoice_line_number = cn_invoice_line_num
AND distribution_line_number =
(SELECT MIN(distribution_line_number)
FROM ap_invoice_distributions_all apid
WHERE apid.invoice_id = cn_invoice_id
AND apid.invoice_line_number = cn_invoice_line_num);

/* Bug#26800922, dejiang.liu/20170924. Add cursor to get distribution project


info. */
CURSOR c_ap_inv_dist_pa_info
(
cn_invoice_id NUMBER
,cn_invoice_line_num NUMBER
) IS
SELECT *
FROM ap_invoice_distributions_all
WHERE invoice_id = cn_invoice_id
AND invoice_line_number = cn_invoice_line_num
AND project_id IS NOT NULL
AND rownum = 1;
lr_ap_inv_dist_pa c_ap_inv_dist_pa_info%ROWTYPE;

--Added by Junjian for AP tax flow begin


CURSOR c_interim_reco_ccid
(
cp_entity_code VARCHAR2
,cp_entity_id NUMBER
,cp_ledger_id NUMBER
,cp_org_id NUMBER
,cp_organization_id NUMBER
,cp_location_id NUMBER
) IS
SELECT interim_recovery_ccid
FROM jai_tax_accounts
WHERE tax_account_entity_code = cp_entity_code
AND tax_account_entity_id = cp_entity_id
AND ledger_id = cp_ledger_id
AND org_id = cp_org_id
AND organization_id = cp_organization_id
AND location_id = cp_location_id;

CURSOR c_suspense_ccid
(
cp_entity_code VARCHAR2
,cp_entity_id NUMBER
,cp_ledger_id NUMBER
,cp_org_id NUMBER
,cp_organization_id NUMBER
,cp_location_id NUMBER
) IS
SELECT suspense_ccid
FROM jai_tax_accounts
WHERE tax_account_entity_code = cp_entity_code
AND tax_account_entity_id = cp_entity_id
AND ledger_id = cp_ledger_id
AND org_id = cp_org_id
AND organization_id = cp_organization_id
AND location_id = cp_location_id;

CURSOR c_inv_line_num(cp_tax_line jai_tax_lines%ROWTYPE) IS


SELECT source_tax_line_num
FROM jai_rec_nrec_dist tax_dist
WHERE tax_dist.trx_line_number = cp_tax_line.trx_line_number
AND tax_dist.tax_rate_id = cp_tax_line.tax_rate_id
AND tax_dist.tax_line_id = cp_tax_line.tax_line_id
AND tax_dist.application_id = 200
AND tax_dist.entity_code = 'AP_INVOICES'
AND tax_dist.recoverable_flag = decode(pv_tax_amount_type
,tax_amount_type_rec
,'Y'
,tax_amount_type_nrec
,'N'
,pr_tax_line.recoverable_flag)
AND tax_dist.trx_id = cp_tax_line.trx_id;
--Added by Junjian for AP tax flow end

-- added by zhiwei.xin for AP Open Interface begin


CURSOR c_external_ccid
(
cp_trx_id NUMBER
,cp_trx_line_id NUMBER
,cp_tax_line_num NUMBER
) IS
SELECT code_combination_id
FROM jai_interface_tax_lines_all
WHERE tax_line_no = cp_tax_line_num
AND interface_line_id IN (SELECT interface_line_id
FROM jai_interface_lines_all
WHERE internal_trx_id = cp_trx_id
AND internal_trx_line_id = cp_trx_line_id);
-- added by zhiwei.xin for AP Open Interface end.

-- added by zhiwei.xin for bug#19593295 begin


CURSOR c_item_line_ccid
(
cp_trx_id NUMBER
,cp_trx_line_id NUMBER
) IS
SELECT dist_code_combination_id
FROM ap_invoice_distributions_all
WHERE invoice_id = cp_trx_id
AND invoice_line_number = cp_trx_line_id
AND line_type_lookup_code IN ('ITEM'
,'ACCRUAL'); --Modified by Junjian for
bug#20141019
-- added by zhiwei.xin for bug#19593295 end.

-- added by zhiwei.xin for bug#20434565 begin


CURSOR c_inv_line_dft_ccid
(
cp_trx_id NUMBER
,cp_trx_line_id NUMBER
) IS
SELECT default_dist_ccid
FROM ap_invoice_lines_all
WHERE invoice_id = cp_trx_id
AND line_number = cp_trx_line_id
AND line_type_lookup_code = 'ITEM';
-- added by zhiwei.xin for bug#20434565 end.

/* Bug#25466634, dejiang.liu/20170327. Add cursor to get Accrue on Receipt flag


for PO/Receipt matched invoice. */
/*
CURSOR c_accrue_on_receipt_flag(p_po_distribution_id NUMBER)
IS
SELECT accrue_on_receipt_flag
FROM po_distributions_all
WHERE po_distribution_id = p_po_distribution_id;
*/

/* Bug#26517301, dejiang.liu/20170728. Modify cursor to get match option on PO.


*/
CURSOR c_accrue_on_receipt_flag(p_po_distribution_id NUMBER) IS
SELECT pd.accrue_on_receipt_flag
,pll.match_option
FROM po_distributions_all pd
,po_line_locations_all pll
WHERE pd.line_location_id = pll.line_location_id
AND pd.po_distribution_id = p_po_distribution_id;
lv_accrue_on_receipt_flag po_distributions_all.accrue_on_receipt_flag%TYPE;
/* Bug#26517301, dejiang.liu/20170728. Add variable for match option. */
lv_po_match_option po_line_locations_all.match_option%TYPE;

ln_tax_amt_trx_curr NUMBER;
ln_tax_amt_tax_curr NUMBER;
ln_tax_amt_fun_curr NUMBER;
ln_interim_recovery_acct NUMBER;
ln_item_expense_acct NUMBER;
ln_inv_line_num NUMBER;
ln_invoice_id NUMBER := pr_tax_line.trx_id;
ln_invoice_item_line_num NUMBER := pr_tax_line.trx_line_id;
lv_recoverable_flag VARCHAR2(1);
lr_ap_inv_line_item ap_invoice_lines%ROWTYPE;
lr_ap_inv_line_tax ap_invoice_lines%ROWTYPE;
lr_ap_inv_dist_item ap_invoice_distributions_all%ROWTYPE;
lr_ap_inv_dist_tax ap_invoice_distributions_all%ROWTYPE;
lr_jai_tax_dist jai_rec_nrec_dist%ROWTYPE;
ln_ap_ccid ap_invoices.accts_pay_code_combination_id%TYPE;
ln_batch_id ap_invoices.batch_id%TYPE;
ln_project_id ap_invoice_lines.project_id%TYPE;
ln_task_id ap_invoice_lines.task_id%TYPE;
lv_exp_type ap_invoice_lines.expenditure_type%TYPE;
ld_exp_item_date ap_invoice_lines.expenditure_item_date%TYPE;
ln_exp_organization_id ap_invoice_lines.expenditure_organization_id
%TYPE;
lv_project_accounting_context
ap_invoice_distributions_all.project_accounting_context%TYPE;
lv_pa_addition_flag ap_invoice_distributions_all.pa_addition_flag
%TYPE;
/* Bug#25466634, dejiang.liu/20170327. Add variables for PA quantity. */
ln_pa_quantity NUMBER;

lv_assets_tracking_flag ap_invoice_distributions_all.assets_tracking_flag
%TYPE := 'N';
lv_misc ap_invoice_distributions_all.line_type_lookup_code%TYPE
:= 'MISCELLANEOUS';
ln_tax_variance_inv_cur NUMBER;
ln_tax_variance_fun_cur NUMBER;
lv_match_type VARCHAR2(15) := 'NOT_MATCHED';
lv_dist_class ap_invoice_distributions_all.distribution_class%TYPE :=
'PERMANENT';
ln_ap_inv_dist_id NUMBER;
ln_1st_line_dist_id NUMBER;
ln_1st_line_number NUMBER;
ln_dist_number NUMBER;
ln_exist_inv_line_num NUMBER; --Added by Junjian for AP tax flow
lr_acc_ids jai_tax_accounting_pkg.r_tax_account_ccids;
lv_inv_line_flag VARCHAR2(1); --Added by Junjian for Inclusive Tax
lv_acct_type jai_rec_nrec_dist.acct_type%TYPE;
lv_api_name CONSTANT VARCHAR2(50) := 'jai_populate_tax_dist_ap';
ln_inv_type ap_invoices_all.invoice_type_lookup_code%TYPE;

--22906463

CURSOR c_ship_network_info(pn_invoice_id IN NUMBER) IS


SELECT ship_network.interorg_payables_account
FROM mtl_interorg_parameters ship_network
,po_requisition_lines_all prl
,oe_order_lines_all ool
,ra_customer_trx_lines_all rctl
,ap_invoice_lines_all ail
,ap_invoices_all aia
WHERE prl.requisition_header_id = ool.source_document_id
AND prl.requisition_line_id = ool.source_document_line_id
AND ship_network.from_organization_id = prl.source_organization_id
AND ship_network.to_organization_id = prl.destination_organization_id
AND ool.source_document_type_id = 10
--modified by mani for bug 26543983
--AND to_char(ool.header_id) = rctl.interface_line_attribute9
--AND to_char(ool.line_id) = rctl.interface_line_attribute6
AND ool.header_id = rctl.interface_line_attribute9
AND ool.line_id = rctl.interface_line_attribute6
AND REGEXP_LIKE(RCTL.interface_line_attribute9 , '[0-9]{'||
LENGTH(interface_line_attribute9)||'}+')
AND REGEXP_LIKE(RCTL.INTERFACE_LINE_ATTRIBUTE6 , '[0-9]{'||
LENGTH(RCTL.INTERFACE_LINE_ATTRIBUTE6 )||'}+')
--modified by mani for bug 26543983
AND rctl.interface_line_context = 'INTERCOMPANY'
AND rctl.customer_trx_id = ail.source_trx_id
AND rctl.customer_trx_line_id = ail.source_line_id
AND ail.invoice_id = aia.invoice_id
AND ail.invoice_id = pn_invoice_id
AND ail.line_type_lookup_code = 'ITEM'
--added or condition for bug#22096463
AND (ail.trx_business_category = 'INTERCOMPANY_TRANSACTION' OR
ail.source_event_class_code = 'INTERCOMPANY_TRX')
AND rownum = 1;

--AELLURU GENPACT26335118
lv_match_type_r NUMBER := 0;
CURSOR c_match_type IS
SELECT COUNT(1)
FROM ap_invoice_lines_all
WHERE invoice_id = pr_tax_line.trx_id
AND match_type = 'ITEM_TO_RECEIPT';
--AELLURU GENPACT26335118
--start additions for taj accounting bug
CURSOR c_tax_type_tpb(cn_tax_type_id NUMBER) IS
SELECT tax_type.tax_point_basis
FROM jai_tax_types tax_type
WHERE tax_type.tax_type_id = cn_tax_type_id;

lv_tax_setup_tpb VARCHAR2(30);

--added by mani for bug 26638278


CURSOR c_claim_chk (
cp_application_id NUMBER,
cp_ENTITY_CODE VARCHAR2,
cp_TRX_ID NUMBER,
cp_TRX_LINE_ID NUMBER,
cp_tax_rate_id NUMBER
) IS
SELECT 'Y'
FROM jai_rgm_recovery_lines jrrl
WHERE
exists (
select 1 from jai_tax_lines jtl
where jtl.tax_line_id = jrrl.tax_line_id
and jtl.application_id = cp_application_id
and jtl.ENTITY_CODE = cp_ENTITY_CODE
and jtl.TRX_ID = cp_TRX_ID
and jtl.TRX_LINE_ID = cp_TRX_LINE_ID
and jtl.tax_rate_id = cp_tax_rate_id
--and jtl.trx_type = 'RECEIVE'
and jtl.rounded_tax_amt_fun_curr>0
and jtl.tax_line_id >0
)
AND jrrl.status = 'RECOVERED';

lv_claim_chk varchar2(1);
--added by mani for bug 26638278

cursor c_item_expense_acct(cp_organization_id number,cp_item_id number) --mani


for bug 28000685
is SELECT expense_account
FROM mtl_system_items_b
WHERE organization_id = cp_organization_id
AND inventory_item_id = cp_item_id;

ln_item_expense_acct_b number:=null;

--addition starts by chris PA-FLEX 26695420


l_pa_success BOOLEAN;
l_pa_called VARCHAR2(1):='N';
l_allow_pa_override VARCHAR2(1);
lv_Error_Code VARCHAR2(300);
--addition ends by chris PA-FLEX 26695420

--addition starts by chris on 20171213 Bug#27240998

-- cursor to fetch the dist ccid from ap dist table


CURSOR c_dist_ccid_ap_dist(c_invoice_id NUMBER, c_inv_line_num IN NUMBER) IS
SELECT dist_code_combination_id
FROM ap_invoice_distributions_all
where invoice_id = c_invoice_id
and invoice_line_number = c_inv_line_num;

-- cursor to fetch max item line count


CURSOR c_item_line_count(c_trx_id NUMBER) IS
SELECT MAX(TRX_LINE_ID)
from JAI_TAX_DET_FACTORS
where trx_id = c_trx_id;

-- cursor to fetch tax line count previous


CURSOR c_pre_tax_line_count(c_trx_id NUMBER, c_trx_line_id IN NUMBER) IS
select count(8)
from jai_tax_lines JTL, JAI_TAX_DET_FACTORS JTDF
where JTL.trx_id = JTDF.TRX_ID
AND JTL.trx_id = c_trx_id
AND JTL.TRX_LINE_ID = JTDF.TRX_LINE_ID
AND JTL.TRX_LINE_ID < c_trx_line_id ;

-- cursor to fetch TOTAL tax line count


CURSOR c_total_tax_line_count(c_trx_id NUMBER) IS
select count(8)
from jai_tax_lines JTL, JAI_TAX_DET_FACTORS JTDF
where JTL.trx_id = JTDF.TRX_ID
AND JTL.trx_id = c_trx_id
AND JTL.TRX_LINE_ID = JTDF.TRX_LINE_ID;

ln_item_count NUMBER :=0;


ln_pre_tax_count NUMBER :=0;
ln_inv_line_number NUMBER :=0;
ln_total_tax_line_count NUMBER :=0;
ln_max_inv_line_num NUMBER :=0;

--addition ends by chris on 20171213 Bug#27240998


lv_boe_flag VARCHAR2(1) := 'N';

BEGIN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----Begin----' || '()+');
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
, 'Input parameters: pv_tax_amount_type:' || pv_tax_amount_type
|| ' ,pn_num_lines_insert :' ||
pn_num_lines_insert || ' pr_tax_line.inclusive_flag' ||
pr_tax_line.inclusive_flag ||
--Added by Junjian for Inclusive Tax
' ,pn_diff_tpb:' || pn_diff_tpb ||
/* Bug#27040931, dejiang.liu/20171112. Add more parameters.
*/
', pv_external_flag:' || pv_external_flag ||
', pv_jai_dist_ist_flag:' || pv_jai_dist_ist_flag ||
', pv_rec_split_flag:' || pv_rec_split_flag
); --Modified by Junjian for AP tax flow
END IF;
pv_process_status := FND_API.G_RET_STS_SUCCESS;
--Modified by Junjian for AP tax flow begin
IF pv_tax_amount_type = tax_amount_type_total THEN
--pn_num_lines_insert will be 1
ln_tax_amt_trx_curr := pr_tax_line.rounded_tax_amt_trx_curr;
ln_tax_amt_tax_curr := pr_tax_line.rounded_tax_amt_tax_curr;
ln_tax_amt_fun_curr := pr_tax_line.rounded_tax_amt_fun_curr;
lv_recoverable_flag := pr_tax_line.recoverable_flag;
ELSIF pv_tax_amount_type = tax_amount_type_rec THEN
--pn_num_lines_insert will be 1(exclusive) or 2(inclusive)
ln_tax_amt_trx_curr := pr_tax_line.rec_tax_amt_trx_curr;
ln_tax_amt_tax_curr := pr_tax_line.rec_tax_amt_tax_curr;
ln_tax_amt_fun_curr := pr_tax_line.rec_tax_amt_funcl_curr;
lv_recoverable_flag := pr_tax_line.recoverable_flag; --Y
ln_project_id := NULL;
ln_task_id := NULL;
lv_exp_type := NULL;
ld_exp_item_date := NULL;
ln_exp_organization_id := NULL;
lv_project_accounting_context := NULL;
lv_pa_addition_flag := NULL;

ELSIF pv_tax_amount_type = tax_amount_type_nrec THEN


--pn_num_lines_insert will be 1(exclusive) or 0(inclusive)
IF nvl(pr_tax_line.recoverable_flag
,'N') = 'Y' THEN
ln_tax_amt_trx_curr := pr_tax_line.nrec_tax_amt_trx_curr;
ln_tax_amt_tax_curr := pr_tax_line.nrec_tax_amt_tax_curr;
ln_tax_amt_fun_curr := pr_tax_line.nrec_tax_amt_funcl_curr;
lv_recoverable_flag := jai_constants.no; --N
ELSIF nvl(pr_tax_line.recoverable_flag
,'N') = 'N' THEN
ln_tax_amt_trx_curr := pr_tax_line.rounded_tax_amt_trx_curr;
ln_tax_amt_tax_curr := pr_tax_line.rounded_tax_amt_tax_curr;
ln_tax_amt_fun_curr := pr_tax_line.rounded_tax_amt_fun_curr;
lv_recoverable_flag := jai_constants.no; --N
END IF;
-- This is a non recoverable line hence the tax amounts should be added into
the project costs by populating
-- projects related columns so that PROJECTS can consider this line for
Project Costing
--
/*IF nvl(pv_accrue_on_receipt_flag,'#') <> 'Y' THEN
ln_project_id := pr_ap_inv_line_item.project_id;
ln_task_id := pr_ap_inv_line_item.task_id;
lv_exp_type := pr_ap_inv_line_item.expenditure_type;
ld_exp_item_date := pr_ap_inv_line_item.expenditure_item_date;
ln_exp_organization_id := pr_ap_inv_line_item.expenditure_organization_id;

lv_project_accounting_context :=
pr_ap_inv_dist_item.project_accounting_context;
lv_pa_addition_flag := pr_ap_inv_dist_item.pa_addition_flag;
END if;*/

END IF;

/* Bug#27040931 start, dejiang.liu/20171112. Add log for tax amount. */


IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Tax amount to be populated: ' ||
'ln_tax_amt_trx_curr= ' || ln_tax_amt_trx_curr || ', ' ||
'ln_tax_amt_tax_curr= ' || ln_tax_amt_trx_curr || ', ' ||
'ln_tax_amt_fun_curr= ' || ln_tax_amt_trx_curr || ', '
);
END IF;
/* Bug#27040931 end, dejiang.liu/20171112. */

-- commented and moved to get the line_num


--after delete default/temp rows to avoid wrong line number generated
--due to bug#25778149
/*
OPEN c_inv_line_num(pr_tax_line);
FETCH c_inv_line_num INTO ln_exist_inv_line_num;
CLOSE c_inv_line_num;
IF ln_exist_inv_line_num IS NOT NULL THEN
ln_inv_line_num := ln_exist_inv_line_num - 1;
ELSE
OPEN c_max_line_num(ln_invoice_id);
FETCH c_max_line_num INTO ln_inv_line_num;
CLOSE c_max_line_num;
END IF;
--Modified by Junjian for AP tax flow end
*/
-- commented and moved to get the line_num
--after delete default/temp rows to avoid wrong line number generated
--due to bug#25778149

OPEN c_invoice_info(ln_invoice_id);
FETCH c_invoice_info
INTO ln_ap_ccid
,ln_batch_id;
CLOSE c_invoice_info;

OPEN c_ap_inv_line_item(ln_invoice_id
,ln_invoice_item_line_num);
FETCH c_ap_inv_line_item
INTO lr_ap_inv_line_item;
CLOSE c_ap_inv_line_item;

OPEN c_ap_inv_dist_item(ln_invoice_id
,ln_invoice_item_line_num);
FETCH c_ap_inv_dist_item
INTO lr_ap_inv_dist_item;
CLOSE c_ap_inv_dist_item;

/* Bug#26800922, dejiang.liu/20170924. Add logic to get distribution project


info. */
OPEN c_ap_inv_dist_pa_info(ln_invoice_id
,ln_invoice_item_line_num);
FETCH c_ap_inv_dist_pa_info
INTO lr_ap_inv_dist_pa;
CLOSE c_ap_inv_dist_pa_info;

ln_item_expense_acct := lr_ap_inv_dist_item.dist_code_combination_id;
IF nvl(lr_ap_inv_dist_item.invoice_price_variance
,-1) <> -1
AND nvl(lr_ap_inv_dist_item.amount
,-1) <> -1 THEN

ln_tax_variance_inv_cur := ln_tax_amt_trx_curr *
(lr_ap_inv_dist_item.invoice_price_variance /
lr_ap_inv_dist_item.amount);

ln_tax_variance_fun_cur := ln_tax_amt_fun_curr *
(lr_ap_inv_dist_item.invoice_price_variance /
lr_ap_inv_dist_item.amount);

END IF;
--start additions by vkaranam for bug#26881532
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Open c_accrue_on_receipt_flag: ' ||
lr_ap_inv_dist_item.po_distribution_id);
END IF;

OPEN c_accrue_on_receipt_flag(lr_ap_inv_dist_item.po_distribution_id);
FETCH c_accrue_on_receipt_flag
INTO lv_accrue_on_receipt_flag
/* Bug#26517301, dejiang.liu/20170728. Add match option. */
,lv_po_match_option;
CLOSE c_accrue_on_receipt_flag;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'lv_accrue_on_receipt_flag: ' || lv_accrue_on_receipt_flag);
END IF;
--end additions by vkaranam for bug#26881532

/* Bug#25466634 start, dejiang.liu/20170327. Add logic to enable project


integration. */
-- For transaction of PO Price Adjustment, PO match and Receipt match.
-- For transaction of standalone.
-- For exclusive non-recoverable tax.
IF nvl(pr_tax_line.recoverable_flag
,'N') = 'N'
AND nvl(pr_tax_line.inclusive_flag
,'N') = 'N' THEN
/* IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Open c_accrue_on_receipt_flag: ' ||
lr_ap_inv_dist_item.po_distribution_id);
END IF;
/*commented and moved the accrue on receipt flag cursor before the if condition for
26881532
OPEN c_accrue_on_receipt_flag(lr_ap_inv_dist_item.po_distribution_id);
FETCH c_accrue_on_receipt_flag
INTO lv_accrue_on_receipt_flag
/* Bug#26517301, dejiang.liu/20170728. Add match option.
,lv_po_match_option;
CLOSE c_accrue_on_receipt_flag;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'lv_accrue_on_receipt_flag: ' || lv_accrue_on_receipt_flag);
END IF;*/
/* commented out by shyan for bug#26097568, begin
IF nvl(lv_accrue_on_receipt_flag
,'#') <> 'Y' THEN
commented out by shyan for bug#26097568, end */
/* Bug#26517301, dejiang.liu/20170728. Revert Bug#26097568 change and add
match option condition. */
IF nvl(lv_accrue_on_receipt_flag
,'#') <> 'Y'
OR lv_po_match_option = 'P' THEN
-- Attach project information which not accrue on receipt
-- or for PO matched option.
/* Bug#26800922 start, dejiang.liu/20170924. Modify logic to get project
info from distribution
first.*/
/*
ln_project_id := lr_ap_inv_line_item.project_id;
ln_task_id := lr_ap_inv_line_item.task_id;
lv_exp_type := lr_ap_inv_line_item.expenditure_type;
ld_exp_item_date := lr_ap_inv_line_item.expenditure_item_date;
ln_exp_organization_id := lr_ap_inv_line_item.expenditure_organization_id;
ln_pa_quantity := lr_ap_inv_line_item.pa_quantity;
*/
IF lr_ap_inv_dist_pa.project_id IS NOT NULL THEN
-- Get project information from distribution if attached.
ln_project_id := lr_ap_inv_dist_pa.project_id;
ln_task_id := lr_ap_inv_dist_pa.task_id;
lv_exp_type := lr_ap_inv_dist_pa.expenditure_type;
ld_exp_item_date := lr_ap_inv_dist_pa.expenditure_item_date;
ln_exp_organization_id := lr_ap_inv_dist_pa.expenditure_organization_id;
ln_pa_quantity := lr_ap_inv_dist_pa.pa_quantity;

ELSE
-- Get project information from lines.
ln_project_id := lr_ap_inv_line_item.project_id;
ln_task_id := lr_ap_inv_line_item.task_id;
lv_exp_type := lr_ap_inv_line_item.expenditure_type;
ld_exp_item_date := lr_ap_inv_line_item.expenditure_item_date;
ln_exp_organization_id :=
lr_ap_inv_line_item.expenditure_organization_id;
ln_pa_quantity := lr_ap_inv_line_item.pa_quantity;
END IF;
/* Bug#26800922 end. */

lv_project_accounting_context :=
lr_ap_inv_dist_item.project_accounting_context;
lv_pa_addition_flag := lr_ap_inv_dist_item.pa_addition_flag;

--END IF; --commented out by shyan for bug#26097568


END IF; /* Bug#26517301, dejiang.liu/20170728. Revert Bug#26097568 change. */
/* Bug#25466634 end. */
END IF;

-- added by zhiwei.xin for AP Open Interface begin


IF nvl(pv_external_flag
,'N') = 'Y' THEN
OPEN c_external_ccid(cp_trx_id => pr_tax_line.trx_id
,cp_trx_line_id => pr_tax_line.trx_line_id
,cp_tax_line_num => pr_tax_line.tax_line_num);
FETCH c_external_ccid
INTO ln_interim_recovery_acct;
CLOSE c_external_ccid;

--addition starts by chris on 20171213 Bug#27240998


-- FETCH DIST CCID FROM INTERFACED AP DISTRIBUTION TABLE

IF ln_interim_recovery_acct IS NULL THEN

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'ln_interim_recovery_acct iS NULL FETCHED FROM JAI
jai_interface_tax_lines_all for EXTERNAL'||
'pr_tax_line.trx_id: =>'||pr_tax_line.trx_id||
'pr_tax_line.trx_line_id:=>'||pr_tax_line.trx_line_id||
'pr_tax_line.tax_line_num:=>'||pr_tax_line.tax_line_num );
END IF;

--fetch item line count


OPEN c_item_line_count(c_trx_id => pr_tax_line.trx_id
);
FETCH c_item_line_count
INTO ln_item_count;
CLOSE c_item_line_count;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'ln_item_count: =>'||ln_item_count );
END IF;

--fetch previous tax line count


OPEN c_pre_tax_line_count(c_trx_id => pr_tax_line.trx_id,
c_trx_line_id =>
pr_tax_line.trx_line_id
);
FETCH c_pre_tax_line_count
INTO ln_pre_tax_count;
CLOSE c_pre_tax_line_count;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'ln_pre_tax_count: =>'||ln_pre_tax_count );
END IF;

--fetch total tax line count


OPEN c_total_tax_line_count(c_trx_id => pr_tax_line.trx_id
);
FETCH c_total_tax_line_count
INTO ln_total_tax_line_count;
CLOSE c_total_tax_line_count;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'ln_total_tax_line_count: =>'||ln_total_tax_line_count );
END IF;
--fetch max line num
OPEN c_max_line_num(pr_tax_line.trx_id);
FETCH c_max_line_num
INTO ln_max_inv_line_num;
CLOSE c_max_line_num;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'max line num ln_inv_line_num: =>'||ln_max_inv_line_num );
END IF;
-- cacluate the origin matched line number in ap_invoice_lines_all for the
tax line

ln_inv_line_number := nvl(ln_item_count, 0) + nvl(ln_pre_tax_count, 0)+


nvl(pr_tax_line.tax_line_num, 0);

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'ln_inv_line_number: =>'||ln_inv_line_number );
END IF;

loop
-- loop to fetch dist ccid from matched ap inv distribution
OPEN c_dist_ccid_ap_dist(c_invoice_id => pr_tax_line.trx_id,
c_inv_line_num =>
ln_inv_line_number
);
FETCH c_dist_ccid_ap_dist
INTO ln_interim_recovery_acct;
CLOSE c_dist_ccid_ap_dist;

ln_inv_line_number := ln_inv_line_number + ln_total_tax_line_count;

exit when ln_interim_recovery_acct is not null or ln_inv_line_number >


ln_max_inv_line_num;

end loop;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'ln_interim_recovery_acct: =>'||ln_interim_recovery_acct );

END IF;

END IF;

--addition ends by chris on 20171213 Bug#27240998

ELSE
-- added by zhiwei.xin for AP Open Interface end.

--Added by Junjian for AP tax flow begin


--Get interim recovery account code combination id
--Modified by Junjian on 07-01-2014 begin
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Before calling procedure
JAI_TAX_ACCOUNTING_PKG.get_accounting_info,' || ' pn_tax_rate_id->' ||
pr_tax_line.tax_rate_id || ' pn_tax_type_id->' ||
pr_tax_line.tax_type_id ||
' pn_organization_id' || pr_tax_line.organization_id || '
pn_org_id' || pr_tax_line.org_id ||
' pn_ledger_id' || pr_tax_line.ledger_id || '
pn_location_id' || pr_tax_line.location_id);
END IF;
jai_tax_accounting_pkg.get_accounting_info(pn_tax_rate_id =>
pr_tax_line.tax_rate_id
,pn_tax_type_id =>
pr_tax_line.tax_type_id
,pn_ledger_id =>
pr_tax_line.ledger_id
,pn_organization_id =>
nvl(pr_tax_line.organization_id

,pr_tax_line.org_id)
,pv_organization_type => 'IO'
,pn_location_id =>
pr_tax_line.location_id
,pr_tax_account_ccids => lr_acc_ids
,pv_process_message =>
pv_process_message
,pv_process_status =>
pv_process_status);
--Modified by Junjian on 07-01-2014 end

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'After calling procedure
JAI_TAX_ACCOUNTING_PKG.get_accounting_info,' || ' p_process_message->' ||
pv_process_message || ' p_process_status->' ||
pv_process_status);
END IF;

/* --Updated this branch for P2P accounting change in bug#18835939 Start


IF pn_diff_tpb <= 0 THEN
IF pv_tax_amount_type = TAX_AMOUNT_TYPE_REC THEN
ln_interim_recovery_acct := lr_acc_ids.interim_recovery_ccid;
lv_acct_type := G_INTERIM_RECOVERY_ACCT;
ELSIF pv_tax_amount_type = TAX_AMOUNT_TYPE_NREC THEN
ln_interim_recovery_acct := lr_acc_ids.expense_ccid;
lv_acct_type := G_EXPENSE_ACCT ;
ELSIF pv_tax_amount_type = TAX_AMOUNT_TYPE_TOTAL THEN
ln_interim_recovery_acct := lr_acc_ids.ap_accrual_ccid;
lv_acct_type := G_AP_ACCRUAL_ACCT ;
END IF;
--Updated this branch for P2P accounting change in bug#18835939 to remove
suspense account
ELSIF pn_diff_tpb > 0 THEN --c_suspense_ccid
ln_interim_recovery_acct := lr_acc_ids.suspense_ccid;
lv_acct_type := G_SUSPENSE_ACCT ;
END IF;
*/
--AELLURU FOR GENPACT26335118
OPEN c_match_type;
FETCH c_match_type
INTO lv_match_type_r;
--AELLURU FOR GENPACT26335118
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'lv_match_type_r' || lv_match_type_r);
/* Bug#26474772, dejiang.liu/20170722. Add condition for receipt match and
TPB = Invoice. */
--IF NVL(pv_jai_dist_ist_flag,'N') = 'Y' AND NVL(lv_match_type_r,0)=0 THEN
/*26881532*/
IF nvl(pv_jai_dist_ist_flag
,'N') = 'Y'
AND (nvl(lv_match_type_r
,0) = 0 OR (nvl(lv_match_type_r,0) > 0 AND
pr_tax_line.tax_point_basis = 'INVOICE')
OR ( nvl(lv_match_type_r,0) > 0 AND
nvl(lv_accrue_on_receipt_flag,'Y') <> 'Y' )) THEN

jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME ||
lv_api_name
,'ACCRUE on receipt is set to NO ,for
recverable acct is interim recovery');
--ADDED ITEM_TO_RECEIPT for GENPACT26335118
--Standard alone/ PO match invoice
IF pv_tax_amount_type = tax_amount_type_rec
/*added OR condition for bug#27067242*/
/*added and condition tax recoverable condition for bug#27657848*/
OR ( nvl(lv_match_type_r,0) > 0 AND pv_tax_amount_type= tax_amount_type_total AND
nvl(lv_accrue_on_receipt_flag,'Y') <> 'Y'
and nvl(pr_tax_line.recoverable_flag
,'N') = 'Y' )
THEN
ln_interim_recovery_acct := lr_acc_ids.interim_recovery_ccid;
--lv_acct_type := G_INTERIM_RECOVERY_ACCT;
ELSIF pv_tax_amount_type = tax_amount_type_nrec THEN
--ln_interim_recovery_acct := lr_acc_ids.expense_ccid; -- commented out
by zhiwei.xin for bug#19593295
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'PO matched /standalone invoice non
rec details');
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'TRX_ID ' || pr_tax_line.trx_id);
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'TRX_LINE_ID ' ||
pr_tax_line.trx_line_id);
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'before opening c_item_line_ccid ');
-- added by zhiwei.xin for bug#19593295 begin
OPEN c_item_line_ccid(cp_trx_id => pr_tax_line.trx_id
,cp_trx_line_id => pr_tax_line.trx_line_id);
FETCH c_item_line_ccid
INTO ln_interim_recovery_acct;
CLOSE c_item_line_ccid;

jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'after opening c_item_line_ccid acct
id ' || ln_interim_recovery_acct);
-- added by zhiwei.xin for bug#19593295 end.

-- added by zhiwei.xin for bug#20434565 begin


IF nvl(ln_interim_recovery_acct
,-1) = -1 THEN
OPEN c_inv_line_dft_ccid(cp_trx_id => pr_tax_line.trx_id
,cp_trx_line_id => pr_tax_line.trx_line_id);
FETCH c_inv_line_dft_ccid
INTO ln_interim_recovery_acct;
CLOSE c_inv_line_dft_ccid;

jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'default dist id fetched is ' ||
ln_interim_recovery_acct);
END IF;
-- added by zhiwei.xin for bug#20434565 end.

if pr_tax_line.tax_point_basis = 'INVOICE' and nvl(lv_match_type_r,0)


> 0
and nvl(lv_accrue_on_receipt_flag,'#') = 'Y'
then --added by mani for bug 28000685

open
c_item_expense_acct(pr_tax_line.organization_id,pr_tax_line.item_id);
fetch c_item_expense_acct into ln_item_expense_acct_b;
close c_item_expense_acct;

ln_interim_recovery_acct :=
nvl(ln_item_expense_acct_b,ln_interim_recovery_acct);

jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'1-Non recoverable part,receipt
matched invoice,if TPB is invoice,fetch item expense account ' ||
ln_item_expense_acct_b);

end if;

--lv_acct_type := G_EXPENSE_ACCT ;
ELSIF pv_tax_amount_type = tax_amount_type_total THEN

--ln_interim_recovery_acct := lr_acc_ids.ap_accrual_ccid; vkaranam


bug#25863843
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'tax is fully nonrecoverable account
fetched is ' ||
lr_acc_ids.ap_accrual_ccid);
-- added by zhiwei.xin for bug#19593295 begin
OPEN c_item_line_ccid(cp_trx_id => pr_tax_line.trx_id
,cp_trx_line_id => pr_tax_line.trx_line_id);
FETCH c_item_line_ccid
INTO ln_interim_recovery_acct;
CLOSE c_item_line_ccid;

jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'after opening c_item_line_ccid acct
id ' || ln_interim_recovery_acct);
-- added by zhiwei.xin for bug#19593295 end.

-- added by zhiwei.xin for bug#20434565 begin


IF nvl(ln_interim_recovery_acct
,-1) = -1 THEN
OPEN c_inv_line_dft_ccid(cp_trx_id => pr_tax_line.trx_id
,cp_trx_line_id => pr_tax_line.trx_line_id);
FETCH c_inv_line_dft_ccid
INTO ln_interim_recovery_acct;
CLOSE c_inv_line_dft_ccid;

jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'default dist id fetched is ' ||
ln_interim_recovery_acct);
END IF;
-- added by zhiwei.xin for bug#20434565 end.

if pr_tax_line.tax_point_basis = 'INVOICE' and nvl(lv_match_type_r,0)


> 0
and nvl(pr_tax_line.recoverable_flag,'N') <> 'Y'
and nvl(lv_accrue_on_receipt_flag,'#') = 'Y'
then --added by mani for bug 28000685

open
c_item_expense_acct(pr_tax_line.organization_id,pr_tax_line.item_id);
fetch c_item_expense_acct into ln_item_expense_acct_b;
close c_item_expense_acct;

ln_interim_recovery_acct :=
nvl(ln_item_expense_acct_b,ln_interim_recovery_acct);

jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'2-Non recoverable part,receipt
matched invoice,if TPB is invoice,fetch item expense account ' ||
ln_item_expense_acct_b);

end if;

--lv_acct_type := G_AP_ACCRUAL_ACCT ;
END IF;

--start additions by vkaranam for bug#22096463

IF lr_ap_inv_line_item.source_event_class_code = 'INTERCOMPANY_TRX' THEN

OPEN c_ship_network_info(ln_invoice_id);
FETCH c_ship_network_info
INTO ln_interim_recovery_acct;
CLOSE c_ship_network_info;
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'inteorg payable account for
intercompany transaction ' ||
ln_interim_recovery_acct);
END IF;

ELSE
--Receipt Match invoice
--ln_interim_recovery_acct := lr_acc_ids.ap_accrual_ccid;
/*commented by vkaranam for bug#25863843,as in case of receipt matched
invoice ,tax account should always hit
accrual account
--Modified by shasha.ding for bug#25863843 recoverable tax get interim
account --begin*
IF nvl(pr_tax_line.recoverable_flag,'N') = 'N' THEN
ln_interim_recovery_acct := lr_acc_ids.ap_accrual_ccid;
ELSE
ln_interim_recovery_acct := lr_acc_ids.interim_recovery_ccid;
END IF ;
/*Modified by shasha.ding for bug#25863843 recoverable tax get interim
account --end*/
--lv_acct_type := G_AP_ACCRUAL_ACCT;

-- ln_interim_recovery_acct := lr_acc_ids.ap_accrual_ccid;--25863843
,vkaranam
--start additions for bug#25863843

/*---------------------------------------------------------------------------------
--
FIX SPECIFIC TO GENPACT26335118 ,
IF TPB IS DELIVERY OR (TPB IS INVOICE AND TAX NON RECOVERABLE)-->HIT
ACCRUAL ACCOUNT
--IN CASE OF RECOVERABLE TAX AMOUNT --> HIT INTERIM RECOVERY

-----------------------------------------------------------------------------------
*/
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'pr_tax_line.tax_point_basis-->' ||
pr_tax_line.tax_point_basis);
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'pr_tax_line.recoverable_flag-->' ||
pr_tax_line.recoverable_flag);

jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'trx_type=' || pr_tax_line.trx_type ||
'lr_acc_ids.liability_ccid=' ||
lr_acc_ids.liability_ccid);

IF pr_tax_line.trx_type IN ('DEBIT'
,'CREDIT') THEN
--MANI FOR RTV HCANGES BUG 26321149

--mani for bug 26567585


IF nvl(pr_tax_line.recoverable_flag,'N') = 'Y' then
/* jls ln_interim_recovery_acct := lr_acc_ids.liability_ccid; */
ln_interim_recovery_acct := lr_acc_ids.interim_recovery_ccid;
else
-- ln_interim_recovery_acct := lr_acc_ids.expense_ccid;
OPEN c_item_line_ccid (cp_trx_id => pr_tax_line.trx_id,
cp_trx_line_id => pr_tax_line.trx_line_id
);

FETCH c_item_line_ccid
INTO ln_interim_recovery_acct;

CLOSE c_item_line_ccid;
end if;
--mani for bug 26567585

ELSE
--taj accounting changes
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'receipt matched invoice
pr_tax_line.tax_type_id ' ||
pr_tax_line.tax_type_id);
lv_tax_setup_tpb := NULL;
OPEN c_tax_type_tpb(pr_tax_line.tax_type_id);
FETCH c_tax_type_tpb
INTO lv_tax_setup_tpb;
CLOSE c_tax_type_tpb;

jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'tax basis setup in tax type ui is '
|| lv_tax_setup_tpb);

--AELLURU FOR GENPACT26335118


/*ADDED and ACCRUE ON receipt flag condition for bug#27067242*/
IF (((pr_tax_line.tax_point_basis = 'DELIVERY' OR
nvl(lv_tax_setup_tpb
,'X') = 'DELIVERY') AND nvl(lv_accrue_on_receipt_flag,'N')
='Y')
OR
(pr_tax_line.tax_point_basis = 'INVOICE' AND
nvl(pr_tax_line.recoverable_flag
,'N') = 'N')) THEN
--AELLURU FOR GENPACT26335118
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'Inside RECIEPT MATCHED HITTING AP
ACCURAL');
OPEN c_item_line_ccid(cp_trx_id => pr_tax_line.trx_id
,cp_trx_line_id => pr_tax_line.trx_line_id);
FETCH c_item_line_ccid
INTO ln_interim_recovery_acct;
CLOSE c_item_line_ccid;

jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'after opening c_item_line_ccid
acct id ' ||
ln_interim_recovery_acct);
-- added by zhiwei.xin for bug#19593295 end.

-- added by zhiwei.xin for bug#20434565 begin


IF nvl(ln_interim_recovery_acct
,-1) = -1 THEN
OPEN c_inv_line_dft_ccid(cp_trx_id => pr_tax_line.trx_id
,cp_trx_line_id => pr_tax_line.trx_line_id);
FETCH c_inv_line_dft_ccid
INTO ln_interim_recovery_acct;
CLOSE c_inv_line_dft_ccid;

jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'default dist id fetched is ' ||
ln_interim_recovery_acct);
END IF;
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'its receipt matched invoice with
accrue on receipt YES pass ap accrual ' ||
ln_interim_recovery_acct);
--end 25863843
--AELLURU FOR GENPACT26335118
ELSE
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'Inside ELSE RECIEPT MATCHED
HITTING INTERIM RECOVERY');
ln_interim_recovery_acct := lr_acc_ids.interim_recovery_ccid;
END IF;
--AELLURU FOR GENPACT26335118
END IF;

END IF;
--Updated this branch for P2P accounting change in bug#18835939 End

-- added by zhiwei.xin for AP Open Interface begin


END IF;
-- added by zhiwei.xin for AP Open Interface end.
/* jls for bug 27596674
IF pr_tax_line.trx_type IN ('DEBIT'
,'CREDIT') THEN
--MANI FOR RTV HCANGES BUG 26321149

--mani for bug 26567585


--from here added by mani for bug 26638278
IF nvl(pr_tax_line.recoverable_flag,'N') = 'Y' then

/*IF pr_tax_line.APPLIED_TO_APPLICATION_ID IS NOT NULL THEN


--DEBIT/CREDIT CREATED WITH REFERENCE
OPEN c_claim_chk(pr_tax_line.APPLIED_TO_APPLICATION_ID,
pr_tax_line.APPLIED_TO_ENTITY_CODE,
pr_tax_line.APPLIED_TO_TRX_ID,
pr_tax_line.APPLIED_TO_TRX_LINE_ID,
pr_tax_line.tax_rate_id
);
FETCH c_claim_chk INTO lv_claim_chk;
CLOSE c_claim_chk;

jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'debit memo lv_claim_chk=' ||
lv_claim_chk);

IF NVL(lv_claim_chk,'N')<>'Y' THEN
--CR INVENTORY AP ACCRUAL
OPEN c_item_line_ccid(cp_trx_id => pr_tax_line.trx_id
,cp_trx_line_id => pr_tax_line.trx_line_id);
FETCH c_item_line_ccid
INTO ln_interim_recovery_acct;
CLOSE c_item_line_ccid;

ELSE
--CR TAX LIABILITY
ln_interim_recovery_acct := lr_acc_ids.liability_ccid;

END IF;

ELSE
--MANUAL DEBIT/CREDIT INVOICES

ln_interim_recovery_acct := lr_acc_ids.interim_recovery_ccid;

END IF;/
ln_interim_recovery_acct := lr_acc_ids.interim_recovery_ccid;
--AELLURU FOR CLAIM CHANGES 27118109

else --NON RECOVERABLE


OPEN c_item_line_ccid(cp_trx_id => pr_tax_line.trx_id
,cp_trx_line_id => pr_tax_line.trx_line_id);
FETCH c_item_line_ccid
INTO ln_interim_recovery_acct;
CLOSE c_item_line_ccid;
--upto here added by mani for bug 26638278
end if;

jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'debit memo
ln_interim_recovery_acct=' ||
ln_interim_recovery_acct);
--mani for bug 26567585

END IF;

jls for bug */

--addition starts by chris on 20170920 PA-FLEX bug#26695420


--if PA related invoices with PA flex account generator enabled,
--can not get ccid from item dist and line, needs to call PA-FLEX

l_allow_pa_override := FND_PROFILE.VALUE('PA_ALLOW_FLEXBUILDER_OVERRIDES');

if ln_interim_recovery_acct is null
/* Bug#26800922, dejiang.liu/20170924. Modify logic to use variable. */
--and lr_ap_inv_line_item.project_id is not null THEN
AND ln_project_id IS NOT NULL THEN

jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'Call PA FLEX build to generate dist
ccid, ' ||
'lr_ap_inv_line_item.project_id = ' ||
ln_project_id||','||
'lr_ap_inv_line_item.invoice_id = ' ||
lr_ap_inv_line_item.invoice_id||','||

'lr_ap_inv_line_item.invoice_line_number = ' || lr_ap_inv_line_item.line_number);

--l_pa_success := AP_ETAX_UTILITY_PKG.GET_CCID_FROM_PROJECTS
l_pa_success := jai_pa_costing_pkg.jai_get_CCID_FROM_PRJ
( lr_ap_inv_line_item.invoice_id ,
lr_ap_inv_line_item.line_number ,
p_ccid => ln_interim_recovery_acct,
p_error_message => lv_Error_Code );

l_pa_called := 'Y';

IF( NOT l_pa_success) then

jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME ||
lv_api_name,lv_Error_Code||' :Error while retriving the ccid from projects');

END IF;

IF(l_allow_pa_override = 'Y') then

IF (ln_interim_recovery_acct IS NULL) THEN


jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME ||
lv_api_name,'l_pa_called =' ||l_pa_called||','||'User has not provided a overide
account on line');

END IF;

ELSIF (ln_interim_recovery_acct IS NULL) then

jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME ||
lv_api_name,'l_pa_called =' ||l_pa_called||','||'User has not defined a project
account and the Project Override Flag is Not Set');

END IF;

jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'l_pa_called =' ||l_pa_called||','||
'ln_interim_recovery_acct=> ' ||
ln_interim_recovery_acct );

END IF;

--addition ends by chris on 20170920 PA-FLEX bug#26695420

--addition starts by chris on 20171214 Bug#27240998


-- FETCH DIST CCID FROM INTERFACED AP DISTRIBUTION TABLE

IF ln_interim_recovery_acct IS NULL and pr_tax_line.trx_type IN (


'CREDIT') THEN
OPEN c_external_ccid(cp_trx_id => pr_tax_line.trx_id
,cp_trx_line_id => pr_tax_line.trx_line_id
,cp_tax_line_num => pr_tax_line.tax_line_num);
FETCH c_external_ccid
INTO ln_interim_recovery_acct;
CLOSE c_external_ccid;

IF ln_interim_recovery_acct IS NULL THEN

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'ln_interim_recovery_acct iS NULL FETCHED FROM JAI
jai_interface_tax_lines_all for CREDIT EXTERNAL'||
'pr_tax_line.trx_id: =>'||pr_tax_line.trx_id||
'pr_tax_line.trx_line_id:=>'||pr_tax_line.trx_line_id||
'pr_tax_line.tax_line_num:=>'||pr_tax_line.tax_line_num );
END IF;

--fetch item line count


OPEN c_item_line_count(c_trx_id => pr_tax_line.trx_id
);
FETCH c_item_line_count
INTO ln_item_count;
CLOSE c_item_line_count;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'ln_item_count: =>'||ln_item_count );
END IF;

--fetch previous tax line count


OPEN c_pre_tax_line_count(c_trx_id => pr_tax_line.trx_id,
c_trx_line_id =>
pr_tax_line.trx_line_id
);
FETCH c_pre_tax_line_count
INTO ln_pre_tax_count;
CLOSE c_pre_tax_line_count;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'ln_pre_tax_count: =>'||ln_pre_tax_count );
END IF;

--fetch total tax line count


OPEN c_total_tax_line_count(c_trx_id => pr_tax_line.trx_id
);
FETCH c_total_tax_line_count
INTO ln_total_tax_line_count;
CLOSE c_total_tax_line_count;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'ln_total_tax_line_count: =>'||ln_total_tax_line_count );

END IF;

--fetch max line num


OPEN c_max_line_num(pr_tax_line.trx_id);
FETCH c_max_line_num
INTO ln_max_inv_line_num;
CLOSE c_max_line_num;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'max line num ln_inv_line_num: =>'||ln_max_inv_line_num );

END IF;

-- cacluate the origin matched line number in ap_invoice_lines_all for the


tax line

ln_inv_line_number := nvl(ln_item_count, 0) + nvl(ln_pre_tax_count, 0)+


nvl(pr_tax_line.tax_line_num, 0);

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'ln_inv_line_number: =>'||ln_inv_line_number );

END IF;

loop
-- loop to fetch dist ccid from matched ap inv distribution
OPEN c_dist_ccid_ap_dist(c_invoice_id => pr_tax_line.trx_id,
c_inv_line_num =>
ln_inv_line_number
);
FETCH c_dist_ccid_ap_dist
INTO ln_interim_recovery_acct;
CLOSE c_dist_ccid_ap_dist;

ln_inv_line_number := ln_inv_line_number + ln_total_tax_line_count;

exit when ln_interim_recovery_acct is not null or ln_inv_line_number >


ln_max_inv_line_num;

end loop;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'ln_interim_recovery_acct: =>'||ln_interim_recovery_acct );
END IF;

END IF;

END IF;

--addition ends by chris on 20171214 Bug#27240998

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'ln_interim_recovery_acct->' || ln_interim_recovery_acct);
END IF;
--Added by Junjian for AP tax flow end

--Modified by Junjian for AP tax flow begin


DELETE ap_invoice_distributions_all invoice_dist
WHERE invoice_id = ln_invoice_id
AND line_type_lookup_code = lv_misc
/* Bug#27479551, dejiang.liu/20180310. Add logic to not delete line with
distribution has been posted. */
AND NOT EXISTS (SELECT 'Invoice line has distribution posted'
FROM ap_invoice_distributions_all dist_ref
WHERE dist_ref.posted_flag = 'Y'
AND dist_ref.invoice_id = invoice_dist.invoice_id
AND dist_ref.invoice_line_number =
invoice_dist.invoice_line_number)

AND (EXISTS (SELECT 1


FROM jai_rec_nrec_dist tax_dist
WHERE tax_dist.tax_dist_id =
invoice_dist.invoice_distribution_id
AND tax_dist.trx_line_number = pr_tax_line.trx_line_number
AND tax_dist.source_tax_line_num =
invoice_dist.invoice_line_number
AND tax_dist.tax_rate_id = pr_tax_line.tax_rate_id
AND tax_dist.application_id = 200
AND tax_dist.entity_code = 'AP_INVOICES'
/* AND tax_dist.claim_term_id IS NULL--Added by Junjian
AND nvl(tax_dist.accounted_flag,'N') = 'N' --Added by
Junjian*/
--comment starts by chris due to bug#25778149
-- in case tax recoverable_flag of defaulted and modfied
tax lines differ,
-- the default tax cannot be deleted
-- duplicate inv dists will be generated
AND tax_dist.recoverable_flag = decode(pv_tax_amount_type
,tax_amount_type_rec
,'Y'
,tax_amount_type_nrec
,'N'

,tax_dist.recoverable_flag)
--uncommented by aelluru for p1 bug 26381162
-- comment ends by chris due to bug#25778149
AND tax_dist.trx_id = ln_invoice_id));
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'.Delete from ap_invoice_distributions_all, ' || SQL%ROWCOUNT
|| ' ROWS DELETED ');
END IF; --( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL)

DELETE ap_invoice_lines_all invoice_line


WHERE invoice_id = ln_invoice_id
AND line_type_lookup_code = lv_misc
/* Bug#27479551, dejiang.liu/20180310. Add logic to not delete line with
distribution has been posted. */
AND NOT EXISTS (SELECT 'Invoice line has distribution posted'
FROM ap_invoice_distributions_all dist_ref
WHERE dist_ref.posted_flag = 'Y'
AND dist_ref.invoice_id = invoice_line.invoice_id
AND dist_ref.invoice_line_number =
invoice_line.line_number)
AND (EXISTS (SELECT 1
FROM jai_rec_nrec_dist tax_dist
WHERE tax_dist.trx_id = ln_invoice_id
AND tax_dist.trx_line_number = pr_tax_line.trx_line_number
AND tax_dist.tax_rate_id = pr_tax_line.tax_rate_id
AND tax_dist.application_id = 200
AND tax_dist.entity_code = 'AP_INVOICES'
/* AND tax_dist.claim_term_id IS NULL--Added
by Junjian
AND nvl(tax_dist.accounted_flag,'N') = 'N'
--Added by Junjian
*/
--comment starts by chris due to bug#25778149
-- in case tax recoverable_flag of defaulted and modfied
tax lines differ,
-- the default tax cannot be deleted
-- duplicate inv lines will be generated
AND tax_dist.recoverable_flag = decode(pv_tax_amount_type
,tax_amount_type_rec
,'Y'
,tax_amount_type_nrec
,'N'
,tax_dist.recoverable_flag)
--uncommented by aelluru for p1 bug 26381162
-- comment ends by chris due to bug#25778149
AND tax_dist.source_tax_line_num =
invoice_line.line_number));

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'.Delete from ap_invoice_lines_all, ' || SQL%ROWCOUNT || '
ROWS DELETED ');
END IF; --( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL)

DELETE jai_rec_nrec_dist tax_dist


WHERE tax_dist.trx_line_number = pr_tax_line.trx_line_number
AND tax_dist.tax_rate_id = pr_tax_line.tax_rate_id
--AND tax_dist.tax_line_id = pr_tax_line.tax_line_id
AND tax_dist.application_id = 200
AND tax_dist.entity_code = 'AP_INVOICES'
--comment starts by chris due to bug#25778149
-- in case tax recoverable_flag of defaulted and modfied tax lines
differ,
-- the default tax cannot be deleted
-- duplicate jai_rec_nrec_dist rows will be generated
AND tax_dist.recoverable_flag = decode(pv_tax_amount_type
,tax_amount_type_rec
,'Y'
,tax_amount_type_nrec
,'N'
,tax_dist.recoverable_flag)
--uncommented by aelluru for p1 bug 26381162
-- comment ends by chris due to bug#25778149

/* Bug#27479551, dejiang.liu/20180310. Add logic to not delete line with


distribution has been posted. */
AND NOT EXISTS (SELECT 'Invoice line has distribution posted'
FROM ap_invoice_distributions_all dist_ref
WHERE dist_ref.posted_flag = 'Y'
AND dist_ref.invoice_id = tax_dist.trx_id
AND dist_ref.invoice_line_number =
tax_dist.source_tax_line_num)
AND tax_dist.trx_id = ln_invoice_id;
/* AND tax_dist.claim_term_id IS NULL--Added by Junjian
AND nvl(tax_dist.accounted_flag,'N') = 'N'; --Added by Junjian
*/
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'.Delete from jai_rec_nrec_dist, ' || SQL%ROWCOUNT || ' ROWS
DELETED ');
END IF; --( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL)
--Modified by Junjian for AP tax flow end
--AELLURU FOR GENPACT26335118
BEGIN
FOR unwanted_data IN (
/*First query to delete old tax when user is going and
chnaging the tax rate manually*/
SELECT tax_dist_id distribution_id
,source_tax_line_num line_number
,tax_dist.trx_id invoice_id
,tax_dist.tax_rate_id
,tax_dist.tax_rate_code
,tax_dist.trx_line_number

FROM jai_rec_nrec_dist tax_dist


,jai_tax_lines jttl
WHERE jttl.tax_rate_id <> tax_dist.tax_rate_id
AND jttl.tax_line_id = tax_dist.tax_line_id
AND tax_dist.trx_line_number = jttl.trx_line_id(+)
AND jttl.trx_id = tax_dist.trx_id
AND tax_dist.application_id =
tax_dist.application_id
AND tax_dist.entity_code = tax_dist.entity_code
AND tax_dist.application_id = 200
AND tax_dist.entity_code = 'AP_INVOICES'
AND tax_dist.trx_id = ln_invoice_id
AND tax_dist.trx_line_number =
ln_invoice_item_line_num

/*Second query is to delete the line which is manually


deleted in Tax lines*/
UNION
SELECT tax_dist_id distribution_id
,source_tax_line_num line_number
,tax_dist.trx_id invoice_id
,tax_dist.tax_rate_id
,tax_dist.tax_rate_code
,tax_dist.trx_line_number

FROM jai_rec_nrec_dist tax_dist


WHERE tax_dist.application_id = 200
AND tax_dist.entity_code = 'AP_INVOICES'
AND tax_dist.trx_id = ln_invoice_id
AND tax_dist.trx_line_number =
ln_invoice_item_line_num
AND tax_line_id NOT IN (SELECT tax_line_id
FROM jai_tax_lines
WHERE trx_id =
tax_dist.trx_id
AND trx_line_id =
tax_dist.trx_line_id
AND
tax_dist.application_id = 200
AND tax_dist.entity_code
= 'AP_INVOICES')
/* Bug#26474772, dejiang.liu/20170718. Add logic for
lines which tax recovery flag changed. */
/* jls added for bug 26680649 */
UNION
SELECT aid.invoice_distribution_id distribution_id
,aid.invoice_line_number line_number
,aid.invoice_id invoice_id
,-1 tax_rate_id
,NULL tax_rate_code
,NULL trx_line_number
FROM ap_invoice_distributions_all aid
/* Bug#26815021, dejiang.liu/20170917. Add table
join of invoice line. */
,ap_invoice_lines_all ail
WHERE aid.invoice_id = ln_invoice_id
/* Bug#26815021, dejiang.liu/20170917. Add join
condition. */
AND aid.invoice_id = ail.invoice_id
AND ail.line_number = aid.invoice_line_number
/* Bug#26815021, dejiang.liu/20170917. Add condition
only proceed by tax line for external trx. */
AND (nvl(pv_external_flag
,'N') = 'N' OR (nvl(pv_external_flag
,'N') = 'Y'
AND ail.reference_2 =
to_char(pr_tax_line.tax_line_id)))
AND aid.line_type_lookup_code = 'MISCELLANEOUS'
/* Bug#27040931, dejiang.liu/20171112. Add condition
for tax populated REC/NREC. */
AND pv_jai_dist_ist_flag = 'Y'
/* Bug#26840925, dejiang.liu/20171128. Add condition to
exclude reversed distribution. */
AND nvl(aid.reversal_flag
,'N') <> 'Y'
/* Bug#27479551, dejiang.liu/20180310. Add logic to not
delete line with
distribution has been posted. */
AND NOT EXISTS (SELECT 'Invoice line has
distribution posted'
FROM ap_invoice_distributions_all
dist_ref
WHERE dist_ref.posted_flag = 'Y'
AND dist_ref.invoice_id =
aid.invoice_id
AND dist_ref.invoice_line_number
= aid.invoice_line_number)

AND NOT EXISTS (SELECT 1


FROM jai_rec_nrec_dist nrd
WHERE nrd.tax_dist_id =
aid.invoice_distribution_id
AND nrd.TRX_ID = aid.INVOICE_ID
AND nrd.application_id = 200
AND nrd.entity_code = 'AP_INVOICES'
)
AND ail.reference_2 NOT IN (
SELECT tax_line_id
FROM jai_tax_lines
WHERE trx_id = aid.invoice_id
AND tax_line_id = ail.reference_2
AND application_id = 200
AND entity_code = 'AP_INVOICES')
UNION
SELECT tax_dist_id distribution_id
,source_tax_line_num line_number
,tax_dist.trx_id invoice_id
,tax_dist.tax_rate_id tax_rate_id
,tax_dist.tax_rate_code tax_rate_code
,tax_dist.trx_line_number trx_line_number
FROM jai_rec_nrec_dist tax_dist
WHERE tax_dist.application_id = 200
AND tax_dist.entity_code = 'AP_INVOICES'
AND tax_dist.trx_id = ln_invoice_id
AND tax_dist.trx_line_number =
ln_invoice_item_line_num
AND tax_dist.tax_line_id = pr_tax_line.tax_line_id
AND tax_dist.tax_rate_id = pr_tax_line.tax_rate_id
AND (
/* Bug#27040931, dejiang.liu/20171112. Add
condition for total method. */
(pv_tax_amount_type = TAX_AMOUNT_TYPE_TOTAL) OR

(pv_rec_split_flag = 'N' AND


tax_dist.recoverable_flag <>
decode(pv_tax_amount_type

,tax_amount_type_rec
,'Y'

,tax_amount_type_nrec
,'N'
)) OR
/*
Splitted lines should be deleted before
populated.
*/
(pv_rec_split_flag = 'Y' AND
tax_dist.recoverable_flag =
decode(pv_tax_amount_type

,tax_amount_type_rec
,'Y'

,tax_amount_type_nrec
,'N'))))
LOOP
DELETE FROM ap_invoice_distributions_all aid
WHERE line_type_lookup_code = 'MISCELLANEOUS'
AND invoice_id = unwanted_data.invoice_id
AND invoice_distribution_id = unwanted_data.distribution_id
/* Bug#27479551, dejiang.liu/20180310. Add logic to not delete line with
distribution has been posted. */
AND NOT EXISTS (SELECT 'Invoice line has distribution posted'
FROM ap_invoice_distributions_all dist_ref
WHERE dist_ref.posted_flag = 'Y'
AND dist_ref.invoice_id = aid.invoice_id
AND dist_ref.invoice_line_number =
aid.invoice_line_number);

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'for tax_rate_id' || unwanted_data.tax_rate_code ||
'.Delete from ap_invoice_distributions_all, ' || SQL
%ROWCOUNT || ' ROWS DELETED ');
END IF;

DELETE FROM ap_invoice_lines_all ail


WHERE invoice_id = unwanted_data.invoice_id
AND line_type_lookup_code = 'MISCELLANEOUS'
AND line_number = unwanted_data.line_number
/* Bug#27479551, dejiang.liu/20180310. Add logic to not delete line with
distribution has been posted. */
AND NOT EXISTS (SELECT 'Invoice line has distribution posted'
FROM ap_invoice_distributions_all dist_ref
WHERE dist_ref.posted_flag = 'Y'
AND dist_ref.invoice_id = ail.invoice_id
AND dist_ref.invoice_line_number = ail.line_number);

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'for tax_rate_id' || unwanted_data.tax_rate_code ||
'.Delete from ap_invoice_distributions_all, ' || SQL
%ROWCOUNT || ' ROWS DELETED ');
END IF;

DELETE FROM jai_rec_nrec_dist


WHERE tax_rate_id = unwanted_data.tax_rate_id
AND source_tax_line_num = unwanted_data.line_number
AND entity_code = 'AP_INVOICES'
AND tax_dist_id = unwanted_data.distribution_id
AND trx_id = unwanted_data.invoice_id;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'for tax_rate_id' || unwanted_data.tax_rate_code ||
'.Delete from jai_rec_nrec_dist, ' || SQL%ROWCOUNT || '
ROWS DELETED ');
END IF;
END LOOP;

END;
--AELLURU FOR GENPACT26335118
--Modified by Junjian for Reverse Charge begin
--Modified by Junjian for Inclusive Tax begin
lv_inv_line_flag := 'Y';
-- added by zhiwei.xin for AP Open Interface begin
IF nvl(pv_external_flag
,'N') = 'N' THEN
-- added by zhiwei.xin for AP Open Interface end.
IF nvl(pr_tax_line.self_assessed_flag
,'N') = 'Y' THEN
lv_inv_line_flag := 'N';
END IF;

-- added by zhiwei.xin for AP Open Interface begin


END IF;
-- added by zhiwei.xin for AP Open Interface end.

IF nvl(pr_tax_line.inclusive_flag
,'N') = 'Y' THEN
lv_inv_line_flag := 'N';
END IF;

-- moved by chris to get the line_num


--after delete default/temp rows to avoid wrong line number generated
-- due to bug#25778149
OPEN c_inv_line_num(pr_tax_line);
FETCH c_inv_line_num
INTO ln_exist_inv_line_num;
CLOSE c_inv_line_num;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'.ln_exist_inv_line_num, ' || ln_exist_inv_line_num);
END IF;

/* Bug#27479551, dejiang.liu/20180310. Modify logic to use existing as


last number. */
/*
IF ln_exist_inv_line_num IS NOT NULL THEN
ln_inv_line_num := ln_exist_inv_line_num - 1;
ELSE
OPEN c_max_line_num(ln_invoice_id);
FETCH c_max_line_num
INTO ln_inv_line_num;
CLOSE c_max_line_num;
END IF;
*/
OPEN c_max_line_num(ln_invoice_id);
FETCH c_max_line_num
INTO ln_inv_line_num;
CLOSE c_max_line_num;

IF ln_exist_inv_line_num IS NOT NULL


AND ln_exist_inv_line_num > ln_inv_line_num THEN
ln_inv_line_num := ln_exist_inv_line_num;
END IF;
/* Bug#27479551 end, dejiang.liu/20180310. */

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'.ln_inv_line_num, ' || ln_inv_line_num);
END IF;

--moved by chris to get the line_num


--after delete default/temp rows to avoid wrong line number generated
--due to bug#25778149

IF lv_inv_line_flag = 'Y' THEN


--Modified by Junjian for Inclusive Tax end
FOR line IN 1 .. pn_num_lines_insert LOOP
ln_inv_line_num := ln_inv_line_num + 1;
lr_ap_inv_line_tax := NULL;
lr_ap_inv_line_tax.invoice_id := ln_invoice_id;
lr_ap_inv_line_tax.line_number := ln_inv_line_num;
lr_ap_inv_line_tax.line_type_lookup_code := lv_misc;
lr_ap_inv_line_tax.description :=
pr_tax_line.tax_rate_code;
lr_ap_inv_line_tax.org_id := pr_tax_line.org_id;
lr_ap_inv_line_tax.match_type := lv_match_type;
lr_ap_inv_line_tax.default_dist_ccid := ln_item_expense_acct;
lr_ap_inv_line_tax.accounting_date :=
lr_ap_inv_line_item.accounting_date;
lr_ap_inv_line_tax.period_name :=
lr_ap_inv_line_item.period_name;
lr_ap_inv_line_tax.deferred_acctg_flag :=
lr_ap_inv_line_item.deferred_acctg_flag;
lr_ap_inv_line_tax.def_acctg_start_date :=
lr_ap_inv_line_item.def_acctg_start_date;
lr_ap_inv_line_tax.def_acctg_end_date :=
lr_ap_inv_line_item.def_acctg_end_date;
lr_ap_inv_line_tax.def_acctg_number_of_periods :=
lr_ap_inv_line_item.def_acctg_number_of_periods;
lr_ap_inv_line_tax.def_acctg_period_type :=
lr_ap_inv_line_item.def_acctg_period_type;
lr_ap_inv_line_tax.set_of_books_id :=
lr_ap_inv_line_item.set_of_books_id;
lr_ap_inv_line_tax.amount := nvl(ln_tax_amt_trx_curr
,0);
/* Bug#26548186, dejiang.liu/20170810. Add column update for base_amount.
*/
/* Bug#26801260, dejiang.liu/20170924. Modify logic to update base amount
only for foreign currency. */
IF pr_tax_line.functional_currency_code <> pr_tax_line.trx_currency_code
THEN
lr_ap_inv_line_tax.base_amount := nvl(ln_tax_amt_fun_curr
,0);
END IF;
lr_ap_inv_line_tax.wfapproval_status :=
lr_ap_inv_line_item.wfapproval_status;
lr_ap_inv_line_tax.creation_date := SYSDATE;
lr_ap_inv_line_tax.created_by := fnd_global.user_id;
lr_ap_inv_line_tax.last_updated_by := fnd_global.user_id;
lr_ap_inv_line_tax.last_update_date := SYSDATE;
lr_ap_inv_line_tax.last_update_login := fnd_global.login_id;
--Modified by Junjian for AP tax flow
lr_ap_inv_line_tax.project_id := ln_project_id;
lr_ap_inv_line_tax.task_id := ln_task_id;
lr_ap_inv_line_tax.expenditure_type := lv_exp_type;
lr_ap_inv_line_tax.expenditure_item_date := ld_exp_item_date;
lr_ap_inv_line_tax.expenditure_organization_id := ln_exp_organization_id;

/* Bug#27040931, dejiang.liu/20171030. Set default value to assets tracking


flag. */
lr_ap_inv_line_tax.assets_tracking_flag :=
nvl(lr_ap_inv_line_item.assets_tracking_flag
,'N');

--addition starts by chris Bug#25944141


IF nvl(pr_tax_line.recoverable_flag
,'N') <> 'Y' THEN
--Only recoverable_flag of the tax line <> 'Y'
-- commented by chris on 20170606 due to BOE invoice error
-- while inserting into ap_invoice_distributions_all.asset_tracking_flag
--lr_ap_inv_line_tax.ASSETS_TRACKING_FLAG :=
lr_ap_inv_line_item.ASSETS_TRACKING_FLAG;
-- ADDED by chris on 20170606 due to BOE invoice error
-- if the source is null, set it as 'N'
lr_ap_inv_line_tax.assets_tracking_flag :=
nvl(lr_ap_inv_line_item.assets_tracking_flag
,'N');
lr_ap_inv_line_tax.asset_book_type_code :=
lr_ap_inv_line_item.asset_book_type_code;
lr_ap_inv_line_tax.asset_category_id :=
lr_ap_inv_line_item.asset_category_id;

/* Bug#26884193 start, dejiang.liu/20171008. Add else logic for recoverable


tax. */
ELSE
-- For recoverable tax.
IF pv_tax_amount_type = TAX_AMOUNT_TYPE_REC THEN
-- Recoverable part for recoverable tax.
lr_ap_inv_line_tax.assets_tracking_flag := 'N';

ELSIF pv_tax_amount_type = TAX_AMOUNT_TYPE_NREC THEN


-- Non-Recoverable part for recoverable tax.
lr_ap_inv_line_tax.assets_tracking_flag :=
nvl(lr_ap_inv_line_item.assets_tracking_flag
,'N');
lr_ap_inv_line_tax.asset_book_type_code :=
lr_ap_inv_line_item.asset_book_type_code;
lr_ap_inv_line_tax.asset_category_id :=
lr_ap_inv_line_item.asset_category_id;

ELSE
-- Other condition, use default settings.
lr_ap_inv_line_tax.assets_tracking_flag := 'N';
--NULL;
END IF;
/* Bug#26884193 end, dejiang.liu/20171008. */

END IF;
--addition ends by chris Bug#25944141

/* Bug#25466634, dejiang.liu/20170327. Set PA quantity. */


lr_ap_inv_line_tax.pa_quantity := ln_pa_quantity;

lr_ap_inv_line_tax.po_distribution_id :=
lr_ap_inv_line_item.po_distribution_id;
--Modified by Junjian for AP tax flow begin
lr_ap_inv_line_tax.reference_1 := pr_tax_line.trx_line_number;
lr_ap_inv_line_tax.reference_2 := pr_tax_line.tax_line_id;

lr_ap_inv_line_tax.default_dist_ccid := ln_interim_recovery_acct;
IF pv_tax_amount_type = tax_amount_type_rec
AND line = 1 THEN
-- insert ap line/distribution for recoverable part
lr_ap_inv_line_tax.default_dist_ccid := ln_interim_recovery_acct;
ELSIF pv_tax_amount_type = tax_amount_type_rec
AND line = 2 THEN
-- insert negative amt line for ap line/distribution
lr_ap_inv_line_tax.amount := -ln_tax_amt_trx_curr;
END IF;
--AELLURU FOR 27294946
lv_boe_flag := jai_boe_tax_det_pkg.is_boe_tax(pn_tax_type_id =>
pr_tax_line.tax_type_id);
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'BOE tax flag:' || lv_boe_flag
||',pr_tax_line.entity_code='||pr_tax_line.entity_code
||',pr_tax_line.applied_to_trx_id='||
pr_tax_line.applied_to_trx_id
);
END IF;
--AELLURU ADDED CONDITION TO STOP INSERTION OF BOE TAXES AS ZERO IN LINES
AND DISTRIBUTIONS
IF nvl(lv_boe_flag,'N') = 'Y'
--from here added by mani for bug 27516392
AND pr_tax_line.entity_code = 'AP_INVOICES'
AND pr_tax_line.applied_to_trx_id IS NOT NULL

THEN

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'For receipt matched invoices , dont populate
distributions for custom type of taxes'
);
END IF;

goto end_loop;

END IF;
--upto here added by mani for bug 27516392

--AELLURU FOR 27294946


jai_insert_ap_inv_line(p_ap_invoice_lines_all_rec => lr_ap_inv_line_tax);
--Modified by Junjian for AP tax flow end

lr_ap_inv_dist_tax := NULL;
lr_ap_inv_dist_tax.accounting_date :=
lr_ap_inv_dist_item.accounting_date;
lr_ap_inv_dist_tax.accrual_posted_flag := 'N';
lr_ap_inv_dist_tax.assets_addition_flag :=
lr_ap_inv_dist_item.assets_addition_flag;
lr_ap_inv_dist_tax.assets_tracking_flag :=
nvl(lr_ap_inv_dist_item.assets_tracking_flag
,'N'); --added by shyan for
bug#26696039
--lr_ap_inv_dist_tax.assets_tracking_flag :=
lv_assets_tracking_flag; --commented by chris
--addition starts by chris Bug#25944141 for tax inv distribution
IF nvl(pr_tax_line.recoverable_flag
,'N') <> 'Y' THEN
--Only recoverable_flag of the tax line <> 'Y'
-- commented by chris on 20170606 due to BOE invoice error
-- while inserting into ap_invoice_distributions_all.asset_tracking_flag
-- lr_ap_inv_dist_tax.ASSETS_TRACKING_FLAG :=
lr_ap_inv_dist_item.ASSETS_TRACKING_FLAG;
-- ADDED by chris on 20170606 due to BOE invoice error
-- if the source is null, set it as 'N'
lr_ap_inv_dist_tax.assets_tracking_flag :=
nvl(lr_ap_inv_dist_item.assets_tracking_flag
,'N');
lr_ap_inv_dist_tax.asset_book_type_code :=
lr_ap_inv_dist_item.asset_book_type_code;
lr_ap_inv_dist_tax.asset_category_id :=
lr_ap_inv_dist_item.asset_category_id;
lr_ap_inv_dist_tax.charge_applicable_to_dist_id :=
lr_ap_inv_dist_item.invoice_distribution_id; --
jls for bug 26654175
ELSE
--lr_ap_inv_dist_tax.assets_tracking_flag := 'N';
/* Bug#26884193 start, dejiang.liu/20171008. Add else logic for
recoverable tax. */
-- For recoverable tax.
IF pv_tax_amount_type = TAX_AMOUNT_TYPE_REC THEN
-- Recoverable part for recoverable tax.
lr_ap_inv_dist_tax.assets_tracking_flag := 'N';

ELSIF pv_tax_amount_type = TAX_AMOUNT_TYPE_NREC THEN


-- Non-Recoverable part for recoverable tax.
lr_ap_inv_dist_tax.assets_tracking_flag :=
nvl(lr_ap_inv_dist_item.assets_tracking_flag
,'N');
lr_ap_inv_dist_tax.asset_book_type_code :=
lr_ap_inv_dist_item.asset_book_type_code;
lr_ap_inv_dist_tax.asset_category_id :=
lr_ap_inv_dist_item.asset_category_id;
lr_ap_inv_dist_tax.charge_applicable_to_dist_id :=
lr_ap_inv_dist_item.invoice_distribution_id;

ELSE
-- Other condition, use default settings.
lr_ap_inv_dist_tax.assets_tracking_flag := 'N';
--NULL;
END IF;
/* Bug#26884193 end, dejiang.liu/20171008. */

END IF;
--addition ends by chris Bug#25944141 for tax inv distribution
lr_ap_inv_dist_tax.cash_posted_flag := 'N';
lr_ap_inv_dist_tax.distribution_line_number := 1;
lr_ap_inv_dist_tax.dist_code_combination_id :=
lr_ap_inv_line_tax.default_dist_ccid;
lr_ap_inv_dist_tax.invoice_id :=
lr_ap_inv_dist_item.invoice_id;
lr_ap_inv_dist_tax.amount := nvl(ln_tax_amt_trx_curr
,0);
/* Bug#26801260, dejiang.liu/20170924. Modify logic to update base amount
only for foreign currency. */
IF pr_tax_line.functional_currency_code <> pr_tax_line.trx_currency_code
THEN
lr_ap_inv_dist_tax.base_amount := nvl(ln_tax_amt_fun_curr
,0);
END IF;

lr_ap_inv_dist_tax.invoice_line_number := ln_inv_line_num;

lr_ap_inv_dist_tax.last_updated_by :=
lr_ap_inv_dist_item.last_updated_by;
lr_ap_inv_dist_tax.last_update_date :=
lr_ap_inv_dist_item.last_update_date;
lr_ap_inv_dist_tax.line_type_lookup_code := lv_misc;
lr_ap_inv_dist_tax.period_name :=
lr_ap_inv_dist_item.period_name;
lr_ap_inv_dist_tax.set_of_books_id :=
lr_ap_inv_dist_item.set_of_books_id;
lr_ap_inv_dist_tax.batch_id := ln_batch_id;
lr_ap_inv_dist_tax.created_by :=
lr_ap_inv_dist_item.created_by;
lr_ap_inv_dist_tax.creation_date :=
lr_ap_inv_dist_item.creation_date;
lr_ap_inv_dist_tax.description :=
pr_tax_line.tax_rate_code;
lr_ap_inv_dist_tax.exchange_rate_variance := NULL;
lr_ap_inv_dist_tax.last_update_login :=
lr_ap_inv_dist_item.last_update_login;
lr_ap_inv_dist_tax.match_status_flag := NULL
/*lr_ap_inv_dist_item.match_status_flag*/
; --Modified by Junjian for bug#20141019
lr_ap_inv_dist_tax.posted_flag := 'N';
lr_ap_inv_dist_tax.rate_var_code_combination_id := NULL;
lr_ap_inv_dist_tax.reversal_flag :=
lr_ap_inv_dist_item.reversal_flag;
lr_ap_inv_dist_tax.program_application_id :=
lr_ap_inv_dist_item.program_application_id;
lr_ap_inv_dist_tax.program_id :=
lr_ap_inv_dist_item.program_id;
lr_ap_inv_dist_tax.program_update_date :=
lr_ap_inv_dist_item.program_update_date;
lr_ap_inv_dist_tax.accts_pay_code_combination_id := ln_ap_ccid;

--TODO: Need check the logic for assets tracking flag and project related
fields population.
/* Bug#27040931, dejiang.liu/20171030. Modify to use other variable. */
--IF (lv_assets_tracking_flag <> 'Y') THEN
IF (lr_ap_inv_dist_tax.assets_tracking_flag <> 'Y') THEN
/* Bug#26331382, dejiang.liu/20170719. Set default value to null to avoid
FA mass addition posting error. */
--lr_ap_inv_dist_tax.quantity_invoiced := 0;
lr_ap_inv_dist_tax.quantity_invoiced := NULL;
END IF;
lr_ap_inv_dist_tax.po_distribution_id :=
lr_ap_inv_dist_item.po_distribution_id;
lr_ap_inv_dist_tax.rcv_transaction_id :=
lr_ap_inv_dist_item.rcv_transaction_id;
lr_ap_inv_dist_tax.price_var_code_combination_id :=
lr_ap_inv_dist_tax.price_var_code_combination_id;
lr_ap_inv_dist_tax.invoice_price_variance :=
ln_tax_variance_inv_cur;
lr_ap_inv_dist_tax.base_invoice_price_variance :=
ln_tax_variance_fun_cur;
lr_ap_inv_dist_tax.matched_uom_lookup_code :=
lr_ap_inv_dist_item.matched_uom_lookup_code;

lr_ap_inv_dist_tax.org_id := lr_ap_inv_dist_item.org_id;
/* Bug#27040931, dejiang.liu/20171030. Modify to use other variable. */
--IF (lv_assets_tracking_flag <> 'N') THEN
IF (lr_ap_inv_dist_tax.assets_tracking_flag <> 'N') THEN
lr_ap_inv_dist_tax.charge_applicable_to_dist_id :=
lr_ap_inv_dist_item.invoice_distribution_id;
END IF;
lr_ap_inv_dist_tax.project_id := ln_project_id;
lr_ap_inv_dist_tax.task_id := ln_task_id;
lr_ap_inv_dist_tax.expenditure_type := lv_exp_type;
lr_ap_inv_dist_tax.expenditure_item_date := ld_exp_item_date;
lr_ap_inv_dist_tax.expenditure_organization_id := ln_exp_organization_id;
lr_ap_inv_dist_tax.project_accounting_context :=
lv_project_accounting_context;
lr_ap_inv_dist_tax.pa_addition_flag := lv_pa_addition_flag;

/* Bug#25466634, dejiang.liu/20170327. Set PA quantity. */


lr_ap_inv_dist_tax.pa_quantity := ln_pa_quantity;

lr_ap_inv_dist_tax.distribution_class := lv_dist_class;
lr_ap_inv_dist_tax.dist_match_type :=
lr_ap_inv_dist_item.dist_match_type;

IF pv_tax_amount_type = tax_amount_type_rec
AND line = 2 THEN
--Modified by Junjian for AP tax flow
lr_ap_inv_dist_tax.amount := -ln_tax_amt_trx_curr;

/* Bug#26801260, dejiang.liu/20170924. Modify logic to update base amount


only for foreign currency. */
IF pr_tax_line.functional_currency_code <> pr_tax_line.trx_currency_code
THEN
lr_ap_inv_dist_tax.base_amount := -ln_tax_amt_fun_curr;
END IF;
END IF;

-- added by zhiwei.xin for AP Open Interface begin


IF lr_ap_inv_dist_item.invoice_id IS NULL THEN
lr_ap_inv_dist_tax.invoice_id := ln_invoice_id;
lr_ap_inv_dist_tax.distribution_line_number := ln_inv_line_num;
lr_ap_inv_dist_tax.accounting_date :=
lr_ap_inv_line_item.accounting_date;
lr_ap_inv_dist_tax.last_updated_by := fnd_global.user_id;
lr_ap_inv_dist_tax.last_update_date := SYSDATE;
lr_ap_inv_dist_tax.created_by := fnd_global.user_id;
lr_ap_inv_dist_tax.creation_date := SYSDATE;
lr_ap_inv_dist_tax.last_update_login := fnd_global.login_id;
lr_ap_inv_dist_tax.period_name :=
lr_ap_inv_line_item.period_name;
lr_ap_inv_dist_tax.set_of_books_id :=
lr_ap_inv_line_item.set_of_books_id;
lr_ap_inv_dist_tax.program_application_id :=
lr_ap_inv_line_item.program_application_id;
lr_ap_inv_dist_tax.program_id :=
lr_ap_inv_line_item.program_id;
lr_ap_inv_dist_tax.program_update_date :=
lr_ap_inv_line_item.program_update_date;
lr_ap_inv_dist_tax.po_distribution_id :=
lr_ap_inv_line_item.po_distribution_id;
lr_ap_inv_dist_tax.rcv_transaction_id :=
lr_ap_inv_line_item.rcv_transaction_id;
lr_ap_inv_dist_tax.org_id :=
lr_ap_inv_line_item.org_id;
lr_ap_inv_dist_tax.dist_match_type :=
lr_ap_inv_line_item.match_type;
lr_ap_inv_dist_tax.assets_addition_flag := 'U';
END IF;
-- added by zhiwei.xin for AP Open Interface end.
-- added by shyan for bug#26696039, begin
select invoice_type_lookup_code
into ln_inv_type
from ap_invoices_all
where invoice_id = ln_invoice_id;

if lr_ap_inv_dist_tax.dist_code_combination_id is null and ln_inv_type =


'PO PRICE ADJUST' then
lr_ap_inv_line_tax.default_dist_ccid := lr_acc_ids.ppv_account_ccid;
lr_ap_inv_dist_tax.dist_code_combination_id :=
lr_ap_inv_line_tax.default_dist_ccid;
end if;
-- added by shyan for bug#26696039, end
jai_insert_ap_inv_dist(p_ap_invoice_dist_all_rec => lr_ap_inv_dist_tax
,pn_ap_invoice_dist_id => ln_ap_inv_dist_id);

IF line = 1 THEN
ln_1st_line_dist_id := ln_ap_inv_dist_id;
ln_1st_line_number := ln_inv_line_num;
END IF;
--END IF; --AELLURU FOR 27294946
<<END_LOOP>>--mani for bug 27516392
NULL;

END LOOP;
END IF;
--Modified by Junjian for Reverse Charge end

-- added by zhiwei.xin for AP Open Interface begin


-- no need to populate jai_rec_nrec_dist table
IF nvl(pv_external_flag
,'N') = 'Y' THEN
RETURN;
END IF;
-- added by zhiwei.xin for AP Open Interface end.

--Added by Junjian for AP tax flow begin


IF pn_num_lines_insert = 0 THEN
ln_1st_line_dist_id := lr_ap_inv_dist_item.invoice_distribution_id;
ln_1st_line_number := lr_ap_inv_line_item.line_number;
END IF;
--Added by Junjian for AP tax flow end

--Added by Junjian for Reverse Charge begin


IF nvl(pr_tax_line.self_assessed_flag
,'N') = 'Y' THEN
ln_1st_line_dist_id := NULL;
ln_1st_line_number := NULL;
END IF;
--Added by Junjian for Reverse Charge end

--Added for P2P accounting change bug #18835939 Start


IF nvl(pv_jai_dist_ist_flag
,'N') = 'N' THEN
RETURN; --Do not insert rec/nrec for Recept match invoice, which flag is N
END IF;
--Added for P2P accounting change bug #18835939 End

ln_dist_number := 1;
IF pv_tax_amount_type = tax_amount_type_total
AND nvl(pr_tax_line.recoverable_flag
,'N') = 'Y' THEN
ln_dist_number := 2;
ELSE
ln_dist_number := 1;
END IF;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,' ln_dist_number->' || ln_dist_number);
END IF; --( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL)

/* --Commented out for P2P accounting change bug#18835939


IF pv_tax_amount_type = TAX_AMOUNT_TYPE_TOTAL AND pn_diff_tpb < 0 THEN
NULL;
ELSE
*/
FOR i IN 1 .. ln_dist_number LOOP
IF pv_tax_amount_type = tax_amount_type_total
AND nvl(pr_tax_line.recoverable_flag
,'N') = 'Y' THEN
IF i = 1 THEN
ln_tax_amt_trx_curr := pr_tax_line.rec_tax_amt_trx_curr;
ln_tax_amt_tax_curr := pr_tax_line.rec_tax_amt_tax_curr;
ln_tax_amt_fun_curr := pr_tax_line.rec_tax_amt_funcl_curr;
lv_recoverable_flag := pr_tax_line.recoverable_flag; --Y
ELSIF i = 2 THEN
ln_tax_amt_trx_curr := pr_tax_line.nrec_tax_amt_trx_curr;
ln_tax_amt_tax_curr := pr_tax_line.nrec_tax_amt_tax_curr;
ln_tax_amt_fun_curr := pr_tax_line.nrec_tax_amt_funcl_curr;
lv_recoverable_flag := jai_constants.no; --N
END IF;
END IF; --pv_tax_amount_type = TAX_AMOUNT_TYPE_TOTAL

IF nvl(ln_tax_amt_fun_curr
,0) <> 0
--Added by Zhhou for bug#18716693 on 20140623 begin
OR (nvl(pr_tax_line.rec_tax_amt_tax_curr
,0) = 0 AND nvl(pr_tax_line.nrec_tax_amt_tax_curr
,0) = 0)
--Added by Zhhou for bug#18716693 on 20140623 end
THEN
lr_jai_tax_dist := NULL;
lr_jai_tax_dist.application_id := pr_tax_line.application_id;
lr_jai_tax_dist.entity_code := pr_tax_line.entity_code;
lr_jai_tax_dist.event_class_code := pr_tax_line.event_class_code;
lr_jai_tax_dist.event_type_code := pr_tax_line.event_type_code;
lr_jai_tax_dist.tax_event_class_code := pr_tax_line.tax_event_class_code;
lr_jai_tax_dist.tax_event_type_code := pr_tax_line.tax_event_type_code;
lr_jai_tax_dist.trx_id := pr_tax_line.trx_id;
lr_jai_tax_dist.trx_line_id := pr_tax_line.trx_line_id;
lr_jai_tax_dist.trx_line_number := pr_tax_line.trx_line_number;
lr_jai_tax_dist.tax_line_id := pr_tax_line.tax_line_id;
lr_jai_tax_dist.trx_line_dist_id :=
lr_ap_inv_dist_item.invoice_distribution_id;
lr_jai_tax_dist.tax_dist_id := ln_1st_line_dist_id;
lr_jai_tax_dist.tax_line_number := pr_tax_line.tax_line_num;
--Modified by Junjian for AP tax flow
lr_jai_tax_dist.tax_regime_id := pr_tax_line.tax_regime_id;
lr_jai_tax_dist.tax_regime_code := pr_tax_line.tax_regime_code;
lr_jai_tax_dist.tax_rate_id := pr_tax_line.tax_rate_id;
lr_jai_tax_dist.tax_rate_code := pr_tax_line.tax_rate_code;
lr_jai_tax_dist.gl_date :=
lr_ap_inv_dist_item.accounting_date;
lr_jai_tax_dist.inclusive_flag := pr_tax_line.inclusive_flag;
lr_jai_tax_dist.source_tax_line_num := ln_1st_line_number; --Added by
Junjian for AP tax flow

lr_jai_tax_dist.recoverable_flag := lv_recoverable_flag;
lr_jai_tax_dist.reverse_flag := 'N';
lr_jai_tax_dist.self_assessed_flag :=
pr_tax_line.self_assessed_flag;
lr_jai_tax_dist.acct_type := lv_acct_type;
lr_jai_tax_dist.reversed_tax_dist_id := NULL;
lr_jai_tax_dist.tax_amt_trx_curr := nvl(ln_tax_amt_trx_curr
,0);
lr_jai_tax_dist.tax_amt_tax_curr := nvl(ln_tax_amt_tax_curr
,0);
lr_jai_tax_dist.tax_amt_funcl_curr := nvl(ln_tax_amt_fun_curr
,0);
lr_jai_tax_dist.trx_currency_code :=
pr_tax_line.trx_currency_code;
lr_jai_tax_dist.currency_conversion_date :=
pr_tax_line.currency_conversion_date;
lr_jai_tax_dist.currency_conversion_type :=
pr_tax_line.currency_conversion_type;
lr_jai_tax_dist.currency_conversion_rate :=
pr_tax_line.currency_conversion_rate;
lr_jai_tax_dist.tax_currency_code :=
pr_tax_line.tax_currency_code;
lr_jai_tax_dist.tax_currency_conversion_date :=
pr_tax_line.tax_currency_conversion_date;
lr_jai_tax_dist.tax_currency_conversion_type :=
pr_tax_line.tax_currency_conversion_type;
lr_jai_tax_dist.tax_currency_conversion_rate :=
pr_tax_line.tax_currency_conversion_rate;

jai_insert_jai_tax_dist(lr_jai_tax_dist);
END IF;
END LOOP;
--Commented out for P2P accounting change bug#18835939
--END IF;--pv_tax_amount_type = TAX_AMOUNT_TYPE_TOTAL AND pn_diff_tpb < 0
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
EXCEPTION
WHEN OTHERS THEN
pv_process_status := FND_API.G_RET_STS_UNEXP_ERROR;
pv_process_message := 'Unexpected error:' || SQLERRM; --Added by Junjian on
08-01-2014
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,SQLERRM);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
--Modified by Junjian for AP tax flow begin
--app_exception.raise_exception;--Modified by Junjian on 08-01-2014
END jai_populate_tax_dist_ap;

PROCEDURE jai_insert_jai_tax_dist(p_jai_tax_dist jai_rec_nrec_dist%ROWTYPE) IS


--Modified by Junjian for AP tax flow end
CURSOR c_tax_dist_id IS
SELECT jai_rec_nrec_dist_s.nextval
FROM dual;
CURSOR c_tax_rate_info(cn_tax_rate_id NUMBER) IS
SELECT tr.tax_type_id
,tr.tax_rate_code
,tr.inclusive_flag
,tt.recoverable_flag
,tt.self_assessed_flag
FROM jai_tax_rates tr
,jai_tax_types tt
WHERE tr.tax_type_id = tt.tax_type_id
AND tr.tax_rate_id = cn_tax_rate_id;

CURSOR c_tax_regime_code(cn_regime_id NUMBER) IS


SELECT regime_code
FROM jai_regimes
WHERE regime_id = cn_regime_id;
lv_api_name CONSTANT VARCHAR2(50) := 'jai_insert_jai_tax_dist';
ln_dist_id NUMBER;
ln_tax_type_id NUMBER;
lv_tax_rate_code jai_tax_rates.tax_rate_code%TYPE;
lv_regime_code jai_regimes.regime_code%TYPE;
lv_inclusive_flag jai_tax_rates.inclusive_flag%TYPE;
lv_recoverable_flag jai_tax_types.recoverable_flag%TYPE;
lv_self_assessed_flag jai_tax_types.self_assessed_flag%TYPE;
BEGIN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----Begin----' || '()+');
END IF;

OPEN c_tax_dist_id;
FETCH c_tax_dist_id
INTO ln_dist_id;
CLOSE c_tax_dist_id;
IF nvl(p_jai_tax_dist.tax_rate_id
,0) <> 0 THEN
OPEN c_tax_rate_info(p_jai_tax_dist.tax_rate_id);
FETCH c_tax_rate_info
INTO ln_tax_type_id
,lv_tax_rate_code
,lv_inclusive_flag
,lv_recoverable_flag
,lv_self_assessed_flag;
CLOSE c_tax_rate_info;
END IF;

IF nvl(p_jai_tax_dist.tax_regime_id
,0) <> 0 THEN
OPEN c_tax_regime_code(p_jai_tax_dist.tax_regime_id);
FETCH c_tax_regime_code
INTO lv_regime_code;
CLOSE c_tax_regime_code;
END IF;
INSERT INTO jai_rec_nrec_dist
(rec_nrec_tax_dist_id
,application_id
,entity_code
,event_class_code
,event_type_code
,tax_event_class_code
,tax_event_type_code
,trx_id
,trx_line_id
,trx_line_number
,tax_line_id
,trx_line_dist_id
,tax_dist_id
,tax_line_number
,tax_regime_id
,tax_regime_code
,tax_rate_id
,tax_rate_code
,gl_date
,inclusive_flag
,recoverable_flag
,reverse_flag
,self_assessed_flag
,acct_type
,reversed_tax_dist_id
,tax_amt_trx_curr
,tax_amt_tax_curr
,tax_amt_funcl_curr
,trx_currency_code
,currency_conversion_date
,currency_conversion_type
,currency_conversion_rate
,tax_currency_code
,tax_currency_conversion_date
,tax_currency_conversion_type
,tax_currency_conversion_rate
,record_type_code
,created_by
,creation_date
,last_updated_by
,last_update_date
,last_update_login
,object_version_number
,source_tax_line_num --Added by Junjian for AP tax flow
/* --Added by Wenqiong on 20140101 begin
,accounted_flag
,tax_type_id
,claim_term_id
,reversal_term_id
,process_action
,installment_no
,scheduled_date
,status
,intended_use
,batch_id
,quantity
--Added by Wenqiong on 20140101 end
*/)
VALUES
(nvl(p_jai_tax_dist.rec_nrec_tax_dist_id
,ln_dist_id)
,p_jai_tax_dist.application_id
,p_jai_tax_dist.entity_code
,p_jai_tax_dist.event_class_code
,p_jai_tax_dist.event_type_code
,p_jai_tax_dist.tax_event_class_code
,p_jai_tax_dist.tax_event_type_code
,p_jai_tax_dist.trx_id
,p_jai_tax_dist.trx_line_id
,p_jai_tax_dist.trx_line_number
,p_jai_tax_dist.tax_line_id
,p_jai_tax_dist.trx_line_dist_id
,p_jai_tax_dist.tax_dist_id
,p_jai_tax_dist.tax_line_number
,p_jai_tax_dist.tax_regime_id
,nvl(p_jai_tax_dist.tax_regime_code
,lv_regime_code)
,p_jai_tax_dist.tax_rate_id
,nvl(p_jai_tax_dist.tax_rate_code
,lv_tax_rate_code)
,p_jai_tax_dist.gl_date
,nvl(p_jai_tax_dist.inclusive_flag
,lv_inclusive_flag)
,nvl(p_jai_tax_dist.recoverable_flag
,lv_recoverable_flag)
,p_jai_tax_dist.reverse_flag
,nvl(p_jai_tax_dist.self_assessed_flag
,lv_self_assessed_flag)
,p_jai_tax_dist.acct_type
,p_jai_tax_dist.reversed_tax_dist_id
,p_jai_tax_dist.tax_amt_trx_curr
,p_jai_tax_dist.tax_amt_tax_curr
,p_jai_tax_dist.tax_amt_funcl_curr
,p_jai_tax_dist.trx_currency_code
,p_jai_tax_dist.currency_conversion_date
,p_jai_tax_dist.currency_conversion_type
,p_jai_tax_dist.currency_conversion_rate
,p_jai_tax_dist.tax_currency_code
,p_jai_tax_dist.tax_currency_conversion_date
,p_jai_tax_dist.tax_currency_conversion_type
,p_jai_tax_dist.tax_currency_conversion_rate
,'DEFINED'
,fnd_global.user_id
,SYSDATE
,fnd_global.user_id
,SYSDATE
,fnd_global.user_id
,1
,p_jai_tax_dist.source_tax_line_num --Added by Junjian for AP tax flow
/* --Added by Wenqiong on 20140101 begin
,p_jai_tax_dist.accounted_flag
,nvl(p_jai_tax_dist.tax_type_id,ln_tax_type_id)
,p_jai_tax_dist.claim_term_id
,p_jai_tax_dist.reversal_term_id
,p_jai_tax_dist.process_action
,p_jai_tax_dist.installment_no
,p_jai_tax_dist.scheduled_date
,p_jai_tax_dist.status
,p_jai_tax_dist.intended_use
,p_jai_tax_dist.batch_id
,p_jai_tax_dist.quantity
--Added by Wenqiong on 20140101 end
*/);
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----end----' || '()+');
END IF;
EXCEPTION
WHEN OTHERS THEN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,SQLERRM);
END IF;
app_exception.raise_exception;
END jai_insert_jai_tax_dist; --Modified by Junjian for AP tax flow
PROCEDURE jai_insert_ap_inv_line( --Modified by Junjian for AP tax flow
p_ap_invoice_lines_all_rec IN
ap_invoice_lines_all%ROWTYPE) IS
lv_api_name CONSTANT VARCHAR2(50) := 'jai_insert_ap_inv_line()';

/* Bug#27040931, dejiang.liu/20171112. Add variable for asset tracking flag. */


lv_assets_tracking_flag ap_invoice_lines_all.assets_tracking_flag%TYPE;

BEGIN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----Begin----' || '()+');
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'invoice line num: ' ||
p_ap_invoice_lines_all_rec.line_number);
END IF;

/* Bug#27040931, dejiang.liu/20171112. Set default value for asset tracking


flag. */
lv_assets_tracking_flag := nvl(p_ap_invoice_lines_all_rec.assets_tracking_flag
,'N');

INSERT INTO ap_invoice_lines_all


(invoice_id
,line_number
,line_type_lookup_code
,requester_id
,description
,line_source
,org_id
,line_group_number
,inventory_item_id
,item_description
,serial_number
,manufacturer
,model_number
,warranty_number
,generate_dists
,match_type
,distribution_set_id
,account_segment
,balancing_segment
,cost_center_segment
,overlay_dist_code_concat
,default_dist_ccid
,prorate_across_all_items
,accounting_date
,period_name
,deferred_acctg_flag
,def_acctg_start_date
,def_acctg_end_date
,def_acctg_number_of_periods
,def_acctg_period_type
,set_of_books_id
,amount
,base_amount
,rounding_amt
,quantity_invoiced
,unit_meas_lookup_code
,unit_price
,wfapproval_status
,ussgl_transaction_code
,discarded_flag
,original_amount
,original_base_amount
,original_rounding_amt
,cancelled_flag
,income_tax_region
,type_1099
,stat_amount
,prepay_invoice_id
,prepay_line_number
,invoice_includes_prepay_flag
,corrected_inv_id
,corrected_line_number
,po_header_id
,po_line_id
,po_release_id
,po_line_location_id
,po_distribution_id
,rcv_transaction_id
,final_match_flag
,assets_tracking_flag
,asset_book_type_code
,asset_category_id
,project_id
,task_id
,expenditure_type
,expenditure_item_date
,expenditure_organization_id
,pa_quantity
,pa_cc_ar_invoice_id
,pa_cc_ar_invoice_line_num
,pa_cc_processed_code
,award_id
,awt_group_id
,reference_1
,reference_2
,receipt_verified_flag
,receipt_required_flag
,receipt_missing_flag
,justification
,expense_group
,start_expense_date
,end_expense_date
,receipt_currency_code
,receipt_conversion_rate
,receipt_currency_amount
,daily_amount
,web_parameter_id
,adjustment_reason
,merchant_document_number
,merchant_name
,merchant_reference
,merchant_tax_reg_number
,merchant_taxpayer_id
,country_of_supply
,credit_card_trx_id
,company_prepaid_invoice_id
,cc_reversal_flag
,creation_date
,created_by
,last_updated_by
,last_update_date
,last_update_login
,program_application_id
,program_id
,program_update_date
,request_id
,attribute_category
,attribute1
,attribute2
,attribute3
,attribute4
,attribute5
,attribute6
,attribute7
,attribute8
,attribute9
,attribute10
,attribute11
,attribute12
,attribute13
,attribute14
,attribute15
,global_attribute_category
,global_attribute1
,global_attribute2
,global_attribute3
,global_attribute4
,global_attribute5
,global_attribute6
,global_attribute7
,global_attribute8
,global_attribute9
,global_attribute10
,global_attribute11
,global_attribute12
,global_attribute13
,global_attribute14
,global_attribute15
,global_attribute16
,global_attribute17
,global_attribute18
,global_attribute19
,global_attribute20
,line_selected_for_appl_flag
,prepay_appl_request_id
,application_id
,product_table
,reference_key1
,reference_key2
,reference_key3
,reference_key4
,reference_key5
,purchasing_category_id
,cost_factor_id
,control_amount
,assessable_value
,total_rec_tax_amount
,total_nrec_tax_amount
,total_rec_tax_amt_funcl_curr
,total_nrec_tax_amt_funcl_curr
,included_tax_amount
,primary_intended_use
,tax_already_calculated_flag
,ship_to_location_id
,product_type
,product_category
,product_fisc_classification
,user_defined_fisc_class
,trx_business_category
,summary_tax_line_id
,tax_regime_code
,tax
,tax_jurisdiction_code
,tax_status_code
,tax_rate_id
,tax_rate_code
,tax_rate
,tax_code_id
,historical_flag
,tax_classification_code
,source_application_id
,source_event_class_code
,source_entity_code
,source_trx_id
,source_line_id
,source_trx_level_type
,retained_amount
,retained_amount_remaining
,retained_invoice_id
,retained_line_number
,line_selected_for_release_flag
,line_owner_role
,disputable_flag
,rcv_shipment_line_id
,ail_invoice_id
,ail_distribution_line_number
,ail_invoice_id2
,ail_distribution_line_number2
,ail_invoice_id3
,ail_distribution_line_number3
,ail_invoice_id4
,pay_awt_group_id)
VALUES
(p_ap_invoice_lines_all_rec.invoice_id
,p_ap_invoice_lines_all_rec.line_number
,p_ap_invoice_lines_all_rec.line_type_lookup_code
,p_ap_invoice_lines_all_rec.requester_id
,p_ap_invoice_lines_all_rec.description
,p_ap_invoice_lines_all_rec.line_source
,p_ap_invoice_lines_all_rec.org_id
,p_ap_invoice_lines_all_rec.line_group_number
,p_ap_invoice_lines_all_rec.inventory_item_id
,p_ap_invoice_lines_all_rec.item_description
,p_ap_invoice_lines_all_rec.serial_number
,p_ap_invoice_lines_all_rec.manufacturer
,p_ap_invoice_lines_all_rec.model_number
,p_ap_invoice_lines_all_rec.warranty_number
,p_ap_invoice_lines_all_rec.generate_dists
,p_ap_invoice_lines_all_rec.match_type
,p_ap_invoice_lines_all_rec.distribution_set_id
,p_ap_invoice_lines_all_rec.account_segment
,p_ap_invoice_lines_all_rec.balancing_segment
,p_ap_invoice_lines_all_rec.cost_center_segment
,p_ap_invoice_lines_all_rec.overlay_dist_code_concat
,p_ap_invoice_lines_all_rec.default_dist_ccid
,p_ap_invoice_lines_all_rec.prorate_across_all_items
,p_ap_invoice_lines_all_rec.accounting_date
,p_ap_invoice_lines_all_rec.period_name
,p_ap_invoice_lines_all_rec.deferred_acctg_flag
,p_ap_invoice_lines_all_rec.def_acctg_start_date
,p_ap_invoice_lines_all_rec.def_acctg_end_date
,p_ap_invoice_lines_all_rec.def_acctg_number_of_periods
,p_ap_invoice_lines_all_rec.def_acctg_period_type
,p_ap_invoice_lines_all_rec.set_of_books_id
,p_ap_invoice_lines_all_rec.amount
,p_ap_invoice_lines_all_rec.base_amount
,p_ap_invoice_lines_all_rec.rounding_amt
,p_ap_invoice_lines_all_rec.quantity_invoiced
,p_ap_invoice_lines_all_rec.unit_meas_lookup_code
,p_ap_invoice_lines_all_rec.unit_price
,p_ap_invoice_lines_all_rec.wfapproval_status
,p_ap_invoice_lines_all_rec.ussgl_transaction_code
,p_ap_invoice_lines_all_rec.discarded_flag
,p_ap_invoice_lines_all_rec.original_amount
,p_ap_invoice_lines_all_rec.original_base_amount
,p_ap_invoice_lines_all_rec.original_rounding_amt
,p_ap_invoice_lines_all_rec.cancelled_flag
,p_ap_invoice_lines_all_rec.income_tax_region
,p_ap_invoice_lines_all_rec.type_1099
,p_ap_invoice_lines_all_rec.stat_amount
,p_ap_invoice_lines_all_rec.prepay_invoice_id
,p_ap_invoice_lines_all_rec.prepay_line_number
,p_ap_invoice_lines_all_rec.invoice_includes_prepay_flag
,p_ap_invoice_lines_all_rec.corrected_inv_id
,p_ap_invoice_lines_all_rec.corrected_line_number
,p_ap_invoice_lines_all_rec.po_header_id
,p_ap_invoice_lines_all_rec.po_line_id
,p_ap_invoice_lines_all_rec.po_release_id
,p_ap_invoice_lines_all_rec.po_line_location_id
,p_ap_invoice_lines_all_rec.po_distribution_id
,p_ap_invoice_lines_all_rec.rcv_transaction_id
,p_ap_invoice_lines_all_rec.final_match_flag

/* Bug#27040931, dejiang.liu/20171030. Modify to use local variables. */


--,p_ap_invoice_lines_all_rec.assets_tracking_flag
,lv_assets_tracking_flag

,p_ap_invoice_lines_all_rec.asset_book_type_code
,p_ap_invoice_lines_all_rec.asset_category_id
,p_ap_invoice_lines_all_rec.project_id
,p_ap_invoice_lines_all_rec.task_id
,p_ap_invoice_lines_all_rec.expenditure_type
,p_ap_invoice_lines_all_rec.expenditure_item_date
,p_ap_invoice_lines_all_rec.expenditure_organization_id
,p_ap_invoice_lines_all_rec.pa_quantity
,p_ap_invoice_lines_all_rec.pa_cc_ar_invoice_id
,p_ap_invoice_lines_all_rec.pa_cc_ar_invoice_line_num
,p_ap_invoice_lines_all_rec.pa_cc_processed_code
,p_ap_invoice_lines_all_rec.award_id
,p_ap_invoice_lines_all_rec.awt_group_id
,p_ap_invoice_lines_all_rec.reference_1
,p_ap_invoice_lines_all_rec.reference_2
,p_ap_invoice_lines_all_rec.receipt_verified_flag
,p_ap_invoice_lines_all_rec.receipt_required_flag
,p_ap_invoice_lines_all_rec.receipt_missing_flag
,p_ap_invoice_lines_all_rec.justification
,p_ap_invoice_lines_all_rec.expense_group
,p_ap_invoice_lines_all_rec.start_expense_date
,p_ap_invoice_lines_all_rec.end_expense_date
,p_ap_invoice_lines_all_rec.receipt_currency_code
,p_ap_invoice_lines_all_rec.receipt_conversion_rate
,p_ap_invoice_lines_all_rec.receipt_currency_amount
,p_ap_invoice_lines_all_rec.daily_amount
,p_ap_invoice_lines_all_rec.web_parameter_id
,p_ap_invoice_lines_all_rec.adjustment_reason
,p_ap_invoice_lines_all_rec.merchant_document_number
,p_ap_invoice_lines_all_rec.merchant_name
,p_ap_invoice_lines_all_rec.merchant_reference
,p_ap_invoice_lines_all_rec.merchant_tax_reg_number
,p_ap_invoice_lines_all_rec.merchant_taxpayer_id
,p_ap_invoice_lines_all_rec.country_of_supply
,p_ap_invoice_lines_all_rec.credit_card_trx_id
,p_ap_invoice_lines_all_rec.company_prepaid_invoice_id
,p_ap_invoice_lines_all_rec.cc_reversal_flag
,p_ap_invoice_lines_all_rec.creation_date
,p_ap_invoice_lines_all_rec.created_by
,p_ap_invoice_lines_all_rec.last_updated_by
,p_ap_invoice_lines_all_rec.last_update_date
,p_ap_invoice_lines_all_rec.last_update_login
,p_ap_invoice_lines_all_rec.program_application_id
,p_ap_invoice_lines_all_rec.program_id
,p_ap_invoice_lines_all_rec.program_update_date
,p_ap_invoice_lines_all_rec.request_id
,p_ap_invoice_lines_all_rec.attribute_category
,p_ap_invoice_lines_all_rec.attribute1
,p_ap_invoice_lines_all_rec.attribute2
,p_ap_invoice_lines_all_rec.attribute3
,p_ap_invoice_lines_all_rec.attribute4
,p_ap_invoice_lines_all_rec.attribute5
,p_ap_invoice_lines_all_rec.attribute6
,p_ap_invoice_lines_all_rec.attribute7
,p_ap_invoice_lines_all_rec.attribute8
,p_ap_invoice_lines_all_rec.attribute9
,p_ap_invoice_lines_all_rec.attribute10
,p_ap_invoice_lines_all_rec.attribute11
,p_ap_invoice_lines_all_rec.attribute12
,p_ap_invoice_lines_all_rec.attribute13
,p_ap_invoice_lines_all_rec.attribute14
,p_ap_invoice_lines_all_rec.attribute15
,p_ap_invoice_lines_all_rec.global_attribute_category
,p_ap_invoice_lines_all_rec.global_attribute1
,p_ap_invoice_lines_all_rec.global_attribute2
,p_ap_invoice_lines_all_rec.global_attribute3
,p_ap_invoice_lines_all_rec.global_attribute4
,p_ap_invoice_lines_all_rec.global_attribute5
,p_ap_invoice_lines_all_rec.global_attribute6
,p_ap_invoice_lines_all_rec.global_attribute7
,p_ap_invoice_lines_all_rec.global_attribute8
,p_ap_invoice_lines_all_rec.global_attribute9
,p_ap_invoice_lines_all_rec.global_attribute10
,p_ap_invoice_lines_all_rec.global_attribute11
,p_ap_invoice_lines_all_rec.global_attribute12
,p_ap_invoice_lines_all_rec.global_attribute13
,p_ap_invoice_lines_all_rec.global_attribute14
,p_ap_invoice_lines_all_rec.global_attribute15
,p_ap_invoice_lines_all_rec.global_attribute16
,p_ap_invoice_lines_all_rec.global_attribute17
,p_ap_invoice_lines_all_rec.global_attribute18
,p_ap_invoice_lines_all_rec.global_attribute19
,p_ap_invoice_lines_all_rec.global_attribute20
,p_ap_invoice_lines_all_rec.line_selected_for_appl_flag
,p_ap_invoice_lines_all_rec.prepay_appl_request_id
,p_ap_invoice_lines_all_rec.application_id
,p_ap_invoice_lines_all_rec.product_table
,p_ap_invoice_lines_all_rec.reference_key1
,p_ap_invoice_lines_all_rec.reference_key2
,p_ap_invoice_lines_all_rec.reference_key3
,p_ap_invoice_lines_all_rec.reference_key4
,p_ap_invoice_lines_all_rec.reference_key5
,p_ap_invoice_lines_all_rec.purchasing_category_id
,p_ap_invoice_lines_all_rec.cost_factor_id
,p_ap_invoice_lines_all_rec.control_amount
,p_ap_invoice_lines_all_rec.assessable_value
,p_ap_invoice_lines_all_rec.total_rec_tax_amount
,p_ap_invoice_lines_all_rec.total_nrec_tax_amount
,p_ap_invoice_lines_all_rec.total_rec_tax_amt_funcl_curr
,p_ap_invoice_lines_all_rec.total_nrec_tax_amt_funcl_curr
,p_ap_invoice_lines_all_rec.included_tax_amount
,p_ap_invoice_lines_all_rec.primary_intended_use
,p_ap_invoice_lines_all_rec.tax_already_calculated_flag
,p_ap_invoice_lines_all_rec.ship_to_location_id
,p_ap_invoice_lines_all_rec.product_type
,p_ap_invoice_lines_all_rec.product_category
,p_ap_invoice_lines_all_rec.product_fisc_classification
,p_ap_invoice_lines_all_rec.user_defined_fisc_class
,p_ap_invoice_lines_all_rec.trx_business_category
,p_ap_invoice_lines_all_rec.summary_tax_line_id
,p_ap_invoice_lines_all_rec.tax_regime_code
,p_ap_invoice_lines_all_rec.tax
,p_ap_invoice_lines_all_rec.tax_jurisdiction_code
,p_ap_invoice_lines_all_rec.tax_status_code
,p_ap_invoice_lines_all_rec.tax_rate_id
,p_ap_invoice_lines_all_rec.tax_rate_code
,p_ap_invoice_lines_all_rec.tax_rate
,p_ap_invoice_lines_all_rec.tax_code_id
,p_ap_invoice_lines_all_rec.historical_flag
,p_ap_invoice_lines_all_rec.tax_classification_code
,p_ap_invoice_lines_all_rec.source_application_id
,p_ap_invoice_lines_all_rec.source_event_class_code
,p_ap_invoice_lines_all_rec.source_entity_code
,p_ap_invoice_lines_all_rec.source_trx_id
,p_ap_invoice_lines_all_rec.source_line_id
,p_ap_invoice_lines_all_rec.source_trx_level_type
,p_ap_invoice_lines_all_rec.retained_amount
,p_ap_invoice_lines_all_rec.retained_amount_remaining
,p_ap_invoice_lines_all_rec.retained_invoice_id
,p_ap_invoice_lines_all_rec.retained_line_number
,p_ap_invoice_lines_all_rec.line_selected_for_release_flag
,p_ap_invoice_lines_all_rec.line_owner_role
,p_ap_invoice_lines_all_rec.disputable_flag
,p_ap_invoice_lines_all_rec.rcv_shipment_line_id
,p_ap_invoice_lines_all_rec.ail_invoice_id
,p_ap_invoice_lines_all_rec.ail_distribution_line_number
,p_ap_invoice_lines_all_rec.ail_invoice_id2
,p_ap_invoice_lines_all_rec.ail_distribution_line_number2
,p_ap_invoice_lines_all_rec.ail_invoice_id3
,p_ap_invoice_lines_all_rec.ail_distribution_line_number3
,p_ap_invoice_lines_all_rec.ail_invoice_id4
,p_ap_invoice_lines_all_rec.pay_awt_group_id);

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
EXCEPTION
WHEN OTHERS THEN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,SQLERRM);
END IF;
app_exception.raise_exception(exception_code => SQLCODE
,exception_text => SQLERRM); --Modified by
Junjian on 08-01-2014
END jai_insert_ap_inv_line; --Modified by Junjian for AP tax flow

PROCEDURE jai_insert_ap_inv_dist( --Modified by Junjian for AP tax flow


p_ap_invoice_dist_all_rec IN
ap_invoice_distributions_all%ROWTYPE
,pn_ap_invoice_dist_id OUT NOCOPY NUMBER) IS
CURSOR c_get_inv_dist_id IS
SELECT ap_invoice_distributions_s.nextval
FROM dual;

ln_dist_id NUMBER;
lv_api_name CONSTANT VARCHAR2(50) := 'jai_insert_ap_inv_dist()';

/* Bug#27040931, dejiang.liu/20171112. Add variable for asset tracking flag. */


lv_assets_tracking_flag ap_invoice_distributions_all.assets_tracking_flag%TYPE;

BEGIN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----Begin----' || '()+');
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'invoice line num: ' ||
p_ap_invoice_dist_all_rec.invoice_line_number);
END IF;

/* Bug#27040931, dejiang.liu/20171112. Set default value for asset tracking


flag. */
lv_assets_tracking_flag := nvl(p_ap_invoice_dist_all_rec.assets_tracking_flag
,'N');

OPEN c_get_inv_dist_id;
FETCH c_get_inv_dist_id
INTO ln_dist_id;
CLOSE c_get_inv_dist_id;
INSERT INTO ap_invoice_distributions_all
(accounting_date
,accrual_posted_flag
,assets_addition_flag
,assets_tracking_flag
,cash_posted_flag
,distribution_line_number
,dist_code_combination_id
,invoice_id
,last_updated_by
,last_update_date
,line_type_lookup_code
,period_name
,set_of_books_id
,accts_pay_code_combination_id
,amount
,base_amount
,base_invoice_price_variance
,batch_id
,created_by
,creation_date
,description
,exchange_rate_variance
,final_match_flag
,income_tax_region
,invoice_price_variance
,last_update_login
,match_status_flag
,posted_flag
,po_distribution_id
,program_application_id
,program_id
,program_update_date
,quantity_invoiced
,rate_var_code_combination_id
,request_id
,reversal_flag
,type_1099
,unit_price
,amount_encumbered
,base_amount_encumbered
,encumbered_flag
,exchange_date
,exchange_rate
,exchange_rate_type
,price_adjustment_flag
,price_var_code_combination_id
,quantity_unencumbered
,stat_amount
,amount_to_post
,attribute1
,attribute10
,attribute11
,attribute12
,attribute13
,attribute14
,attribute15
,attribute2
,attribute3
,attribute4
,attribute5
,attribute6
,attribute7
,attribute8
,attribute9
,attribute_category
,base_amount_to_post
,cash_je_batch_id
,expenditure_item_date
,expenditure_organization_id
,expenditure_type
,je_batch_id
,parent_invoice_id
,pa_addition_flag
,pa_quantity
,posted_amount
,posted_base_amount
,prepay_amount_remaining
,project_accounting_context
,project_id
,task_id
,ussgl_transaction_code
,ussgl_trx_code_context
,earliest_settlement_date
,req_distribution_id
,quantity_variance
,base_quantity_variance
,packet_id
,awt_flag
,awt_group_id
,awt_tax_rate_id
,awt_gross_amount
,awt_invoice_id
,awt_origin_group_id
,reference_1
,reference_2
,org_id
,other_invoice_id
,awt_invoice_payment_id
,global_attribute_category
,global_attribute1
,global_attribute2
,global_attribute3
,global_attribute4
,global_attribute5
,global_attribute6
,global_attribute7
,global_attribute8
,global_attribute9
,global_attribute10
,global_attribute11
,global_attribute12
,global_attribute13
,global_attribute14
,global_attribute15
,global_attribute16
,global_attribute17
,global_attribute18
,global_attribute19
,global_attribute20
,line_group_number
,receipt_verified_flag
,receipt_required_flag
,receipt_missing_flag
,justification
,expense_group
,start_expense_date
,end_expense_date
,receipt_currency_code
,receipt_conversion_rate
,receipt_currency_amount
,daily_amount
,web_parameter_id
,adjustment_reason
,award_id
,mrc_accrual_posted_flag
,mrc_cash_posted_flag
,mrc_dist_code_combination_id
,mrc_amount
,mrc_base_amount
,mrc_base_inv_price_variance
,mrc_exchange_rate_variance
,mrc_posted_flag
,mrc_program_application_id
,mrc_program_id
,mrc_program_update_date
,mrc_rate_var_ccid
,mrc_request_id
,mrc_exchange_date
,mrc_exchange_rate
,mrc_exchange_rate_type
,mrc_amount_to_post
,mrc_base_amount_to_post
,mrc_cash_je_batch_id
,mrc_je_batch_id
,mrc_posted_amount
,mrc_posted_base_amount
,mrc_receipt_conversion_rate
,credit_card_trx_id
,dist_match_type
,rcv_transaction_id
,invoice_distribution_id
,parent_reversal_id
,tax_recoverable_flag
,pa_cc_ar_invoice_id
,pa_cc_ar_invoice_line_num
,pa_cc_processed_code
,merchant_document_number
,merchant_name
,merchant_reference
,merchant_tax_reg_number
,merchant_taxpayer_id
,country_of_supply
,matched_uom_lookup_code
,gms_burdenable_raw_cost
,accounting_event_id
,prepay_distribution_id
,upgrade_posted_amt
,upgrade_base_posted_amt
,inventory_transfer_status
,company_prepaid_invoice_id
,cc_reversal_flag
,awt_withheld_amt
,invoice_includes_prepay_flag
,price_correct_inv_id
,price_correct_qty
,pa_cmt_xface_flag
,cancellation_flag
,invoice_line_number
,corrected_invoice_dist_id
,rounding_amt
,charge_applicable_to_dist_id
,corrected_quantity
,related_id
,asset_book_type_code
,asset_category_id
,distribution_class
,final_payment_rounding
,final_application_rounding
,amount_at_prepay_xrate
,cash_basis_final_app_rounding
,amount_at_prepay_pay_xrate
,intended_use
,detail_tax_dist_id
,rec_nrec_rate
,recovery_rate_id
,recovery_rate_name
,recovery_type_code
,recovery_rate_code
,withholding_tax_code_id
,tax_already_distributed_flag
,summary_tax_line_id
,taxable_amount
,taxable_base_amount
,extra_po_erv
,prepay_tax_diff_amount
,tax_code_id
,vat_code
,amount_includes_tax_flag
,tax_calculated_flag
,tax_recovery_rate
,tax_recovery_override_flag
,tax_code_override_flag
,total_dist_amount
,total_dist_base_amount
,prepay_tax_parent_id
,cancelled_flag
,old_distribution_id
,old_dist_line_number
,amount_variance
,base_amount_variance
,historical_flag
,rcv_charge_addition_flag
,awt_related_id
,related_retainage_dist_id
,retained_amount_remaining
,bc_event_id
,retained_invoice_dist_id
,final_release_rounding
,fully_paid_acctd_flag
,root_distribution_id
,xinv_parent_reversal_id
,recurring_payment_id
,release_inv_dist_derived_from
,pay_awt_group_id)
VALUES
(p_ap_invoice_dist_all_rec.accounting_date
,p_ap_invoice_dist_all_rec.accrual_posted_flag
,p_ap_invoice_dist_all_rec.assets_addition_flag

/* Bug#27040931, dejiang.liu/20171112. Modify to use local variable. */


--,p_ap_invoice_dist_all_rec.assets_tracking_flag
,lv_assets_tracking_flag

,p_ap_invoice_dist_all_rec.cash_posted_flag
,p_ap_invoice_dist_all_rec.distribution_line_number
,p_ap_invoice_dist_all_rec.dist_code_combination_id
,p_ap_invoice_dist_all_rec.invoice_id
,p_ap_invoice_dist_all_rec.last_updated_by
,p_ap_invoice_dist_all_rec.last_update_date
,p_ap_invoice_dist_all_rec.line_type_lookup_code
,p_ap_invoice_dist_all_rec.period_name
,p_ap_invoice_dist_all_rec.set_of_books_id
,p_ap_invoice_dist_all_rec.accts_pay_code_combination_id
,p_ap_invoice_dist_all_rec.amount
,p_ap_invoice_dist_all_rec.base_amount
,p_ap_invoice_dist_all_rec.base_invoice_price_variance
,p_ap_invoice_dist_all_rec.batch_id
,p_ap_invoice_dist_all_rec.created_by
,p_ap_invoice_dist_all_rec.creation_date
,p_ap_invoice_dist_all_rec.description
,p_ap_invoice_dist_all_rec.exchange_rate_variance
,p_ap_invoice_dist_all_rec.final_match_flag
,p_ap_invoice_dist_all_rec.income_tax_region
,p_ap_invoice_dist_all_rec.invoice_price_variance
,p_ap_invoice_dist_all_rec.last_update_login
,p_ap_invoice_dist_all_rec.match_status_flag
,p_ap_invoice_dist_all_rec.posted_flag
,p_ap_invoice_dist_all_rec.po_distribution_id
,p_ap_invoice_dist_all_rec.program_application_id
,p_ap_invoice_dist_all_rec.program_id
,p_ap_invoice_dist_all_rec.program_update_date
,p_ap_invoice_dist_all_rec.quantity_invoiced
,p_ap_invoice_dist_all_rec.rate_var_code_combination_id
,p_ap_invoice_dist_all_rec.request_id
,p_ap_invoice_dist_all_rec.reversal_flag
,p_ap_invoice_dist_all_rec.type_1099
,p_ap_invoice_dist_all_rec.unit_price
,p_ap_invoice_dist_all_rec.amount_encumbered
,p_ap_invoice_dist_all_rec.base_amount_encumbered
,p_ap_invoice_dist_all_rec.encumbered_flag
,p_ap_invoice_dist_all_rec.exchange_date
,p_ap_invoice_dist_all_rec.exchange_rate
,p_ap_invoice_dist_all_rec.exchange_rate_type
,p_ap_invoice_dist_all_rec.price_adjustment_flag
,p_ap_invoice_dist_all_rec.price_var_code_combination_id
,p_ap_invoice_dist_all_rec.quantity_unencumbered
,p_ap_invoice_dist_all_rec.stat_amount
,p_ap_invoice_dist_all_rec.amount_to_post
,p_ap_invoice_dist_all_rec.attribute1
,p_ap_invoice_dist_all_rec.attribute10
,p_ap_invoice_dist_all_rec.attribute11
,p_ap_invoice_dist_all_rec.attribute12
,p_ap_invoice_dist_all_rec.attribute13
,p_ap_invoice_dist_all_rec.attribute14
,p_ap_invoice_dist_all_rec.attribute15
,p_ap_invoice_dist_all_rec.attribute2
,p_ap_invoice_dist_all_rec.attribute3
,p_ap_invoice_dist_all_rec.attribute4
,p_ap_invoice_dist_all_rec.attribute5
,p_ap_invoice_dist_all_rec.attribute6
,p_ap_invoice_dist_all_rec.attribute7
,p_ap_invoice_dist_all_rec.attribute8
,p_ap_invoice_dist_all_rec.attribute9
,p_ap_invoice_dist_all_rec.attribute_category
,p_ap_invoice_dist_all_rec.base_amount_to_post
,p_ap_invoice_dist_all_rec.cash_je_batch_id
,p_ap_invoice_dist_all_rec.expenditure_item_date
,p_ap_invoice_dist_all_rec.expenditure_organization_id
,p_ap_invoice_dist_all_rec.expenditure_type
,p_ap_invoice_dist_all_rec.je_batch_id
,p_ap_invoice_dist_all_rec.parent_invoice_id
,p_ap_invoice_dist_all_rec.pa_addition_flag
,p_ap_invoice_dist_all_rec.pa_quantity
,p_ap_invoice_dist_all_rec.posted_amount
,p_ap_invoice_dist_all_rec.posted_base_amount
,p_ap_invoice_dist_all_rec.prepay_amount_remaining
,p_ap_invoice_dist_all_rec.project_accounting_context
,p_ap_invoice_dist_all_rec.project_id
,p_ap_invoice_dist_all_rec.task_id
,p_ap_invoice_dist_all_rec.ussgl_transaction_code
,p_ap_invoice_dist_all_rec.ussgl_trx_code_context
,p_ap_invoice_dist_all_rec.earliest_settlement_date
,p_ap_invoice_dist_all_rec.req_distribution_id
,p_ap_invoice_dist_all_rec.quantity_variance
,p_ap_invoice_dist_all_rec.base_quantity_variance
,p_ap_invoice_dist_all_rec.packet_id
,p_ap_invoice_dist_all_rec.awt_flag
,p_ap_invoice_dist_all_rec.awt_group_id
,p_ap_invoice_dist_all_rec.awt_tax_rate_id
,p_ap_invoice_dist_all_rec.awt_gross_amount
,p_ap_invoice_dist_all_rec.awt_invoice_id
,p_ap_invoice_dist_all_rec.awt_origin_group_id
,p_ap_invoice_dist_all_rec.reference_1
,p_ap_invoice_dist_all_rec.reference_2
,p_ap_invoice_dist_all_rec.org_id
,p_ap_invoice_dist_all_rec.other_invoice_id
,p_ap_invoice_dist_all_rec.awt_invoice_payment_id
,p_ap_invoice_dist_all_rec.global_attribute_category
,p_ap_invoice_dist_all_rec.global_attribute1
,p_ap_invoice_dist_all_rec.global_attribute2
,p_ap_invoice_dist_all_rec.global_attribute3
,p_ap_invoice_dist_all_rec.global_attribute4
,p_ap_invoice_dist_all_rec.global_attribute5
,p_ap_invoice_dist_all_rec.global_attribute6
,p_ap_invoice_dist_all_rec.global_attribute7
,p_ap_invoice_dist_all_rec.global_attribute8
,p_ap_invoice_dist_all_rec.global_attribute9
,p_ap_invoice_dist_all_rec.global_attribute10
,p_ap_invoice_dist_all_rec.global_attribute11
,p_ap_invoice_dist_all_rec.global_attribute12
,p_ap_invoice_dist_all_rec.global_attribute13
,p_ap_invoice_dist_all_rec.global_attribute14
,p_ap_invoice_dist_all_rec.global_attribute15
,p_ap_invoice_dist_all_rec.global_attribute16
,p_ap_invoice_dist_all_rec.global_attribute17
,p_ap_invoice_dist_all_rec.global_attribute18
,p_ap_invoice_dist_all_rec.global_attribute19
,p_ap_invoice_dist_all_rec.global_attribute20
,p_ap_invoice_dist_all_rec.line_group_number
,p_ap_invoice_dist_all_rec.receipt_verified_flag
,p_ap_invoice_dist_all_rec.receipt_required_flag
,p_ap_invoice_dist_all_rec.receipt_missing_flag
,p_ap_invoice_dist_all_rec.justification
,p_ap_invoice_dist_all_rec.expense_group
,p_ap_invoice_dist_all_rec.start_expense_date
,p_ap_invoice_dist_all_rec.end_expense_date
,p_ap_invoice_dist_all_rec.receipt_currency_code
,p_ap_invoice_dist_all_rec.receipt_conversion_rate
,p_ap_invoice_dist_all_rec.receipt_currency_amount
,p_ap_invoice_dist_all_rec.daily_amount
,p_ap_invoice_dist_all_rec.web_parameter_id
,p_ap_invoice_dist_all_rec.adjustment_reason
,p_ap_invoice_dist_all_rec.award_id
,p_ap_invoice_dist_all_rec.mrc_accrual_posted_flag
,p_ap_invoice_dist_all_rec.mrc_cash_posted_flag
,p_ap_invoice_dist_all_rec.mrc_dist_code_combination_id
,p_ap_invoice_dist_all_rec.mrc_amount
,p_ap_invoice_dist_all_rec.mrc_base_amount
,p_ap_invoice_dist_all_rec.mrc_base_inv_price_variance
,p_ap_invoice_dist_all_rec.mrc_exchange_rate_variance
,p_ap_invoice_dist_all_rec.mrc_posted_flag
,p_ap_invoice_dist_all_rec.mrc_program_application_id
,p_ap_invoice_dist_all_rec.mrc_program_id
,p_ap_invoice_dist_all_rec.mrc_program_update_date
,p_ap_invoice_dist_all_rec.mrc_rate_var_ccid
,p_ap_invoice_dist_all_rec.mrc_request_id
,p_ap_invoice_dist_all_rec.mrc_exchange_date
,p_ap_invoice_dist_all_rec.mrc_exchange_rate
,p_ap_invoice_dist_all_rec.mrc_exchange_rate_type
,p_ap_invoice_dist_all_rec.mrc_amount_to_post
,p_ap_invoice_dist_all_rec.mrc_base_amount_to_post
,p_ap_invoice_dist_all_rec.mrc_cash_je_batch_id
,p_ap_invoice_dist_all_rec.mrc_je_batch_id
,p_ap_invoice_dist_all_rec.mrc_posted_amount
,p_ap_invoice_dist_all_rec.mrc_posted_base_amount
,p_ap_invoice_dist_all_rec.mrc_receipt_conversion_rate
,p_ap_invoice_dist_all_rec.credit_card_trx_id
,p_ap_invoice_dist_all_rec.dist_match_type
,p_ap_invoice_dist_all_rec.rcv_transaction_id
,ln_dist_id --p_ap_invoice_dist_all_rec.INVOICE_DISTRIBUTION_ID
,p_ap_invoice_dist_all_rec.parent_reversal_id
,p_ap_invoice_dist_all_rec.tax_recoverable_flag
,p_ap_invoice_dist_all_rec.pa_cc_ar_invoice_id
,p_ap_invoice_dist_all_rec.pa_cc_ar_invoice_line_num
,p_ap_invoice_dist_all_rec.pa_cc_processed_code
,p_ap_invoice_dist_all_rec.merchant_document_number
,p_ap_invoice_dist_all_rec.merchant_name
,p_ap_invoice_dist_all_rec.merchant_reference
,p_ap_invoice_dist_all_rec.merchant_tax_reg_number
,p_ap_invoice_dist_all_rec.merchant_taxpayer_id
,p_ap_invoice_dist_all_rec.country_of_supply
,p_ap_invoice_dist_all_rec.matched_uom_lookup_code
,p_ap_invoice_dist_all_rec.gms_burdenable_raw_cost
,p_ap_invoice_dist_all_rec.accounting_event_id
,p_ap_invoice_dist_all_rec.prepay_distribution_id
,p_ap_invoice_dist_all_rec.upgrade_posted_amt
,p_ap_invoice_dist_all_rec.upgrade_base_posted_amt
,p_ap_invoice_dist_all_rec.inventory_transfer_status
,p_ap_invoice_dist_all_rec.company_prepaid_invoice_id
,p_ap_invoice_dist_all_rec.cc_reversal_flag
,p_ap_invoice_dist_all_rec.awt_withheld_amt
,p_ap_invoice_dist_all_rec.invoice_includes_prepay_flag
,p_ap_invoice_dist_all_rec.price_correct_inv_id
,p_ap_invoice_dist_all_rec.price_correct_qty
,p_ap_invoice_dist_all_rec.pa_cmt_xface_flag
,p_ap_invoice_dist_all_rec.cancellation_flag
,p_ap_invoice_dist_all_rec.invoice_line_number
,p_ap_invoice_dist_all_rec.corrected_invoice_dist_id
,p_ap_invoice_dist_all_rec.rounding_amt
,p_ap_invoice_dist_all_rec.charge_applicable_to_dist_id
,p_ap_invoice_dist_all_rec.corrected_quantity
,p_ap_invoice_dist_all_rec.related_id
,p_ap_invoice_dist_all_rec.asset_book_type_code
,p_ap_invoice_dist_all_rec.asset_category_id
,p_ap_invoice_dist_all_rec.distribution_class
,p_ap_invoice_dist_all_rec.final_payment_rounding
,p_ap_invoice_dist_all_rec.final_application_rounding
,p_ap_invoice_dist_all_rec.amount_at_prepay_xrate
,p_ap_invoice_dist_all_rec.cash_basis_final_app_rounding
,p_ap_invoice_dist_all_rec.amount_at_prepay_pay_xrate
,p_ap_invoice_dist_all_rec.intended_use
,p_ap_invoice_dist_all_rec.detail_tax_dist_id
,p_ap_invoice_dist_all_rec.rec_nrec_rate
,p_ap_invoice_dist_all_rec.recovery_rate_id
,p_ap_invoice_dist_all_rec.recovery_rate_name
,p_ap_invoice_dist_all_rec.recovery_type_code
,p_ap_invoice_dist_all_rec.recovery_rate_code
,p_ap_invoice_dist_all_rec.withholding_tax_code_id
,p_ap_invoice_dist_all_rec.tax_already_distributed_flag
,p_ap_invoice_dist_all_rec.summary_tax_line_id
,p_ap_invoice_dist_all_rec.taxable_amount
,p_ap_invoice_dist_all_rec.taxable_base_amount
,p_ap_invoice_dist_all_rec.extra_po_erv
,p_ap_invoice_dist_all_rec.prepay_tax_diff_amount
,p_ap_invoice_dist_all_rec.tax_code_id
,p_ap_invoice_dist_all_rec.vat_code
,p_ap_invoice_dist_all_rec.amount_includes_tax_flag
,p_ap_invoice_dist_all_rec.tax_calculated_flag
,p_ap_invoice_dist_all_rec.tax_recovery_rate
,p_ap_invoice_dist_all_rec.tax_recovery_override_flag
,p_ap_invoice_dist_all_rec.tax_code_override_flag
,p_ap_invoice_dist_all_rec.total_dist_amount
,p_ap_invoice_dist_all_rec.total_dist_base_amount
,p_ap_invoice_dist_all_rec.prepay_tax_parent_id
,p_ap_invoice_dist_all_rec.cancelled_flag
,p_ap_invoice_dist_all_rec.old_distribution_id
,p_ap_invoice_dist_all_rec.old_dist_line_number
,p_ap_invoice_dist_all_rec.amount_variance
,p_ap_invoice_dist_all_rec.base_amount_variance
,p_ap_invoice_dist_all_rec.historical_flag
,p_ap_invoice_dist_all_rec.rcv_charge_addition_flag
,p_ap_invoice_dist_all_rec.awt_related_id
,p_ap_invoice_dist_all_rec.related_retainage_dist_id
,p_ap_invoice_dist_all_rec.retained_amount_remaining
,p_ap_invoice_dist_all_rec.bc_event_id
,p_ap_invoice_dist_all_rec.retained_invoice_dist_id
,p_ap_invoice_dist_all_rec.final_release_rounding
,p_ap_invoice_dist_all_rec.fully_paid_acctd_flag
,p_ap_invoice_dist_all_rec.root_distribution_id
,p_ap_invoice_dist_all_rec.xinv_parent_reversal_id
,p_ap_invoice_dist_all_rec.recurring_payment_id
,p_ap_invoice_dist_all_rec.release_inv_dist_derived_from
,p_ap_invoice_dist_all_rec.pay_awt_group_id);

pn_ap_invoice_dist_id := ln_dist_id;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'return pn_ap_invoice_dist_id:' || pn_ap_invoice_dist_id);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
EXCEPTION
WHEN OTHERS THEN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,SQLERRM);
END IF;
app_exception.raise_exception(exception_code => SQLCODE
,exception_text => SQLERRM); --Modified by
Junjian on 08-01-2014
END jai_insert_ap_inv_dist; --Modified by Junjian for AP tax flow
-----------------------------------------------------------------------
-- PUBLIC PROCEDURE
-- jai_populate_tax_dist_ar
--
-- DESCRIPTION
-- populate distribution lines for AR taxes
--
-- CALLED BY
-- jai_populate_tax_dist
-----------------------------------------------------------------------
PROCEDURE jai_populate_tax_dist_ar
(
pr_tax_line IN jai_tax_lines%ROWTYPE
,pv_external_flag IN VARCHAR2 DEFAULT 'N' -- added by zhiwei.xin for AR Open
Interface
,pv_process_status OUT NOCOPY VARCHAR2
,pv_process_message OUT NOCOPY VARCHAR2
) IS

lv_api_name CONSTANT VARCHAR2(50) := 'jai_populate_tax_dist_ar';

lv_account_class_tax CONSTANT VARCHAR2(10) := 'TAX';


lv_account_class_freight CONSTANT VARCHAR2(10) := 'FREIGHT';
lv_account_class_rec CONSTANT VARCHAR2(10) := 'REC';
lv_account_class_rev CONSTANT VARCHAR2(10) := 'REV';
lv_line_type_tax CONSTANT VARCHAR2(10) := 'TAX';
lv_line_type_freight CONSTANT VARCHAR2(10) := 'FREIGHT';
lv_line_type_line CONSTANT VARCHAR2(10) := 'LINE';
l_tax_line jai_tax_lines%ROWTYPE;
l_trx_line_rec ra_customer_trx_lines_all%ROWTYPE;
l_trx_dist_rec ra_cust_trx_line_gl_dist_all%ROWTYPE;
--l_tax_dist_rec JAI_REC_NREC_DIST%ROWTYPE;
l_reco_lines_rec jai_rgm_recovery_lines%ROWTYPE;
lv_item_class jai_tax_det_factors.item_classification%TYPE;
ln_trx_line_id NUMBER;
ln_interim_lib_ccid NUMBER;
ln_rev_ccid NUMBER;
ln_trx_dist_id NUMBER;
ln_tax_amount NUMBER;
ln_tax_acctd_amount NUMBER;

-- cursor to fetch current line number


CURSOR c_trx_line_num IS
SELECT nvl(MAX(line_number)
,0) + 1
FROM ra_customer_trx_lines_all
WHERE customer_trx_id = l_tax_line.trx_id
-- added line type condition for AR Open Interface begin
AND link_to_cust_trx_line_id = l_tax_line.trx_line_id
AND line_type = 'TAX'
-- added line type condition for AR Open Interface end.
;

-- cursor to fetch interface info


CURSOR c_trx_interface IS
SELECT interface_line_context
,interface_line_attribute3
,interface_line_attribute6
,previous_customer_trx_id
-- bug#26529891 chris 20170726to get crediting trx id
,previous_customer_trx_line_id -- bug#26529891 chris 20170726to get
crediting line id
FROM ra_customer_trx_lines_all
WHERE customer_trx_id = l_tax_line.trx_id
AND customer_trx_line_id = l_tax_line.trx_line_id
AND line_type = lv_line_type_line;

/*Commented by Qinglei for bug#18060812 on 26-Mar-2014 begin


-- cursor to fetch account class
CURSOR c_interim_lib_ccid(cp_entity_code VARCHAR2,
cp_entity_id NUMBER,
cp_ledger_id NUMBER,
cp_org_id NUMBER,
cp_organization_id NUMBER,
cp_location_id NUMBER)
IS
SELECT INTERIM_LIABILITY_CCID
FROM JAI_TAX_ACCOUNTS
WHERE TAX_ACCOUNT_ENTITY_CODE = cp_entity_code AND
TAX_ACCOUNT_ENTITY_ID = cp_entity_id AND
LEDGER_ID = cp_ledger_id AND
ORG_ID = cp_org_id AND
ORGANIZATION_ID = cp_organization_id AND
LOCATION_ID = cp_location_id;
Commented by Qinglei for bug#18060812 on 26-Mar-2014 end*/

/*Added by Qinglei for bug#18060812 on 26-Mar-2014 begin*/


-- cursor to fetch account class
CURSOR c_interim_lib_ccid
(
cp_entity_code VARCHAR2
,cp_entity_id NUMBER
,cp_ledger_id NUMBER
,cp_org_id NUMBER
,cp_organization_id NUMBER
,cp_location_id NUMBER
) IS
SELECT interim_liability_ccid
FROM jai_tax_accounts
WHERE tax_account_entity_code = cp_entity_code
AND tax_account_entity_id = cp_entity_id
AND ledger_id = cp_ledger_id
AND org_id = cp_org_id
AND nvl(organization_id
,0) = nvl(cp_organization_id
,0)
AND nvl(location_id
,0) = nvl(cp_location_id
,0);
/*Added by Qinglei for bug#18060812 on 26-Mar-2014 end*/

-- cursor to fetch Item Revenue account class


CURSOR c_rev_ccid IS
SELECT code_combination_id
FROM ra_cust_trx_line_gl_dist_all
WHERE customer_trx_id = l_tax_line.trx_id
AND customer_trx_line_id = l_tax_line.trx_line_id
AND account_class = lv_account_class_rev;

-- cursor to fetch salesrep


CURSOR c_salesrep IS
SELECT primary_salesrep_id
FROM ra_customer_trx_all
WHERE customer_trx_id = l_tax_line.trx_id;

-- cursor to fetch GL_DATE


CURSOR c_gl_date IS
SELECT gl_date
,event_id -- added by zhiwie.xin for AR Open Interface
,account_set_flag /*TII 23169078*/
FROM ra_cust_trx_line_gl_dist_all
WHERE customer_trx_id = l_tax_line.trx_id
and account_class = lv_account_class_rec
and latest_rec_flag = 'Y' --26335522 AELLURU AS PER REVIEW COMMENTS
AND rownum=1; --Added by chris for project invoice AR interface
bug#26335522
-- AND --commented by chris for project invoice AR interface bug#26335522
-- account_class = lv_account_class_rev AND
-- account_class = lv_account_class_rec; /*TII 23169078*/ --commented
by chris for project invoice AR interface bug#26335522
-- customer_trx_line_id = l_tax_line.TRX_LINE_ID; COMMENted as
customer_Trx_line_id will be null for receivable account class.

--Added by chris for project invoice AR interface bug#26335522


-- cursor to fetch GL_DATE from jai_tax_det_factors
-- basing on the requirment for multiple REV gl_dates

CURSOR c_factor_gl_date IS
SELECT trx_line_gl_date
FROM JAI_TAX_DET_FACTORS
WHERE trx_id = l_tax_line.trx_id
AND trx_line_id = l_tax_line.trx_line_id;
ld_trx_line_gl_date JAI_TAX_DET_FACTORS.trx_line_gl_date%TYPE;

--Addion ends by chris for project invoice AR interface bug#26335522

CURSOR c_item_class IS
SELECT item_classification
FROM jai_tax_det_factors
WHERE det_factor_id = l_tax_line.det_factor_id;

-- added by zhiwei.xin for AR Open Interface begin


ln_request_id NUMBER;
l_post_to_gl VARCHAR(2); /*27607026*/

CURSOR c_request_id(cp_trx_id NUMBER) IS


SELECT request_id,post_to_gl /*27607026*/
FROM ra_customer_trx_all RCTA,
RA_CUST_TRX_TYPES_ALL RCTP
/*27607026*/
WHERE RCTP.CUST_TRX_TYPE_ID =RCTA.CUST_TRX_TYPE_ID
-- AND RCTP.SET_OF_BOOKS_ID =RCTA.SET_OF_BOOKS_ID
AND RCTP.ORG_ID =RCTA.ORG_ID
-- 28026700
/*27607026*/
AND RCTA.customer_trx_id = cp_trx_id;
l_request_id c_request_id%ROWTYPE;
CURSOR c_external_ccid
(
cp_trx_id NUMBER
,cp_trx_line_id NUMBER
,cp_tax_line_num NUMBER
) IS
SELECT code_combination_id
FROM jai_interface_tax_lines_all
WHERE tax_line_no = cp_tax_line_num
AND interface_line_id IN (SELECT interface_line_id
FROM jai_interface_lines_all
WHERE internal_trx_line_id = cp_trx_line_id
AND internal_trx_id = cp_trx_id);
-- added by zhiwei.xin for AR Open Interface end.

lr_acc_ids jai_tax_accounting_pkg.r_tax_account_ccids; --Added by Qinglei for


bug#18557092

--Added by Zhhou for bug#19485985 begin


CURSOR c_get_oe_trn_info(cp_trx_line_id IN NUMBER) IS
SELECT oel.header_id
,oel.line_id
,oel.line_category_code
,ral.interface_line_context /*22096463*/
FROM ra_customer_trx_lines_all ral
,oe_order_lines_all oel
WHERE ral.customer_trx_line_id = cp_trx_line_id
AND ral.interface_line_attribute6 = oel.line_id
AND ral.interface_line_context IN ('ORDER ENTRY'
,'ORDER MANAGEMENT'
,'INTERCOMPANY'); /*added intercompany
for bug#22096463*/
r_oe_trn_info c_get_oe_trn_info%ROWTYPE;
--Added by Zhhou for bug#19485985 end

-- added by zhiwei.xin for bug#19593295 begin


CURSOR c_tax_type_tpb(cp_tax_type_id NUMBER) IS
SELECT tax_point_basis
FROM jai_tax_types
WHERE tax_type_id = cp_tax_type_id;
-- added by zhiwei.xin for bug#19593295 end.
--22096463
CURSOR c_ship_network_info
(
cp_trx_id IN NUMBER
,cp_trx_line_id IN NUMBER
) IS
SELECT ship_network.interorg_receivables_account
FROM mtl_interorg_parameters ship_network
,po_requisition_lines_all prl
,oe_order_lines_all ool
,ra_customer_trx_lines_all rctl
,ap_invoice_lines_all ail
,ap_invoices_all aia
WHERE prl.requisition_header_id = ool.source_document_id
AND prl.requisition_line_id = ool.source_document_line_id
AND ship_network.from_organization_id = prl.source_organization_id
AND ship_network.to_organization_id = prl.destination_organization_id
AND ool.source_document_type_id = 10
--modified by mani for bug 26543983
--AND to_char(ool.header_id) = rctl.interface_line_attribute9
--AND to_char(ool.line_id) = rctl.interface_line_attribute6
AND ool.header_id = rctl.interface_line_attribute9
AND ool.line_id = rctl.interface_line_attribute6
AND REGEXP_LIKE(RCTL.interface_line_attribute9 , '[0-9]{'||
LENGTH(interface_line_attribute9)||'}+')
AND REGEXP_LIKE(RCTL.INTERFACE_LINE_ATTRIBUTE6 , '[0-9]{'||
LENGTH(RCTL.INTERFACE_LINE_ATTRIBUTE6 )||'}+')
--modified by mani for bug 26543983
AND rctl.interface_line_context = 'INTERCOMPANY'
AND rctl.customer_trx_id = cp_trx_id
AND rctl.customer_trx_line_id = cp_trx_line_id
AND rownum = 1;

-- addition starts due to bug#26529891 chris 20170726


-- to fetch the associate crediting tax line info
-- Somdeep 20170726 to be added for tax line AELLURU 26585962
CURSOR c_pre_tax
(
cp_trx_id IN NUMBER
,cp_trx_line_id IN NUMBER
) IS
SELECT
rctl.CUSTOMER_TRX_ID, --crediting tax trx id
rctl.CUSTOMER_TRX_LINE_ID --crediting tax line id
FROM RA_CUSTOMER_TRX_LINES_ALL rctl,
jai_tax_lines jtl
WHERE rctl.CUSTOMER_TRX_ID=jtl.trx_id
AND rctl.LINK_TO_CUST_TRX_LINE_ID=jtl.trx_line_id
AND rctl.CUSTOMER_TRX_ID = cp_trx_id
AND rctl.LINK_TO_CUST_TRX_LINE_ID = cp_trx_line_id
and jtl.tax_line_num=rctl.line_number
AND jtl.tax_line_num=l_trx_line_rec.LINE_NUMBER
AND rctl.LINE_TYPE = 'TAX';
/*FETCHING CUSTOMER TRX_ID AND CUSTOMER TRX_LINE_ID FOR FETCHING FERENCE
FEILDS*/

pn_pre_custtrx_id NUMBER DEFAULT NULL;


pn_pre_custtrx_line_id NUMBER DEFAULT NULL;

-- addition ends due to bug#26529891 chris 20170726


--AELLURU FOR GL ADDITION 26335522

l_boolean BOOLEAN;
l_default_gl_date DATE;
l_default_rule_used VARCHAR2(50);
l_error_message VARCHAR2(256);
--AELLURU FOR GL ADDITION 26335522
BEGIN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name || '.BEGIN'
,G_PKG_NAME || ': ' || lv_api_name || '()+');
END IF;

pv_process_status := FND_API.G_RET_STS_SUCCESS;
l_tax_line := pr_tax_line;

IF (G_LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_STATEMENT
,G_MODULE_NAME || lv_api_name
,'TAX_LINE_ID : ' || l_tax_line.tax_line_id || ', TRX_ID : ' ||
l_tax_line.trx_id ||
', TRX_LINE_ID : ' || l_tax_line.trx_line_id
/* Bug#26877071, dejiang.liu/20171008. Add parameter log. */
|| ', pv_external_flag : ' || pv_external_flag
);
END IF;
/*AELLURU FOR 27666686
IF (l_tax_line.tax_line_id IS NULL)
THEN
IF (G_LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_STATEMENT
,G_MODULE_NAME || lv_api_name
,'TAX_LINE_ID is NULL SO RETURNING BACK '
);

END IF;
RETURN;
END IF;
/*AELLURU FOR 27666686 */
/* 26516141Reporting Type*/
IF (l_tax_line.reporting_only_flag = 'Y')
THEN
IF ( G_LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME || lv_api_name,
'TAX_LINE_ID : ' ||
l_tax_line.TAX_LINE_ID ||
', l_tax_line.reporting_only_flag : '
|| l_tax_line.reporting_only_flag ||
'Is reporting only tax so not
populating the distribution');

END IF;
RETURN;
END IF;
/*26516141 Reporting type*/
-- added by zhiwei.xin for O2C Accounting Changes begin

IF (G_LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_STATEMENT
,G_MODULE_NAME || lv_api_name
,'INCLUSIVE_FLAG : ' || l_tax_line.inclusive_flag);
END IF;

IF nvl(l_tax_line.inclusive_flag
,'N') = 'Y' THEN
RETURN;
END IF;
-- added by zhiwei.xin for O2C Accounting Changes end.

-- added by zhiwei.xin for bug#19649764 begin


IF nvl(l_tax_line.self_assessed_flag
,'N') = 'Y' THEN
RETURN;
END IF;
-- added by zhiwei.xin for bug#19649764 end.

-- added by zhiwei.xin for AR Open Interface begin


IF (G_LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_STATEMENT
,G_MODULE_NAME || lv_api_name
,G_PKG_NAME || ': ' || lv_api_name || ': Fetch request id for
AR Auto Invoice.');
END IF;

OPEN c_request_id(cp_trx_id => l_tax_line.trx_id);


FETCH c_request_id
INTO ln_request_id,
l_post_to_gl ;/*27607026*/
CLOSE c_request_id;

IF (G_LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_STATEMENT
,G_MODULE_NAME || lv_api_name
,'REQUEST_ID : ' ||ln_request_id
||',l_post_to_gl :'||l_post_to_gl);
END IF;
-- added by zhiwei.xin for AR Open Interface end.

/* ----------------------------------------------------------
|1. Trx Line |
----------------------------------------------------------*/
-- added by zhiwei.xin for AR Open Interface begin

l_trx_line_rec.request_id := ln_request_id; -- added by


zhiwei.xin for AR Open Interface
l_trx_line_rec.customer_trx_id := l_tax_line.trx_id;
l_trx_line_rec.extended_amount :=
nvl(l_tax_line.rounded_tax_amt_trx_curr
,0);
l_trx_line_rec.taxable_amount :=
nvl(l_tax_line.rounded_taxable_amt_trx_curr
,0);
l_trx_line_rec.set_of_books_id := l_tax_line.ledger_id;
l_trx_line_rec.link_to_cust_trx_line_id := l_tax_line.trx_line_id;
l_trx_line_rec.line_type := lv_line_type_tax;
l_trx_line_rec.org_id := l_tax_line.org_id;
l_trx_line_rec.uom_code := l_tax_line.trx_uom;
l_trx_line_rec.autotax := 'N';
l_trx_line_rec.last_update_date := SYSDATE;
l_trx_line_rec.last_updated_by := fnd_global.user_id;
l_trx_line_rec.created_by := fnd_global.user_id;
l_trx_line_rec.creation_date := SYSDATE;
l_trx_line_rec.last_update_login := fnd_global.login_id;

OPEN c_trx_line_num;
FETCH c_trx_line_num
INTO l_trx_line_rec.line_number;
CLOSE c_trx_line_num;

OPEN c_trx_interface;
FETCH c_trx_interface
INTO l_trx_line_rec.interface_line_context
,l_trx_line_rec.interface_line_attribute3
,l_trx_line_rec.interface_line_attribute6
,pn_pre_custtrx_id -- bug#26529891 chris 20170726 to fetch previous LINE
trx id
,pn_pre_custtrx_line_id -- bug#26529891 chris 20170726 to fetch previous
LINE trx line id
;

CLOSE c_trx_interface;

-- Addition starts bug#26529891 chris 20170726


IF (G_LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_STATEMENT
,G_MODULE_NAME || lv_api_name
,'previous_customer_trx_id_trxline: +' ||
'PREVIOUS_CUSTOMER_TRX_LINE_ID_trxline: ' ||
pn_pre_custtrx_id || ' + ' || pn_pre_custtrx_line_id);

END IF;

IF pn_pre_custtrx_id IS NOT NULL


AND pn_pre_custtrx_line_id IS NOT NULL THEN

OPEN c_pre_tax(pn_pre_custtrx_id
,pn_pre_custtrx_line_id);
FETCH c_pre_tax
INTO l_trx_line_rec.previous_customer_trx_id -- temp chris 20170726 to be
added for tax line
,l_trx_line_rec.previous_customer_trx_line_id -- temp chris 20170726 to
be added for tax line
;
CLOSE c_pre_tax;

IF (G_LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_STATEMENT
,G_MODULE_NAME || lv_api_name
,'previous_customer_trx_id_taxline: +' ||
'PREVIOUS_CUSTOMER_TRX_LINE_ID_taxline: ' ||
l_trx_line_rec.previous_customer_trx_id || ' + ' ||
l_trx_line_rec.previous_customer_trx_line_id);

END IF;

END IF;

-- Addition ends bug#26529891 chris 20170726

IF (G_LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_STATEMENT
,G_MODULE_NAME || lv_api_name
,G_PKG_NAME || ': ' || lv_api_name || ': Insert
RA_CUSTOMER_TRX_LINES_ALL.');
END IF;
-- insert trx line
jai_insert_ra_trx_lines(p_ra_trx_line_rec => l_trx_line_rec
,p_seq => ln_trx_line_id);

IF (G_LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_STATEMENT
,G_MODULE_NAME || lv_api_name
,'TRX_LINE_ID : ' || ln_trx_line_id);
END IF;

/* --------------------------------------------------------
|2. Trx Distribution Line |
----------------------------------------------------------*/
/*Commented by Qinglei for bug#18060812 on 26-Mar-2014 begin
OPEN c_interim_lib_ccid('TAX_RATE',
l_tax_line.tax_rate_id,
l_tax_line.ledger_id,
l_tax_line.org_id,
l_tax_line.organization_id,
l_tax_line.location_id);
FETCH c_interim_lib_ccid INTO ln_interim_lib_ccid;
CLOSE c_interim_lib_ccid;

IF ( G_LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME || lv_api_name,
'INTERIM_LIABILITY_CCID for Tax Rate: ' ||
ln_interim_lib_ccid);
END IF;

IF ln_interim_lib_ccid IS NULL THEN


OPEN c_interim_lib_ccid('TAX_TYPE',
l_tax_line.tax_type_id,
l_tax_line.ledger_id,
l_tax_line.org_id,
l_tax_line.organization_id,
l_tax_line.location_id);
FETCH c_interim_lib_ccid INTO ln_interim_lib_ccid;
CLOSE c_interim_lib_ccid;

IF ( G_LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME || lv_api_name,
'INTERIM_LIABILITY_CCID for Tax Type: ' ||
ln_interim_lib_ccid);
END IF;

END IF;
Commented by Qinglei for bug#18060812 on 26-Mar-2014 end*/

-- added by zhiwei.xin for AR Open Interface begin


IF nvl(pv_external_flag
,'N') = 'Y' THEN
OPEN c_external_ccid(cp_trx_id => l_tax_line.trx_id
,cp_trx_line_id => l_tax_line.trx_line_id
,cp_tax_line_num => l_tax_line.tax_line_num);
--FETCH c_external_ccid INTO ln_interim_lib_ccid; -- commented out by
zhiwei.xin for bug#19593295
FETCH c_external_ccid
INTO l_trx_dist_rec.code_combination_id; -- added by zhiwei.xin for
bug#19593295
CLOSE c_external_ccid;

IF (G_LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_STATEMENT
,G_MODULE_NAME || lv_api_name
,'Get external CCID: l_trx_dist_rec.code_combination_id= '
|| l_trx_dist_rec.code_combination_id);
END IF;
ELSE
-- added by zhiwei.xin for AR Open Interface end.

/*Added by Qinglei for bug#18060812 on 26-Mar-2014 begin*/


/*Get interim liability account in bellow sequence untill found.
1) Try to fetch interim liability in tax rate by organization+location.
2) Try to fetch interim liability in tax rate by organization.
3) Try to fetch interim liability in tax rate by operating unit.
4) Try to fetch interim liability in tax type by organization+location.
5) Try to fetch interim liability in tax type by organization.
6) Try to fetch interim liability in tax type by operating unit.*/
/*Commented by Qinglei for bug#18557092
OPEN c_interim_lib_ccid('TAX_RATE',
l_tax_line.tax_rate_id,
l_tax_line.ledger_id,
l_tax_line.org_id,
l_tax_line.organization_id,
l_tax_line.location_id);
FETCH c_interim_lib_ccid INTO ln_interim_lib_ccid;
CLOSE c_interim_lib_ccid;

IF ln_interim_lib_ccid IS NULL THEN


OPEN c_interim_lib_ccid('TAX_RATE',
l_tax_line.tax_rate_id,
l_tax_line.ledger_id,
l_tax_line.org_id,
l_tax_line.organization_id,
NULL);
FETCH c_interim_lib_ccid INTO ln_interim_lib_ccid;
CLOSE c_interim_lib_ccid;

IF ln_interim_lib_ccid IS NULL THEN


OPEN c_interim_lib_ccid('TAX_RATE',
l_tax_line.tax_rate_id,
l_tax_line.ledger_id,
l_tax_line.org_id,
NULL,
NULL);
FETCH c_interim_lib_ccid INTO ln_interim_lib_ccid;
CLOSE c_interim_lib_ccid;

IF ln_interim_lib_ccid IS NULL THEN


OPEN c_interim_lib_ccid('TAX_TYPE',
l_tax_line.tax_type_id,
l_tax_line.ledger_id,
l_tax_line.org_id,
l_tax_line.organization_id,
l_tax_line.location_id);
FETCH c_interim_lib_ccid INTO ln_interim_lib_ccid;
CLOSE c_interim_lib_ccid;

IF ln_interim_lib_ccid IS NULL THEN


OPEN c_interim_lib_ccid('TAX_TYPE',
l_tax_line.tax_type_id,
l_tax_line.ledger_id,
l_tax_line.org_id,
l_tax_line.organization_id,
NULL);
FETCH c_interim_lib_ccid INTO ln_interim_lib_ccid;
CLOSE c_interim_lib_ccid;

IF ln_interim_lib_ccid IS NULL THEN


OPEN c_interim_lib_ccid('TAX_TYPE',
l_tax_line.tax_type_id,
l_tax_line.ledger_id,
l_tax_line.org_id,
NULL,
NULL);
FETCH c_interim_lib_ccid INTO ln_interim_lib_ccid;
CLOSE c_interim_lib_ccid;
END IF; /*Tax Type in ou level*/
/* END IF; /*Tax Type in organization level*/
/*END IF; /*Tax Type in organization+location level*/
/*END IF; /*Tax Rate in ou level*/
/*END IF; /*Tax Rate in organization level*/
/*Added by Qinglei for bug#18060812 on 26-Mar-2014 end*/
/*Added by Qinglei for bug#18557092 begin*/
jai_tax_accounting_pkg.get_accounting_info(pn_tax_rate_id =>
l_tax_line.tax_rate_id
,pn_tax_type_id =>
l_tax_line.tax_type_id
,pn_ledger_id =>
l_tax_line.ledger_id
,pn_organization_id =>
nvl(l_tax_line.organization_id

,l_tax_line.org_id)
,pv_organization_type => 'IO'
,pn_location_id =>
l_tax_line.location_id
,pr_tax_account_ccids => lr_acc_ids
,pv_process_message =>
pv_process_message
,pv_process_status =>
pv_process_status);
--ln_interim_lib_ccid := lr_acc_ids.interim_liability_ccid;
-- commented out by zhiwei.xin for bug#19593295

-- added by zhiwei.xin for bug#19593295 begin


/* just copy the logic for rma here */
r_oe_trn_info := NULL;

--27150448
--AELLURU FETCHING THE ACCOUNTS BASED ON OU IF THE ACCOUNTS ARE NOT SETUP AT
IO
IF (lr_acc_ids.interim_recovery_ccid IS NULL
AND lr_acc_ids.recovery_ccid IS NULL
AND lr_acc_ids.interim_liability_ccid Is NULL
AND lr_acc_ids.liability_ccid IS NULL
AND lr_acc_ids.expense_ccid IS NULL
AND lr_acc_ids.rounding_ccid IS NULL
AND lr_acc_ids.suspense_ccid IS NULL
AND lr_acc_ids.advrcpt_suspense_ccid IS NULL
AND lr_acc_ids.ISO_suspense_ccid IS NULL)
THEN
jai_tax_accounting_pkg.get_accounting_info(pn_tax_rate_id
=> l_tax_line.tax_rate_id
,pn_tax_type_id
=> l_tax_line.tax_type_id
,pn_ledger_id
=> l_tax_line.ledger_id
,pn_organization_id
=> l_tax_line.org_id
,pv_organization_type
=> 'IO'
,pn_location_id
=> l_tax_line.location_id
,pr_tax_account_ccids
=> lr_acc_ids
,pv_process_message
=> pv_process_message
,pv_process_status
=> pv_process_status);
END IF ;

--27150448
OPEN c_get_oe_trn_info(cp_trx_line_id => l_tax_line.trx_line_id); --Derive OE
transaction line info check if from RMA
FETCH c_get_oe_trn_info
INTO r_oe_trn_info;
CLOSE c_get_oe_trn_info;

jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'invoice line category is ' ||
r_oe_trn_info.line_category_code); --26321149

jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'interface line context is ' ||
r_oe_trn_info.interface_line_context); --26714160
IF r_oe_trn_info.line_category_code = 'RETURN' THEN
l_trx_dist_rec.code_combination_id := lr_acc_ids.liability_ccid; --26321149
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'RMA cm populate tax liability account
' ||
l_trx_dist_rec.code_combination_id);
-- l_trx_dist_rec.code_combination_id := lr_acc_ids.suspense_ccid;
--26321149
--start additions for bug#22096463
--added interface line context for bug#26714160
ELSIF (r_oe_trn_info.line_category_code = 'INTERCOMPANY' OR
r_oe_trn_info.interface_line_context = 'INTERCOMPANY' )
THEN
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,' before fetching intercompany account
');

OPEN c_ship_network_info(l_tax_line.trx_id
,l_tax_line.trx_line_id);
FETCH c_ship_network_info
INTO l_trx_dist_rec.code_combination_id;
CLOSE c_ship_network_info;

jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'interorg receivable account being
fetched is ' ||
l_trx_dist_rec.code_combination_id);

ELSE

OPEN c_tax_type_tpb(cp_tax_type_id => l_tax_line.tax_type_id);


FETCH c_tax_type_tpb
INTO l_tax_line.tax_point_basis;
CLOSE c_tax_type_tpb;

IF (G_LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_STATEMENT
,G_MODULE_NAME || lv_api_name
,'TAX_POINT_BASIS : ' || l_tax_line.tax_point_basis);
END IF;

IF l_tax_line.tax_point_basis = 'DELIVERY' THEN


IF nvl(l_tax_line.applied_from_entity_code
,'$$$') IN ('OE_ORDER_HEADERS'
,'SALES_ORDER_ISSUE') THEN
--AELLURU FOR 21062017 BUG 26301735
l_trx_dist_rec.code_combination_id := lr_acc_ids.suspense_ccid;
ELSE
l_trx_dist_rec.code_combination_id := lr_acc_ids.liability_ccid;
END IF;
ELSIF l_tax_line.tax_point_basis = 'INVOICE' THEN
l_trx_dist_rec.code_combination_id := lr_acc_ids.liability_ccid;
ELSIF l_tax_line.tax_point_basis IN ('ACCOUNTING'
,'PAYMENT') THEN
l_trx_dist_rec.code_combination_id := lr_acc_ids.interim_liability_ccid;
END IF;
END IF;
-- added by zhiwei.xin for bug#19593295 end.
/*Added by Qinglei for bug#18557092 end*/
-- added by zhiwei.xin for AR Open Interface begin
END IF;
-- added by zhiwei.xin for AR Open Interface end.

-- commented out by zhiwei.xin for bug#19593295 begin


/*IF nvl(ln_interim_lib_ccid, 0) = 0 THEN
pv_process_status := FND_API.G_RET_STS_ERROR;
pv_process_message := 'No interim liability account was found for tax rate '
|| l_tax_line.TAX_RATE_ID;
RETURN;
END IF;*/
-- commented out by zhiwei.xin for bug#19593295 end.

-- added by zhiwei.xin for bug#19593295 begin


IF nvl(l_trx_dist_rec.code_combination_id
,0) = 0 THEN
pv_process_status := FND_API.G_RET_STS_ERROR;
pv_process_message := 'No desired account was found for tax rate ' ||
l_tax_line.tax_rate_code; --Updated by Wenqiong for bug20193697
RETURN;
END IF;
-- added by zhiwei.xin for bug#19593295 end.

-- added by zhiwei.xin for AR Open Interface begin


IF nvl(pr_tax_line.inclusive_flag
,'N') = 'N' THEN
l_trx_dist_rec.request_id := ln_request_id;
END IF;
-- added by zhiwei.xin for AR Open Interface end.

/* no need processing for open interface, just merge the changes with
bug#19593295*/
-- commented out by zhiwei.xin for bug#19593295 begin
--Added by Zhhou for bug#19485985 begin
/*r_oe_trn_info := NULL;
OPEN c_get_oe_trn_info(cp_trx_line_id => l_tax_line.trx_line_id); --Derive OE
transaction line info check if from RMA
FETCH c_get_oe_trn_info INTO r_oe_trn_info;
CLOSE c_get_oe_trn_info;

IF r_oe_trn_info.line_category_code = 'RETURN' THEN


l_trx_dist_rec.code_combination_id := lr_acc_ids.suspense_ccid;
else
l_trx_dist_rec.code_combination_id := ln_interim_lib_ccid;
end if;*/
--Added by Zhhou for bug#19485985 end
-- commented out by zhiwei.xin for bug#19593295 end.

l_trx_dist_rec.account_class := lv_account_class_tax;
l_trx_dist_rec.account_set_flag := nvl(l_trx_dist_rec.account_set_flag
,'N'); --23169078 tii
l_trx_dist_rec.acctd_amount := nvl(l_tax_line.rounded_tax_amt_fun_curr
,0);
l_trx_dist_rec.amount := nvl(l_tax_line.rounded_tax_amt_trx_curr
,0);
--l_trx_dist_rec.code_combination_id := ln_interim_lib_ccid; --Commented by
Zhhou for bug#19485985
l_trx_dist_rec.customer_trx_id := l_tax_line.trx_id;
l_trx_dist_rec.customer_trx_line_id := ln_trx_line_id;
l_trx_dist_rec.org_id := l_tax_line.org_id;
l_trx_dist_rec.percent := 100;
l_trx_dist_rec.posting_control_id := -3;
l_trx_dist_rec.set_of_books_id := l_tax_line.ledger_id;
l_trx_dist_rec.last_update_date := SYSDATE;
l_trx_dist_rec.last_updated_by := fnd_global.user_id;
l_trx_dist_rec.created_by := fnd_global.user_id;
l_trx_dist_rec.creation_date := SYSDATE;
l_trx_dist_rec.last_update_login := fnd_global.login_id;
l_trx_dist_rec.comments := l_tax_line.tax_rate_code;

OPEN c_salesrep;
FETCH c_salesrep
INTO l_trx_dist_rec.cust_trx_line_salesrep_id;
CLOSE c_salesrep;

OPEN c_gl_date; --tii 23169078


FETCH c_gl_date
INTO l_trx_dist_rec.gl_date
,l_trx_dist_rec.event_id
,l_trx_dist_rec.account_set_flag; -- added evnet id for AR Open
Interface;
CLOSE c_gl_date;

--Addition starts by chris for project invoice AR interface bug#26335522


IF (G_LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_STATEMENT
,G_MODULE_NAME || lv_api_name
,G_PKG_NAME || ': ' || lv_api_name ||
'RA_CUST_TRX_LINE_GL_DIST_ALL:gl_date: '
|| l_trx_dist_rec.gl_date || ':event_id: '||
l_trx_dist_rec.event_id);
END IF;

/*OPEN c_factor_gl_date ;
FETCH c_factor_gl_date
INTO ld_trx_line_gl_date;
CLOSE c_factor_gl_date;

IF (G_LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_STATEMENT
,G_MODULE_NAME || lv_api_name
,G_PKG_NAME || ': ' || lv_api_name ||
'JAI_TAX_DET_FACTORS:trx_line_gl_date: '
|| ld_trx_line_gl_date);
END IF;

IF ld_trx_line_gl_date is not null THEN

l_trx_dist_rec.gl_date := ld_trx_line_gl_date;

END IF;26335522 commented because deriving based on AR API*/

--AELLURU FOR GL DATE DERIVATION bug#26335522


BEGIN
IF (G_LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_STATEMENT ,G_MODULE_NAME || lv_api_name
,G_PKG_NAME || ': ' || lv_api_name
|| 'Before Calling AR standard API for getting GL_DATE: ' ||
'l_trx_dist_rec.gl_date ->' ||l_trx_dist_rec.gl_date
||
'l_trx_dist_rec.set_of_books_id -->' ||l_trx_dist_rec.set_of_books_id);
END IF;
IF( l_trx_dist_rec.gl_date IS NULL ) THEN
l_boolean := arp_standard.validate_and_default_gl_date (
NULL,

NULL,

NULL,

NULL,

NULL,

NULL,

NULL,

NULL,

'N',

NULL,

l_trx_dist_rec.set_of_books_id,

222,

l_default_gl_date,

l_default_rule_used,

l_error_message );

IF( l_boolean ) THEN


IF (G_LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_STATEMENT ,G_MODULE_NAME || lv_api_name
,G_PKG_NAME || ': ' || lv_api_name || 'API Returned Success,l_default_gl_date --> '

|| l_default_gl_date || ',Rule used for Derivation' || l_default_rule_used);

END IF;
l_trx_dist_rec.gl_date := TO_DATE(l_default_gl_date);
ELSE
IF (G_LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_STATEMENT ,G_MODULE_NAME || lv_api_name
,G_PKG_NAME || ': ' || lv_api_name || 'AR Standard API Returned Error,' ||
l_error_message);
END IF;
END IF;
END IF;
END;
/*27607026*/
IF (l_post_to_gl = 'N')
THEN
IF (G_LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_STATEMENT ,G_MODULE_NAME || lv_api_name
,G_PKG_NAME || ': ' || lv_api_name || 'As post to GL is N assigning NULL TO GL
DATE');
END IF;
l_trx_dist_rec.gl_date := NULL;
END IF;
/*27607026*/
--AELLURU FOR GL DATE DERIVATION bug#26335522
--Addion ends by chris for project invoice AR interface bug#26335522

IF (G_LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_STATEMENT
,G_MODULE_NAME || lv_api_name
,G_PKG_NAME || ': ' || lv_api_name || ': Insert
RA_CUST_TRX_LINE_GL_DIST_ALL.');
END IF;
-- insert transaction distributions
jai_insert_ra_trx_line_gl_dist(p_ra_cust_trx_dist_rec => l_trx_dist_rec
,p_seq_id => ln_trx_dist_id);
IF (G_LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_STATEMENT
,G_MODULE_NAME || lv_api_name
,'CUST_TRX_LINE_GL_DIST_ID : ' || ln_trx_dist_id);
END IF;

--Comment out by Wenqiong on Feb 14, 2014 since approach change that no O2C
records in jai_rec_nrec_dist
/* \* --------------------------------------------------------
|3. JAI Distribution Line |
----------------------------------------------------------*\
l_tax_dist_rec.application_id := l_tax_line.application_id
;
l_tax_dist_rec.entity_code := l_tax_line.entity_code
;
l_tax_dist_rec.event_class_code := l_tax_line.event_class_code
;
l_tax_dist_rec.event_type_code := l_tax_line.event_type_code
;
l_tax_dist_rec.tax_event_class_code :=
l_tax_line.tax_event_class_code ;
l_tax_dist_rec.tax_event_type_code :=
l_tax_line.tax_event_type_code ;
l_tax_dist_rec.trx_id := l_tax_line.trx_id
;
l_tax_dist_rec.trx_line_id := l_tax_line.trx_line_id
;
l_tax_dist_rec.trx_line_number := l_tax_line.trx_line_number
;
l_tax_dist_rec.tax_line_id := l_tax_line.tax_line_id
;
l_tax_dist_rec.tax_line_number := l_tax_line.tax_line_num
;
l_tax_dist_rec.trx_line_dist_id := ln_trx_dist_id
;
l_tax_dist_rec.tax_regime_id := l_tax_line.tax_regime_id
;
l_tax_dist_rec.tax_regime_code := l_tax_line.tax_regime_code
;
l_tax_dist_rec.tax_rate_id := l_tax_line.tax_rate_id
;
l_tax_dist_rec.tax_rate_code := l_tax_line.tax_rate_code
;
l_tax_dist_rec.gl_date := l_trx_dist_rec.GL_DATE
;
l_tax_dist_rec.inclusive_flag := l_tax_line.inclusive_flag
;
l_tax_dist_rec.recoverable_flag := l_tax_line.recoverable_flag
;
l_tax_dist_rec.reverse_flag := 'N'
;
l_tax_dist_rec.self_assessed_flag :=
l_tax_line.self_assessed_flag ;
l_tax_dist_rec.reversed_tax_dist_id := NULL
;
l_tax_dist_rec.tax_amt_trx_curr :=
nvl(l_tax_line.rounded_tax_amt_trx_curr, 0) ;
l_tax_dist_rec.tax_amt_tax_curr :=
nvl(l_tax_line.rounded_tax_amt_tax_curr, 0) ;
l_tax_dist_rec.tax_amt_funcl_curr :=
nvl(l_tax_line.rounded_tax_amt_fun_curr, 0) ;
l_tax_dist_rec.trx_currency_code :=
l_tax_line.trx_currency_code ;
l_tax_dist_rec.currency_conversion_date :=
l_tax_line.currency_conversion_date ;
l_tax_dist_rec.currency_conversion_type :=
l_tax_line.currency_conversion_type ;
l_tax_dist_rec.currency_conversion_rate :=
l_tax_line.currency_conversion_rate ;
l_tax_dist_rec.tax_currency_code :=
l_tax_line.tax_currency_code ;
l_tax_dist_rec.tax_currency_conversion_date :=
l_tax_line.tax_currency_conversion_date ;
l_tax_dist_rec.tax_currency_conversion_type :=
l_tax_line.tax_currency_conversion_type ;
l_tax_dist_rec.tax_currency_conversion_rate :=
l_tax_line.tax_currency_conversion_rate ;

IF ( G_LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||lv_api_name,G_PKG_NAME||':
'||lv_api_name||': Insert JAI_REC_NREC_DIST.');
END IF;
-- insert jai distribution lines
jai_insert_jai_tax_dist(l_tax_dist_rec);*/
/*\* --------------------------------------------------------
|3. Populate into repository |
----------------------------------------------------------*\
l_reco_lines_rec.claim_schedule_id := jai_rgm_recovery_lines_s.nextval;
l_reco_lines_rec.org_id := l_tax_line.org_id;
l_reco_lines_rec.organization_id := l_tax_line.organization_id;
l_reco_lines_rec.location_id := l_tax_line.location_id;
l_reco_lines_rec.regime_id := l_tax_line.tax_regime_id;

--set document type info


l_reco_lines_rec.application_id := l_tax_line.application_id
;
l_reco_lines_rec.entity_code := l_tax_line.entity_code
;
l_reco_lines_rec.event_class_code :=
l_tax_line.event_class_code ;
l_reco_lines_rec.event_type_code :=
l_tax_line.event_type_code ;
l_reco_lines_rec.tax_event_class_code :=
l_tax_line.tax_event_class_code ;
l_reco_lines_rec.tax_event_type_code :=
l_tax_line.tax_event_type_code ;

--set document info


l_reco_lines_rec.document_id := l_tax_line.trx_id;
l_reco_lines_rec.document_number := l_tax_line.trx_number;
l_reco_lines_rec.document_date := l_tax_line.trx_date;
l_reco_lines_rec.party_id := l_tax_line.party_id;
l_reco_lines_rec.party_site_id := l_tax_line.party_site_id;
l_reco_lines_rec.document_line_id := l_tax_line.trx_line_id;
l_reco_lines_rec.document_line_num := l_tax_line.trx_line_number;
l_reco_lines_rec.inventory_item_id := l_tax_line.item_id;
OPEN c_item_class;
FETCH c_item_class INTO l_reco_lines_rec.item_class;
CLOSE c_item_class;
l_reco_lines_rec.tax_type_id := l_tax_line.tax_type_id;
l_reco_lines_rec.tax_rate_id := l_tax_line.tax_rate_id;
l_reco_lines_rec.tax_line_id := l_tax_line.tax_line_id;
l_reco_lines_rec.registration_number := l_tax_line.FIRST_PARTY_PRIMARY_REG_NUM
;

l_reco_lines_rec.liability_amount := l_tax_line.ROUNDED_TAX_AMT_FUN_CURR ;
--init status info
l_reco_lines_rec.status := 'TO_BE_CONFIRMED';--
G_CLAIM_STATUS_NOTCLAIMED;
l_reco_lines_rec.process_action := NULL;
l_reco_lines_rec.event_date := SYSDATE;

l_reco_lines_rec.processed_date := l_trx_dist_rec.GL_DATE;
--set who columns
l_reco_lines_rec.creation_date := SYSDATE;
l_reco_lines_rec.created_by := fnd_global.user_id;
l_reco_lines_rec.last_update_date := SYSDATE;
l_reco_lines_rec.last_updated_by := fnd_global.user_id;
l_reco_lines_rec.last_update_login := fnd_global.login_id;
l_reco_lines_rec.object_version_number := 1;
l_reco_lines_rec.record_type_code := 'DEFINED';

JAI_RGM_RECOVERY_PKG.insert_recovery_lines( l_reco_lines_rec,
pv_process_status,
pv_process_message);
IF pv_process_status = jai_constants.successful THEN
pv_process_status := FND_API.G_RET_STS_SUCCESS;
END IF;*/

IF (G_LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_STATEMENT
,G_MODULE_NAME || lv_api_name
,G_PKG_NAME || ': ' || lv_api_name || ': Insert
jai_rgm_recovery_lines.');
END IF;
/* --------------------------------------------------------
|4. Balance the amount for Inclusive/Exclusive separately |
| Insert Minus line Item Revenue for inclusive tax |
| Update Receivable amount for exclusive tax |
----------------------------------------------------------*/
IF nvl(pr_tax_line.inclusive_flag
,'N') = 'Y' THEN

/* ------------------------- 4.1 Transaction line for Item Revenue


----------------------------*/
l_trx_line_rec.extended_amount := -nvl(l_tax_line.rounded_tax_amt_trx_curr
,0);
l_trx_line_rec.taxable_amount :=
-nvl(l_tax_line.rounded_taxable_amt_trx_curr
,0);
l_trx_line_rec.last_update_date := SYSDATE;
l_trx_line_rec.last_updated_by := fnd_global.user_id;
l_trx_line_rec.created_by := fnd_global.user_id;
l_trx_line_rec.creation_date := SYSDATE;
l_trx_line_rec.last_update_login := fnd_global.login_id;

OPEN c_trx_line_num;
FETCH c_trx_line_num
INTO l_trx_line_rec.line_number;
CLOSE c_trx_line_num;

IF (G_LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_STATEMENT
,G_MODULE_NAME || lv_api_name
,G_PKG_NAME || ': ' || lv_api_name || ': Insert
RA_CUSTOMER_TRX_LINES_ALL for Item Revenue.');
END IF;
-- insert trx line
jai_insert_ra_trx_lines(p_ra_trx_line_rec => l_trx_line_rec
,p_seq => ln_trx_line_id);

IF (G_LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_STATEMENT
,G_MODULE_NAME || lv_api_name
,'TRX_LINE_ID : ' || ln_trx_line_id);
END IF;

/* ------------------------- 4.2 Distribution line for Item Revenue


----------------------------*/
OPEN c_rev_ccid;
FETCH c_rev_ccid
INTO ln_rev_ccid;
CLOSE c_rev_ccid;

l_trx_dist_rec.customer_trx_line_id := ln_trx_line_id;
l_trx_dist_rec.account_class := lv_account_class_rev;
l_trx_dist_rec.acctd_amount :=
-nvl(l_tax_line.rounded_tax_amt_fun_curr
,0);
l_trx_dist_rec.amount :=
-nvl(l_tax_line.rounded_tax_amt_trx_curr
,0);
l_trx_dist_rec.code_combination_id := ln_rev_ccid;
l_trx_dist_rec.last_update_date := SYSDATE;
l_trx_dist_rec.last_updated_by := fnd_global.user_id;
l_trx_dist_rec.created_by := fnd_global.user_id;
l_trx_dist_rec.creation_date := SYSDATE;
l_trx_dist_rec.last_update_login := fnd_global.login_id;

IF (G_LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_STATEMENT
,G_MODULE_NAME || lv_api_name
,G_PKG_NAME || ': ' || lv_api_name || ': Insert
RA_CUST_TRX_LINE_GL_DIST_ALL for Item Revenue.');
END IF;
-- insert transaction distributions
jai_insert_ra_trx_line_gl_dist(p_ra_cust_trx_dist_rec => l_trx_dist_rec
,p_seq_id => ln_trx_dist_id);
IF (G_LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_STATEMENT
,G_MODULE_NAME || lv_api_name
,'CUST_TRX_LINE_GL_DIST_ID : ' || ln_trx_dist_id);
END IF;

END IF;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name || '.END'
,G_PKG_NAME || ': ' || lv_api_name || '()-' || ' RETURN_CODE =
' || pv_process_status);
END IF;
EXCEPTION
WHEN OTHERS THEN
pv_process_status := jai_constants.unexpected_error;
pv_process_message := 'Encountered an error in
JAI_TAX_DETERMINATION_PKG.jai_populate_tax_dist_ar. ' ||
substr(SQLERRM
,1
,1900);

IF (G_LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_UNEXPECTED
,G_MODULE_NAME || lv_api_name
,SQLERRM);
END IF;
END jai_populate_tax_dist_ar;

PROCEDURE jai_insert_ra_trx_line_gl_dist(p_ra_cust_trx_dist_rec
ra_cust_trx_line_gl_dist_all%ROWTYPE
--Modified by Junjian for AP tax flow
,p_seq_id OUT NOCOPY NUMBER) IS
CURSOR c_proc_exists
(
cp_object_name user_procedures.object_name%TYPE
,cp_procedure_name user_procedures.procedure_name%TYPE
) IS
SELECT 1
FROM user_procedures
WHERE object_name = cp_object_name
AND procedure_name = cp_procedure_name;

CURSOR cur_gl_seq IS
SELECT ra_cust_trx_line_gl_dist_s.nextval
FROM dual;

lv_object_name user_procedures.object_name%TYPE;
lv_procedure_name user_procedures.procedure_name%TYPE;
ln_exists NUMBER := 0;
lv_sqlstmt VARCHAR2(2000);

ln_cust_trx_line_gl_dist_id
ra_cust_trx_line_gl_dist_all.cust_trx_line_gl_dist_id%TYPE;
lv_api_name CONSTANT VARCHAR2(50) := 'jai_insert_ra_trx_line_gl_dist';
BEGIN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----Begin----' || '()+');
END IF;

--get the value for cust_trx_line_gl_dist_id


OPEN cur_gl_seq;
FETCH cur_gl_seq
INTO ln_cust_trx_line_gl_dist_id;
CLOSE cur_gl_seq;

INSERT INTO ra_cust_trx_line_gl_dist_all


(request_id
-- added by zhiwei.xin for AR Open Interface
,account_class
,account_set_flag
,acctd_amount
,amount
,code_combination_id
,cust_trx_line_gl_dist_id
,cust_trx_line_salesrep_id
,customer_trx_id
,customer_trx_line_id
,gl_date
,last_update_date
,last_updated_by
,creation_date
,created_by
,last_update_login
,org_id
,percent
,posting_control_id
,set_of_books_id
,event_id
,comments)
VALUES
(p_ra_cust_trx_dist_rec.request_id
-- added by zhiwei.xin for AR Open Interface
,p_ra_cust_trx_dist_rec.account_class
,p_ra_cust_trx_dist_rec.account_set_flag
,p_ra_cust_trx_dist_rec.acctd_amount
,p_ra_cust_trx_dist_rec.amount
,p_ra_cust_trx_dist_rec.code_combination_id
,ln_cust_trx_line_gl_dist_id
,p_ra_cust_trx_dist_rec.cust_trx_line_salesrep_id
,p_ra_cust_trx_dist_rec.customer_trx_id
,p_ra_cust_trx_dist_rec.customer_trx_line_id
,p_ra_cust_trx_dist_rec.gl_date
,p_ra_cust_trx_dist_rec.last_update_date
,p_ra_cust_trx_dist_rec.last_updated_by
,p_ra_cust_trx_dist_rec.creation_date
,p_ra_cust_trx_dist_rec.created_by
,p_ra_cust_trx_dist_rec.last_update_login
,p_ra_cust_trx_dist_rec.org_id
,p_ra_cust_trx_dist_rec.percent
,p_ra_cust_trx_dist_rec.posting_control_id
,p_ra_cust_trx_dist_rec.set_of_books_id
,p_ra_cust_trx_dist_rec.event_id
,p_ra_cust_trx_dist_rec.comments);
/* Ramananda for bug#5219225. START */
/*26513387
lv_object_name := 'AR_MRC_ENGINE' ;
lv_procedure_name := 'MAINTAIN_MRC_DATA' ;

p_seq_id := ln_cust_trx_line_gl_dist_id ;
OPEN c_proc_exists(lv_object_name, lv_procedure_name) ;
FETCH c_proc_exists INTO ln_exists ;
CLOSE c_proc_exists ;
IF ln_exists = 1 THEN

lv_sqlstmt := 'BEGIN ar_mrc_engine.maintain_mrc_data(


p_event_mode => ''INSERT'',
p_table_name =>
''RA_CUST_TRX_LINE_GL_DIST'',
p_mode => ''SINGLE'',
p_key_value => :1
);
END; ';
EXECUTE IMMEDIATE lv_sqlstmt USING ln_cust_trx_line_gl_dist_id ;
END IF ;
/* Ramananda for bug#5219225. END */

EXCEPTION
WHEN OTHERS THEN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,SQLERRM);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
app_exception.raise_exception;
END jai_insert_ra_trx_line_gl_dist; --Modified by Junjian for AP tax flow
PROCEDURE jai_insert_ra_trx_lines(p_ra_trx_line_rec IN ra_customer_trx_lines_all
%ROWTYPE
--Modified by Junjian for AP tax flow
,p_seq OUT NOCOPY NUMBER) IS
CURSOR c_ra_trx_line_id IS
SELECT ra_customer_trx_lines_s.nextval
FROM dual;

lv_api_name CONSTANT VARCHAR2(50) := 'jai_insert_ra_trx_lines';


ln_customer_trx_line_id NUMBER;
BEGIN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----Begin----' || '()+');
END IF;
OPEN c_ra_trx_line_id;
FETCH c_ra_trx_line_id
INTO ln_customer_trx_line_id;
CLOSE c_ra_trx_line_id;
INSERT INTO ra_customer_trx_lines_all
(request_id
-- added by zhiwei.xin for AR Open Interface
,extended_amount
,taxable_amount
,customer_trx_line_id
,last_update_date
,last_updated_by
,creation_date
,created_by
,last_update_login
,customer_trx_id
,line_number
,set_of_books_id
,link_to_cust_trx_line_id
,line_type
,org_id
,uom_code
,autotax
,vat_tax_id
,interface_line_context
,interface_line_attribute6
,interface_line_attribute3
,previous_customer_trx_id -- bug#26529891 chris 20170726
,previous_customer_trx_line_id -- bug#26529891 chris 20170726
)
VALUES
(p_ra_trx_line_rec.request_id
-- added by zhiwei.xin for AR Open Interface
,p_ra_trx_line_rec.extended_amount
,p_ra_trx_line_rec.taxable_amount
,ln_customer_trx_line_id
,p_ra_trx_line_rec.last_update_date
,p_ra_trx_line_rec.last_updated_by
,p_ra_trx_line_rec.creation_date
,p_ra_trx_line_rec.created_by
,p_ra_trx_line_rec.last_update_login
,p_ra_trx_line_rec.customer_trx_id
,p_ra_trx_line_rec.line_number
,p_ra_trx_line_rec.set_of_books_id
,p_ra_trx_line_rec.link_to_cust_trx_line_id
,p_ra_trx_line_rec.line_type
,p_ra_trx_line_rec.org_id
,p_ra_trx_line_rec.uom_code
,p_ra_trx_line_rec.autotax
,p_ra_trx_line_rec.vat_tax_id
,p_ra_trx_line_rec.interface_line_context
,p_ra_trx_line_rec.interface_line_attribute6
,p_ra_trx_line_rec.interface_line_attribute3
,p_ra_trx_line_rec.previous_customer_trx_id -- bug#26529891 chris 20170726
,p_ra_trx_line_rec.previous_customer_trx_line_id -- bug#26529891 chris
20170726
);
p_seq := ln_customer_trx_line_id;
EXCEPTION
WHEN OTHERS THEN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,SQLERRM);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
app_exception.raise_exception;
END jai_insert_ra_trx_lines; --Modified by Junjian for AP tax flow

--Added by Junjian for AP tax flow begin


PROCEDURE jai_delete_tax_dist
(
pr_tax_line jai_tax_lines%ROWTYPE
,pv_process_status OUT NOCOPY VARCHAR2
,pv_process_message OUT NOCOPY VARCHAR2
) IS
lv_api_name CONSTANT VARCHAR2(50) := 'jai_delete_tax_dist';
lv_misc ap_invoice_distributions_all.line_type_lookup_code%TYPE :=
'MISCELLANEOUS';

BEGIN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----Begin----' || '()+');
END IF;
pv_process_status := FND_API.G_RET_STS_SUCCESS;

/*DELETE ap_invoice_distributions_all invoice_dist


WHERE invoice_id = pr_tax_line.trx_id
AND line_type_lookup_code = lv_misc
AND EXISTS
(SELECT 1 FROM jai_rec_nrec_dist tax_dist
WHERE tax_dist.tax_dist_id = invoice_dist.invoice_distribution_id
AND tax_dist.trx_line_number = pr_tax_line.trx_line_number
AND tax_dist.source_tax_line_num = invoice_dist.invoice_line_number
AND tax_dist.tax_line_id = pr_tax_line.tax_line_id
AND tax_dist.application_id = 200
AND tax_dist.entity_code = 'AP_INVOICES'
AND trx_id = pr_tax_line.trx_id);*/ --Commented by Zhhou for bug#20288500
on 20150106

--Added by Zhhou for bug#20288500 on 20150106 begin

DELETE ap_invoice_distributions_all invoice_dist


WHERE invoice_id = pr_tax_line.trx_id
AND line_type_lookup_code = lv_misc
/* Bug#27479551, dejiang.liu/20180310. Add logic to not delete line with
distribution has been posted. */
AND NOT EXISTS (SELECT 'Invoice line has distribution posted'
FROM ap_invoice_distributions_all dist_ref
WHERE dist_ref.posted_flag = 'Y'
AND dist_ref.invoice_id = invoice_dist.invoice_id
AND dist_ref.invoice_line_number =
invoice_dist.invoice_line_number)

AND EXISTS (SELECT 1


FROM ap_invoice_lines_all inv_line
,jai_tax_lines tax_line
WHERE inv_line.invoice_id = tax_line.trx_id
AND inv_line.invoice_id = invoice_dist.invoice_id
AND inv_line.line_number = invoice_dist.invoice_line_number
AND to_number(inv_line.reference_1) = tax_line.trx_line_id
AND to_number(inv_line.reference_2) = tax_line.tax_line_id
AND tax_line.det_factor_id = pr_tax_line.det_factor_id
AND tax_line.tax_line_id = pr_tax_line.tax_line_id
AND tax_line.entity_code = 'AP_INVOICES');

--Added by Zhhou for bug#20288500 on 20150106 end

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'.Delete from ap_invoice_distributions_all, ' || SQL%ROWCOUNT
|| ' ROWS DELETED ');
END IF; --( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL)

/*DELETE ap_invoice_lines_all invoice_line


WHERE invoice_id = pr_tax_line.trx_id
AND line_type_lookup_code = lv_misc
AND EXISTS
(SELECT 1 FROM jai_rec_nrec_dist tax_dist
WHERE tax_dist.trx_id = pr_tax_line.trx_id
AND tax_dist.trx_line_number = pr_tax_line.trx_line_number
AND tax_dist.tax_line_id = pr_tax_line.tax_line_id
AND tax_dist.application_id = 200
AND tax_dist.entity_code = 'AP_INVOICES'
AND tax_dist.source_tax_line_num = invoice_line.line_number);*/
--Commented by Zhhou for bug#20288500 on 20150106

--Added by Zhhou for bug#20288500 on 20150106 begin

DELETE ap_invoice_lines_all invoice_line


WHERE invoice_id = pr_tax_line.trx_id
AND line_type_lookup_code = lv_misc
/* Bug#27479551, dejiang.liu/20180310. Add logic to not delete line with
distribution has been posted. */
AND NOT EXISTS (SELECT 'Invoice line has distribution posted'
FROM ap_invoice_distributions_all dist_ref
WHERE dist_ref.posted_flag = 'Y'
AND dist_ref.invoice_id = invoice_line.invoice_id
AND dist_ref.invoice_line_number =
invoice_line.line_number)

AND EXISTS (SELECT 1


FROM jai_tax_lines tax_line
WHERE tax_line.trx_id = invoice_line.invoice_id
AND tax_line.trx_line_id = to_number(invoice_line.reference_1)
AND tax_line.tax_line_id = to_number(invoice_line.reference_2)
AND tax_line.trx_line_number = pr_tax_line.trx_line_number
AND tax_line.tax_line_id = pr_tax_line.tax_line_id
AND tax_line.application_id = 200
AND tax_line.entity_code = 'AP_INVOICES');

--Added by Zhhou for bug#20288500 on 20150106 end

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'.Delete from ap_invoice_lines_all, ' || SQL%ROWCOUNT || '
ROWS DELETED ');
END IF; --( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL)

DELETE jai_rec_nrec_dist tax_dist


WHERE tax_dist.trx_line_number = pr_tax_line.trx_line_number
AND tax_dist.tax_rate_id = pr_tax_line.tax_rate_id
AND tax_dist.tax_line_id = pr_tax_line.tax_line_id
AND tax_dist.application_id = 200
AND tax_dist.entity_code = 'AP_INVOICES'
AND tax_dist.trx_id = pr_tax_line.trx_id
/* Bug#27479551, dejiang.liu/20180310. Add logic to not delete line with
distribution has been posted. */
AND NOT EXISTS (SELECT 'Invoice line has distribution posted'
FROM ap_invoice_distributions_all dist_ref
WHERE dist_ref.posted_flag = 'Y'
AND dist_ref.invoice_id = tax_dist.trx_id
AND dist_ref.invoice_line_number =
tax_dist.source_tax_line_num);

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'.Delete from jai_rec_nrec_dist, ' || SQL%ROWCOUNT || ' ROWS
DELETED ');
END IF; --( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL)

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
EXCEPTION
WHEN OTHERS THEN
pv_process_status := FND_API.G_RET_STS_UNEXP_ERROR;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,SQLERRM);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
END jai_delete_tax_dist;
--Added by Junjian for AP tax flow end

-----------------------------------------------------------------------
-- PUBLIC PROCEDURE
-- jai_udpate_rec_dist
--
-- DESCRIPTION
-- update receivable distribution line for AR
--
-- CALLED BY
-- determine_tax
-----------------------------------------------------------------------
PROCEDURE jai_update_tax_dist
(
p_det_factor_id IN NUMBER DEFAULT NULL
,p_trx_id IN NUMBER
,p_application_id IN NUMBER
,p_entity_code IN VARCHAR2
,p_event_class_code IN VARCHAR2
,p_tax_lines_tbl IN tax_lines_tbl
,x_process_status OUT NOCOPY VARCHAR2
,x_process_message OUT NOCOPY VARCHAR2
) IS

lv_api_name CONSTANT VARCHAR2(50) := 'jai_update_tax_dist';


lv_account_class_rec CONSTANT VARCHAR2(10) := 'REC';
lv_account_class_tax CONSTANT VARCHAR2(10) := 'TAX';
lv_account_class_freight CONSTANT VARCHAR2(10) := 'FREIGHT';
lv_line_type_line CONSTANT VARCHAR2(10) := 'LINE';
ln_det_factor_id NUMBER;
ln_trx_id NUMBER;
ln_application_id NUMBER;
lv_entity_code jai_tax_det_factors.entity_code%TYPE;
lv_event_class_code jai_tax_det_factors.event_class_code%TYPE;
l_tax_lines_tbl tax_lines_tbl;
ln_line_amount NUMBER;
ln_precision NUMBER;
ln_exchange_rate NUMBER;
ln_set_of_books_id NUMBER;
ln_tax_amount NUMBER := 0;
ln_tax_acctd_amount NUMBER := 0;
lv_object_name user_procedures.object_name%TYPE;
lv_procedure_name user_procedures.procedure_name%TYPE;
ln_exists NUMBER := 0;
lv_sqlstmt VARCHAR2(2000);

ln_cust_trx_line_gl_dist_id
ra_cust_trx_line_gl_dist_all.cust_trx_line_gl_dist_id%TYPE;

-- cursor to fetch det factor details


CURSOR c_det_factor(cp_det_factor_id NUMBER) IS
SELECT trx_id
,application_id
,entity_code
,event_class_code
FROM jai_tax_det_factors
WHERE det_factor_id = cp_det_factor_id;

-- cursor to fetch receivable amount


CURSOR c_trx_lines_amount(cp_trx_id NUMBER) IS
SELECT nvl(SUM(extended_amount)
,0) extended_amount
FROM ra_customer_trx_lines_all
WHERE customer_trx_id = cp_trx_id
AND line_type = lv_line_type_line;

-- cursor to fetch distribtution amount


CURSOR c_trx_dists_amount
(
cp_trx_id NUMBER
,cp_det_factor_id NUMBER
) IS
SELECT nvl(SUM(rounded_tax_amt_trx_curr)
,0) amount
,nvl(SUM(rounded_tax_amt_fun_curr)
,0) acctd_amount
FROM jai_tax_lines
WHERE trx_id = cp_trx_id
AND det_factor_id <> nvl(cp_det_factor_id
,-1)
AND nvl(inclusive_flag
,'N') = 'N';

-- cursor to fetch transaction info


CURSOR c_customer_trx(cp_trx_id NUMBER) IS
SELECT set_of_books_id
,nvl(exchange_rate
,1) exchange_rate
FROM ra_customer_trx_all
WHERE customer_trx_id = cp_trx_id;

-- cursor to fetch precision


CURSOR c_curr_precision(cp_set_of_books_id gl_sets_of_books.set_of_books_id
%TYPE) IS
SELECT nvl(minimum_accountable_unit
,nvl(PRECISION
,2))
FROM fnd_currencies
WHERE currency_code IN (SELECT currency_code
FROM gl_sets_of_books
WHERE set_of_books_id = cp_set_of_books_id);
CURSOR c_proc_exists
(
cp_object_name user_procedures.object_name%TYPE
,cp_procedure_name user_procedures.procedure_name%TYPE
) IS
SELECT 1
FROM user_procedures
WHERE object_name = cp_object_name
AND procedure_name = cp_procedure_name;

-- cursor to fetch distribution id


CURSOR c_gl_dist_cur(cp_trx_id NUMBER) IS
SELECT cust_trx_line_gl_dist_id
FROM ra_cust_trx_line_gl_dist_all
WHERE customer_trx_id = cp_trx_id
AND account_class = lv_account_class_rec
AND latest_rec_flag = 'Y';

BEGIN
/* It can be handled by base program, so ignore the processing this time */
RETURN; -- added by zhiwei.xin for AR Open Interface
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name || '.BEGIN'
,G_PKG_NAME || ': ' || lv_api_name || '()+');
END IF;

x_process_status := FND_API.G_RET_STS_SUCCESS;
ln_det_factor_id := p_det_factor_id;
ln_trx_id := p_trx_id;
ln_application_id := p_application_id;
lv_entity_code := p_entity_code;
lv_event_class_code := p_event_class_code;
l_tax_lines_tbl := p_tax_lines_tbl;

IF (G_LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_STATEMENT
,G_MODULE_NAME || lv_api_name
,'DET_FACTOR_ID : ' || ln_det_factor_id || ', TRX_ID :' ||
ln_trx_id || ', APPLICATION_ID :' ||
ln_application_id || ', ENTITY_CODE :' || lv_entity_code || ',
EVENT_CLASS_CODE :' ||
lv_event_class_code);
END IF;

IF ln_application_id = 222
AND lv_entity_code = 'TRANSACTIONS'
AND lv_event_class_code IN ('INVOICE'
,'CREDIT_MEMO'
,'DEBIT_MEMO') THEN
IF (G_LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_STATEMENT
,G_MODULE_NAME || lv_api_name
,G_PKG_NAME || ': ' || lv_api_name || ': Fetch transaction
lines amount.');
END IF;

OPEN c_trx_lines_amount(ln_trx_id);
FETCH c_trx_lines_amount
INTO ln_line_amount;
CLOSE c_trx_lines_amount;

IF (G_LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_STATEMENT
,G_MODULE_NAME || lv_api_name
,'EXTENED_AMOUNT : ' || ln_line_amount);
END IF;

IF (G_LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_STATEMENT
,G_MODULE_NAME || lv_api_name
,G_PKG_NAME || ': ' || lv_api_name || ': Fetch distribution
lines amount.');
END IF;

OPEN c_trx_dists_amount(ln_trx_id
,ln_det_factor_id);
FETCH c_trx_dists_amount
INTO ln_tax_amount
,ln_tax_acctd_amount;
CLOSE c_trx_dists_amount;

IF (G_LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_STATEMENT
,G_MODULE_NAME || lv_api_name
,'AMOUNT : ' || ln_tax_amount || ', ACCTD_AMOUNT :' ||
ln_tax_acctd_amount);
END IF;

IF l_tax_lines_tbl IS NOT NULL


AND l_tax_lines_tbl.count > 0 THEN
FOR i IN l_tax_lines_tbl.first .. l_tax_lines_tbl.last LOOP
IF nvl(l_tax_lines_tbl(i).inclusive_flag
,'N') = 'N' THEN
ln_tax_amount := ln_tax_amount +
nvl(l_tax_lines_tbl(i).rounded_tax_amt_trx_curr
,0);
ln_tax_acctd_amount := ln_tax_acctd_amount +
nvl(l_tax_lines_tbl(i).rounded_tax_amt_fun_curr
,0);
END IF;
END LOOP;
END IF;

IF (G_LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_STATEMENT
,G_MODULE_NAME || lv_api_name
,'AMOUNT : ' || ln_tax_amount || ', ACCTD_AMOUNT :' ||
ln_tax_acctd_amount);
END IF;

OPEN c_customer_trx(ln_trx_id);
FETCH c_customer_trx
INTO ln_set_of_books_id
,ln_exchange_rate;
CLOSE c_customer_trx;

IF (G_LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_STATEMENT
,G_MODULE_NAME || lv_api_name
,'SET_OF_BOOKS_ID : ' || ln_set_of_books_id || ',
EXCHANGE_RATE :' || ln_exchange_rate);
END IF;

OPEN c_curr_precision(ln_set_of_books_id);
FETCH c_curr_precision
INTO ln_precision;
CLOSE c_curr_precision;

IF (G_LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_STATEMENT
,G_MODULE_NAME || lv_api_name
,'PRECISION : ' || ln_precision);
END IF;

-- adjust distribution amount for exclusive tax


UPDATE ra_cust_trx_line_gl_dist_all
SET amount = ln_line_amount + ln_tax_amount
,acctd_amount = round(ln_line_amount * ln_exchange_rate +
ln_tax_acctd_amount
,ln_precision)
,last_updated_by = fnd_global.user_id
,last_update_date = SYSDATE
,last_update_login = fnd_global.user_id
WHERE customer_trx_id = ln_trx_id
AND account_class = lv_account_class_rec
AND latest_rec_flag = 'Y';
jai_cmn_utils_pkg.write_fnd_log_msg(G_MODULE_NAME || lv_api_name
,'26513387 ,commented the call to MRC');
/*

lv_object_name := 'AR_MRC_ENGINE' ;
lv_procedure_name := 'MAINTAIN_MRC_DATA' ;

OPEN c_proc_exists(lv_object_name, lv_procedure_name) ;


FETCH c_proc_exists INTO ln_exists ;
CLOSE c_proc_exists ;
IF ln_exists = 1 THEN
OPEN c_gl_dist_cur(ln_trx_id);
FETCH c_gl_dist_cur INTO ln_cust_trx_line_gl_dist_id;
CLOSE c_gl_dist_cur;

lv_sqlstmt := 'BEGIN ar_mrc_engine.maintain_mrc_data(


p_event_mode => ''UPDATE'',
p_table_name =>
''RA_CUST_TRX_LINE_GL_DIST'',
p_mode => ''SINGLE'',
p_key_value => :1
);
END; ';
EXECUTE IMMEDIATE lv_sqlstmt USING ln_cust_trx_line_gl_dist_id ;
END IF ;
*/
-- added by zhiwei.xin for Open Interface begin
IF (G_LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_STATEMENT
,G_MODULE_NAME || lv_api_name
,G_PKG_NAME || ': ' || lv_api_name || ': Update AR Payment
Schedules.');
END IF;
-- update AR Payment Schedules
UPDATE ar_payment_schedules_all
SET tax_original = nvl(ln_tax_amount
,0)
,tax_remaining = nvl(ln_tax_amount
,0)
,amount_due_original = nvl(ln_line_amount + ln_tax_amount
,0)
,amount_due_remaining = nvl(ln_line_amount + ln_tax_amount
,0)
,acctd_amount_due_remaining = nvl(round(ln_line_amount *
ln_exchange_rate + ln_tax_acctd_amount
,ln_precision)
,0)
WHERE customer_trx_id = ln_trx_id;
-- added by zhiwei.xin for Open Interface end.

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name || '.END'
,G_PKG_NAME || ': ' || lv_api_name || '()-' || ' RETURN_CODE
= ' || x_process_status);
END IF;
END IF;

EXCEPTION
WHEN OTHERS THEN
x_process_status := jai_constants.unexpected_error;
x_process_message := 'Encountered an error in
JAI_TAX_DETERMINATION_PKG.jai_update_tax_dist. ' ||
substr(SQLERRM
,1
,1900);

IF (G_LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_UNEXPECTED
,G_MODULE_NAME || lv_api_name
,SQLERRM);
END IF;
END jai_update_tax_dist;

PROCEDURE determine_recovery
(
pn_rounded_tax_amt_fun_curr IN NUMBER
,pn_recovery_percentage IN NUMBER
,pn_tax_regime_id IN NUMBER
,pn_tax_type_id IN NUMBER
,pn_org_id IN NUMBER --Added by Junjian for adding OU level
,pn_organization_id IN NUMBER
,pn_location_id IN NUMBER
,pv_intended_use IN VARCHAR2
,pv_item_class IN VARCHAR2
,pn_item_id IN NUMBER
,pv_registration_num IN VARCHAR2
,pn_rec_tax_amt_funcl_curr OUT NOCOPY NUMBER
,pn_nrec_tax_amt_funcl_curr OUT NOCOPY NUMBER
,pv_process_status OUT NOCOPY VARCHAR2
,pv_process_message OUT NOCOPY VARCHAR2
) IS
CURSOR c_eligible_for_claim IS
SELECT 'Y'
FROM jai_rgm_term_assigns jrta
,jai_rgm_terms jrt
WHERE jrt.term_id = jrta.term_id
AND jrt.regime_id = pn_tax_regime_id
AND jrt.term_usage = 'CLAIM'
AND nvl(jrta.tax_type_id
,pn_tax_type_id) = pn_tax_type_id
AND nvl(jrta.organization_id
,nvl(pn_organization_id
,pn_org_id)) = nvl(pn_organization_id
,pn_org_id) --Modified by Jujian on 10-01-
2014
AND nvl(jrta.location_id
,nvl(pn_location_id
,-1)) = nvl(pn_location_id
,-1) --Modified by Junjian on 10-01-2014
AND nvl(jrta.regime_item_class
,nvl(pv_item_class
,'X')) = nvl(pv_item_class
,'X')
AND nvl(jrta.intended_use
,nvl(pv_intended_use
,'X')) = nvl(pv_intended_use
,'X')
AND nvl(jrta.regime_regno
,nvl(pv_registration_num
,'X')) = nvl(pv_registration_num
,'X')
AND nvl(jrta.start_date
,SYSDATE - 1) <= SYSDATE
AND nvl(jrta.end_date
,SYSDATE + 1) >= SYSDATE;

lv_eligible_for_claim VARCHAR2(1);
lv_item_recoverable_flag VARCHAR2(1);
lv_process_flag VARCHAR2(30);
lv_process_msg VARCHAR2(150);
lv_api_name CONSTANT VARCHAR2(50) := 'determine_recovery';
BEGIN

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----Begin----' || '()+');
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'In put parameter: pn_rounded_tax_amt_fun_curr is ' ||
pn_rounded_tax_amt_fun_curr ||
',pn_recovery_percentage is ' || pn_recovery_percentage ||
',pn_tax_regime_id is ' ||
pn_tax_regime_id || ',pn_tax_type_id is ' || pn_tax_type_id ||
',pn_org_id is ' || pn_org_id || --Added by Junjian on 10-01-2014
',pn_organization_id is ' || pn_organization_id ||
',pn_location_id is ' || pn_location_id ||
',pv_intended_use is ' || pv_intended_use || ',pv_item_class
is ' || pv_item_class ||
',pn_item_id is ' || pn_item_id || ',pv_registration_num is '
|| pv_registration_num);
END IF;
pv_process_status := FND_API.G_RET_STS_SUCCESS;

OPEN c_eligible_for_claim;
FETCH c_eligible_for_claim
INTO lv_eligible_for_claim;
CLOSE c_eligible_for_claim;

IF nvl(pn_item_id
,0) > 0 THEN
jai_item_classification_pkg.jai_get_attrib(p_regime_id =>
pn_tax_regime_id
,p_organization_id =>
pn_organization_id
,p_inventory_item_id => pn_item_id
,p_attribute_code =>
'RECOVERABLE'
,p_attribute_value =>
lv_item_recoverable_flag
,p_process_flag =>
lv_process_flag
,p_process_msg =>
lv_process_msg);
IF lv_process_flag <> jai_constants.successful THEN
--FND_API.G_RET_STS_SUCCESS THEN
-- pv_process_status := lv_process_flag;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'call jai_get_attrib, return status:' ||
pv_process_status || ' msg :' || lv_process_msg);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
-- RETURN;
END IF;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'lv_item_recoverable_flag is ' || lv_item_recoverable_flag);
END IF;
END IF;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'lv_eligible_for_claim is ' || lv_eligible_for_claim);
END IF;

IF nvl(pn_recovery_percentage
,0) > 0
AND (nvl(lv_item_recoverable_flag
,'N') = 'Y' OR nvl(pn_item_id
,0) = 0)
AND lv_eligible_for_claim = 'Y' THEN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'calculate recovery amt and non recovery amt.
');
END IF;
pn_rec_tax_amt_funcl_curr := pn_rounded_tax_amt_fun_curr *
(nvl(pn_recovery_percentage
,0) / 100);
pn_nrec_tax_amt_funcl_curr := pn_rounded_tax_amt_fun_curr * ((100 -
nvl(pn_recovery_percentage
,0)) /
100);
IF pn_rounded_tax_amt_fun_curr = 0 THEN
pn_rec_tax_amt_funcl_curr := -1;
END IF;
ELSE
pn_rec_tax_amt_funcl_curr := 0;
pn_nrec_tax_amt_funcl_curr := pn_rounded_tax_amt_fun_curr; --Modidied by
Junjian on 2013.12.16
END IF; --calculated recoverable /non-recoverable tax amount
EXCEPTION
WHEN OTHERS THEN
pv_process_status := jai_constants.unexpected_error;
pv_process_message := 'Encountered an error in JAI_TAX_DETERMINATION_PKG.' ||
lv_api_name ||
substr(SQLERRM
,1
,1900);

IF (G_LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_UNEXPECTED
,G_MODULE_NAME || lv_api_name
,SQLERRM);
END IF;
END determine_recovery;

PROCEDURE change_intended_use
(
pn_tax_det_factor_id IN NUMBER
,pv_intended_use IN VARCHAR2
,pv_call_from IN VARCHAR2 DEFAULT NULL --Added by Wenqiong for intended
use change at Delivery
,pv_process_status OUT NOCOPY VARCHAR2
,pv_process_message OUT NOCOPY VARCHAR2
) IS
CURSOR c_det_factor IS
SELECT item_classification
--Added by Junjian for bug#19018333 begin
,party_id
,party_site_id
--Added by Junjian for bug#19018333 end
FROM jai_tax_det_factors
WHERE det_factor_id = pn_tax_det_factor_id
--Added by Wenqiong for claim intended use change at delivery begin
AND nvl(pv_call_from
,'BASE') <> 'INTERFACE'
UNION
SELECT item_classification
--Added by Junjian for bug#19018333 begin
,party_id
,party_site_id
--Added by Junjian for bug#19018333 end
FROM jai_det_factors_interface
WHERE interface_det_factor_id = pn_tax_det_factor_id
AND nvl(pv_call_from
,'BASE') = 'INTERFACE';
--Added by Wenqiong for claim intended use change at delivery end

/*CURSOR c_tax_lines IS
SELECT * \*tax_line_id,
currency_conversion_rate,
tax_currency_conversion_rate,
rounded_tax_amt_fun_curr,
recovery_percentage,
tax_regime_id,
tax_type_id,
organization_id,
location_id,
item_id,
first_party_primary_reg_num*\
FROM jai_tax_lines
WHERE det_factor_id = pn_tax_det_factor_id;*/
--Added by Wenqiong for claim intended use change at delivery begin
CURSOR c_tax_lines IS
SELECT org_id
,organization_id
,location_id
,application_id
,entity_code
,event_class_code
,event_type_code
,tax_event_class_code
,tax_event_type_code
,ledger_id
,trx_id
,trx_line_id
,trx_loc_line_id
,trx_level_type
,trx_number
,trx_line_number
,trx_type
,trx_date
,legal_entity_id
,frozen_flag
,party_type
,party_id
,party_site_id
,trx_uom
,item_id
,unit_price
,line_amt
,trx_line_quantity
,trx_currency_code
,currency_conversion_date
,currency_conversion_type
,currency_conversion_rate
,tax_currency_code
,tax_currency_conversion_date
,tax_currency_conversion_type
,tax_currency_conversion_rate
,functional_currency_code
,tax_regime_id
,tax_regime_code
,tax_regime_type
,first_party_reg_id
,first_party_primary_reg_name
,first_party_primary_reg_num
,first_party_secondary_reg_name
,first_party_secondary_reg_num
,num_of_return_days
,tax_authority_id
,tax_authority_site_id
,third_party_reg_id
,third_party_primary_reg_name
,third_party_primary_reg_num
,third_party_secondary_reg_name
,third_party_secondary_reg_num
,assessable_price_list_id
,tax_type_id
,abatement_flag
,update_vendor_on_transaction
,offset_flag
,recoverable_flag
,self_assessed_flag
,reverse_credit_on_shipment
,credit_basis_self_assessed
,reporting_only_flag
,tax_point_basis
,tax_point_date
,tax_rate_id
,tax_rate_code
,tax_rate_type
,tax_status
,recovery_percentage
,inclusive_flag
,tax_rate_percentage
,tax_rate_uom
,tax_rate_uom_rate
,tax_rate_abatement_type
,abatement_percentage
,tax_rate_classification
,standard_rate
,form_type
,actual_tax_rate
,rounding_level
,tax_rounded_to
,tax_rounding_factor
,taxable_rounded_to
,taxable_rounding_factor
,quantity_rounded_to
,quantity_rounding_factor
,unround_tax_amt_fun_curr
,rounded_tax_amt_fun_curr
,rounded_tax_amt_tax_curr
,unrounded_uom_conv_qty
,rounded_quantity
,manual_overridden_flag
,manual_tax_line_flag
,copied_from_other_doc_flag
,tax_line_num
,precedence_1
,precedence_2
,precedence_3
,precedence_4
,precedence_5
,precedence_6
,precedence_7
,precedence_8
,precedence_9
,precedence_10
,precedence_11
,precedence_12
,precedence_13
,precedence_14
,precedence_15
,precedence_16
,precedence_17
,precedence_18
,precedence_19
,precedence_20
,ref_doc_application_id
,ref_doc_entity_code
,ref_doc_event_class_code
,ref_doc_trx_id
,ref_doc_trx_type
,ref_doc_line_id
,ref_doc_loc_line_id
,ref_doc_trx_level_type
,applied_from_application_id
,applied_from_entity_code
,applied_from_event_class_code
,applied_from_trx_id
,applied_from_trx_line_id
,applied_from_trx_type
,applied_from_loc_line_id
,applied_from_trx_level_type
,applied_to_application_id
,applied_to_entity_code
,applied_to_event_class_code
,applied_to_trx_id
,applied_to_trx_line_id
,applied_to_trx_type
,applied_to_loc_line_id
,applied_to_trx_level_type
,reporting_type_id
,reporting_code
,tax_invoice_date
,tax_invoice_num
/*Added by Qinglei for bug#19560241 begin*/
,tax_line_id
,rounded_tax_amt_trx_curr
/*Added by Qinglei for bug#19560241 end*/
FROM jai_tax_lines
WHERE det_factor_id = pn_tax_det_factor_id
AND nvl(pv_call_from
,'BASE') <> 'INTERFACE'

UNION
SELECT org_id
,organization_id
,location_id
,application_id
,entity_code
,event_class_code
,event_type_code
,tax_event_class_code
,tax_event_type_code
,ledger_id
,NULL trx_id
,NULL trx_line_id
,NULL trx_loc_line_id
,NULL trx_level_type
,NULL trx_number
,NULL trx_line_number
,trx_type
,trx_date
,legal_entity_id
,frozen_flag
,party_type
,party_id
,party_site_id
,trx_uom
,item_id
,unit_price
,line_amt
,trx_line_quantity
,trx_currency_code
,currency_conversion_date
,currency_conversion_type
,currency_conversion_rate
,tax_currency_code
,tax_currency_conversion_date
,tax_currency_conversion_type
,tax_currency_conversion_rate
,functional_currency_code
,tax_regime_id
,tax_regime_code
,tax_regime_type
,first_party_reg_id
,first_party_primary_reg_name
,first_party_primary_reg_num
,first_party_secondary_reg_name
,first_party_secondary_reg_num
,num_of_return_days
,tax_authority_id
,tax_authority_site_id
,third_party_reg_id
,third_party_primary_reg_name
,third_party_primary_reg_num
,third_party_secondary_reg_name
,third_party_secondary_reg_num
,assessable_price_list_id
,tax_type_id
,abatement_flag
,update_vendor_on_transaction
,offset_flag
,recoverable_flag
,self_assessed_flag
,reverse_credit_on_shipment
,credit_basis_self_assessed
,reporting_only_flag
,tax_point_basis
,tax_point_date
,tax_rate_id
,tax_rate_code
,tax_rate_type
,tax_status
,recovery_percentage
,inclusive_flag
,tax_rate_percentage
,tax_rate_uom
,tax_rate_uom_rate
,tax_rate_abatement_type
,abatement_percentage
,tax_rate_classification
,standard_rate
,form_type
,actual_tax_rate
,rounding_level
,tax_rounded_to
,tax_rounding_factor
,taxable_rounded_to
,taxable_rounding_factor
,quantity_rounded_to
,quantity_rounding_factor
,unround_tax_amt_fun_curr
,rounded_tax_amt_fun_curr
,rounded_tax_amt_tax_curr
,unrounded_uom_conv_qty
,rounded_quantity
,manual_overridden_flag
,manual_tax_line_flag
,copied_from_other_doc_flag
,tax_line_num
,precedence_1
,precedence_2
,precedence_3
,precedence_4
,precedence_5
,precedence_6
,precedence_7
,precedence_8
,precedence_9
,precedence_10
,precedence_11
,precedence_12
,precedence_13
,precedence_14
,precedence_15
,precedence_16
,precedence_17
,precedence_18
,precedence_19
,precedence_20
,ref_doc_application_id
,ref_doc_entity_code
,ref_doc_event_class_code
,ref_doc_trx_id
,ref_doc_trx_type
,ref_doc_line_id
,ref_doc_loc_line_id
,ref_doc_trx_level_type
,applied_from_application_id
,applied_from_entity_code
,applied_from_event_class_code
,applied_from_trx_id
,applied_from_trx_line_id
,applied_from_trx_type
,applied_from_loc_line_id
,applied_from_trx_level_type
,applied_to_application_id
,applied_to_entity_code
,applied_to_event_class_code
,applied_to_trx_id
,applied_to_trx_line_id
,applied_to_trx_type
,applied_to_loc_line_id
,applied_to_trx_level_type
,reporting_type_id
,reporting_code
,tax_invoice_date
,tax_invoice_num
/*Added by Qinglei for bug#19560241 begin*/
,interface_tax_line_id tax_line_id --19560241
,rounded_tax_amt_trx_curr
/*Added by Qinglei for bug#19560241 end*/
FROM jai_tax_lines_interface
WHERE interface_det_factor_id = pn_tax_det_factor_id
AND pv_call_from = 'INTERFACE'
ORDER BY tax_line_num ASC;
--Added by Wenqiong for claim intended use change at delivery end

lv_item_class jai_tax_det_factors.item_classification%TYPE;
rec_jai_tax_line jai_tax_lines%ROWTYPE;
l_tax_lines_tbl tax_lines_tbl;
ln_trx_curr_conv_rate NUMBER;
ln_tax_curr_conv_rate NUMBER;
ln_tax_line_num NUMBER;
lv_process_status VARCHAR2(30);
lv_process_message VARCHAR2(150);
lv_api_name CONSTANT VARCHAR2(50) := 'change_intended_use'
/*'determine_recovery'*/
;
--Added by Junjian for bug#19018333 begin
ln_det_party_id NUMBER;
ln_det_party_site_id NUMBER;
--Added by Junjian for bug#19018333 end
BEGIN

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----Begin----' || '()+');
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'In put parameter: pn_tax_det_factor_id is ' ||
pn_tax_det_factor_id || ',pv_intended_use is ' ||
pv_intended_use);
END IF;
pv_process_status := FND_API.G_RET_STS_SUCCESS;
OPEN c_det_factor;
FETCH c_det_factor
INTO lv_item_class
--Added by Junjian for bug#19018333 begin
,ln_det_party_id
,ln_det_party_site_id
--Added by Junjian for bug#19018333 end
;
CLOSE c_det_factor;

--calculated recoverable /non-recoverable tax amount


FOR rec_tax_lines IN c_tax_lines LOOP
ln_tax_line_num :=
rec_tax_lines.tax_line_num;
rec_jai_tax_line := NULL;
rec_jai_tax_line.det_factor_id := pn_tax_det_factor_id;
rec_jai_tax_line.org_id := rec_tax_lines.org_id;
rec_jai_tax_line.organization_id :=
rec_tax_lines.organization_id;
rec_jai_tax_line.location_id := rec_tax_lines.location_id;
rec_jai_tax_line.application_id :=
rec_tax_lines.application_id;
rec_jai_tax_line.entity_code := rec_tax_lines.entity_code;
rec_jai_tax_line.event_class_code :=
rec_tax_lines.event_class_code;
rec_jai_tax_line.event_type_code :=
rec_tax_lines.event_type_code;
rec_jai_tax_line.tax_event_class_code :=
rec_tax_lines.tax_event_class_code;
rec_jai_tax_line.tax_event_type_code :=
rec_tax_lines.tax_event_type_code;
rec_jai_tax_line.ledger_id := rec_tax_lines.ledger_id;
rec_jai_tax_line.trx_id := rec_tax_lines.trx_id;
rec_jai_tax_line.trx_line_id := rec_tax_lines.trx_line_id;
rec_jai_tax_line.trx_loc_line_id :=
rec_tax_lines.trx_loc_line_id;
rec_jai_tax_line.trx_level_type :=
rec_tax_lines.trx_level_type;
rec_jai_tax_line.trx_number := rec_tax_lines.trx_number;
rec_jai_tax_line.trx_line_number :=
rec_tax_lines.trx_line_number;
rec_jai_tax_line.trx_type := rec_tax_lines.trx_type;
rec_jai_tax_line.trx_date := rec_tax_lines.trx_date;
rec_jai_tax_line.legal_entity_id :=
rec_tax_lines.legal_entity_id;
rec_jai_tax_line.frozen_flag := rec_tax_lines.frozen_flag;
rec_jai_tax_line.party_type := rec_tax_lines.party_type;
rec_jai_tax_line.party_id := rec_tax_lines.party_id;
rec_jai_tax_line.party_site_id :=
rec_tax_lines.party_site_id;
rec_jai_tax_line.item_id := rec_tax_lines.item_id;
rec_jai_tax_line.functional_currency_code :=
rec_tax_lines.functional_currency_code;
rec_jai_tax_line.tax_regime_id :=
rec_tax_lines.tax_regime_id;
rec_jai_tax_line.tax_regime_code :=
rec_tax_lines.tax_regime_code;
rec_jai_tax_line.tax_regime_type :=
rec_tax_lines.tax_regime_type;
rec_jai_tax_line.first_party_reg_id :=
rec_tax_lines.first_party_reg_id;
rec_jai_tax_line.first_party_primary_reg_name :=
rec_tax_lines.first_party_primary_reg_name;
rec_jai_tax_line.first_party_primary_reg_num :=
rec_tax_lines.first_party_primary_reg_num;
rec_jai_tax_line.first_party_secondary_reg_name :=
rec_tax_lines.first_party_secondary_reg_name;
rec_jai_tax_line.first_party_secondary_reg_num :=
rec_tax_lines.first_party_secondary_reg_num;
rec_jai_tax_line.num_of_return_days :=
rec_tax_lines.num_of_return_days;
rec_jai_tax_line.reporting_only_flag :=
rec_tax_lines.reporting_only_flag;
rec_jai_tax_line.tax_authority_id :=
rec_tax_lines.tax_authority_id;
rec_jai_tax_line.tax_authority_site_id :=
rec_tax_lines.tax_authority_site_id;
rec_jai_tax_line.third_party_reg_id :=
rec_tax_lines.third_party_reg_id;
rec_jai_tax_line.third_party_primary_reg_name :=
rec_tax_lines.third_party_primary_reg_name;
rec_jai_tax_line.third_party_primary_reg_num :=
rec_tax_lines.third_party_primary_reg_num;
rec_jai_tax_line.third_party_secondary_reg_name :=
rec_tax_lines.third_party_secondary_reg_name;
rec_jai_tax_line.third_party_secondary_reg_num :=
rec_tax_lines.third_party_secondary_reg_num;
rec_jai_tax_line.assessable_price_list_id :=
rec_tax_lines.assessable_price_list_id;
rec_jai_tax_line.tax_type_id := rec_tax_lines.tax_type_id;
rec_jai_tax_line.abatement_flag :=
rec_tax_lines.abatement_flag;
rec_jai_tax_line.update_vendor_on_transaction :=
rec_tax_lines.update_vendor_on_transaction;
rec_jai_tax_line.reporting_only_flag :=
rec_tax_lines.reporting_only_flag;
rec_jai_tax_line.offset_flag := rec_tax_lines.offset_flag;
rec_jai_tax_line.recoverable_flag :=
rec_tax_lines.recoverable_flag;
rec_jai_tax_line.self_assessed_flag :=
rec_tax_lines.self_assessed_flag;
rec_jai_tax_line.reverse_credit_on_shipment :=
rec_tax_lines.reverse_credit_on_shipment;
rec_jai_tax_line.credit_basis_self_assessed :=
rec_tax_lines.credit_basis_self_assessed;
rec_jai_tax_line.tax_point_basis :=
rec_tax_lines.tax_point_basis;
rec_jai_tax_line.tax_point_date :=
rec_tax_lines.tax_point_date;
rec_jai_tax_line.tax_rate_id := rec_tax_lines.tax_rate_id;
rec_jai_tax_line.tax_rate_code :=
rec_tax_lines.tax_rate_code;
rec_jai_tax_line.tax_rate_type :=
rec_tax_lines.tax_rate_type;
rec_jai_tax_line.tax_status := rec_tax_lines.tax_status;
rec_jai_tax_line.recovery_percentage :=
rec_tax_lines.recovery_percentage;
rec_jai_tax_line.inclusive_flag :=
rec_tax_lines.inclusive_flag;
rec_jai_tax_line.tax_rate_percentage :=
rec_tax_lines.tax_rate_percentage;
rec_jai_tax_line.tax_rate_uom :=
rec_tax_lines.tax_rate_uom;
rec_jai_tax_line.tax_rate_uom_rate :=
rec_tax_lines.tax_rate_uom_rate;
rec_jai_tax_line.tax_rate_abatement_type :=
rec_tax_lines.tax_rate_abatement_type;
rec_jai_tax_line.abatement_percentage :=
rec_tax_lines.abatement_percentage;
rec_jai_tax_line.tax_rate_classification :=
rec_tax_lines.tax_rate_classification;
rec_jai_tax_line.standard_rate :=
rec_tax_lines.standard_rate;
rec_jai_tax_line.form_type := rec_tax_lines.form_type;
rec_jai_tax_line.actual_tax_rate :=
rec_tax_lines.actual_tax_rate;
rec_jai_tax_line.rounding_level :=
rec_tax_lines.rounding_level;
rec_jai_tax_line.tax_rounded_to :=
rec_tax_lines.tax_rounded_to;
rec_jai_tax_line.tax_rounding_factor :=
rec_tax_lines.tax_rounding_factor;
rec_jai_tax_line.taxable_rounded_to :=
rec_tax_lines.taxable_rounded_to;
rec_jai_tax_line.taxable_rounding_factor :=
rec_tax_lines.taxable_rounding_factor;
rec_jai_tax_line.quantity_rounded_to :=
rec_tax_lines.quantity_rounded_to;
rec_jai_tax_line.quantity_rounding_factor :=
rec_tax_lines.quantity_rounding_factor;
rec_jai_tax_line.unround_tax_amt_fun_curr :=
rec_tax_lines.unround_tax_amt_fun_curr;
rec_jai_tax_line.rounded_tax_amt_fun_curr :=
rec_tax_lines.rounded_tax_amt_fun_curr;
rec_jai_tax_line.rounded_tax_amt_tax_curr :=
rec_tax_lines.rounded_tax_amt_tax_curr;
rec_jai_tax_line.manual_overridden_flag :=
rec_tax_lines.manual_overridden_flag;
rec_jai_tax_line.manual_tax_line_flag :=
rec_tax_lines.manual_tax_line_flag;
rec_jai_tax_line.copied_from_other_doc_flag :=
rec_tax_lines.copied_from_other_doc_flag;

rec_jai_tax_line.tax_line_num := rec_tax_lines.tax_line_num;
rec_jai_tax_line.precedence_1 := rec_tax_lines.precedence_1;
rec_jai_tax_line.precedence_2 := rec_tax_lines.precedence_2;
rec_jai_tax_line.precedence_3 := rec_tax_lines.precedence_3;
rec_jai_tax_line.precedence_4 := rec_tax_lines.precedence_4;
rec_jai_tax_line.precedence_5 := rec_tax_lines.precedence_5;
rec_jai_tax_line.precedence_6 := rec_tax_lines.precedence_6;
rec_jai_tax_line.precedence_7 := rec_tax_lines.precedence_7;
rec_jai_tax_line.precedence_8 := rec_tax_lines.precedence_8;
rec_jai_tax_line.precedence_9 := rec_tax_lines.precedence_9;
rec_jai_tax_line.precedence_10 :=
rec_tax_lines.precedence_10;
rec_jai_tax_line.precedence_11 :=
rec_tax_lines.precedence_11;
rec_jai_tax_line.precedence_12 :=
rec_tax_lines.precedence_12;
rec_jai_tax_line.precedence_13 :=
rec_tax_lines.precedence_13;
rec_jai_tax_line.precedence_14 :=
rec_tax_lines.precedence_14;
rec_jai_tax_line.precedence_15 :=
rec_tax_lines.precedence_15;
rec_jai_tax_line.precedence_16 :=
rec_tax_lines.precedence_16;
rec_jai_tax_line.precedence_17 :=
rec_tax_lines.precedence_17;
rec_jai_tax_line.precedence_18 :=
rec_tax_lines.precedence_18;
rec_jai_tax_line.precedence_19 :=
rec_tax_lines.precedence_19;
rec_jai_tax_line.precedence_20 :=
rec_tax_lines.precedence_20;
rec_jai_tax_line.ref_doc_application_id :=
rec_tax_lines.ref_doc_application_id;
rec_jai_tax_line.ref_doc_entity_code :=
rec_tax_lines.ref_doc_entity_code;
rec_jai_tax_line.ref_doc_event_class_code :=
rec_tax_lines.ref_doc_event_class_code;
rec_jai_tax_line.ref_doc_trx_id :=
rec_tax_lines.ref_doc_trx_id;
rec_jai_tax_line.ref_doc_trx_type :=
rec_tax_lines.ref_doc_trx_type;
rec_jai_tax_line.ref_doc_line_id :=
rec_tax_lines.ref_doc_line_id;
rec_jai_tax_line.ref_doc_loc_line_id :=
rec_tax_lines.ref_doc_loc_line_id;
rec_jai_tax_line.ref_doc_trx_level_type :=
rec_tax_lines.ref_doc_trx_level_type;
rec_jai_tax_line.applied_from_application_id :=
rec_tax_lines.applied_from_application_id;
rec_jai_tax_line.applied_from_entity_code :=
rec_tax_lines.applied_from_entity_code;
rec_jai_tax_line.applied_from_event_class_code :=
rec_tax_lines.applied_from_event_class_code;
rec_jai_tax_line.applied_from_trx_id :=
rec_tax_lines.applied_from_trx_id;
rec_jai_tax_line.applied_from_trx_line_id :=
rec_tax_lines.applied_from_trx_line_id;
rec_jai_tax_line.applied_from_trx_type :=
rec_tax_lines.applied_from_trx_type;
rec_jai_tax_line.applied_from_loc_line_id :=
rec_tax_lines.applied_from_loc_line_id;
rec_jai_tax_line.applied_from_trx_level_type :=
rec_tax_lines.applied_from_trx_level_type;
rec_jai_tax_line.applied_to_application_id :=
rec_tax_lines.applied_to_application_id;
rec_jai_tax_line.applied_to_entity_code :=
rec_tax_lines.applied_to_entity_code;
rec_jai_tax_line.applied_to_event_class_code :=
rec_tax_lines.applied_to_event_class_code;
rec_jai_tax_line.applied_to_trx_id :=
rec_tax_lines.applied_to_trx_id;
rec_jai_tax_line.applied_to_trx_line_id :=
rec_tax_lines.applied_to_trx_line_id;
rec_jai_tax_line.applied_to_trx_type :=
rec_tax_lines.applied_to_trx_type;
rec_jai_tax_line.applied_to_loc_line_id :=
rec_tax_lines.applied_to_loc_line_id;
rec_jai_tax_line.applied_to_trx_level_type :=
rec_tax_lines.applied_to_trx_level_type;
rec_jai_tax_line.reporting_type_id :=
rec_tax_lines.reporting_type_id;
rec_jai_tax_line.reporting_code :=
rec_tax_lines.reporting_code;
rec_jai_tax_line.tax_invoice_date :=
rec_tax_lines.tax_invoice_date;
rec_jai_tax_line.tax_invoice_num :=
rec_tax_lines.tax_invoice_num;

rec_jai_tax_line.unit_price := rec_tax_lines.unit_price;
rec_jai_tax_line.line_amt := rec_tax_lines.line_amt;
rec_jai_tax_line.trx_line_quantity := rec_tax_lines.trx_line_quantity;
rec_jai_tax_line.trx_uom := rec_tax_lines.trx_uom;
rec_jai_tax_line.trx_currency_code := rec_tax_lines.trx_currency_code;
rec_jai_tax_line.currency_conversion_date :=
rec_tax_lines.currency_conversion_date;
rec_jai_tax_line.currency_conversion_type :=
rec_tax_lines.currency_conversion_type;
rec_jai_tax_line.currency_conversion_rate :=
rec_tax_lines.currency_conversion_rate;

rec_jai_tax_line.tax_currency_code :=
rec_tax_lines.tax_currency_code;
rec_jai_tax_line.tax_currency_conversion_date :=
rec_tax_lines.tax_currency_conversion_date;
rec_jai_tax_line.tax_currency_conversion_type :=
rec_tax_lines.tax_currency_conversion_type;
rec_jai_tax_line.tax_currency_conversion_rate :=
rec_tax_lines.tax_currency_conversion_rate;

/*Added by Qinglei for bug#19560241 begin*/


rec_jai_tax_line.tax_line_id := rec_tax_lines.tax_line_id;
rec_jai_tax_line.rounded_tax_amt_trx_curr :=
rec_tax_lines.rounded_tax_amt_trx_curr;
rec_jai_tax_line.rounded_tax_amt_tax_curr :=
rec_tax_lines.rounded_tax_amt_tax_curr;
rec_jai_tax_line.rounded_tax_amt_fun_curr :=
rec_tax_lines.rounded_tax_amt_fun_curr;
/*Added by Qinglei for bug#19560241 end*/

jai_tax_determination_pkg.determine_recovery(pn_rounded_tax_amt_fun_curr =>
rec_jai_tax_line.rounded_tax_amt_fun_curr
,pn_recovery_percentage =>
rec_jai_tax_line.recovery_percentage
,pn_tax_regime_id =>
rec_jai_tax_line.tax_regime_id
,pn_tax_type_id =>
rec_jai_tax_line.tax_type_id
,pn_org_id =>
rec_jai_tax_line.org_id --Added by Junjian on 10-01-2014
,pn_organization_id =>
rec_jai_tax_line.organization_id
,pn_location_id =>
rec_jai_tax_line.location_id
,pv_intended_use =>
pv_intended_use
,pv_item_class =>
lv_item_class
,pn_item_id =>
rec_jai_tax_line.item_id
,pv_registration_num =>
rec_jai_tax_line.first_party_primary_reg_num
,pn_rec_tax_amt_funcl_curr =>
rec_jai_tax_line.rec_tax_amt_funcl_curr
,pn_nrec_tax_amt_funcl_curr =>
rec_jai_tax_line.nrec_tax_amt_funcl_curr
,pv_process_status =>
lv_process_status
,pv_process_message =>
lv_process_message);

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'determine_recovery return
pn_rec_tax_amt_funcl_curr:' ||
rec_jai_tax_line.rec_tax_amt_funcl_curr ||
',pn_nrec_tax_amt_funcl_curr:' ||
rec_jai_tax_line.nrec_tax_amt_funcl_curr);
END IF;
IF lv_process_status <> FND_API.G_RET_STS_SUCCESS THEN
pv_process_status := lv_process_status;
pv_process_message := lv_process_message;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'calling determine_recovery with error:' ||
lv_process_message);
END IF;
RETURN;
END IF;
IF nvl(rec_jai_tax_line.rec_tax_amt_funcl_curr
,0) > 0 THEN
rec_jai_tax_line.recoverable_flag := 'Y';
ELSE
rec_jai_tax_line.recoverable_flag := 'N';
END IF;
--Added by Junjian for bug#19018333 begin
IF nvl(rec_jai_tax_line.update_vendor_on_transaction
,'N') = 'Y' THEN
IF ln_det_party_id <> rec_jai_tax_line.party_id
OR ln_det_party_site_id <> rec_jai_tax_line.party_site_id THEN
rec_jai_tax_line.recoverable_flag := 'N';
rec_jai_tax_line.rec_tax_amt_funcl_curr := 0;
END IF;
END IF;
--Added by Junjian for bug#19018333 end
ln_trx_curr_conv_rate := nvl(rec_jai_tax_line.currency_conversion_rate
,1);
ln_tax_curr_conv_rate := nvl(rec_jai_tax_line.tax_currency_conversion_rate
,1);

rec_jai_tax_line.rec_tax_amt_trx_curr :=
rec_jai_tax_line.rec_tax_amt_funcl_curr / ln_trx_curr_conv_rate;
rec_jai_tax_line.rec_tax_amt_tax_curr :=
rec_jai_tax_line.rec_tax_amt_funcl_curr / ln_tax_curr_conv_rate;
rec_jai_tax_line.nrec_tax_amt_trx_curr :=
rec_jai_tax_line.nrec_tax_amt_funcl_curr / ln_trx_curr_conv_rate;
rec_jai_tax_line.nrec_tax_amt_tax_curr :=
rec_jai_tax_line.nrec_tax_amt_funcl_curr / ln_tax_curr_conv_rate;

l_tax_lines_tbl(ln_tax_line_num) := rec_jai_tax_line;
/* IF rec_jai_tax_line.application_id IN () --RCV/Delivery
jai_rcv_tax_det_pkg.populate_tax_dist_rcv(pr_tax_line => lr_tax_line
,pv_process_status => lv_process_status
,pv_process_message => lv_process_message);
END IF;*/
END LOOP;
IF nvl(pv_call_from
,'BASE_TABLE') <> 'INTERFACE' THEN
--added by Wenqiong for claim intended use change.
UPDATE jai_tax_det_factors
SET intended_use = pv_intended_use
,object_version_number = object_version_number + 1
,last_updated_by = fnd_global.user_id
,last_update_date = SYSDATE
,last_update_login = fnd_global.user_id
WHERE det_factor_id = pn_tax_det_factor_id;
--added by Wenqiong for claim intended use change begin.
ELSE
UPDATE jai_det_factors_interface
SET intended_use = pv_intended_use
WHERE interface_det_factor_id = pn_tax_det_factor_id;
END IF;
--added by Wenqiong for claim intended use change end.
jai_tax_determination_pkg.update_tax_lines(p_tax_lines_tbl =>
l_tax_lines_tbl
,pv_call_from => pv_call_from
--added by Wenqiong for claim intended use change.
,pv_process_status =>
lv_process_status
,pv_process_message =>
lv_process_message);

IF lv_process_status <> FND_API.G_RET_STS_SUCCESS THEN


IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'return status as :' || pv_process_status);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
END IF;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
EXCEPTION
WHEN OTHERS THEN
pv_process_status := jai_constants.unexpected_error;
pv_process_message := 'Encountered an error in JAI_TAX_DETERMINATION_PKG.' ||
lv_api_name ||
substr(SQLERRM
,1
,1900);

IF (G_LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_UNEXPECTED
,G_MODULE_NAME || lv_api_name
,SQLERRM);
END IF;
END change_intended_use;

-----------------------------------------------------------------------
-- PUBLIC PROCEDURE
-- update_factor_line
--
-- DESCRIPTION
-- update tax category and intended use for the factor line
--
-- CALLED BY
-- OAF CommonTaxAmImpl.java
-----------------------------------------------------------------------
PROCEDURE update_factor_line(p_source IN VARCHAR2
-- added by zhiwei.xin for ASN/ASBN
,p_det_factor_id IN NUMBER
,p_tax_category_id IN NUMBER
,p_intended_use IN VARCHAR2
,x_updated_flag OUT NOCOPY VARCHAR2
,x_process_status OUT NOCOPY VARCHAR2
,x_process_message OUT NOCOPY VARCHAR2) IS

lv_api_name CONSTANT VARCHAR2(50) := 'update_factor_line';


lv_source VARCHAR2(20); -- added by zhiwei.xin for ASN/ASBN
ln_det_factor_id NUMBER;
ln_tax_category_id NUMBER;
lv_intended_use jai_tax_det_factors.intended_use%TYPE;
ln_org_tax_cat_id NUMBER;
lv_org_intended_use jai_tax_det_factors.intended_use%TYPE;
lv_process_status VARCHAR2(30);
lv_process_message VARCHAR2(150);
le_error EXCEPTION;

CURSOR c_factor_line IS
SELECT decode(nvl(user_modified_flag
,'N')
,'N'
,default_tax_category_id
,override_tax_category_id)
,intended_use
FROM jai_tax_det_factors
WHERE det_factor_id = p_det_factor_id
-- added by zhiwei.xin for ASN/ASBN begin
AND 'BASE' = p_source
UNION ALL
SELECT decode(nvl(user_modified_flag
,'N')
,'N'
,default_tax_category_id
,override_tax_category_id)
,intended_use
FROM jai_det_factors_interface
WHERE interface_det_factor_id = p_det_factor_id
AND 'INTERFACE' = p_source
-- added by zhiwei.xin for ASN/ASBN end.
;

BEGIN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name || '.BEGIN'
,G_PKG_NAME || ': ' || lv_api_name || '()+');
END IF;

x_process_status := jai_constants.successful;
x_updated_flag := 'N';

lv_source := p_source; -- added by zhiwei.xin for ASN/ASBN


ln_det_factor_id := p_det_factor_id;
ln_tax_category_id := p_tax_category_id;
lv_intended_use := p_intended_use;

IF (G_LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_STATEMENT
,G_MODULE_NAME || lv_api_name
,'SOURCE : ' || lv_source || ', DET_FACTOR_ID : ' ||
ln_det_factor_id || ', TAX_CATEGORY_ID : ' ||
ln_tax_category_id || ', INTENDED_USE : ' || lv_intended_use);
END IF;

OPEN c_factor_line;
FETCH c_factor_line
INTO ln_org_tax_cat_id
,lv_org_intended_use;
CLOSE c_factor_line;

IF (G_LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_STATEMENT
,G_MODULE_NAME || lv_api_name
,'TAX_CATEGORY_ID : ' || ln_org_tax_cat_id || ', INTENDED_USE :
' || lv_org_intended_use);
END IF;

IF nvl(ln_tax_category_id
,-1) <> nvl(ln_org_tax_cat_id
,-1) THEN
IF (G_LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_STATEMENT
,G_MODULE_NAME || lv_api_name
,G_PKG_NAME || ': ' || lv_api_name || ': Override Tax
Category.');
END IF;
x_updated_flag := 'Y';
override_tax_category_rule(pn_tax_rule_id => NULL
,pn_tax_category_id => ln_tax_category_id
,pn_det_factor_id => ln_det_factor_id
--pv_call_from => null, -- commented out
by zhiwei.xin for ASN/ASBN
,pv_call_from => lv_source
-- added by zhiwei.xin for ASN/ASBN
,pv_process_status => lv_process_status
,pv_process_message => lv_process_message);
IF lv_process_status <> FND_API.G_RET_STS_SUCCESS THEN
RAISE le_error;
END IF;
END IF;

IF nvl(lv_intended_use
,'###') <> nvl(lv_org_intended_use
,'###') THEN
IF (G_LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_STATEMENT
,G_MODULE_NAME || lv_api_name
,G_PKG_NAME || ': ' || lv_api_name || ': Change intended
use.');
END IF;
x_updated_flag := 'Y';
change_intended_use(pn_tax_det_factor_id => ln_det_factor_id
,pv_intended_use => lv_intended_use
,pv_process_status => lv_process_status
,pv_process_message => lv_process_message);
IF lv_process_status <> FND_API.G_RET_STS_SUCCESS THEN
RAISE le_error;
END IF;
END IF;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name || '.END'
,G_PKG_NAME || ': ' || lv_api_name || '()-' || ' RETURN_CODE =
' || x_process_status);
END IF;

EXCEPTION
WHEN le_error THEN
x_process_status := jai_constants.expected_error;
x_process_message := lv_process_message;

IF (G_LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_ERROR
,G_MODULE_NAME || lv_api_name
,lv_process_message);
END IF;
WHEN OTHERS THEN
x_process_status := jai_constants.unexpected_error;
x_process_message := 'Encountered an error in
JAI_TAX_DETERMINATION_PKG.update_factor_line. ' ||
substr(SQLERRM
,1
,1900);

IF (G_LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_UNEXPECTED
,G_MODULE_NAME || lv_api_name
,SQLERRM);
END IF;
END update_factor_line;

-----------------------------------------------------------------------
-- PUBLIC PROCEDURE
-- calculate_oaf_taxes
--
-- DESCRIPTION
-- called by OAF for the tax calculation
--
-- CALLED BY
-- OAF CommonTaxAmImpl.java
-----------------------------------------------------------------------
PROCEDURE calculate_oaf_taxes(p_source IN VARCHAR2
-- added by zhiwei.xin for ASN/ASBN
,p_det_factor_id IN NUMBER
,p_tax_lines_tbl IN jai_tax_lines_tbl
,x_process_status OUT NOCOPY VARCHAR2
,x_process_message OUT NOCOPY VARCHAR2) IS

lv_api_name CONSTANT VARCHAR2(50) := 'calculate_oaf_taxes';


l_tax_lines_tbl jai_tax_lines_tbl;
l_tax_lines_rec jai_tax_lines%ROWTYPE;
l_tax_lines_t tax_lines_tbl;
lv_process_status VARCHAR2(30);
lv_process_message VARCHAR2(150);
lv_source VARCHAR2(20);
ln_det_factor_id NUMBER; -- added by zhiwei.xin for ASN/ASBN
le_error EXCEPTION;

BEGIN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name || '.BEGIN'
,G_PKG_NAME || ': ' || lv_api_name || '()+');
END IF;

x_process_status := jai_constants.successful;
lv_source := p_source; -- added by zhiwei.xin for ASN/ASBN
ln_det_factor_id := p_det_factor_id;
l_tax_lines_tbl := p_tax_lines_tbl;

IF l_tax_lines_tbl.count > 0 THEN


FOR i IN l_tax_lines_tbl.first .. l_tax_lines_tbl.last LOOP
l_tax_lines_rec := NULL;

l_tax_lines_rec.tax_line_id :=
l_tax_lines_tbl(i).tax_line_id;
l_tax_lines_rec.det_factor_id :=
l_tax_lines_tbl(i).det_factor_id;
l_tax_lines_rec.party_type :=
l_tax_lines_tbl(i).party_type;
l_tax_lines_rec.party_id :=
l_tax_lines_tbl(i).party_id;
l_tax_lines_rec.party_site_id :=
l_tax_lines_tbl(i).party_site_id;
l_tax_lines_rec.tax_currency_code :=
l_tax_lines_tbl(i).tax_currency_code;
l_tax_lines_rec.tax_currency_conversion_date :=
l_tax_lines_tbl(i).tax_currency_conversion_date;
l_tax_lines_rec.tax_currency_conversion_type :=
l_tax_lines_tbl(i).tax_currency_conversion_type;
l_tax_lines_rec.tax_currency_conversion_rate :=
l_tax_lines_tbl(i).tax_currency_conversion_rate;
l_tax_lines_rec.functional_currency_code :=
l_tax_lines_tbl(i).functional_currency_code;
l_tax_lines_rec.user_entered_av :=
l_tax_lines_tbl(i).user_entered_av;
l_tax_lines_rec.tax_regime_id :=
l_tax_lines_tbl(i).tax_regime_id;
l_tax_lines_rec.tax_regime_code :=
l_tax_lines_tbl(i).tax_regime_code;
l_tax_lines_rec.tax_regime_type :=
l_tax_lines_tbl(i).tax_regime_type;
l_tax_lines_rec.tax_type_id :=
l_tax_lines_tbl(i).tax_type_id;
l_tax_lines_rec.tax_rate_id :=
l_tax_lines_tbl(i).tax_rate_id;
l_tax_lines_rec.tax_rate_code :=
l_tax_lines_tbl(i).tax_rate_code;
l_tax_lines_rec.tax_rate_type :=
l_tax_lines_tbl(i).tax_rate_type;
l_tax_lines_rec.tax_rate_uom_rate :=
l_tax_lines_tbl(i).tax_rate_uom_rate;
l_tax_lines_rec.unround_tax_amt_tax_curr :=
l_tax_lines_tbl(i).unround_tax_amt_tax_curr;
l_tax_lines_rec.tax_line_num :=
l_tax_lines_tbl(i).tax_line_num;
l_tax_lines_rec.precedence_1 :=
l_tax_lines_tbl(i).precedence_1;
l_tax_lines_rec.precedence_2 :=
l_tax_lines_tbl(i).precedence_2;
l_tax_lines_rec.precedence_3 :=
l_tax_lines_tbl(i).precedence_3;
l_tax_lines_rec.precedence_4 :=
l_tax_lines_tbl(i).precedence_4;
l_tax_lines_rec.precedence_5 :=
l_tax_lines_tbl(i).precedence_5;
l_tax_lines_rec.precedence_6 :=
l_tax_lines_tbl(i).precedence_6;
l_tax_lines_rec.precedence_7 :=
l_tax_lines_tbl(i).precedence_7;
l_tax_lines_rec.precedence_8 :=
l_tax_lines_tbl(i).precedence_8;
l_tax_lines_rec.precedence_9 :=
l_tax_lines_tbl(i).precedence_9;
l_tax_lines_rec.precedence_10 :=
l_tax_lines_tbl(i).precedence_10;
l_tax_lines_rec.precedence_11 :=
l_tax_lines_tbl(i).precedence_11;
l_tax_lines_rec.precedence_12 :=
l_tax_lines_tbl(i).precedence_12;
l_tax_lines_rec.precedence_13 :=
l_tax_lines_tbl(i).precedence_13;
l_tax_lines_rec.precedence_14 :=
l_tax_lines_tbl(i).precedence_14;
l_tax_lines_rec.precedence_15 :=
l_tax_lines_tbl(i).precedence_15;
l_tax_lines_rec.precedence_16 :=
l_tax_lines_tbl(i).precedence_16;
l_tax_lines_rec.precedence_17 :=
l_tax_lines_tbl(i).precedence_17;
l_tax_lines_rec.precedence_18 :=
l_tax_lines_tbl(i).precedence_18;
l_tax_lines_rec.precedence_19 :=
l_tax_lines_tbl(i).precedence_19;
l_tax_lines_rec.precedence_20 :=
l_tax_lines_tbl(i).precedence_20;
l_tax_lines_rec.reporting_type_id :=
l_tax_lines_tbl(i).reporting_type_id;
l_tax_lines_rec.reporting_code :=
l_tax_lines_tbl(i).reporting_code;
l_tax_lines_rec.tax_invoice_date :=
l_tax_lines_tbl(i).tax_invoice_date;
l_tax_lines_rec.tax_invoice_num :=
l_tax_lines_tbl(i).tax_invoice_num;

l_tax_lines_t(i) := l_tax_lines_rec;
END LOOP;

IF (G_LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_STATEMENT
,G_MODULE_NAME || lv_api_name
,G_PKG_NAME || ': ' || lv_api_name || ': Calculate tax for
OAF.');
END IF;

calculate_tax(p_tax_lines_tbl => l_tax_lines_t


--pv_call_from => NULL, -- commented out by zhiwei.xin
for ASN/ASBN
,pv_call_from => lv_source
-- added by zhiwei.xin for ASN/ASBN
,pv_process_status => lv_process_status
,pv_process_message => lv_process_message);

IF lv_process_status <> FND_API.G_RET_STS_SUCCESS THEN


RAISE le_error;
END IF;
END IF;

IF (G_LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_STATEMENT
,G_MODULE_NAME || lv_api_name
,G_PKG_NAME || ': ' || lv_api_name || ': Delete tax lines for
OAF.');
END IF;
delete_tax_lines(pn_det_factor_id => ln_det_factor_id
--pv_call_from => null -- commented out by zhiwei.xin
for ASN/ASBN
,pv_call_from => lv_source -- added by zhiwei.xin for ASN/ASBN
);

IF l_tax_lines_t.count > 0 THEN


IF (G_LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_STATEMENT
,G_MODULE_NAME || lv_api_name
,G_PKG_NAME || ': ' || lv_api_name || ': Populate tax lines
for OAF.');
END IF;

populate_tax_lines(p_tax_lines_tbl => l_tax_lines_t


--pv_call_from => null, -- commented out by
zhiwei.xin for ASN/ASBN
,pv_call_from => lv_source
-- added by zhiwei.xin for ASN/ASBN
,pv_process_status => lv_process_status
,pv_process_message => lv_process_message);

IF lv_process_status <> FND_API.G_RET_STS_SUCCESS THEN


RAISE le_error;
END IF;
END IF;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name || '.END'
,G_PKG_NAME || ': ' || lv_api_name || '()-' || ' RETURN_CODE =
' || x_process_status);
END IF;

EXCEPTION
WHEN le_error THEN
x_process_status := jai_constants.expected_error;
x_process_message := lv_process_message;

IF (G_LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_ERROR
,G_MODULE_NAME || lv_api_name
,lv_process_message);
END IF;
WHEN OTHERS THEN
x_process_status := jai_constants.unexpected_error;
x_process_message := 'Encountered an error in
JAI_TAX_DETERMINATION_PKG.calculate_oaf_taxes. ' ||
substr(SQLERRM
,1
,1900);

IF (G_LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_UNEXPECTED
,G_MODULE_NAME || lv_api_name
,SQLERRM);
END IF;

END calculate_oaf_taxes;

/*---------------------------------------------------------------------------------
-------------------------------+
| Created By : Dejiang Liu
|
| Creation Date : 27/Feb/2014
|
| Bug Number/ER Name : Bug#18033001
|
| SubProgram Name : get_fp_matched_id
|
| Type : FUNCTION
|
| Purpose : This function gets the match party_reg_id for first
party registrations. |
|
|
| TDD Reference : Section
|
| Assumptions :
|
| Called From :
|

|----------------------------------------------------------------------------------
-------------------------------|
| parameters IN/OUT Type Required
Description and Purpose |
| ------------ -------- ------ ----------
------------------------- |
| p_organization_id IN NUMBER Yes
Organization ID. |
| p_org_id IN NUMBER Yes
Operating Unit ID. |
| p_location_id IN NUMBER Yes
Inventory location ID. |
| p_regime_id IN NUMBER Yes
Regime ID. |
| p_regime_type IN NUMBER Yes
Regime Type Code. |

*----------------------------------------------------------------------------------
------------------------------*/
FUNCTION get_fp_matched_id
(
p_organization_id NUMBER
,p_location_id NUMBER
,p_org_id NUMBER
,p_regime_type VARCHAR2
,p_regime_id NUMBER
) RETURN NUMBER IS
lv_api_name CONSTANT VARCHAR2(50) := 'get_fp_matched_id';

-- Cursor for matching by location.


CURSOR c_extact_match IS
SELECT jpr.party_reg_id
FROM jai_party_regs jpr
WHERE jpr.party_type_code = 'IO'
-- AND jpr.org_id = p_org_id AELLURU
/*There are cases while determining tax ,where organization is belonging to
diff OU
Which is resulting in this failure so commenting the org_id Condition
26728911*/
AND jpr.party_id = p_organization_id
AND jpr.party_site_id = p_location_id
AND EXISTS (SELECT 1
FROM jai_regimes jr
,jai_party_reg_lines jprl
WHERE jprl.party_reg_id = jpr.party_reg_id
AND jprl.regime_id = jr.regime_id
AND jprl.regime_id = nvl(p_regime_id
,jprl.regime_id)
AND jr.regime_type = p_regime_type);

-- Cursor for matching by organization.


CURSOR c_org_match IS
SELECT jpr.party_reg_id
FROM jai_party_regs jpr
WHERE jpr.party_type_code = 'IO'
-- AND jpr.org_id = p_org_id AELLURU
/*There are cases while determining tax ,where organization is belonging to
diff OU
Which is resulting in this failure so commenting the org_id Condition
26728911*/
AND jpr.party_id = p_organization_id
AND jpr.party_site_id IS NULL --Added for bug#19163082 fixing 20140724
AND EXISTS (SELECT 1
FROM jai_regimes jr
,jai_party_reg_lines jprl
WHERE jprl.party_reg_id = jpr.party_reg_id
AND jprl.regime_id = jr.regime_id
AND jprl.regime_id = nvl(p_regime_id
,jprl.regime_id)
AND jr.regime_type = p_regime_type);

-- Cursor for matching by operating unit.


CURSOR c_ou_match IS
SELECT jpr.party_reg_id
FROM jai_party_regs jpr
WHERE jpr.party_type_code IN ('IO'
,'OU')
AND jpr.party_id = p_org_id
AND EXISTS (SELECT 1
FROM jai_regimes jr
,jai_party_reg_lines jprl
WHERE jprl.party_reg_id = jpr.party_reg_id
AND jprl.regime_id = jr.regime_id
AND jprl.regime_id = nvl(p_regime_id
,jprl.regime_id)
AND jr.regime_type = p_regime_type);

l_party_reg_id NUMBER;

BEGIN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----Begin----' || '()+');
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'Input params: ' || 'p_organization_id:' ||
p_organization_id || 'p_org_id:' ||
p_org_id || 'p_location_id:' || p_location_id ||
'p_regime_id:' || p_regime_id ||
'p_regime_type:' || p_regime_type);
END IF;

IF p_regime_type = 'W' THEN


-- Withholding tax, only matched by OU.
OPEN c_ou_match;
FETCH c_ou_match
INTO l_party_reg_id;
CLOSE c_ou_match;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Get withholding tax registration id: ' || l_party_reg_id);
END IF;
ELSIF p_regime_type = 'T' THEN
-- Transaction tax, match with 3 levels:
-- 1. Extact match: match by organization and location;
-- 2. Organization match: if method 1 failed, matched with organization;
-- 3. OU match: if match 2 failed, matched with operating unit.
l_party_reg_id := NULL;

-- Match by location.
OPEN c_extact_match;
FETCH c_extact_match
INTO l_party_reg_id;
CLOSE c_extact_match;

IF l_party_reg_id IS NULL THEN


-- Match by organization.
OPEN c_org_match;
FETCH c_org_match
INTO l_party_reg_id;
CLOSE c_org_match;
END IF;

IF l_party_reg_id IS NULL THEN


-- Match by operating unit.
OPEN c_ou_match;
FETCH c_ou_match
INTO l_party_reg_id;
CLOSE c_ou_match;
END IF;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Get transaction tax registration id: ' || l_party_reg_id);
END IF;

ELSE
l_party_reg_id := NULL;

END IF;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()-');
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'Return value: ' || l_party_reg_id);
END IF;

RETURN(l_party_reg_id);
END;
--Added by Wenqiong for exemption begin
FUNCTION get_exemption_hdr_id
(
pn_org_id NUMBER
,pn_organization_id NUMBER
,pn_location_id NUMBER
,pn_regime_id NUMBER
,pv_first_party_reg_type VARCHAR2
,pv_first_party_reg_num VARCHAR2
,pv_exemption_type VARCHAR2
,pv_tracking_num VARCHAR2
,pn_tax_type_id NUMBER
) RETURN NUMBER IS

CURSOR c_exemption_hdr_id
(
cn_org_id NUMBER
,cn_organization_id NUMBER
,cn_location_id NUMBER
,cn_regime_id NUMBER
,cv_first_party_reg_type VARCHAR2
,cv_first_party_reg_num VARCHAR2
,cv_exemption_type VARCHAR2
,cv_tracking_num VARCHAR2
,cn_tax_type_id NUMBER
) IS
SELECT jeh.exemption_hdr_id
FROM jai_exemption_hdrs jeh
WHERE jeh.tax_regime_id = cn_regime_id
AND jeh.org_id = cn_org_id
AND (jeh.organization_id = cn_organization_id OR jeh.organization_id IS
NULL)
AND (jeh.location_id = cn_location_id OR jeh.location_id IS NULL)
AND jeh.registration_type_code = cv_first_party_reg_type
AND jeh.registration_num = cv_first_party_reg_num
AND jeh.exemption_type = cv_exemption_type
AND nvl(jeh.tracking_num
,'X') = nvl(cv_tracking_num
,nvl(jeh.tracking_num
,'X'))
AND EXISTS (SELECT 1
FROM jai_cmn_match_dtls jel
WHERE jel.header_id = jeh.exemption_hdr_id
AND jel.tax_type_id = cn_tax_type_id
AND jel.process_document_type = 'EX'
AND nvl(jel.effective_from
,SYSDATE - 1) <= SYSDATE
AND nvl(jel.effective_to
,SYSDATE + 1) >= SYSDATE);
ln_exemption_hdr_id NUMBER;
lv_api_name CONSTANT VARCHAR2(50) := 'get_exemption_hdr_id';
BEGIN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----Begin----' || '()+');
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Input parameters: pn_org_id :' || pn_org_id ||
'pn_organization_id' || pn_organization_id ||
'pn_location_id' || pn_location_id || ',pv_exemption_type:' ||
pv_exemption_type ||
' ,pv_tracking_num :' || pv_tracking_num || ' ,pn_tax_type_id'
|| pn_tax_type_id);
END IF;

OPEN c_exemption_hdr_id(pn_org_id
,pn_organization_id
,pn_location_id
,pn_regime_id
,pv_first_party_reg_type
,pv_first_party_reg_num
,pv_exemption_type
,pv_tracking_num
,pn_tax_type_id);
FETCH c_exemption_hdr_id
INTO ln_exemption_hdr_id;
CLOSE c_exemption_hdr_id;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----end----' || '()+');
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'return ln_exemption_hdr_id :' || ln_exemption_hdr_id);
END IF;

RETURN ln_exemption_hdr_id;
END get_exemption_hdr_id;
PROCEDURE determine_exemption
(
pn_det_factor_id IN NUMBER
,pv_exemption_type IN VARCHAR2
,pv_tracking_num IN VARCHAR2
,pv_exemption_num IN VARCHAR2
,pd_exemption_date IN DATE
,pv_proof_exp_num IN VARCHAR2
,pd_proof_rcv_date IN DATE
,pv_process_status OUT NOCOPY VARCHAR2
,pv_process_message OUT NOCOPY VARCHAR2
) IS
CURSOR c_tax_lines IS
SELECT *
FROM jai_tax_lines
WHERE det_factor_id = pn_det_factor_id
ORDER BY tax_line_num ASC;

CURSOR c_det_factor IS
SELECT DISTINCT trx_id
,application_id
,entity_code
,event_class_code
FROM jai_tax_lines
WHERE det_factor_id = pn_det_factor_id;

CURSOR c_proof_rcv_date IS
SELECT DISTINCT proof_received_date
FROM jai_tax_lines
WHERE det_factor_id = pn_det_factor_id
AND exemption_hdr_id IS NOT NULL;
l_det_factor c_det_factor%ROWTYPE;
ln_tax_line_num NUMBER;
l_tax_lines_tbl tax_lines_tbl;
rec_tax_line jai_tax_lines%ROWTYPE;
ln_exemption_hdr_id NUMBER;
ld_proof_rcv_date DATE;
lv_return_status VARCHAR2(30);
lv_process_message VARCHAR2(150);
lv_api_name CONSTANT VARCHAR2(50) := 'determine_exemption';
BEGIN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----Begin----' || '()+');
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Input parameters: pn_det_factor_id :' || pn_det_factor_id ||
',pv_exemption_type:' ||
pv_exemption_type || ' ,pv_tracking_num :' || pv_tracking_num
|| ' ,pv_exemption_num' ||
pv_exemption_num || ' ,pd_exemption_date' || pd_exemption_date
|| ' ,pv_proof_exp_num' ||
pv_proof_exp_num || ' ,pd_proof_rcv_date' ||
pd_proof_rcv_date);
END IF;
pv_process_status := FND_API.G_RET_STS_SUCCESS;

FOR rec_tax_line IN c_tax_lines LOOP


ln_tax_line_num := rec_tax_line.tax_line_num;

l_tax_lines_tbl(ln_tax_line_num) := rec_tax_line;
l_tax_lines_tbl(ln_tax_line_num).exemption_hdr_id := NULL;
l_tax_lines_tbl(ln_tax_line_num).tax_amt_before_exemption := NULL;
END LOOP;

IF l_tax_lines_tbl.count > 0 THEN


UPDATE jai_tax_lines
SET exemption_hdr_id = NULL
,tax_amt_before_exemption = NULL
WHERE det_factor_id = pn_det_factor_id;
jai_tax_determination_pkg.calculate_tax(p_tax_lines_tbl => l_tax_lines_tbl
,pv_process_status =>
lv_return_status
,pv_process_message =>
lv_process_message);

IF lv_return_status <> FND_API.G_RET_STS_SUCCESS THEN


pv_process_status := lv_return_status;
pv_process_message := lv_process_message;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'calculate_tax return status:' || pv_process_status);
END IF;
RAISE FND_API.G_EXC_UNEXPECTED_ERROR;

END IF;

FOR i IN l_tax_lines_tbl.first .. l_tax_lines_tbl.last LOOP


ln_exemption_hdr_id := NULL;
ln_exemption_hdr_id := get_exemption_hdr_id(pn_org_id =>
l_tax_lines_tbl(i).org_id
,pn_organization_id =>
l_tax_lines_tbl(i).organization_id
,pn_location_id =>
l_tax_lines_tbl(i).location_id
,pn_regime_id =>
l_tax_lines_tbl(i).tax_regime_id
,pv_first_party_reg_type =>
l_tax_lines_tbl(i)

.first_party_primary_reg_name
,pv_first_party_reg_num =>
l_tax_lines_tbl(i)

.first_party_primary_reg_num
,pv_exemption_type =>
pv_exemption_type
,pv_tracking_num =>
pv_tracking_num
,pn_tax_type_id =>
l_tax_lines_tbl(i).tax_type_id);
IF ln_exemption_hdr_id IS NOT NULL THEN

l_tax_lines_tbl(i).exemption_hdr_id := ln_exemption_hdr_id;
l_tax_lines_tbl(i).tax_amt_before_exemption :=
l_tax_lines_tbl(i).unround_tax_amt_fun_curr;
l_tax_lines_tbl(i).exemption_type := pv_exemption_type;
l_tax_lines_tbl(i).exemption_num := pv_exemption_num;
l_tax_lines_tbl(i).exemption_date := pd_exemption_date;
l_tax_lines_tbl(i).tracking_num := pv_tracking_num;
l_tax_lines_tbl(i).proof_of_export_num := pv_proof_exp_num;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'ln_exemption_hdr_id:' || ln_exemption_hdr_id);
END IF;
END IF;

END LOOP;

jai_tax_determination_pkg.calculate_tax(p_tax_lines_tbl => l_tax_lines_tbl


,pv_process_status =>
lv_return_status
,pv_process_message =>
lv_process_message);

IF lv_return_status <> FND_API.G_RET_STS_SUCCESS THEN


pv_process_status := lv_return_status;
pv_process_message := lv_process_message;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'calculate_tax return status:' || pv_process_status);
END IF;
RAISE FND_API.G_EXC_UNEXPECTED_ERROR;

END IF;
/*---------------------------------------
| delete tax lines |
| populate tax lines after calculation.|
---------------------------------------*/
UPDATE jai_tax_det_factors
SET user_modified_flag = 'Y'
WHERE det_factor_id = pn_det_factor_id;
jai_tax_determination_pkg.delete_tax_lines(pn_det_factor_id);
jai_tax_determination_pkg.populate_tax_lines(p_tax_lines_tbl =>
l_tax_lines_tbl
,pv_process_status =>
lv_return_status
,pv_process_message =>
lv_process_message);

IF lv_return_status <> FND_API.G_RET_STS_SUCCESS THEN


pv_process_status := lv_return_status;
pv_process_message := lv_process_message;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'populate_tax_lines return status:' || pv_process_status
|| 'message:' || lv_process_message);
END IF;
RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
END IF;
--for AR Distribution begin
OPEN c_det_factor;
FETCH c_det_factor
INTO l_det_factor;
CLOSE c_det_factor;

IF (G_LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_STATEMENT
,G_MODULE_NAME || lv_api_name
,'APPLICATION_ID : ' || l_det_factor.application_id || ',
TRX_ID : ' || l_det_factor.trx_id ||
', ENTITY_CODE : ' || l_det_factor.entity_code || ',
EVENT_CLASS_CODE :' ||
l_det_factor.event_class_code);
END IF;
jai_tax_determination_pkg.jai_update_tax_dist(p_det_factor_id =>
pn_det_factor_id
,p_trx_id =>
l_det_factor.trx_id
,p_application_id =>
l_det_factor.application_id
,p_entity_code =>
l_det_factor.entity_code
,p_event_class_code =>
l_det_factor.event_class_code
,p_tax_lines_tbl =>
l_tax_lines_tbl
,x_process_status =>
lv_return_status
,x_process_message =>
lv_process_message);

IF lv_return_status <> FND_API.G_RET_STS_SUCCESS THEN


pv_process_status := lv_return_status;
pv_process_message := lv_process_message;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'update_tax_dist return status:' || pv_process_status ||
', message:' || pv_process_message);
END IF;
RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
END IF;
OPEN c_proof_rcv_date;
FETCH c_proof_rcv_date
INTO ld_proof_rcv_date;
CLOSE c_proof_rcv_date;

IF ld_proof_rcv_date IS NULL
AND pd_proof_rcv_date IS NOT NULL THEN
UPDATE jai_tax_lines
SET proof_received_date = pd_proof_rcv_date
,proof_of_export_num = pv_proof_exp_num
WHERE det_factor_id = pn_det_factor_id
AND exemption_hdr_id IS NOT NULL;
jai_tax_exemption_pkg.restore_balance(pn_det_factor_id =>
pn_det_factor_id
,pd_proof_rcv_date =>
pd_proof_rcv_date
,pv_process_status =>
lv_return_status
,pv_process_message =>
lv_process_message);
IF lv_return_status <> FND_API.G_RET_STS_SUCCESS THEN
pv_process_status := lv_return_status;
pv_process_message := lv_process_message;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'restore_balance return status:' || pv_process_status ||
', message:' || pv_process_message);
END IF;
RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
END IF;
END IF;
END IF;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()-');

END IF;

END determine_exemption;
PROCEDURE batch_determine_exemption
(
pv_entity_code IN VARCHAR2
,pn_trx_id IN NUMBER
,pv_exemption_type IN VARCHAR2
,pv_tracking_num IN VARCHAR2
,pv_exemption_num IN VARCHAR2
,pd_exemption_date IN DATE
,pv_proof_exp_num IN VARCHAR2
,pd_proof_rcv_date IN DATE
,pv_process_status OUT NOCOPY VARCHAR2
,pv_process_message OUT NOCOPY VARCHAR2
) IS
CURSOR c_det_factors IS
SELECT det_factor_id
FROM jai_tax_det_factors det
WHERE entity_code = pv_entity_code
AND trx_id = pn_trx_id
AND NOT EXISTS (SELECT 1
FROM jai_tax_lines tl
WHERE tl.proof_received_date IS NOT NULL
AND tl.det_factor_id = det.det_factor_id)
-- added by zhiwei.xin for bug#19471420 begin
AND NOT EXISTS (SELECT 1
FROM oe_order_lines_all
WHERE line_id = det.trx_line_id
AND header_id = det.trx_id
AND line_category_code = 'RETURN'
AND det.entity_code = 'OE_ORDER_HEADERS')
-- added by zhiwei.xin for bug#19471420 end.
;
lv_process_status VARCHAR2(30);
lv_process_message VARCHAR2(150);
lv_api_name CONSTANT VARCHAR2(50) := 'batch_determine_exemption';
BEGIN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----Begin----' || '()+');
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Input parameters: pn_trx_id :' || pn_trx_id || '
,pv_entity_code:' || pv_entity_code ||
',pv_exemption_type:' || pv_exemption_type || '
,pv_tracking_num :' || pv_tracking_num ||
' ,pv_exemption_num:' || pv_exemption_num || '
,pd_exemption_date:' || pd_exemption_date ||
' ,pv_proof_exp_num:' || pv_proof_exp_num || '
,pd_proof_rcv_date:' || pd_proof_rcv_date);
END IF;
FOR rec_det_factor IN c_det_factors LOOP
determine_exemption(pn_det_factor_id => rec_det_factor.det_factor_id
,pv_exemption_type => pv_exemption_type
,pv_tracking_num => pv_tracking_num
,pv_exemption_num => pv_exemption_num
,pd_exemption_date => pd_exemption_date
,pv_proof_exp_num => pv_proof_exp_num
,pd_proof_rcv_date => pd_proof_rcv_date
,pv_process_status => lv_process_status
,pv_process_message => lv_process_message);
END LOOP;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()-');

END IF;
END batch_determine_exemption;
--Added by Wenqiong for exemption end
--Added by Wenqiong for bug19244914 begin
PROCEDURE calculate_tax_for_last
(
pn_det_factor_id IN NUMBER
,p_tax_lines_tbl IN OUT NOCOPY tax_lines_tbl
,pv_call_from IN VARCHAR2 DEFAULT NULL
,pv_processed_flag OUT NOCOPY VARCHAR2
,pv_process_status OUT NOCOPY VARCHAR2
,pv_process_message OUT NOCOPY VARCHAR2

) IS
CURSOR c_det_factor IS
SELECT tax_determination_basis
,trx_line_quantity
,tax_confirmed_flag
,applied_from_application_id
,applied_from_entity_code
,applied_from_event_class_code
,applied_from_trx_id
,applied_from_trx_line_id
,applied_from_trx_type
,applied_from_loc_line_id
,applied_from_trx_level_type
,applied_to_application_id
,applied_to_entity_code
,applied_to_event_class_code
,applied_to_trx_id
,applied_to_trx_line_id
,applied_to_trx_type
,applied_to_loc_line_id
,applied_to_trx_level_type
,ref_doc_application_id
,entity_code --Added by Rishin For Bug# 26624470 -- NULL
org_id issue for Partial BOE creation
,TRX_UOM_CODE --AELLURU
FROM jai_tax_det_factors
WHERE det_factor_id = pn_det_factor_id
AND nvl(pv_call_from
,'BASE') <> 'INTERFACE'
UNION
SELECT tax_determination_basis
,trx_line_quantity
,tax_confirmed_flag
,applied_from_application_id
,applied_from_entity_code
,applied_from_event_class_code
,applied_from_trx_id
,applied_from_trx_line_id
,applied_from_trx_type
,applied_from_loc_line_id
,applied_from_trx_level_type
,applied_to_application_id
,applied_to_entity_code
,applied_to_event_class_code
,applied_to_trx_id
,applied_to_trx_line_id
,applied_to_trx_type
,applied_to_loc_line_id
,applied_to_trx_level_type
,ref_doc_application_id
,entity_code --Added by Rishin For Bug# 26624470 -- NULL org_id issue
for Partial BOE creation
,TRX_UOM_CODE
FROM jai_det_factors_interface
WHERE interface_det_factor_id = pn_det_factor_id
AND pv_call_from = 'INTERFACE';

rec_det_factor c_det_factor%ROWTYPE;

CURSOR c_source_qty
(
cn_application_id NUMBER
,cv_entity_code VARCHAR2
,cv_event_class_code VARCHAR2
,cn_trx_id NUMBER
,cn_trx_line_id NUMBER
,cn_trx_loc_line_id NUMBER
,cv_trx_level_type VARCHAR2
,cv_trx_type VARCHAR2
) IS
SELECT det_factor_id
,trx_line_quantity
FROM jai_tax_det_factors
WHERE application_id = cn_application_id
AND entity_code = cv_entity_code
AND event_class_code = cv_event_class_code
AND trx_id = cn_trx_id
AND (trx_line_id = nvl(cn_trx_line_id
,trx_line_id) OR
nvl(trx_line_id
,-1) = nvl(cn_trx_line_id
,-1))
AND nvl(trx_level_type
,'X') = nvl(cv_trx_level_type
,nvl(trx_level_type
,'X'))
AND (trx_loc_line_id = nvl(cn_trx_loc_line_id
,trx_loc_line_id) OR
nvl(trx_loc_line_id
,-1) = nvl(cn_trx_loc_line_id
,-1))
AND nvl(trx_type
,'X') = nvl(cv_trx_type
,nvl(trx_type
,'X'));
CURSOR c_total_qty_applied_from
(
cn_application_id NUMBER
,cv_entity_code VARCHAR2
,cv_event_class_code VARCHAR2
,cn_trx_id NUMBER
,cn_trx_line_id NUMBER
,cn_trx_loc_line_id NUMBER
,cv_trx_level_type VARCHAR2
,cv_trx_type VARCHAR2
) IS
SELECT SUM(nvl(trx_line_quantity
,0))
FROM jai_tax_det_factors
WHERE applied_from_application_id = cn_application_id
AND applied_from_entity_code = cv_entity_code
AND applied_from_event_class_code = cv_event_class_code
AND applied_from_trx_id = cn_trx_id
AND (applied_from_trx_line_id = nvl(cn_trx_line_id
,applied_from_trx_line_id) OR
nvl(applied_from_trx_line_id
,-1) = nvl(cn_trx_line_id
,-1))
AND nvl(applied_from_trx_level_type
,'X') = nvl(cv_trx_level_type
,nvl(applied_from_trx_level_type
,'X'))
AND (applied_from_loc_line_id = nvl(cn_trx_loc_line_id
,applied_from_loc_line_id) OR
nvl(applied_from_loc_line_id
,-1) = nvl(cn_trx_loc_line_id
,-1))
AND nvl(applied_from_trx_type
,'X') = nvl(cv_trx_type
,nvl(applied_from_trx_type
,'X'))
AND det_factor_id <> pn_det_factor_id;

CURSOR c_total_qty_applied_to
(
cn_application_id NUMBER
,cv_entity_code VARCHAR2
,cv_event_class_code VARCHAR2
,cn_trx_id NUMBER
,cn_trx_line_id NUMBER
,cn_trx_loc_line_id NUMBER
,cv_trx_level_type VARCHAR2
,cv_trx_type VARCHAR2
) IS
SELECT SUM(nvl(trx_line_quantity
,0))
FROM jai_tax_det_factors
WHERE applied_to_application_id = cn_application_id
AND applied_to_entity_code = cv_entity_code
AND applied_to_event_class_code = cv_event_class_code
AND applied_to_trx_id = cn_trx_id
AND (applied_to_trx_line_id = nvl(cn_trx_line_id
,applied_to_trx_line_id) OR
nvl(applied_to_trx_line_id
,-1) = nvl(cn_trx_line_id
,-1))
AND nvl(applied_to_trx_level_type
,'X') = nvl(cv_trx_level_type
,nvl(applied_to_trx_level_type
,'X'))
AND (applied_to_loc_line_id = nvl(cn_trx_loc_line_id
,applied_to_loc_line_id) OR
nvl(applied_to_loc_line_id
,-1) = nvl(cn_trx_loc_line_id
,-1))
AND nvl(applied_to_trx_type
,'X') = nvl(cv_trx_type
,nvl(applied_to_trx_type
,'X'))
AND det_factor_id <> pn_det_factor_id;
CURSOR c_parent_tax_line
(
cn_det_factor_id NUMBER
,cn_line_num NUMBER
,cn_tax_rate_id NUMBER --AELLURU 27713295
) IS
SELECT *
FROM jai_tax_lines
WHERE det_factor_id = cn_det_factor_id
AND tax_line_num = cn_line_num
AND tax_rate_id =cn_tax_rate_id --AELLURU 27713295
AND tax_rate_type NOT IN ('ADHOC_AMOUNT','UNIT_OF_MEASURE_ADHOC');
-- 27838004
-- FOR ADHOC AMOUNT IS USER ENTERABLE AND WE SHOULD NOT EDIT AFTER CLICKING
APPLY
-- FOR FOR ADHOC TAXES THIS PROCESS IS NOT APPLICABLE

CURSOR c_total_taxes_applied_from
(
cn_application_id NUMBER
,cv_entity_code VARCHAR2
,cv_event_class_code VARCHAR2
,cn_trx_id NUMBER
,cn_trx_line_id NUMBER
,cn_trx_loc_line_id NUMBER
,cv_trx_level_type VARCHAR2
,cv_trx_type VARCHAR2
,cn_line_num NUMBER
,cn_det_factor_id NUMBER
,cn_tax_rate_id NUMBER -- AELLURU 27713295
) IS
SELECT SUM(nvl(unrounded_uom_conv_qty
,0)) unrounded_uom_conv_qty
,SUM(nvl(rounded_quantity
,0)) rounded_quantity
,SUM(nvl(line_assessable_value
,0)) line_assessable_value
,SUM(nvl(unround_taxable_amt_fun_curr
,0)) unround_taxable_amt_fun_curr
,SUM(nvl(rounded_taxable_amt_fun_curr
,0)) rounded_taxable_amt_fun_curr
,SUM(nvl(unround_tax_amt_fun_curr
,0)) unround_tax_amt_fun_curr
,SUM(nvl(rounded_tax_amt_fun_curr
,0)) rounded_tax_amt_fun_curr
,SUM(nvl(taxable_basis
,0)) taxable_basis
,SUM(nvl(unround_tax_amt_trx_curr
,0)) unround_tax_amt_trx_curr
,SUM(nvl(unround_tax_amt_tax_curr
,0)) unround_tax_amt_tax_curr
,SUM(nvl(rounded_tax_amt_trx_curr
,0)) rounded_tax_amt_trx_curr
,SUM(nvl(rounded_tax_amt_tax_curr
,0)) rounded_tax_amt_tax_curr
,SUM(nvl(unround_taxable_amt_trx_curr
,0)) unround_taxable_amt_trx_curr
,SUM(nvl(unround_taxable_amt_tax_curr
,0)) unround_taxable_amt_tax_curr
,SUM(nvl(rounded_taxable_amt_trx_curr
,0)) rounded_taxable_amt_trx_curr
,SUM(nvl(rounded_taxable_amt_tax_curr
,0)) rounded_taxable_amt_tax_curr
,SUM(nvl(rec_tax_amt_funcl_curr
,0)) rec_tax_amt_funcl_curr
,SUM(nvl(nrec_tax_amt_funcl_curr
,0)) nrec_tax_amt_funcl_curr
,SUM(nvl(rec_tax_amt_trx_curr
,0)) rec_tax_amt_trx_curr
,SUM(nvl(rec_tax_amt_tax_curr
,0)) rec_tax_amt_tax_curr
,SUM(nvl(nrec_tax_amt_trx_curr
,0)) nrec_tax_amt_trx_curr
,SUM(nvl(nrec_tax_amt_tax_curr
,0)) nrec_tax_amt_tax_curr
FROM jai_tax_lines tl
WHERE EXISTS
(SELECT 1
FROM jai_tax_det_factors det
WHERE tl.det_factor_id = det.det_factor_id
AND det.applied_from_application_id = cn_application_id
AND det.applied_from_entity_code = cv_entity_code
AND det.applied_from_event_class_code = cv_event_class_code
AND det.applied_from_trx_id = cn_trx_id
AND (det.applied_from_trx_line_id = nvl(cn_trx_line_id

,det.applied_from_trx_line_id) OR
nvl(det.applied_from_trx_line_id
,-1) = nvl(cn_trx_line_id
,-1))
AND nvl(det.applied_from_trx_level_type
,'X') = nvl(cv_trx_level_type
,nvl(det.applied_from_trx_level_type
,'X'))
AND (det.applied_from_loc_line_id = nvl(cn_trx_loc_line_id

,det.applied_from_loc_line_id) OR
nvl(det.applied_from_loc_line_id
,-1) = nvl(cn_trx_loc_line_id
,-1))
AND nvl(det.applied_from_trx_type
,'X') = nvl(cv_trx_type
,nvl(det.applied_from_trx_type
,'X')))
AND tax_line_num = cn_line_num
AND det_factor_id <> cn_det_factor_id
AND tax_rate_id =cn_tax_rate_id; --AELLURU 27713295

CURSOR c_total_taxes_applied_to
(
cn_application_id NUMBER
,cv_entity_code VARCHAR2
,cv_event_class_code VARCHAR2
,cn_trx_id NUMBER
,cn_trx_line_id NUMBER
,cn_trx_loc_line_id NUMBER
,cv_trx_level_type VARCHAR2
,cv_trx_type VARCHAR2
,cn_line_num NUMBER
,cn_det_factor_id NUMBER
,cn_tax_rate_id NUMBER --AELLURU 27713295
) IS
SELECT SUM(nvl(unrounded_uom_conv_qty
,0)) unrounded_uom_conv_qty
,SUM(nvl(rounded_quantity
,0)) rounded_quantity
,SUM(nvl(line_assessable_value
,0)) line_assessable_value
,SUM(nvl(unround_taxable_amt_fun_curr
,0)) unround_taxable_amt_fun_curr
,SUM(nvl(rounded_taxable_amt_fun_curr
,0)) rounded_taxable_amt_fun_curr
,SUM(nvl(unround_tax_amt_fun_curr
,0)) unround_tax_amt_fun_curr
,SUM(nvl(rounded_tax_amt_fun_curr
,0)) rounded_tax_amt_fun_curr
,SUM(nvl(taxable_basis
,0)) taxable_basis
,SUM(nvl(unround_tax_amt_trx_curr
,0)) unround_tax_amt_trx_curr
,SUM(nvl(unround_tax_amt_tax_curr
,0)) unround_tax_amt_tax_curr
,SUM(nvl(rounded_tax_amt_trx_curr
,0)) rounded_tax_amt_trx_curr
,SUM(nvl(rounded_tax_amt_tax_curr
,0)) rounded_tax_amt_tax_curr
,SUM(nvl(unround_taxable_amt_trx_curr
,0)) unround_taxable_amt_trx_curr
,SUM(nvl(unround_taxable_amt_tax_curr
,0)) unround_taxable_amt_tax_curr
,SUM(nvl(rounded_taxable_amt_trx_curr
,0)) rounded_taxable_amt_trx_curr
,SUM(nvl(rounded_taxable_amt_tax_curr
,0)) rounded_taxable_amt_tax_curr
,SUM(nvl(rec_tax_amt_funcl_curr
,0)) rec_tax_amt_funcl_curr
,SUM(nvl(nrec_tax_amt_funcl_curr
,0)) nrec_tax_amt_funcl_curr
,SUM(nvl(rec_tax_amt_trx_curr
,0)) rec_tax_amt_trx_curr
,SUM(nvl(rec_tax_amt_tax_curr
,0)) rec_tax_amt_tax_curr
,SUM(nvl(nrec_tax_amt_trx_curr
,0)) nrec_tax_amt_trx_curr
,SUM(nvl(nrec_tax_amt_tax_curr
,0)) nrec_tax_amt_tax_curr
FROM jai_tax_lines tl
WHERE EXISTS
(SELECT 1
FROM jai_tax_det_factors det
WHERE tl.det_factor_id = det.det_factor_id
AND det.applied_to_application_id = cn_application_id
AND det.applied_to_entity_code = cv_entity_code
AND det.applied_to_event_class_code = cv_event_class_code
AND det.applied_to_trx_id = cn_trx_id
AND (det.applied_to_trx_line_id = nvl(cn_trx_line_id
,det.applied_to_trx_line_id)
OR
nvl(det.applied_to_trx_line_id
,-1) = nvl(cn_trx_line_id
,-1))
AND nvl(det.applied_to_trx_level_type
,'X') = nvl(cv_trx_level_type
,nvl(det.applied_to_trx_level_type
,'X'))
AND (det.applied_to_loc_line_id = nvl(cn_trx_loc_line_id
,det.applied_to_loc_line_id)
OR
nvl(det.applied_to_loc_line_id
,-1) = nvl(cn_trx_loc_line_id
,-1))
AND nvl(det.applied_to_trx_type
,'X') = nvl(cv_trx_type
,nvl(det.applied_to_trx_type
,'X')))
AND tax_line_num = cn_line_num
AND det_factor_id <> cn_det_factor_id
AND tax_rate_id =cn_tax_rate_id; --AELLURU 27713295
ln_parent_det_factor_id NUMBER;
ln_src_application_id jai_tax_det_factors.application_id%TYPE;
lv_src_entity_code jai_tax_det_factors.entity_code%TYPE;
lv_src_event_class_code jai_tax_det_factors.event_class_code%TYPE;
ln_src_trx_id jai_tax_det_factors.trx_id%TYPE;
ln_src_trx_line_id jai_tax_det_factors.trx_line_id%TYPE;
lv_src_trx_type jai_tax_det_factors.trx_type%TYPE;
ln_src_loc_line_id jai_tax_det_factors.trx_loc_line_id%TYPE;
lv_src_trx_level_type jai_tax_det_factors.trx_level_type%TYPE;

ln_parent_qty NUMBER;
ln_curr_qty NUMBER;
ln_children_qty NUMBER;
rec_jai_tax_line jai_tax_lines%ROWTYPE;
rec_parent_tax_line jai_tax_lines%ROWTYPE;
rec_total_taxes_applied_from c_total_taxes_applied_from%ROWTYPE;
rec_total_taxes_applied_to c_total_taxes_applied_to%ROWTYPE;
lv_api_name CONSTANT VARCHAR2(50) := 'calculate_tax_for_last';

BEGIN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----Begin----' || '()+');
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'pn_det_factor_id:' || pn_det_factor_id || 'Count of
p_tax_lines_tbl:' || p_tax_lines_tbl.count);
END IF;

pv_process_status := FND_API.G_RET_STS_SUCCESS;
pv_processed_flag := 'N';
OPEN c_det_factor;
FETCH c_det_factor
INTO rec_det_factor;
CLOSE c_det_factor;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'tax_determination_basis:' ||
rec_det_factor.tax_determination_basis);
END IF;

IF rec_det_factor.tax_determination_basis =
jai_tax_determination_pkg.copy_basis THEN
--Get parent trx
IF rec_det_factor.applied_from_application_id IS NOT NULL THEN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'Parent trx comes from applied from.');
END IF;
--copy from applied from document's taxes no matter the taxes modified or
not.
ln_src_application_id := rec_det_factor.applied_from_application_id;
lv_src_entity_code := rec_det_factor.applied_from_entity_code;
lv_src_event_class_code := rec_det_factor.applied_from_event_class_code;
ln_src_trx_id := rec_det_factor.applied_from_trx_id;
ln_src_trx_line_id := rec_det_factor.applied_from_trx_line_id;
lv_src_trx_type := rec_det_factor.applied_from_trx_type;
ln_src_loc_line_id := rec_det_factor.applied_from_loc_line_id;
lv_src_trx_level_type := rec_det_factor.applied_from_trx_level_type;

OPEN c_total_qty_applied_from(ln_src_application_id
,lv_src_entity_code
,lv_src_event_class_code
,ln_src_trx_id
,ln_src_trx_line_id
,ln_src_loc_line_id
,lv_src_trx_level_type
,lv_src_trx_type);
FETCH c_total_qty_applied_from
INTO ln_children_qty;
CLOSE c_total_qty_applied_from;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'children_qty:' || ln_children_qty);
END IF;
ELSIF rec_det_factor.applied_to_application_id IS NOT NULL THEN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'Parent trx comes from applied to.');
END IF;
--copy from applied to document's taxes no matter the taxes modified or
not.
ln_src_application_id := rec_det_factor.applied_to_application_id;
lv_src_entity_code := rec_det_factor.applied_to_entity_code;
lv_src_event_class_code := rec_det_factor.applied_to_event_class_code;
ln_src_trx_id := rec_det_factor.applied_to_trx_id;
ln_src_trx_line_id := rec_det_factor.applied_to_trx_line_id;
lv_src_trx_type := rec_det_factor.applied_to_trx_type;
ln_src_loc_line_id := rec_det_factor.applied_to_loc_line_id;
lv_src_trx_level_type := rec_det_factor.applied_to_trx_level_type;
OPEN c_total_qty_applied_to(ln_src_application_id
,lv_src_entity_code
,lv_src_event_class_code
,ln_src_trx_id
,ln_src_trx_line_id
,ln_src_loc_line_id
,lv_src_trx_level_type
,lv_src_trx_type);
FETCH c_total_qty_applied_to
INTO ln_children_qty;
CLOSE c_total_qty_applied_to;

ELSIF rec_det_factor.ref_doc_application_id IS NOT NULL THEN


IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'Parent trx comes from refer to doc.');
END IF;
--need to think of any copy cases in ref columns need consider.
--copy from reference document's taxes since the taxes modified.
RETURN;
/* ln_src_application_id :=
rec_det_factor.ref_doc_application_id ;
lv_src_entity_code := rec_det_factor.ref_doc_entity_code
;
lv_src_event_class_code :=
rec_det_factor.ref_doc_event_class_code ;
ln_src_trx_id := rec_det_factor.ref_doc_trx_id
;
ln_src_trx_line_id := rec_det_factor.ref_doc_line_id
;
lv_src_trx_type := rec_det_factor.ref_doc_trx_type
;
ln_src_loc_line_id := rec_det_factor.ref_doc_loc_line_id
;
lv_src_trx_level_type := rec_det_factor.ref_doc_trx_level_type
;
*/
END IF;

--Get quantity of parent trx


OPEN c_source_qty(ln_src_application_id
,lv_src_entity_code
,lv_src_event_class_code
,ln_src_trx_id
,ln_src_trx_line_id
,ln_src_loc_line_id
,lv_src_trx_level_type
,lv_src_trx_type);
FETCH c_source_qty
INTO ln_parent_det_factor_id
,ln_parent_qty;
CLOSE c_source_qty;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || 'ln_parent_det_factor_id:' ||
ln_parent_det_factor_id || 'ln_parent_qty:' ||
ln_parent_qty);
END IF;
ln_curr_qty := rec_det_factor.trx_line_quantity;
--compare current quantity with parent quantity
IF ln_curr_qty <> ln_parent_qty
AND (ln_children_qty + ln_curr_qty) = ln_parent_qty THEN
IF rec_det_factor.entity_code <> 'BILL_OF_ENTRY' THEN -- Condition
Added by Rishin For Bug# 26624470 -- NULL org_id issue for Partial BOE creation
pv_processed_flag := 'Y';
END IF ;
--Check if sum of quantity for the same parent(including current) =
ln_parent_qty , which means it's the last one

--Get parent's tax lines


--Get total of tax lines for the same parent (exclude current)
--parent - total of children = current
FOR i IN p_tax_lines_tbl.first .. p_tax_lines_tbl.last LOOP

rec_jai_tax_line := p_tax_lines_tbl(i);
jai_tax_determination_pkg.log_tax_line(rec_jai_tax_line);
rec_parent_tax_line :=NULL; --27713295
rec_total_taxes_applied_from :=NULL; --27713295
rec_total_taxes_applied_to :=NULL; --27713295

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'No.' || i || ' record. tax rate is:' ||
p_tax_lines_tbl(i).tax_rate_id ||
'line_num :'||
rec_jai_tax_line.tax_line_num);
END IF;
OPEN c_parent_tax_line(ln_parent_det_factor_id
,rec_jai_tax_line.tax_line_num
,p_tax_lines_tbl(i).tax_rate_id );-
-27713295

FETCH c_parent_tax_line
INTO rec_parent_tax_line;
CLOSE c_parent_tax_line;

----27713295 As there is no parent reference we need to calucalte tax


on normal logic
IF (rec_parent_tax_line.tax_line_id IS NULL)
THEN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL)
THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Parent tax is not available:' );

END IF;
--28068816
pv_processed_flag := 'N';
RETURN;
----27713295
END IF;
IF rec_det_factor.applied_from_application_id IS NOT NULL THEN
OPEN c_total_taxes_applied_from(ln_src_application_id
,lv_src_entity_code
,lv_src_event_class_code
,ln_src_trx_id
,ln_src_trx_line_id
,ln_src_loc_line_id
,lv_src_trx_level_type
,lv_src_trx_type
,rec_jai_tax_line.tax_line_num
,pn_det_factor_id

,p_tax_lines_tbl(i).tax_rate_id );--AELLURU 27713295


FETCH c_total_taxes_applied_from
INTO rec_total_taxes_applied_from;
CLOSE c_total_taxes_applied_from;
ELSIF rec_det_factor.applied_to_application_id IS NOT NULL THEN
OPEN c_total_taxes_applied_to(ln_src_application_id
,lv_src_entity_code
,lv_src_event_class_code
,ln_src_trx_id
,ln_src_trx_line_id
,ln_src_loc_line_id
,lv_src_trx_level_type
,lv_src_trx_type
,rec_jai_tax_line.tax_line_num
,pn_det_factor_id

,p_tax_lines_tbl(i).tax_rate_id );--AELLURU --27713295


FETCH c_total_taxes_applied_to
INTO rec_total_taxes_applied_to;
CLOSE c_total_taxes_applied_to;
END IF;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'parent tax line :');
END IF;
jai_tax_determination_pkg.log_tax_line(rec_parent_tax_line);
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'sum of unround_tax_amt_fun_curr :' ||
rec_total_taxes_applied_from.unround_tax_amt_fun_curr ||
'sum of rounded_tax_amt_fun_curr :' ||
rec_total_taxes_applied_from.rounded_tax_amt_fun_curr);
END IF;
IF (NVL(rec_parent_tax_line.TRX_CURRENCY_CODE,'INR')
=NVL(rec_jai_tax_line.TRX_CURRENCY_CODE,'INR')
AND
NVL(rec_parent_tax_line.TAX_CURRENCY_CODE,'INR')=NVL(rec_parent_tax_line.TAX_CURREN
CY_CODE,'INR'))
THEN --AELLURU GE 27490563
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Inside Same currency');
END IF;
rec_jai_tax_line.unrounded_uom_conv_qty :=
rec_parent_tax_line.unrounded_uom_conv_qty -

nvl(rec_total_taxes_applied_from.unrounded_uom_conv_qty
,rec_total_taxes_applied_to.unrounded_uom_conv_qty);
rec_jai_tax_line.rounded_quantity :=
rec_parent_tax_line.rounded_quantity -

nvl(rec_total_taxes_applied_from.rounded_quantity

,rec_total_taxes_applied_to.rounded_quantity);
rec_jai_tax_line.line_assessable_value :=
rec_parent_tax_line.line_assessable_value -

nvl(rec_total_taxes_applied_from.line_assessable_value

,rec_total_taxes_applied_to.line_assessable_value);
rec_jai_tax_line.unround_taxable_amt_fun_curr :=
rec_parent_tax_line.unround_taxable_amt_fun_curr -

nvl(rec_total_taxes_applied_from.unround_taxable_amt_fun_curr

,rec_total_taxes_applied_to.unround_taxable_amt_fun_curr);
rec_jai_tax_line.rounded_taxable_amt_fun_curr :=
rec_parent_tax_line.rounded_taxable_amt_fun_curr -

nvl(rec_total_taxes_applied_from.rounded_taxable_amt_fun_curr

,rec_total_taxes_applied_to.rounded_taxable_amt_fun_curr);
rec_jai_tax_line.unround_tax_amt_fun_curr :=
rec_parent_tax_line.unround_tax_amt_fun_curr -

nvl(rec_total_taxes_applied_from.unround_tax_amt_fun_curr

,rec_total_taxes_applied_to.unround_tax_amt_fun_curr);
rec_jai_tax_line.rounded_tax_amt_fun_curr :=
rec_parent_tax_line.rounded_tax_amt_fun_curr -

nvl(rec_total_taxes_applied_from.rounded_tax_amt_fun_curr

,rec_total_taxes_applied_to.rounded_tax_amt_fun_curr);
rec_jai_tax_line.taxable_basis :=
rec_parent_tax_line.taxable_basis -

nvl(rec_total_taxes_applied_from.taxable_basis

,rec_total_taxes_applied_to.taxable_basis);
rec_jai_tax_line.unround_tax_amt_trx_curr :=
rec_parent_tax_line.unround_tax_amt_trx_curr -

nvl(rec_total_taxes_applied_from.unround_tax_amt_trx_curr

,rec_total_taxes_applied_to.unround_tax_amt_trx_curr);
-------------- Modified for Bug# 26670612 ( Start ) ---------------
/*
rec_jai_tax_line.unround_tax_amt_tax_curr :=
rec_parent_tax_line.unround_tax_amt_tax_curr -

nvl(rec_total_taxes_applied_from.unround_tax_amt_tax_curr

,rec_total_taxes_applied_to.unround_tax_amt_tax_curr);
*/
IF rec_jai_tax_line.tax_rate_type in ('ADHOC_AMOUNT') THEN
rec_jai_tax_line.unround_tax_amt_tax_curr :=
rec_jai_tax_line.unround_tax_amt_tax_curr;
ELSE
rec_jai_tax_line.unround_tax_amt_tax_curr :=
rec_parent_tax_line.unround_tax_amt_tax_curr -

nvl(rec_total_taxes_applied_from.unround_tax_amt_tax_curr

,rec_total_taxes_applied_to.unround_tax_amt_tax_curr);
END IF;
-------------- Modified for Bug# 26670612 ( End ) ---------------
rec_jai_tax_line.rounded_tax_amt_trx_curr :=
rec_parent_tax_line.rounded_tax_amt_trx_curr -

nvl(rec_total_taxes_applied_from.rounded_tax_amt_trx_curr

,rec_total_taxes_applied_to.rounded_tax_amt_trx_curr);
rec_jai_tax_line.rounded_tax_amt_tax_curr :=
rec_parent_tax_line.rounded_tax_amt_tax_curr -

nvl(rec_total_taxes_applied_from.rounded_tax_amt_tax_curr

,rec_total_taxes_applied_to.rounded_tax_amt_tax_curr);
rec_jai_tax_line.unround_taxable_amt_trx_curr :=
rec_parent_tax_line.unround_taxable_amt_trx_curr -

nvl(rec_total_taxes_applied_from.unround_taxable_amt_trx_curr

,rec_total_taxes_applied_to.unround_taxable_amt_trx_curr);
rec_jai_tax_line.unround_taxable_amt_tax_curr :=
rec_parent_tax_line.unround_taxable_amt_tax_curr -

nvl(rec_total_taxes_applied_from.unround_taxable_amt_tax_curr

,rec_total_taxes_applied_to.unround_taxable_amt_tax_curr);
rec_jai_tax_line.rounded_taxable_amt_trx_curr :=
rec_parent_tax_line.rounded_taxable_amt_trx_curr -

nvl(rec_total_taxes_applied_from.rounded_taxable_amt_trx_curr

,rec_total_taxes_applied_to.rounded_taxable_amt_trx_curr);
rec_jai_tax_line.rounded_taxable_amt_tax_curr :=
rec_parent_tax_line.rounded_taxable_amt_tax_curr -

nvl(rec_total_taxes_applied_from.rounded_taxable_amt_tax_curr

,rec_total_taxes_applied_to.rounded_taxable_amt_tax_curr);
rec_jai_tax_line.rec_tax_amt_funcl_curr :=
rec_parent_tax_line.rec_tax_amt_funcl_curr -

nvl(rec_total_taxes_applied_from.rec_tax_amt_funcl_curr

,rec_total_taxes_applied_to.rec_tax_amt_funcl_curr);
rec_jai_tax_line.nrec_tax_amt_funcl_curr :=
rec_parent_tax_line.nrec_tax_amt_funcl_curr -

nvl(rec_total_taxes_applied_from.nrec_tax_amt_funcl_curr
,rec_total_taxes_applied_to.nrec_tax_amt_funcl_curr);
rec_jai_tax_line.rec_tax_amt_trx_curr :=
rec_parent_tax_line.rec_tax_amt_trx_curr -

nvl(rec_total_taxes_applied_from.rec_tax_amt_trx_curr

,rec_total_taxes_applied_to.rec_tax_amt_trx_curr);
rec_jai_tax_line.rec_tax_amt_tax_curr :=
rec_parent_tax_line.rec_tax_amt_tax_curr -

nvl(rec_total_taxes_applied_from.rec_tax_amt_tax_curr

,rec_total_taxes_applied_to.rec_tax_amt_tax_curr);
rec_jai_tax_line.nrec_tax_amt_trx_curr :=
rec_parent_tax_line.nrec_tax_amt_trx_curr -

nvl(rec_total_taxes_applied_from.nrec_tax_amt_trx_curr

,rec_total_taxes_applied_to.nrec_tax_amt_trx_curr);
rec_jai_tax_line.nrec_tax_amt_tax_curr :=
rec_parent_tax_line.nrec_tax_amt_tax_curr -

nvl(rec_total_taxes_applied_from.nrec_tax_amt_tax_curr

,rec_total_taxes_applied_to.nrec_tax_amt_tax_curr);
rec_jai_tax_line.recoverable_flag :=
rec_parent_tax_line.recoverable_flag;
rec_jai_tax_line.tax_point_basis :=
rec_parent_tax_line.tax_point_basis;
--Modified by Junjian for ERS flow begin
IF rec_jai_tax_line.entity_code = 'AP_INVOICES' THEN
IF rec_jai_tax_line.tax_point_basis = 'DELIVERY' THEN
rec_jai_tax_line.frozen_flag := 'Y';
ELSE
rec_jai_tax_line.frozen_flag := 'N';
END IF;
ELSE
IF nvl(rec_det_factor.tax_confirmed_flag
,'N') = 'Y' THEN
rec_jai_tax_line.frozen_flag := 'Y';
END IF;
END IF;
--Modified by Junjian for ERS flow end

rec_jai_tax_line.update_vendor_on_transaction :=
nvl(rec_parent_tax_line.update_vendor_on_transaction,rec_jai_tax_line.update_vendor
_on_transaction); --added by mani for bug 28106834

p_tax_lines_tbl(i) := rec_jai_tax_line;
jai_tax_determination_pkg.log_tax_line(rec_jai_tax_line);
ELSE
--AELLURU GE 27490563
rec_jai_tax_line.unrounded_uom_conv_qty :=
rec_parent_tax_line.unrounded_uom_conv_qty -

nvl(rec_total_taxes_applied_from.unrounded_uom_conv_qty

,rec_total_taxes_applied_to.unrounded_uom_conv_qty);
rec_jai_tax_line.rounded_quantity :=
rec_parent_tax_line.rounded_quantity -

nvl(rec_total_taxes_applied_from.rounded_quantity

,rec_total_taxes_applied_to.rounded_quantity);
rec_jai_tax_line.line_assessable_value :=
rec_parent_tax_line.line_assessable_value -

nvl(rec_total_taxes_applied_from.line_assessable_value

,rec_total_taxes_applied_to.line_assessable_value);
rec_jai_tax_line.unround_taxable_amt_fun_curr :=
rec_parent_tax_line.unround_taxable_amt_fun_curr -

nvl(rec_total_taxes_applied_from.unround_taxable_amt_fun_curr

,rec_total_taxes_applied_to.unround_taxable_amt_fun_curr);
rec_jai_tax_line.rounded_taxable_amt_fun_curr :=
rec_parent_tax_line.rounded_taxable_amt_fun_curr -

nvl(rec_total_taxes_applied_from.rounded_taxable_amt_fun_curr

,rec_total_taxes_applied_to.rounded_taxable_amt_fun_curr);
rec_jai_tax_line.unround_tax_amt_fun_curr :=
rec_parent_tax_line.unround_tax_amt_fun_curr -

nvl(rec_total_taxes_applied_from.unround_tax_amt_fun_curr

,rec_total_taxes_applied_to.unround_tax_amt_fun_curr);
rec_jai_tax_line.rounded_tax_amt_fun_curr :=
rec_parent_tax_line.rounded_tax_amt_fun_curr -

nvl(rec_total_taxes_applied_from.rounded_tax_amt_fun_curr

,rec_total_taxes_applied_to.rounded_tax_amt_fun_curr);
rec_jai_tax_line.taxable_basis :=
rec_parent_tax_line.taxable_basis -

nvl(rec_total_taxes_applied_from.taxable_basis

,rec_total_taxes_applied_to.taxable_basis);

rec_jai_tax_line.unround_tax_amt_trx_curr :=
rec_jai_tax_line.unround_tax_amt_fun_curr/NVL(rec_jai_tax_line.CURRENCY_CONVERSION_
RATE,1);
rec_jai_tax_line.unround_tax_amt_tax_curr :=
rec_jai_tax_line.unround_tax_amt_fun_curr/NVL(rec_jai_tax_line.TAX_CURRENCY_CONVERS
ION_RATE,1);

rec_jai_tax_line.rounded_tax_amt_trx_curr :=
rec_jai_tax_line.rounded_tax_amt_fun_curr/NVL(rec_jai_tax_line.CURRENCY_CONVERSION_
RATE,1) ;
rec_jai_tax_line.rounded_tax_amt_tax_curr :=
rec_jai_tax_line.rounded_tax_amt_fun_curr/NVL(rec_jai_tax_line.TAX_CURRENCY_CONVERS
ION_RATE,1) ;
rec_jai_tax_line.unround_taxable_amt_trx_curr :=
rec_jai_tax_line.unround_taxable_amt_fun_curr/NVL(rec_jai_tax_line.CURRENCY_CONVERS
ION_RATE,1) ;
rec_jai_tax_line.unround_taxable_amt_tax_curr :=
rec_jai_tax_line.unround_taxable_amt_fun_curr/NVL(rec_jai_tax_line.TAX_CURRENCY_CON
VERSION_RATE,1) ;
rec_jai_tax_line.rounded_taxable_amt_trx_curr :=
rec_jai_tax_line.rounded_taxable_amt_fun_curr/NVL(rec_jai_tax_line.CURRENCY_CONVERS
ION_RATE,1) ;
rec_jai_tax_line.rounded_taxable_amt_tax_curr :=
rec_jai_tax_line.rounded_taxable_amt_fun_curr/NVL(rec_jai_tax_line.TAX_CURRENCY_CON
VERSION_RATE,1) ;
rec_jai_tax_line.rec_tax_amt_funcl_curr :=
rec_parent_tax_line.rec_tax_amt_funcl_curr -

nvl(rec_total_taxes_applied_from.rec_tax_amt_funcl_curr

,rec_total_taxes_applied_to.rec_tax_amt_funcl_curr);
rec_jai_tax_line.nrec_tax_amt_funcl_curr :=
rec_parent_tax_line.nrec_tax_amt_funcl_curr -

nvl(rec_total_taxes_applied_from.nrec_tax_amt_funcl_curr

,rec_total_taxes_applied_to.nrec_tax_amt_funcl_curr);
rec_jai_tax_line.rec_tax_amt_trx_curr :=
rec_jai_tax_line.rec_tax_amt_funcl_curr/NVL(rec_jai_tax_line.CURRENCY_CONVERSION_RA
TE,1) ;
rec_jai_tax_line.rec_tax_amt_tax_curr :=
rec_jai_tax_line.rec_tax_amt_funcl_curr/NVL(rec_jai_tax_line.TAX_CURRENCY_CONVERSIO
N_RATE,1) ;
rec_jai_tax_line.nrec_tax_amt_trx_curr :=
rec_jai_tax_line.nrec_tax_amt_funcl_curr/NVL(rec_jai_tax_line.CURRENCY_CONVERSION_R
ATE,1) ;
rec_jai_tax_line.nrec_tax_amt_tax_curr :=
rec_jai_tax_line.nrec_tax_amt_funcl_curr/NVL(rec_jai_tax_line.TAX_CURRENCY_CONVERSI
ON_RATE,1) ;
rec_jai_tax_line.recoverable_flag :=
rec_parent_tax_line.recoverable_flag;
rec_jai_tax_line.tax_point_basis :=
rec_parent_tax_line.tax_point_basis;
--Modified by Junjian for ERS flow begin
IF rec_jai_tax_line.entity_code = 'AP_INVOICES' THEN
IF rec_jai_tax_line.tax_point_basis = 'DELIVERY' THEN
rec_jai_tax_line.frozen_flag := 'Y';
ELSE
rec_jai_tax_line.frozen_flag := 'N';
END IF;
ELSE
IF nvl(rec_det_factor.tax_confirmed_flag
,'N') = 'Y' THEN
rec_jai_tax_line.frozen_flag := 'Y';
END IF;
END IF;
--Modified by Junjian for ERS flow end

rec_jai_tax_line.update_vendor_on_transaction :=
nvl(rec_parent_tax_line.update_vendor_on_transaction,rec_jai_tax_line.update_vendor
_on_transaction);--added by mani for bug 28106834

p_tax_lines_tbl(i) := rec_jai_tax_line;
jai_tax_determination_pkg.log_tax_line(rec_jai_tax_line);

END IF;
--AELLURU GE 27490563
END LOOP;
END IF;

END IF;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;

EXCEPTION
WHEN FND_API.G_EXC_ERROR THEN
pv_process_status := FND_API.G_RET_STS_ERROR;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,pv_process_message);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
pv_process_status := FND_API.G_RET_STS_ERROR;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,pv_process_message);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;
WHEN OTHERS THEN
pv_process_status := FND_API.G_RET_STS_UNEXP_ERROR;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,SQLERRM);
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;

END calculate_tax_for_last;
--Added by Wenqiong for bug19244914 end
--Added by Junjian for TCS bug#20057641 begin
PROCEDURE determine_tcs_tax
(
pn_det_factor_id IN NUMBER
,p_tax_lines_tbl IN OUT NOCOPY tax_lines_tbl
,pv_call_from IN VARCHAR2 DEFAULT NULL
,pv_process_status OUT NOCOPY VARCHAR2
,pv_process_message OUT NOCOPY VARCHAR2
) IS

CURSOR c_tax_category_lines(cn_tax_category_id NUMBER) IS


SELECT category_line.line_number
,category_line.regime_id
,category_line.tax_type_id
,category_line.tax_rate_id
,category_line.precedence_1
,category_line.precedence_2
,category_line.precedence_3
,category_line.precedence_4
,category_line.precedence_5
,category_line.precedence_6
,category_line.precedence_7
,category_line.precedence_8
,category_line.precedence_9
,category_line.precedence_10
,category_line.precedence_11
,category_line.precedence_12
,category_line.precedence_13
,category_line.precedence_14
,category_line.precedence_15
,category_line.precedence_16
,category_line.precedence_17
,category_line.precedence_18
,category_line.precedence_19
,category_line.precedence_20
,regime.regime_code
,regime.regime_type
,tax_type.allow_abatement
,tax_type.update_vendor_on_transaction
,tax_type.offset_flag
,tax_type.recoverable_flag
,tax_type.self_assessed_flag
,tax_type.reverse_credit_on_shipment
,tax_type.credit_basis_self_assessed
,tax_type.reporting_only_flag
,tax_type.tax_point_basis
,tax_rate.tax_rate_code
,tax_rate.tax_rate_type
,tax_rate.tax_status
,tax_rate.recovery_percentage
,tax_rate.inclusive_flag
FROM jai_tax_category_lines category_line
,jai_regimes regime
,jai_tax_types tax_type
,jai_tax_rates tax_rate
WHERE category_line.tax_category_id = cn_tax_category_id
AND category_line.tax_rate_id = tax_rate.tax_rate_id
AND category_line.tax_type_id = tax_type.tax_type_id
AND category_line.regime_id = regime.regime_id
/* Bug#24838796/GST start, dejiang.liu/20161012, add logic to filter
out
exclusive self-assessed tax for Prepayments. */
AND EXISTS (SELECT 1
FROM jai_tax_det_factors jtdf
WHERE jtdf.det_factor_id = pn_det_factor_id
AND ((jtdf.entity_code = 'AP_INVOICES' AND jtdf.trx_type =
'PREPAYMENT' AND
nvl(tax_type.self_assessed_flag
,'N') = 'Y' AND nvl(tax_rate.inclusive_flag
,'N') = 'N') OR (jtdf.trx_type <>
'PREPAYMENT')))
/* Bug#24838796/GST end. */
ORDER BY category_line.line_number ASC;

CURSOR c_1st_party_reg
(
cn_organization_id NUMBER
,cn_org_id NUMBER
,cn_location_id NUMBER
,cn_regime_id NUMBER
,cn_party_reg_id NUMBER
) IS
SELECT reg_lines.party_reg_id first_party_reg_id
--26399170
,reg_lines.registration_type_code first_party_primary_reg_name
,reg_lines.registration_number first_party_primary_reg_num
,reg_lines.sec_registration_type_code first_party_secondary_reg_name
,reg_lines.secondary_registration_number first_party_secondary_reg_num
,reg_lines.tax_authority_id
,reg_lines.tax_authority_site_id
FROM /*JAI_PARTY_REGS reg, 26399170*/ jai_party_reg_lines reg_lines
--JAI_REGIMES regime 26399170
WHERE reg_lines.party_reg_id = cn_party_reg_id --26399170
/* (SELECT get_fp_matched_id(p_organization_id => cn_organization_id
,p_location_id => cn_location_id
,p_org_id => cn_org_id
,p_regime_type => regime.regime_type
,p_regime_id => cn_regime_id)
FROM dual)*/
AND reg_lines.regime_id = cn_regime_id
--AND reg_lines.regime_id = regime.regime_id 26399170
AND reg_lines.line_context = 'REGISTRATIONS'
AND nvl(reg_lines.effective_from
,SYSDATE - 1) <= SYSDATE
AND nvl(reg_lines.effective_to
,SYSDATE + 1) >= SYSDATE;

CURSOR c_3rd_party_reg
(
cv_party_type VARCHAR2
,cn_party_id NUMBER
,cn_party_site_id NUMBER
,cn_regime_id NUMBER
) IS
SELECT reg.party_reg_id third_party_reg_id
,reg_lines.registration_type_code third_party_primary_reg_name
,reg_lines.registration_number third_party_primary_reg_num
,reg_lines.sec_registration_type_code third_party_secondary_reg_name
,reg_lines.secondary_registration_number third_party_secondary_reg_num
,reg_lines.assessable_price_list_id
FROM jai_party_regs reg
,jai_party_reg_lines reg_lines
WHERE reg.party_type_code IN ('THIRD_PARTY'
,'THIRD_PARTY_SITE')
AND reg.supplier_flag = decode(cv_party_type
,PARTY_TYPE_SUPPLIER
,'Y'
,'N')
AND reg.customer_flag = decode(cv_party_type
,PARTY_TYPE_CUSTOMER
,'Y'
,'N')
AND reg.party_reg_id = reg_lines.party_reg_id
AND reg.party_id = cn_party_id
AND nvl(reg.party_site_id
,0) = nvl(cn_party_site_id
,nvl(reg.party_site_id
,0))
AND reg_lines.regime_id = cn_regime_id
AND reg_lines.line_context = 'REGISTRATIONS'
AND nvl(reg_lines.effective_from
,SYSDATE - 1) <= SYSDATE
AND nvl(reg_lines.effective_to
,SYSDATE + 1) >= SYSDATE;

CURSOR c_3rd_party_reporting
(
cn_third_party_reg_id NUMBER
,cn_regime_id NUMBER
) IS
SELECT rep_ass.reporting_type_id
,rep_ass.reporting_code
FROM jai_reporting_associations rep_ass
,jai_reporting_types rep_type
WHERE rep_ass.reporting_type_id = rep_type.reporting_type_id
AND rep_ass.entity_code = 'THIRD_PARTY'
AND rep_ass.entity_id = cn_third_party_reg_id
AND rep_ass.regime_id = cn_regime_id
AND rep_type.reporting_usage = 'TR'
AND nvl(rep_ass.effective_from
,SYSDATE - 1) <= SYSDATE
AND nvl(rep_ass.effective_to
,SYSDATE + 1) >= SYSDATE
AND nvl(rep_type.effective_from
,SYSDATE - 1) <= SYSDATE
AND nvl(rep_type.effective_to
,SYSDATE + 1) >= SYSDATE;

CURSOR c_tax_rate_percentage
(
cn_tax_rate_id NUMBER
,cd_tax_point_date DATE
) IS
SELECT tax_rate_percentage
FROM jai_tax_rates rate
,jai_tax_rate_details detail
WHERE rate.tax_rate_id = detail.tax_rate_id
AND rate.tax_rate_id = cn_tax_rate_id
AND rate.tax_rate_type = 'PERCENTAGE'
AND detail.tax_rate_detail_code = 'RATE_DETAILS'
AND nvl(detail.effective_from
,nvl(cd_tax_point_date
,SYSDATE) - 1) <= nvl(cd_tax_point_date
,SYSDATE)
AND nvl(detail.effective_to
,nvl(cd_tax_point_date
,SYSDATE) + 1) >= nvl(cd_tax_point_date
,SYSDATE);
lt_tcs_precedence number_tbl_type;
ln_pre_index NUMBER;
ln_total_tax_lines NUMBER;
lt_tcs_regime_tbl number_tbl_type;
rec_tax_det_factor jai_tax_det_factors%ROWTYPE;
rec_jai_tax_line jai_tax_lines%ROWTYPE;
rec_1st_party_reg c_1st_party_reg%ROWTYPE;
rec_3rd_party_reg c_3rd_party_reg%ROWTYPE;
lv_flag VARCHAR2(1);
ln_tcs_category_id NUMBER;
ln_threshold_type_id NUMBER;
lv_tax_line_tpb jai_tax_lines.tax_point_basis%TYPE;
ln_tax_line_num jai_tax_lines.tax_line_num%TYPE;
ln_tax_rate_id jai_tax_lines.tax_rate_id%TYPE;
ln_ori_tax_rate_id jai_tax_lines.tax_rate_id%TYPE;
ln_party_id jai_tax_lines.party_id%TYPE;
ln_party_site_id jai_tax_lines.party_site_id%TYPE;
lv_party_type jai_tax_lines.party_type%TYPE;
ln_tax_rate_vendor_id jai_tax_lines.party_id%TYPE;
ln_tax_rate_vendor_site_id jai_tax_lines.party_site_id%TYPE;
ln_regime_id jai_tax_lines.tax_regime_id%TYPE;
ln_tax_rate_percentage jai_tax_lines.tax_rate_percentage%TYPE;
lv_tax_rate_uom jai_tax_lines.tax_rate_uom%TYPE;
ln_tax_rate_uom_rate jai_tax_lines.tax_rate_uom_rate%TYPE;
lv_tax_rate_abatement_type jai_tax_lines.tax_rate_abatement_type%TYPE;
ln_tax_abatement_percentage jai_tax_lines.abatement_percentage%TYPE;
lv_tax_rate_classification jai_tax_lines.tax_rate_classification%TYPE;
ln_standard_rate jai_tax_lines.standard_rate%TYPE;
lv_form_type jai_tax_lines.form_type%TYPE;
ln_organization_id jai_tax_lines.organization_id%TYPE;
ln_org_id jai_tax_lines.org_id%TYPE;
ln_location_id jai_tax_lines.location_id%TYPE;

ld_tax_point_date jai_tax_lines.tax_point_date%TYPE;
lv_func_currency jai_tax_det_factors.trx_currency_code%TYPE;
ln_ledger_id NUMBER;
lv_duplicate_falg VARCHAR2(1);
lv_process_message VARCHAR2(2000);
lv_api_name VARCHAR2(50) := 'determine_tcs_tax';
--Added by Junjian for bug#20313477 begin
CURSOR c_get_entity_code(cp_det_factor_id NUMBER) IS
SELECT entity_code
FROM jai_tax_det_factors
WHERE det_factor_id = cp_det_factor_id;
lv_entity_code jai_tax_det_factors.entity_code%TYPE;
--Added by Junjian for bug#20313477 end

ln_party_reg_id NUMBER; --26399170


BEGIN

pv_process_status := FND_API.G_RET_STS_SUCCESS;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Begin+');
END IF;
--Added by Junjian for bug#20313477 begin
OPEN c_get_entity_code(pn_det_factor_id);
FETCH c_get_entity_code
INTO lv_entity_code;
CLOSE c_get_entity_code;
IF lv_entity_code NOT IN ('SALES_ORDER_ISSUE'
,'TRANSACTIONS') THEN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'TCS tax only for AR invoice and Ship confirm SO');
END IF;
RETURN;
END IF;
--Added by Junjian for bug#20313477 end

ln_pre_index := 1;
FOR i IN 1 .. 20 LOOP
lt_tcs_precedence(i) := NULL;
END LOOP;
IF p_tax_lines_tbl.count > 0 THEN
FOR i IN p_tax_lines_tbl.first .. p_tax_lines_tbl.last LOOP
ln_regime_id := p_tax_lines_tbl(i).tax_regime_id;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'In loop' || ' ln_regime_id:' || ln_regime_id);
END IF;
IF jai_ar_tcs_tax_pkg.is_tcs_tax_flag(pn_tax_regime_id => ln_regime_id) =
'Y' THEN
lt_tcs_precedence(ln_pre_index) := p_tax_lines_tbl(i).tax_line_num;
ln_pre_index := ln_pre_index + 1;
lv_flag := 'N';
IF lt_tcs_regime_tbl.count > 0 THEN
FOR r_i IN lt_tcs_regime_tbl.first .. lt_tcs_regime_tbl.last LOOP
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'In loop' || ' ln_regime_id:' || ln_regime_id || '
lt_tcs_regime_tbl(r_i):' ||
lt_tcs_regime_tbl(r_i));
END IF;
IF lt_tcs_regime_tbl(r_i) = ln_regime_id THEN
lv_flag := 'Y';
END IF;
END LOOP;
END IF;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'In loop' || ' lv_flag:' || lv_flag);
END IF;
IF lv_flag = 'N' THEN
lt_tcs_regime_tbl(nvl(lt_tcs_regime_tbl.last, 0) + 1) := ln_regime_id;
END IF;
END IF;
END LOOP;
END IF; --p_tax_lines_tbl.LAST > 0
ln_tax_line_num := p_tax_lines_tbl.count;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'Before TCS surcharge');
END IF;

IF lt_tcs_regime_tbl.count > 0 THEN


jai_tax_determination_pkg.get_tax_det_factor(pn_application_id => NULL
,pv_entity_code => NULL
,pv_event_class_code => NULL
,pv_trx_level_type => NULL
,pn_trx_id => NULL
,pn_trx_line_id => NULL
,pn_trx_loc_line_id => NULL
,pn_det_factor_id =>
pn_det_factor_id
,pv_call_from =>
pv_call_from --Added by Qinglei for Receving
,pr_det_factor =>
rec_tax_det_factor);

ln_party_id := rec_tax_det_factor.party_id;
ln_party_site_id := rec_tax_det_factor.party_site_id;
lv_party_type := rec_tax_det_factor.party_type;
ln_org_id := rec_tax_det_factor.org_id;
ln_organization_id := rec_tax_det_factor.organization_id;
ln_location_id := rec_tax_det_factor.location_id;
FOR r_i IN lt_tcs_regime_tbl.first .. lt_tcs_regime_tbl.last LOOP
ln_total_tax_lines := nvl(ln_tax_line_num
,0);
jai_ar_tcs_tax_pkg.get_threshold_tax_category_id(pn_det_factor_id =>
pn_det_factor_id
,pn_regime_id =>
lt_tcs_regime_tbl(r_i)
,pv_call_from =>
jai_constants.tcs_event_surcharge
,pn_threshold_type_id =>
ln_threshold_type_id
,pn_tax_category_id =>
ln_tcs_category_id
,pv_process_status =>
pv_process_status
,pv_process_message =>
lv_process_message);
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'After TCS surcharge,' || ' Threshold type:' ||
ln_threshold_type_id || ' TCS category:' ||
ln_tcs_category_id);
END IF;
IF pv_process_status <> FND_API.G_RET_STS_SUCCESS THEN
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'get_threshold_tax_category_id return msg:' ||
lv_process_message);
END IF;
RETURN;
END IF;
IF nvl(ln_tcs_category_id
,0) > 0 THEN
FOR rec_tax_category_lines IN c_tax_category_lines(ln_tcs_category_id)
LOOP

ln_tax_line_num := ln_tax_line_num + 1;
ln_tax_rate_id := rec_tax_category_lines.tax_rate_id;
ln_regime_id := rec_tax_category_lines.regime_id;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'tax line_number:' ||
rec_tax_category_lines.line_number || 'tax_rate_id:' ||
rec_tax_category_lines.tax_rate_id || 'regime_id:' ||
rec_tax_category_lines.regime_id);
END IF;
lv_duplicate_falg := 'N';
FOR i IN p_tax_lines_tbl.first .. p_tax_lines_tbl.last LOOP
ln_ori_tax_rate_id := p_tax_lines_tbl(i).tax_rate_id;
IF ln_tax_rate_id = ln_ori_tax_rate_id THEN
lv_duplicate_falg := 'Y';
EXIT;
ELSE
NULL;
END IF;
END LOOP;

IF lv_duplicate_falg = 'N' THEN


jai_tax_determination_pkg.derive_tax_point_basis(pn_application_id
=> rec_tax_det_factor.application_id
,pv_entity_code
=> rec_tax_det_factor.entity_code
,pv_event_class_code
=> rec_tax_det_factor.event_class_code
,pv_event_type_code
=> rec_tax_det_factor.event_type_code --Added by Junjian
,pv_tax_type_tpb
=> rec_tax_category_lines.tax_point_basis
,pv_tax_line_tpb
=> lv_tax_line_tpb);

jai_tax_determination_pkg.derive_tax_point_date(pn_application_id
=> rec_tax_det_factor.application_id
,pv_entity_code
=> rec_tax_det_factor.entity_code
,pv_event_class_code
=> rec_tax_det_factor.event_class_code
,pn_trx_id
=> rec_tax_det_factor.trx_id
,pn_trx_line_id
=> rec_tax_det_factor.trx_line_id
,pn_trx_loc_line_id
=> rec_tax_det_factor.trx_loc_line_id
,pd_trx_date
=> rec_tax_det_factor.trx_date
,pv_tax_point_basis
=> lv_tax_line_tpb -- added by zhiwei.xin for bug#18619014
,pd_tax_point_date
=> ld_tax_point_date);
rec_jai_tax_line := NULL;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'prepare attributes from det facotrs');

END IF;
rec_jai_tax_line.org_id := ln_org_id;
rec_jai_tax_line.organization_id := ln_organization_id;
rec_jai_tax_line.location_id := ln_location_id;
rec_jai_tax_line.det_factor_id :=
rec_tax_det_factor.det_factor_id;
rec_jai_tax_line.application_id :=
rec_tax_det_factor.application_id;
rec_jai_tax_line.entity_code :=
rec_tax_det_factor.entity_code;
rec_jai_tax_line.event_class_code :=
rec_tax_det_factor.event_class_code;
rec_jai_tax_line.event_type_code :=
rec_tax_det_factor.event_type_code;
rec_jai_tax_line.tax_event_class_code :=
rec_tax_det_factor.tax_event_class_code;
rec_jai_tax_line.tax_event_type_code :=
rec_tax_det_factor.tax_event_type_code;
rec_jai_tax_line.trx_id :=
rec_tax_det_factor.trx_id;
rec_jai_tax_line.trx_line_id :=
rec_tax_det_factor.trx_line_id;
rec_jai_tax_line.trx_loc_line_id :=
rec_tax_det_factor.trx_loc_line_id;
rec_jai_tax_line.trx_level_type :=
rec_tax_det_factor.trx_level_type;
rec_jai_tax_line.trx_date :=
rec_tax_det_factor.trx_date;
rec_jai_tax_line.legal_entity_id :=
rec_tax_det_factor.legal_entity_id;
rec_jai_tax_line.trx_number :=
rec_tax_det_factor.trx_number;
rec_jai_tax_line.trx_type :=
rec_tax_det_factor.trx_type;
rec_jai_tax_line.trx_line_number :=
rec_tax_det_factor.trx_line_number;
rec_jai_tax_line.party_id := ln_party_id;
rec_jai_tax_line.party_site_id := ln_party_site_id;
rec_jai_tax_line.party_type :=
rec_tax_det_factor.party_type;
rec_jai_tax_line.trx_currency_code :=
rec_tax_det_factor.trx_currency_code;
rec_jai_tax_line.currency_conversion_date :=
rec_tax_det_factor.currency_conversion_date;
rec_jai_tax_line.currency_conversion_rate :=
rec_tax_det_factor.currency_conversion_rate;
rec_jai_tax_line.currency_conversion_type :=
rec_tax_det_factor.currency_conversion_type;
rec_jai_tax_line.tax_currency_code :=
rec_tax_det_factor.trx_currency_code;
rec_jai_tax_line.tax_currency_conversion_date :=
rec_tax_det_factor.currency_conversion_date;
rec_jai_tax_line.tax_currency_conversion_type :=
rec_tax_det_factor.currency_conversion_type;
rec_jai_tax_line.tax_currency_conversion_rate :=
rec_tax_det_factor.currency_conversion_rate;

rec_jai_tax_line.item_id :=
rec_tax_det_factor.item_id;
rec_jai_tax_line.trx_uom :=
rec_tax_det_factor.trx_uom_code;
rec_jai_tax_line.unit_price :=
rec_tax_det_factor.unit_price;
rec_jai_tax_line.trx_line_quantity :=
rec_tax_det_factor.trx_line_quantity;
rec_jai_tax_line.line_amt :=
rec_tax_det_factor.line_amt;
rec_jai_tax_line.ref_doc_application_id :=
rec_tax_det_factor.ref_doc_application_id;
rec_jai_tax_line.ref_doc_entity_code :=
rec_tax_det_factor.ref_doc_entity_code;
rec_jai_tax_line.ref_doc_event_class_code :=
rec_tax_det_factor.ref_doc_event_class_code;
rec_jai_tax_line.ref_doc_trx_id :=
rec_tax_det_factor.ref_doc_trx_id;
rec_jai_tax_line.ref_doc_line_id :=
rec_tax_det_factor.ref_doc_line_id;
rec_jai_tax_line.ref_doc_loc_line_id :=
rec_tax_det_factor.ref_doc_loc_line_id;
rec_jai_tax_line.ref_doc_trx_type :=
rec_tax_det_factor.ref_doc_trx_type;
rec_jai_tax_line.ref_doc_trx_level_type :=
rec_tax_det_factor.ref_doc_trx_level_type;
rec_jai_tax_line.applied_to_application_id :=
rec_tax_det_factor.applied_to_application_id;
rec_jai_tax_line.applied_to_entity_code :=
rec_tax_det_factor.applied_to_entity_code;
rec_jai_tax_line.applied_to_event_class_code :=
rec_tax_det_factor.applied_to_event_class_code;
rec_jai_tax_line.applied_to_trx_id :=
rec_tax_det_factor.applied_to_trx_id;
rec_jai_tax_line.applied_to_trx_line_id :=
rec_tax_det_factor.applied_to_trx_line_id;
rec_jai_tax_line.applied_to_loc_line_id :=
rec_tax_det_factor.applied_to_loc_line_id;
rec_jai_tax_line.applied_to_trx_type :=
rec_tax_det_factor.applied_to_trx_type;
rec_jai_tax_line.applied_to_trx_level_type :=
rec_tax_det_factor.applied_to_trx_level_type;

rec_jai_tax_line.applied_from_application_id :=
rec_tax_det_factor.applied_from_application_id;
rec_jai_tax_line.applied_from_entity_code :=
rec_tax_det_factor.applied_from_entity_code;
rec_jai_tax_line.applied_from_event_class_code :=
rec_tax_det_factor.applied_from_event_class_code;
rec_jai_tax_line.applied_from_trx_id :=
rec_tax_det_factor.applied_from_trx_id;
rec_jai_tax_line.applied_from_trx_line_id :=
rec_tax_det_factor.applied_from_trx_line_id;
rec_jai_tax_line.applied_from_loc_line_id :=
rec_tax_det_factor.applied_from_loc_line_id;
rec_jai_tax_line.applied_from_trx_type :=
rec_tax_det_factor.applied_from_trx_type;
rec_jai_tax_line.applied_from_trx_level_type :=
rec_tax_det_factor.applied_from_trx_level_type;
rec_jai_tax_line.ledger_id := ln_ledger_id;
rec_jai_tax_line.functional_currency_code := lv_func_currency;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'prepare attributes from tax info');
END IF;
rec_jai_tax_line.tax_rate_id := ln_tax_rate_id;
rec_jai_tax_line.tax_rate_code :=
rec_tax_category_lines.tax_rate_code;
rec_jai_tax_line.tax_rate_type :=
rec_tax_category_lines.tax_rate_type;
rec_jai_tax_line.tax_status :=
rec_tax_category_lines.tax_status;
rec_jai_tax_line.recovery_percentage :=
rec_tax_category_lines.recovery_percentage;
rec_jai_tax_line.inclusive_flag :=
nvl(rec_tax_category_lines.inclusive_flag
,'N');
rec_jai_tax_line.tax_type_id :=
rec_tax_category_lines.tax_type_id;
rec_jai_tax_line.abatement_flag :=
nvl(rec_tax_category_lines.allow_abatement
,'N');
rec_jai_tax_line.update_vendor_on_transaction :=
nvl(rec_tax_category_lines.update_vendor_on_transaction
,'N');
rec_jai_tax_line.reporting_only_flag :=
nvl(rec_tax_category_lines.reporting_only_flag
,'N');
rec_jai_tax_line.offset_flag :=
rec_tax_category_lines.offset_flag;
rec_jai_tax_line.recoverable_flag :=
nvl(rec_tax_category_lines.recoverable_flag
,'N');
rec_jai_tax_line.self_assessed_flag :=
nvl(rec_tax_category_lines.self_assessed_flag
,'N');
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'prepare attributes from 2nd part tax info');
END IF;
rec_jai_tax_line.reverse_credit_on_shipment :=
rec_tax_category_lines.reverse_credit_on_shipment;
rec_jai_tax_line.credit_basis_self_assessed :=
rec_tax_category_lines.credit_basis_self_assessed;
rec_jai_tax_line.party_id :=
nvl(ln_tax_rate_vendor_id
,ln_party_id);
rec_jai_tax_line.party_site_id :=
nvl(ln_tax_rate_vendor_site_id
,ln_party_site_id);
rec_jai_tax_line.party_type := lv_party_type;
rec_jai_tax_line.tax_point_basis := lv_tax_line_tpb;
rec_jai_tax_line.tax_point_date := ld_tax_point_date;
rec_jai_tax_line.tax_regime_id := ln_regime_id;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'prepare attributes from 3nd part tax info');
END IF;
rec_jai_tax_line.tax_regime_code :=
rec_tax_category_lines.regime_code;
rec_jai_tax_line.tax_regime_type :=
rec_tax_category_lines.regime_type;
rec_jai_tax_line.tax_line_num := ln_tax_line_num;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'prepare attributes from 4nd part tax info');
END IF;
IF rec_tax_category_lines.precedence_1 = 0 THEN
rec_jai_tax_line.precedence_1 := lt_tcs_precedence(1);
rec_jai_tax_line.precedence_2 := lt_tcs_precedence(2);
rec_jai_tax_line.precedence_3 := lt_tcs_precedence(3);
rec_jai_tax_line.precedence_4 := lt_tcs_precedence(4);
rec_jai_tax_line.precedence_5 := lt_tcs_precedence(5);
rec_jai_tax_line.precedence_6 := lt_tcs_precedence(6);
rec_jai_tax_line.precedence_7 := lt_tcs_precedence(7);
rec_jai_tax_line.precedence_8 := lt_tcs_precedence(8);
rec_jai_tax_line.precedence_9 := lt_tcs_precedence(9);
rec_jai_tax_line.precedence_10 := lt_tcs_precedence(10);
rec_jai_tax_line.precedence_11 := lt_tcs_precedence(11);
rec_jai_tax_line.precedence_12 := lt_tcs_precedence(12);
rec_jai_tax_line.precedence_13 := lt_tcs_precedence(13);
rec_jai_tax_line.precedence_14 := lt_tcs_precedence(14);
rec_jai_tax_line.precedence_15 := lt_tcs_precedence(15);
rec_jai_tax_line.precedence_16 := lt_tcs_precedence(16);
rec_jai_tax_line.precedence_17 := lt_tcs_precedence(17);
rec_jai_tax_line.precedence_18 := lt_tcs_precedence(18);
rec_jai_tax_line.precedence_19 := lt_tcs_precedence(19);
rec_jai_tax_line.precedence_20 := lt_tcs_precedence(20);
ELSE
rec_jai_tax_line.precedence_1 :=
rec_tax_category_lines.precedence_1 + ln_total_tax_lines;
rec_jai_tax_line.precedence_2 :=
rec_tax_category_lines.precedence_2 + ln_total_tax_lines;
rec_jai_tax_line.precedence_3 :=
rec_tax_category_lines.precedence_3 + ln_total_tax_lines;
rec_jai_tax_line.precedence_4 :=
rec_tax_category_lines.precedence_4 + ln_total_tax_lines;
rec_jai_tax_line.precedence_5 :=
rec_tax_category_lines.precedence_5 + ln_total_tax_lines;
rec_jai_tax_line.precedence_6 :=
rec_tax_category_lines.precedence_6 + ln_total_tax_lines;
rec_jai_tax_line.precedence_7 :=
rec_tax_category_lines.precedence_7 + ln_total_tax_lines;
rec_jai_tax_line.precedence_8 :=
rec_tax_category_lines.precedence_8 + ln_total_tax_lines;
rec_jai_tax_line.precedence_9 :=
rec_tax_category_lines.precedence_9 + ln_total_tax_lines;
rec_jai_tax_line.precedence_10 :=
rec_tax_category_lines.precedence_10 + ln_total_tax_lines;
rec_jai_tax_line.precedence_11 :=
rec_tax_category_lines.precedence_11 + ln_total_tax_lines;
rec_jai_tax_line.precedence_12 :=
rec_tax_category_lines.precedence_12 + ln_total_tax_lines;
rec_jai_tax_line.precedence_13 :=
rec_tax_category_lines.precedence_13 + ln_total_tax_lines;
rec_jai_tax_line.precedence_14 :=
rec_tax_category_lines.precedence_14 + ln_total_tax_lines;
rec_jai_tax_line.precedence_15 :=
rec_tax_category_lines.precedence_15 + ln_total_tax_lines;
rec_jai_tax_line.precedence_16 :=
rec_tax_category_lines.precedence_16 + ln_total_tax_lines;
rec_jai_tax_line.precedence_17 :=
rec_tax_category_lines.precedence_17 + ln_total_tax_lines;
rec_jai_tax_line.precedence_18 :=
rec_tax_category_lines.precedence_18 + ln_total_tax_lines;
rec_jai_tax_line.precedence_19 :=
rec_tax_category_lines.precedence_19 + ln_total_tax_lines;
rec_jai_tax_line.precedence_20 :=
rec_tax_category_lines.precedence_20 + ln_total_tax_lines;
END IF;

--populate 1st party related attributes


rec_1st_party_reg := NULL;
/*start additions for bug#26399170*/
ln_party_reg_id := NULL;

ln_party_reg_id := get_fp_matched_id(p_organization_id =>


ln_organization_id
,p_location_id =>
ln_location_id
,p_org_id =>
ln_regime_id
,p_regime_type => 'T'
,p_regime_id =>
ln_regime_id);

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'ln_party_Reg_id retrieved is ' ||
ln_party_reg_id);
END IF;
/*end bug#26399170*/

OPEN c_1st_party_reg(cn_organization_id => ln_organization_id


,cn_org_id => ln_org_id
,cn_location_id => ln_location_id
,cn_regime_id => ln_regime_id
,cn_party_reg_id => ln_party_reg_id);
FETCH c_1st_party_reg
INTO rec_1st_party_reg;
CLOSE c_1st_party_reg;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'prepare attributes from 1st party reg');
END IF;
rec_jai_tax_line.first_party_reg_id :=
rec_1st_party_reg.first_party_reg_id;
rec_jai_tax_line.first_party_primary_reg_name :=
rec_1st_party_reg.first_party_primary_reg_name;
rec_jai_tax_line.first_party_primary_reg_num :=
rec_1st_party_reg.first_party_primary_reg_num;
rec_jai_tax_line.first_party_secondary_reg_name :=
rec_1st_party_reg.first_party_secondary_reg_name;
rec_jai_tax_line.first_party_secondary_reg_num :=
rec_1st_party_reg.first_party_secondary_reg_num;
rec_jai_tax_line.tax_authority_id :=
rec_1st_party_reg.tax_authority_id;
rec_jai_tax_line.tax_authority_site_id :=
rec_1st_party_reg.tax_authority_site_id;

--populate 3rd party related attributes


rec_3rd_party_reg := NULL;
OPEN c_3rd_party_reg(cv_party_type =>
rec_tax_det_factor.party_type
,cn_party_id => rec_tax_det_factor.party_id
,cn_party_site_id =>
rec_tax_det_factor.party_site_id
,cn_regime_id => ln_regime_id);
FETCH c_3rd_party_reg
INTO rec_3rd_party_reg;
CLOSE c_3rd_party_reg;
--Added by Wenqiong 0722 begin
IF nvl(rec_3rd_party_reg.third_party_reg_id
,0) = 0 THEN
OPEN c_3rd_party_reg(cv_party_type =>
rec_tax_det_factor.party_type
,cn_party_id =>
rec_tax_det_factor.party_id
,cn_party_site_id => NULL
,cn_regime_id => ln_regime_id);
FETCH c_3rd_party_reg
INTO rec_3rd_party_reg;
CLOSE c_3rd_party_reg;
END IF;
--Added by Wenqiong 0722 end
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'prepare attributes from 3rd party reg for regime:'
|| ln_regime_id);
END IF;
rec_jai_tax_line.third_party_reg_id :=
rec_3rd_party_reg.third_party_reg_id;
rec_jai_tax_line.third_party_primary_reg_name :=
rec_3rd_party_reg.third_party_primary_reg_name;
rec_jai_tax_line.third_party_primary_reg_num :=
rec_3rd_party_reg.third_party_primary_reg_num;
rec_jai_tax_line.third_party_secondary_reg_name :=
rec_3rd_party_reg.third_party_secondary_reg_name;
rec_jai_tax_line.third_party_secondary_reg_num :=
rec_3rd_party_reg.third_party_secondary_reg_num;
rec_jai_tax_line.assessable_price_list_id :=
rec_3rd_party_reg.assessable_price_list_id;
OPEN c_3rd_party_reporting(rec_3rd_party_reg.third_party_reg_id
,ln_regime_id);
FETCH c_3rd_party_reporting
INTO rec_jai_tax_line.reporting_type_id
,rec_jai_tax_line.reporting_code;
CLOSE c_3rd_party_reporting;

get_rounding_rules(pn_org_id => ln_org_id


,pn_organization_id => ln_organization_id
,pn_location_id => ln_location_id
,pn_regime_id => ln_regime_id
,pv_tax_rounded_to =>
rec_jai_tax_line.tax_rounded_to
,pv_tax_rounding_factor =>
rec_jai_tax_line.tax_rounding_factor
,pv_taxable_rounded_to =>
rec_jai_tax_line.taxable_rounded_to
,pv_taxable_rounding_factor =>
rec_jai_tax_line.taxable_rounding_factor
,pv_qty_rounding_rule =>
rec_jai_tax_line.quantity_rounded_to
,pv_qty_rounding_factor =>
rec_jai_tax_line.quantity_rounding_factor
,pv_process_status => pv_process_status);

ln_tax_rate_percentage := NULL;
lv_tax_rate_uom := NULL;
ln_tax_rate_uom_rate := NULL;
lv_tax_rate_abatement_type := NULL;
ln_tax_abatement_percentage := NULL;
lv_tax_rate_classification := NULL;
ln_standard_rate := NULL;
lv_form_type := NULL;

OPEN c_tax_rate_percentage(ln_tax_rate_id
,ld_tax_point_date);
FETCH c_tax_rate_percentage
INTO ln_tax_rate_percentage;
CLOSE c_tax_rate_percentage;

IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN


FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'prepare attributes from tax rate details');
END IF;
rec_jai_tax_line.tax_rate_percentage := ln_tax_rate_percentage;
rec_jai_tax_line.tax_rate_uom := lv_tax_rate_uom;
rec_jai_tax_line.tax_rate_uom_rate := ln_tax_rate_uom_rate;
rec_jai_tax_line.tax_rate_abatement_type :=
lv_tax_rate_abatement_type;
rec_jai_tax_line.abatement_percentage :=
ln_tax_abatement_percentage;
rec_jai_tax_line.tax_rate_classification :=
lv_tax_rate_classification;
rec_jai_tax_line.standard_rate := ln_standard_rate;
rec_jai_tax_line.form_type := lv_form_type;

p_tax_lines_tbl(ln_tax_line_num) := rec_jai_tax_line;
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'ln_tax_line_num:' || ln_tax_line_num || ' count of
table :' || p_tax_lines_tbl.count);
END IF;
END IF; --ln_tax_rate_id = ln_ori_tax_rate_id
END LOOP;
END IF; --nvl(ln_tcs_category_id,0) > 0
END LOOP;
END IF; --lt_tcs_regime_tbl.LAST > 0
IF (G_LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(G_LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,'End-');
END IF;
END determine_tcs_tax;
--Added by Junjian for TCS bug#20057641 end

/* Bug#25326677, dejiang.liu/20170504. Add function to check determine factor


exists. */
FUNCTION check_factor_exists
(
pn_application_id IN NUMBER
,pv_entity_code IN VARCHAR2
,pv_event_class_code IN VARCHAR2
,pv_trx_level_type IN VARCHAR2
,pn_trx_id IN NUMBER
,pn_trx_line_id IN NUMBER DEFAULT NULL
,pn_trx_loc_line_id IN NUMBER DEFAULT NULL
,pn_det_factor_id IN NUMBER DEFAULT NULL
,pv_trx_type IN VARCHAR2 DEFAULT NULL
,pv_call_from IN VARCHAR2 DEFAULT 'BASE'
) RETURN VARCHAR2 IS
-- Variables for log.
lv_api_name VARCHAR2(30) := 'check_factor_exists';

-- Variables for return.


lv_return VARCHAR2(1);

-- Cursor to check factor exists.


CURSOR c_factor_exists IS
SELECT 'Y'
FROM jai_tax_det_factors
WHERE /*26399170*/
(pn_trx_line_id IS NULL OR trx_line_id = pn_trx_line_id)
AND trx_id = pn_trx_id
AND application_id = pn_application_id
AND entity_code = pv_entity_code
AND event_class_code = pv_event_class_code
AND trx_level_type = pv_trx_level_type
--AND trx_id = pn_trx_id
/* AND (pn_trx_line_id IS NULL
OR trx_line_id = pn_trx_line_id)*/
AND (pn_trx_loc_line_id IS NULL OR trx_loc_line_id = pn_trx_loc_line_id)
AND (pn_det_factor_id IS NULL OR det_factor_id = pn_det_factor_id)
AND (pv_trx_type IS NULL OR trx_type = pv_trx_type)
AND nvl(pv_call_from
,'BASE') = 'BASE'
UNION ALL
SELECT 'Y'
FROM jai_det_factors_interface
WHERE (pn_trx_line_id IS NULL OR interface_transaction_id = pn_trx_line_id)
AND interface_trx_hdr_id = pn_trx_id
AND application_id = pn_application_id
AND entity_code = pv_entity_code
AND event_class_code = pv_event_class_code
--AND interface_trx_hdr_id = pn_trx_id
/* AND (pn_trx_line_id IS NULL
OR interface_transaction_id = pn_trx_line_id)*/
AND (pn_det_factor_id IS NULL OR interface_det_factor_id =
pn_det_factor_id)
AND (pv_trx_type IS NULL OR trx_type = pv_trx_type)
AND nvl(pv_call_from
,'BASE') = 'INTERFACE';

lv_factor_exists VARCHAR2(1);

BEGIN
IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----Begin----' || '()+');
END IF;

-- Log parameters.
IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name || '.parameters'
,'pn_application_id=' || pn_application_id || ',' ||
'pv_entity_code=' || pv_entity_code || ',' ||
'pv_event_class_code=' || pv_event_class_code || ',' ||
'pv_trx_level_type=' || pv_trx_level_type || ',' ||
'pn_trx_id=' || pn_trx_id || ',' || 'pn_trx_line_id=' ||
pn_trx_line_id || ',' ||
'pn_trx_loc_line_id=' || pn_trx_loc_line_id || ',' ||
'pn_det_factor_id=' || pn_det_factor_id || ',' ||
'pv_trx_type=' || pv_trx_type || ',' || 'pv_call_from=' ||
pv_call_from || ';');
END IF;

-- Initialize return value.


lv_return := 'N';

-- Fetch cursor c_factor_exists.


lv_factor_exists := 'N';
OPEN c_factor_exists;
FETCH c_factor_exists
INTO lv_factor_exists;
IF c_factor_exists%NOTFOUND THEN
lv_factor_exists := 'N';
END IF;
CLOSE c_factor_exists;

-- Set return value.


IF lv_factor_exists = 'Y' THEN
lv_return := 'Y';
END IF;
-- Return.
IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name || '.return'
,'lv_return=' || lv_return || ';');
FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;

RETURN lv_return;
END check_factor_exists;

/* Bug#26279373, dejiang.liu/20170615. Add function to get TPB reached flag. */


FUNCTION check_tpb_reached
(
pn_det_factor_id NUMBER
,pv_call_from VARCHAR2 DEFAULT 'BASE'
) RETURN VARCHAR2 IS
-- Variables for log.
--PN_DET_FACTOR_ID DATATYPE CHANGED FROM VARCAHR2 TO NUMBER BY MANI.
lv_api_name VARCHAR2(30) := 'check_tpb_reached';

-- Variables for return.


lv_return VARCHAR2(1);

-- Cursor to get event tax point basis.


CURSOR c_event_tpb_level IS
SELECT jeco.application_id
,jeco.entity_code
,jeco.event_class_code
,jeco.event_type_code
,jeco.tax_point_basis
,decode(jeco.tax_point_basis
,'DELIVERY'
,1
,'INVOICE'
,2
,'ACCOUNTING'
,3
,'PAYMENT'
,4
,0) tpb_level
FROM jai_evnt_cls_options jeco
,(SELECT application_id
,entity_code
,event_class_code
,event_type_code
FROM jai_tax_det_factors
WHERE det_factor_id = pn_det_factor_id
AND nvl(pv_call_from
,'BASE') = 'BASE'
UNION ALL
SELECT application_id
,entity_code
,event_class_code
,event_type_code
FROM jai_det_factors_interface
WHERE interface_det_factor_id = pn_det_factor_id
AND nvl(pv_call_from
,'BASE') = 'INTERFACE') jtdf
WHERE jeco.application_id = jtdf.application_id
AND jeco.entity_code = jtdf.entity_code
AND jeco.event_class_code = jtdf.event_class_code
AND jeco.event_type_code = jtdf.event_type_code;

rec_event_tpb_level c_event_tpb_level%ROWTYPE;

-- Cursor to get tax TPB.


CURSOR c_tax_tpb_level IS
SELECT MAX(jtl.tpb_level) tpb_level
FROM (SELECT tax_point_basis
,decode(tax_point_basis
,'DELIVERY'
,1
,'INVOICE'
,2
,'ACCOUNTING'
,3
,'PAYMENT'
,4
,0) tpb_level
FROM jai_tax_lines
WHERE det_factor_id = pn_det_factor_id
AND nvl(pv_call_from
,'BASE') = 'BASE'
UNION ALL
SELECT tax_point_basis
,decode(tax_point_basis
,'DELIVERY'
,1
,'INVOICE'
,2
,'ACCOUNTING'
,3
,'PAYMENT'
,4
,0) tpb_level
FROM jai_tax_lines_interface
WHERE interface_det_factor_id = pn_det_factor_id
AND nvl(pv_call_from
,'BASE') = 'INTERFACE') jtl;

ln_tax_tpb_level NUMBER;

lv_tpb_reached_flag VARCHAR2(1);

BEGIN
IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----Begin----' || '()+');
END IF;

-- Log parameters.
IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name || '.parameters'
,'pn_det_factor_id=' || pn_det_factor_id || ',' ||
'pv_call_from=' || pv_call_from || ';');
END IF;

-- Initialize return value.


lv_return := 'N';

-- Fetch cursor c_event_tpb_level.


OPEN c_event_tpb_level;
FETCH c_event_tpb_level
INTO rec_event_tpb_level;
IF c_event_tpb_level%NOTFOUND THEN
rec_event_tpb_level.tpb_level := 0;
END IF;
CLOSE c_event_tpb_level;

IF rec_event_tpb_level.entity_code = 'OE_ORDER_HEADERS'
AND rec_event_tpb_level.event_type_code = 'BOOK' THEN
rec_event_tpb_level.tax_point_basis := 'DELIVERY';
rec_event_tpb_level.tpb_level := 1;
END IF;

IF rec_event_tpb_level.entity_code = 'TRANSACTIONS'
AND rec_event_tpb_level.event_type_code IN ('INV_UPDATE'
,'CM_UPDATE'
,'DM_UPDATE') THEN
rec_event_tpb_level.tax_point_basis := 'INVOICE';
rec_event_tpb_level.tpb_level := 2;
END IF;

-- Fetch cursor c_tax_tpb_level.


OPEN c_tax_tpb_level;
FETCH c_tax_tpb_level
INTO ln_tax_tpb_level;
IF c_tax_tpb_level%NOTFOUND THEN
ln_tax_tpb_level := 0;
END IF;
CLOSE c_tax_tpb_level;

/*
TPB Reached Rule:
Compare event TPB level and tax TPB level.
If event TPB >= tax TPB, TPB reached.
Otherwise, TPB not reached.
*/

IF ln_tax_tpb_level > 0
AND rec_event_tpb_level.tpb_level >= ln_tax_tpb_level THEN
lv_tpb_reached_flag := 'Y';

ELSE
lv_tpb_reached_flag := 'N';
END IF;

lv_return := lv_tpb_reached_flag;

-- Return.
IF (FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name || '.return'
,'lv_return=' || lv_return || ';');
FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE
,G_MODULE_NAME || lv_api_name
,lv_api_name || '----End----' || '()+');
END IF;

RETURN lv_return;
END check_tpb_reached;
--AELLURU FOR CUMMINS DROPSHIP 26591251
FUNCTION f_chck_rma ( pn_header_id NUMBER
,pn_line_id NUMBER)
RETURN VARCHAR2 IS
PRAGMA AUTONOMOUS_TRANSACTION;
CURSOR c_chck_rma
(
pn_header_id NUMBER
,pn_line_id NUMBER
) IS
SELECT 'Y'
FROM oe_order_lines_all
WHERE header_id = pn_header_id
AND line_id = pn_line_id
AND line_category_code = 'RETURN';
lv_rma_type VARCHAR2(1) := 'N';
BEGIN
OPEN c_chck_rma(pn_header_id
,pn_line_id);
FETCH c_chck_rma
INTO lv_rma_type;
CLOSE c_chck_rma;
commit;
RETURN NVL(lv_rma_type,'N');
END ;
END jai_tax_determination_pkg;
/

You might also like