DBA Data[Home] [Help]

PACKAGE BODY: APPS.AP_ETAX_UTILITY_PKG

Source


1 PACKAGE BODY AP_ETAX_UTILITY_PKG AS
2 /* $Header: apetxutb.pls 120.179.12020000.10 2013/02/15 12:31:04 cmaredup ship $*/
3   -- Create global variables to maintain the session info
4   l_user_id		ap_invoices_all.created_by%TYPE 	:= FND_GLOBAL.user_id;
5   l_login_id		ap_invoices_all.last_update_login%TYPE 	:= FND_GLOBAL.login_id;
6   --l_sysdate		DATE := sysdate; /*Bug10101457: Commented the global variable and used sysdate where applicable*/
7 
8   Global_Exception      EXCEPTION; -- bug 7126676
9 
10   G_PKG_NAME          CONSTANT VARCHAR2(30) := 'AP_ETAX_UTILITY_PKG';
11   G_MSG_UERROR        CONSTANT NUMBER       := FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR;
12   G_MSG_ERROR         CONSTANT NUMBER       := FND_MSG_PUB.G_MSG_LVL_ERROR;
13   G_MSG_SUCCESS       CONSTANT NUMBER       := FND_MSG_PUB.G_MSG_LVL_SUCCESS;
14   G_MSG_HIGH          CONSTANT NUMBER       := FND_MSG_PUB.G_MSG_LVL_DEBUG_HIGH;
15   G_MSG_MEDIUM        CONSTANT NUMBER       := FND_MSG_PUB.G_MSG_LVL_DEBUG_MEDIUM;
16   G_MSG_LOW           CONSTANT NUMBER       := FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW;
17   G_LINES_PER_FETCH   CONSTANT NUMBER       := 1000;
18 
19   G_CURRENT_RUNTIME_LEVEL CONSTANT NUMBER       := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
20   G_LEVEL_UNEXPECTED      CONSTANT NUMBER       := FND_LOG.LEVEL_UNEXPECTED;
21   G_LEVEL_ERROR           CONSTANT NUMBER       := FND_LOG.LEVEL_ERROR;
22   G_LEVEL_EXCEPTION       CONSTANT NUMBER       := FND_LOG.LEVEL_EXCEPTION;
23   G_LEVEL_EVENT           CONSTANT NUMBER       := FND_LOG.LEVEL_EVENT;
24   G_LEVEL_PROCEDURE       CONSTANT NUMBER       := FND_LOG.LEVEL_PROCEDURE;
25   G_LEVEL_STATEMENT       CONSTANT NUMBER       := FND_LOG.LEVEL_STATEMENT;
26   G_MODULE_NAME           CONSTANT VARCHAR2(30) := 'AP.PLSQL.AP_ETAX_UTILITY_PKG.';
27 
28   -- This record type is used for ap_invoice_distributions_all and ap_self_assessed_tax_dist_all
29 
30   TYPE r_ins_tax_dist_info IS RECORD (
31       accounting_date 			ap_invoice_distributions_all.accounting_date%TYPE,
32       dist_code_combination_id		ap_invoice_distributions_all.dist_code_combination_id%TYPE,
33       line_type_lookup_code		ap_invoice_distributions_all.line_type_lookup_code%TYPE,
34       period_name			ap_invoice_distributions_all.period_name%TYPE,
35       amount				ap_invoice_distributions_all.amount%TYPE,
36       base_amount			ap_invoice_distributions_all.base_amount%TYPE,
37       description			ap_invoice_distributions_all.description%TYPE,
38       income_tax_region			ap_invoice_distributions_all.income_tax_region%TYPE,
39       po_distribution_id		ap_invoice_distributions_all.po_distribution_id%TYPE,
40       type_1099 			ap_invoice_distributions_all.type_1099%TYPE,
41       attribute1 			ap_invoice_distributions_all.attribute1%TYPE,
42       attribute10 			ap_invoice_distributions_all.attribute10%TYPE,
43       attribute11 			ap_invoice_distributions_all.attribute11%TYPE,
44       attribute12 			ap_invoice_distributions_all.attribute12%TYPE,
45       attribute13 			ap_invoice_distributions_all.attribute13%TYPE,
46       attribute14 			ap_invoice_distributions_all.attribute14%TYPE,
47       attribute15 			ap_invoice_distributions_all.attribute15%TYPE,
48       attribute2 			ap_invoice_distributions_all.attribute2%TYPE,
49       attribute3 			ap_invoice_distributions_all.attribute3%TYPE,
50       attribute4 			ap_invoice_distributions_all.attribute4%TYPE,
51       attribute5 			ap_invoice_distributions_all.attribute5%TYPE,
52       attribute6 			ap_invoice_distributions_all.attribute6%TYPE,
53       attribute7 			ap_invoice_distributions_all.attribute7%TYPE,
54       attribute8 			ap_invoice_distributions_all.attribute8%TYPE,
55       attribute9 			ap_invoice_distributions_all.attribute9%TYPE,
56       attribute_category 		ap_invoice_distributions_all.attribute_category%TYPE,
57       expenditure_item_date		ap_invoice_distributions_all.expenditure_item_date%TYPE,
58       expenditure_organization_id	ap_invoice_distributions_all.expenditure_organization_id%TYPE,
59       expenditure_type 			ap_invoice_distributions_all.expenditure_type%TYPE,
60       parent_invoice_id 		ap_invoice_distributions_all.parent_invoice_id%TYPE,
61       pa_addition_flag 			ap_invoice_distributions_all.pa_addition_flag%TYPE,
62       pa_quantity 			ap_invoice_distributions_all.pa_quantity%TYPE,
63       project_accounting_context	ap_invoice_distributions_all.project_accounting_context%TYPE,
64       project_id			ap_invoice_distributions_all.project_id%TYPE,
65       task_id 				ap_invoice_distributions_all.task_id%TYPE,
66       awt_group_id 			ap_invoice_distributions_all.awt_group_id%TYPE,
67       global_attribute_category		ap_invoice_distributions_all.global_attribute_category%TYPE,
68       global_attribute1 		ap_invoice_distributions_all.global_attribute1%TYPE,
69       global_attribute2 		ap_invoice_distributions_all.global_attribute2%TYPE,
70       global_attribute3 		ap_invoice_distributions_all.global_attribute3%TYPE,
71       global_attribute4 		ap_invoice_distributions_all.global_attribute4%TYPE,
72       global_attribute5 		ap_invoice_distributions_all.global_attribute5%TYPE,
73       global_attribute6 		ap_invoice_distributions_all.global_attribute6%TYPE,
74       global_attribute7 		ap_invoice_distributions_all.global_attribute7%TYPE,
75       global_attribute8 		ap_invoice_distributions_all.global_attribute8%TYPE,
76       global_attribute9 		ap_invoice_distributions_all.global_attribute9%TYPE,
77       global_attribute10 		ap_invoice_distributions_all.global_attribute10%TYPE,
78       global_attribute11 		ap_invoice_distributions_all.global_attribute11%TYPE,
79       global_attribute12 		ap_invoice_distributions_all.global_attribute12%TYPE,
80       global_attribute13 		ap_invoice_distributions_all.global_attribute13%TYPE,
81       global_attribute14 		ap_invoice_distributions_all.global_attribute14%TYPE,
82       global_attribute15 		ap_invoice_distributions_all.global_attribute15%TYPE,
83       global_attribute16 		ap_invoice_distributions_all.global_attribute16%TYPE,
84       global_attribute17 		ap_invoice_distributions_all.global_attribute17%TYPE,
85       global_attribute18 		ap_invoice_distributions_all.global_attribute18%TYPE,
86       global_attribute19 		ap_invoice_distributions_all.global_attribute19%TYPE,
87       global_attribute20 		ap_invoice_distributions_all.global_attribute20%TYPE,
88       award_id 				ap_invoice_distributions_all.award_id%TYPE,
89       dist_match_type 			ap_invoice_distributions_all.dist_match_type%TYPE,
90       rcv_transaction_id 		ap_invoice_distributions_all.rcv_transaction_id%TYPE,
91       tax_recoverable_flag		ap_invoice_distributions_all.tax_recoverable_flag%TYPE,
92       merchant_document_number          ap_invoice_distributions_all.merchant_document_number%TYPE, --Bug14658408: Start
93       merchant_name                     ap_invoice_distributions_all.merchant_name%TYPE,
94       merchant_reference                ap_invoice_distributions_all.merchant_reference%TYPE,
95       merchant_tax_reg_number           ap_invoice_distributions_all.merchant_tax_reg_number%TYPE,
96       merchant_taxpayer_id              ap_invoice_distributions_all.merchant_taxpayer_id%TYPE,  --Bug14658408: End
97       cancellation_flag 		ap_invoice_distributions_all.cancellation_flag%TYPE,
98       invoice_line_number		ap_invoice_distributions_all.invoice_line_number%TYPE,
99       corrected_invoice_dist_id		ap_invoice_distributions_all.corrected_invoice_dist_id%TYPE,
100       rounding_amt			ap_invoice_distributions_all.rounding_amt%TYPE,
101       charge_applicable_to_dist_id	ap_invoice_distributions_all.charge_applicable_to_dist_id%TYPE,
102       distribution_class 		ap_invoice_distributions_all.distribution_class%TYPE,
103       tax_code_id			ap_invoice_distributions_all.tax_code_id%TYPE,
104       detail_tax_dist_id 		ap_invoice_distributions_all.detail_tax_dist_id%TYPE,
105       rec_nrec_rate 			ap_invoice_distributions_all.rec_nrec_rate%TYPE,
106       recovery_rate_id 			ap_invoice_distributions_all.recovery_rate_id%TYPE,
107       recovery_rate_name 		ap_invoice_distributions_all.recovery_rate_name%TYPE,
108       recovery_type_code 		ap_invoice_distributions_all.recovery_type_code%TYPE,
109       summary_tax_line_id		ap_invoice_distributions_all.summary_tax_line_id%TYPE,
110       extra_po_erv 			ap_invoice_distributions_all.extra_po_erv%TYPE,
111       taxable_amount 			ap_invoice_distributions_all.taxable_amount%TYPE,
112       taxable_base_amount 		ap_invoice_distributions_all.taxable_base_amount%TYPE,
113       accrue_on_receipt_flag 		po_distributions_all.accrue_on_receipt_flag%TYPE,
114       allow_flex_override_flag		ap_system_parameters_all.allow_flex_override_flag%TYPE,
115       purch_encumbrance_flag		financials_system_params_all.purch_encumbrance_flag%TYPE,
116       org_id 				ap_invoice_distributions_all.org_id%TYPE,
117       tax_regime_id 			zx_rec_nrec_dist.tax_regime_id%TYPE,
118       tax_id 				zx_rec_nrec_dist.tax_id%TYPE,
119       tax_status_id 			zx_rec_nrec_dist.tax_status_id%TYPE,
120       tax_jurisdiction_id 		zx_lines.tax_jurisdiction_id%TYPE,
121       par_dist_assets_tracking_flag     ap_invoice_distributions_all.assets_tracking_flag%TYPE,  -- Bug 13821160
122       parent_dist_cancellation_flag	ap_invoice_distributions_all.cancellation_flag%TYPE,
123       parent_dist_reversal_flag		ap_invoice_distributions_all.reversal_flag%TYPE,
124       parent_dist_parent_reversal_id	ap_invoice_distributions_all.parent_reversal_id%TYPE,
125       reversed_tax_dist_id 		zx_rec_nrec_dist.reversed_tax_dist_id%TYPE,
126       adjusted_doc_tax_dist_id 		zx_rec_nrec_dist.adjusted_doc_tax_dist_id%TYPE,
127       applied_from_tax_dist_id 		zx_rec_nrec_dist.applied_from_tax_dist_id%TYPE,
128       prepay_distribution_id		ap_invoice_distributions_all.prepay_distribution_id%TYPE,
129       prepay_tax_diff_amount	        ap_invoice_distributions_all.prepay_tax_diff_amount%TYPE,
130       invoice_id			ap_invoice_distributions_all.invoice_id%TYPE,
131       batch_id				ap_invoice_distributions_all.batch_id%TYPE,
132       set_of_books_id			ap_invoice_distributions_all.set_of_books_id%TYPE,
133 	  pay_awt_group_id			ap_invoice_distributions_all.pay_awt_group_id%TYPE, --bug8345264
134       account_source_tax_rate_id	zx_rec_nrec_dist.account_source_tax_rate_id%TYPE
135       );
136 
137   --bug 12728634 Added new function
138 
139    /* Bug13399833: Commented this and made the function public by declaring in spec*/
140   /*FUNCTION GET_CCID_FROM_PROJECTS
141            ( p_invoice_id IN ap_invoice_distributions_all.invoice_id%TYPE,
142              p_line_number IN ap_invoice_distributions_all.invoice_line_number%TYPE,
143 			 p_ccid OUT NOCOPY AP_INVOICE_DISTRIBUTIONS_ALL.DIST_CODE_COMBINATION_ID%TYPE ) RETURN BOOLEAN;	*/
144 
145   PROCEDURE insert_tax_distributions
146   			(p_invoice_header_rec        IN ap_invoices_all%ROWTYPE,
147 			 p_inv_dist_rec              IN r_ins_tax_dist_info,
148 			 p_dist_code_combination_id  IN NUMBER,
149 			 p_user_id	             IN NUMBER,
150 			 p_sysdate	             IN DATE,
151 			 p_login_id	             IN	NUMBER,
152 			 p_calling_sequence          IN VARCHAR2);
153 
154 
155 --Added a new funtion for the bug 10621602 . It will accept the invoice_distribution_id as parameter
156 -- and retrun 0 if the value is there in the ret_dists record which says that this distribution is related to
157 --retainage.
158 
159   FUNCTION find_val(p_invoice_dist IN NUMBER) RETURN NUMBER
160   IS
161     l_number                     NUMBER ;
162     l_debug_info                 VARCHAR2(2000);
163     l_api_name			CONSTANT VARCHAR2(100) := 'FIND_VAL';
164 
165     BEGIN
166       IF (ap_etax_services_pkg.ret_dists.EXISTS(p_invoice_dist)) THEN
167 
168           ------------------------------------------------------------------
169           l_debug_info := 'Found Collection Populated Returning 0 ';
170           IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
171              FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
172           END IF;
173          ------------------------------------------------------------------
174 
175           l_number := 0;
176 
177       ELSE
178 
179           ------------------------------------------------------------------
180           l_debug_info := 'Found Collection Not Populated Returning 1 ';
181           IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
182              FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
183           END IF;
184          ------------------------------------------------------------------
185 
186           l_number := 1;
187 
188       END IF ;
189 
190       RETURN (l_number);
191 
192   END find_val;
193   --bug  10621602 ends
194 
195 /*bug 10282701 Added the following function */
196   FUNCTION TAX_ONLY_LINE_EXIST
197                         (p_invoice_id  IN NUMBER) RETURN BOOLEAN;
198 
199 /*=============================================================================
200  |  FUNCTION - Get_Event_Class_Code()
201  |
202  |  DESCRIPTION
203  |      Public function that will get the event class code required to call
204  |      the eTax services based on the invoice type.  These event class code is
205  |      AP specific.  eTax will convert this event class code to the tax class
206  |      code used by eTax.
207  |
208  |  PARAMETERS
209  |      P_Invoice_Type_Lookup_Code - Invoice Type
210  |      P_Event_Class_Code - event class code
211  |      P_error_code - Error code to be returned
212  |      P_calling_sequence -  Calling sequence
213  |
214  |  MODIFICATION HISTORY
215  |    DATE          Author         Action
216  |    08-OCT-2003   SYIDNER        Created
217  |
218  *============================================================================*/
219   FUNCTION Get_Event_Class_Code(
220              P_Invoice_Type_Lookup_Code    IN VARCHAR2,
221              P_Event_Class_Code            OUT NOCOPY VARCHAR2,
222              P_Error_Code                  OUT NOCOPY VARCHAR2,
223              P_Calling_Sequence            IN VARCHAR2) RETURN BOOLEAN
224   IS
225 
226     l_debug_info                 VARCHAR2(2000);
227     l_curr_calling_sequence      VARCHAR2(4000);
228     l_return_var                 BOOLEAN := TRUE;
229     l_api_name			  CONSTANT VARCHAR2(100) := 'Get_Event_Class_Code';
230 
231   BEGIN
232 
233     l_curr_calling_sequence := 'AP_ETAX_UTILITY_PKG.Get_Event_Class_Code<-' ||
234                                P_calling_sequence;
235 
236     -- The following invoice types are not included to get an event class due to:
237     -- AWT and INTEREST: Withholding Tax and Interest invoices do not require
238     --                   tax calculation.
239     -- QUICKDEFAULT and QUICKMATCH: These defined types for invoices are only
240     --                              entry mechanisms.  When the invoice is commit
241     --                              the type is STANDARD.
242 
243     IF (P_Invoice_Type_Lookup_Code IN ('STANDARD','CREDIT','DEBIT','MIXED',
244                                        'ADJUSTMENT','PO PRICE ADJUST',
245                                        'INVOICE REQUEST','CREDIT MEMO REQUEST',
246                                        'RETAINAGE RELEASE','PAYMENT REQUEST')) THEN   -- for bug 5948586
247 
248 
249       P_Event_Class_Code := 'STANDARD INVOICES';
250 
251       ------------------------------------------------------------------
252       l_debug_info := 'Step 1: Event Class Code is STANDARD INVOICES '||P_Event_Class_Code;
253       IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
254          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
255       END IF;
256       ------------------------------------------------------------------
257 
258 
259     ELSIF (P_Invoice_Type_Lookup_Code IN ('PREPAYMENT')) THEN
260 
261 
262       P_Event_Class_Code := 'PREPAYMENT INVOICES';
263 
264       ------------------------------------------------------------------
265       l_debug_info := 'Step 2: Event Class Code is PREPAYMENT INVOICES '||P_Event_Class_Code;
266       IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
267          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
268       END IF;
269       ------------------------------------------------------------------
270 
271     ELSIF (P_Invoice_Type_Lookup_Code IN ('EXPENSE REPORT')) THEN
272 
273       P_Event_Class_Code := 'EXPENSE REPORTS';
274 
275       ------------------------------------------------------------------
276       l_debug_info := 'Step 3: Event Class Code is EXPENSE REPORTS '||P_Event_Class_Code;
277       IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
278          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
279       END IF;
280       ------------------------------------------------------------------
281 
282     ELSE
283 
284       P_Event_Class_Code := NULL;
285       l_return_var := FALSE;
286 
287       ------------------------------------------------------------------
288       l_debug_info := 'Step 4: Event Class Code is NULL and function '||
289                       'returns FALSE because eTax is not defined to be '||
290                       'called for this Invoice type ';
291       IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
292         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
293       END IF;
294       ------------------------------------------------------------------
295 
296     END IF;
297 
298     RETURN l_return_var;
299 
300   EXCEPTION
301     WHEN OTHERS THEN
302       IF (SQLCODE <> -20001) THEN
303         FND_MESSAGE.SET_NAME('SQLAP','AP_DEBUG');
304         FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
305         FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',l_curr_calling_sequence);
306         FND_MESSAGE.SET_TOKEN('PARAMETERS',
307           ' P_Invoice_Type_Lookup_Code = '||P_Invoice_Type_Lookup_Code||
308           ' P_Error_Code = '||P_Error_Code||
309           ' P_Calling_Sequence = '||P_Calling_Sequence);
310         FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_debug_info);
311       END IF;
312 
313       APP_EXCEPTION.RAISE_EXCEPTION;
314 
315   END Get_Event_Class_Code;
316 
317 
318 /*=============================================================================
319  |  FUNCTION - Get_Event_Type_Code()
320  |
321  |  DESCRIPTION
322  |      Public function that will get the event type code required to call
323  |      eTax services based on the event class code, calling_mode and if
324  |      eTax was already called or not.
325  |
326  |  PARAMETERS
327  |      P_Event_Class_Code - Event class code
328  |      P_Calling_Mode - Calling mode
329  |      P_eTax_Already_called_flag - Is eTax already called?
330  |      P_Event_Type_Code - event type code
331  |      P_error_code - Error code to be returned
332  |      P_calling_sequence -  Calling sequence
333  |
334  |  MODIFICATION HISTORY
335  |    DATE          Author         Action
336  |    09-OCT-2003   SYIDNER        Created
337  |
338  *============================================================================*/
339 
340   FUNCTION Get_Event_Type_Code(
341              P_Event_Class_Code            IN VARCHAR2,
342              P_Calling_Mode                IN VARCHAR2,
343              P_eTax_Already_called_flag    IN VARCHAR2,
344              P_Event_Type_Code             OUT NOCOPY VARCHAR2,
345              P_Error_Code                  OUT NOCOPY VARCHAR2,
346              P_Calling_Sequence            IN VARCHAR2) RETURN BOOLEAN
347 
348   IS
349 
350     l_debug_info                 VARCHAR2(2000);
351     l_curr_calling_sequence      VARCHAR2(4000);
352     l_class_section              VARCHAR2(500);
353     l_action_section             VARCHAR2(500);
354 
355     l_api_name			  CONSTANT VARCHAR2(100) := 'Get_Event_Type_Code';
356 
357   BEGIN
358 
359     l_curr_calling_sequence := 'AP_ETAX_UTILITY_PKG.Get_Event_Type_Code<-' ||
360                                P_calling_sequence;
361 
362     --  There are 3 different event classes defined for AP to handle tax in 11ix.
363     --  They are: STANDARD INVOICES, PREPAYMENT INVOICES and EXPENSE REPORTS.
364     --  There are different event type codes per event type and event class due to
365     --  a requirement of SLA.  The event type code should be unique per product.
366     --  So, we can say the event type code is composed of 2 sections:
367     --  The class section (STANDARD, PREPAYMENT or EXPENSE REPORT) and the
368     --  action section that determines the action ocurred to the class
369     --  (CREATE, UPDATE, CANCELLED, FROZEN, etc).
370 
371     ------------------------------------------------------------------
372     l_debug_info := 'Step 1: Event Class Code is: '||p_event_class_code;
373     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
374        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
375     END IF;
376     ------------------------------------------------------------------
377 
378     IF ( P_Event_Class_Code = 'STANDARD INVOICES' ) THEN
379       l_class_section := 'STANDARD ';
380 
381     ELSIF ( P_Event_Class_Code = 'PREPAYMENT INVOICES' ) THEN
382       l_class_section := 'PREPAYMENT ';
383 
384     ELSIF ( P_Event_Class_Code = 'EXPENSE REPORTS' ) THEN
385       l_class_section := 'EXPENSE REPORT ';
386 
387     END IF;
388 
389     ------------------------------------------------------------------
390     l_debug_info := 'Step 2: Calling mode is: '||p_calling_mode;
391     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
392        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
393     END IF;
394     ------------------------------------------------------------------
395     IF ( p_calling_mode IN
396          ('CALCULATE', 'CALCULATE QUOTE', 'APPLY PREPAY',
397           'UNAPPLY PREPAY', 'RECOUPMENT','DISCARD LINE')) THEN  --Bug8811102
398       IF ( P_eTax_Already_called_flag = 'N' ) THEN
399         l_action_section := 'CREATED';
400       ELSE
401         l_action_section := 'UPDATED';
402 
403       END IF;
404 
405     ELSIF ( p_calling_mode IN ('CALCULATE IMPORT', 'VALIDATE IMPORT',
406                                'IMPORT INTERFACE')) THEN
407       l_action_section := 'CREATED';
408 
409     ELSIF ( p_calling_mode IN ('DISTRIBUTE', 'DISTRIBUTE RECOUP') ) THEN
410       IF ( P_eTax_Already_called_flag = 'N' ) THEN
411          l_action_section := 'DISTRIBUTE';
412 
413       ELSE
414          l_action_section := 'REDISTRIBUTE';
415 
416       END IF;
417 
418     ELSIF ( p_calling_mode = 'DISTRIBUTE IMPORT' ) THEN
419       l_action_section := 'DISTRIBUTE';
420 
421     ELSIF ( p_calling_mode = 'REVERSE INVOICE' ) THEN
422       l_action_section := 'FULLY REVERSED';
423 
424     ELSIF ( p_calling_mode = 'OVERRIDE TAX' ) THEN
425       l_action_section := 'OVERRIDE TAX';
426 
427     ELSIF ( p_calling_mode = 'OVERRIDE RECOVERY' ) THEN
428       l_action_section := 'OVERRIDE DIST';
429 
430     ELSIF ( p_calling_mode = 'CANCEL INVOICE' ) THEN
431       l_action_section := 'CANCELLED TAX';
432 
433     ELSIF ( p_calling_mode = 'FREEZE INVOICE' ) THEN
434       l_action_section := 'FROZEN';
435 
436     ELSIF ( p_calling_mode = 'UNFREEZE INVOICE' ) THEN
437       l_action_section := 'UNFROZEN';
438 
439     ELSIF ( p_calling_mode = 'RELEASE TAX HOLDS' ) THEN
440       l_action_section := 'HOLDS RELEASED';
441 
442     ELSIF ( p_calling_mode
443               IN ('MARK TAX LINES DELETED', 'FREEZE DISTRIBUTIONS')) THEN
444       l_action_section := 'UPDATED';
445 
446     ELSIF ( p_calling_mode = 'VALIDATE' ) THEN
447       l_action_section := 'VALIDATED TAX';
448 
449     /*Introduced this condition for the bug 7388641 */
450     ELSIF ( p_calling_mode = 'DELETE INVOICE' ) THEN
451       l_action_section := 'PURGED';
452 
453     END IF;
454 
455     -- Construct the code from the class and action sections
456     p_event_type_code := l_class_section||l_action_section;
457 
458     ------------------------------------------------------------------
459     l_debug_info := 'Step 3: Event Type Code: '||p_event_type_code;
460     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
461        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
462     END IF;
463     ------------------------------------------------------------------
464 
465     RETURN(TRUE);
466 
467   EXCEPTION
468     WHEN OTHERS THEN
469       IF (SQLCODE <> -20001) THEN
470         FND_MESSAGE.SET_NAME('SQLAP','AP_DEBUG');
471         FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
472         FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',l_curr_calling_sequence);
473         FND_MESSAGE.SET_TOKEN('PARAMETERS',
474           ' P_Event_Class_Code = '||P_Event_Class_Code||
475           ' P_Calling_Mode ='||P_Calling_Mode||
476           ' P_eTax_Already_called_flag ='||P_eTax_Already_called_flag||
477           ' P_Error_Code = '||P_Error_Code||
478           ' P_Calling_Sequence = '||P_Calling_Sequence);
479         FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_debug_info);
480       END IF;
481 
482       APP_EXCEPTION.RAISE_EXCEPTION;
483 
484   END Get_Event_Type_Code;
485 
486 /*=============================================================================
487  |  FUNCTION - Get_Corrected_Invoice_Info()
488  |
489  |  DESCRIPTION
490  |      This function return the additional information required to populate
491  |      the zx_transaction_lines_gt global temporary table for eTax.
492  |
493  |  PARAMETERS
494  |      P_Corrected_Invoice_Id - Invoice Id for the corrected line
495  |      P_corrected_Line_number - Line number for the corrected line
496  |      P_Application_Id - Application Id for the corrected invoice
497  |      P_Entity_code - entity code required for the event class
498  |      P_Event_Class_Code - Event class code for the corrected invoice
499  |      P_Invoice_Number - Corrected invoice number
500  |      P_Invoice_Date - corrected invoice date
501  |      P_error_code - Error code to be returned
502  |      P_calling_sequence -  Calling sequence
503  |
504  |  MODIFICATION HISTORY
505  |    DATE          Author         Action
506  |    13-OCT-2003   SYIDNER        Created
507  |
508  *============================================================================*/
509   FUNCTION Get_Corrected_Invoice_Info(
510              P_Corrected_Invoice_Id        IN NUMBER,
511              P_Corrected_Line_Number       IN NUMBER,
512              P_Application_Id              OUT NOCOPY NUMBER,
513              P_Entity_code                 OUT NOCOPY VARCHAR2,
514              P_Event_Class_Code            OUT NOCOPY VARCHAR2,
515              P_Invoice_Number              OUT NOCOPY VARCHAR2,
516              P_Invoice_Date                OUT NOCOPY DATE,
517              P_Error_Code                  OUT NOCOPY VARCHAR2,
518              P_Calling_Sequence            IN VARCHAR2) RETURN BOOLEAN
519 
520   IS
521 
522     l_debug_info                 VARCHAR2(2000);
523     l_curr_calling_sequence      VARCHAR2(4000);
524     l_corrected_invoice_type     ap_invoices_all.invoice_type_lookup_code%TYPE;
525 
526     l_api_name			  CONSTANT VARCHAR2(100) := 'Get_Corrected_Invoice_Info';
527 
528 
529     CURSOR corrected_inv( c_corrected_inv_id IN NUMBER) IS
530     SELECT invoice_num, invoice_date, invoice_type_lookup_code
531       FROM ap_invoices_all
532      WHERE invoice_id = c_corrected_inv_id;
533 
534   BEGIN
535 
536     l_curr_calling_sequence := 'AP_ETAX_UTILITY_PKG.Get_Corrected_Invoice_Info<-'||
537                                P_calling_sequence;
538 
539     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
540         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_curr_calling_sequence);
541     END IF;
542 
543     -------------------------------------------------------------------
544     l_debug_info := 'Step 1: Get corrected invoice info';
545     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
546         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
547     END IF;
548     -------------------------------------------------------------------
549     IF ( P_Corrected_Invoice_Id IS NOT NULL) THEN
550 
551       P_Application_Id := 200; -- Oracle Payables
552       P_Entity_code := 'AP_INVOICES';
553 
554       BEGIN
555         OPEN corrected_inv (P_Corrected_Invoice_Id);
556         FETCH corrected_inv
557           INTO P_Invoice_Number, P_Invoice_Date,
558                l_corrected_invoice_type;
559         CLOSE corrected_inv;
560       END ;
561     -------------------------------------------------------------------
562     l_debug_info := 'Step 1.1: Corrected Inv Id Info '||P_Invoice_Number||' & '||P_Invoice_Date||' & '||l_corrected_invoice_type;
563     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
564         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
565     END IF;
566     -------------------------------------------------------------------
567       --------------------------------------------------------------------------
568       l_debug_info := 'Step 2: Get event class code corrected_invoice_id';
569       IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
570          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
571       END IF;
572       --------------------------------------------------------------------------
573       IF NOT(AP_ETAX_UTILITY_PKG.Get_Event_Class_Code(
574         P_Invoice_Type_Lookup_Code => l_corrected_invoice_type,
575         P_Event_Class_Code         => P_Event_Class_Code,
576         P_error_code               => P_error_code,
577         P_calling_sequence         => l_curr_calling_sequence)) THEN
578 
579         RETURN FALSE;
580       END IF;
581 
582     END IF;
583     RETURN TRUE;
584 
585   EXCEPTION
586     WHEN OTHERS THEN
587       IF (SQLCODE <> -20001) THEN
588         FND_MESSAGE.SET_NAME('SQLAP','AP_DEBUG');
589         FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
590         FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',l_curr_calling_sequence);
591         FND_MESSAGE.SET_TOKEN('PARAMETERS',
592           ' P_Corrected_Invoice_Id = '||P_Corrected_Invoice_Id||
593           ' P_Corrected_Line_Number = '||P_Corrected_Line_Number||
594           ' P_Error_Code = '||P_Error_Code||
595           ' P_Calling_Sequence = '||P_Calling_Sequence);
596         FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_debug_info);
597       END IF;
598 
599      --bug10140354
600       IF AP_APPROVAL_PKG.G_VALIDATION_REQUEST_ID IS NULL THEN
601         APP_EXCEPTION.RAISE_EXCEPTION;
602     ELSE
603 
604     RETURN FALSE;
605     END IF;
606   END Get_Corrected_Invoice_Info;
607 
608 /*=============================================================================
609  |  FUNCTION - Get_Prepay_Invoice_Info()
610  |
611  |  DESCRIPTION
612  |      This function return the additional information required to populate
613  |      the zx_transaction_lines_gt global temporary table for eTax.
614  |
615  |  PARAMETERS
616  |      P_Prepay_Invoice_Id - Invoice Id for the applied prepay line
617  |      P_Prepay_Line_number - Line number for the applied prepay line
618  |      P_Application_Id - Application Id for the applied prepay invoice
619  |      P_Entity_code - entity code required for the event class
620  |      P_Event_Class_Code - Event class code for the applied prepay invoice
621  |      P_Invoice_Number - Applied Prepayment number
622  |      P_Invoice_Date - Applied prepayment invoice date
623  |      P_error_code - Error code to be returned
624  |      P_calling_sequence -  Calling sequence
625  |
626  |  MODIFICATION HISTORY
627  |    DATE          Author         Action
628  |    15-OCT-2003   SYIDNER        Created
629  |
630  *============================================================================*/
631 
632   FUNCTION Get_Prepay_Invoice_Info(
633              P_Prepay_Invoice_Id        IN  NUMBER,
634              P_Prepay_Line_Number       IN  NUMBER,
635              P_Application_Id           OUT NOCOPY NUMBER,
636              P_Entity_code              OUT NOCOPY VARCHAR2,
637              P_Event_Class_Code         OUT NOCOPY VARCHAR2,
638              P_Invoice_Number           OUT NOCOPY VARCHAR2,
639              P_Invoice_Date             OUT NOCOPY DATE,
640              P_Error_Code               OUT NOCOPY VARCHAR2,
641              P_Calling_Sequence         IN  VARCHAR2) RETURN BOOLEAN
642   IS
643 
644     l_debug_info                 VARCHAR2(2000);
645     l_curr_calling_sequence      VARCHAR2(4000);
646     l_prepay_invoice_type        ap_invoices_all.invoice_type_lookup_code%TYPE;
647 
648     l_api_name			  CONSTANT VARCHAR2(100) := 'Get_Prepay_Invoice_Info';
649 
650     CURSOR prepay_inv (c_prepay_inv_id IN NUMBER) IS
651     SELECT invoice_num, invoice_date, invoice_type_lookup_code
652       FROM ap_invoices_all
653      WHERE invoice_id = c_prepay_inv_id;
654 
655   BEGIN
656 
657     l_curr_calling_sequence := 'AP_ETAX_UTILITY_PKG.Get_Prepay_Invoice_Info<-' ||
658                                P_calling_sequence;
659 
660     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
661        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_curr_calling_sequence);
662     END IF;
663 
664     -------------------------------------------------------------------
665     l_debug_info := 'Step 1: Get applied prepayment invoice info';
666     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
667        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
668     END IF;
669     -------------------------------------------------------------------
670     IF ( P_Prepay_Invoice_Id IS NOT NULL) THEN
671 
672       P_Application_Id := 200;
673       P_Entity_code    := 'AP_INVOICES';
674 
675       BEGIN
676         OPEN  prepay_inv (P_Prepay_Invoice_Id);
677         FETCH prepay_inv
678          INTO P_Invoice_Number, P_Invoice_Date,
679               l_prepay_invoice_type;
680         CLOSE prepay_inv;
681       END ;
682     -------------------------------------------------------------------
683     l_debug_info := 'Step 1.1: Applied prepayment invoice info '||P_Invoice_Number||' & '||P_Invoice_Date||' & '||l_prepay_invoice_type;
684     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
685        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
686     END IF;
687     -------------------------------------------------------------------
688       --------------------------------------------------------------------------
689       l_debug_info := 'Step 2: Get event class code prepay_invoice_id';
690       IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
691          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
692       END IF;
693       --------------------------------------------------------------------------
694       IF NOT(AP_ETAX_UTILITY_PKG.Get_Event_Class_Code(
695         P_Invoice_Type_Lookup_Code => l_prepay_invoice_type,
696         P_Event_Class_Code         => P_Event_Class_Code,
697         P_error_code               => P_error_code,
698         P_calling_sequence         => l_curr_calling_sequence)) THEN
699 
700         RETURN FALSE;
701       END IF;
702 
703     END IF;
704     RETURN TRUE;
705 
706   EXCEPTION
707     WHEN OTHERS THEN
708       IF (SQLCODE <> -20001) THEN
709         FND_MESSAGE.SET_NAME('SQLAP','AP_DEBUG');
710         FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
711         FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',l_curr_calling_sequence);
712         FND_MESSAGE.SET_TOKEN('PARAMETERS',
713           ' P_Prepay_Invoice_Id = '||P_Prepay_Invoice_Id||
714           ' P_Prepay_Line_Number = '||P_Prepay_Line_Number||
715           ' P_Error_Code = '||P_Error_Code||
716           ' P_Calling_Sequence = '||P_Calling_Sequence);
717         FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_debug_info);
718       END IF;
719 
720       --bug10140354
721       IF AP_APPROVAL_PKG.G_VALIDATION_REQUEST_ID IS NULL THEN
722         APP_EXCEPTION.RAISE_EXCEPTION;
723     ELSE
724 
725     RETURN FALSE;
726     END IF;
727 
728   END Get_Prepay_Invoice_Info;
729 
730 /*=============================================================================
731  |  FUNCTION - Get_Receipt_Info()
732  |
733  |  DESCRIPTION
734  |      This function return the additional information required to populate
735  |      the zx_transaction_lines_gt global temporary table for eTax.
736  |
737  |  PARAMETERS
738  |      P_Rcv_Transaction_Id - Receipt id
739  |      P_Application_Id - Application Id for the Receipt (201)
740  |      P_Entity_code - entity code required for the event class
741  |      P_Event_Class_Code - Event class code for the receipt
742  |      P_Transaction_Date - Transaction date
743  |      P_error_code - Error code to be returned
744  |      P_calling_sequence -  Calling sequence
745  |
746  |  MODIFICATION HISTORY
747  |    DATE          Author         Action
748  |    15-OCT-2003   SYIDNER        Created
749  |
750  *============================================================================*/
751   FUNCTION Get_Receipt_Info(
752              P_Rcv_Transaction_Id          IN  NUMBER,
753              P_Application_Id              OUT NOCOPY NUMBER,
754              P_Entity_code                 OUT NOCOPY VARCHAR2,
755              P_Event_Class_Code            OUT NOCOPY VARCHAR2,
756              P_Transaction_Date            OUT NOCOPY DATE,
757              P_Error_Code                  OUT NOCOPY VARCHAR2,
758              P_Calling_Sequence            IN  VARCHAR2) RETURN BOOLEAN
759   IS
760 
761     l_debug_info                 VARCHAR2(2000);
762     l_curr_calling_sequence      VARCHAR2(4000);
763     l_return_status              VARCHAR2(100);
764     l_msg_count                  NUMBER;
765     l_msg_data                   VARCHAR2(2000);
766 
767     l_transaction_type           rcv_transactions.transaction_type%TYPE;
768 
769     l_api_name			  CONSTANT VARCHAR2(100) := 'Get_Receipt_Info';
770 
771     CURSOR receipt_info (c_rcv_transaction IN NUMBER) IS
772     SELECT transaction_date, transaction_type
773       FROM rcv_transactions
774      WHERE transaction_id = c_rcv_transaction;
775 
776   BEGIN
777 
778     l_curr_calling_sequence := 'AP_ETAX_UTILITY_PKG.Get_Receipt_Info<-' ||
779                                P_calling_sequence;
780     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
781         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_curr_calling_sequence);
782     END IF;
783     -------------------------------------------------------------------
784     l_debug_info := 'Step 1: Get receipt info';
785     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
786         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
787     END IF;
788     -------------------------------------------------------------------
789     IF (P_Rcv_Transaction_Id IS NOT NULL) THEN
790 
791       OPEN  receipt_info (P_Rcv_Transaction_Id);
792       FETCH receipt_info
793        INTO P_Transaction_Date, l_transaction_type;
794       CLOSE receipt_info;
795 
796     -------------------------------------------------------------------
797     l_debug_info := 'Step 1.1: Receipt info '||P_Transaction_Date||' & '||l_transaction_type;
798     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
799         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
800     END IF;
801     -------------------------------------------------------------------
802 
803       --------------------------------------------------------------------------
804       l_debug_info := 'Step 2: Call PO API to get additional receipt info';
805       IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
806         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
807       END IF;
808       --------------------------------------------------------------------------
809       CST_UTILITY_PUB.Get_Receipt_Event_Info (
810 			  p_api_version      => 1.0 ,
811 			  p_transaction_type => 'MATCH',
812 			  x_return_status    => l_return_status,
813 			  x_msg_count        => l_msg_count,
814 			  x_msg_data         => l_msg_data,
815 			  p_entity_code      => p_entity_code,
816 			  p_application_id   => p_application_id,
817 			  p_event_class_code => p_event_class_code);
818 
819     END IF;
820 
821     RETURN TRUE;
822 
823   EXCEPTION
824     WHEN OTHERS THEN
825       IF (SQLCODE <> -20001) THEN
826         FND_MESSAGE.SET_NAME('SQLAP','AP_DEBUG');
827         FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
828         FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',l_curr_calling_sequence);
829         FND_MESSAGE.SET_TOKEN('PARAMETERS',
830           ' P_Rcv_Transaction_Id = '||P_Rcv_Transaction_Id||
831           ' P_Error_Code = '||P_Error_Code||
832           ' P_Calling_Sequence = '||P_Calling_Sequence);
833         FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_debug_info);
834       END IF;
835 
836       --bug10140354
837       IF AP_APPROVAL_PKG.G_VALIDATION_REQUEST_ID IS NULL THEN
838         APP_EXCEPTION.RAISE_EXCEPTION;
839     ELSE
840 
841     RETURN FALSE;
842     END IF;
843 
844   END Get_Receipt_Info;
845 
846 /*=============================================================================
847  |  FUNCTION - Get_PO_Info()
848  |
849  |  DESCRIPTION
850  |      This function return the additional information required to populate
851  |      the zx_transaction_lines_gt and the zx_distribution_lines_gt global
852  |      temporary tables for eTax.
853  |      The parameters po_line_location_id and po_distribution_id are mutual
854  |      exclusive.
855  |
856  |  PARAMETERS
857  |      P_Po_line_location_id - PO line location
858  |      P_Po_Distribution_id - Po distribution
859  |      P_Application_Id - Application Id for the PO document (201)
860  |      P_Entity_code - entity code required for the event class
861  |      P_Event_Class_Code - Event class code for the PO doc
862  |      P_PO_Quantity - PO quantity
863  |      P_Product_Org_Id - Product Org_id
864  |      P_Po_Header_Id - Po header Id
865  |      P_Po_Header_Curr_Conv_Rate - Po Header currency conversion rate
866  |      P_error_code - Error code to be returned
867  |      P_calling_sequence -  Calling sequence
868  |
869  |  MODIFICATION HISTORY
870  |    DATE          Author         Action
871  |    15-OCT-2003   SYIDNER        Created
872  |    20-OCT-2003   SYIDNER        Included po_distribution as a parameter
873  |                                 and modify the function to return Po data
874  |                                 for the call to the determine_recovery serv
875  *============================================================================*/
876   FUNCTION Get_PO_Info(
877              P_PO_Line_Location_Id         IN  OUT NOCOPY NUMBER,
878              P_Po_Distribution_Id          IN  NUMBER,
879              P_Application_Id              OUT NOCOPY NUMBER,
880              P_Entity_code                 OUT NOCOPY VARCHAR2,
881              P_Event_Class_Code            OUT NOCOPY VARCHAR2,
882              P_PO_Quantity                 OUT NOCOPY NUMBER,
883              P_Product_Org_Id              OUT NOCOPY NUMBER,
884              P_Po_Header_Id                OUT NOCOPY NUMBER,
885              P_Po_Header_Curr_Conv_Rate    OUT NOCOPY NUMBER,
886 	         P_Uom_Code			   OUT NOCOPY VARCHAR2,
887 	         P_Dist_Qty			   OUT NOCOPY NUMBER,
888 	         P_Ship_Price		   OUT NOCOPY NUMBER,
889              P_Error_Code                  OUT NOCOPY VARCHAR2,
890              P_Calling_Sequence            IN  VARCHAR2) RETURN BOOLEAN
891 
892   IS
893 
894     l_debug_info                 VARCHAR2(2000);
895     l_curr_calling_sequence      VARCHAR2(4000);
896     l_return_status 		 VARCHAR2(100);
897     l_msg_count			 NUMBER;
898     l_msg_data 			 VARCHAR2(2000);
899 
900     l_org_id			 po_line_locations_all.org_id%type;
901     l_po_release_id		 po_line_locations_all.po_release_id%type;
902     l_doc_type			 VARCHAR2(20);
903 
904     l_api_name			  CONSTANT VARCHAR2(100) := 'Get_PO_Info';
905 
906     CURSOR PO_Info_from_line_loc (c_po_line_location_Id IN NUMBER) IS
907     SELECT pll.org_id, pll.quantity, pll.po_header_id, nvl(ph.rate ,1), pll.po_release_id, mum.uom_code
908       FROM po_line_locations_all pll, po_headers_all ph, mtl_units_of_measure mum
909      WHERE pll.line_location_id = c_po_line_location_Id
910        AND pll.po_header_id = ph.po_header_id
911        AND pll.unit_meas_lookup_code = mum.unit_of_measure (+);
912 
913     CURSOR PO_Info_from_dist (c_po_dist_Id IN NUMBER) IS
914     SELECT pll.org_id, pll.quantity, pll.line_location_id,
915            pll.po_header_id, nvl(ph.rate,1), pll.po_release_id, mum.uom_code,
916 	   pd.quantity_ordered, pll.price_override
917       FROM po_line_locations_all pll, po_distributions_all pd,
918            po_headers_all ph, mtl_units_of_measure mum
919      WHERE pd.po_distribution_id = c_po_dist_Id
920        AND pd.line_location_id = pll.line_location_id
921        AND pll.po_header_id = ph.po_header_id
922        AND pll.unit_meas_lookup_code = mum.unit_of_measure (+);
923 
924   BEGIN
925 
926     l_curr_calling_sequence := 'AP_ETAX_UTILITY_PKG.Get_PO_Info<-' ||
927                                P_calling_sequence;
928     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
929        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_curr_calling_sequence);
930     END IF;
931 
932     -------------------------------------------------------------------
933     l_debug_info := 'Step 1: Get PO additional info';
934     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
935        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
936     END IF;
937     -------------------------------------------------------------------
938 
939     IF ( P_PO_Line_Location_Id IS NOT NULL) THEN
940         OPEN  PO_info_from_line_loc (P_PO_Line_Location_Id);
941         FETCH PO_info_from_line_loc
942          INTO l_org_Id, P_PO_Quantity,
943               P_Po_Header_Id, P_Po_header_curr_conv_rate, l_po_release_id, p_uom_code;
944         CLOSE PO_info_from_line_loc;
945 
946         -------------------------------------------------------------------
947         l_debug_info := 'Step 1.1: PO additional info '||l_org_Id||' & '||P_PO_Quantity||' & '||P_Po_Header_Id||' &' ||P_Po_header_curr_conv_rate ||' & '||l_po_release_id||' & '||p_uom_code ;
948         IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
949            FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
950         END IF;
951         -------------------------------------------------------------------
952 
953     ELSIF ( P_PO_Distribution_Id IS NOT NULL) THEN
954         OPEN  PO_info_from_dist (P_PO_Distribution_Id);
955         FETCH PO_info_from_dist
956          INTO l_org_id, P_PO_Quantity, P_PO_Line_Location_Id,
957               P_Po_Header_Id, P_Po_header_curr_conv_rate, l_po_release_id, p_uom_code,
958 	      P_Dist_Qty, P_Ship_Price;
959         CLOSE PO_info_from_dist;
960 
961         -------------------------------------------------------------------
962         l_debug_info := 'Step 1.1: PO additional info '||l_org_Id||' & '||P_PO_Quantity||' & '||P_PO_Line_Location_Id||' & '||P_Po_Header_Id||' &' ||P_Po_header_curr_conv_rate ||' & '||l_po_release_id||' & '||p_uom_code ;
963         IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
964            FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
965         END IF;
966         -------------------------------------------------------------------
967 
968 
969 
970     END IF;
971 
972     IF NOT AP_ETAX_SERVICES_PKG.g_fsp_attributes.exists(l_org_id) THEN
973 
974        SELECT inventory_organization_id
975          INTO AP_ETAX_SERVICES_PKG.g_fsp_attributes(l_org_id).inventory_organization_id
976          FROM financials_system_params_all
977         WHERE org_id = l_org_id;
978 
979     END IF;
980 
981     p_product_org_id := AP_ETAX_SERVICES_PKG.g_fsp_attributes(l_org_id).inventory_organization_id;
982 
983     -------------------------------------------------------------------
984     l_debug_info := 'Step 2: Product Org Id '||p_product_org_id;
985     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
986        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
987     END IF;
988     -------------------------------------------------------------------
989 
990     -- Bug 5193570
991     -- Set ref_doc_trx_id to po_release_id when matched to a Release.
992 
993     IF l_po_release_id IS NOT NULL THEN
994 	p_po_header_id := l_po_release_id;
995 	l_doc_type     := 'RELEASE';
996 
997     -------------------------------------------------------------------
998     l_debug_info := 'Step 3: p_po_header_id and  l_doc_type '||p_po_header_id||' & '||l_doc_type;
999     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1000        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
1001     END IF;
1002     -------------------------------------------------------------------
1003 
1004     ELSE
1005         l_doc_type     := 'PO';
1006 
1007         -------------------------------------------------------------------
1008         l_debug_info := 'Step 3: l_doc_type '||l_doc_type;
1009         IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1010            FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
1011         END IF;
1012         -------------------------------------------------------------------
1013 
1014     END IF;
1015 
1016 
1017 
1018 
1019     PO_TAX_INTERFACE_GRP.get_document_tax_constants(
1020     	p_api_version 		=> 1.0,
1021 		p_init_msg_list		=> NULL,
1022 		p_commit		=> 'N',
1023 		p_validation_level	=> NULL,
1024 		x_return_status		=> l_return_status,
1025 		x_msg_count		=> l_msg_count,
1026 		x_msg_data		=> l_msg_data,
1027 		p_doc_type		=> l_doc_type,
1028 		x_application_id	=> p_application_id,
1029 		x_entity_code		=> p_entity_code,
1030 		x_event_class_code	=> p_event_class_code );
1031 
1032     -------------------------------------------------------------------
1033     l_debug_info := 'Step 4: Calling PO API to get PO etax document '||
1034                     ' setup info '||l_doc_type||' & '||p_application_id||' & '||p_entity_code||' & '||p_event_class_code;
1035 
1036     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1037         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
1038     END IF;
1039     -------------------------------------------------------------------
1040 
1041     RETURN TRUE;
1042 
1043   EXCEPTION
1044     WHEN OTHERS THEN
1045       IF (SQLCODE <> -20001) THEN
1046         FND_MESSAGE.SET_NAME('SQLAP','AP_DEBUG');
1047         FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
1048         FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',l_curr_calling_sequence);
1049         FND_MESSAGE.SET_TOKEN('PARAMETERS',
1050           ' P_PO_Line_Location_Id = '||P_PO_Line_Location_Id||
1051           ' P_Error_Code = '||P_Error_Code||
1052           ' P_Calling_Sequence = '||P_Calling_Sequence);
1053         FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_debug_info);
1054       END IF;
1055 
1056        --bug10140354
1057       IF AP_APPROVAL_PKG.G_VALIDATION_REQUEST_ID IS NULL THEN
1058         APP_EXCEPTION.RAISE_EXCEPTION;
1059     ELSE
1060 
1061     RETURN FALSE;
1062     END IF;
1063   END Get_PO_Info;
1064 
1065 /*=============================================================================
1066  |  FUNCTION - Get_Prepay_Awt_Group_Id()
1067  |
1068  |  DESCRIPTION
1069  |      This function return the awt_group_id for a parent prepay item line
1070  |      based on the prepayment distribution id.
1071  |
1072  |  PARAMETERS
1073  |      P_Prepay_Distribution_id - Distribution Id of the prepayment
1074  |
1075  |  MODIFICATION HISTORY
1076  |    DATE          Author         Action
1077  |    15-OCT-2003   SYIDNER        Created
1078  |
1079  *============================================================================*/
1080   FUNCTION Get_Prepay_Awt_Group_Id(
1081              P_Prepay_Distribution_id    IN NUMBER,
1082              P_Calling_Sequence          IN VARCHAR2) RETURN NUMBER
1083   IS
1084 
1085     l_debug_info                 VARCHAR2(240);
1086     l_curr_calling_sequence      VARCHAR2(4000);
1087     l_api_name			  CONSTANT VARCHAR2(100) := 'Get_Prepay_Awt_Group_Id';
1088 
1089     CURSOR prepay_awt_group_id (c_prepay_dist_id IN NUMBER) IS
1090     SELECT aid.awt_group_id
1091       FROM ap_invoice_distributions_all aid
1092           -- ,ap_invoice_lines_all ail
1093      WHERE aid.invoice_distribution_id = c_prepay_dist_id;
1094       -- AND aid.invoice_id = ail.invoice_id
1095       -- AND aid.invoice_line_number = ail.line_number;
1096       --Bug8334059 Awt_group_id will be retrieved from ap_invoice_distributions_all
1097 
1098     l_awt_group_id     ap_invoice_lines_all.awt_group_id%TYPE;
1099 
1100   BEGIN
1101 
1102     l_curr_calling_sequence := 'AP_ETAX_UTILITY_PKG.Get_Prepay_Awt_Group_Id<-'||
1103                                P_calling_sequence;
1104 
1105     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1106        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_curr_calling_sequence);
1107     END IF;
1108 
1109 
1110     OPEN  prepay_awt_group_id( P_Prepay_Distribution_id);
1111     FETCH prepay_awt_group_id
1112     INTO  l_awt_group_id;
1113     CLOSE prepay_awt_group_id;
1114 
1115     -------------------------------------------------------------------
1116     l_debug_info := 'Step 1: Get awt_group_id from prepay item line '||l_awt_group_id;
1117 
1118     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1119        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
1120     END IF;
1121     -------------------------------------------------------------------
1122 
1123     RETURN l_awt_group_id;
1124 
1125   EXCEPTION
1126     WHEN OTHERS THEN
1127       IF (SQLCODE <> -20001) THEN
1128         FND_MESSAGE.SET_NAME('SQLAP','AP_DEBUG');
1129         FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
1130         FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',l_curr_calling_sequence);
1131         FND_MESSAGE.SET_TOKEN('PARAMETERS',
1132           ' P_Prepay_Distribution_id = '||P_Prepay_Distribution_id||
1133           ' P_Calling_Sequence = '||P_Calling_Sequence);
1134         FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_debug_info);
1135       END IF;
1136 
1137       IF ( prepay_awt_group_id%ISOPEN ) THEN
1138         CLOSE prepay_awt_group_id;
1139       END IF;
1140 
1141       APP_EXCEPTION.RAISE_EXCEPTION;
1142   END Get_Prepay_Awt_Group_Id;
1143 
1144 /*=============================================================================
1145  |  FUNCTION - Return_Tax_Lines()
1146  |
1147  |  DESCRIPTION
1148  |      This function handles the return of tax lines.  It includes creation,
1149  |      update, or delete of existing exclusive tax lines in AP if required.
1150  |      It also handles the update of the total tax amounts. (Inclusive and
1151  |      self-assessed.
1152  |
1153  |  PARAMETERS
1154  |      P_Invoice_Header_Rec - Header info
1155  |      P_error_code - Error code to be returned
1156  |      P_calling_sequence -  Calling sequence
1157  |
1158  |  MODIFICATION HISTORY
1159  |    DATE          Author         Action
1160  |    15-OCT-2003   SYIDNER        Created
1161  |
1162  *============================================================================*/
1163   FUNCTION Return_Tax_Lines(
1164              P_Invoice_Header_Rec        IN ap_invoices_all%ROWTYPE,
1165              P_Error_Code                OUT NOCOPY VARCHAR2,
1166              P_Calling_Sequence          IN VARCHAR2) RETURN BOOLEAN
1167   IS
1168 
1169     l_debug_info                 VARCHAR2(240);
1170     l_curr_calling_sequence      VARCHAR2(4000);
1171 
1172     l_period_name                gl_period_statuses.period_name%TYPE;
1173     l_gl_date                    ap_invoice_lines_all.accounting_date%TYPE;
1174     l_wfapproval_flag		     ap_system_parameters_all.approval_workflow_flag%TYPE;
1175     l_awt_include_tax_amt        ap_system_parameters_all.awt_include_tax_amt%TYPE;
1176     l_base_currency_code         ap_system_parameters_all.base_currency_code%TYPE;
1177     l_combined_filing_flag       ap_system_parameters_all.combined_filing_flag%TYPE;
1178     l_income_tax_region_flag     ap_system_parameters_all.income_tax_region_flag%TYPE;
1179     l_income_tax_region          ap_system_parameters_all.income_tax_region%TYPE;
1180     l_disc_is_inv_less_tax_flag	 ap_system_parameters_all.disc_is_inv_less_tax_flag%TYPE;
1181     l_wfapproval_status          ap_invoice_lines_all.wfapproval_status%TYPE;
1182     l_new_amt_applicable_to_disc ap_invoices_all.amount_applicable_to_discount%TYPE;
1183     l_payment_priority           ap_batches_all.payment_priority%TYPE;
1184 
1185     l_total_tax_amount          NUMBER;
1186     l_self_assessed_tax_amt     NUMBER;
1187 
1188     -- Allocations
1189     Cursor c_item_line (c_invoice_id IN NUMBER) IS
1190 	Select ail.line_number
1191 	From   ap_invoice_lines_all ail
1192 	Where  ail.invoice_id = c_invoice_id
1193         And    ail.line_type_lookup_code = 'TAX'
1194         And    ail.prepay_invoice_id IS NULL;
1195 
1196         /*
1197 	And NOT EXISTS
1198 		(Select chrg_invoice_line_number
1199 		 From ap_allocation_rule_lines arl
1200           	 Where arl.invoice_id = ail.invoice_id
1201             	 And arl.chrg_invoice_line_number = ail.line_number);
1202         */
1203 
1204     l_item_line	     c_item_line%rowtype;
1205 
1206     l_ap_summary_tax_line_id    NUMBER;
1207     l_invoice_line_number       NUMBER;
1208 
1209     l_api_name                  CONSTANT VARCHAR2(100) := 'RETURN_TAX_LINES';
1210 
1211   BEGIN
1212 
1213     l_curr_calling_sequence := 'AP_ETAX_UTILITY_PKG.Return_Tax_Lines<-'||
1214                                P_calling_sequence;
1215 
1216     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1217        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_curr_calling_sequence);
1218     END IF;
1219 
1220      -------------------------------------------------------------------
1221      l_debug_info := 'Incorrect Summary Tax Line Check';
1222      IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1223         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
1224      END IF;
1225      -------------------------------------------------------------------
1226 
1227      BEGIN
1228 
1229      l_ap_summary_tax_line_id := NULL;
1230 
1231      SELECT ail.line_number, ail.summary_tax_line_id
1232        INTO l_invoice_line_number, l_ap_summary_tax_line_id
1233        FROM AP_INVOICE_LINES_ALL ail
1234       WHERE ail.invoice_id            = P_Invoice_Header_Rec.invoice_id
1235         AND ail.line_type_lookup_code = 'TAX'
1236         AND NOT EXISTS
1237             (SELECT ls.summary_tax_line_id
1238                FROM zx_lines_summary ls
1239               WHERE ls.summary_tax_line_id             = ail.summary_tax_line_id
1240                 AND ls.trx_id                          = ail.invoice_id
1241                 AND NVL(ls.tax_amt_included_flag, 'N') = 'N'
1242                 AND NVL(ls.self_assessed_flag, 'N')    = 'N'
1243                 AND NVL(ls.reporting_only_flag, 'N')   = 'N'
1244             )
1245         AND EXISTS
1246             (SELECT 'Invoice Distributions Exist'
1247                FROM ap_invoice_distributions_all aid
1248               WHERE aid.invoice_id          = ail.invoice_id
1249                 AND aid.invoice_line_number = ail.line_number
1250                 AND (aid.accounting_event_id IS NOT NULL
1251                      OR NVL(aid.match_status_flag,'N') IN ('A','T')
1252                      OR aid.bc_event_id IS NOT NULL
1253                      OR NVL(aid.encumbered_flag, 'N') IN ('Y','D','W','X')
1254                     ) --This is done for Mexicana Bug7623255 to avoid such Data Fix Condition
1255             )
1256 
1257     --commented this condition as this is not required
1258     --summary line should not be allowed to delete if it has frozen distribution
1259     --as checked in above EXISTS hence no further checks needed. bug 10621602
1260     /*    AND EXISTS
1261             (SELECT zl.summary_tax_line_id
1262                FROM zx_lines_summary zl
1263               WHERE zl.application_id                = 200
1264                 AND zl.entity_code                   = 'AP_INVOICES'
1265                 AND zl.event_class_code             IN ('STANDARD INVOICES', 'PREPAYMENT INVOICES', 'EXPENSE REPORTS')
1266                 AND zl.trx_id                        = ail.invoice_id
1267                 AND zl.tax_regime_code               = ail.tax_regime_code
1268                 AND zl.tax                           = ail.tax
1269                 AND zl.tax_status_code               = ail.tax_status_code
1270                 AND (zl.tax_rate_code                = ail.tax_rate_code
1271                      OR zl.tax_rate_id               = ail.tax_rate_id)
1272                 AND (zl.tax_jurisdiction_code        = ail.tax_jurisdiction_code
1273                      OR zl.tax_jurisdiction_code    IS NULL)
1274                 AND zl.tax_rate                      = ail.tax_rate
1275                 AND zl.tax_amt			 = ail.amount
1276                 AND NVL(zl.reporting_only_flag, 'N') = 'N'
1277                 AND NVL(zl.self_assessed_flag, 'N')  = 'N'
1278                 AND NVL(zl.cancel_flag, 'N')         = NVL(ail.cancelled_flag,'N')
1279                 AND zl.summary_tax_line_id          <> ail.summary_tax_line_id
1280            ) */
1281 
1282        AND rownum = 1;
1283 
1284        --Bug 7485573 -- Move the exception block above the if condition.
1285 
1286        EXCEPTION
1287           WHEN NO_DATA_FOUND THEN
1288                NULL;
1289 
1290           WHEN OTHERS THEN
1291 	       NULL;
1292     END;
1293 
1294      IF l_ap_summary_tax_line_id IS NOT NULL THEN
1295 
1296                -------------------------------------------------------------------
1297                l_debug_info := 'Invoice Line Number that causes this failure: '||l_invoice_line_number;
1298                IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1299                   FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
1300                END IF;
1301 
1302                l_debug_info := 'Summary Tax Line ID for this line: '||l_ap_summary_tax_line_id;
1303                IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1304                   FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
1305                END IF;
1306                -------------------------------------------------------------------
1307 	       /* Bug 9777752
1308                FND_MESSAGE.SET_NAME('SQLAP','AP_DEBUG');
1309 	           FND_MESSAGE.SET_TOKEN('ERROR', 'Summary Tax Line Deleted by EBTax. This would cause orphan distributions.');
1310 	           FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',l_curr_calling_sequence);
1311 	           FND_MESSAGE.SET_TOKEN('PARAMETERS',
1312 	            ' P_Invoice_Id = '||P_Invoice_Header_Rec.invoice_id||
1313 	            ' P_Error_Code = '||P_Error_Code||
1314 	            ' P_Calling_Sequence = '||P_Calling_Sequence);
1315 	           FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_debug_info);
1316 	       */
1317                FND_MESSAGE.SET_NAME( 'SQLAP', 'AP_SUM_TAX_LINE_DEL' ); -- Bug 9777752
1318 
1319 	       --Bug9395593
1320 
1321                --bug10140354
1322 	       IF AP_APPROVAL_PKG.G_VALIDATION_REQUEST_ID IS NULL THEN
1323                   APP_EXCEPTION.RAISE_EXCEPTION;
1324                ELSE
1325 
1326 	        insert into ap_errors_gt(invoice_id , message_text) values(P_Invoice_Header_Rec.Invoice_id , 'Summary Tax Line Deleted by EBTax. This would cause orphan distributions.');
1327                   RETURN FALSE;
1328                END IF;
1329 
1330 
1331                --Bug9395593
1332 
1333 
1334     END IF;
1335 
1336 
1337     -------------------------------------------------------------------
1338     l_debug_info := 'Get ap_system_parameters data';
1339     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1340       FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
1341     END IF;
1342     -------------------------------------------------------------------
1343 
1344     BEGIN
1345       SELECT
1346           approval_workflow_flag,
1347           awt_include_tax_amt,
1348           disc_is_inv_less_tax_flag,
1349           base_currency_code,
1350           combined_filing_flag,
1351           income_tax_region_flag,
1352           income_tax_region
1353         INTO
1354           l_wfapproval_flag,
1355           l_awt_include_tax_amt,
1356           l_disc_is_inv_less_tax_flag,
1357           l_base_currency_code,
1358           l_combined_filing_flag,
1359           l_income_tax_region_flag,
1360           l_income_tax_region
1361         FROM ap_system_parameters_all
1362        WHERE org_id = P_Invoice_Header_Rec.org_id;
1363     END;
1364 
1365     -------------------------------------------------------------------
1366     l_debug_info := 'Update existing exclusive tax lines';
1367     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1368       FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
1369     END IF;
1370     -------------------------------------------------------------------
1371     BEGIN
1372       UPDATE ap_invoice_lines_all ail
1373          SET
1374        (-- Bug 10157751 ail.description,
1375         ail.amount,
1376         ail.base_amount,
1377         ail.discarded_flag,  --Bug9346774 Changed From Canceled_flag to discarded_flag
1378         ail.last_updated_by,
1379         ail.last_update_login,
1380         ail.last_update_date,
1381         ail.tax_regime_code,
1382         ail.tax,
1383         ail.tax_jurisdiction_code,
1384         ail.tax_status_code,
1385         ail.tax_rate_id,
1386         ail.tax_rate_code,
1387         ail.tax_rate,
1388 	ail.generate_dists) =
1389 	(
1390       SELECT
1391         /* Bug 10157751
1392         DECODE( ail.line_source,
1393 		'MANUAL LINE ENTRY', ail.description,
1394 		'IMPORTED'         , ail.description,
1395                 zls.tax_regime_code||' - '||zls.tax ),          -- description : Bug 9383712 - Added DECODE
1396 	*/
1397         zls.tax_amt, 						-- amount
1398         zls.tax_amt_funcl_curr,					-- base_amount
1399         zls.cancel_flag,					-- cancelled_flag
1400         l_user_id,						-- last_updated_by
1401         l_login_id,						-- last_update_login
1402         sysdate, 						-- last_update_date /*Bug10101457: replaced l_sysdate with sysdate*/
1403         zls.tax_regime_code,	    				-- tax_regime_code
1404         zls.tax,		    				-- tax
1405         zls.tax_jurisdiction_code,  				-- tax_jurisdiction_code
1406         zls.tax_status_code,	    				-- tax_status_code
1407         zls.tax_rate_id,	    				-- tax_rate_id
1408         zls.tax_rate_code,	    				-- tax_rate_code
1409         zls.tax_rate, 		    				-- tax_rate
1410 	DECODE(ail.generate_dists,'D','D','Y')		        -- generate_dists  bug 5460342
1411         FROM zx_lines_summary zls
1412        WHERE zls.summary_tax_line_id		= ail.summary_tax_line_id
1413          AND nvl(zls.reporting_only_flag, 'N')	= 'N'
1414        )
1415        WHERE ail.invoice_id = P_Invoice_Header_Rec.invoice_id
1416 	 AND ail.line_type_lookup_code	= 'TAX'
1417          AND EXISTS
1418 	       	    (SELECT ls.summary_tax_line_id
1419                        FROM zx_lines_summary ls
1420                       WHERE ls.summary_tax_line_id		= ail.summary_tax_line_id
1421                         AND ls.trx_id				= ail.invoice_id
1422                         AND NVL(ls.tax_amt_included_flag, 'N')	= 'N'
1423                         AND NVL(ls.self_assessed_flag, 'N')	= 'N'
1424                         AND NVL(ls.reporting_only_flag, 'N')	= 'N');
1425 
1426     EXCEPTION
1427       WHEN NO_DATA_FOUND THEN
1428         NULL;
1429 
1430       WHEN OTHERS THEN
1431         IF (SQLCODE <> -20001) THEN
1432           FND_MESSAGE.SET_NAME('SQLAP','AP_DEBUG');
1433           FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
1434           FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',l_curr_calling_sequence);
1435           FND_MESSAGE.SET_TOKEN('PARAMETERS',
1436             ' P_Invoice_Id = '||P_Invoice_Header_Rec.Invoice_Id||
1437             ' P_Error_Code = '||P_Error_Code||
1438             ' P_Calling_Sequence = '||P_Calling_Sequence);
1439           FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_debug_info);
1440         END IF;
1441 
1442       APP_EXCEPTION.RAISE_EXCEPTION;
1443     END;
1444 
1445     /* Start for bug 5943074-- updating summary_tax_line_id of ap_invoice_lines_all based on zx_lines
1446        for manual tax lines and tax only lines so that we do not delete and regenerate the tax lines . */
1447     -------------------------------------------------------------------
1448     l_debug_info := 'Update summary tax line id for manual tax lines';
1449     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1450       FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
1451     END IF;
1452     -------------------------------------------------------------------
1453     BEGIN
1454 
1455       UPDATE ap_invoice_lines_all ail
1456       SET ail.summary_tax_line_id = (SELECT  zl.summary_tax_line_id
1457                                             FROM zx_lines zl
1458                                             WHERE zl.application_id 	 =  200
1459                                             AND zl.entity_code 	 =  'AP_INVOICES'
1460                                             AND zl.event_class_code IN
1461 					        ('STANDARD INVOICES', 'PREPAYMENT INVOICES', 'EXPENSE REPORTS')
1462                                             AND zl.trx_id 	= ail.invoice_id
1463                                             AND zl.tax_regime_code = ail.tax_regime_code
1464                                             AND zl.tax = ail.tax
1465                                             AND zl.tax_status_code = ail.tax_status_code
1466                                             AND (zl.tax_rate_code = ail.tax_rate_code OR zl.tax_rate_id = ail.tax_rate_id)
1467 					    AND (zl.tax_jurisdiction_code = ail.tax_jurisdiction_code OR zl.tax_jurisdiction_code IS NULL)
1468                                             AND zl.tax_rate = ail.tax_rate
1469                                             AND zl.manually_entered_flag = 'Y'
1470                                             AND nvl(zl.reporting_only_flag, 'N') = 'N'
1471 					    AND nvl(zl.self_assessed_flag, 'N') = 'N'
1472 					    AND nvl(zl.cancel_flag, 'N') = nvl(ail.cancelled_flag,'N')
1473                                             AND zl.proration_code = 'REGULAR_IMPORT' --Bug8524286
1474                                             AND rownum = 1       )
1475       WHERE ail.invoice_id = P_Invoice_Header_Rec.invoice_id
1476       AND ail.line_type_lookup_code	= 'TAX'
1477       AND ail.line_source in ('MANUAL LINE ENTRY','IMPORTED')
1478       AND ail.summary_tax_line_id IS NULL
1479       AND NOT EXISTS
1480            (SELECT 1
1481               FROM ap_invoice_lines_all ail2
1482              WHERE ail2.invoice_id = ail.invoice_id
1483                AND ail2.line_number <> ail.line_number
1484                AND ail2.tax_regime_code = ail.tax_regime_code
1485                AND ail2.tax = ail.tax
1486                AND ail2.tax_status_code = ail.tax_status_code
1487                AND (ail2.tax_rate_code = ail.tax_rate_code OR ail2.tax_rate_id = ail.tax_rate_id)
1488 	       AND (ail2.tax_jurisdiction_code = ail.tax_jurisdiction_code OR ail2.tax_jurisdiction_code IS NULL)
1489                AND ail2.tax_rate = ail.tax_rate
1490                AND ail2.line_type_lookup_code = 'TAX'
1491                AND ail2.line_source in ('MANUAL LINE ENTRY','IMPORTED')
1492                AND NVL(ail.prorate_across_all_items,'N') = NVL(ail2.prorate_across_all_items,'N'));    --Bug7331216 --Bug9113046
1493 
1494     EXCEPTION
1495        WHEN NO_DATA_FOUND THEN
1496             NULL;
1497 
1498        WHEN OTHERS THEN
1499             IF (SQLCODE <> -20001) THEN
1500                FND_MESSAGE.SET_NAME('SQLAP','AP_DEBUG');
1501                FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
1502                FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',l_curr_calling_sequence);
1503                FND_MESSAGE.SET_TOKEN('PARAMETERS',' P_Invoice_Id = '||P_Invoice_Header_Rec.Invoice_Id
1504                                                   ||' P_Error_Code = '||P_Error_Code
1505                                                   ||' P_Calling_Sequence = '||P_Calling_Sequence);
1506                FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_debug_info);
1507             END IF;
1508             APP_EXCEPTION.RAISE_EXCEPTION;
1509     END;
1510     /* End for bug 5943074 */
1511 
1512     -------------------------------------------------------------------
1513     l_debug_info := 'Delete exclusive tax lines if required';
1514     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1515       FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
1516     END IF;
1517     -------------------------------------------------------------------
1518     BEGIN
1519       DELETE ap_invoice_lines_all ail
1520        WHERE ail.invoice_id = P_Invoice_Header_Rec.invoice_id
1521          AND ail.line_type_lookup_code = 'TAX'
1522          AND NOT EXISTS (SELECT ls.summary_tax_line_id
1523                            FROM zx_lines_summary ls
1524                           WHERE ls.summary_tax_line_id  = ail.summary_tax_line_id
1525                             AND ls.trx_id               = ail.invoice_id
1526                             AND NVL(ls.tax_amt_included_flag, 'N') = 'N'
1527                             AND NVL(ls.self_assessed_flag,    'N') = 'N'
1528                             AND NVL(ls.reporting_only_flag,   'N') = 'N');
1529 -- Bug 7260087 Starts
1530 -- When ever invoice line is deleted corresponding
1531 -- allocations should  be deleted.
1532       DELETE FROM ap_allocation_rules ar
1533        WHERE ar.invoice_id = p_invoice_header_rec.invoice_id
1534          AND NOT EXISTS
1535                  (SELECT 'y'
1536                   FROM ap_invoice_lines_all l
1537                   WHERE l.invoice_id = ar.invoice_id
1538                   AND l.line_number = ar.chrg_invoice_line_number);
1539 
1540        DELETE FROM ap_allocation_rule_lines arl
1541         WHERE arl.invoice_id = p_invoice_header_rec.invoice_id
1542           AND NOT EXISTS
1543                   (SELECT 'y'
1544                    FROM ap_invoice_lines_all l
1545                    WHERE l.invoice_id = arl.invoice_id
1546                    AND l.line_number = arl.chrg_invoice_line_number);
1547 -- Bug 7260087 ends
1548 
1549     EXCEPTION
1550       WHEN NO_DATA_FOUND THEN
1551         NULL;
1552 
1553       WHEN OTHERS THEN
1554         IF (SQLCODE <> -20001) THEN
1555           FND_MESSAGE.SET_NAME('SQLAP','AP_DEBUG');
1556           FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
1557           FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',l_curr_calling_sequence);
1558           FND_MESSAGE.SET_TOKEN('PARAMETERS',
1559             ' P_Invoice_Id = '||P_Invoice_Header_Rec.invoice_id||
1560             ' P_Error_Code = '||P_Error_Code||
1561             ' P_Calling_Sequence = '||P_Calling_Sequence);
1562           FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_debug_info);
1563         END IF;
1564 
1565       APP_EXCEPTION.RAISE_EXCEPTION;
1566     END;
1567 
1568     -------------------------------------------------------------------
1569     l_debug_info := 'Get open gl_date';
1570     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1571       FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
1572     END IF;
1573     -------------------------------------------------------------------
1574 
1575     l_period_name := AP_UTILITIES_PKG.get_current_gl_date (P_Invoice_Header_Rec.gl_date, P_Invoice_header_Rec.org_id);
1576 
1577     IF (l_period_name IS NULL) THEN
1578 	AP_UTILITIES_PKG.get_open_gl_date(
1579 	       P_Date                  => P_Invoice_Header_Rec.gl_date,
1580 	       P_Period_Name           => l_period_name,
1581 	       P_GL_Date               => l_gl_date,
1582 	       P_Org_Id                => P_Invoice_Header_Rec.org_id);
1583     ELSE
1584 	l_gl_date := P_Invoice_Header_Rec.gl_date;
1585     END IF;
1586 
1587     IF NVL(l_wfapproval_flag,'N') = 'Y' THEN
1588       l_wfapproval_status := 'REQUIRED';
1589     ELSE
1590       l_wfapproval_status := 'NOT REQUIRED';
1591     END IF;
1592 
1593     -------------------------------------------------------------------
1594     l_debug_info := 'Insert exclusive tax lines';
1595     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1596       FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
1597     END IF;
1598     -------------------------------------------------------------------
1599     BEGIN
1600       INSERT INTO ap_invoice_lines_all (
1601         invoice_id,
1602         line_number,
1603         line_type_lookup_code,
1604         requester_id,
1605         description,
1606         line_source,
1607         org_id,
1608         line_group_number,
1609         inventory_item_id,
1610         item_description,
1611         serial_number,
1612         manufacturer,
1613         model_number,
1614         warranty_number,
1615         generate_dists,
1616         match_type,
1617         distribution_set_id,
1618         account_segment,
1619         balancing_segment,
1620         cost_center_segment,
1621         overlay_dist_code_concat,
1622         default_dist_ccid,
1623         prorate_across_all_items,
1624         accounting_date,
1625         period_name,
1626         deferred_acctg_flag,
1627         def_acctg_start_date,
1628         def_acctg_end_date,
1629         def_acctg_number_of_periods,
1630         def_acctg_period_type,
1631         set_of_books_id,
1632         amount,
1633         base_amount,
1634         rounding_amt,
1635         quantity_invoiced,
1636         unit_meas_lookup_code,
1637         unit_price,
1638         wfapproval_status,
1639         discarded_flag,
1640         original_amount,
1641         original_base_amount,
1642         original_rounding_amt,
1643         cancelled_flag,
1644         income_tax_region,
1645         type_1099,
1646         stat_amount,
1647         prepay_invoice_id,
1648         prepay_line_number,
1649         invoice_includes_prepay_flag,
1650         corrected_inv_id,
1651         corrected_line_number,
1652         po_header_id,
1653         po_line_id,
1654         po_release_id,
1655         po_line_location_id,
1656         po_distribution_id,
1657         rcv_transaction_id,
1658         final_match_flag,
1659         assets_tracking_flag,
1660         asset_book_type_code,
1661         asset_category_id,
1662         project_id,
1663         task_id,
1664         expenditure_type,
1665         expenditure_item_date,
1666         expenditure_organization_id,
1667         pa_quantity,
1668         pa_cc_ar_invoice_id,
1669         pa_cc_ar_invoice_line_num,
1670         pa_cc_processed_code,
1671         award_id,
1672         awt_group_id,
1673         reference_1,
1674         reference_2,
1675         receipt_verified_flag,
1676         receipt_required_flag,
1677         receipt_missing_flag,
1678         justification,
1679         expense_group,
1680         start_expense_date,
1681         end_expense_date,
1682         receipt_currency_code,
1683         receipt_conversion_rate,
1684         receipt_currency_amount,
1685         daily_amount,
1686         web_parameter_id,
1687         adjustment_reason,
1688         merchant_document_number,
1689         merchant_name,
1690         merchant_reference,
1691         merchant_tax_reg_number,
1692         merchant_taxpayer_id,
1693         country_of_supply,
1694         credit_card_trx_id,
1695         company_prepaid_invoice_id,
1696         cc_reversal_flag,
1697         creation_date,
1698         created_by,
1699         last_updated_by,
1700         last_update_date,
1701         last_update_login,
1702         program_application_id,
1703         program_id,
1704         program_update_date,
1705         request_id,
1706         attribute_category,
1707         attribute1,
1708         attribute2,
1709         attribute3,
1710         attribute4,
1711         attribute5,
1712         attribute6,
1713         attribute7,
1714         attribute8,
1715         attribute9,
1716         attribute10,
1717         attribute11,
1718         attribute12,
1719         attribute13,
1720         attribute14,
1721         attribute15,
1722         global_attribute_category,
1723         global_attribute1,
1724         global_attribute2,
1725         global_attribute3,
1726         global_attribute4,
1727         global_attribute5,
1728         global_attribute6,
1729         global_attribute7,
1730         global_attribute8,
1731         global_attribute9,
1732         global_attribute10,
1733         global_attribute11,
1734         global_attribute12,
1735         global_attribute13,
1736         global_attribute14,
1737         global_attribute15,
1738         global_attribute16,
1739         global_attribute17,
1740         global_attribute18,
1741         global_attribute19,
1742         global_attribute20,
1743         control_amount,
1744         assessable_value,
1745         total_rec_tax_amount,
1746         total_nrec_tax_amount,
1747         total_rec_tax_amt_funcl_curr,
1748         total_nrec_tax_amt_funcl_curr,
1749         included_tax_amount,
1750         primary_intended_use,
1751         ship_to_location_id,
1752         product_type,
1753         product_category,
1754         product_fisc_classification,
1755         user_defined_fisc_class,
1756         trx_business_category,
1757         summary_tax_line_id,
1758         tax_regime_code,
1759         tax,
1760         tax_jurisdiction_code,
1761         tax_status_code,
1762         tax_rate_id,
1763         tax_rate_code,
1764         tax_rate,
1765         tax_code_id,
1766 		pay_awt_group_id)  --Bug8345264
1767       SELECT
1768         P_Invoice_Header_Rec.Invoice_Id,				-- invoice_id
1769         (SELECT NVL(MAX(ail2.line_number),0)
1770            FROM ap_invoice_lines_all ail2
1771           WHERE ail2.invoice_id =  zls.trx_id) + ROWNUM,  		-- line_number
1772         'TAX',								-- line_type_lookup_code
1773         null,								-- requester_id
1774         NVL( AI.description, zls.tax_regime_code||' - '||zls.tax ),	-- description     Bug 10157751
1775         'ETAX',								-- line_source
1776         P_Invoice_Header_Rec.org_id,   					-- org_id
1777         null,   							-- line_group_number
1778         null,   							-- inventory_item_id
1779         null,   							-- item_description
1780         null,   							-- serial_number
1781         null,   							-- manufacturer
1782         null,   							-- model_number
1783         null,   							-- warranty_number
1784         DECODE(NVL(zls.tax_only_line_flag, 'N'),
1785                'Y', 'D',
1786                'Y'),   							-- generate_dists
1787         DECODE(zls.applied_to_trx_id,
1788                null, 'NOT_MATCHED',
1789                'OTHER_TO_RECEIPT'),   					-- match_type
1790         null,   							-- distribution_set_id
1791         null,   							-- account_segment
1792         null,   							-- balancing_segment
1793         null,   							-- cost_center_segment
1794         null,   							-- overlay_dist_code_concat
1795         null,   							-- default_dist_ccid
1796         'N',   								-- prorate_across_all_items
1797         l_gl_date,   							-- accounting_date
1798         DECODE(NVL(zls.tax_only_line_flag, 'N'),
1799                'N', DECODE(zls.applied_to_trx_id,
1800                            null, null, l_period_name),
1801                 l_period_name),   					-- period_name
1802         'N',   								-- deferred_acctg_flag
1803         null,   							-- def_acctg_start_date
1804         null,   							-- def_acctg_end_date
1805         null,   							-- def_acctg_number_of_periods
1806         null,   							-- def_acctg_period_type
1807         P_Invoice_Header_Rec.set_of_books_id,   			-- set_of_books_id
1808         zls.tax_amt,   							-- amount
1809         DECODE(P_Invoice_Header_Rec.invoice_currency_code,
1810                l_base_currency_code, NULL,
1811                zls.tax_amt_funcl_curr),    				-- base_amount
1812         null,   							-- rounding_amt
1813         null,   							-- quantity_invoiced
1814         null,   							-- unit_meas_lookup_code
1815         null,   							-- unit_price
1816         l_wfapproval_status,   						-- wfapproval_status
1817         'N',   								-- discarded_flag
1818         null,   							-- original_amount
1819         null,   							-- original_base_amount
1820         null,   							-- original_rounding_amt
1821         'N',   								-- cancelled_flag
1822         DECODE(ap.type_1099,
1823                '','',
1824                DECODE(l_combined_filing_flag,
1825                       'N', '',
1826                       DECODE(l_income_tax_region_flag,
1827                              'Y', aps.state,
1828                              l_income_tax_region))),  			-- income_tax_region
1829         ap.type_1099,   						-- type_1099
1830         null,   							-- stat_amount
1831         zls.applied_from_trx_id,   					-- prepay_invoice_id
1832         zls.applied_from_line_id,   					-- prepay_line_number
1833         prepay.invoice_includes_prepay_flag,   				-- invoice_includes_prepay_flag
1834         zls.adjusted_doc_trx_id,   					-- corrected_inv_id
1835         -- zls.adjusted_doc_line_id,   					-- corrected_line_number
1836         null,								-- corrected_line_number
1837         null,   							-- po_header_id
1838         null,   							-- po_line_id
1839         null,   							-- po_release_id
1840         null,   							-- po_line_location_id
1841         null,   							-- po_distribution_id
1842         zls.applied_to_trx_id,						-- rcv_transaction_id
1843         'N',   								-- final_match_flag
1844         null,   							-- assets_tracking_flag
1845         null,   							-- asset_book_type_code
1846         null,   							-- asset_category_id
1847         null,   							-- project_id
1848         null,   							-- task_id
1849         null,   							-- expenditure_type
1850         null,   							-- expenditure_item_date
1851         null,   							-- expenditure_organization_id
1852         null,   							-- pa_quantity
1853         null,   							-- pa_cc_ar_invoice_id
1854         null,   							-- pa_cc_ar_invoice_line_num
1855         null,   							-- pa_cc_processed_code
1856         null,   							-- award_id
1857 	null,                                                           -- awt_group_id -- bug9035846
1858   /*	DECODE(l_awt_include_tax_amt,
1859                'N', null,
1860                DECODE(zls.applied_from_trx_id,
1861                       null, P_Invoice_Header_Rec.awt_group_id,
1862                       prepay.awt_group_id)),   				-- awt_group_id  */
1863         null,   							-- reference_1
1864         null,   							-- reference_2
1865         null,   							-- receipt_verified_flag
1866         null,   							-- receipt_required_flag
1867         null,   							-- receipt_missing_flag
1868         null,   							-- justification
1869         null,   							-- expense_group
1870         null,   							-- start_expense_date
1871         null,   							-- end_expense_date
1872         null,   							-- receipt_currency_code
1873         null,   							-- receipt_conversion_rate
1874         null,   							-- receipt_currency_amount
1875         null,   							-- daily_amount
1876         null,   							-- web_parameter_id
1877         null,   							-- adjustment_reason
1878         null,   							-- merchant_document_number
1879         null,   							-- merchant_name
1880         null,   							-- merchant_reference
1881         null,   							-- merchant_tax_reg_number
1882         null,								-- merchant_taxpayer_id
1883         null,								-- country_of_supply
1884         null,								-- credit_card_trx_id
1885         null,								-- company_prepaid_invoice_id
1886         null,								-- cc_reversal_flag
1887         sysdate,							-- creation_date /*Bug10101457: replaced l_sysdate with sysdate*/
1888         l_user_id,   							-- created_by
1889         l_user_id,   							-- last_updated_by
1890         sysdate,   							-- last_update_date /*Bug10101457: replaced l_sysdate with sysdate*/
1891         l_login_id,   							-- last_update_login
1892         null,   							-- program_application_id
1893         null,   							-- program_id
1894         null,   							-- program_update_date
1895         null,   							-- request_id
1896         zls.attribute_category,   					-- attribute_category
1897         zls.attribute1,   						-- attribute1
1898         zls.attribute2,   						-- attribute2
1899         zls.attribute3,   						-- attribute3
1900         zls.attribute4,   						-- attribute4
1901         zls.attribute5,   						-- attribute5
1902         zls.attribute6,   						-- attribute6
1903         zls.attribute7,   						-- attribute7
1904         zls.attribute8,   						-- attribute8
1905         zls.attribute9,   						-- attribute9
1906         zls.attribute10,   						-- attribute10
1907         zls.attribute11,   						-- attribute11
1908         zls.attribute12,   						-- attribute12
1909         zls.attribute13,   						-- attribute13
1910         zls.attribute14,   						-- attribute14
1911         zls.attribute15,   						-- attribute15
1912         zls.global_attribute_category,   				-- global_attribute_category
1913         zls.global_attribute1,   					-- global_attribute1
1914         zls.global_attribute2,   					-- global_attribute2
1915         zls.global_attribute3,   					-- global_attribute3
1916         zls.global_attribute4,   					-- global_attribute4
1917         zls.global_attribute5,   					-- global_attribute5
1918         zls.global_attribute6,   					-- global_attribute6
1919         zls.global_attribute7,   					-- global_attribute7
1920         zls.global_attribute8,   					-- global_attribute8
1921         zls.global_attribute9,   					-- global_attribute9
1922         zls.global_attribute10,   					-- global_attribute10
1923         zls.global_attribute11,   					-- global_attribute11
1924         zls.global_attribute12,   					-- global_attribute12
1925         zls.global_attribute13,   					-- global_attribute13
1926         zls.global_attribute14,   					-- global_attribute14
1927         zls.global_attribute15,   					-- global_attribute15
1928         zls.global_attribute16,   					-- global_attribute16
1929         zls.global_attribute17,   					-- global_attribute17
1930         zls.global_attribute18,   					-- global_attribute18
1931         zls.global_attribute19,   					-- global_attribute19
1932         zls.global_attribute20,   					-- global_attribute20
1933         null,   							-- control_amount
1934         null,   							-- assessable_value
1935         null,   							-- total_rec_tax_amount
1936         null,   							-- total_nrec_tax_amount
1937         null,   							-- total_rec_tax_amt_funcl_curr
1938         null,   							-- total_nrec_tax_amt_funcl_curr
1939         null,   							-- included_tax_amount
1940         null,   							-- primary_intended_use
1941         null,   							-- ship_to_location_id
1942         null,   							-- product_type
1943         null,   							-- product_category
1944         null,   							-- product_fisc_classification
1945         null,   							-- user_defined_fisc_class
1946         null,   							-- trx_business_category
1947         zls.summary_tax_line_id,   					-- summary_tax_line_id
1948         zls.tax_regime_code,   						-- tax_regime_code
1949         zls.tax,   							-- tax
1950         zls.tax_jurisdiction_code,   					-- tax_jurisdiction_code
1951         zls.tax_status_code,   						-- tax_status_code
1952         zls.tax_rate_id,   						-- tax_rate_id
1953         zls.tax_rate_code,   						-- tax_rate_code
1954         zls.tax_rate,   						-- tax_rate
1955         null,   							-- tax_code_id
1956         null								-- pay_awt_group_id -- bug9035846
1957 /*		DECODE(l_awt_include_tax_amt,
1958                'N', null,
1959                DECODE(zls.applied_from_trx_id,
1960                       null, P_Invoice_Header_Rec.pay_awt_group_id,
1961                       prepay.pay_awt_group_id))   		-- pay_awt_group_id  Bug8345264 */
1962      FROM ap_invoices_all       ai,
1963           ap_suppliers          ap,
1964           ap_supplier_sites_all aps,
1965           zx_lines_summary      zls,
1966           ap_invoice_lines_all  prepay
1967     WHERE ai.invoice_id				= p_invoice_header_rec.invoice_id
1968       AND ai.vendor_id                          = ap.vendor_id
1969       AND ai.vendor_site_id                     = aps.vendor_site_id
1970       AND zls.application_id 			= 200
1971       AND zls.entity_code 			= 'AP_INVOICES'
1972       AND zls.event_class_code			IN ('STANDARD INVOICES', 'PREPAYMENT INVOICES', 'EXPENSE REPORTS')
1973       AND zls.trx_id 				= ai.invoice_id
1974       AND NVL(zls.tax_amt_included_flag, 'N') 	= 'N'
1975       AND NVL(zls.self_assessed_flag, 'N') 	= 'N'
1976       AND NVL(zls.reporting_only_flag, 'N') 	= 'N'
1977       AND zls.applied_from_trx_id  		= prepay.invoice_id(+)
1978       AND zls.applied_from_line_id 		= prepay.line_number(+)
1979       AND NOT EXISTS (SELECT il.summary_tax_line_id
1980                         FROM ap_invoice_lines_all il
1981                        WHERE il.invoice_id = ai.invoice_id
1982                          AND il.summary_tax_line_id = zls.summary_tax_line_id)
1983       AND EXISTS
1984           (SELECT 'Recoupment Exists'
1985            FROM    ZX_LINES ZL
1986            WHERE   ZL.application_id      = ZLS.application_id
1987            AND     ZL.entity_code         = ZLS.entity_code
1988            AND     ZL.event_class_code    = ZLS.event_class_code
1989            AND     ZL.trx_id              = ZLS.trx_id
1990            AND     ((nvl(ZL.tax_only_line_flag,'N') <> 'Y'
1991                      and sign(ZL.TRX_LINE_ID)       <> -1)
1992                     OR nvl(ZL.tax_only_line_flag,'N') = 'Y')
1993            AND     ZL.SUMMARY_TAX_LINE_ID = ZLS.SUMMARY_TAX_LINE_ID);
1994 
1995     EXCEPTION
1996       WHEN NO_DATA_FOUND THEN
1997         NULL;
1998 
1999       WHEN OTHERS THEN
2000         IF (SQLCODE <> -20001) THEN
2001           FND_MESSAGE.SET_NAME('SQLAP','AP_DEBUG');
2002           FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
2003           FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',l_curr_calling_sequence);
2004           FND_MESSAGE.SET_TOKEN('PARAMETERS',
2005             ' P_Invoice_Id = '||P_Invoice_Header_Rec.invoice_id||
2006             ' P_Error_Code = '||P_Error_Code||
2007             ' P_Calling_Sequence = '||P_Calling_Sequence);
2008           FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_debug_info);
2009         END IF;
2010 
2011       APP_EXCEPTION.RAISE_EXCEPTION;
2012     END;
2013 
2014     -------------------------------------------------------------------
2015     l_debug_info := 'Update Inclusive tax amount';
2016     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
2017       FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
2018     END IF;
2019     -------------------------------------------------------------------
2020     BEGIN
2021     --bug 6931461
2022       UPDATE ap_invoice_lines_all ail
2023          SET ail.included_tax_amount =
2024              (SELECT /*+ index(ZL ZX_LINES_U1) */SUM(NVL(zl.tax_amt, 0))
2025                 FROM zx_lines zl
2026                WHERE zl.application_id 	 =  200
2027                  AND zl.entity_code 	 =  'AP_INVOICES'
2028 		 AND zl.event_class_code IN ('STANDARD INVOICES', 'PREPAYMENT INVOICES', 'EXPENSE REPORTS')
2029                  AND zl.trx_id 		= ail.invoice_id
2030                  AND zl.trx_line_id 	= ail.line_number
2031                  AND NVL(zl.self_assessed_flag,    'N')	= 'N'
2032                  AND NVL(zl.reporting_only_flag,   'N') = 'N'
2033                  AND NVL(zl.tax_amt_included_flag, 'N') = 'Y')
2034        WHERE ail.invoice_id = P_Invoice_Header_Rec.invoice_id
2035          AND ail.line_type_lookup_code NOT IN ('TAX', 'AWT');
2036 
2037     EXCEPTION
2038       WHEN NO_DATA_FOUND THEN
2039         NULL;
2040 
2041       WHEN OTHERS THEN
2042         IF (SQLCODE <> -20001) THEN
2043           FND_MESSAGE.SET_NAME('SQLAP','AP_DEBUG');
2044           FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
2045           FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',l_curr_calling_sequence);
2046           FND_MESSAGE.SET_TOKEN('PARAMETERS',
2047             ' P_Invoice_Id = '||P_Invoice_Header_Rec.invoice_id||
2048             ' P_Error_Code = '||P_Error_Code||
2049             ' P_Calling_Sequence = '||P_Calling_Sequence);
2050           FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_debug_info);
2051         END IF;
2052 
2053       APP_EXCEPTION.RAISE_EXCEPTION;
2054     END;
2055 
2056     --------------------------------------------------
2057     l_debug_info := 'Create Tax Allocations';
2058     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
2059       FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
2060     END IF;
2061     --------------------------------------------------
2062     BEGIN
2063 	OPEN c_item_line(P_Invoice_Header_Rec.invoice_id);
2064 	LOOP
2065 	   FETCH c_item_line
2066 	    INTO l_item_line;
2067 	   EXIT WHEN c_item_line%notfound;
2068 
2069 	   IF NOT AP_ALLOCATION_RULES_PKG.insert_tax_allocations (
2070 				          P_Invoice_Header_Rec.invoice_id,
2071 				          L_Item_Line.line_number,
2072 				          P_error_code ) THEN
2073 	      NULL;
2074 	   END IF;
2075 	END LOOP;
2076 	CLOSE c_item_line;
2077     EXCEPTION
2078       WHEN OTHERS THEN
2079         IF (SQLCODE <> -20001) THEN
2080           FND_MESSAGE.SET_NAME('SQLAP','AP_DEBUG');
2081           FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
2082           FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',l_curr_calling_sequence);
2083           FND_MESSAGE.SET_TOKEN('PARAMETERS',
2084             				' P_Invoice_Id		= '||P_Invoice_Header_Rec.invoice_id||
2085 					' P_Error_Code		= '||P_Error_Code||
2086 					' P_Calling_Sequence 	= '||P_Calling_Sequence);
2087           FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_debug_info);
2088         END IF;
2089 
2090         IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
2091             FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,sqlerrm);
2092         END IF;
2093 
2094         IF ( c_item_line%ISOPEN ) THEN
2095              CLOSE c_item_line;
2096         END IF;
2097 
2098         APP_EXCEPTION.RAISE_EXCEPTION;
2099     END;
2100 
2101     -------------------------------------------------------------------
2102     l_debug_info := 'Update total_tax_amount and self_assessed tax';
2103     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
2104       FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
2105     END IF;
2106     -------------------------------------------------------------------
2107 
2108       /*Bug 8638881 added CASE in the below SQL to consider the case of invoice includes prepay*/
2109     BEGIN
2110       UPDATE ap_invoices_all ai
2111           SET (ai.total_tax_amount,
2112                ai.self_assessed_tax_amount) =
2113                    (SELECT SUM(DECODE(NVL(zls.self_assessed_flag, 'N'),
2114                             'N', case when exists (SELECT 'Prepay App Exists'
2115                                           FROM ap_invoice_lines_all prepay
2116                                          WHERE prepay.invoice_id = zls.trx_id
2117                                          AND prepay.line_type_lookup_code = 'PREPAY'
2118                                          AND prepay.prepay_invoice_id  = zls.applied_from_trx_id
2119                                          AND prepay.prepay_line_number = zls.applied_from_line_id
2120                                          AND prepay.invoice_includes_prepay_flag = 'Y'
2121                                          AND (prepay.discarded_flag is null
2122                                            or prepay.discarded_flag = 'N')) THEN
2123                                            0
2124                                         ELSE NVL(zls.tax_amt, 0) end,
2125                                        0)),
2126                         SUM(DECODE(NVL(zls.self_assessed_flag, 'N'),
2127                                    'Y', NVL(zls.tax_amt, 0),
2128                                     0))
2129                    FROM zx_lines_summary zls
2130             WHERE zls.application_id = 200
2131            AND zls.entity_code = 'AP_INVOICES'
2132            AND zls.event_class_code IN
2133               ('STANDARD INVOICES', 'PREPAYMENT INVOICES', 'EXPENSE REPORTS')
2134                   AND zls.trx_id   = ai.invoice_id
2135                   AND NVL(zls.reporting_only_flag, 'N') = 'N')
2136         WHERE ai.invoice_id = P_Invoice_Header_Rec.invoice_id
2137         RETURNING ai.total_tax_amount, ai.self_assessed_tax_amount
2138              INTO l_total_tax_amount, l_self_assessed_tax_amt;
2139 
2140      --Bug#16022947. Introduced below UPDATE to consider
2141      --Retro Tax amounts which will not be in ZLS tables.
2142 
2143       UPDATE ap_invoices_all ai
2144       SET ai.total_tax_amount = (nvl(ai.total_tax_amount,0) +
2145                                  (SELECT NVL(sum(NVL(ail.amount,0)),0)
2146                                   FROM ap_invoice_lines_all ail
2147                                   WHERE ail.invoice_id = ai.invoice_id
2148                                    AND line_type_lookup_code ='RETROTAX'))
2149 
2150       WHERE ai.invoice_id = P_Invoice_Header_Rec.invoice_id
2151       RETURNING ai.total_tax_amount
2152            INTO l_total_tax_amount;
2153 
2154     EXCEPTION
2155       WHEN NO_DATA_FOUND THEN
2156         NULL;
2157 
2158       WHEN OTHERS THEN
2159         IF (SQLCODE <> -20001) THEN
2160           FND_MESSAGE.SET_NAME('SQLAP','AP_DEBUG');
2161           FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
2162           FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',l_curr_calling_sequence);
2163           FND_MESSAGE.SET_TOKEN('PARAMETERS',
2164             ' P_Invoice_Id = '||P_Invoice_Header_Rec.invoice_id||
2165             ' P_Error_Code = '||P_Error_Code||
2166             ' P_Calling_Sequence = '||P_Calling_Sequence);
2167           FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_debug_info);
2168         END IF;
2169 
2170       APP_EXCEPTION.RAISE_EXCEPTION;
2171     END;
2172 
2173     -----------------------------------------------------------------
2174     l_debug_info := 'Update tax_already_calculated_flag';
2175     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
2176       FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
2177     END IF;
2178     -----------------------------------------------------------------
2179     BEGIN
2180       UPDATE ap_invoice_lines_all ail
2181          SET ail.tax_already_calculated_flag = 'Y'
2182        WHERE ail.invoice_id = P_invoice_header_rec.invoice_id
2183          AND ail.line_type_lookup_code NOT IN ('TAX', 'AWT')
2184          AND NVL(ail.tax_already_calculated_flag, 'N') = 'N';
2185 
2186       /* Bug 5013526: We will set tax_already_calculated_flag to 'Y' even if tax lines are
2187 		      not generated. User could change any of the tax determining attributes
2188 		      on the invoice invoice line and resubmit tax calculation. In this case
2189 		      we would need to pass event_type as UPDATED.
2190          AND EXISTS
2191              ( SELECT zl.tax_line_id
2192                  FROM zx_lines zl
2193                 WHERE zl.trx_id = ail.invoice_id
2194                   AND zl.trx_line_id = ail.line_number
2195                   AND zl.application_id = 200
2196                   AND zl.entity_code = 'AP_INVOICES'
2197                   AND nvl(zl.reporting_only_flag, 'N') = 'N');
2198       */
2199 
2200     EXCEPTION
2201       WHEN no_data_found THEN
2202         null;
2203     END;
2204 
2205     -----------------------------------------------------------------
2206     l_debug_info := 'Update Invoice Includes Prepay Flag';
2207     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
2208       FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
2209     END IF;
2210     -----------------------------------------------------------------
2211 
2212     /*added the case for bug 8638881*/
2213    UPDATE ap_invoice_lines_all tax
2214      SET tax.invoice_includes_prepay_flag = CASE WHEN EXISTS (SELECT 'Prepay App Exists'
2215                             FROM ap_invoice_lines_all prepay
2216                            WHERE prepay.invoice_id = tax.invoice_id
2217                              AND prepay.line_type_lookup_code = 'PREPAY'
2218                              AND prepay.prepay_invoice_id = tax.prepay_invoice_id
2219                              AND prepay.prepay_line_number = tax.prepay_line_number
2220                              AND prepay.invoice_includes_prepay_flag = 'Y'
2221                              AND (prepay.discarded_flag is null or
2222                                  prepay.discarded_flag = 'N')) THEN
2223                                'Y'
2224                             ELSE
2225                               'N'
2226                             END /*added the case for bug 8638881*/
2227  WHERE tax.invoice_id = P_Invoice_Header_Rec.Invoice_Id
2228    AND tax.line_type_lookup_code = 'TAX'
2229    AND tax.prepay_invoice_id is not null;
2230 
2231     RETURN TRUE;
2232 
2233   EXCEPTION
2234     WHEN OTHERS THEN
2235       IF (SQLCODE <> -20001) THEN
2236         FND_MESSAGE.SET_NAME('SQLAP','AP_DEBUG');
2237         FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
2238         FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',l_curr_calling_sequence);
2239         FND_MESSAGE.SET_TOKEN('PARAMETERS',
2240           			' P_Invoice_Id = '      ||P_Invoice_Header_Rec.Invoice_Id||
2241           			' P_Error_Code = '      ||P_Error_Code||
2242           			' P_Calling_Sequence = '||P_Calling_Sequence);
2243         FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_debug_info);
2244       END IF;
2245 
2246       APP_EXCEPTION.RAISE_EXCEPTION;
2247 
2248   END Return_Tax_Lines;
2249 
2250 
2251 /*=============================================================================
2252  |  FUNCTION - Return_Tax_Distributions()
2253  |
2254  |  DESCRIPTION
2255  |      This function handles the return of tax distributions.  It includes
2256  |      creation, update, or delete of existing distributions and TIPV and
2257  |      TERV distributions if required.
2258  |      It also handles the creation, update or delete of self-assessed
2259  |      distributions.
2260  |
2261  |  PARAMETERS
2262  |      P_Invoice_Header_Rec - Header info
2263  |      P_All_Error_Messages - Should API return 1 error message or allow
2264  |                             calling point to get them from message stack
2265  |      P_error_code - Error code to be returned
2266  |      P_calling_sequence -  Calling sequence
2267  |
2268  |  MODIFICATION HISTORY
2269  |    DATE          Author         Action
2270  |    23-OCT-2003   SYIDNER        Created
2271  |    05-MAR-2004   SYIDNER        Included changes for returning of tax
2272  |                                 distributions related to prepayment
2273  |                                 application distributions (PREPAY)
2274  |                                 In this case only the primary distribution
2275  |                                 should be created for the total value of
2276  |                                 the distribution (same as eTax.) No tax
2277  |                                 variances will be created for PREPAY type
2278  |                                 distributions
2279  *============================================================================*/
2280 
2281   FUNCTION Return_Tax_Distributions(
2282              P_Invoice_Header_Rec        IN  ap_invoices_all%ROWTYPE,
2283              P_All_Error_Messages        IN  VARCHAR2,
2284              P_Error_Code                OUT NOCOPY VARCHAR2,
2285              P_Calling_Sequence          IN  VARCHAR2) RETURN BOOLEAN
2286   IS
2287 
2288     l_debug_info		VARCHAR2(2000);
2289     l_curr_calling_sequence	VARCHAR2(4000);
2290     l_api_name			CONSTANT VARCHAR2(100) := 'RETURN_TAX_DISTRIBUTIONS';
2291 
2292     l_dist_ccid_rec		zx_api_pub.distccid_det_facts_rec_type;
2293     l_dist_count		NUMBER;
2294 
2295     --Bug9021265
2296     l_frozen_tax_dist_id   NUMBER;
2297     l_frozen_summary_tax_line_id  NUMBER;
2298     --Bug9021265
2299 
2300     -- This record type is used for ap_invoice_distributions_all and ap_self_assessed_tax_dist_all
2301 
2302     TYPE r_upd_tax_dist_info IS RECORD (
2303       accounting_date 			ap_invoice_distributions_all.accounting_date%TYPE,
2304       dist_code_combination_id		ap_invoice_distributions_all.dist_code_combination_id%TYPE,
2305       line_type_lookup_code		ap_invoice_distributions_all.line_type_lookup_code%TYPE,
2306       period_name 			ap_invoice_distributions_all.period_name%TYPE,
2307       amount 				ap_invoice_distributions_all.amount%TYPE,
2308       base_amount 			ap_invoice_distributions_all.base_amount%TYPE,
2309       description 			ap_invoice_distributions_all.description%TYPE,
2310       income_tax_region 		ap_invoice_distributions_all.income_tax_region%TYPE,
2311       type_1099 			ap_invoice_distributions_all.type_1099%TYPE,
2312       attribute1 			ap_invoice_distributions_all.attribute1%TYPE,
2313       attribute10 			ap_invoice_distributions_all.attribute10%TYPE,
2314       attribute11 			ap_invoice_distributions_all.attribute11%TYPE,
2315       attribute12 			ap_invoice_distributions_all.attribute12%TYPE,
2316       attribute13 			ap_invoice_distributions_all.attribute13%TYPE,
2317       attribute14 			ap_invoice_distributions_all.attribute14%TYPE,
2318       attribute15 			ap_invoice_distributions_all.attribute15%TYPE,
2319       attribute2 			ap_invoice_distributions_all.attribute2%TYPE,
2320       attribute3 			ap_invoice_distributions_all.attribute3%TYPE,
2321       attribute4 			ap_invoice_distributions_all.attribute4%TYPE,
2322       attribute5 			ap_invoice_distributions_all.attribute5%TYPE,
2323       attribute6 			ap_invoice_distributions_all.attribute6%TYPE,
2324       attribute7 			ap_invoice_distributions_all.attribute7%TYPE,
2325       attribute8 			ap_invoice_distributions_all.attribute8%TYPE,
2326       attribute9 			ap_invoice_distributions_all.attribute9%TYPE,
2327       attribute_category 		ap_invoice_distributions_all.attribute_category%TYPE,
2328       expenditure_item_date		ap_invoice_distributions_all.expenditure_item_date%TYPE,
2329       expenditure_organization_id	ap_invoice_distributions_all.expenditure_organization_id%TYPE,
2330       expenditure_type 			ap_invoice_distributions_all.expenditure_type%TYPE,
2331       parent_invoice_id 		ap_invoice_distributions_all.parent_invoice_id%TYPE,
2332       pa_addition_flag 			ap_invoice_distributions_all.pa_addition_flag%TYPE,
2333       pa_quantity 			ap_invoice_distributions_all.pa_quantity%TYPE,
2334       project_accounting_context	ap_invoice_distributions_all.project_accounting_context%TYPE,
2335       project_id 			ap_invoice_distributions_all.project_id%TYPE,
2336       task_id 				ap_invoice_distributions_all.task_id%TYPE,
2337       awt_group_id 			ap_invoice_distributions_all.awt_group_id%TYPE,
2338       global_attribute_category		ap_invoice_distributions_all.global_attribute_category%TYPE,
2339       global_attribute1 		ap_invoice_distributions_all.global_attribute1%TYPE,
2340       global_attribute2 		ap_invoice_distributions_all.global_attribute2%TYPE,
2341       global_attribute3 		ap_invoice_distributions_all.global_attribute3%TYPE,
2342       global_attribute4 		ap_invoice_distributions_all.global_attribute4%TYPE,
2343       global_attribute5 		ap_invoice_distributions_all.global_attribute5%TYPE,
2344       global_attribute6 		ap_invoice_distributions_all.global_attribute6%TYPE,
2345       global_attribute7 		ap_invoice_distributions_all.global_attribute7%TYPE,
2346       global_attribute8 		ap_invoice_distributions_all.global_attribute8%TYPE,
2347       global_attribute9 		ap_invoice_distributions_all.global_attribute9%TYPE,
2348       global_attribute10 		ap_invoice_distributions_all.global_attribute10%TYPE,
2349       global_attribute11 		ap_invoice_distributions_all.global_attribute11%TYPE,
2350       global_attribute12 		ap_invoice_distributions_all.global_attribute12%TYPE,
2351       global_attribute13 		ap_invoice_distributions_all.global_attribute13%TYPE,
2352       global_attribute14 		ap_invoice_distributions_all.global_attribute14%TYPE,
2353       global_attribute15 		ap_invoice_distributions_all.global_attribute15%TYPE,
2354       global_attribute16 		ap_invoice_distributions_all.global_attribute16%TYPE,
2355       global_attribute17 		ap_invoice_distributions_all.global_attribute17%TYPE,
2356       global_attribute18 		ap_invoice_distributions_all.global_attribute18%TYPE,
2357       global_attribute19 		ap_invoice_distributions_all.global_attribute19%TYPE,
2358       global_attribute20 		ap_invoice_distributions_all.global_attribute20%TYPE,
2359       award_id 				ap_invoice_distributions_all.award_id%TYPE,
2360       dist_match_type 			ap_invoice_distributions_all.dist_match_type%TYPE,
2361       rcv_transaction_id 		ap_invoice_distributions_all.rcv_transaction_id%TYPE,
2362       tax_recoverable_flag		ap_invoice_distributions_all.tax_recoverable_flag%TYPE,
2363       cancellation_flag 		ap_invoice_distributions_all.cancellation_flag%TYPE,
2364       invoice_line_number		ap_invoice_distributions_all.invoice_line_number%TYPE,
2365       corrected_invoice_dist_id		ap_invoice_distributions_all.corrected_invoice_dist_id%TYPE,
2366       rounding_amt 			ap_invoice_distributions_all.rounding_amt%TYPE,
2367       charge_applicable_to_dist_id	ap_invoice_distributions_all.charge_applicable_to_dist_id%TYPE,
2368       distribution_class 		ap_invoice_distributions_all.distribution_class%TYPE,
2369       tax_code_id 			ap_invoice_distributions_all.tax_code_id%TYPE,
2370       detail_tax_dist_id 		ap_invoice_distributions_all.detail_tax_dist_id%TYPE,
2371       rec_nrec_rate 			ap_invoice_distributions_all.rec_nrec_rate%TYPE,
2372       recovery_rate_id 			ap_invoice_distributions_all.recovery_rate_id%TYPE,
2373       recovery_rate_name		ap_invoice_distributions_all.recovery_rate_name%TYPE,
2374       recovery_type_code 		ap_invoice_distributions_all.recovery_type_code%TYPE,
2375       taxable_amount 			ap_invoice_distributions_all.taxable_amount%TYPE,
2376       taxable_base_amount 		ap_invoice_distributions_all.taxable_base_amount%TYPE,
2377       summary_tax_line_id		ap_invoice_distributions_all.summary_tax_line_id%TYPE,
2378       extra_po_erv			ap_invoice_distributions_all.extra_po_erv%TYPE ,
2379       prepay_tax_diff_amount		ap_invoice_distributions_all.prepay_tax_diff_amount%TYPE,
2380       invoice_distribution_id		ap_invoice_distributions_all.invoice_distribution_id%TYPE,
2381 	  pay_awt_group_id			ap_invoice_distributions_all.pay_awt_group_id%TYPE, --Bug8345264
2382       account_source_tax_rate_id	zx_rec_nrec_dist.account_source_tax_rate_id%TYPE);
2383 
2384 
2385     TYPE ins_tax_dist_type IS TABLE OF r_ins_tax_dist_info;
2386     TYPE upd_tax_dist_type IS TABLE OF r_upd_tax_dist_info;
2387     TYPE del_tax_dist_type IS TABLE OF ap_invoice_distributions_all.invoice_distribution_id%TYPE;
2388 
2389     l_inv_dist_ins		ins_tax_dist_type;
2390     l_inv_self_ins		ins_tax_dist_type;
2391 
2392     l_inv_dist_upd		upd_tax_dist_type;
2393     l_inv_self_upd		upd_tax_dist_type;
2394 
2395     l_inv_dist_del		del_tax_dist_type;
2396     l_inv_self_del		del_tax_dist_type;
2397 
2398     -- bug10140354 begin
2399 
2400     cursor frozen_dist_del IS
2401     SELECT /*+ leading(GT) index(GT ZX_TRX_HEADERS_GT_U1) cardinality(GT, 1) use_nl(AID) */ -- 9485828
2402          detail_tax_dist_id,aid.summary_tax_line_id , invoice_id
2403       FROM ap_invoice_distributions_all aid,
2404            zx_trx_headers_gt gt
2405      WHERE aid.line_type_lookup_code IN ('NONREC_TAX','REC_TAX','TRV','TERV','TIPV')
2406        AND (aid.accounting_event_id IS NOT NULL         OR
2407             NVL(aid.match_status_flag,'N') IN ('A','T') OR
2408             NVL(aid.posted_flag,'N') ='Y'               OR
2409             NVL(aid.encumbered_flag, 'N') IN ('Y','D','W','X'))
2410        AND gt.application_id         = AP_ETAX_PKG.AP_APPLICATION_ID
2411        AND gt.entity_code            = AP_ETAX_PKG.AP_ENTITY_CODE
2412 	   AND gt.event_class_code       IN (AP_ETAX_PKG.AP_INV_EVENT_CLASS_CODE,
2413 	                                     AP_ETAX_PKG.AP_PP_EVENT_CLASS_CODE,
2414 	                                     AP_ETAX_PKG.AP_ER_EVENT_CLASS_CODE)
2415 	   AND gt.trx_id                 = aid.invoice_id
2416        AND NOT EXISTS(SELECT /*+ NO_UNNEST  */ 'Tax Distributions'  -- 9485828
2417 			            FROM zx_rec_nrec_dist zd
2418 			           WHERE zd.rec_nrec_tax_dist_id = aid.detail_tax_dist_id
2419 			             AND NVL(SELF_ASSESSED_FLAG, 'N') = 'N');
2420 
2421     TYPE  frozen_tax_del  IS TABLE OF frozen_dist_del%ROWTYPE
2422 				INDEX BY BINARY_INTEGER;
2423 
2424    l_frozen_tax_del frozen_tax_del;
2425 
2426    j NUMBER;
2427 
2428    cursor frozen_self_dist_del IS
2429    SELECT /*+ leading(GT) index(GT ZX_TRX_HEADERS_GT_U1) cardinality(GT, 1) use_nl(AID) */ -- 9485828
2430           detail_tax_dist_id, aid.summary_tax_line_id , invoice_id
2431 
2432       FROM ap_self_assessed_tax_dist_all aid,
2433            zx_trx_headers_gt gt
2434      WHERE aid.line_type_lookup_code IN ('NONREC_TAX','REC_TAX')
2435        AND (aid.accounting_event_id IS NOT NULL         OR
2436             NVL(aid.match_status_flag,'N') IN ('A','T') OR
2437             NVL(aid.posted_flag,'N') ='Y'               OR
2438             NVL(aid.encumbered_flag, 'N') IN ('Y','D','W','X'))
2439        AND gt.application_id         = AP_ETAX_PKG.AP_APPLICATION_ID
2440        AND gt.entity_code            = AP_ETAX_PKG.AP_ENTITY_CODE
2441 	   AND gt.event_class_code       IN (AP_ETAX_PKG.AP_INV_EVENT_CLASS_CODE,
2442 	                                   AP_ETAX_PKG.AP_PP_EVENT_CLASS_CODE,
2443 	                                   AP_ETAX_PKG.AP_ER_EVENT_CLASS_CODE)
2444 	   AND gt.trx_id                 = aid.invoice_id
2445        AND NOT EXISTS(SELECT /*+ NO_UNNEST  */ 'Tax Distributions'  -- 9485828
2446 		                FROM zx_rec_nrec_dist zd
2447 			           WHERE zd.rec_nrec_tax_dist_id = aid.detail_tax_dist_id
2448 			             AND NVL(SELF_ASSESSED_FLAG, 'N') = 'Y');
2449 
2450      TYPE frozen_self_tax_del IS TABLE OF frozen_self_dist_del%ROWTYPE
2451                                          INDEX BY BINARY_INTEGER;
2452      l_frozen_self_tax_del frozen_self_tax_del;
2453 
2454    -- bug10140354 end
2455 
2456 
2457     CURSOR insert_tax_dist IS
2458       SELECT /*+ leading(gt,zd) cardinality(gt,1) */
2459          zd.gl_date accounting_date , --Bug6809792
2460          /*For tax distributions accounting date will be stamped from zx_rec_nrec_dist
2461            Ebtax will now store accounting date of opne period in their table*/
2462          decode(NVL(zl.tax_only_line_flag,'N'),
2463                                'Y',parent_tax_line.default_dist_ccid,
2464                                 parent_taxable_dist.dist_code_combination_id) 			dist_code_combination_id, ---for 6010950
2465         -- this ccid is a temporary value that will be used if other
2466         -- conditions are met before inserting the tax distribution.
2467         DECODE(NVL(zd.recoverable_flag, 'N'),
2468                'Y', 'REC_TAX',
2469                'N', 'NONREC_TAX') 					line_type_lookup_code,
2470         ap_utilities_pkg.get_gl_period_name(zd.gl_date,ai.org_id)	period_name,
2471         -- included the decode as part of the prepayment changes.
2472         -- since for prepayment tax variances will not be created,
2473         -- the dist amount should be the total including variances
2474 -- bug 8317515: modify start
2475         --BUG11656125 START--
2476         DECODE(ai.invoice_type_lookup_code,'PREPAYMENT',zd.rec_nrec_tax_amt,DECODE(parent_item_line.line_type_lookup_code,
2477                'PREPAY', zd.rec_nrec_tax_amt,
2478                decode(parent_taxable_dist.line_type_lookup_code, 'PREPAY', zd.rec_nrec_tax_amt,
2479                decode(nvl(zd.recoverable_flag,'N'),
2480 			  'Y', zd.rec_nrec_tax_amt,
2481 				NVL(zd.rec_nrec_tax_amt, 0) -
2482                             get_tv(zd.rate_tax_factor, zd.trx_line_dist_qty, zd.per_unit_nrec_tax_amt,
2483 						    nvl(zd.ref_doc_per_unit_nrec_tax_amt,0), zd.per_trx_curr_unit_nr_amt,
2484 						    zd.ref_per_trx_curr_unit_nr_amt, zd.price_diff, parent_tax_line.corrected_inv_id,
2485 						    parent_item_line.line_type_lookup_code, parent_item_line.line_source, ai.invoice_currency_code, --Bug10416960
2486 						    parent_item_line.match_type, zd.unit_price , zd.trx_line_dist_id , zd.ref_doc_unit_price , zd.rec_nrec_tax_dist_id ))))) amount, -- bug 9231678
2487         ap_utilities_pkg.ap_round_currency(
2488         DECODE(ai.invoice_type_lookup_code,'PREPAYMENT',zd.rec_nrec_tax_amt_funcl_curr,DECODE(parent_item_line.line_type_lookup_code,
2489 		'PREPAY', zd.rec_nrec_tax_amt_funcl_curr,
2490                 decode(parent_taxable_dist.line_type_lookup_code, 'PREPAY', zd.rec_nrec_tax_amt_funcl_curr,
2491                 decode(nvl(zd.recoverable_flag,'N'),
2492 		       'Y', zd.rec_nrec_tax_amt_funcl_curr,
2493 			     zd.rec_nrec_tax_amt_funcl_curr - --Bug12835115
2494 				    (get_tv_base
2495 					(zd.rate_tax_factor, zd.trx_line_dist_qty, zd.per_unit_nrec_tax_amt, nvl(zd.ref_doc_per_unit_nrec_tax_amt,0),
2496 					 zd.per_trx_curr_unit_nr_amt, zd.ref_per_trx_curr_unit_nr_amt, nvl(zd.currency_conversion_rate, 1),
2497 					 zd.ref_doc_curr_conv_rate, zd.price_diff, parent_tax_line.corrected_inv_id,
2498 					 parent_item_line.line_type_lookup_code, parent_item_line.line_source, asp.base_currency_code,    --Bug10416960
2499 					 parent_item_line.match_type, zd.unit_price , zd.trx_line_dist_id , zd.ref_doc_unit_price , zd.rec_nrec_tax_dist_id )+
2500 				     find_val(zd.trx_line_dist_id)*
2501 				     get_terv
2502 					(zd.trx_line_dist_qty, zd.currency_conversion_rate, zd.ref_doc_curr_conv_rate, zd.applied_to_doc_curr_conv_rate,
2503 					 NULL, zd.per_unit_nrec_tax_amt, nvl(zd.ref_doc_per_unit_nrec_tax_amt,zd.per_unit_nrec_tax_amt),
2504 					 parent_tax_line.corrected_inv_id, parent_item_line.line_type_lookup_code, parent_item_line.line_source,  --Bug10416960
2505 					 asp.base_currency_code  , zd.trx_line_dist_id , zd.ref_doc_unit_price , zd.ref_per_trx_curr_unit_nr_amt , zd.rec_nrec_tax_dist_id,zd.unit_price)))))),    --Bug10416960
2506 					 asp.base_currency_code) base_amount, -- bug 9231678
2507         --BUG11656125 END--
2508 -- bug 8317515: modify end
2509         -- included the decode as part of the prepayment changes.
2510         -- since for prepayments tax variances will not be created,
2511         -- the base_amount should be the total including variances
2512         DECODE(NVL(zd.inclusive_flag, 'N'),
2513 		'Y', parent_item_line.description,
2514 		'N', parent_tax_line.description) 				description,
2515         DECODE(NVL(zd.inclusive_flag, 'N'),
2516 		'Y', DECODE(parent_item_line.type_1099,
2517 			    NULL, NULL,
2518 			    parent_item_line.income_tax_region),
2519          	'N', DECODE(parent_tax_line.type_1099,
2520                 	    NULL, NULL,
2521 			    parent_tax_line.income_tax_region))			income_tax_region,
2522          parent_taxable_dist.po_distribution_id 			po_distribution_id,  --change for bug 8713009
2523 	                                                             -- now rec_tax dist will also have po_dist_id stamped on it
2524         DECODE(NVL(zd.inclusive_flag, 'N'),
2525 		'Y', parent_item_line.type_1099,
2526 		'N', parent_tax_line.type_1099) 				type_1099,
2527         zd.attribute1 								attribute1,
2528         zd.attribute10 								attribute10,
2529         zd.attribute11 								attribute11,
2530         zd.attribute12 								attribute12,
2531         zd.attribute13 								attribute13,
2532         zd.attribute14 								attribute14,
2533         zd.attribute15 								attribute15,
2534         zd.attribute2 								attribute2,
2535         zd.attribute3 								attribute3,
2536         zd.attribute4 								attribute4,
2537         zd.attribute5 								attribute5,
2538         zd.attribute6 								attribute6,
2539         zd.attribute7 								attribute7,
2540         zd.attribute8 								attribute8,
2541         zd.attribute9 								attribute9,
2542         zd.attribute_category 							attribute_category,
2543         DECODE(NVL(zd.recoverable_flag, 'N'),
2544 		'Y', NULL,
2545 		'N', nvl(parent_tax_line.expenditure_item_date,parent_taxable_dist.expenditure_item_date))	expenditure_item_date,  /* bug 11076722 modified bug 10155425 */
2546         DECODE(NVL(zd.recoverable_flag, 'N'),
2547 		'Y', NULL,
2548 		'N', nvl(parent_tax_line.expenditure_organization_id,parent_taxable_dist.expenditure_organization_id))		expenditure_organization_id, /* bug 11076722 modified bug 10155425 */
2549         DECODE(NVL(zd.recoverable_flag, 'N'),
2550 		'Y', NULL,
2551 		'N', nvl(parent_tax_line.expenditure_type,parent_taxable_dist.expenditure_type)) 	expenditure_type,  /* bug 11076722 modified bug 10155425 */
2552         parent_taxable_dist.parent_invoice_id 					parent_invoice_id,
2553         DECODE(NVL(zd.recoverable_flag, 'N'),
2554          	'Y', 'E',
2555          	'N', decode(NVL(ZL.tax_only_line_flag,'N'),'Y','N',decode(parent_taxable_dist.pa_addition_flag,'Y','N',parent_taxable_dist.pa_addition_flag)))		pa_addition_flag, /*Bug 14248119*/ /*Bug 13106066:added decode logic*/
2556         DECODE(NVL(zd.recoverable_flag, 'N'),
2557          	'Y', NULL,
2558          	'N', nvl(parent_tax_line.pa_quantity,parent_taxable_dist.pa_quantity)) pa_quantity,  /* bug 11076722 modified bug 10155425 */
2559         DECODE(NVL(zd.recoverable_flag, 'N'),
2560          	'Y', NULL,
2561          	'N', parent_taxable_dist.project_accounting_context)	project_accounting_context,
2562         DECODE(NVL(zd.recoverable_flag, 'N'),
2563 		'Y', NULL,
2564 		'N', nvl(parent_tax_line.project_id,parent_taxable_dist.project_id))	project_id,  /* bug 11076722 modified bug 10155425 */
2565         DECODE(NVL(zd.recoverable_flag, 'N'),
2566 		'Y', NULL,
2567 		'N', nvl(parent_tax_line.task_id,parent_taxable_dist.task_id)) 		task_id,  /* bug 11076722 modified bug 10155425 */
2568         DECODE(NVL(asp.allow_awt_flag, 'N'),
2569                'Y', DECODE(NVL(pvs.allow_awt_flag, 'N'),
2570                       'Y',  DECODE(parent_tax_line.awt_group_id,
2571 				            null,DECODE(NVL(asp.awt_include_tax_amt, 'N'),
2572                                    'Y', DECODE(NVL(zd.inclusive_flag, 'N'),
2573                                           'Y', DECODE(zd.applied_from_tax_dist_id,
2574                                                 null, parent_taxable_dist.awt_group_id,  --Bug8334059
2575                                                 ap_etax_utility_pkg.Get_Prepay_Awt_Group_Id(
2576                                                 parent_taxable_dist.prepay_distribution_id,
2577                                                 P_Calling_Sequence)),
2578                                           'N', parent_taxable_dist.awt_group_id),
2579 								  NULL),
2580 					        parent_tax_line.awt_group_id), --Bug6648050 --bug 9035846  -- bug9117319
2581 									--Bug8334059
2582                       NULL),
2583                NULL) 								awt_group_id,
2584 	      --Bug6505640 Populating DFF's from Invoice distributions instead of Tax dists
2585 		parent_taxable_dist.global_attribute_category 						global_attribute_category,
2586 		parent_taxable_dist.global_attribute1 							global_attribute1,
2587 		parent_taxable_dist.global_attribute2 							global_attribute2,
2588 		parent_taxable_dist.global_attribute3 							global_attribute3,
2589 		parent_taxable_dist.global_attribute4 							global_attribute4,
2590 		parent_taxable_dist.global_attribute5 							global_attribute5,
2591 		parent_taxable_dist.global_attribute6 							global_attribute6,
2592 		parent_taxable_dist.global_attribute7 							global_attribute7,
2593 		parent_taxable_dist.global_attribute8 							global_attribute8,
2594 		parent_taxable_dist.global_attribute9 							global_attribute9,
2595 		parent_taxable_dist.global_attribute10 							global_attribute10,
2596 		parent_taxable_dist.global_attribute11 							global_attribute11,
2597 		parent_taxable_dist.global_attribute12 							global_attribute12,
2598 		parent_taxable_dist.global_attribute13 							global_attribute13,
2599 		parent_taxable_dist.global_attribute14 							global_attribute14,
2600 		parent_taxable_dist.global_attribute15 							global_attribute15,
2601 		parent_taxable_dist.global_attribute16 							global_attribute16,
2602 		parent_taxable_dist.global_attribute17 							global_attribute17,
2603 		parent_taxable_dist.global_attribute18 							global_attribute18,
2604 		parent_taxable_dist.global_attribute19 							global_attribute19,
2605 		parent_taxable_dist.global_attribute20 							global_attribute20,
2606         DECODE(NVL(zd.recoverable_flag, 'N'),
2607 		'Y', NULL,
2608 		'N', nvl(parent_tax_line.award_id,parent_taxable_dist.award_id))		award_id,  /* bug 11076722 modified bug 10155425 */
2609         DECODE(zd.ref_doc_dist_id,
2610 		NULL, DECODE(zl.applied_to_trx_id,
2611               			NULL, 'NOT_MATCHED',
2612               			'OTHER_TO_RECEIPT'),
2613 		'NOT_MATCHED') 							dist_match_type,
2614          DECODE(NVL(zd.recoverable_flag, 'N'),
2615 		'Y', NULL,
2616         --Bug 8910531
2617          	'N', parent_taxable_dist.rcv_transaction_id)		rcv_transaction_id,
2618         zd.recoverable_flag 							tax_recoverable_flag,
2619 	parent_taxable_dist.merchant_document_number                            merchant_document_number, --Bug14658408: Start
2620 	parent_taxable_dist.merchant_name                                       merchant_name,
2621 	parent_taxable_dist.merchant_reference                                  merchant_reference,
2622 	parent_taxable_dist.merchant_tax_reg_number                             merchant_tax_reg_number,
2623 	parent_taxable_dist.merchant_taxpayer_id                                merchant_taxpayer_id,  --Bug14658408: End
2624         parent_taxable_dist.cancellation_flag 					cancellation_flag,
2625         DECODE(NVL(zd.inclusive_flag, 'N'),
2626 		'Y', zd.trx_line_id,
2627 		'N', nvl(parent_tax_line.line_number,
2628                          parent_taxable_dist.invoice_line_number)) 		invoice_line_number,
2629         parent_taxable_dist.corrected_invoice_dist_id 				corrected_invoice_dist_id,
2630         DECODE(NVL(zd.recoverable_flag, 'N'),
2631 		'Y', NULL,
2632 		zd.func_curr_rounding_adjustment) 				rounding_amt,
2633         -- the rounding amount in the non-recoverable case will be populated
2634         -- to the primary distribution later in the cycle.
2635         decode(NVL(zl.tax_only_line_flag,'N'),
2636                      'Y', NULL, zd.trx_line_dist_id)				charge_applicable_to_dist_id,
2637         DECODE(zl.ref_doc_trx_id,
2638           	NULL, 'CANDIDATE', 'PERMANENT') 				distribution_class,
2639         zd.tax_rate_id 								tax_code_id,
2640         zd.rec_nrec_tax_dist_id 						detail_tax_dist_id,
2641         zd.rec_nrec_rate 							rec_nrec_rate,
2642         zd.recovery_rate_id 							recovery_rate_id,
2643         zd.recovery_rate_code 							recovery_rate_name,
2644         zd.recovery_type_code 							recovery_type_code,
2645         zd.summary_tax_line_id 							summary_tax_line_id,
2646         null									extra_po_erv,
2647         zd.taxable_amt								taxable_amount,
2648         zd.taxable_amt_funcl_curr 						taxable_base_amount,
2649         pd.accrue_on_receipt_flag 						accrue_on_receipt_flag,
2650         asp.allow_flex_override_flag 						allow_flex_override_flag,
2651         fsp.purch_encumbrance_flag 						purch_encumbrance_flag,
2652         asp.org_id 								org_id,
2653         zd.tax_regime_id 							tax_regime_id,
2654         zd.tax_id 								tax_id,
2655         zd.tax_status_id 							tax_status_id,
2656         zl.tax_jurisdiction_id 							tax_jurisdiction_id,
2657         'N'                                                                     par_dist_assets_tracking_flag, -- Bug 13821160
2658         parent_taxable_dist.cancellation_flag 					parent_dist_cancellation_flag,
2659         parent_taxable_dist.reversal_flag 					parent_dist_reversal_flag,
2660         parent_taxable_dist.parent_reversal_id 					parent_dist_parent_reversal_id,
2661         zd.reversed_tax_dist_id 						reversed_tax_dist_id,
2662         zd.adjusted_doc_tax_dist_id 						adjusted_doc_tax_dist_id,
2663         zd.applied_from_tax_dist_id 						applied_from_tax_dist_id,
2664         -- the prepay_distribution_id will be populated with
2665         -- invoice_distribution_id for the associated rec or
2666         -- nonrec tax distributions
2667         DECODE(parent_item_line.line_type_lookup_code,
2668                'PREPAY', AP_ETAX_UTILITY_PKG.get_dist_id_for_tax_dist_id
2669                			(zd.applied_from_tax_dist_id),
2670                decode(parent_taxable_dist.line_type_lookup_code,
2671 		      'PREPAY', AP_ETAX_UTILITY_PKG.get_dist_id_for_tax_dist_id
2672                                        (zd.applied_from_tax_dist_id), NULL))	prepay_distribution_id,
2673         DECODE(parent_item_line.line_type_lookup_code,
2674                'PREPAY', DECODE(NVL(zd.recoverable_flag, 'N'),
2675 				'N', (zd.prd_tax_amt - zd.rec_nrec_tax_amt), NULL),
2676                NULL) 								prepay_tax_diff_amount,
2677        ai.invoice_id								invoice_id,
2678        ai.batch_id								batch_id,
2679        ai.set_of_books_id							set_of_books_id,
2680 	   DECODE(NVL(asp.allow_awt_flag, 'N'),
2681                'Y', DECODE(NVL(pvs.allow_awt_flag, 'N'),
2682                       'Y', DECODE(parent_tax_line.pay_awt_group_id,
2683 					        NULL, DECODE(NVL(asp.awt_include_tax_amt, 'N'),
2684                                     'Y', DECODE(NVL(zd.inclusive_flag, 'N'),
2685                                            'Y',DECODE(zd.applied_from_tax_dist_id,
2686                                                 null, parent_taxable_dist.pay_awt_group_id,
2687                                                 ap_etax_utility_pkg.Get_Prepay_Pay_Awt_Group_Id(
2688                                                 parent_taxable_dist.prepay_distribution_id,
2689                                                 P_Calling_Sequence)),
2690                                            'N', parent_taxable_dist.pay_awt_group_id),
2691 								   NULL),
2692 					        parent_tax_line.pay_awt_group_id), --Bug6648050 -- bug 9035846 -- bug9117319
2693                      NULL),
2694                NULL) 								pay_awt_group_id,  --Bug8345264
2695        zd.account_source_tax_rate_id				account_source_tax_rate_id
2696   FROM zx_trx_headers_gt                gt,
2697        zx_rec_nrec_dist                 zd,
2698        zx_lines                         zl,
2699        ap_invoices_all                  ai,
2700        ap_supplier_sites_all            pvs,
2701        ap_system_parameters_all         asp,
2702        financials_system_params_all     fsp,
2703        po_distributions_all             pd,
2704        ap_invoice_lines_all             parent_tax_line,
2705        ap_invoice_lines_all             parent_item_line,
2706        ap_invoice_distributions_all     parent_taxable_dist
2707  WHERE gt.APPLICATION_ID                        = zd.APPLICATION_ID
2708    AND gt.ENTITY_CODE                           = zd.ENTITY_CODE
2709    AND gt.EVENT_CLASS_CODE                      = zd.EVENT_CLASS_CODE
2710    AND gt.TRX_ID                                = zd.TRX_ID
2711    AND zd.tax_line_id                           = zl.tax_line_id
2712    AND gt.trx_id                                = ai.invoice_id
2713    AND ai.vendor_site_id                        = pvs.vendor_site_id
2714    AND ai.set_of_books_id                       = asp.set_of_books_id
2715    AND ai.org_id                                = asp.org_id
2716    AND asp.set_of_books_id                      = fsp.set_of_books_id
2717    AND asp.org_id                               = fsp.org_id
2718    AND NVL(zd.self_assessed_flag, 'N')          = 'N'
2719    AND NVL(zl.reporting_only_flag, 'N')         = 'N'
2720    AND parent_taxable_dist.po_distribution_id   = pd.po_distribution_id (+)
2721    AND zd.trx_id                                = parent_tax_line.invoice_id (+)
2722    AND zd.summary_tax_line_id                   = parent_tax_line.summary_tax_line_id (+)
2723    AND zd.trx_id                                = parent_item_line.invoice_id (+)
2724    AND zd.trx_line_id                           = parent_item_line.line_number (+)
2725    AND zd.trx_id                                = parent_taxable_dist.invoice_id (+)
2726    AND zd.trx_line_dist_id                      = parent_taxable_dist.invoice_distribution_id (+)
2727    --BUG11656125 START--
2728    AND (zd.ref_doc_application_id IS NULL
2729         or (zd.ref_doc_application_id IS NOT NULL
2730             and (nvl(zd.recoverable_flag, 'N') = 'Y'
2731                  or (ai.invoice_type_lookup_code = 'PREPAYMENT' and nvl(zd.recoverable_flag, 'N') = 'N' )
2732                  or (parent_taxable_dist.prepay_distribution_id IS NOT NULL)
2733 		         or ( zd.rec_nrec_tax_amt = 0 and nvl(zd.recoverable_flag, 'N') = 'N'
2734 	/* Commented for Bug 6906867*/	/*    and zd.rec_nrec_rate = 100*/  )  -- added the condition for bug fix 6695517
2735                  or zd.rec_nrec_tax_amt <> ap_etax_utility_pkg.get_tv
2736                                             (zd.rate_tax_factor, zd.trx_line_dist_qty, zd.per_unit_nrec_tax_amt,
2737                                              nvl(zd.ref_doc_per_unit_nrec_tax_amt,0), zd.per_trx_curr_unit_nr_amt,
2738                                              zd.ref_per_trx_curr_unit_nr_amt, zd.price_diff, parent_tax_line.corrected_inv_id,
2739                          parent_item_line.line_type_lookup_code, parent_item_line.line_source, ai.invoice_currency_code,    --Bug10416960
2740 					     parent_item_line.match_type, zd.unit_price , zd.trx_line_dist_id , zd.ref_doc_unit_price , zd.rec_nrec_tax_dist_id))))
2741 --   AND ((zd.recoverable_flag = 'N'  AND zd.rec_nrec_rate<>0) OR zd.recoverable_flag = 'Y') --bug 6350100   -- commented out the condition for bug fix 6695517
2742    --BUG11656125 END --
2743    AND NOT EXISTS
2744       (SELECT aid.detail_tax_dist_id
2745          FROM ap_invoice_distributions_all aid
2746         WHERE aid.invoice_id            = zd.trx_id
2747           AND aid.detail_tax_dist_id    = zd.rec_nrec_tax_dist_id
2748           AND aid.line_type_lookup_code IN ('REC_TAX','NONREC_TAX'))
2749    AND NOT EXISTS
2750       (SELECT aid.detail_tax_dist_id
2751          FROM ap_invoice_distributions_all aid
2752         WHERE aid.invoice_id            = zd.trx_id
2753           AND aid.detail_tax_dist_id    = zd.rec_nrec_tax_dist_id
2754           AND aid.line_type_lookup_code IN ('TRV','TERV','TIPV')
2755           AND (NVL(aid.posted_flag,'N') = 'Y' OR
2756                aid.accounting_event_id IS NOT NULL OR
2757                NVL(aid.encumbered_flag, 'N') IN ('Y','D','W','X') OR
2758           --Bug7419940 Dont allow any insert from posted / frozen variacnes it should be reversed
2759                NVL(aid.reversal_flag,'N') = 'Y'))
2760           --Bug8481532 Added Condition To exclude reversed distribuion from getting changed
2761    AND (parent_taxable_dist.dist_match_type is null
2762         or nvl(zd.recoverable_flag, 'N') = 'Y'
2763         or parent_taxable_dist.dist_match_type <> 'PRICE_CORRECTION')
2764    AND (parent_taxable_dist.prepay_distribution_id IS NULL
2765         or (parent_taxable_dist.prepay_distribution_id IS NOT NULL
2766             and (parent_item_line.line_number IS NOT NULL
2767                  or zd.trx_line_id = (select -1 * (aid.invoice_id || aid.invoice_line_number || parent_taxable_dist.invoice_line_number)
2768                                         from ap_invoice_distributions_all aid
2769                                        where aid.invoice_distribution_id = parent_taxable_dist.prepay_distribution_id))))
2770    -- Bug 7462582
2771    -- Reverting the fixes done in bugs 6805527 and 7389822 as Etax bug 7515711 will take care of these fixes.
2772    /* Added by schitlap, epajaril to fix the issue in Bug 6805527 */
2773    /*AND (nvl(parent_taxable_dist.reversal_flag, 'N') <> 'Y'
2774         OR zd.reversed_tax_dist_id IS NULL) -- 7389822*/
2775   ORDER BY detail_tax_dist_id ;  --bug 8359426 --bug 9666759 Removed the desc clause
2776 
2777 
2778   CURSOR insert_tax_variances IS
2779 	SELECT /*+ leading(gt,zd) cardinality(gt,1) */
2780                 zd.gl_date accounting_date , --Bug6809792
2781                 /*For tax distributions accounting date will be stamped from zx_rec_nrec_dist
2782                   Ebtax will now store accounting date of opne period in their table*/
2783 		(CASE dist.line_type
2784 			WHEN 'TERV' THEN
2785 			    DECODE(pd.destination_type_code, 'EXPENSE', pd.code_combination_id,
2786 				   parent_taxable_dist.dist_code_combination_id)
2787 			ELSE
2788 			    DECODE(pd.destination_type_code, 'EXPENSE',
2789 				      DECODE(pd.accrue_on_receipt_flag, 'Y', pd.code_combination_id,
2790 				             parent_taxable_dist.dist_code_combination_id),
2791 				   pd.variance_account_id)
2792 		END)												dist_code_combination_id,
2793 	        (CASE dist.line_type
2794 			WHEN 'TIPV' THEN 'TIPV'
2795 			WHEN 'TERV' THEN 'TERV'
2796 			WHEN 'TRV'  THEN 'TRV'
2797 	        END)												line_type_lookup_code,
2798         	ap_utilities_pkg.get_gl_period_name(zd.gl_date,ai.org_id)					period_name,
2799 	        (CASE dist.line_type
2800                  WHEN 'TIPV' THEN -- bug 10291717
2801 				ap_etax_utility_pkg.get_tipv(
2802 					zd.rate_tax_factor, zd.trx_line_dist_qty,
2803 			                nvl2(parent_taxable_dist.rcv_transaction_id,
2804 						ap_etax_utility_pkg.get_converted_price
2805 						(parent_taxable_dist.invoice_distribution_id), zd.unit_price),
2806 					zd.ref_doc_unit_price, nvl(zd.ref_per_trx_curr_unit_nr_amt,zd.per_trx_curr_unit_nr_amt),
2807 					zd.price_diff, parent_tax_line.corrected_inv_id, parent_item_line.line_type_lookup_code,   --Bug10416960
2808 					parent_item_line.line_source, ai.invoice_currency_code,                                    --Bug10416960
2809 					parent_item_line.match_type , zd.trx_line_dist_id , zd.ref_per_trx_curr_unit_nr_amt , zd.rec_nrec_tax_dist_id)
2810 		 WHEN 'TRV' THEN
2811 		        (ap_etax_utility_pkg.get_tv(
2812 				zd.rate_tax_factor, zd.trx_line_dist_qty, zd.per_unit_nrec_tax_amt,
2813 				nvl(zd.ref_doc_per_unit_nrec_tax_amt,0), zd.per_trx_curr_unit_nr_amt,
2814 				zd.ref_per_trx_curr_unit_nr_amt, zd.price_diff, parent_tax_line.corrected_inv_id,
2815 				parent_item_line.line_type_lookup_code, parent_item_line.line_source, ai.invoice_currency_code,  --Bug10416960
2816 				parent_item_line.match_type, zd.unit_price , zd.trx_line_dist_id , zd.ref_doc_unit_price , zd.rec_nrec_tax_dist_id) -
2817 		         ap_etax_utility_pkg.get_tipv(
2818 				zd.rate_tax_factor, zd.trx_line_dist_qty,
2819 		                nvl2(parent_taxable_dist.rcv_transaction_id,
2820 					ap_etax_utility_pkg.get_converted_price
2821 					(parent_taxable_dist.invoice_distribution_id), zd.unit_price),
2822 				zd.ref_doc_unit_price, nvl(zd.ref_per_trx_curr_unit_nr_amt,per_trx_curr_unit_nr_amt),
2823 				zd.price_diff, parent_tax_line.corrected_inv_id, parent_item_line.line_type_lookup_code,         --Bug10416960
2824 				parent_item_line.line_source, ai.invoice_currency_code, parent_item_line.match_type , zd.trx_line_dist_id ,  --Bug10416960
2825 				zd.ref_per_trx_curr_unit_nr_amt , zd.rec_nrec_tax_dist_id))
2826 		 WHEN 'TERV' THEN 0
2827 	         END)														amount,
2828 	        (CASE dist.line_type
2829 		 WHEN 'TIPV' THEN
2830 		        ap_utilities_pkg.ap_round_currency( -- bug 10291717
2831 					ap_etax_utility_pkg.get_tipv_base(
2832 						zd.rate_tax_factor, zd.trx_line_dist_qty,
2833 				                nvl2(parent_taxable_dist.rcv_transaction_id,
2834 							ap_etax_utility_pkg.get_converted_price
2835 							(parent_taxable_dist.invoice_distribution_id), zd.unit_price),
2836 						zd.ref_doc_unit_price, nvl(zd.ref_per_trx_curr_unit_nr_amt,zd.per_trx_curr_unit_nr_amt),
2837 						zd.price_diff, zd.currency_conversion_rate, zd.ref_doc_curr_conv_rate, NULL,
2838 						parent_tax_line.corrected_inv_id, parent_item_line.line_type_lookup_code,     --Bug10416960
2839 						parent_item_line.line_source, ai.invoice_currency_code, asp.base_currency_code,  --Bug10416960
2840 						parent_item_line.match_type , zd.trx_line_dist_id , zd.ref_per_trx_curr_unit_nr_amt , zd.rec_nrec_tax_dist_id)
2841 				,asp.base_currency_code)
2842 		 WHEN 'TRV' THEN
2843 			ap_utilities_pkg.ap_round_currency(
2844 			(ap_etax_utility_pkg.get_tv_base(
2845 				zd.rate_tax_factor, zd.trx_line_dist_qty, zd.per_unit_nrec_tax_amt,
2846 				nvl(zd.ref_doc_per_unit_nrec_tax_amt,0), zd.per_trx_curr_unit_nr_amt,
2847 				zd.ref_per_trx_curr_unit_nr_amt, nvl(zd.currency_conversion_rate,1),
2848 				zd.ref_doc_curr_conv_rate, zd.price_diff, parent_tax_line.corrected_inv_id,
2849 				parent_item_line.line_type_lookup_code, parent_item_line.line_source, asp.base_currency_code,  --Bug10416960
2850 				parent_item_line.match_type, zd.unit_price , zd.trx_line_dist_id , zd.ref_doc_unit_price , zd.rec_nrec_tax_dist_id)
2851                 - (DECODE(find_val(zd.trx_line_dist_id),0,1,0)*ap_etax_utility_pkg.get_terv(
2852 					zd.trx_line_dist_qty, zd.currency_conversion_rate, zd.ref_doc_curr_conv_rate,
2853 					zd.applied_to_doc_curr_conv_rate, NULL, zd.per_unit_nrec_tax_amt,
2854 					nvl(zd.ref_doc_per_unit_nrec_tax_amt,zd.per_unit_nrec_tax_amt),
2855 					parent_tax_line.corrected_inv_id, parent_item_line.line_type_lookup_code,                  --Bug10416960
2856 					parent_item_line.line_source, asp.base_currency_code  , zd.trx_line_dist_id , zd.ref_doc_unit_price , --Bug10416960
2857 					zd.ref_per_trx_curr_unit_nr_amt , zd.rec_nrec_tax_dist_id, zd.unit_price))                 --Bug10416960
2858                 - ap_etax_utility_pkg.get_tipv_base(
2859 				zd.rate_tax_factor, zd.trx_line_dist_qty,
2860 		                nvl2(parent_taxable_dist.rcv_transaction_id,
2861 					ap_etax_utility_pkg.get_converted_price
2862 					(parent_taxable_dist.invoice_distribution_id), zd.unit_price),
2863 				zd.ref_doc_unit_price, nvl(zd.ref_per_trx_curr_unit_nr_amt,zd.per_trx_curr_unit_nr_amt),
2864 				zd.price_diff, zd.currency_conversion_rate, zd.ref_doc_curr_conv_rate, NULL,
2865 				parent_tax_line.corrected_inv_id, parent_item_line.line_type_lookup_code,                     --Bug10416960
2866 				parent_item_line.line_source, ai.invoice_currency_code, asp.base_currency_code,               --Bug10416960
2867 				parent_item_line.match_type , zd.trx_line_dist_id , zd.ref_per_trx_curr_unit_nr_amt , zd.rec_nrec_tax_dist_id)),
2868 				asp.base_currency_code) -- bug 9231678
2869 		 WHEN 'TERV' THEN
2870 			ap_utilities_pkg.ap_round_currency
2871 			(ap_etax_utility_pkg.get_terv(
2872 					zd.trx_line_dist_qty, zd.currency_conversion_rate, zd.ref_doc_curr_conv_rate,
2873 					zd.applied_to_doc_curr_conv_rate, NULL, zd.per_unit_nrec_tax_amt,
2874 					nvl(zd.ref_doc_per_unit_nrec_tax_amt,zd.per_unit_nrec_tax_amt),
2875 					parent_tax_line.corrected_inv_id, parent_item_line.line_type_lookup_code,                 --Bug10416960
2876 					parent_item_line.line_source, asp.base_currency_code  , zd.trx_line_dist_id , zd.ref_doc_unit_price ,   --Bug10416960
2877 					zd.ref_per_trx_curr_unit_nr_amt , zd.rec_nrec_tax_dist_id, zd.unit_price), asp.base_currency_code)      --Bug10416960
2878 	        END)														base_amount,
2879         DECODE(NVL(zd.inclusive_flag, 'N'),
2880 		'Y', parent_item_line.description,
2881 		'N', parent_tax_line.description)							description,
2882         DECODE(NVL(zd.inclusive_flag, 'N'),
2883 		'Y', DECODE(parent_item_line.type_1099,
2884 			    NULL, NULL, parent_item_line.income_tax_region),
2885 		'N', DECODE(parent_tax_line.type_1099,
2886 			    NULL, NULL, parent_tax_line.income_tax_region))				income_tax_region,
2887          parent_taxable_dist.po_distribution_id						                po_distribution_id, -- change for bug 8713009
2888         DECODE(NVL(zd.inclusive_flag, 'N'),
2889 		'Y', parent_item_line.type_1099,
2890 		'N', parent_tax_line.type_1099) 							type_1099,
2891         zd.attribute1											attribute1,
2892         zd.attribute10 											attribute10,
2893         zd.attribute11 											attribute11,
2894         zd.attribute12 											attribute12,
2895         zd.attribute13 											attribute13,
2896         zd.attribute14 											attribute14,
2897         zd.attribute15 											attribute15,
2898         zd.attribute2 											attribute2,
2899         zd.attribute3 											attribute3,
2900         zd.attribute4 											attribute4,
2901         zd.attribute5 											attribute5,
2902         zd.attribute6 											attribute6,
2903         zd.attribute7 											attribute7,
2904         zd.attribute8 											attribute8,
2905         zd.attribute9 											attribute9,
2906         zd.attribute_category 										attribute_category,
2907         DECODE(NVL(zd.recoverable_flag, 'N'),
2908          	'Y', NULL,
2909          	'N', nvl(parent_tax_line.expenditure_item_date,parent_taxable_dist.expenditure_item_date))	expenditure_item_date,  /* bug 11076722 modified bug 10155425 */
2910         DECODE(NVL(zd.recoverable_flag, 'N'),
2911          	'Y', NULL,
2912          	'N', nvl(parent_tax_line.expenditure_organization_id,parent_taxable_dist.expenditure_organization_id))		expenditure_organization_id,  /* bug 11076722 modified bug 10155425 */
2913         DECODE(NVL(zd.recoverable_flag, 'N'),
2914 		'Y', NULL,
2915 		'N', nvl(parent_tax_line.expenditure_type,parent_taxable_dist.expenditure_type))	expenditure_type, /* bug 11076722 modified bug 10155425 */
2916         parent_taxable_dist.parent_invoice_id			parent_invoice_id,
2917         DECODE(NVL(zd.recoverable_flag, 'N'),
2918 		'Y', 'E',
2919 		'N', decode(parent_taxable_dist.pa_addition_flag,'Y','N',parent_taxable_dist.pa_addition_flag))	pa_addition_flag, /*bug13106066:Added decode logic*/
2920         DECODE(NVL(zd.recoverable_flag, 'N'),
2921          	'Y', NULL,
2922          	'N', nvl(parent_tax_line.pa_quantity,parent_taxable_dist.pa_quantity))			pa_quantity,  /* bug 11076722 modified bug 10155425 */
2923         DECODE(NVL(zd.recoverable_flag, 'N'),
2924          	'Y', NULL,
2925          	'N', parent_taxable_dist.project_accounting_context)		project_accounting_context,
2926         DECODE(NVL(zd.recoverable_flag, 'N'),
2927 		'Y', NULL,
2928 		'N', nvl(parent_tax_line.project_id,parent_taxable_dist.project_id))			project_id,  /* bug 11076722 modified bug 10155425 */
2929         DECODE(NVL(zd.recoverable_flag, 'N'),
2930          	'Y', NULL,
2931          	'N', nvl(parent_tax_line.task_id,parent_taxable_dist.task_id)) 							task_id,  /* bug 11076722 modified bug 10155425 */
2932         DECODE(NVL(asp.allow_awt_flag, 'N'),
2933                'Y', DECODE(NVL(pvs.allow_awt_flag, 'N'),
2934                       'Y',  DECODE(parent_tax_line.awt_group_id,
2935 				            null,DECODE(NVL(asp.awt_include_tax_amt, 'N'),
2936                                    'Y', DECODE(NVL(zd.inclusive_flag, 'N'),
2937                                           'Y', DECODE(zd.applied_from_tax_dist_id,
2938                                                 null, parent_taxable_dist.awt_group_id,  --Bug8334059
2939                                                 ap_etax_utility_pkg.Get_Prepay_Awt_Group_Id(
2940                                                 parent_taxable_dist.prepay_distribution_id,
2941                                                 P_Calling_Sequence)),
2942                                           'N', parent_taxable_dist.awt_group_id),
2943 								  NULL),
2944 					        parent_tax_line.awt_group_id), --Bug6648050 --bug 9035846  -- bug9117319
2945 									--Bug8334059 --bug9200123
2946                       NULL),
2947                NULL) 								awt_group_id,
2948         zd.global_attribute_category									global_attribute_category,
2949         zd.global_attribute1										global_attribute1,
2950         zd.global_attribute2										global_attribute2,
2951         zd.global_attribute3										global_attribute3,
2952         zd.global_attribute4										global_attribute4,
2953         zd.global_attribute5										global_attribute5,
2954         zd.global_attribute6										global_attribute6,
2955         zd.global_attribute7										global_attribute7,
2956         zd.global_attribute8										global_attribute8,
2957         zd.global_attribute9										global_attribute9,
2958         zd.global_attribute10										global_attribute10,
2959         zd.global_attribute11										global_attribute11,
2960         zd.global_attribute12										global_attribute12,
2961         zd.global_attribute13										global_attribute13,
2962         zd.global_attribute14										global_attribute14,
2963         zd.global_attribute15										global_attribute15,
2964         zd.global_attribute16										global_attribute16,
2965         zd.global_attribute17										global_attribute17,
2966         zd.global_attribute18										global_attribute18,
2967         zd.global_attribute19										global_attribute19,
2968         zd.global_attribute20										global_attribute20,
2969         DECODE(NVL(zd.recoverable_flag, 'N'),
2970 		'Y', NULL,
2971 		'N', nvl( parent_tax_line.award_id,parent_taxable_dist.award_id))			award_id,  /* bug 11076722 modified bug 10155425 */
2972         DECODE(zd.ref_doc_dist_id,
2973           	NULL, DECODE(zl.applied_to_trx_id,
2974 				NULL, 'NOT_MATCHED',
2975 				'OTHER_TO_RECEIPT'),
2976 		'NOT_MATCHED')										dist_match_type,
2977          DECODE(NVL(zd.recoverable_flag, 'N'),
2978          	'Y', NULL,
2979             --Bug 8910531
2980          	'N', parent_taxable_dist.rcv_transaction_id) 						rcv_transaction_id,
2981         zd.recoverable_flag 										tax_recoverable_flag,
2982 	parent_taxable_dist.merchant_document_number                                                    merchant_document_number, --Bug14658408: Start
2983 	parent_taxable_dist.merchant_name                                                               merchant_name,
2984 	parent_taxable_dist.merchant_reference                                                          merchant_reference,
2985 	parent_taxable_dist.merchant_tax_reg_number                                                     merchant_tax_reg_number,
2986 	parent_taxable_dist.merchant_taxpayer_id                                                        merchant_taxpayer_id,  --Bug14658408: End
2987         parent_taxable_dist.cancellation_flag 								cancellation_flag,
2988         DECODE(NVL(zd.inclusive_flag, 'N'),
2989          	'Y', zd.trx_line_id,
2990          	'N', parent_tax_line.line_number) 							invoice_line_number,
2991         parent_taxable_dist.corrected_invoice_dist_id 							corrected_invoice_dist_id,
2992         NULL rounding_amt,
2993         decode(NVL(zl.tax_only_line_flag,'N'),
2994                      'Y', NULL, zd.trx_line_dist_id)							charge_applicable_to_dist_id,
2995         DECODE(zl.ref_doc_trx_id,
2996           	NULL, 'CANDIDATE', 'PERMANENT') 							distribution_class,
2997         zd.tax_rate_id 											tax_code_id,
2998         zd.rec_nrec_tax_dist_id 									detail_tax_dist_id,
2999         zd.rec_nrec_rate 										rec_nrec_rate,
3000         zd.recovery_rate_id 										recovery_rate_id,
3001         zd.recovery_rate_code 										recovery_rate_name,
3002         zd.recovery_type_code 										recovery_type_code,
3003         zd.summary_tax_line_id 										summary_tax_line_id,
3004         NULL 												extra_po_erv,
3005         NULL 												taxable_amount,
3006         NULL 												taxable_base_amount,
3007         pd.accrue_on_receipt_flag 									accrue_on_receipt_flag,
3008         asp.allow_flex_override_flag 									allow_flex_override_flag,
3009         fsp.purch_encumbrance_flag 									purch_encumbrance_flag,
3010         asp.org_id 											org_id,
3011         zd.tax_regime_id 										tax_regime_id,
3012         zd.tax_id 											tax_id,
3013         zd.tax_status_id 										tax_status_id,
3014         zl.tax_jurisdiction_id 										tax_jurisdiction_id,
3015         'N'                                                                                             par_dist_assets_tracking_flag, -- Bug 13821160
3016         parent_taxable_dist.cancellation_flag 								parent_dist_cancellation_flag,
3017         parent_taxable_dist.reversal_flag 								parent_dist_reversal_flag,
3018         parent_taxable_dist.parent_reversal_id 								parent_dist_parent_reversal_id,
3019         zd.reversed_tax_dist_id 									reversed_tax_dist_id,
3020         zd.adjusted_doc_tax_dist_id 									adjusted_doc_tax_dist_id,
3021         zd.applied_from_tax_dist_id  									applied_from_tax_dist_id,
3022         NULL 												prepay_distribution_id,
3023         NULL 												prepay_tax_diff_amount,
3024         ai.invoice_id                                                 invoice_id,
3025         ai.batch_id                                                   batch_id,
3026         ai.set_of_books_id                                            set_of_books_id,
3027 	   DECODE(NVL(asp.allow_awt_flag, 'N'),
3028                'Y', DECODE(NVL(pvs.allow_awt_flag, 'N'),
3029                       'Y', DECODE(parent_tax_line.pay_awt_group_id,
3030 					        NULL, DECODE(NVL(asp.awt_include_tax_amt, 'N'),
3031                                     'Y', DECODE(NVL(zd.inclusive_flag, 'N'),
3032                                            'Y',DECODE(zd.applied_from_tax_dist_id,
3033                                                 null, parent_taxable_dist.pay_awt_group_id,
3034                                                 ap_etax_utility_pkg.Get_Prepay_Pay_Awt_Group_Id(
3035                                                 parent_taxable_dist.prepay_distribution_id,
3036                                                 P_Calling_Sequence)),
3037                                            'N', parent_taxable_dist.pay_awt_group_id),
3038 								   NULL),
3039 					        parent_tax_line.pay_awt_group_id), --Bug6648050 -- bug 9035846 -- bug9117319 --bug9200123
3040                      NULL),
3041                NULL) 								pay_awt_group_id,  --Bug8345264
3042         zd.account_source_tax_rate_id									account_source_tax_rate_id
3043   FROM zx_trx_headers_gt		gt,
3044        zx_rec_nrec_dist                 zd,
3045        zx_lines                         zl,
3046        ap_invoices_all                  ai,
3047        ap_supplier_sites_all            pvs,
3048        ap_system_parameters_all         asp,
3049        financials_system_params_all     fsp,
3050        po_distributions_all             pd,
3051        ap_invoice_lines_all             parent_tax_line,
3052        ap_invoice_lines_all             parent_item_line,
3053        ap_invoice_distributions_all     parent_taxable_dist,
3054        ap_line_temp_gt			dist
3055  WHERE gt.APPLICATION_ID                        = zd.APPLICATION_ID
3056    AND gt.ENTITY_CODE                           = zd.ENTITY_CODE
3057    AND gt.EVENT_CLASS_CODE                      = zd.EVENT_CLASS_CODE
3058    AND gt.TRX_ID                                = zd.TRX_ID
3059    AND zd.tax_line_id                           = zl.tax_line_id
3060    AND gt.trx_id                                = ai.invoice_id
3061    AND ai.vendor_site_id                        = pvs.vendor_site_id
3062    AND ai.set_of_books_id                       = asp.set_of_books_id
3063    AND ai.org_id                                = asp.org_id
3064    AND asp.set_of_books_id                      = fsp.set_of_books_id
3065    AND asp.org_id                               = fsp.org_id
3066    AND NVL(zd.recoverable_flag, 'N')    	= 'N'
3067    AND NVL(zd.self_assessed_flag, 'N')          = 'N'
3068    AND NVL(zl.reporting_only_flag, 'N')         = 'N'
3069    --Bug9777752 Removed Outer join on PD
3070    AND parent_taxable_dist.po_distribution_id   = pd.po_distribution_id
3071    --Bug9777752 Removed Outer join on PD
3072    AND zd.trx_id                                = parent_tax_line.invoice_id(+)
3073    AND zd.summary_tax_line_id                   = parent_tax_line.summary_tax_line_id(+)
3074    AND zd.trx_id                                = parent_item_line.invoice_id(+)
3075    AND zd.trx_line_id                           = parent_item_line.line_number(+)
3076    AND zd.trx_id                                = parent_taxable_dist.invoice_id
3077    AND zd.trx_line_dist_id                      = parent_taxable_dist.invoice_distribution_id
3078       AND ai.invoice_type_lookup_code <> 'PREPAYMENT'                              --Bug11656125
3079    AND parent_item_line.line_type_lookup_code(+) <> 'PREPAY'
3080    AND parent_taxable_dist.line_type_lookup_code <> 'PREPAY'
3081    AND NOT EXISTS
3082       (SELECT aid.detail_tax_dist_id
3083          FROM ap_invoice_distributions_all aid
3084         WHERE aid.invoice_id            = zd.trx_id
3085           AND aid.detail_tax_dist_id    = zd.rec_nrec_tax_dist_id
3086           AND aid.line_type_lookup_code IN ('TIPV', 'TERV', 'TRV'))
3087    AND NOT EXISTS
3088       (SELECT aid.detail_tax_dist_id
3089          FROM ap_invoice_distributions_all aid
3090         WHERE aid.invoice_id            = zd.trx_id
3091           AND aid.detail_tax_dist_id    = zd.rec_nrec_tax_dist_id
3092           AND aid.line_type_lookup_code = 'NONREC_TAX'
3093           AND (NVL(aid.posted_flag,'N') = 'Y' OR
3094                aid.accounting_event_id IS NOT NULL OR
3095                NVL(aid.encumbered_flag,'N') IN ('Y','D','W','X') OR
3096                --Bug7419940 Dont allow any insert from posted / frozen variacnes it should be reversed
3097                NVL(aid.reversal_flag,'N')='Y'))
3098                --Bug8481532 Added Condition To exclude reversed distribuion from getting changed
3099    AND ((dist.line_type =  'TIPV'
3100 	 AND (ap_etax_utility_pkg.get_tipv
3101 		(zd.rate_tax_factor, zd.trx_line_dist_qty,
3102 		 nvl2(parent_taxable_dist.rcv_transaction_id,
3103 			ap_etax_utility_pkg.get_converted_price
3104 			(parent_taxable_dist.invoice_distribution_id), zd.unit_price),
3105 		 zd.ref_doc_unit_price, nvl(zd.ref_per_trx_curr_unit_nr_amt,zd.per_trx_curr_unit_nr_amt),
3106                  zd.price_diff, parent_tax_line.corrected_inv_id, parent_item_line.line_type_lookup_code,   --Bug10416960
3107 		 parent_item_line.line_source, ai.invoice_currency_code, parent_item_line.match_type , zd.trx_line_dist_id ,  --bug10416960
3108 		 zd.ref_per_trx_curr_unit_nr_amt , zd.rec_nrec_tax_dist_id) <> 0
3109 	      or parent_taxable_dist.dist_match_type = 'PRICE_CORRECTION'
3110 	     ))
3111 	OR
3112 	(dist.line_type =  'TRV'
3113 	 and (ap_etax_utility_pkg.get_tv(
3114 			zd.rate_tax_factor, zd.trx_line_dist_qty, zd.per_unit_nrec_tax_amt,
3115 			nvl(zd.ref_doc_per_unit_nrec_tax_amt,0), zd.per_trx_curr_unit_nr_amt,
3116 			zd.ref_per_trx_curr_unit_nr_amt, zd.price_diff, parent_tax_line.corrected_inv_id,
3117 			parent_item_line.line_type_lookup_code, parent_item_line.line_source, ai.invoice_currency_code,  --Bug10416960
3118 			parent_item_line.match_type, zd.unit_price , zd.trx_line_dist_id , zd.ref_doc_unit_price  , zd.rec_nrec_tax_dist_id)
3119             - ap_etax_utility_pkg.get_tipv(
3120 			zd.rate_tax_factor, zd.trx_line_dist_qty,
3121                         nvl2(parent_taxable_dist.rcv_transaction_id,
3122                                 ap_etax_utility_pkg.get_converted_price
3123                                 (parent_taxable_dist.invoice_distribution_id), zd.unit_price),
3124 			zd.ref_doc_unit_price, nvl(zd.ref_per_trx_curr_unit_nr_amt,per_trx_curr_unit_nr_amt),
3125 			zd.price_diff, parent_tax_line.corrected_inv_id, parent_item_line.line_type_lookup_code,  --Bug10416960
3126 			parent_item_line.line_source, ai.invoice_currency_code, parent_item_line.match_type , zd.trx_line_dist_id ,  --Bug10416960
3127 			zd.ref_per_trx_curr_unit_nr_amt , zd.rec_nrec_tax_dist_id)) <> 0)
3128 	OR
3129 	(dist.line_type =  'TERV'
3130 	 AND (ap_etax_utility_pkg.get_terv(
3131 			zd.trx_line_dist_qty, zd.currency_conversion_rate, zd.ref_doc_curr_conv_rate,
3132 			zd.applied_to_doc_curr_conv_rate, NULL, zd.per_unit_nrec_tax_amt,
3133 			nvl(zd.ref_doc_per_unit_nrec_tax_amt,zd.per_unit_nrec_tax_amt),
3134 			parent_tax_line.corrected_inv_id, parent_item_line.line_type_lookup_code,   --Bug10416960
3135 			parent_item_line.line_source, asp.base_currency_code  , zd.trx_line_dist_id , zd.ref_doc_unit_price ,  --Bug10416960
3136 			zd.ref_per_trx_curr_unit_nr_amt , zd.rec_nrec_tax_dist_id, zd.unit_price)) <> 0))      --Bug10416960
3137      -- bug 9231678 removed sign condition
3138   ORDER BY detail_tax_dist_id;
3139 
3140 
3141   CURSOR update_tax_dist IS
3142       SELECT /*+ leading(gt,zd) cardinality(gt,1) */
3143         zd.gl_date accounting_date , --Bug6809792
3144          /*For tax distributions accounting date will be stamped from zx_rec_nrec_dist
3145            Ebtax will now store accounting date of opne period in their table*/
3146         parent_taxable_dist.dist_code_combination_id dist_code_combination_id,
3147         -- this ccid is a temporary value that will be used if other conditions
3148         -- are met before inserting the tax distribution
3149         DECODE(NVL(zd.recoverable_flag, 'N'),
3150          'Y', 'REC_TAX',
3151          'N', 'NONREC_TAX') line_type_lookup_code,
3152         ap_utilities_pkg.get_gl_period_name(zd.gl_date,ai.org_id)	period_name,
3153 -- bug 8317515: modify start
3154         --BUG11656125 START--
3155         DECODE(ai.invoice_type_lookup_code,'PREPAYMENT',zd.rec_nrec_tax_amt,DECODE(parent_item_line.line_type_lookup_code,
3156                'PREPAY', zd.rec_nrec_tax_amt,
3157                decode(parent_taxable_dist.line_type_lookup_code, 'PREPAY', zd.rec_nrec_tax_amt,
3158                decode(nvl(zd.recoverable_flag,'N'),
3159 			  'Y', zd.rec_nrec_tax_amt,
3160 				(NVL(zd.rec_nrec_tax_amt, 0) -
3161                             get_tv(zd.rate_tax_factor, zd.trx_line_dist_qty, zd.per_unit_nrec_tax_amt,
3162 						    nvl(zd.ref_doc_per_unit_nrec_tax_amt,0), zd.per_trx_curr_unit_nr_amt,
3163 						    zd.ref_per_trx_curr_unit_nr_amt, zd.price_diff, parent_tax_line.corrected_inv_id,
3164 						    parent_item_line.line_type_lookup_code, parent_item_line.line_source, ai.invoice_currency_code,  --Bug10416960
3165 						    parent_item_line.match_type, zd.unit_price , zd.trx_line_dist_id , zd.ref_doc_unit_price , zd.rec_nrec_tax_dist_id)))))) amount, -- bug 9231678
3166         ap_utilities_pkg.ap_round_currency(
3167         DECODE(ai.invoice_type_lookup_code,'PREPAYMENT',zd.rec_nrec_tax_amt_funcl_curr,DECODE(parent_item_line.line_type_lookup_code,
3168 		'PREPAY', zd.rec_nrec_tax_amt_funcl_curr,
3169                 decode(parent_taxable_dist.line_type_lookup_code, 'PREPAY', zd.rec_nrec_tax_amt_funcl_curr,
3170                 decode(nvl(zd.recoverable_flag,'N'),
3171 		       'Y', zd.rec_nrec_tax_amt_funcl_curr,
3172 			     (zd.rec_nrec_tax_amt_funcl_curr - --Bug12835115
3173 				    (get_tv_base
3174 					(zd.rate_tax_factor, zd.trx_line_dist_qty, zd.per_unit_nrec_tax_amt, nvl(zd.ref_doc_per_unit_nrec_tax_amt,0),
3175 					 zd.per_trx_curr_unit_nr_amt, zd.ref_per_trx_curr_unit_nr_amt, nvl(zd.currency_conversion_rate, 1),
3176 					 zd.ref_doc_curr_conv_rate, zd.price_diff, parent_tax_line.corrected_inv_id,
3177 					 parent_item_line.line_type_lookup_code, parent_item_line.line_source, asp.base_currency_code,     --Bug10416960
3178 					 parent_item_line.match_type, zd.unit_price , zd.trx_line_dist_id , zd.ref_doc_unit_price , zd.rec_nrec_tax_dist_id)+
3179 				     find_val(zd.trx_line_dist_id)*get_terv
3180 					(zd.trx_line_dist_qty, zd.currency_conversion_rate, zd.ref_doc_curr_conv_rate, zd.applied_to_doc_curr_conv_rate,
3181 					 NULL, zd.per_unit_nrec_tax_amt, nvl(zd.ref_doc_per_unit_nrec_tax_amt,zd.per_unit_nrec_tax_amt),
3182 					 parent_tax_line.corrected_inv_id, parent_item_line.line_type_lookup_code, parent_item_line.line_source, --Bug10416960
3183 					 asp.base_currency_code , zd.trx_line_dist_id , zd.ref_doc_unit_price , zd.ref_per_trx_curr_unit_nr_amt ,
3184 					 zd.rec_nrec_tax_dist_id,zd.unit_price))))))),   --Bug10416960
3185 					 asp.base_currency_code  ) base_amount, -- bug 9231678
3186         --BUG11656125 END--
3187 -- bug 8317515: modify end
3188         -- included the decode as part of the prepayment changes.
3189         -- since for prepayment applic tax variances will not be created,
3190         -- the base_amount should be the total including variances
3191         DECODE(NVL(zd.inclusive_flag, 'N'),
3192          'Y', parent_item_line.description,
3193          'N', parent_tax_line.description) description,
3194         DECODE(NVL(zd.inclusive_flag, 'N'),
3195          'Y', DECODE(parent_item_line.type_1099,
3196                 NULL, NULL,
3197                 parent_item_line.income_tax_region),
3198          'N', DECODE(parent_tax_line.type_1099,
3199                 NULL, NULL,
3200                 parent_tax_line.income_tax_region)) income_tax_region,
3201         DECODE(NVL(zd.inclusive_flag, 'N'),
3202          'Y', parent_item_line.type_1099,
3203          'N', parent_tax_line.type_1099) type_1099,
3204 -- bug 6914575: modify start
3205 -- Populating DFF's from Invoice distributions instead of Tax dists
3206         aid.attribute1 attribute1,
3207         aid.attribute10 attribute10,
3208         aid.attribute11 attribute11,
3209         aid.attribute12 attribute12,
3210         aid.attribute13 attribute13,
3211         aid.attribute14 attribute14,
3212         aid.attribute15 attribute15,
3213         aid.attribute2 attribute2,
3214         aid.attribute3 attribute3,
3215         aid.attribute4 attribute4,
3216         aid.attribute5 attribute5,
3217         aid.attribute6 attribute6,
3218         aid.attribute7 attribute7,
3219         aid.attribute8 attribute8,
3220         aid.attribute9 attribute9,
3221         aid.attribute_category attribute_category,
3222 -- bug 6914575: modify end
3223         DECODE(NVL(zd.recoverable_flag, 'N'),
3224          'Y', NULL,
3225          'N', nvl(parent_tax_line.expenditure_item_date, parent_taxable_dist.expenditure_item_date)) expenditure_item_date,  /* bug 11076722 modified bug 10155425 */
3226         DECODE(NVL(zd.recoverable_flag, 'N'),
3227          'Y', NULL,
3228          'N', nvl(parent_tax_line.expenditure_organization_id,parent_taxable_dist.expenditure_organization_id))
3229            expenditure_organization_id,  /* bug 11076722 modified bug 10155425 */
3230         DECODE(NVL(zd.recoverable_flag, 'N'),
3231          'Y', NULL,
3232          'N', nvl(parent_tax_line.expenditure_type,parent_taxable_dist.expenditure_type)) expenditure_type,  /* bug 11076722 modified bug 10155425 */
3233         parent_taxable_dist.parent_invoice_id parent_invoice_id,
3234         DECODE(NVL(zd.recoverable_flag, 'N'),
3235          'Y', 'E',
3236          'N', parent_taxable_dist.pa_addition_flag) pa_addition_flag,
3237         DECODE(NVL(zd.recoverable_flag, 'N'),
3238          'Y', NULL,
3239          'N', nvl(parent_tax_line.pa_quantity,parent_taxable_dist.pa_quantity)) pa_quantity,  /* bug 11076722 modified bug 10155425 */
3240         DECODE(NVL(zd.recoverable_flag, 'N'),
3241          'Y', NULL,
3242          'N', parent_taxable_dist.project_accounting_context)
3243            project_accounting_context,
3244         DECODE(NVL(zd.recoverable_flag, 'N'),
3245          'Y', NULL,
3246          'N', nvl(parent_tax_line.project_id,parent_taxable_dist.project_id)) project_id,  /* bug 11076722 modified bug 10155425 */
3247         DECODE(NVL(zd.recoverable_flag, 'N'),
3248          'Y', NULL,
3249          'N', nvl(parent_tax_line.task_id,parent_taxable_dist.task_id)) task_id,  /* bug 11076722 modified bug 10155425 */
3250         aid.awt_group_id awt_group_id,
3251 	--Bug6505640 Populating DFF's from Invoice distributions instead of Tax dists
3252         aid.global_attribute_category global_attribute_category,
3253         aid.global_attribute1 global_attribute1,
3254         aid.global_attribute2 global_attribute2,
3255         aid.global_attribute3 global_attribute3,
3256         aid.global_attribute4 global_attribute4,
3257         aid.global_attribute5 global_attribute5,
3258         aid.global_attribute6 global_attribute6,
3259         aid.global_attribute7 global_attribute7,
3260         aid.global_attribute8 global_attribute8,
3261         aid.global_attribute9 global_attribute9,
3262         aid.global_attribute10 global_attribute10,
3263         aid.global_attribute11 global_attribute11,
3264         aid.global_attribute12 global_attribute12,
3265         aid.global_attribute13 global_attribute13,
3266         aid.global_attribute14 global_attribute14,
3267         aid.global_attribute15 global_attribute15,
3268         aid.global_attribute16 global_attribute16,
3269         aid.global_attribute17 global_attribute17,
3270         aid.global_attribute18 global_attribute18,
3271         aid.global_attribute19 global_attribute19,
3272         aid.global_attribute20 global_attribute20,
3273         DECODE(NVL(zd.recoverable_flag, 'N'),
3274          'Y', NULL,
3275          'N', aid.award_id) award_id,  /* bug 10155425  bug 10282701 */
3276         DECODE(zd.ref_doc_dist_id,
3277           NULL, DECODE(zl.applied_to_trx_id,
3278               NULL, 'NOT_MATCHED',
3279               'OTHER_TO_RECEIPT'),
3280           'NOT_MATCHED') dist_match_type,
3281          DECODE(NVL(zd.recoverable_flag, 'N'),
3282          'Y', NULL,
3283          --Bug 8910531
3284          'N', parent_taxable_dist.rcv_transaction_id) rcv_transaction_id,
3285         zd.recoverable_flag tax_recoverable_flag,
3286         parent_taxable_dist.cancellation_flag cancellation_flag,
3287         DECODE(NVL(zd.inclusive_flag, 'N'),
3288          'Y', zd.trx_line_id,
3289          'N', nvl(parent_tax_line.line_number,
3290                   parent_taxable_dist.invoice_line_number)) invoice_line_number,
3291         parent_taxable_dist.corrected_invoice_dist_id corrected_invoice_dist_id,
3292         DECODE(NVL(zd.recoverable_flag, 'N'),
3293           'Y', NULL,
3294           zd.func_curr_rounding_adjustment) rounding_amt,
3295         -- This will update the rounding_amt in the recoverable dist
3296         -- for the non-recoverable the primary distribution will be
3297         -- updated later on
3298         decode(NVL(zl.tax_only_line_flag,'N'),
3299                      'Y', NULL, zd.trx_line_dist_id)	charge_applicable_to_dist_id,
3300         DECODE(zl.ref_doc_trx_id,
3301           NULL, 'CANDIDATE',
3302           'PERMANENT') distribution_class,
3303         zd.tax_rate_id tax_code_id,
3304         zd.rec_nrec_tax_dist_id detail_tax_dist_id,
3305         zd.rec_nrec_rate rec_nrec_rate,
3306         zd.recovery_rate_id recovery_rate_id,
3307         zd.recovery_rate_code recovery_rate_name,
3308         zd.recovery_type_code recovery_type_code,
3309         zd.taxable_amt taxable_amount,
3310         zd.taxable_amt_funcl_curr taxable_base_amount,
3311         zd.summary_tax_line_id summary_tax_line_id,
3312         null extra_po_erv,
3313         -- (zd.applied_to_doc_erv - zx.reference_doc_erv) null extra_po_erv,
3314         DECODE(parent_item_line.line_type_lookup_code,
3315           'PREPAY', DECODE(NVL(zd.recoverable_flag, 'N'),
3316                       'N', (zd.prd_tax_amt - zd.rec_nrec_tax_amt), NULL),
3317           NULL) prepay_tax_diff_amount,
3318         aid.invoice_distribution_id invoice_distribution_id,
3319 		aid.pay_awt_group_id 		pay_awt_group_id,  --bug8345264
3320         zd.account_source_tax_rate_id
3321   FROM  zx_trx_headers_gt		gt,
3322 	    zx_rec_nrec_dist        zd,
3323         zx_lines                zl,
3324 	    ap_invoices_all         ai,
3325         ap_invoice_distributions_all    aid,
3326         ap_supplier_sites_all           pvs,
3327         ap_system_parameters_all        asp,
3328         financials_system_params_all    fsp,
3329         po_distributions_all            pd,
3330         ap_invoice_lines_all            parent_tax_line,
3331         ap_invoice_lines_all            parent_item_line,
3332         ap_invoice_distributions_all    parent_taxable_dist
3333  WHERE  gt.APPLICATION_ID                        = zd.APPLICATION_ID
3334    AND  gt.ENTITY_CODE                           = zd.ENTITY_CODE
3335    AND  gt.EVENT_CLASS_CODE                      = zd.EVENT_CLASS_CODE
3336    AND  gt.TRX_ID                                = zd.TRX_ID
3337    AND  zd.tax_line_id                           = zl.tax_line_id
3338    AND  gt.trx_id                                = ai.invoice_id
3339    AND  ai.invoice_id                            = aid.invoice_id
3340    AND  aid.detail_tax_dist_id                   = zd.rec_nrec_tax_dist_id
3341    AND  aid.line_type_lookup_code                IN ('REC_TAX','NONREC_TAX')
3342    AND  nvl(aid.reversal_flag,'N')               <> 'Y'
3343    AND (NVL(aid.posted_flag,'N') <> 'Y' AND
3344         aid.accounting_event_id IS NULL AND
3345         NVL(aid.encumbered_flag, 'N') NOT IN ('Y','D','W','X')) --Bug7419940 Dont allow any insert from posted / frozen variacnes it should be reversed)
3346    AND  ai.vendor_site_id                        = pvs.vendor_site_id
3347    AND  ai.set_of_books_id                       = asp.set_of_books_id
3348    AND  ai.org_id                                = asp.org_id
3349    AND  asp.set_of_books_id                      = fsp.set_of_books_id
3350    AND  asp.org_id                               = fsp.org_id
3351    AND  parent_taxable_dist.po_distribution_id   = pd.po_distribution_id(+)
3352    AND  zd.trx_id                                = parent_tax_line.invoice_id (+)
3353    AND  zd.summary_tax_line_id                   = parent_tax_line.summary_tax_line_id(+)
3354    AND  zd.trx_id                                = parent_item_line.invoice_id(+)
3355    AND  zd.trx_line_id                           = parent_item_line.line_number(+)
3356    AND  zd.trx_id                                = parent_taxable_dist.invoice_id(+)
3357    AND  zd.trx_line_dist_id                      = parent_taxable_dist.invoice_distribution_id(+);
3358 
3359 
3360   CURSOR update_tax_variances IS
3361 	SELECT /*+ leading(gt,zd) cardinality(gt,1) */
3362 	         zd.gl_date accounting_date , --Bug6809792
3363                  /*For tax distributions accounting date will be stamped from zx_rec_nrec_dist
3364                    Ebtax will now store accounting date of opne period in their table*/
3365                 (CASE aid.line_type_lookup_code
3366                         WHEN 'TERV' THEN
3367                             DECODE(pd.destination_type_code, 'EXPENSE', pd.code_combination_id,
3368                                    parent_taxable_dist.dist_code_combination_id)
3369                         ELSE
3370                             DECODE(pd.destination_type_code, 'EXPENSE',
3371                                       DECODE(pd.accrue_on_receipt_flag, 'Y', pd.code_combination_id,
3372                                              parent_taxable_dist.dist_code_combination_id),
3373                                    pd.variance_account_id)
3374                 END)                                                                                            dist_code_combination_id,
3375 	        (CASE aid.line_type_lookup_code
3376 			WHEN 'TIPV' THEN 'TIPV'
3377 			WHEN 'TERV' THEN 'TERV'
3378 			WHEN 'TRV'  THEN 'TRV'
3379 	        END)												line_type_lookup_code,
3380         	ap_utilities_pkg.get_gl_period_name(zd.gl_date,ai.org_id)					period_name,
3381                (CASE aid.line_type_lookup_code
3382                  WHEN 'TIPV' THEN -- bug 10291717
3383 		                        ap_etax_utility_pkg.get_tipv(
3384    		                          zd.rate_tax_factor, zd.trx_line_dist_qty,
3385 		                          nvl2(parent_taxable_dist.rcv_transaction_id,
3386 		                                ap_etax_utility_pkg.get_converted_price
3387 		                                  (parent_taxable_dist.invoice_distribution_id), zd.unit_price),
3388                                                 zd.ref_doc_unit_price, nvl(zd.ref_per_trx_curr_unit_nr_amt,zd.per_trx_curr_unit_nr_amt),
3389 			                        zd.price_diff, parent_tax_line.corrected_inv_id, parent_item_line.line_type_lookup_code,    --Bug10416960
3390 		                                parent_item_line.line_source, ai.invoice_currency_code, parent_item_line.match_type ,   --Bug10416960
3391 										zd.trx_line_dist_id , zd.ref_per_trx_curr_unit_nr_amt , zd.rec_nrec_tax_dist_id)
3392 		 WHEN 'TRV' THEN
3393 		        (ap_etax_utility_pkg.get_tv(
3394 				zd.rate_tax_factor, zd.trx_line_dist_qty, zd.per_unit_nrec_tax_amt,
3395 				nvl(zd.ref_doc_per_unit_nrec_tax_amt,0), zd.per_trx_curr_unit_nr_amt,
3396 				zd.ref_per_trx_curr_unit_nr_amt, zd.price_diff, parent_tax_line.corrected_inv_id,
3397 				parent_item_line.line_type_lookup_code, parent_item_line.line_source, ai.invoice_currency_code,  --Bug10416960
3398 				parent_item_line.match_type, zd.unit_price , zd.trx_line_dist_id , zd.ref_doc_unit_price , zd.rec_nrec_tax_dist_id) -
3399 		         ap_etax_utility_pkg.get_tipv(
3400 				zd.rate_tax_factor, zd.trx_line_dist_qty,
3401 	                        nvl2(parent_taxable_dist.rcv_transaction_id,
3402 	                                ap_etax_utility_pkg.get_converted_price
3403 	                                (parent_taxable_dist.invoice_distribution_id), zd.unit_price),
3404 				zd.ref_doc_unit_price, nvl(zd.ref_per_trx_curr_unit_nr_amt,per_trx_curr_unit_nr_amt),
3405 				zd.price_diff, parent_tax_line.corrected_inv_id, parent_item_line.line_type_lookup_code,  --Bug10416960
3406 				parent_item_line.line_source, ai.invoice_currency_code, parent_item_line.match_type , zd.trx_line_dist_id , --Bug10416960
3407 				zd.ref_per_trx_curr_unit_nr_amt , zd.rec_nrec_tax_dist_id))
3408 		 WHEN 'TERV' THEN 0
3409 	        END)												amount,
3410 	        (CASE aid.line_type_lookup_code
3411 		 WHEN 'TIPV' THEN
3412 		        ap_utilities_pkg.ap_round_currency(
3413 			ap_etax_utility_pkg.get_tipv_base(
3414 				zd.rate_tax_factor, zd.trx_line_dist_qty,
3415 	                        nvl2(parent_taxable_dist.rcv_transaction_id,
3416 	                                ap_etax_utility_pkg.get_converted_price
3417 	                                (parent_taxable_dist.invoice_distribution_id), zd.unit_price),
3418 				zd.ref_doc_unit_price, nvl(zd.ref_per_trx_curr_unit_nr_amt,zd.per_trx_curr_unit_nr_amt),
3419 				zd.price_diff, zd.currency_conversion_rate, zd.ref_doc_curr_conv_rate, NULL,
3420 				parent_tax_line.corrected_inv_id, parent_item_line.line_type_lookup_code,  --Bug10416960
3421 				parent_item_line.line_source, ai.invoice_currency_code, asp.base_currency_code,  --Bug10416960
3422 				parent_item_line.match_type , zd.trx_line_dist_id , zd.ref_per_trx_curr_unit_nr_amt , zd.rec_nrec_tax_dist_id),
3423 				asp.base_currency_code)
3424 		 WHEN 'TRV' THEN
3425 			ap_utilities_pkg.ap_round_currency(
3426 			(ap_etax_utility_pkg.get_tv_base(
3427 				zd.rate_tax_factor, zd.trx_line_dist_qty, zd.per_unit_nrec_tax_amt,
3428 				nvl(zd.ref_doc_per_unit_nrec_tax_amt,0), zd.per_trx_curr_unit_nr_amt,
3429 				zd.ref_per_trx_curr_unit_nr_amt, nvl(zd.currency_conversion_rate,1),
3430 				zd.ref_doc_curr_conv_rate, zd.price_diff, parent_tax_line.corrected_inv_id,
3431 				parent_item_line.line_type_lookup_code, parent_item_line.line_source, asp.base_currency_code,  --Bug10416960
3432 				parent_item_line.match_type, zd.unit_price , zd.trx_line_dist_id , zd.ref_doc_unit_price , zd.rec_nrec_tax_dist_id)
3433                 - (DECODE(find_val(zd.trx_line_dist_id),0,1,0)*ap_etax_utility_pkg.get_terv(
3434 					zd.trx_line_dist_qty, zd.currency_conversion_rate, zd.ref_doc_curr_conv_rate,
3435 					zd.applied_to_doc_curr_conv_rate, NULL, zd.per_unit_nrec_tax_amt,
3436 					nvl(zd.ref_doc_per_unit_nrec_tax_amt,zd.per_unit_nrec_tax_amt),
3437 					parent_tax_line.corrected_inv_id, parent_item_line.line_type_lookup_code,   --Bug10416960
3438 					parent_item_line.line_source, asp.base_currency_code  , zd.trx_line_dist_id , zd.ref_doc_unit_price ,  --Bug10416960
3439 					zd.ref_per_trx_curr_unit_nr_amt , zd.rec_nrec_tax_dist_id,zd.unit_price))   --Bug10416960
3440                 - ap_etax_utility_pkg.get_tipv_base(
3441 				zd.rate_tax_factor, zd.trx_line_dist_qty,
3442 	                        nvl2(parent_taxable_dist.rcv_transaction_id,
3443 	                                ap_etax_utility_pkg.get_converted_price
3444 	                                (parent_taxable_dist.invoice_distribution_id), zd.unit_price),
3445 				zd.ref_doc_unit_price, nvl(zd.ref_per_trx_curr_unit_nr_amt,zd.per_trx_curr_unit_nr_amt),
3446 				zd.price_diff, zd.currency_conversion_rate, zd.ref_doc_curr_conv_rate, NULL,
3447 				parent_tax_line.corrected_inv_id, parent_item_line.line_type_lookup_code,       --Bug10416960
3448 				parent_item_line.line_source, ai.invoice_currency_code, asp.base_currency_code,  --Bug10416960
3449 				parent_item_line.match_type , zd.trx_line_dist_id , zd.ref_per_trx_curr_unit_nr_amt , zd.rec_nrec_tax_dist_id)),
3450 				asp.base_currency_code) -- bug 9231678
3451 		 WHEN 'TERV' THEN
3452 			ap_utilities_pkg.ap_round_currency
3453 			(ap_etax_utility_pkg.get_terv(
3454 					zd.trx_line_dist_qty, zd.currency_conversion_rate, zd.ref_doc_curr_conv_rate,
3455 					zd.applied_to_doc_curr_conv_rate, NULL, zd.per_unit_nrec_tax_amt,
3456 					nvl(zd.ref_doc_per_unit_nrec_tax_amt,zd.per_unit_nrec_tax_amt),
3457 					parent_tax_line.corrected_inv_id, parent_item_line.line_type_lookup_code,  --Bug10416960
3458 					parent_item_line.line_source, asp.base_currency_code  , zd.trx_line_dist_id , zd.ref_doc_unit_price ,  --Bug10416960
3459 					zd.ref_per_trx_curr_unit_nr_amt , zd.rec_nrec_tax_dist_id,zd.unit_price), asp.base_currency_code)    --Bug10416960
3460 	        END)												base_amount,
3461 	        DECODE(NVL(zd.inclusive_flag, 'N'),
3462 			'Y', parent_item_line.description,
3463 			'N', parent_tax_line.description) 							description,
3464 	        DECODE(NVL(zd.inclusive_flag, 'N'),
3465 			'Y', DECODE(parent_item_line.type_1099, NULL, NULL,
3466 					parent_item_line.income_tax_region),
3467 			'N', DECODE(parent_tax_line.type_1099, NULL, NULL,
3468 					parent_tax_line.income_tax_region))					income_tax_region,
3469 	        DECODE(NVL(zd.inclusive_flag, 'N'),
3470 			'Y', parent_item_line.type_1099,
3471 			'N', parent_tax_line.type_1099)								type_1099,
3472  	        --Bug9346774
3473                 aid.attribute1											attribute1,
3474 	        aid.attribute10											attribute10,
3475 	        aid.attribute11											attribute11,
3476 	        aid.attribute12											attribute12,
3477 	        aid.attribute13											attribute13,
3478 	        aid.attribute14											attribute14,
3479 	        aid.attribute15											attribute15,
3480 	        aid.attribute2 											attribute2,
3481 	        aid.attribute3 											attribute3,
3482 	        aid.attribute4 											attribute4,
3483 	        aid.attribute5 											attribute5,
3484 	        aid.attribute6 											attribute6,
3485 	        aid.attribute7 											attribute7,
3486 	        aid.attribute8 											attribute8,
3487 	        aid.attribute9 											attribute9,
3488 	        aid.attribute_category 										attribute_category,
3489                 --Bug9346774
3490 	        DECODE(NVL(zd.recoverable_flag, 'N'),
3491 			'Y', NULL, 'N', nvl(parent_tax_line.expenditure_item_date, parent_taxable_dist.expenditure_item_date)) 	expenditure_item_date,  /* bug 11076722 modified bug 10155425 */
3492 	        DECODE(NVL(zd.recoverable_flag, 'N'),
3493 			'Y', NULL, 'N', nvl(parent_tax_line.expenditure_organization_id,parent_taxable_dist.expenditure_organization_id)) expenditure_organization_id,  /* bug 11076722 modified bug 10155425 */
3494 	        DECODE(NVL(zd.recoverable_flag, 'N'),
3495 			'Y', NULL, 'N', nvl(parent_tax_line.expenditure_type,parent_taxable_dist.expenditure_type)) 	expenditure_type,  /* bug 11076722 modified bug 10155425 */
3496 	        parent_taxable_dist.parent_invoice_id	parent_invoice_id,
3497 	        DECODE(NVL(zd.recoverable_flag, 'N'),
3498 			'Y', 'E', 'N', parent_taxable_dist.pa_addition_flag) pa_addition_flag,
3499 	        DECODE(NVL(zd.recoverable_flag, 'N'),
3500 			'Y', NULL, 'N', nvl(parent_tax_line.pa_quantity,parent_taxable_dist.pa_quantity))	pa_quantity,  /* bug 11076722 modified bug 10155425 */
3501 	        DECODE(NVL(zd.recoverable_flag, 'N'),
3502 			'Y', NULL, 'N', parent_taxable_dist.project_accounting_context) 	project_accounting_context,
3503 	        DECODE(NVL(zd.recoverable_flag, 'N'),
3504 			'Y', NULL, 'N', nvl(parent_tax_line.project_id,parent_taxable_dist.project_id))		project_id,  /* bug 11076722 modified bug 10155425 */
3505 	        DECODE(NVL(zd.recoverable_flag, 'N'),
3506 			'Y', NULL, 'N', nvl(parent_tax_line.task_id,parent_taxable_dist.task_id))		task_id,  /* bug 11076722 modified bug 10155425 */
3507 	        aid.awt_group_id 										awt_group_id,
3508                 --Bug9346774
3509 	        aid.global_attribute_category								global_attribute_category,
3510                 aid.global_attribute1                                             	 	                global_attribute1,
3511 	        aid.global_attribute2										global_attribute2,
3512 	        aid.global_attribute3										global_attribute3,
3513 	        aid.global_attribute4										global_attribute4,
3514 	        aid.global_attribute5										global_attribute5,
3515 	        aid.global_attribute6										global_attribute6,
3516 	        aid.global_attribute7										global_attribute7,
3517 	        aid.global_attribute8										global_attribute8,
3518 	        aid.global_attribute9										global_attribute9,
3519 	        aid.global_attribute10										global_attribute10,
3520 	        aid.global_attribute11										global_attribute11,
3521 	        aid.global_attribute12										global_attribute12,
3522 	        aid.global_attribute13										global_attribute13,
3523 	        aid.global_attribute14										global_attribute14,
3524 	        aid.global_attribute15										global_attribute15,
3525 	        aid.global_attribute16										global_attribute16,
3526 	        aid.global_attribute17										global_attribute17,
3527 	        aid.global_attribute18										global_attribute18,
3528 	        aid.global_attribute19										global_attribute19,
3529 	        aid.global_attribute20										global_attribute20,
3530                 --Bug9346774
3531 	        DECODE(NVL(zd.recoverable_flag, 'N'),
3532 			'Y', NULL, 'N', aid.award_id)		award_id,  /* bug 10155425  bug 10282701 */
3533 	        DECODE(zd.ref_doc_dist_id,
3534 			NULL, DECODE(zl.applied_to_trx_id,
3535 				NULL, 'NOT_MATCHED', 'OTHER_TO_RECEIPT'), 'NOT_MATCHED')			dist_match_type,
3536 	        DECODE(NVL(zd.recoverable_flag, 'N'),
3537             --Bug 8910531
3538 				'Y', NULL, 'N', parent_taxable_dist.rcv_transaction_id) 				rcv_transaction_id,
3539 	        zd.recoverable_flag										tax_recoverable_flag,
3540 	        parent_taxable_dist.cancellation_flag 								cancellation_flag,
3541 	        DECODE(NVL(zd.inclusive_flag, 'N'),
3542 				'Y', zd.trx_line_id, 'N', parent_tax_line.line_number)				invoice_line_number,
3543 	        parent_taxable_dist.corrected_invoice_dist_id							corrected_invoice_dist_id,
3544 	        NULL 												rounding_amt,
3545 	        decode(NVL(zl.tax_only_line_flag,'N'),
3546                          'Y', NULL, zd.trx_line_dist_id)							charge_applicable_to_dist_id,
3547 	        DECODE(zl.ref_doc_trx_id, NULL, 'CANDIDATE', 'PERMANENT') 					distribution_class,
3548 	        zd.tax_rate_id 											tax_code_id,
3549 	        zd.rec_nrec_tax_dist_id 									detail_tax_dist_id,
3550 	        zd.rec_nrec_rate 										rec_nrec_rate,
3551 	        zd.recovery_rate_id 										recovery_rate_id,
3552 	        zd.recovery_rate_code 										recovery_rate_name,
3553 	        zd.recovery_type_code 										recovery_type_code,
3554 	        NULL 												taxable_amount,
3555 	        NULL 												taxable_base_amount,
3556 	        zd.summary_tax_line_id 										summary_tax_line_id,
3557 	        NULL 												extra_po_erv,
3558 	        NULL 												prepay_tax_diff_amount,
3559 	        aid.invoice_distribution_id 									invoice_distribution_id,
3560 			aid.pay_awt_group_id 											pay_awt_group_id, --Bug8345264
3561 		    zd.account_source_tax_rate_id									account_source_tax_rate_id
3562            FROM zx_trx_headers_gt               gt,
3563 	        zx_rec_nrec_dist                zd,
3564 	        zx_lines                        zl,
3565 	        ap_invoices_all                 ai,
3566 	        ap_invoice_distributions_all    aid,
3567 	        ap_supplier_sites_all           pvs,
3568 	        ap_system_parameters_all        asp,
3569 	        financials_system_params_all    fsp,
3570 	        po_distributions_all            pd,
3571 	        ap_invoice_lines_all            parent_tax_line,
3572 	        ap_invoice_lines_all            parent_item_line,
3573 	        ap_invoice_distributions_all    parent_taxable_dist
3574 	 WHERE  gt.APPLICATION_ID                        = zd.APPLICATION_ID
3575 	   AND  gt.ENTITY_CODE                           = zd.ENTITY_CODE
3576 	   AND  gt.EVENT_CLASS_CODE                      = zd.EVENT_CLASS_CODE
3577 	   AND  gt.TRX_ID                                = zd.TRX_ID
3578 	   AND  zd.tax_line_id                           = zl.tax_line_id
3579 	   AND  gt.trx_id                                = ai.invoice_id
3580 	   AND  ai.invoice_id                            = aid.invoice_id
3581 	   AND  aid.detail_tax_dist_id                   = zd.rec_nrec_tax_dist_id
3582 	   AND  aid.line_type_lookup_code                IN ('TIPV', 'TRV', 'TERV')
3583        AND  nvl(aid.reversal_flag,'N')               <> 'Y'
3584        AND (NVL(aid.posted_flag,'N') <> 'Y' AND
3585             aid.accounting_event_id IS NULL AND
3586             NVL(aid.encumbered_flag, 'N') NOT IN ('Y','D','W','X')) --Bug7419940 Dont allow any insert from posted / frozen variacnes it should be reversed)
3587  	   AND  ai.vendor_site_id                        = pvs.vendor_site_id
3588 	   AND  ai.set_of_books_id                       = asp.set_of_books_id
3589 	   AND  ai.org_id                                = asp.org_id
3590 	   AND  asp.set_of_books_id                      = fsp.set_of_books_id
3591 	   AND  asp.org_id                               = fsp.org_id
3592 	   AND  parent_taxable_dist.po_distribution_id   = pd.po_distribution_id(+)
3593 	   AND  zd.trx_id                                = parent_tax_line.invoice_id (+)
3594 	   AND  zd.summary_tax_line_id                   = parent_tax_line.summary_tax_line_id(+)
3595 	   AND  zd.trx_id                                = parent_item_line.invoice_id(+)
3596 	   AND  zd.trx_line_id                           = parent_item_line.line_number(+)
3597 	   AND  zd.trx_id                                = parent_taxable_dist.invoice_id(+)
3598 	   AND  zd.trx_line_dist_id                      = parent_taxable_dist.invoice_distribution_id(+)
3599        AND  ai.invoice_type_lookup_code <> 'PREPAYMENT'   --BUG11656125
3600 	   AND  parent_item_line.line_type_lookup_code(+) <> 'PREPAY';
3601       -- bug 9231678 removed sign condition
3602 
3603   -- Cursors for self assessed distributions
3604   CURSOR insert_tax_self IS
3605       SELECT /*+ leading(gt,zd) cardinality(gt,1) INDEX (ZD ZX_REC_NREC_DIST_U3) */
3606         zd.gl_date accounting_date , --Bug6809792
3607         /*For tax distributions accounting date will be stamped from zx_rec_nrec_dist
3608           Ebtax will now store accounting date of opne period in their table*/
3609          -- Modified dist_code_combination_id value for bug#Bug9437885
3610         --DECODE(pd.accrue_on_receipt_flag, 'Y', pd.code_combination_id,parent_taxable_dist.dist_code_combination_id) dist_code_combination_id,
3611 	DECODE(pd.destination_type_code,
3612 	       'EXPENSE',DECODE(pd.accrue_on_receipt_flag, 'Y', pd.code_combination_id,parent_taxable_dist.dist_code_combination_id),
3613 	       'INVENTORY',pd.variance_account_id,
3614 	       'SHOP FLOOR',pd.variance_account_id, --Bug16003410
3615                parent_taxable_dist.dist_code_combination_id) dist_code_combination_id,	/*Bug13084462: Modified bug 9437885 to use variance account on self assess tax for invoice matched to PO for inventory items*/
3616         -- this ccid is a temporary value that will be used if other conditions
3617         -- are met before inserting the tax distribution
3618         DECODE(NVL(zd.recoverable_flag, 'N'),
3619          'Y', 'REC_TAX',
3620          'N', 'NONREC_TAX') line_type_lookup_code,
3621         ap_utilities_pkg.get_gl_period_name(zd.gl_date,ai.org_id)	period_name,
3622         zd.rec_nrec_tax_amt amount,
3623         ap_utilities_pkg.ap_round_currency
3624                 (zd.rec_nrec_tax_amt_funcl_curr,asp.base_currency_code) base_amount,
3625 	parent_item_line.description description,
3626 	DECODE(parent_item_line.type_1099,
3627                 NULL, NULL,
3628                 parent_item_line.income_tax_region) income_tax_region,
3629        parent_taxable_dist.po_distribution_id po_distribution_id,  --changed for bug 8713009
3630 	parent_item_line.type_1099 type_1099,
3631         zd.attribute1 attribute1,
3632         zd.attribute10 attribute10,
3633         zd.attribute11 attribute11,
3634         zd.attribute12 attribute12,
3635         zd.attribute13 attribute13,
3636         zd.attribute14 attribute14,
3637         zd.attribute15 attribute15,
3638         zd.attribute2 attribute2,
3639         zd.attribute3 attribute3,
3640         zd.attribute4 attribute4,
3641         zd.attribute5 attribute5,
3642         zd.attribute6 attribute6,
3643         zd.attribute7 attribute7,
3644         zd.attribute8 attribute8,
3645         zd.attribute9 attribute9,
3646         zd.attribute_category attribute_category,
3647         DECODE(NVL(zd.recoverable_flag, 'N'),
3648          'Y', NULL,
3649          'N', parent_taxable_dist.expenditure_item_date) expenditure_item_date,
3650         DECODE(NVL(zd.recoverable_flag, 'N'),
3651          'Y', NULL,
3652          'N', parent_taxable_dist.expenditure_organization_id)
3653            expenditure_organization_id,
3654         DECODE(NVL(zd.recoverable_flag, 'N'),
3655          'Y', NULL,
3656          'N', parent_taxable_dist.expenditure_type) expenditure_type,
3657         parent_taxable_dist.parent_invoice_id parent_invoice_id,
3658         DECODE(NVL(zd.recoverable_flag, 'N'),
3659          'Y', 'E',
3660          'N', 'N') pa_addition_flag, /* Bug 13594870 */
3661 /*         'N', decode(parent_taxable_dist.pa_addition_flag,'Y','N',parent_taxable_dist.pa_addition_flag)) pa_addition_flag, Bug 13106066:added decode logic*/
3662         DECODE(NVL(zd.recoverable_flag, 'N'),
3663          'Y', NULL,
3664          'N', parent_taxable_dist.pa_quantity) pa_quantity,
3665         DECODE(NVL(zd.recoverable_flag, 'N'),
3666          'Y', NULL,
3667          'N', parent_taxable_dist.project_accounting_context)
3668            project_accounting_context,
3669         DECODE(NVL(zd.recoverable_flag, 'N'),
3670          'Y', NULL,
3671          'N', parent_taxable_dist.project_id) project_id,
3672         DECODE(NVL(zd.recoverable_flag, 'N'),
3673          'Y', NULL,
3674          'N', parent_taxable_dist.task_id) task_id,
3675         DECODE(NVL(asp.allow_awt_flag, 'N'),
3676                'Y', DECODE(NVL(pvs.allow_awt_flag, 'N'),
3677                       'Y', DECODE(NVL(asp.awt_include_tax_amt, 'N'),
3678                              'Y', DECODE(NVL(zd.inclusive_flag, 'N'),
3679                                     'Y', DECODE(zd.applied_from_tax_dist_id,
3680                                            null, parent_taxable_dist.awt_group_id, --Bug8334059
3681                                            ap_etax_utility_pkg.Get_Prepay_Awt_Group_Id(
3682                                              parent_taxable_dist.prepay_distribution_id,
3683                                              P_Calling_Sequence)),
3684                                     'N', parent_taxable_dist.awt_group_id),
3685                              NULL),
3686                       NULL),
3687                NULL) awt_group_id,
3688         zd.global_attribute_category global_attribute_category,
3689         zd.global_attribute1 global_attribute1,
3690         zd.global_attribute2 global_attribute2,
3691         zd.global_attribute3 global_attribute3,
3692         zd.global_attribute4 global_attribute4,
3693         zd.global_attribute5 global_attribute5,
3694         zd.global_attribute6 global_attribute6,
3695         zd.global_attribute7 global_attribute7,
3696         zd.global_attribute8 global_attribute8,
3697         zd.global_attribute9 global_attribute9,
3698         zd.global_attribute10 global_attribute10,
3699         zd.global_attribute11 global_attribute11,
3700         zd.global_attribute12 global_attribute12,
3701         zd.global_attribute13 global_attribute13,
3702         zd.global_attribute14 global_attribute14,
3703         zd.global_attribute15 global_attribute15,
3704         zd.global_attribute16 global_attribute16,
3705         zd.global_attribute17 global_attribute17,
3706         zd.global_attribute18 global_attribute18,
3707         zd.global_attribute19 global_attribute19,
3708         zd.global_attribute20 global_attribute20,
3709         DECODE(NVL(zd.recoverable_flag, 'N'),
3710          'Y', NULL,
3711          'N', parent_taxable_dist.award_id) award_id,
3712         DECODE(zd.ref_doc_dist_id,
3713           NULL, DECODE(zl.applied_to_trx_id,
3714               NULL, 'NOT_MATCHED',
3715               'OTHER_TO_RECEIPT'),
3716           'NOT_MATCHED') dist_match_type,
3717          DECODE(NVL(zd.recoverable_flag, 'N'),
3718          'Y', NULL,
3719          --Bug 8910531
3720          'N', parent_taxable_dist.rcv_transaction_id) rcv_transaction_id,
3721         zd.recoverable_flag tax_recoverable_flag,
3722 	parent_taxable_dist.merchant_document_number      merchant_document_number, --Bug14658408: Start
3723 	parent_taxable_dist.merchant_name                 merchant_name,
3724 	parent_taxable_dist.merchant_reference            merchant_reference,
3725 	parent_taxable_dist.merchant_tax_reg_number       merchant_tax_reg_number,
3726 	parent_taxable_dist.merchant_taxpayer_id          merchant_taxpayer_id,  --Bug14658408: End
3727         parent_taxable_dist.cancellation_flag cancellation_flag,
3728 	zd.trx_line_id invoice_line_number,
3729         parent_taxable_dist.corrected_invoice_dist_id corrected_invoice_dist_id,
3730         DECODE(NVL(zd.recoverable_flag, 'N'),
3731           'Y', NULL,
3732           zd.func_curr_rounding_adjustment) rounding_amt,
3733         -- the rounding amount in the non-recoverable case will be populated
3734         -- to the primary distribution later in the cycle.
3735         decode(NVL(zl.tax_only_line_flag,'N'),
3736                      'Y', NULL, zd.trx_line_dist_id) charge_applicable_to_dist_id,
3737         DECODE(zl.ref_doc_trx_id,
3738           NULL, 'CANDIDATE',
3739           'PERMANENT') distribution_class,
3740         zd.tax_rate_id tax_code_id,
3741         zd.rec_nrec_tax_dist_id detail_tax_dist_id,
3742         zd.rec_nrec_rate rec_nrec_rate,
3743         zd.recovery_rate_id recovery_rate_id,
3744         zd.recovery_rate_code recovery_rate_name,
3745         zd.recovery_type_code recovery_type_code,
3746         zd.summary_tax_line_id summary_tax_line_id,
3747         null extra_po_erv,
3748         zd.taxable_amt taxable_amount,
3749         zd.taxable_amt_funcl_curr taxable_base_amount,
3750         pd.accrue_on_receipt_flag accrue_on_receipt_flag,
3751         asp.allow_flex_override_flag allow_flex_override_flag,
3752         fsp.purch_encumbrance_flag purch_encumbrance_flag,
3753         asp.org_id org_id,
3754         zd.tax_regime_id tax_regime_id,
3755         zd.tax_id tax_id,
3756         zd.tax_status_id tax_status_id,
3757         zl.tax_jurisdiction_id tax_jurisdiction_id,
3758         'N',  -- Bug 13821160
3759         parent_taxable_dist.cancellation_flag parent_dist_cancellation_flag,
3760         parent_taxable_dist.reversal_flag parent_dist_reversal_flag,
3761         parent_taxable_dist.parent_reversal_id parent_dist_parent_reversal_id,
3762         zd.reversed_tax_dist_id reversed_tax_dist_id,
3763         zd.adjusted_doc_tax_dist_id adjusted_doc_tax_dist_id,
3764         zd.applied_from_tax_dist_id applied_from_tax_dist_id,
3765         -- the prepay_distribution_id will be populated with
3766         -- invoice_distribution_id for the TAX rec or nonrec
3767         -- asociated
3768         DECODE(parent_item_line.line_type_lookup_code,
3769                'PREPAY',
3770                AP_ETAX_UTILITY_PKG.Get_Dist_Id_For_Tax_Dist_Id(
3771                  zd.applied_from_tax_dist_id),
3772                NULL) prepay_distribution_id,
3773         DECODE(parent_item_line.line_type_lookup_code,
3774                'PREPAY', DECODE(NVL(zd.recoverable_flag, 'N'),
3775                            'N', (zd.prd_tax_amt - zd.rec_nrec_tax_amt), NULL),
3776                NULL) prepay_tax_diff_amount,
3777        ai.invoice_id     	invoice_id,
3778        ai.batch_id              batch_id,
3779        ai.set_of_books_id       set_of_books_id,
3780 	   parent_taxable_dist.pay_awt_group_id        pay_awt_group_id, --Bug8345264
3781        zd.account_source_tax_rate_id	account_source_tax_rate_id
3782   FROM zx_trx_headers_gt                gt,
3783        zx_rec_nrec_dist                 zd,
3784        zx_lines                         zl,
3785        ap_invoices_all                  ai,
3786        ap_supplier_sites_all            pvs,
3787        ap_system_parameters_all         asp,
3788        financials_system_params_all     fsp,
3789        po_distributions_all             pd,
3790        ap_invoice_lines_all             parent_item_line,
3791        ap_invoice_distributions_all     parent_taxable_dist
3792  WHERE gt.APPLICATION_ID                        = zd.APPLICATION_ID
3793    AND gt.ENTITY_CODE                           = zd.ENTITY_CODE
3794    AND gt.EVENT_CLASS_CODE                      = zd.EVENT_CLASS_CODE
3795    AND gt.TRX_ID                                = zd.TRX_ID
3796    AND zd.tax_line_id                           = zl.tax_line_id
3797    AND gt.trx_id                                = ai.invoice_id
3798    AND ai.vendor_site_id                        = pvs.vendor_site_id
3799    AND ai.set_of_books_id                       = asp.set_of_books_id
3800    AND ai.org_id                                = asp.org_id
3801    AND asp.set_of_books_id                      = fsp.set_of_books_id
3802    AND asp.org_id                               = fsp.org_id
3803    AND NVL(zd.self_assessed_flag,  'N')         = 'Y'
3804    AND NVL(zl.reporting_only_flag, 'N')         = 'N'
3805    AND parent_taxable_dist.po_distribution_id   = pd.po_distribution_id(+)
3806    AND zd.trx_id                                = parent_item_line.invoice_id(+)
3807    AND zd.trx_line_id                           = parent_item_line.line_number(+)
3808    AND zd.trx_id                                = parent_taxable_dist.invoice_id(+)
3809    AND zd.trx_line_dist_id                      = parent_taxable_dist.invoice_distribution_id(+)
3810    AND NOT EXISTS
3811       (SELECT aid.detail_tax_dist_id
3812          FROM ap_self_assessed_tax_dist_all aid
3813         WHERE aid.invoice_id            = ai.invoice_id
3814           AND aid.detail_tax_dist_id    = zd.rec_nrec_tax_dist_id
3815           AND aid.line_type_lookup_code IN ('REC_TAX','NONREC_TAX'))
3816    -- Bug 7462582
3817    -- Reverting the fixes done in bugs 6805527 and 7389822 as Etax bug 7515711 will take care of these fixes.
3818    /* Added by schitlap, epajaril to fix the issue in Bug 6805527 */
3819    /*AND (nvl(parent_taxable_dist.reversal_flag, 'N') <> 'Y'
3820         OR zd.reversed_tax_dist_id IS NULL) -- 7389822*/
3821   ORDER BY detail_tax_dist_id;
3822 
3823 
3824   CURSOR update_tax_self IS
3825       SELECT /*+ leading(gt,zd) cardinality(gt,1) */
3826         zd.gl_date accounting_date , --Bug6809792
3827         /*For tax distributions accounting date will be stamped from zx_rec_nrec_dist
3828           Ebtax will now store accounting date of opne period in their table*/
3829         aid.dist_code_combination_id dist_code_combination_id,  --9437885
3830         -- this ccid is a temporary value that will be used if other conditions
3831         -- are met before inserting the tax distribution
3832         DECODE(NVL(zd.recoverable_flag, 'N'),
3833          'Y', 'REC_TAX',
3834          'N', 'NONREC_TAX') line_type_lookup_code,
3835         ap_utilities_pkg.get_gl_period_name(zd.gl_date,ai.org_id)	period_name,
3836 	zd.rec_nrec_tax_amt amount,
3837         ap_utilities_pkg.ap_round_currency
3838 		(zd.rec_nrec_tax_amt_funcl_curr,asp.base_currency_code) base_amount,
3839         -- included the decode as part of the prepayment changes.
3840         -- since for prepayment applic tax variances will not be created,
3841         -- the base_amount should be the total including variances
3842         DECODE(NVL(zd.inclusive_flag, 'N'),
3843          'Y', parent_item_line.description,
3844          'N', parent_tax_line.description) description,
3845         DECODE(NVL(zd.inclusive_flag, 'N'),
3846          'Y', DECODE(parent_item_line.type_1099,
3847                 NULL, NULL,
3848                 parent_item_line.income_tax_region),
3849          'N', DECODE(parent_tax_line.type_1099,
3850                 NULL, NULL,
3851                 parent_tax_line.income_tax_region)) income_tax_region,
3852         DECODE(NVL(zd.inclusive_flag, 'N'),
3853          'Y', parent_item_line.type_1099,
3854          'N', parent_tax_line.type_1099) type_1099,
3855         --Bug9346774
3856         aid.attribute1                                                                 attribute1,
3857         aid.attribute10                                                                attribute10,
3858         aid.attribute11                                                                attribute11,
3859         aid.attribute12                                                                attribute12,
3860         aid.attribute13                                                                attribute13,
3861         aid.attribute14                                                                attribute14,
3862         aid.attribute15                                                                attribute15,
3863         aid.attribute2                                                                 attribute2,
3864         aid.attribute3                                                                 attribute3,
3865         aid.attribute4                                                                 attribute4,
3866         aid.attribute5                                                                 attribute5,
3867         aid.attribute6                                                                 attribute6,
3868         aid.attribute7                                                                 attribute7,
3869         aid.attribute8                                                                 attribute8,
3870         aid.attribute9                                                                 attribute9,
3871         aid.attribute_category                                                         attribute_category,
3872         --Bug9346774
3873         DECODE(NVL(zd.recoverable_flag, 'N'),
3874          'Y', NULL,
3875          'N', parent_taxable_dist.expenditure_item_date) expenditure_item_date,
3876         DECODE(NVL(zd.recoverable_flag, 'N'),
3877          'Y', NULL,
3878          'N', parent_taxable_dist.expenditure_organization_id)
3879            expenditure_organization_id,
3880         DECODE(NVL(zd.recoverable_flag, 'N'),
3881          'Y', NULL,
3882          'N', parent_taxable_dist.expenditure_type) expenditure_type,
3883         parent_taxable_dist.parent_invoice_id parent_invoice_id,
3884         DECODE(NVL(zd.recoverable_flag, 'N'),
3885          'Y', 'E',
3886          'N', parent_taxable_dist.pa_addition_flag) pa_addition_flag,
3887         DECODE(NVL(zd.recoverable_flag, 'N'),
3888          'Y', NULL,
3889          'N', parent_taxable_dist.pa_quantity) pa_quantity,
3890         DECODE(NVL(zd.recoverable_flag, 'N'),
3891          'Y', NULL,
3892          'N', parent_taxable_dist.project_accounting_context)
3893            project_accounting_context,
3894         DECODE(NVL(zd.recoverable_flag, 'N'),
3895          'Y', NULL,
3896          'N', parent_taxable_dist.project_id) project_id,
3897         DECODE(NVL(zd.recoverable_flag, 'N'),
3898          'Y', NULL,
3899          'N', parent_taxable_dist.task_id) task_id,
3900         DECODE(NVL(asp.allow_awt_flag, 'N'),
3901                'Y', DECODE(NVL(pvs.allow_awt_flag, 'N'),
3902                       'Y', DECODE(NVL(asp.awt_include_tax_amt, 'N'),
3903                              'Y', DECODE(NVL(zd.inclusive_flag, 'N'),
3904                                     'Y', DECODE(zd.applied_from_tax_dist_id,
3905                                            null, parent_taxable_dist.awt_group_id,  --Bug8334059
3906                                            ap_etax_utility_pkg.Get_Prepay_Awt_Group_Id(
3907                                              parent_taxable_dist.prepay_distribution_id,
3908                                              P_Calling_Sequence)),
3909                                     'N', parent_taxable_dist.awt_group_id),
3910                              NULL),
3911                       NULL),
3912                NULL) awt_group_id,
3913         --Bug9346774
3914         aid.global_attribute_category                                                           global_attribute_category,
3915         aid.global_attribute1                                                                   global_attribute1,
3916         aid.global_attribute2                                                                   global_attribute2,
3917         aid.global_attribute3                                                                   global_attribute3,
3918         aid.global_attribute4                                                                   global_attribute4,
3919         aid.global_attribute5                                                                   global_attribute5,
3920         aid.global_attribute6                                                                   global_attribute6,
3921         aid.global_attribute7                                                                   global_attribute7,
3922         aid.global_attribute8                                                                   global_attribute8,
3923         aid.global_attribute9                                                                   global_attribute9,
3924         aid.global_attribute10                                                                  global_attribute10,
3925         aid.global_attribute11                                                                  global_attribute11,
3926         aid.global_attribute12                                                                  global_attribute12,
3927         aid.global_attribute13                                                                  global_attribute13,
3928         aid.global_attribute14                                                                  global_attribute14,
3929         aid.global_attribute15                                                                  global_attribute15,
3930         aid.global_attribute16                                                                  global_attribute16,
3931         aid.global_attribute17                                                                  global_attribute17,
3932         aid.global_attribute18                                                                  global_attribute18,
3933         aid.global_attribute19                                                                  global_attribute19,
3934         aid.global_attribute20                                                                  global_attribute20,
3935         --Bug9346774
3936         DECODE(NVL(zd.recoverable_flag, 'N'),
3937          'Y', NULL,
3938          'N', parent_taxable_dist.award_id) award_id,
3939         DECODE(zd.ref_doc_dist_id,
3940           NULL, DECODE(zl.applied_to_trx_id,
3941               NULL, 'NOT_MATCHED',
3942               'OTHER_TO_RECEIPT'),
3943           'NOT_MATCHED') dist_match_type,
3944          DECODE(NVL(zd.recoverable_flag, 'N'),
3945          'Y', NULL,
3946          --Bug 8910531
3947          'N', parent_taxable_dist.rcv_transaction_id) rcv_transaction_id,
3948         zd.recoverable_flag tax_recoverable_flag,
3949         parent_taxable_dist.cancellation_flag cancellation_flag,
3950         zd.trx_line_id invoice_line_number,          --Bug13859326
3951         parent_taxable_dist.corrected_invoice_dist_id corrected_invoice_dist_id,
3952         DECODE(NVL(zd.recoverable_flag, 'N'),
3953           'Y', NULL,
3954           zd.func_curr_rounding_adjustment) rounding_amt,
3955         -- This will update the rounding_amt in the recoverable dist
3956         -- for the non-recoverable the primary distribution will be
3957         -- updated later on
3958         decode(NVL(zl.tax_only_line_flag,'N'),
3959                      'Y', NULL, zd.trx_line_dist_id) charge_applicable_to_dist_id,
3960         DECODE(zl.ref_doc_trx_id,
3961           NULL, 'CANDIDATE',
3962           'PERMANENT') distribution_class,
3963         zd.tax_rate_id tax_code_id,
3964         zd.rec_nrec_tax_dist_id detail_tax_dist_id,
3965         zd.rec_nrec_rate rec_nrec_rate,
3966         zd.recovery_rate_id recovery_rate_id,
3967         zd.recovery_rate_code recovery_rate_name,
3968         zd.recovery_type_code recovery_type_code,
3969         zd.taxable_amt taxable_amount,
3970         zd.taxable_amt_funcl_curr taxable_base_amount,
3971         zd.summary_tax_line_id summary_tax_line_id,
3972         null extra_po_erv,
3973         -- (zd.applied_to_doc_erv - zx.reference_doc_erv) null extra_po_erv,
3974         DECODE(parent_item_line.line_type_lookup_code,
3975           'PREPAY', DECODE(NVL(zd.recoverable_flag, 'N'),
3976                       'N', (zd.prd_tax_amt - zd.rec_nrec_tax_amt), NULL),
3977           NULL) prepay_tax_diff_amount,
3978         aid.invoice_distribution_id invoice_distribution_id,
3979 		parent_taxable_dist.pay_awt_group_id        pay_awt_group_id,   --Bug8345264
3980         zd.account_source_tax_rate_id
3981   FROM  zx_trx_headers_gt               gt,
3982         zx_rec_nrec_dist                zd,
3983         zx_lines                        zl,
3984         ap_invoices_all                 ai,
3985         ap_self_assessed_tax_dist_all	aid,
3986         ap_supplier_sites_all           pvs,
3987         ap_system_parameters_all        asp,
3988         financials_system_params_all    fsp,
3989         po_distributions_all            pd,
3990         ap_invoice_lines_all            parent_tax_line,
3991         ap_invoice_lines_all            parent_item_line,
3992         ap_invoice_distributions_all    parent_taxable_dist
3993  WHERE  gt.APPLICATION_ID                        = zd.APPLICATION_ID
3994    AND  gt.ENTITY_CODE                           = zd.ENTITY_CODE
3995    AND  gt.EVENT_CLASS_CODE                      = zd.EVENT_CLASS_CODE
3996    AND  gt.TRX_ID                                = zd.TRX_ID
3997    AND  zd.tax_line_id                           = zl.tax_line_id
3998    AND  gt.trx_id                                = ai.invoice_id
3999    AND  ai.invoice_id                            = aid.invoice_id
4000    AND  aid.detail_tax_dist_id                   = zd.rec_nrec_tax_dist_id
4001    AND  aid.line_type_lookup_code                IN ('REC_TAX','NONREC_TAX')
4002    AND  nvl(aid.reversal_flag,'N')               <> 'Y'
4003    AND  ai.vendor_site_id                        = pvs.vendor_site_id
4004    AND  ai.set_of_books_id                       = asp.set_of_books_id
4005    AND  ai.org_id                                = asp.org_id
4006    AND  asp.set_of_books_id                      = fsp.set_of_books_id
4007    AND  asp.org_id                               = fsp.org_id
4008    AND  parent_taxable_dist.po_distribution_id   = pd.po_distribution_id(+)
4009    AND  zd.trx_id                                = parent_tax_line.invoice_id (+)
4010    AND  zd.summary_tax_line_id                   = parent_tax_line.summary_tax_line_id(+)
4011    AND  zd.trx_id                                = parent_item_line.invoice_id(+)
4012    AND  zd.trx_line_id                           = parent_item_line.line_number(+)
4013    AND  zd.trx_id                                = parent_taxable_dist.invoice_id(+)
4014    AND  zd.trx_line_dist_id                      = parent_taxable_dist.invoice_distribution_id(+);
4015 
4016 
4017   l_dist_code_combination_id	ap_invoice_distributions_all.dist_code_combination_id%TYPE;
4018   l_allow_pa_override		VARCHAR2(1);
4019 
4020   -- Variables for the eTax API to get the default ccids
4021 
4022   l_return_status_service       VARCHAR2(4000);
4023   l_msg_count                   NUMBER;
4024   l_msg_data                    VARCHAR2(4000);
4025   l_tax_liab_ccid		ap_invoice_distributions_all.dist_code_combination_id%TYPE;
4026 
4027   l_trx_id			NUMBER;
4028   l_trx_line_id			NUMBER;
4029   l_trx_line_dist_id		NUMBER;
4030   l_summary_tax_line_id		NUMBER;
4031   l_rec_nrec_tax_dist_id	NUMBER;
4032   l_tax_line_id			NUMBER;
4033   l_application_id		NUMBER;
4034 
4035   l_self_assessed_flag		VARCHAR2(20);
4036   l_recoverable_flag		VARCHAR2(20);
4037   l_reporting_only_flag		VARCHAR2(20);
4038 
4039   l_first 			NUMBER;
4040   l_last			NUMBER;
4041 
4042   l_tax_only_line_flag          VARCHAR2(1);  --bug12728634
4043   l_pa_success   BOOLEAN;   --bug12728634
4044   p_ccid  AP_INVOICE_DISTRIBUTIONS_ALL.DIST_CODE_COMBINATION_ID%TYPE; --bug12728634
4045   l_pa_called                      VARCHAR2(1):='N'; --bug12728634
4046 
4047 
4048   -- Project LCM 7588322
4049   l_lcm_enabled                   VARCHAR2(1) := 'N';
4050   l_rcv_transaction_id            NUMBER;
4051   l_lcm_account_id                NUMBER;
4052   l_tax_variance_account_id       NUMBER;
4053   l_def_charges_account_id        NUMBER;
4054   l_exchange_variance_account_id  NUMBER;
4055   l_inv_variance_account_id       NUMBER;
4056 
4057    --bug 10621602 starts Added the below two variables
4058 
4059   l_par_line_type_lookup_code       VARCHAR2(30);
4060   l_par_retained_invoice_dist_id    NUMBER;
4061 
4062    --bug 10621602 ends
4063 
4064   TYPE LineList IS TABLE OF VARCHAR2(25);
4065   linetype  LineList := LineList('TIPV', 'TRV', 'TERV');
4066 
4067   l_err varchar2(2000); --bug10140354
4068 
4069   BEGIN
4070 
4071     l_curr_calling_sequence := 'AP_ETAX_UTILITY_PKG.Return_Tax_Distributions<-'||
4072                                P_calling_sequence;
4073 
4074     IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
4075         FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'AP_ETAX_UTILITY_PKG.Return_Tax_Distributions(+)');
4076     END IF;
4077 
4078     DELETE FROM AP_Line_Temp_GT;
4079 
4080     FORALL i IN linetype.FIRST..linetype.LAST
4081 	INSERT INTO AP_Line_Temp_GT (Line_Type)
4082 	VALUES (linetype(i));
4083 
4084     -------------------------------------------------------------------
4085     l_debug_info := 'Get profile option info';
4086     IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
4087         FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
4088     END IF;
4089     -------------------------------------------------------------------
4090 
4091     l_allow_pa_override := FND_PROFILE.VALUE('PA_ALLOW_FLEXBUILDER_OVERRIDES');
4092 
4093     -------------------------------------------------------------------
4094     l_debug_info := 'Get tax distributions for update';
4095     IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
4096         FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
4097     END IF;
4098     -------------------------------------------------------------------
4099     OPEN UPDATE_TAX_DIST;
4100     LOOP
4101         FETCH UPDATE_TAX_DIST
4102          BULK COLLECT INTO L_INV_DIST_UPD
4103         LIMIT AP_ETAX_PKG.G_BATCH_LIMIT;
4104 
4105         EXIT WHEN UPDATE_TAX_DIST%NOTFOUND
4106                   AND L_INV_DIST_UPD.COUNT <= 0;
4107 
4108 	-------------------------------------------------------------------
4109 	l_debug_info := 'Tax distributions updated: '||l_inv_dist_upd.count;
4110 	-------------------------------------------------------------------
4111 	IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4112 	    FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
4113 	END IF;
4114 
4115 	IF (l_inv_dist_upd.COUNT <> 0) THEN
4116 
4117 	    FOR j IN l_inv_dist_upd.FIRST..l_inv_dist_upd.LAST LOOP
4118 
4119             -------------------------------------------------------------------
4120             l_debug_info := ' Excl. Tax New Line Number: '||
4121             l_inv_dist_upd(j).invoice_line_number
4122             ||' '||'Excl Tax dist Id: '||l_inv_dist_upd(j).invoice_distribution_id
4123             ||' '||'Detail Tax Dist Id: '||l_inv_dist_upd(j).detail_tax_dist_id;
4124             -------------------------------------------------------------------
4125     	    IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4126       	       FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
4127     	    END IF;
4128 
4129             /*
4130                 --bug 10621602 starts
4131 		    IF  AP_ETAX_SERVICES_PKG.ret_dists.exists(l_inv_dist_ins(i).charge_applicable_to_dist_id) THEN
4132 		     IF ( AP_ETAX_SERVICES_PKG.ret_dists(l_inv_dist_upd(j).charge_applicable_to_dist_id).RETAINED_INVOICE_DIST_ID IS NOT NULL) THEN
4133 
4134                IF  l_inv_dist_upd(j).line_type_lookup_code = 'NONREC_TAX' THEN
4135 
4136                    l_inv_dist_upd(j).pa_addition_flag := 'N'; --Make the pa_addition flag N for retainage tax distributions.
4137 
4138                END IF;
4139 		     END IF;
4140             END IF;
4141                    --bug 10621602 ends
4142             */ --Update flow should not update pa_addition_flag
4143 	         UPDATE ap_invoice_distributions_all
4144 	          SET 	accounting_date 		= l_inv_dist_upd(j).accounting_date,
4145 			        last_updated_by 		= l_user_id,
4146 	            	last_update_date 		= sysdate, /*Bug10101457: replaced l_sysdate with sysdate*/
4147 	            	line_type_lookup_code 	= l_inv_dist_upd(j).line_type_lookup_code,
4148 	            	period_name 			= l_inv_dist_upd(j).period_name,
4149 	            	amount 				= l_inv_dist_upd(j).amount,
4150 	            	base_amount 			= l_inv_dist_upd(j).base_amount, -- bug 10350068
4151 	            	-- Bug 10157751 description 			= l_inv_dist_upd(j).description,
4152 -- Bug 13880392       	income_tax_region 		= l_inv_dist_upd(j).income_tax_region,
4153 	            	last_update_login 		= l_login_id,
4154 -- Bug 13880392       	type_1099 			= l_inv_dist_upd(j).type_1099,
4155 	            	attribute1 			= l_inv_dist_upd(j).attribute1,
4156 	            	attribute10 			= l_inv_dist_upd(j).attribute10,
4157 	            	attribute11 			= l_inv_dist_upd(j).attribute11,
4158 	            	attribute12 			= l_inv_dist_upd(j).attribute12,
4159 	            	attribute13 			= l_inv_dist_upd(j).attribute13,
4160 	            	attribute14 			= l_inv_dist_upd(j).attribute14,
4161 	            	attribute15 			= l_inv_dist_upd(j).attribute15,
4162 	            	attribute2 			= l_inv_dist_upd(j).attribute2,
4163 	            	attribute3 			= l_inv_dist_upd(j).attribute3,
4164 	            	attribute4 			= l_inv_dist_upd(j).attribute4,
4165 	            	attribute5 			= l_inv_dist_upd(j).attribute5,
4166 	            	attribute6 			= l_inv_dist_upd(j).attribute6,
4167 	            	attribute7 			= l_inv_dist_upd(j).attribute7,
4168 	            	attribute8 			= l_inv_dist_upd(j).attribute8,
4169 	            	attribute9 			= l_inv_dist_upd(j).attribute9,
4170 	            	attribute_category 		= l_inv_dist_upd(j).attribute_category,
4171 	            	expenditure_item_date 		= l_inv_dist_upd(j).expenditure_item_date,
4172 	            	expenditure_organization_id 	= l_inv_dist_upd(j).expenditure_organization_id,
4173 	            	expenditure_type 		= l_inv_dist_upd(j).expenditure_type,
4174 	            	parent_invoice_id 		= l_inv_dist_upd(j).parent_invoice_id,
4175 	            	pa_addition_flag 		= pa_addition_flag,                               --Bug10621602
4176 	            	pa_quantity 			= l_inv_dist_upd(j).pa_quantity,
4177 	            	project_accounting_context 	= l_inv_dist_upd(j).project_accounting_context,
4178 	            	project_id 			= l_inv_dist_upd(j).project_id,
4179 	            	task_id 			= l_inv_dist_upd(j).task_id,
4180 	            	awt_group_id 			= l_inv_dist_upd(j).awt_group_id,
4181 	            	global_attribute_category 	= l_inv_dist_upd(j).global_attribute_category,
4182 	            	global_attribute1 		= l_inv_dist_upd(j).global_attribute1,
4183 	            	global_attribute2 		= l_inv_dist_upd(j).global_attribute2,
4184 	            	global_attribute3 		= l_inv_dist_upd(j).global_attribute3,
4185 	            	global_attribute4 		= l_inv_dist_upd(j).global_attribute4,
4186 	            	global_attribute5 		= l_inv_dist_upd(j).global_attribute5,
4187 	            	global_attribute6 		= l_inv_dist_upd(j).global_attribute6,
4188 	            	global_attribute7 		= l_inv_dist_upd(j).global_attribute7,
4189 	            	global_attribute8 		= l_inv_dist_upd(j).global_attribute8,
4190 	            	global_attribute9 		= l_inv_dist_upd(j).global_attribute9,
4191 	            	global_attribute10 		= l_inv_dist_upd(j).global_attribute10,
4192 	            	global_attribute11 		= l_inv_dist_upd(j).global_attribute11,
4193 	            	global_attribute12 		= l_inv_dist_upd(j).global_attribute12,
4194 	            	global_attribute13 		= l_inv_dist_upd(j).global_attribute13,
4195 	            	global_attribute14 		= l_inv_dist_upd(j).global_attribute14,
4196 	            	global_attribute15 		= l_inv_dist_upd(j).global_attribute15,
4197 	            	global_attribute16 		= l_inv_dist_upd(j).global_attribute16,
4198 	            	global_attribute17 		= l_inv_dist_upd(j).global_attribute17,
4199 	            	global_attribute18 		= l_inv_dist_upd(j).global_attribute18,
4200 	            	global_attribute19 		= l_inv_dist_upd(j).global_attribute19,
4201 	            	global_attribute20 		= l_inv_dist_upd(j).global_attribute20,
4202 	            	award_id 			= l_inv_dist_upd(j).award_id,
4203 	            	dist_match_type 		= l_inv_dist_upd(j).dist_match_type,
4204 	            	rcv_transaction_id 		= l_inv_dist_upd(j).rcv_transaction_id,
4205 	            	tax_recoverable_flag 		= l_inv_dist_upd(j).tax_recoverable_flag,
4206 	            	cancellation_flag 		= l_inv_dist_upd(j).cancellation_flag,
4207 	            	--invoice_line_number 		= l_inv_dist_upd(j).invoice_line_number,
4208         	    	corrected_invoice_dist_id 	= l_inv_dist_upd(j).corrected_invoice_dist_id,
4209 	            	rounding_amt 			= l_inv_dist_upd(j).rounding_amt,
4210 	            	charge_applicable_to_dist_id 	= l_inv_dist_upd(j).charge_applicable_to_dist_id,
4211 	            	--distribution_class 		= l_inv_dist_upd(j).distribution_class,    --Bug6678578
4212 	            	tax_code_id 			= l_inv_dist_upd(j).tax_code_id,
4213 	            	detail_tax_dist_id 		= l_inv_dist_upd(j).detail_tax_dist_id,
4214 	            	rec_nrec_rate 			= l_inv_dist_upd(j).rec_nrec_rate,
4215 	            	recovery_rate_id 		= l_inv_dist_upd(j).recovery_rate_id,
4216 	            	recovery_rate_name 		= l_inv_dist_upd(j).recovery_rate_name,
4217 	            	recovery_type_code 		= l_inv_dist_upd(j).recovery_type_code,
4218 	            	taxable_amount 			= l_inv_dist_upd(j).taxable_amount,
4219 	            	taxable_base_amount 	= l_inv_dist_upd(j).taxable_base_amount,
4220 	            	summary_tax_line_id 	= l_inv_dist_upd(j).summary_tax_line_id,
4221 	            	extra_po_erv 			= l_inv_dist_upd(j).extra_po_erv,
4222 	            	prepay_tax_diff_amount 	= l_inv_dist_upd(j).prepay_tax_diff_amount,
4223 			        match_status_flag		= decode (amount, l_inv_dist_upd(j).amount,
4224 									                  match_status_flag, 'N')
4225 	          WHERE invoice_distribution_id = l_inv_dist_upd(j).invoice_distribution_id;
4226 
4227               	-------------------------------------------------------------------
4228 	            l_debug_info := 'Tax dist id updated: '||l_inv_dist_upd(j).invoice_distribution_id||
4229                                 ' Tax Detail Tax Dist Id: '||l_inv_dist_upd(j).detail_tax_dist_id||
4230                                 ' Summary Tax Line Id: '||l_inv_dist_upd(j).summary_tax_line_id||
4231                                 ' Amt: '||l_inv_dist_upd(j).amount||
4232                                 ' Base Amt: '||l_inv_dist_upd(j).base_amount;
4233 
4234 	            IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4235 	               FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
4236 	            END IF;
4237 	            -------------------------------------------------------------------
4238 
4239              END LOOP;
4240              L_INV_DIST_UPD.DELETE;
4241          END IF;
4242     END LOOP;
4243     CLOSE UPDATE_TAX_DIST;
4244 
4245 
4246     -------------------------------------------------------------------
4247     l_debug_info := 'Get tax variance distributions for update';
4248     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4249 	    FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
4250 	END IF;
4251     -------------------------------------------------------------------
4252 
4253     OPEN UPDATE_TAX_VARIANCES;
4254     LOOP
4255         FETCH UPDATE_TAX_VARIANCES
4256          BULK COLLECT INTO L_INV_DIST_UPD
4257         LIMIT AP_ETAX_PKG.G_BATCH_LIMIT;
4258 
4259         EXIT WHEN UPDATE_TAX_VARIANCES%NOTFOUND
4260                   AND L_INV_DIST_UPD.COUNT <= 0;
4261 
4262 	-------------------------------------------------------------------
4263 	l_debug_info := 'Tax Variance distributions updated: '||l_inv_dist_upd.count;
4264 	-------------------------------------------------------------------
4265 	IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4266 	    FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
4267 	END IF;
4268 
4269 	IF (l_inv_dist_upd.COUNT <> 0) THEN
4270 
4271 	    FOR j IN l_inv_dist_upd.FIRST..l_inv_dist_upd.LAST LOOP
4272 
4273             -------------------------------------------------------------------
4274             l_debug_info := 'Tax Variance New Line Number: '||
4275             l_inv_dist_upd(j).invoice_line_number
4276             ||' '||'Tax Variance dist Id: '||l_inv_dist_upd(j).invoice_distribution_id
4277             ||' '||'Detail Tax Dist Id: '||l_inv_dist_upd(j).detail_tax_dist_id;
4278             -------------------------------------------------------------------
4279     	    IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4280       	       FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
4281     	    END IF;
4282 
4283            /*
4284 	       --bug 10621602 starts
4285 		    IF AP_ETAX_SERVICES_PKG.ret_dists.exists(l_inv_dist_ins(i).charge_applicable_to_dist_id) THEN
4286 		     IF ( AP_ETAX_SERVICES_PKG.ret_dists(l_inv_dist_upd(j).charge_applicable_to_dist_id).RETAINED_INVOICE_DIST_ID IS NOT NULL) THEN
4287 
4288 			    l_inv_dist_upd(j).pa_addition_flag := 'N'; --Make the pa_addition flag N for retainage tax distributions.
4289 
4290 		     END IF;
4291             END IF;
4292                    --bug 10621602 ends
4293             */
4294 	         UPDATE ap_invoice_distributions_all
4295 	          SET 	accounting_date 		= l_inv_dist_upd(j).accounting_date,
4296 			        last_updated_by 		= l_user_id,
4297 	            	last_update_date 		= sysdate, /*Bug10101457: replaced l_sysdate with sysdate*/
4298 	            	line_type_lookup_code 		= l_inv_dist_upd(j).line_type_lookup_code,
4299 	            	period_name 			= l_inv_dist_upd(j).period_name,
4300 	            	amount 				= l_inv_dist_upd(j).amount,
4301 	            	base_amount 			= l_inv_dist_upd(j).base_amount, -- bug 10350068
4302 	            	-- Bug 10157751 description 			= l_inv_dist_upd(j).description,
4303 -- Bug 13880392        	income_tax_region 		= l_inv_dist_upd(j).income_tax_region,
4304 	            	last_update_login 		= l_login_id,
4305 -- Bug 13880392       	type_1099 			= l_inv_dist_upd(j).type_1099,
4306 	            	attribute1 			= l_inv_dist_upd(j).attribute1,
4307 	            	attribute10 			= l_inv_dist_upd(j).attribute10,
4308 	            	attribute11 			= l_inv_dist_upd(j).attribute11,
4309 	            	attribute12 			= l_inv_dist_upd(j).attribute12,
4310 	            	attribute13 			= l_inv_dist_upd(j).attribute13,
4311 	            	attribute14 			= l_inv_dist_upd(j).attribute14,
4312 	            	attribute15 			= l_inv_dist_upd(j).attribute15,
4313 	            	attribute2 			= l_inv_dist_upd(j).attribute2,
4314 	            	attribute3 			= l_inv_dist_upd(j).attribute3,
4315 	            	attribute4 			= l_inv_dist_upd(j).attribute4,
4316 	            	attribute5 			= l_inv_dist_upd(j).attribute5,
4317 	            	attribute6 			= l_inv_dist_upd(j).attribute6,
4318 	            	attribute7 			= l_inv_dist_upd(j).attribute7,
4319 	            	attribute8 			= l_inv_dist_upd(j).attribute8,
4320 	            	attribute9 			= l_inv_dist_upd(j).attribute9,
4321 	            	attribute_category 		= l_inv_dist_upd(j).attribute_category,
4322 	            	expenditure_item_date 		= l_inv_dist_upd(j).expenditure_item_date,
4323 	            	expenditure_organization_id 	= l_inv_dist_upd(j).expenditure_organization_id,
4324 	            	expenditure_type 		= l_inv_dist_upd(j).expenditure_type,
4325 	            	parent_invoice_id 		= l_inv_dist_upd(j).parent_invoice_id,
4326 	            	pa_addition_flag 		= pa_addition_flag,   --Bug10621602
4327 	            	pa_quantity 			= l_inv_dist_upd(j).pa_quantity,
4328 	            	project_accounting_context 	= l_inv_dist_upd(j).project_accounting_context,
4329 	            	project_id 			= l_inv_dist_upd(j).project_id,
4330 	            	task_id 			= l_inv_dist_upd(j).task_id,
4331 	            	awt_group_id 			= l_inv_dist_upd(j).awt_group_id,
4332 	            	global_attribute_category 	= l_inv_dist_upd(j).global_attribute_category,
4333 	            	global_attribute1 		= l_inv_dist_upd(j).global_attribute1,
4334 	            	global_attribute2 		= l_inv_dist_upd(j).global_attribute2,
4335 	            	global_attribute3 		= l_inv_dist_upd(j).global_attribute3,
4336 	            	global_attribute4 		= l_inv_dist_upd(j).global_attribute4,
4337 	            	global_attribute5 		= l_inv_dist_upd(j).global_attribute5,
4338 	            	global_attribute6 		= l_inv_dist_upd(j).global_attribute6,
4339 	            	global_attribute7 		= l_inv_dist_upd(j).global_attribute7,
4340 	            	global_attribute8 		= l_inv_dist_upd(j).global_attribute8,
4341 	            	global_attribute9 		= l_inv_dist_upd(j).global_attribute9,
4342 	            	global_attribute10 		= l_inv_dist_upd(j).global_attribute10,
4343 	            	global_attribute11 		= l_inv_dist_upd(j).global_attribute11,
4344 	            	global_attribute12 		= l_inv_dist_upd(j).global_attribute12,
4345 	            	global_attribute13 		= l_inv_dist_upd(j).global_attribute13,
4346 	            	global_attribute14 		= l_inv_dist_upd(j).global_attribute14,
4347 	            	global_attribute15 		= l_inv_dist_upd(j).global_attribute15,
4348 	            	global_attribute16 		= l_inv_dist_upd(j).global_attribute16,
4349 	            	global_attribute17 		= l_inv_dist_upd(j).global_attribute17,
4350 	            	global_attribute18 		= l_inv_dist_upd(j).global_attribute18,
4351 	            	global_attribute19 		= l_inv_dist_upd(j).global_attribute19,
4352 	            	global_attribute20 		= l_inv_dist_upd(j).global_attribute20,
4353 	            	award_id 			= l_inv_dist_upd(j).award_id,
4354 	            	dist_match_type 		= l_inv_dist_upd(j).dist_match_type,
4355 	            	rcv_transaction_id 		= l_inv_dist_upd(j).rcv_transaction_id,
4356 	            	tax_recoverable_flag 		= l_inv_dist_upd(j).tax_recoverable_flag,
4357 	            	cancellation_flag 		= l_inv_dist_upd(j).cancellation_flag,
4358 	            	--invoice_line_number 		= l_inv_dist_upd(j).invoice_line_number,
4359         	    	corrected_invoice_dist_id 	= l_inv_dist_upd(j).corrected_invoice_dist_id,
4360 	            	rounding_amt 			= l_inv_dist_upd(j).rounding_amt,
4361 	            	charge_applicable_to_dist_id 	= l_inv_dist_upd(j).charge_applicable_to_dist_id,
4362 	            	--distribution_class 		= l_inv_dist_upd(j).distribution_class, --Bug6678578
4363 	            	tax_code_id 			= l_inv_dist_upd(j).tax_code_id,
4364 	            	detail_tax_dist_id 		= l_inv_dist_upd(j).detail_tax_dist_id,
4365 	            	rec_nrec_rate 			= l_inv_dist_upd(j).rec_nrec_rate,
4366 	            	recovery_rate_id 		= l_inv_dist_upd(j).recovery_rate_id,
4367 	            	recovery_rate_name 		= l_inv_dist_upd(j).recovery_rate_name,
4368 	            	recovery_type_code 		= l_inv_dist_upd(j).recovery_type_code,
4369 	            	taxable_amount 			= l_inv_dist_upd(j).taxable_amount,
4370 	            	taxable_base_amount 	= l_inv_dist_upd(j).taxable_base_amount,
4371 	            	summary_tax_line_id 	= l_inv_dist_upd(j).summary_tax_line_id,
4372 	            	extra_po_erv 			= l_inv_dist_upd(j).extra_po_erv,
4373 	            	prepay_tax_diff_amount 	= l_inv_dist_upd(j).prepay_tax_diff_amount,
4374                     match_status_flag       = decode (amount, l_inv_dist_upd(j).amount,
4375                                                       match_status_flag, 'N')
4376 	          WHERE invoice_distribution_id = l_inv_dist_upd(j).invoice_distribution_id;
4377 
4378                 -------------------------------------------------------------------
4379 	            l_debug_info := 'Tax dist id updated: '||l_inv_dist_upd(j).invoice_distribution_id||
4380                                 ' Tax Detail Tax Dist Id: '||l_inv_dist_upd(j).detail_tax_dist_id||
4381                                 ' Summary Tax Line Id: '||l_inv_dist_upd(j).summary_tax_line_id||
4382                                 ' Amt: '||l_inv_dist_upd(j).amount||
4383                                 ' Base Amt: '||l_inv_dist_upd(j).base_amount;
4384 
4385 	            IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4386 	               FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
4387 	            END IF;
4388 	            -------------------------------------------------------------------
4389 
4390              END LOOP;
4391              L_INV_DIST_UPD.DELETE;
4392          END IF;
4393     END LOOP;
4394     CLOSE UPDATE_TAX_VARIANCES;
4395 
4396 
4397     -------------------------------------------------------------------
4398     l_debug_info := 'Step 5: Get tax distributions for update';
4399     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4400 	   FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
4401 	END IF;
4402     -------------------------------------------------------------------
4403 
4404     OPEN UPDATE_TAX_SELF;
4405     LOOP
4406         FETCH UPDATE_TAX_SELF
4407          BULK COLLECT INTO L_INV_SELF_UPD
4408         LIMIT AP_ETAX_PKG.G_BATCH_LIMIT;
4409 
4410         EXIT WHEN UPDATE_TAX_SELF%NOTFOUND
4411                   AND l_inv_self_upd.COUNT <= 0;  --Bug13859326
4412 
4413 	    -------------------------------------------------------------------
4414     	l_debug_info := 'Step 5: Self assessed dist updated: '||l_inv_self_upd.COUNT;
4415     	-------------------------------------------------------------------
4416     	IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4417       	    FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
4418     	END IF;
4419 
4420     	IF (l_inv_self_upd.COUNT <> 0) THEN
4421 
4422       	    FOR j IN l_inv_self_upd.FIRST..l_inv_self_upd.LAST LOOP
4423 
4424             -------------------------------------------------------------------
4425     	    l_debug_info := 'Self Assessed New Line Number: '||l_inv_self_upd(j).invoice_line_number
4426             ||' '||'Self assessed dist Id: '||l_inv_self_upd(j).invoice_distribution_id
4427             ||' '||'Detail Tax Dist Id: '||l_inv_self_upd(j).detail_tax_dist_id;
4428     	    -------------------------------------------------------------------
4429     	    IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4430       	       FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
4431     	    END IF;
4432 
4433 	        UPDATE ap_self_assessed_tax_dist_all
4434 	        SET accounting_date 		= l_inv_self_upd(j).accounting_date,
4435 		        last_updated_by 		= l_user_id,
4436 	            last_update_date 		= sysdate, /*Bug10101457: replaced l_sysdate with sysdate*/
4437 	            line_type_lookup_code 	= l_inv_self_upd(j).line_type_lookup_code,
4438 	            period_name 		= l_inv_self_upd(j).period_name,
4439 	            amount 			= l_inv_self_upd(j).amount,
4440 	            base_amount 		= l_inv_self_upd(j).base_amount, -- bug 10350068
4441 	            -- Bug 10157751 description 		= l_inv_self_upd(j).description,
4442                     income_tax_region 	= l_inv_self_upd(j).income_tax_region,
4443 	            last_update_login 	= l_login_id,
4444                     type_1099 			= l_inv_self_upd(j).type_1099,
4445 	            attribute1 			= l_inv_self_upd(j).attribute1,
4446 	            attribute10 		= l_inv_self_upd(j).attribute10,
4447 	            attribute11 		= l_inv_self_upd(j).attribute11,
4448 	            attribute12 		= l_inv_self_upd(j).attribute12,
4449 	            attribute13 		= l_inv_self_upd(j).attribute13,
4450 	            attribute14 		= l_inv_self_upd(j).attribute14,
4451 	            attribute15 		= l_inv_self_upd(j).attribute15,
4452 	            attribute2 			= l_inv_self_upd(j).attribute2,
4453 	            attribute3 			= l_inv_self_upd(j).attribute3,
4454 	            attribute4 			= l_inv_self_upd(j).attribute4,
4455 	            attribute5 			= l_inv_self_upd(j).attribute5,
4456 	            attribute6 			= l_inv_self_upd(j).attribute6,
4457 	            attribute7 			= l_inv_self_upd(j).attribute7,
4458 	            attribute8 			= l_inv_self_upd(j).attribute8,
4459 	            attribute9 			= l_inv_self_upd(j).attribute9,
4460 	            attribute_category 		= l_inv_self_upd(j).attribute_category,
4461 	            expenditure_item_date 	= l_inv_self_upd(j).expenditure_item_date,
4462 	            expenditure_organization_id = l_inv_self_upd(j).expenditure_organization_id,
4463 	            expenditure_type 		= l_inv_self_upd(j).expenditure_type,
4464 	            parent_invoice_id 		= l_inv_self_upd(j).parent_invoice_id,
4465 	            pa_addition_flag 		= pa_addition_flag,                        --Bug10621602
4466 	            pa_quantity 		= l_inv_self_upd(j).pa_quantity,
4467 	            project_accounting_context 	= l_inv_self_upd(j).project_accounting_context,
4468 	            project_id 			= l_inv_self_upd(j).project_id,
4469 	            task_id 			= l_inv_self_upd(j).task_id,
4470 				--Bug8334059 Awt_group_id need not be updated since awt is not calculated
4471 	            --awt_group_id 		= l_inv_self_upd(j).awt_group_id,
4472 	            global_attribute_category 	= l_inv_self_upd(j).global_attribute_category,
4473 	            global_attribute1 		= l_inv_self_upd(j).global_attribute1,
4474 	            global_attribute2 		= l_inv_self_upd(j).global_attribute2,
4475 	            global_attribute3 		= l_inv_self_upd(j).global_attribute3,
4476 	            global_attribute4 		= l_inv_self_upd(j).global_attribute4,
4477 	            global_attribute5 		= l_inv_self_upd(j).global_attribute5,
4478 	            global_attribute6 		= l_inv_self_upd(j).global_attribute6,
4479 	            global_attribute7 		= l_inv_self_upd(j).global_attribute7,
4480 	            global_attribute8 		= l_inv_self_upd(j).global_attribute8,
4481 	            global_attribute9 		= l_inv_self_upd(j).global_attribute9,
4482 	            global_attribute10 		= l_inv_self_upd(j).global_attribute10,
4483 	            global_attribute11 		= l_inv_self_upd(j).global_attribute11,
4484 	            global_attribute12 		= l_inv_self_upd(j).global_attribute12,
4485 	            global_attribute13 		= l_inv_self_upd(j).global_attribute13,
4486 	            global_attribute14 		= l_inv_self_upd(j).global_attribute14,
4487 	            global_attribute15 		= l_inv_self_upd(j).global_attribute15,
4488 	            global_attribute16 		= l_inv_self_upd(j).global_attribute16,
4489 	            global_attribute17 		= l_inv_self_upd(j).global_attribute17,
4490 	            global_attribute18 		= l_inv_self_upd(j).global_attribute18,
4491 	            global_attribute19 		= l_inv_self_upd(j).global_attribute19,
4492 	            global_attribute20 		= l_inv_self_upd(j).global_attribute20,
4493 	            award_id 			    = l_inv_self_upd(j).award_id,
4494 	            dist_match_type 		= l_inv_self_upd(j).dist_match_type,
4495 	            rcv_transaction_id 		= l_inv_self_upd(j).rcv_transaction_id,
4496 	            tax_recoverable_flag 	= l_inv_self_upd(j).tax_recoverable_flag,
4497 	            cancellation_flag 		= l_inv_self_upd(j).cancellation_flag,
4498 	            invoice_line_number 	= l_inv_self_upd(j).invoice_line_number,
4499 	            corrected_invoice_dist_id 	= l_inv_self_upd(j).corrected_invoice_dist_id,
4500 	            rounding_amt 		= l_inv_self_upd(j).rounding_amt,
4501 	            charge_applicable_to_dist_id = l_inv_self_upd(j).charge_applicable_to_dist_id,
4502 	            --distribution_class 		= l_inv_self_upd(j).distribution_class, --Bug6678578
4503 	            tax_code_id 		    = l_inv_self_upd(j).tax_code_id,
4504 	            detail_tax_dist_id 		= l_inv_self_upd(j).detail_tax_dist_id,
4505 	            rec_nrec_rate 		    = l_inv_self_upd(j).rec_nrec_rate,
4506 	            recovery_rate_id 		= l_inv_self_upd(j).recovery_rate_id,
4507 	            recovery_rate_name 		= l_inv_self_upd(j).recovery_rate_name,
4508 	            recovery_type_code 		= l_inv_self_upd(j).recovery_type_code,
4509 	            taxable_amount 		    = l_inv_self_upd(j).taxable_amount,
4510 	            taxable_base_amount 	= l_inv_self_upd(j).taxable_base_amount,
4511 	            summary_tax_line_id 	= l_inv_self_upd(j).summary_tax_line_id,
4512 	            extra_po_erv 		    = l_inv_self_upd(j).extra_po_erv,
4513 	            prepay_tax_diff_amount 	=  l_inv_self_upd(j).prepay_tax_diff_amount
4514 	        WHERE invoice_distribution_id = l_inv_self_upd(j).invoice_distribution_id;
4515 
4516 
4517             -------------------------------------------------------------------
4518 	            l_debug_info := 'Tax dist id updated: '||l_inv_self_upd(j).invoice_distribution_id||
4519                                 ' Tax Detail Tax Dist Id: '||l_inv_self_upd(j).detail_tax_dist_id||
4520                                 ' Summary Tax Line Id: '||l_inv_self_upd(j).summary_tax_line_id||
4521                                 ' Amt: '||l_inv_self_upd(j).amount||
4522                                 ' Base Amt: '||l_inv_self_upd(j).base_amount;
4523 
4524 	            IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4525 	               FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
4526 	            END IF;
4527 	        -------------------------------------------------------------------
4528 
4529             END LOOP;
4530             L_INV_SELF_UPD.DELETE;
4531         END IF;
4532     END LOOP;
4533     CLOSE UPDATE_TAX_SELF;
4534 
4535     -------------------------------------------------------------------
4536     l_debug_info := 'Step 6: Get tax distributions for insert';
4537     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4538 	   FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
4539 	END IF;
4540     -------------------------------------------------------------------
4541     OPEN INSERT_TAX_DIST;
4542     LOOP
4543 
4544         FETCH INSERT_TAX_DIST
4545          BULK COLLECT INTO L_INV_DIST_INS
4546         LIMIT AP_ETAX_PKG.G_BATCH_LIMIT;
4547 
4548         EXIT WHEN INSERT_TAX_DIST%NOTFOUND
4549                   AND L_INV_DIST_INS.COUNT <= 0;
4550 
4551         IF (l_inv_dist_ins.COUNT <> 0) THEN
4552 
4553             -------------------------------------------------------------------
4554             l_debug_info := 'Tax distributions to insert: '||l_inv_dist_ins.COUNT;
4555             -------------------------------------------------------------------
4556             IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4557                 FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
4558             END IF;
4559 
4560             FOR i IN l_inv_dist_ins.FIRST..l_inv_dist_ins.LAST LOOP
4561                 l_dist_code_combination_id := NULL; -- bug 9954778
4562 
4563                 IF (l_inv_dist_ins(i).line_type_lookup_code =  'NONREC_TAX') THEN
4564                     l_pa_called := 'N'; /* bug 12728634 */
4565 
4566 	               IF ( l_inv_dist_ins(i).po_distribution_id IS NOT NULL OR
4567 	                    l_inv_dist_ins(i).rcv_transaction_id IS NOT NULL) THEN
4568 
4569          	        --bug 10621602 changes start
4570 		            -- This block is been added for the tax distributions in the retainage release invoice
4571 		            -- to get the dist_code_combination id from the parent distributions
4572 
4573 			          BEGIN
4574 					  /*Bug 12874059 begins */
4575 				          IF l_inv_dist_ins(i).po_distribution_id is not null and
4576 				              l_inv_dist_ins(i).charge_applicable_to_dist_id is not null then
4577 
4578 			                  SELECT aid.line_type_lookup_code , aid.retained_invoice_dist_id
4579 			                    INTO l_par_line_type_lookup_code , l_par_retained_invoice_dist_id
4580 			                    FROM ap_invoice_distributions_all aid
4581 			                   WHERE aid.invoice_distribution_id = l_inv_dist_ins(i).charge_applicable_to_dist_id
4582 			                     AND aid.po_distribution_id  = l_inv_dist_ins(i).po_distribution_id
4583 			                     AND aid.invoice_id = l_inv_dist_ins(i).invoice_id  ;
4584 
4585 			               END IF;
4586 						/* Bug 12874059 ends */
4587 
4588                         -------------------------------------------------------------------
4589                         l_debug_info := 'Parent Line Lookup Code And Retaind Inv Dist Id: '||l_par_line_type_lookup_code||' -- '||l_par_retained_invoice_dist_id;
4590                         -------------------------------------------------------------------
4591                         IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4592                             FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
4593                         END IF;
4594 
4595 			            IF (l_par_line_type_lookup_code = 'RETAINAGE' AND l_par_retained_invoice_dist_id IS NOT NULL) THEN
4596 
4597 			                SELECT aid.dist_code_combination_id
4598                               INTO l_dist_code_combination_id
4599 			                  FROM ap_invoice_distributions_all aid , ap_invoice_distributions_all aid1
4600 			                 WHERE  aid1.invoice_distribution_id = l_par_retained_invoice_dist_id
4601 			                   AND aid1.line_type_lookup_code  = 'RETAINAGE'
4602 			                   AND aid.invoice_distribution_id = aid1.related_retainage_dist_id
4603 				               AND aid1.invoice_id = aid.invoice_id ;
4604 
4605 				            l_inv_dist_ins(i).pa_addition_flag := 'N'; --Make the pa_addition flag N for retainage tax distributions.
4606 
4607                             -------------------------------------------------------------------
4608                             l_debug_info := 'Disc CCID from parent NONREC_TAX: '||l_dist_code_combination_id;
4609                             -------------------------------------------------------------------
4610                             IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4611                                 FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
4612                             END IF;
4613 
4614 		                END IF;
4615 
4616 			          EXCEPTION WHEN OTHERS THEN
4617 
4618 			            IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4619                           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||'RETURN_TAX_DISTRIBUTIONS','Error while getting ccid for retainge invoice');
4620                         END IF;
4621                         APP_EXCEPTION.RAISE_EXCEPTION;
4622 			          END ;
4623 
4624 	         --bug 10621602 changes end
4625 
4626 	                  IF ( l_inv_dist_ins(i).accrue_on_receipt_flag = 'Y' OR
4627 	                   --l_inv_dist_ins(i).allow_flex_override_flag = 'Y' -- Bug 6720793
4628 	                       l_inv_dist_ins(i).purch_encumbrance_flag = 'Y') THEN
4629 
4630                            -------------------------------------------------------------------
4631                            l_debug_info := 'PO: Setting Non-Rec tax account same as its parent';
4632                            -------------------------------------------------------------------
4633                            IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4634                                FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
4635                            END IF;
4636 
4637                            --bug 10621602 changes start
4638 
4639                            IF l_dist_code_combination_id IS NULL THEN
4640 
4641                               l_dist_code_combination_id := l_inv_dist_ins(i).dist_code_combination_id;
4642 
4643                            END IF;
4644 
4645                            --bug 10621602 changes start
4646 
4647 	                  END IF;
4648 
4649 /* bug 12728634 begins */
4650 
4651 	           /* ELSIF ( l_inv_dist_ins(i).project_id IS NOT NULL AND
4652 	                   l_allow_pa_override = 'N') THEN
4653 
4654 	                    l_dist_code_combination_id := l_inv_dist_ins(i).dist_code_combination_id; */
4655 
4656 	            ELSIF ( l_inv_dist_ins(i).project_id IS NOT NULL) THEN
4657 
4658 				  BEGIN
4659 	    	         SELECT TAX_ONLY_LINE_FLAG
4660 					   INTO L_TAX_ONLY_LINE_FLAG
4661 					   FROM ZX_REC_NREC_DIST
4662 					  WHERE TRX_ID = L_INV_DIST_INS(I).INVOICE_ID
4663 				        AND APPLICATION_ID = 200
4664 				        AND REC_NREC_TAX_DIST_ID = L_INV_DIST_INS(I).DETAIL_TAX_DIST_ID;
4665    			      EXCEPTION
4666 			         WHEN OTHERS THEN
4667 			          NULL;
4668 			      END;
4669 
4670 
4671 			     IF (l_tax_only_line_flag = 'Y') THEN
4672 				   --For tax only line we will derive the account from projects if project detail is present
4673 
4674      			      l_pa_success :=  GET_CCID_FROM_PROJECTS
4675      				                      ( l_inv_dist_ins(i).invoice_id ,
4676                                              l_inv_dist_ins(i).invoice_line_number ,
4677      				                        p_ccid => l_dist_code_combination_id );
4678 					  l_pa_called := 'Y';
4679      		          p_ccid := l_dist_code_combination_id;
4680      				  IF( NOT l_pa_success) then
4681                               IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4682                                     FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'Error while retriving the ccid from projects');
4683                               END IF;
4684 
4685 							  IF AP_APPROVAL_PKG.G_VALIDATION_REQUEST_ID IS NULL THEN
4686                                   APP_EXCEPTION.RAISE_EXCEPTION;
4687                               ELSE
4688                                   P_Error_Code := FND_MESSAGE.GET;
4689                                   RETURN FALSE;
4690                               END IF;
4691 
4692                        END IF;
4693 
4694      			       IF(l_allow_pa_override = 'Y') then
4695      			    	    IF (l_dist_code_combination_id IS NULL
4696      						          AND l_inv_dist_ins(i).dist_code_combination_id IS NULL) THEN
4697 
4698      							 IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4699                                         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'User has not provided a overide account on line');
4700                                   END IF;
4701 
4702      	                     ELSIF (l_inv_dist_ins(i).dist_code_combination_id IS NOT NULL) then
4703 
4704   								  IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4705                                         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'User has defined a overide account on line');
4706                                   END IF;
4707 
4708            		     	     END IF;
4709 
4710      			       ELSIF (l_dist_code_combination_id IS NULL) then
4711 
4712              			  IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4713                                FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'User has not defined a project account and the Project Override Flag is Not Set');
4714                            END IF;
4715 
4716      			       END IF;
4717 
4718 	             ELSE
4719                     l_dist_code_combination_id := l_inv_dist_ins(i).dist_code_combination_id;
4720 					--- We will get the account from the parent line non tax only line
4721 
4722 			     END IF ; -- Tax only flag is Y
4723 
4724 /* bug12728634 ends */
4725 
4726 	            END IF;
4727 
4728 
4729                    IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4730                        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'before geting ccid from corresponding tax distribution');
4731                    END IF;
4732                    -- This section to get ccid from corresponding tax distribution if
4733 	               -- line discard/invoice cancellation or correction
4734 	               -- quick credit or prepayment application/unapplication
4735 
4736 	           IF (l_inv_dist_ins(i).parent_dist_cancellation_flag = 'Y' OR
4737 	               (l_inv_dist_ins(i).parent_dist_reversal_flag = 'Y'
4738 	                and l_inv_dist_ins(i).parent_dist_parent_reversal_id IS NOT NULL
4739 					AND l_inv_dist_ins(i).reversed_tax_dist_id IS NOT NULL)) THEN -- bug 7389822 --Bugg 9034372
4740 
4741                       IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4742                           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'geting ccid for discard, cancellation');
4743                           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'l_inv_dist_ins(i).parent_dist_cancellation_flag '
4744                           ||l_inv_dist_ins(i).parent_dist_cancellation_flag);
4745                           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'p_invoice_header_rec.quick_credit '
4746                           ||p_invoice_header_rec.quick_credit);
4747                           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'p_invoice_header_rec.credited_invoice_id '
4748                           ||to_char(p_invoice_header_rec.credited_invoice_id));
4749                           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'l_inv_dist_ins(i).parent_dist_reversal_flag '
4750                           ||l_inv_dist_ins(i).parent_dist_reversal_flag);
4751                           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'l_inv_dist_ins(i).parent_dist_parent_reversal_id '
4752                           ||to_char(l_inv_dist_ins(i).parent_dist_parent_reversal_id));
4753                           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'l_inv_dist_ins(i).reversed_tax_dist_id '
4754                           ||to_char(l_inv_dist_ins(i).reversed_tax_dist_id));
4755                       END IF;
4756 
4757                       --Bug fix 6653070, bug fix 6687031
4758 	              SELECT dist_code_combination_id
4759 	                INTO l_dist_code_combination_id
4760 	                FROM ap_invoice_distributions_all
4761 	               WHERE detail_tax_dist_id = l_inv_dist_ins(i).reversed_tax_dist_id
4762 	                 AND line_type_lookup_code IN ('REC_TAX', 'NONREC_TAX','TIPV', 'TRV', 'TERV')
4763                          AND rownum =1;--Bug7241425
4764 
4765                       IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4766                           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'after geting ccid for discard, cancellation');
4767                       END IF;
4768 
4769                    --Below ELSIF will execute only during Quick Credit Operation
4770                    --Batch Validation and Online Validation have no impact due to
4771                    --this condition though wrong invoice reference is present in header rec.
4772 
4773 	           ELSIF (nvl(p_invoice_header_rec.quick_credit,'N') <> 'Y' and -- Bug 9034372
4774                           l_inv_dist_ins(i).corrected_invoice_dist_id IS NOT NULL) THEN
4775 
4776                       IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4777                          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,' Adjusted Doc Tax Dist Id '||l_inv_dist_ins(i).adjusted_doc_tax_dist_id);
4778                       END IF;
4779 
4780 	              SELECT dist_code_combination_id
4781 	                INTO l_dist_code_combination_id
4782 	                FROM ap_invoice_distributions_all
4783 	               WHERE detail_tax_dist_id = l_inv_dist_ins(i).adjusted_doc_tax_dist_id
4784 	                 AND line_type_lookup_code IN ('REC_TAX','NONREC_TAX','TIPV','TRV','TERV')--Bug7241425
4785                          AND rownum =1;--Bug7241425
4786                       IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4787                          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'after geting ccid from corresponding tax distribution for correction case');
4788                       END IF;
4789 
4790                    --BUG 8740802
4791                    --ELSIF (l_inv_dist_ins(i).applied_from_tax_dist_id IS NOT NULL) THEN
4792 
4793 	           -- l_dist_code_combination_id := l_inv_dist_ins(i).dist_code_combination_id;
4794                    --BUG 8740802
4795 
4796 	           END IF;
4797 	        END IF;
4798 
4799 
4800                 --BUG 8740802
4801                 IF (l_inv_dist_ins(i).line_type_lookup_code = 'REC_TAX' OR
4802    	                 l_inv_dist_ins(i).line_type_lookup_code = 'NONREC_TAX') AND
4803                      l_inv_dist_ins(i).applied_from_tax_dist_id IS NOT NULL THEN /* bug 12728634 */
4804 
4805                     -------------------------------------------------------------------
4806                     l_debug_info := 'Before Getting CCID based on applied from tax dist id '||l_inv_dist_ins(i).applied_from_tax_dist_id;
4807 
4808                     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4809                        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
4810                     END IF;
4811                     -------------------------------------------------------------------
4812 
4813                      BEGIN
4814                        SELECT dist_code_combination_id
4815                          INTO l_dist_code_combination_id
4816                          FROM ap_invoice_distributions_all
4817                         WHERE invoice_distribution_id = AP_ETAX_UTILITY_PKG.Get_Dist_Id_For_Tax_Dist_Id
4818                                                         (l_inv_dist_ins(i).applied_from_tax_dist_id);
4819                      END;
4820 
4821                     -------------------------------------------------------------------
4822                     l_debug_info := 'After Getting CCID based on applied from tax dist id';
4823 
4824                     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4825                        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
4826                     END IF;
4827                     -------------------------------------------------------------------
4828                      --It is Expected that no exception will occur.
4829                 END IF;
4830                 --BUG 8740802
4831 
4832 		  -----------------------------------------------------------
4833 	      l_debug_info := 'Line Type Lookup Code: '||l_inv_dist_ins(i).line_type_lookup_code||
4834 		  ' l_dist_code_combination_id: '||l_dist_code_combination_id||
4835 		  ' l_pa_called: '||l_pa_called||
4836 		  ' l_allow_pa_override: '||l_allow_pa_override||
4837 		  ' applied_from_tax_dist_id: '||l_inv_dist_ins(i).applied_from_tax_dist_id;
4838 	      -----------------------------------------------------------
4839 		  IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4840 		      FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
4841 		  END IF;
4842 
4843             /* Bug12728634 starts */
4844 	        IF ((l_inv_dist_ins(i).line_type_lookup_code = 'REC_TAX' OR
4845 	            (l_inv_dist_ins(i).line_type_lookup_code = 'NONREC_TAX' AND
4846 				((l_dist_code_combination_id IS NULL AND l_pa_called = 'N') OR
4847 				  (l_pa_called = 'Y' AND l_allow_pa_override = 'Y')))) AND
4848                  l_inv_dist_ins(i).applied_from_tax_dist_id IS NULL) THEN --Bug8740802
4849             /* Bug12728634 ends */
4850 
4851 
4852 		  l_dist_ccid_rec.gl_date			    := l_inv_dist_ins(i).accounting_date;
4853 		  l_dist_ccid_rec.tax_rate_id			:= l_inv_dist_ins(i).tax_code_id;
4854 		  l_dist_ccid_rec.rec_rate_id			:= l_inv_dist_ins(i).recovery_rate_id;
4855 		  l_dist_ccid_rec.self_assessed_flag	:= 'N';
4856 		  l_dist_ccid_rec.recoverable_flag		:= l_inv_dist_ins(i).tax_recoverable_flag;
4857 		  l_dist_ccid_rec.tax_jurisdiction_id	:= l_inv_dist_ins(i).tax_jurisdiction_id;
4858 		  l_dist_ccid_rec.tax_regime_id			:= l_inv_dist_ins(i).tax_regime_id;
4859 		  l_dist_ccid_rec.tax_id			    := l_inv_dist_ins(i).tax_id;
4860 		  l_dist_ccid_rec.internal_organization_id	:= l_inv_dist_ins(i).org_id;
4861 		  l_dist_ccid_rec.tax_status_id			    := l_inv_dist_ins(i).tax_status_id;
4862 		  l_dist_ccid_rec.ledger_id                     := l_inv_dist_ins(i).set_of_books_id; /*Bug 13681789*/
4863 
4864 		  l_dist_ccid_rec.revenue_expense_ccid		    := NVL(l_inv_dist_ins(i).dist_code_combination_id,-99);  ---6010950
4865 		  l_dist_ccid_rec.account_source_tax_rate_id    := l_inv_dist_ins(i).account_source_tax_rate_id;
4866 
4867 	          -----------------------------------------------------------
4868 	          l_debug_info := 'Call zx_api_pub.get_tax_distribution_ccids';
4869 	          -----------------------------------------------------------
4870 		      IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4871 		         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
4872 		      END IF;
4873 
4874 	          zx_api_pub.get_tax_distribution_ccids(
4875 		            p_api_version            => 1.0,
4876 		            p_init_msg_list          => FND_API.G_TRUE,
4877 		            p_commit                 => FND_API.G_FALSE,
4878 		            p_validation_level       => FND_API.G_VALID_LEVEL_FULL,
4879 		            x_return_status          => l_return_status_service,
4880 		            x_msg_count              => l_msg_count,
4881 		            x_msg_data               => l_msg_data,
4882 			        p_dist_ccid_rec	     => l_dist_ccid_rec);
4883 
4884 		            l_dist_code_combination_id	:= l_dist_ccid_rec.rec_nrec_ccid;
4885 		            l_tax_liab_ccid		:= l_dist_ccid_rec.tax_liab_ccid;
4886 
4887 	          IF (l_return_status_service <> 'S') THEN
4888 	              -----------------------------------------------------------
4889 	              l_debug_info := 'Handle errors returned by API';
4890 	              -----------------------------------------------------------
4891 		          IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4892 		             FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
4893 	              END IF;
4894 
4895 	              IF NOT(AP_ETAX_UTILITY_PKG.Return_Error_Messages(
4896 				        P_All_Error_Messages  => P_All_Error_Messages,
4897 	               		P_Msg_Count           => l_msg_count,
4898 	               		P_Msg_Data            => l_msg_data,
4899 	               		P_Error_Code          => P_Error_Code,
4900 	               		P_Calling_Sequence    => l_curr_calling_sequence)) THEN
4901 	                 NULL;
4902 	              END IF;
4903 
4904 	              RETURN FALSE;
4905 
4906 	          END IF;
4907 	        END IF;
4908 
4909 			/* bug 12728634 */
4910 			IF (l_pa_called = 'Y' AND l_allow_pa_override = 'Y' AND
4911 			    NVL(l_dist_code_combination_id, -99) = -99) THEN
4912 
4913 				l_debug_info := 'Reassigned the projects account '||p_ccid;
4914                 IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4915 		           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
4916 	            END IF;
4917 				l_dist_code_combination_id := p_ccid;
4918 
4919 			END IF;
4920 
4921 			/* bug 12728634 */
4922     	        --bug 8359426 start
4923 		/*if account is -99 for NONREC_TAX distribution (tax only line)  then raise exception
4924 		as the account is neither entered in the invoice line nor is an expense account set up*/
4925                 -----------------------------------------------------------
4926 	            l_debug_info := 'Check If Tax Only Non Rec Distribution has CCID';
4927                 IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4928 		           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
4929 	            END IF;
4930 	            -----------------------------------------------------------
4931                 IF l_dist_ccid_rec.recoverable_flag = 'N' AND
4932                                NVL(l_dist_code_combination_id, -99) = -99 THEN
4933                  --bug 8840245, if online validaiton then raise exception else return false
4934                     --Bug9021265
4935                     FND_MESSAGE.SET_NAME('SQLAP','AP_NO_NON_REC_ACC');
4936               	    FND_MESSAGE.SET_TOKEN('ERROR', 'Default Account for tax only line not provided or expense account not defined.');
4937 	                FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',l_curr_calling_sequence);
4938 	                FND_MESSAGE.SET_TOKEN('PARAMETERS',
4939 	                                      'P_Error_Code = '||P_Error_Code||
4940 	                                      'P_Calling_Sequence = '||P_Calling_Sequence);
4941 	                FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_debug_info);
4942                     IF AP_APPROVAL_PKG.G_VALIDATION_REQUEST_ID IS NULL THEN
4943                        APP_EXCEPTION.RAISE_EXCEPTION;
4944                     ELSE
4945                        P_Error_Code := FND_MESSAGE.GET;
4946                        RETURN FALSE;
4947                     END IF;
4948                     --Bug9021265
4949                 END IF;
4950 
4951                 --bug 8359426 end
4952 
4953 
4954 	        -------------------------------------------------------------------
4955 	        l_debug_info := 'Insert REC/NONREC distributions';
4956 	        -------------------------------------------------------------------
4957             IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4958 	          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
4959 	        END IF;
4960 
4961                 -- Bug 13821160: Set asset tracking flag of ccid in l_inv_dist_ins(i) for non allocated lines
4962                 IF (l_inv_dist_ins(i).charge_applicable_to_dist_id IS NULL) THEN
4963                   select decode(account_type, 'A', 'Y',
4964                                 'N')
4965                   into l_inv_dist_ins(i).par_dist_assets_tracking_flag
4966                   from gl_code_combinations
4967                   where code_combination_id = l_dist_code_combination_id;
4968 
4969                 END IF;
4970 
4971 	        ap_etax_utility_pkg.insert_tax_distributions
4972 	        			(p_invoice_header_rec        => p_invoice_header_rec,
4973 					 p_inv_dist_rec              => l_inv_dist_ins(i),
4974 					 p_dist_code_combination_id  => l_dist_code_combination_id,
4975 					 p_user_id		     => l_user_id,
4976 					 p_sysdate	     	     => sysdate, /*Bug10101457: replaced l_sysdate with sysdate*/
4977 					 p_login_id		     => l_login_id,
4978 					 p_calling_sequence          => l_curr_calling_sequence);
4979 
4980 	    END LOOP;
4981             L_INV_DIST_INS.DELETE;
4982         END IF;
4983     END LOOP;
4984     CLOSE INSERT_TAX_DIST;
4985 
4986     -------------------------------------------------------------------
4987     l_debug_info := 'Get Tax Variances';
4988     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4989 	    FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
4990 	END IF;
4991     ------------------------------------------------------------------
4992     OPEN INSERT_TAX_VARIANCES;
4993     LOOP
4994 
4995         FETCH INSERT_TAX_VARIANCES
4996          BULK COLLECT INTO L_INV_DIST_INS
4997         LIMIT AP_ETAX_PKG.G_BATCH_LIMIT;
4998 
4999         EXIT WHEN INSERT_TAX_VARIANCES%NOTFOUND
5000                   AND L_INV_DIST_INS.COUNT <= 0;
5001 
5002         IF (l_inv_dist_ins.COUNT <> 0) THEN
5003 
5004             FOR i IN l_inv_dist_ins.FIRST..l_inv_dist_ins.LAST LOOP
5005                     -------------------------------------------------------------------
5006                     l_debug_info := 'CCID From Cursor '||l_inv_dist_ins(i).dist_code_combination_id;
5007                     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5008 	                   FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
5009 	                END IF;
5010                     ------------------------------------------------------------------
5011                 l_dist_code_combination_id := l_inv_dist_ins(i).dist_code_combination_id;
5012 
5013 				-- Project LCM 7588322
5014 	         BEGIN
5015               SELECT 'Y'
5016 	            INTO   l_lcm_enabled
5017 	            FROM   RCV_TRANSACTIONS
5018 	            WHERE  TRANSACTION_ID = L_INV_DIST_INS(i).rcv_transaction_id
5019 	            AND    LCM_SHIPMENT_LINE_ID IS NOT NULL;
5020 	           EXCEPTION
5021                WHEN NO_DATA_FOUND THEN NULL;
5022              END;
5023                 -------------------------------------------------------------------
5024                 l_debug_info := 'Get CCID For LCM Enanbled Transaction ';
5025                 IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5026 	               FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
5027 	            END IF;
5028                 ------------------------------------------------------------------
5029 	            IF(l_lcm_enabled = 'Y') THEN
5030 
5031                   -------------------------------------------------------------------
5032                   l_debug_info := 'LCM Enabled '||l_lcm_enabled;
5033                   IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5034 	                  FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
5035 	              END IF;
5036                   ------------------------------------------------------------------
5037                   -------------------------------------------------------------------
5038                   l_debug_info := 'RCV Transaction Id '||L_INV_DIST_INS(i).rcv_transaction_id;
5039                   IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5040 	                  FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
5041 	              END IF;
5042                   ------------------------------------------------------------------
5043 
5044 	               l_rcv_transaction_id := L_INV_DIST_INS(i).rcv_transaction_id;
5045 	               RCV_UTILITIES.Get_RtLcmInfo(
5046 	                            p_rcv_transaction_id           => l_rcv_transaction_id,
5047 	                            x_lcm_account_id               => l_lcm_account_id,
5048 								x_tax_variance_account_id      => l_tax_variance_account_id,
5049 								x_def_charges_account_id       => l_def_charges_account_id,
5050 								x_exchange_variance_account_id => l_exchange_variance_account_id,
5051 								x_inv_variance_account_id      => l_inv_variance_account_id
5052 								);
5053 	               l_dist_code_combination_id := l_tax_variance_account_id;
5054                    -------------------------------------------------------------------
5055                    l_debug_info := 'CCID For LCM Enanbled Transaction '||l_dist_code_combination_id;
5056                    IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5057 	                   FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
5058 	               END IF;
5059                 ------------------------------------------------------------------
5060 
5061 	                --Bug12896924 START--
5062                    l_tax_variance_account_id  := NULL;
5063                    ELSIF (l_inv_dist_ins(i).accrue_on_receipt_flag = 'N') THEN
5064 
5065                         l_dist_ccid_rec.gl_date			    := l_inv_dist_ins(i).accounting_date;
5066 		                l_dist_ccid_rec.tax_rate_id			:= l_inv_dist_ins(i).tax_code_id;
5067 		                l_dist_ccid_rec.rec_rate_id			:= l_inv_dist_ins(i).recovery_rate_id;
5068 		                l_dist_ccid_rec.self_assessed_flag	:= 'N';
5069 		                l_dist_ccid_rec.recoverable_flag	:= l_inv_dist_ins(i).tax_recoverable_flag;
5070 		                l_dist_ccid_rec.tax_jurisdiction_id	:= l_inv_dist_ins(i).tax_jurisdiction_id;
5071 		                l_dist_ccid_rec.tax_regime_id		:= l_inv_dist_ins(i).tax_regime_id;
5072 		                l_dist_ccid_rec.tax_id			    := l_inv_dist_ins(i).tax_id;
5073 		                l_dist_ccid_rec.internal_organization_id	:= l_inv_dist_ins(i).org_id;
5074 		                l_dist_ccid_rec.tax_status_id		:= l_inv_dist_ins(i).tax_status_id;
5075 
5076 		                l_dist_ccid_rec.revenue_expense_ccid		  := NVL(l_inv_dist_ins(i).dist_code_combination_id,-99);
5077 		                l_dist_ccid_rec.account_source_tax_rate_id    := l_inv_dist_ins(i).account_source_tax_rate_id;
5078 				l_dist_ccid_rec.ledger_id                     := l_inv_dist_ins(i).set_of_books_id; /*Bug 13681789*/
5079 
5080 	                    -----------------------------------------------------------
5081 	                    l_debug_info := 'Call zx_api_pub.get_tax_distribution_ccids - Tax Variance';
5082                         -----------------------------------------------------------
5083 		                IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5084 		                    FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
5085 		                END IF;
5086 
5087               	        zx_api_pub.get_tax_distribution_ccids(
5088 		                   p_api_version            => 1.0,
5089 		                   p_init_msg_list          => FND_API.G_TRUE,
5090 		                   p_commit                 => FND_API.G_FALSE,
5091 		                   p_validation_level       => FND_API.G_VALID_LEVEL_FULL,
5092 		                   x_return_status          => l_return_status_service,
5093 		                   x_msg_count              => l_msg_count,
5094 		                   x_msg_data               => l_msg_data,
5095 			               p_dist_ccid_rec	        => l_dist_ccid_rec);
5096 
5097              		    l_dist_code_combination_id	:= l_dist_ccid_rec.rec_nrec_ccid;
5098 		                l_tax_liab_ccid		:= l_dist_ccid_rec.tax_liab_ccid;
5099 
5100                         -------------------------------------------------------------------
5101                         l_debug_info := 'Tax Variance CCID ACCRUE ON RECEIPT N '||l_dist_code_combination_id;
5102                         IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5103 	                       FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
5104 	                    END IF;
5105                         ------------------------------------------------------------------
5106 
5107 	                    IF (l_return_status_service <> 'S') THEN
5108 	                       -----------------------------------------------------------
5109 	                       l_debug_info := 'Handle errors returned by API';
5110 	                       -----------------------------------------------------------
5111 		                   IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5112 		                      FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
5113 	                       END IF;
5114 
5115 	                      IF NOT(AP_ETAX_UTILITY_PKG.Return_Error_Messages(
5116 				                    P_All_Error_Messages  => P_All_Error_Messages,
5117 	               		            P_Msg_Count           => l_msg_count,
5118 	               		            P_Msg_Data            => l_msg_data,
5119 	               		            P_Error_Code          => P_Error_Code,
5120 	               		            P_Calling_Sequence    => l_curr_calling_sequence)) THEN
5121 	                                NULL;
5122 	                      END IF;
5123 
5124 	                     RETURN FALSE;
5125                     END IF;
5126                 --Bug12896924 END--
5127 
5128                 END IF;
5129 	            -- End Project LCM 7588322
5130 
5131 		    --bug 10621602 starts
5132 		     IF AP_ETAX_SERVICES_PKG.ret_dists.exists(l_inv_dist_ins(i).charge_applicable_to_dist_id) THEN
5133 
5134                IF (AP_ETAX_SERVICES_PKG.ret_dists(l_inv_dist_ins(i).charge_applicable_to_dist_id).RETAINED_INVOICE_DIST_ID IS NOT NULL) THEN
5135 			      l_inv_dist_ins(i).pa_addition_flag := 'N'; --Make the pa_addition flag N for retainage tax distributions.
5136     	       END IF;
5137 
5138              END IF;
5139              --bug 10621602 ends
5140                 -------------------------------------------------------------------
5141                 l_debug_info := 'Insert Tax Variance Distributions';
5142                 -------------------------------------------------------------------
5143                 IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5144                     FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
5145                 END IF;
5146 
5147                 ap_etax_utility_pkg.insert_tax_distributions(
5148 				  p_invoice_header_rec       => p_invoice_header_rec,
5149 				  p_inv_dist_rec             => l_inv_dist_ins(i),
5150 				  p_dist_code_combination_id => l_dist_code_combination_id,
5151 				  p_user_id		     => l_user_id,
5152 				  p_sysdate	     	     => sysdate, /*Bug10101457: replaced l_sysdate with sysdate*/
5153 				  p_login_id		     => l_login_id,
5154 				  p_calling_sequence         => l_curr_calling_sequence);
5155            END LOOP;
5156            L_INV_DIST_INS.DELETE;
5157         END IF;
5158     END LOOP;
5159     CLOSE INSERT_TAX_VARIANCES;
5160 
5161 
5162     -------------------------------------------------------------------
5163     l_debug_info := 'Get self assessed dist for insert';
5164     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5165 	   FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
5166     END IF;
5167     -------------------------------------------------------------------
5168 
5169     OPEN INSERT_TAX_SELF;
5170     LOOP
5171 
5172         FETCH INSERT_TAX_SELF
5173          BULK COLLECT INTO L_INV_SELF_INS
5174         LIMIT AP_ETAX_PKG.G_BATCH_LIMIT;
5175 
5176         EXIT WHEN INSERT_TAX_SELF%NOTFOUND
5177                   AND L_INV_SELF_INS.COUNT <= 0;
5178 
5179         IF (l_inv_self_ins.COUNT <> 0) THEN
5180 
5181       	    -------------------------------------------------------------------
5182       	    l_debug_info := 'Insert self assessed tax distributions';
5183       	    -------------------------------------------------------------------
5184       	    IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5185           	FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
5186       	    END IF;
5187 
5188 	    FOR i IN l_inv_self_ins.FIRST..l_inv_self_ins.LAST LOOP
5189             l_dist_code_combination_id := NULL; -- bug 9954778
5190             l_tax_liab_ccid            := NULL; -- bug 9954778
5191 
5192 		    -------------------------------------------------------------------
5193 		    l_debug_info := 'Get ccid for self assessed distributions';
5194             -------------------------------------------------------------------
5195 	        IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5196                 FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
5197             END IF;
5198 
5199 	        IF (l_inv_self_ins(i).line_type_lookup_code =  'NONREC_TAX') THEN
5200 
5201 	           IF ( l_inv_self_ins(i).po_distribution_id IS NOT NULL OR
5202 	                l_inv_self_ins(i).rcv_transaction_id IS NOT NULL) THEN
5203 
5204 	              IF ( l_inv_self_ins(i).accrue_on_receipt_flag = 'Y' OR
5205 	                   --l_inv_self_ins(i).allow_flex_override_flag = 'Y' -- Bug 6720793
5206 	                   l_inv_self_ins(i).purch_encumbrance_flag = 'Y') THEN
5207 
5208                            -------------------------------------------------------------------
5209                            l_debug_info := 'PO: Setting Self Assessed Non-Rec tax account same as its parent';
5210                            -------------------------------------------------------------------
5211                            IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5212                                FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
5213                            END IF;
5214 
5215 	                   l_dist_code_combination_id := l_inv_self_ins(i).dist_code_combination_id;
5216 
5217 	              END IF;
5218 
5219 	           ELSIF ( l_inv_self_ins(i).project_id IS NOT NULL AND
5220 	                   l_allow_pa_override = 'N') THEN
5221 
5222 					  -------------------------------------------------------------------
5223                       l_debug_info := 'Setting Self Assessed Non-Rec tax account same as its parent as invoice is PA Related';
5224                       -------------------------------------------------------------------
5225                       IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5226                           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
5227                       END IF;
5228 
5229 	             l_dist_code_combination_id := l_inv_self_ins(i).dist_code_combination_id;
5230 
5231 	           END IF;
5232 
5233 	           -- This section to get ccid from corresponding tax distribution if
5234 	           -- line discard/invoice cancellation or correction
5235 	           -- quick credit or prepayment application/unapplication
5236 	           IF (l_inv_self_ins(i).parent_dist_cancellation_flag = 'Y' OR
5237                         (nvl(p_invoice_header_rec.quick_credit, 'N') = 'Y'
5238                         and p_invoice_header_rec.credited_invoice_id IS NOT
5239                         NULL) OR		                                         --Bug8834205
5240 	              (l_inv_self_ins(i).parent_dist_reversal_flag = 'Y'
5241 	               and l_inv_self_ins(i).parent_dist_parent_reversal_id IS NOT NULL
5242 				   and l_inv_self_ins(i).reversed_tax_dist_id IS NOT NULL)) THEN   --Bug14401623
5243 
5244 
5245                       IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5246                           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'geting ccid for discard, cancellation');
5247                           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'l_inv_self_ins(i).parent_dist_cancellation_flag '
5248                           ||l_inv_self_ins(i).parent_dist_cancellation_flag);
5249                           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'p_invoice_header_rec.quick_credit '
5250                           ||p_invoice_header_rec.quick_credit);
5251                           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'p_invoice_header_rec.credited_invoice_id '
5252                           ||to_char(p_invoice_header_rec.credited_invoice_id));
5253                           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'l_inv_self_ins(i).parent_dist_reversal_flag '
5254                           ||l_inv_self_ins(i).parent_dist_reversal_flag);
5255                           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'l_inv_self_ins(i).parent_dist_parent_reversal_id '
5256                           ||to_char(l_inv_self_ins(i).parent_dist_parent_reversal_id));
5257                           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'l_inv_self_ins(i).reversed_tax_dist_id '
5258                           ||to_char(l_inv_self_ins(i).reversed_tax_dist_id));
5259                       END IF;
5260 
5261 	              SELECT dist_code_combination_id
5262 	                INTO l_dist_code_combination_id
5263 	                FROM ap_self_assessed_tax_dist_all
5264 	               WHERE detail_tax_dist_id = l_inv_self_ins(i).reversed_tax_dist_id
5265 				   AND line_type_lookup_code IN ('REC_TAX','NONREC_TAX','TIPV','TRV','TERV')--Bug8834205
5266                    AND rownum =1;
5267 
5268 	           ELSIF (l_inv_self_ins(i).corrected_invoice_dist_id IS NOT NULL) THEN
5269 
5270 			   		  -------------------------------------------------------------------
5271                       l_debug_info := 'Get CCID From Correction '||l_inv_self_ins(i).adjusted_doc_tax_dist_id;
5272                       -------------------------------------------------------------------
5273                       IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5274                           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
5275                       END IF;
5276 
5277 	              SELECT dist_code_combination_id
5278 	                INTO l_dist_code_combination_id
5279 	                FROM ap_self_assessed_tax_dist_all
5280 	               WHERE detail_tax_dist_id = l_inv_self_ins(i).adjusted_doc_tax_dist_id
5281 				   AND line_type_lookup_code IN ('REC_TAX','NONREC_TAX','TIPV','TRV','TERV')--Bug8834205
5282                    AND rownum =1;
5283 
5284 	          --In case of Selfassessed Tax resulted due to prepayment application
5285                   --CCID can be derived from its correrponding taxable distribution
5286                   --or expense acccount but certainly user cannot change CCID on self
5287                   --assessed tax distributions. Hence we can call ZX_API_PUB.GET_TAX_DISTRIBUTION_CCIDS
5288                   --This function will return the correct CCID. In case of normal exclusive tax
5289                   --we need to fetch it from its original tax distribution on PREPAY invoice.
5290 
5291 
5292                    --Bug8740802
5293                    --ELSIF (l_inv_self_ins(i).applied_from_tax_dist_id IS NOT NULL) THEN
5294 
5295 	             --l_dist_code_combination_id := l_inv_self_ins(i).dist_code_combination_id;
5296                    --Bug8740802
5297 
5298 	           END IF;
5299 
5300 	        ELSIF (l_inv_self_ins(i).line_type_lookup_code IN
5301 	              ('TIPV', 'TERV', 'TRV')) THEN
5302 
5303 	          l_dist_code_combination_id := l_inv_self_ins(i).dist_code_combination_id;
5304 
5305 	        END IF;
5306 
5307 	        IF (l_inv_self_ins(i).line_type_lookup_code = 'REC_TAX' OR
5308 	            (l_inv_self_ins(i).line_type_lookup_code = 'NONREC_TAX' )) THEN --Bug6599804
5309 
5310 		  l_dist_ccid_rec.gl_date			    := l_inv_self_ins(i).accounting_date;
5311 		  l_dist_ccid_rec.tax_rate_id			:= l_inv_self_ins(i).tax_code_id;
5312 		  l_dist_ccid_rec.rec_rate_id			:= l_inv_self_ins(i).recovery_rate_id;
5313 		  l_dist_ccid_rec.self_assessed_flag	:= 'Y';
5314 		  l_dist_ccid_rec.recoverable_flag		:= l_inv_self_ins(i).tax_recoverable_flag;
5315 		  l_dist_ccid_rec.tax_jurisdiction_id	:= l_inv_self_ins(i).tax_jurisdiction_id;
5316 		  l_dist_ccid_rec.tax_regime_id			:= l_inv_self_ins(i).tax_regime_id;
5317 		  l_dist_ccid_rec.tax_id			    := l_inv_self_ins(i).tax_id;
5318 		  l_dist_ccid_rec.internal_organization_id	:= l_inv_self_ins(i).org_id;
5319 		  l_dist_ccid_rec.tax_status_id			:= l_inv_self_ins(i).tax_status_id;
5320 		  l_dist_ccid_rec.revenue_expense_ccid	:= l_inv_self_ins(i).dist_code_combination_id;
5321 		  l_dist_ccid_rec.account_source_tax_rate_id    := l_inv_self_ins(i).account_source_tax_rate_id;
5322 		  l_dist_ccid_rec.ledger_id                     := l_inv_self_ins(i).set_of_books_id; /*Bug 13681789*/
5323 
5324 	          zx_api_pub.get_tax_distribution_ccids(
5325 		            p_api_version            => 1.0,
5326 		            p_init_msg_list          => FND_API.G_TRUE,
5327 		            p_commit                 => FND_API.G_FALSE,
5328 		            p_validation_level       => FND_API.G_VALID_LEVEL_FULL,
5329 		            x_return_status          => l_return_status_service,
5330 		            x_msg_count              => l_msg_count,
5331 		            x_msg_data               => l_msg_data,
5332 			        p_dist_ccid_rec	     => l_dist_ccid_rec);
5333 
5334                  IF (l_inv_self_ins(i).line_type_lookup_code = 'REC_TAX' OR
5335                     (l_inv_self_ins(i).line_type_lookup_code = 'NONREC_TAX'
5336                      and l_dist_code_combination_id IS NULL)) THEN  --Bug6599804
5337 
5338 		  l_dist_code_combination_id	:= l_dist_ccid_rec.rec_nrec_ccid;
5339 
5340                  END IF;
5341 
5342 		  l_tax_liab_ccid		:= l_dist_ccid_rec.tax_liab_ccid;
5343 
5344 	          IF (l_return_status_service <> 'S') THEN
5345 	              -----------------------------------------------------------
5346 	              l_debug_info := 'Handle errors returned by API';
5347 	              -----------------------------------------------------------
5348 		          IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5349 	                 FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
5350 	              END IF;
5351 
5352 	              IF NOT(AP_ETAX_UTILITY_PKG.Return_Error_Messages(
5353 		               P_All_Error_Messages  => P_All_Error_Messages,
5354 		               P_Msg_Count           => l_msg_count,
5355 		               P_Msg_Data            => l_msg_data,
5356 		               P_Error_Code          => P_Error_Code,
5357 		               P_Calling_Sequence    => l_curr_calling_sequence)) THEN
5358 	                 NULL;
5359 	              END IF;
5360 
5361 	              RETURN FALSE;
5362 	          END IF;
5363 	        END IF;
5364 
5365 	        -------------------------------------------------------------------
5366 	        l_debug_info := 'Insert self assessed distributions';
5367 	        -------------------------------------------------------------------
5368 		    IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5369 	          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
5370 	        END IF;
5371 
5372 	        BEGIN
5373 	          INSERT INTO ap_self_assessed_tax_dist_all (
5374 	            accounting_date,
5375 	            accrual_posted_flag,
5376 	            assets_addition_flag,
5377 	            assets_tracking_flag,
5378 	            cash_posted_flag,
5379 	            distribution_line_number,
5380 	            dist_code_combination_id,
5381 	            invoice_id,
5382 	            last_updated_by,
5383 	            last_update_date,
5384 	            line_type_lookup_code,
5385 	            period_name,
5386 	            set_of_books_id,
5387 	            amount,
5388 	            base_amount,
5389 	            batch_id,
5390 	            created_by,
5391 	            creation_date,
5392 	            description,
5393 	            final_match_flag,
5394 	            income_tax_region,
5395 	            last_update_login,
5396 	            match_status_flag,
5397 	            posted_flag,
5398 	            po_distribution_id,
5399 	            program_application_id,
5400 	            program_id,
5401 	            program_update_date,
5402 	            quantity_invoiced,
5403 	            request_id,
5404 	            reversal_flag,
5405 	            type_1099,
5406 	            unit_price,
5407 	            encumbered_flag,
5408 	            stat_amount,
5409 	            attribute1,
5410 	            attribute10,
5411 	            attribute11,
5412 	            attribute12,
5413 	            attribute13,
5414 	            attribute14,
5415 	            attribute15,
5416 	            attribute2,
5417 	            attribute3,
5418 	            attribute4,
5419 	            attribute5,
5420 	            attribute6,
5421 	            attribute7,
5422 	            attribute8,
5423 	            attribute9,
5424 	            attribute_category,
5425 	            expenditure_item_date,
5426 	            expenditure_organization_id,
5427 	            expenditure_type,
5428 	            parent_invoice_id,
5429 	            pa_addition_flag,
5430 	            pa_quantity,
5431 	            prepay_amount_remaining,
5432 	            project_accounting_context,
5433 	            project_id,
5434 	            task_id,
5435 	            packet_id,
5436 	            awt_flag,
5437 	            awt_group_id,
5438 	            awt_tax_rate_id,
5439 	            awt_gross_amount,
5440 	            awt_invoice_id,
5441 	            awt_origin_group_id,
5442 	            reference_1,
5443 	            reference_2,
5444 	            org_id,
5445 	            awt_invoice_payment_id,
5446 	            global_attribute_category,
5447 	            global_attribute1,
5448 	            global_attribute2,
5449 	            global_attribute3,
5450 	            global_attribute4,
5451 	            global_attribute5,
5452 	            global_attribute6,
5453 	            global_attribute7,
5454 	            global_attribute8,
5455 	            global_attribute9,
5456 	            global_attribute10,
5457 	            global_attribute11,
5458 	            global_attribute12,
5459 	            global_attribute13,
5460 	            global_attribute14,
5461 	            global_attribute15,
5462 	            global_attribute16,
5463 	            global_attribute17,
5464 	            global_attribute18,
5465 	            global_attribute19,
5466 	            global_attribute20,
5467 	            receipt_verified_flag,
5468 	            receipt_required_flag,
5469 	            receipt_missing_flag,
5470 	            justification,
5471 	            expense_group,
5472 	            start_expense_date,
5473 	            end_expense_date,
5474 	            receipt_currency_code,
5475 	            receipt_conversion_rate,
5476 	            receipt_currency_amount,
5477 	            daily_amount,
5478 	            web_parameter_id,
5479 	            adjustment_reason,
5480 	            award_id,
5481 	            credit_card_trx_id,
5482 	            dist_match_type,
5483 	            rcv_transaction_id,
5484 	            invoice_distribution_id,
5485 	            parent_reversal_id,
5486 	            tax_recoverable_flag,
5487 	            merchant_document_number,
5488 	            merchant_name,
5489 	            merchant_reference,
5490 	            merchant_tax_reg_number,
5491 	            merchant_taxpayer_id,
5492 	            country_of_supply,
5493 	            matched_uom_lookup_code,
5494 	            gms_burdenable_raw_cost,
5495 	            accounting_event_id,
5496 	            prepay_distribution_id,
5497 	            upgrade_posted_amt,
5498 	            upgrade_base_posted_amt,
5499 	            inventory_transfer_status,
5500 	            company_prepaid_invoice_id,
5501 	            cc_reversal_flag,
5502 	            awt_withheld_amt,
5503 	            pa_cmt_xface_flag,
5504 	            cancellation_flag,
5505 	            invoice_line_number,
5506 	            corrected_invoice_dist_id,
5507 	            rounding_amt,
5508 	            charge_applicable_to_dist_id,
5509 	            corrected_quantity,
5510 	            related_id,
5511 	            asset_book_type_code,
5512 	            asset_category_id,
5513 	            distribution_class,
5514 	            tax_code_id,
5515 	            intended_use,
5516 	            detail_tax_dist_id,
5517 	            rec_nrec_rate,
5518 	            recovery_rate_id,
5519 	            recovery_rate_name,
5520 	            recovery_type_code,
5521 	            withholding_tax_code_id,
5522 	            taxable_amount,
5523 	            taxable_base_amount,
5524 	            tax_already_distributed_flag,
5525         	    summary_tax_line_id,
5526 	            extra_po_erv,
5527 	            prepay_tax_diff_amount,
5528 	            self_assessed_tax_liab_ccid,
5529 		        rcv_charge_addition_flag,
5530 		        self_assessed_flag
5531 	          ) VALUES (
5532 	            l_inv_self_ins(i).accounting_date,    -- accounting_date
5533 	            'N',                                  -- accrual_posted_flag
5534 	            'U',                                  -- assets_addition_flag
5535 	            'N',                                  -- assets_tracking_flag
5536 	            'N',                                  -- cash_posted_flag
5537 	            AP_ETAX_UTILITY_PKG.get_max_dist_num_self(
5538                       --P_Invoice_Header_Rec.invoice_id,
5539                       l_inv_self_ins(i).invoice_id,
5540 	              l_inv_self_ins(i).invoice_line_number)+1, --Bug7611551
5541 	                                                  -- distribution_line_number
5542 	            l_dist_code_combination_id,           -- dist_code_combination_id
5543                     l_inv_self_ins(i).invoice_id,         -- invoice_id Bug7611551
5544 	            --P_Invoice_Header_Rec.invoice_id,      -- invoice_id
5545 	            l_user_id,                            -- last_updated_by
5546 	            sysdate,                            -- last_update_date /*Bug10101457: replaced l_sysdate with sysdate*/
5547 	            l_inv_self_ins(i).line_type_lookup_code,
5548 	                                                  -- line_type_lookup_code
5549 	            l_inv_self_ins(i).period_name,        -- period_name
5550                     l_inv_self_ins(i).set_of_books_id,         -- set_of_books_id bug7611551
5551 	            --P_Invoice_Header_Rec.set_of_books_id, -- set_of_books_id
5552 	            l_inv_self_ins(i).amount,             -- amount
5553 	            l_inv_self_ins(i).base_amount,        -- base_amount -- bug 10350068
5554 	            l_inv_self_ins(i).batch_id,           -- batch_id  --Bug7611551
5555                     --P_Invoice_Header_Rec.batch_id,      -- batch_id
5556 	            l_user_id,                            -- created_by
5557 	            sysdate,                            -- creation_date /*Bug10101457: replaced l_sysdate with sysdate*/
5558 	            l_inv_self_ins(i).description,        -- description
5559 	            NULL,                                 -- final_match_flag
5560 	            l_inv_self_ins(i).income_tax_region,  -- income_tax_region
5561 	            l_login_id,                           -- last_update_login
5562 	            NULL,                                 -- match_status_flag
5563 	            'N',                                  -- posted_flag
5564 	            l_inv_self_ins(i).po_distribution_id, -- po_distribution_id
5565 	            NULL,                                 -- program_application_id
5566 	            NULL,                                 -- program_id
5567 	            NULL,                                 -- program_update_date
5568 	            NULL,                                 -- quantity_invoiced
5569 	            NULL,                                 -- request_id
5570 	            'N',                                  -- reversal_flag
5571 	            l_inv_self_ins(i).type_1099,          -- type_1099
5572 	            NULL,                                 -- unit_price
5573 	            'N',                                  -- encumbered_flag
5574 	            NULL,                                 -- stat_amount
5575 	            l_inv_self_ins(i).attribute1,         -- attribute1
5576 	            l_inv_self_ins(i).attribute10,        -- attribute10
5577 	            l_inv_self_ins(i).attribute11,        -- attribute11,
5578 	            l_inv_self_ins(i).attribute12,        -- attribute12
5579 	            l_inv_self_ins(i).attribute13,        -- attribute13
5580 	            l_inv_self_ins(i).attribute14,        -- attribute14
5581 	            l_inv_self_ins(i).attribute15,        -- attribute15
5582 	            l_inv_self_ins(i).attribute2,         -- attribute2
5583 	            l_inv_self_ins(i).attribute3,         -- attribute3
5584 	            l_inv_self_ins(i).attribute4,         -- attribute4
5585 	            l_inv_self_ins(i).attribute5,         -- attribute5
5586 	            l_inv_self_ins(i).attribute6,         -- attribute6
5587 	            l_inv_self_ins(i).attribute7,         -- attribute7
5588 	            l_inv_self_ins(i).attribute8,         -- attribute8
5589 	            l_inv_self_ins(i).attribute9,         -- attribute9
5590 	            l_inv_self_ins(i).attribute_category, -- attribute_category
5591 	            l_inv_self_ins(i).expenditure_item_date,
5592 	                                                  -- expenditure_item_date
5593 	            l_inv_self_ins(i).expenditure_organization_id,
5594 	                                                  -- expenditure_organization_id
5595 	            l_inv_self_ins(i).expenditure_type,   -- expenditure_type
5596         	    l_inv_self_ins(i).parent_invoice_id,  -- parent_invoice_id
5597 	            l_inv_self_ins(i).pa_addition_flag,   -- pa_addition_flag
5598 	            l_inv_self_ins(i).pa_quantity,        -- pa_quantity
5599 	            NULL,                                 -- prepay_amount_remaining
5600 	            -- the prepay_amount_remaining will be populated for all the
5601 	            -- prepayment distributions during the payment. And later will be
5602 	            -- updated during the prepayment applications
5603 	            l_inv_self_ins(i).project_accounting_context,
5604 	                                                  -- project_accounting_context
5605 	            l_inv_self_ins(i).project_id,         -- project_id
5606 	            l_inv_self_ins(i).task_id,            -- task_id
5607 	            NULL,                                 -- packet_id
5608 	            'N',                                  -- awt_flag
5609 	            l_inv_self_ins(i).awt_group_id,       -- awt_group_id
5610 	            NULL,                                 -- awt_tax_rate_id
5611 	            NULL,                                 -- awt_gross_amount
5612 	            NULL,                                 -- awt_invoice_id
5613 	            NULL,                                 -- awt_origin_group_id
5614 	            NULL,                                 -- reference_1
5615 	            NULL,                                 -- reference_2
5616                     l_inv_self_ins(i).org_id,             -- org_id --Bug7611551
5617   	            --P_Invoice_Header_Rec.org_id,        -- org_id
5618 	            NULL,                                 -- awt_invoice_payment_id
5619 	            l_inv_self_ins(i).global_attribute_category,
5620 	                                                  -- global_attribute_category
5621 	            l_inv_self_ins(i).global_attribute1,  -- global_attribute1
5622 	            l_inv_self_ins(i).global_attribute2,  -- global_attribute2
5623 	            l_inv_self_ins(i).global_attribute3,  -- global_attribute3
5624 	            l_inv_self_ins(i).global_attribute4,  -- global_attribute4
5625 	            l_inv_self_ins(i).global_attribute5,  -- global_attribute5
5626 	            l_inv_self_ins(i).global_attribute6,  -- global_attribute6
5627 	            l_inv_self_ins(i).global_attribute7,  -- global_attribute7
5628 	            l_inv_self_ins(i).global_attribute8,  -- global_attribute8
5629 	            l_inv_self_ins(i).global_attribute9,  -- global_attribute9
5630 	            l_inv_self_ins(i).global_attribute10, -- global_attribute10
5631 	            l_inv_self_ins(i).global_attribute11, -- global_attribute11
5632 	            l_inv_self_ins(i).global_attribute12, -- global_attribute12
5633 	            l_inv_self_ins(i).global_attribute13, -- global_attribute13
5634 	            l_inv_self_ins(i).global_attribute14, -- global_attribute14
5635 	            l_inv_self_ins(i).global_attribute15, -- global_attribute15
5636 	            l_inv_self_ins(i).global_attribute16, -- global_attribute16
5637 	            l_inv_self_ins(i).global_attribute17, -- global_attribute17
5638 	            l_inv_self_ins(i).global_attribute18, -- global_attribute18
5639         	    l_inv_self_ins(i).global_attribute19, -- global_attribute19
5640 	            l_inv_self_ins(i).global_attribute20, -- global_attribute20
5641 	            NULL,                                 -- receipt_verified_flag
5642 	            NULL,                                 -- receipt_required_flag
5643 	            NULL,                                 -- receipt_missing_flag
5644 	            NULL,                                 -- justification
5645 	            NULL,                                 -- expense_group
5646 	            NULL,                                 -- start_expense_date
5647 	            NULL,                                 -- end_expense_date
5648 	            NULL,                                 -- receipt_currency_code
5649 	            NULL,                                 -- receipt_conversion_rate
5650 	            NULL,                                 -- receipt_currency_amount
5651 	            NULL,                                 -- daily_amount
5652 	            NULL,                                 -- web_parameter_id
5653 	            NULL,                                 -- adjustment_reason
5654 	            l_inv_self_ins(i).award_id,           -- award_id
5655 	            NULL,                                 -- credit_card_trx_id
5656 	            l_inv_self_ins(i).dist_match_type,    -- dist_match_type
5657 	            l_inv_self_ins(i).rcv_transaction_id, -- rcv_transaction_id
5658         	    ap_invoice_distributions_s.NEXTVAL,   -- invoice_distribution_id
5659 	            NULL,                                 -- parent_reversal_id
5660 	            l_inv_self_ins(i).tax_recoverable_flag,
5661 	                                                  -- tax_recoverable_flag
5662 	            l_inv_self_ins(i).merchant_document_number, -- merchant_document_number --Bug14658408: Start
5663 	            l_inv_self_ins(i).merchant_name,            -- merchant_name
5664 	            l_inv_self_ins(i).merchant_reference,       -- merchant_reference
5665 	            l_inv_self_ins(i).merchant_tax_reg_number,  -- merchant_tax_reg_number
5666 	            l_inv_self_ins(i).merchant_taxpayer_id,     -- merchant_taxpayer_id --Bug14658408: End
5667 	            NULL,                                 -- country_of_supply
5668 	            NULL,                                 -- matched_uom_lookup_code
5669 	            NULL,                                 -- gms_burdenable_raw_cost
5670 	            NULL,                                 -- accounting_event_id
5671 	            l_inv_self_ins(i).prepay_distribution_id,  -- prepay_distribution_id
5672 	            NULL,                                 -- upgrade_posted_amt
5673 	            NULL,                                 -- upgrade_base_posted_amt
5674 	            'N',                                  -- inventory_transfer_status
5675 	            NULL,                                 -- company_prepaid_invoice_id
5676 	            NULL,                                 -- cc_reversal_flag
5677 	            NULL,                                 -- awt_withheld_amt
5678 	            NULL,                                 -- pa_cmt_xface_flag
5679 	            l_inv_self_ins(i).cancellation_flag,  -- cancellation_flag
5680 	            l_inv_self_ins(i).invoice_line_number,-- invoice_line_number
5681 	            l_inv_self_ins(i).corrected_invoice_dist_id,
5682 	                                                  -- corrected_invoice_dist_id
5683 	            l_inv_self_ins(i).rounding_amt,       -- rounding_amt
5684 	            l_inv_self_ins(i).charge_applicable_to_dist_id,
5685 	                                                 -- charge_applicable_to_dist_id
5686 	            NULL,                                 -- corrected_quantity
5687 	            NULL,                                 -- related_id
5688 	            NULL,                                 -- asset_book_type_code
5689 	            NULL,                                 -- asset_category_id
5690 	            l_inv_self_ins(i).distribution_class, -- distribution_class
5691 	            l_inv_self_ins(i).tax_code_id,        -- tax_code_id
5692 	            NULL,                                 -- intended_use,
5693 	            l_inv_self_ins(i).detail_tax_dist_id, -- detail_tax_dist_id
5694 	            l_inv_self_ins(i).rec_nrec_rate,      -- rec_nrec_rate
5695 	            l_inv_self_ins(i).recovery_rate_id,   -- recovery_rate_id
5696 	            l_inv_self_ins(i).recovery_rate_name, -- recovery_rate_name
5697 	            l_inv_self_ins(i).recovery_type_code, -- recovery_type_code
5698 	            NULL,                                 -- withholding_tax_code_id,
5699 	            l_inv_self_ins(i).taxable_amount,     -- taxable_amount
5700 	            l_inv_self_ins(i).taxable_base_amount, -- taxable_base_amount
5701 	            NULL,                                -- tax_already_distributed_flag
5702 	            l_inv_self_ins(i).summary_tax_line_id, -- summary_tax_line_id
5703 	            l_inv_self_ins(i).extra_po_erv,        -- extra_po_erv
5704 	            l_inv_self_ins(i).prepay_tax_diff_amount, -- prepay_tax_diff_amount
5705 	            l_tax_liab_ccid,                        -- self_assessed_tax_liab_ccid
5706 		        'N',				    -- rcv_charge_addition_flag
5707 		        'Y'					    -- self_assessed_flag
5708 		     );
5709 
5710 	        EXCEPTION
5711 			WHEN OTHERS THEN
5712 			     IF (SQLCODE <> -20001) THEN
5713 				 FND_MESSAGE.SET_NAME('SQLAP','AP_DEBUG');
5714 				 FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
5715 				 FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',l_curr_calling_sequence);
5716 				 FND_MESSAGE.SET_TOKEN('PARAMETERS',
5717 					            ' P_Invoice_Id = '||l_inv_self_ins(i).invoice_id||
5718 					            ' P_Error_Code = '||P_Error_Code||
5719 					            ' P_Calling_Sequence = '||P_Calling_Sequence);
5720 				 FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_debug_info);
5721 			     END IF;
5722 
5723 			IF (G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
5724 	           	    FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
5725 			END IF;
5726 
5727 			APP_EXCEPTION.RAISE_EXCEPTION;
5728 	        END;
5729 
5730             END LOOP;
5731             L_INV_SELF_INS.DELETE;
5732         END IF;
5733     END LOOP;
5734     CLOSE INSERT_TAX_SELF;
5735 
5736     --Bug9021265
5737     --Raising error if any distribution frozen dist is missing
5738     --as discussed  : Himesh,Atul,Venkat,Kiran,Ranjith,Taniya
5739 
5740     BEGIN
5741      --bug10140354 starts
5742 
5743     OPEN frozen_dist_del;
5744     FETCH frozen_dist_del BULK COLLECT INTO l_frozen_tax_del;
5745     CLOSE frozen_dist_del;
5746 
5747     EXCEPTION
5748     WHEN NO_DATA_FOUND THEN
5749          NULL;
5750     END;
5751 
5752       IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5753         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name, 'Frozen Deleted Dist Count: '||sql%rowcount);
5754       END IF;
5755 
5756         IF (l_frozen_tax_del.count > 0) Then --bug10140354
5757 
5758     For i in l_frozen_tax_del.FIRST .. l_frozen_tax_del.LAST LOOP
5759 
5760     insert into ap_errors_gt(invoice_id , reference_key2 , reference_key1 , message_text)
5761     values (
5762              l_frozen_tax_del(i).invoice_id ,
5763              l_frozen_tax_del(i).detail_tax_dist_id ,
5764 	     l_frozen_tax_del(i).summary_tax_line_id,
5765 	     'Frozen Tax Distribution Deleted by EBTax. This would cause orphan events.'
5766 	   );
5767 
5768       END LOOP;
5769 
5770 
5771   /*  IF l_frozen_tax_dist_id  IS NOT NULL THEN
5772        -------------------------------------------------------------------
5773        l_debug_info := 'Froze Dist Deleted: ' ||l_frozen_tax_dist_id;
5774        IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5775            FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
5776        END IF;
5777        l_debug_info := 'Summary Tax Line ID for this Dist: '||l_frozen_summary_tax_line_id;
5778        IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5779            FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
5780        END IF; */
5781        -------------------------------------------------------------------
5782 
5783        /* Bug 9777752
5784        FND_MESSAGE.SET_NAME('SQLAP','AP_DEBUG');
5785 	   FND_MESSAGE.SET_TOKEN('ERROR', 'Frozen Tax Distribution Deleted by EBTax. This would cause orphan events.');
5786 	   FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',l_curr_calling_sequence);
5787 	   FND_MESSAGE.SET_TOKEN('PARAMETERS',
5788 	                         ' P_Error_Code = '||P_Error_Code||
5789 	                         ' P_Calling_Sequence = '||P_Calling_Sequence);
5790 	   FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_debug_info);
5791        */
5792        FND_MESSAGE.SET_NAME( 'SQLAP', 'AP_FRZN_TAX_DIST_DEL' ); -- Bug 9777752
5793 
5794        IF AP_APPROVAL_PKG.G_VALIDATION_REQUEST_ID IS NULL THEN
5795           APP_EXCEPTION.RAISE_EXCEPTION;
5796        ELSE
5797           RETURN FALSE;
5798        END IF;
5799     END IF;
5800 
5801  --bug10140354 ended
5802     --Bug9021265
5803     --Raising error if any distribution frozen dist is missing
5804     --as discussed  : Himesh,Atul,Venkat,Kiran,Ranjith,Taniya
5805 
5806     -------------------------------------------------------------------
5807     l_debug_info := 'Delete tax distributions';
5808     -------------------------------------------------------------------
5809     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5810         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
5811     END IF;
5812 
5813     DELETE FROM ap_invoice_distributions_all aid
5814      WHERE aid.invoice_distribution_id IN
5815 		(SELECT /*+ leading(gt) cardinality(gt,1) */
5816                         dist.invoice_distribution_id
5817 	           FROM zx_trx_headers_gt		gt,
5818 			ap_invoice_distributions_all	dist
5819 		  WHERE gt.application_id         = AP_ETAX_PKG.AP_APPLICATION_ID
5820 	            AND gt.entity_code            = AP_ETAX_PKG.AP_ENTITY_CODE
5821 	            AND gt.event_class_code       IN (AP_ETAX_PKG.AP_INV_EVENT_CLASS_CODE,
5822 	                                              AP_ETAX_PKG.AP_PP_EVENT_CLASS_CODE,
5823 	                                              AP_ETAX_PKG.AP_ER_EVENT_CLASS_CODE)
5824 	            AND gt.trx_id                 = dist.invoice_id
5825 		    AND dist.line_type_lookup_code IN ('REC_TAX', 'NONREC_TAX', 'TRV', 'TIPV', 'TERV')
5826 		    AND NOT EXISTS
5827 				(SELECT 'Tax Distributions'
5828 				   FROM zx_rec_nrec_dist zd
5829 				  WHERE zd.rec_nrec_tax_dist_id = dist.detail_tax_dist_id
5830 				   AND NVL(SELF_ASSESSED_FLAG, 'N') = 'N')-- bug 7422547
5831 		);                                                        --Bug7634436
5832 
5833     --Bug9021265
5834     --Raising error if any distribution frozen dist is missing
5835     --as discussed  : Himesh,Atul,Venkat,Kiran,Ranjith,Taniya
5836 
5837     l_frozen_tax_dist_id  := NULL;
5838     l_frozen_summary_tax_line_id := NULL;
5839 
5840    --bug10140354 starts
5841     BEGIN
5842 
5843     OPEN frozen_self_dist_del;
5844     FETCH frozen_self_dist_del BULK COLLECT INTO l_frozen_self_tax_del;
5845     CLOSE frozen_self_dist_del;
5846 
5847     EXCEPTION
5848     WHEN NO_DATA_FOUND THEN
5849          NULL;
5850     END;
5851     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5852        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name, 'Frozen Deleted Self Assessed Dist Count: '||sql%rowcount);
5853     END IF;
5854 
5855     IF (l_frozen_self_tax_del.count > 0) Then --bug10140354
5856 
5857     For i in l_frozen_self_tax_del.FIRST .. l_frozen_self_tax_del.LAST LOOP
5858 
5859     insert into ap_errors_gt(invoice_id , reference_key2 , reference_key1 , message_text)
5860     values (
5861              l_frozen_self_tax_del(i).invoice_id ,
5862              l_frozen_self_tax_del(i).detail_tax_dist_id ,
5863 	     l_frozen_self_tax_del(i).summary_tax_line_id,
5864 	     'Frozen Self Assessed Tax Distribution Deleted by EBTax. This would cause orphan events.'
5865 	   );
5866 
5867       END LOOP;
5868 
5869     /* IF l_frozen_tax_dist_id IS NOT NULL THEN
5870        -------------------------------------------------------------------
5871        l_debug_info := 'Froze Self Assessed Dist Deleted: '||l_frozen_tax_dist_id;
5872        IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5873            FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
5874        END IF;
5875        l_debug_info := 'Summary Tax Line ID for this Dist: '||l_frozen_summary_tax_line_id;
5876        IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5877            FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
5878        END IF; */
5879        -------------------------------------------------------------------
5880        /* Bug 9777752
5881        FND_MESSAGE.SET_NAME('SQLAP','AP_DEBUG');
5882    	   FND_MESSAGE.SET_TOKEN('ERROR', 'Frozen Tax Distribution Deleted by EBTax. This would cause orphan events.');
5883 	   FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',l_curr_calling_sequence);
5884 	   FND_MESSAGE.SET_TOKEN('PARAMETERS',
5885 	                         ' P_Error_Code = '||P_Error_Code||
5886 	                         ' P_Calling_Sequence = '||P_Calling_Sequence);
5887 	   FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_debug_info);
5888        */
5889        FND_MESSAGE.SET_NAME( 'SQLAP', 'AP_FRZN_TAX_DIST_DEL' ); -- Bug 9777752
5890 
5891        IF AP_APPROVAL_PKG.G_VALIDATION_REQUEST_ID IS NULL THEN
5892           APP_EXCEPTION.RAISE_EXCEPTION;
5893        ELSE
5894           RETURN FALSE;
5895        END IF;
5896     END IF;
5897 --bug10140354 ends
5898     --Bug9021265
5899     --Raising error if any distribution frozen dist is missing
5900     --as discussed  : Himesh,Atul,Venkat,Kiran,Ranjith,Taniya
5901     -------------------------------------------------------------------
5902     l_debug_info := 'Get self assessed distributions to delete';
5903     -------------------------------------------------------------------
5904     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5905         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
5906     END IF;
5907 
5908     DELETE FROM ap_self_assessed_tax_dist_all aid
5909      WHERE aid.invoice_distribution_id IN
5910                 (SELECT /*+ leading(gt) cardinality(gt,1) */
5911 			dist.invoice_distribution_id
5912                    FROM zx_trx_headers_gt               gt,
5913                         ap_self_assessed_tax_dist_all   dist
5914                   WHERE gt.application_id         = AP_ETAX_PKG.AP_APPLICATION_ID
5915                     AND gt.entity_code            = AP_ETAX_PKG.AP_ENTITY_CODE
5916                     AND gt.event_class_code       IN (AP_ETAX_PKG.AP_INV_EVENT_CLASS_CODE,
5917                                                       AP_ETAX_PKG.AP_PP_EVENT_CLASS_CODE,
5918                                                       AP_ETAX_PKG.AP_ER_EVENT_CLASS_CODE)
5919                     AND gt.trx_id                 = dist.invoice_id
5920                     AND dist.line_type_lookup_code IN ('REC_TAX', 'NONREC_TAX')
5921                     AND NOT EXISTS
5922                                 (SELECT 'Tax Distributions'
5923                                    FROM zx_rec_nrec_dist zd
5924                                   WHERE zd.rec_nrec_tax_dist_id = dist.detail_tax_dist_id
5925 				                   AND NVL(SELF_ASSESSED_FLAG, 'N') = 'Y')-- bug 7422547
5926                 );                                                                        --bug7634436
5927 
5928     -------------------------------------------------------------------
5929     l_debug_info := 'Synchronize line numbers for orphan distributions';
5930     -------------------------------------------------------------------
5931     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5932         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
5933     END IF;
5934 
5935     BEGIN -- Bug 9777752
5936        UPDATE ap_invoice_distributions_all aid
5937           SET invoice_line_number = (SELECT line_number
5938                                        FROM ap_invoice_lines_all ail
5939                                       WHERE ail.invoice_id          = aid.invoice_id
5940                                         AND ail.summary_tax_line_id = aid.summary_tax_line_id
5941                                         AND rownum                  = 1)
5942         WHERE aid.invoice_distribution_id IN
5943                    (SELECT /*+ leading(gt) cardinality(gt,1) */
5944                            dist.invoice_distribution_id
5945                       FROM zx_trx_headers_gt               gt,
5946                            ap_invoice_distributions_all    dist
5947                      WHERE gt.application_id         = 200
5948                        AND gt.entity_code            = 'AP_INVOICES'
5949                        AND gt.event_class_code       IN ('STANDARD INVOICES', 'PREPAYMENT INVOICES', 'EXPENSE REPORTS')
5950                        AND gt.trx_id                 = dist.invoice_id
5951                        AND dist.line_type_lookup_code IN ('REC_TAX', 'NONREC_TAX', 'TRV', 'TIPV', 'TERV')
5952                        AND dist.invoice_line_number NOT IN
5953                                                            (SELECT line_number
5954                                                               FROM ap_invoice_lines_all al
5955                                                              WHERE al.invoice_id  = dist.invoice_id)
5956                    );
5957 
5958     EXCEPTION
5959        WHEN DUP_VAL_ON_INDEX THEN
5960           IF INSTRB( SQLERRM, 'AP_INVOICE_DISTRIBUTION_U1' ) <> 0 THEN
5961              FND_MESSAGE.SET_NAME('SQLAP', 'AP_ERR_TAX_DIST_SYNC') ;
5962 
5963              IF AP_APPROVAL_PKG.G_VALIDATION_REQUEST_ID IS NULL THEN
5964                 APP_EXCEPTION.RAISE_EXCEPTION;
5965              ELSE
5966                 RETURN FALSE;
5967              END IF;
5968           END IF ;
5969     END ; -- Bug 9777752
5970 
5971     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5972         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name, 'Orphan Distributions updated: '||sql%rowcount);
5973     END IF;
5974 
5975     RETURN TRUE;
5976 
5977   EXCEPTION
5978     WHEN OTHERS THEN
5979       IF (SQLCODE <> -20001) THEN
5980           FND_MESSAGE.SET_NAME('SQLAP','AP_DEBUG');
5981           FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
5982           FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',l_curr_calling_sequence);
5983           FND_MESSAGE.SET_TOKEN('PARAMETERS',
5984           		' P_Invoice_Id = '||P_Invoice_Header_Rec.Invoice_Id||
5985           		' P_Error_Code = '||P_Error_Code||
5986           		' P_Calling_Sequence = '||P_Calling_Sequence);
5987           FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_debug_info);
5988       END IF;
5989 
5990       IF (insert_tax_dist%ISOPEN ) THEN
5991         CLOSE insert_tax_dist;
5992       END IF;
5993 
5994       IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
5995          FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
5996       END IF;
5997 
5998       --bug10140354
5999      IF AP_APPROVAL_PKG.G_VALIDATION_REQUEST_ID IS NULL THEN
6000                   APP_EXCEPTION.RAISE_EXCEPTION;
6001                ELSE
6002 
6003                   RETURN FALSE;
6004                END IF;
6005 
6006   END Return_Tax_Distributions;
6007 
6008 /*=============================================================================
6009  |  FUNCTION - Return_Default_Import()
6010  |
6011  |  DESCRIPTION
6012  |      This function handles the return of default values for tax and trx lines
6013  |      after running the eTax service that validates and defaults info during the
6014  |      import program.  This function will modify the pl/sql tables used in the
6015  |      import program.
6016  |
6017  |  PARAMETERS
6018  |      P_Invoice_Header_Rec - Header info
6019  |      P_All_Error_Messages - Should API return 1 error message or allow
6020  |                             calling point to get them from message stack
6021  |      P_error_code - Error code to be returned
6022  |      P_calling_sequence -  Calling sequence
6023  |	P_Invoice_Status -Status flag to check if further processing should be done.--Bug6625518
6024  |
6025  |  MODIFICATION HISTORY
6026  |    DATE          Author         Action
6027  |    20-JAN-2004   SYIDNER        Created
6028  |
6029  *============================================================================*/
6030   FUNCTION Return_Default_Import(
6031              P_Invoice_Header_Rec        IN OUT NOCOPY AP_IMPORT_INVOICES_PKG.r_invoice_info_rec,
6032              P_Invoice_Lines_Tab         IN OUT NOCOPY AP_IMPORT_INVOICES_PKG.t_lines_table,
6033              P_All_Error_Messages        IN VARCHAR2,
6034              P_Error_Code                OUT NOCOPY VARCHAR2,
6035              P_Calling_Sequence          IN VARCHAR2,
6036 	         P_Invoice_Status		     OUT NOCOPY VARCHAR2) --Bug6625518
6037 	     RETURN BOOLEAN
6038   IS
6039 
6040     l_debug_info                 VARCHAR2(2000);
6041     l_curr_calling_sequence      VARCHAR2(4000);
6042 
6043     trans_lines_gt     zx_transaction_lines_gt%ROWTYPE;
6044     tax_lines_gt       zx_import_tax_lines_gt%ROWTYPE;
6045 
6046     TYPE rej_lines_rec IS RECORD (
6047       invoice_id zx_validation_errors_gt.trx_id%TYPE,
6048       line_number zx_validation_errors_gt.trx_line_id%TYPE,
6049       rejection_code zx_validation_errors_gt.message_name%TYPE,
6050       summary_tax_line_number zx_validation_errors_gt.summary_tax_line_number%TYPE,
6051       invoice_line_id ap_invoice_lines_interface.invoice_line_id%TYPE);
6052 
6053     TYPE rej_lines_tab IS TABLE OF rej_lines_rec;
6054     rej_lines rej_lines_tab;
6055 
6056     CURSOR Trx_Lines_c (c_line_number IN NUMBER) IS
6057     SELECT *
6058       FROM zx_transaction_lines_gt
6059      WHERE trx_id = P_Invoice_Header_Rec.invoice_id
6060        AND trx_line_id = c_line_number;
6061 
6062     CURSOR Tax_Lines_c (c_line_number IN NUMBER) IS
6063     SELECT *
6064       FROM zx_import_tax_lines_gt
6065      WHERE trx_id = P_Invoice_Header_Rec.invoice_id
6066        AND summary_tax_line_number = c_line_number;
6067 
6068     CURSOR rejections_gt IS
6069     SELECT ve.trx_id invoice_id,
6070            ve.trx_line_id line_number,
6071            ve.message_name rejection_code,
6072            ve.summary_tax_line_number summary_tax_line_number,
6073            ail.invoice_line_id invoice_line_id
6074       FROM zx_validation_errors_gt ve,
6075            ap_invoice_lines_interface ail
6076      WHERE ve.application_id = 200
6077        AND ve.entity_code = 'AP_INVOICES'
6078        AND ve.event_class_code IN ('STANDARD INVOICES', 'PREPAYMENT INVOICES', 'EXPENSE REPORTS')
6079        AND ve.trx_id = P_Invoice_Header_Rec.invoice_id
6080        AND ail.invoice_id = ve.trx_id;
6081        --AND ail.line_number = ve.trx_line_id; --  bug6255826
6082 
6083     -- Bug 6665695
6084     l_api_name VARCHAR2(100):='AP_ETAX_SERVICES_PKG.Return_Default_Import';
6085 
6086   BEGIN
6087     l_curr_calling_sequence := 'AP_ETAX_SERVICES_PKG.Return_Default_Import<-' ||
6088                                P_calling_sequence;
6089     -----------------------------------------------------------------
6090     l_debug_info := 'Step 1: Get rejections from zx_trans_lines_val_errs'||
6091                     ' table';
6092     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
6093         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
6094     END IF;
6095     -----------------------------------------------------------------
6096     BEGIN
6097       OPEN rejections_gt;
6098       FETCH rejections_gt BULK COLLECT INTO rej_lines;
6099       CLOSE rejections_gt;
6100     END;
6101 
6102     IF (rej_lines.COUNT <> 0 ) THEN
6103       FOR i IN rej_lines.FIRST..rej_lines.LAST LOOP
6104        P_Invoice_Header_Rec.import_status :='N';  --bug 15862708
6105         -----------------------------------------------------------------
6106         l_debug_info := 'Step 2: Create rejections in the import rejections '||
6107                         'table';
6108         IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
6109                FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
6110         END IF;
6111         -----------------------------------------------------------------
6112         IF (rej_lines(i).line_number IS NULL) THEN -- rejection is at invoice level
6113           IF (AP_IMPORT_UTILITIES_PKG.insert_rejections(
6114                 p_parent_table        => 'AP_INVOICES_INTERFACE',
6115                 p_parent_id           => rej_lines(i).invoice_id,
6116                 p_reject_code         => rej_lines(i).rejection_code,
6117                 p_last_updated_by     => l_user_id,
6118                 p_last_update_login   => l_login_id,
6119                 p_calling_sequence    => l_curr_calling_sequence) <> TRUE) THEN
6120 
6121                RETURN FALSE;
6122           END IF;
6123 
6124         ELSE  -- rejection is at line level
6125 
6126           IF (AP_IMPORT_UTILITIES_PKG.insert_rejections(
6127                 p_parent_table        => 'AP_INVOICE_LINES_INTERFACE',
6128                 p_parent_id           => rej_lines(i).invoice_line_id,
6129                 p_reject_code         => rej_lines(i).rejection_code,
6130                 p_last_updated_by     => l_user_id,
6131                 p_last_update_login   => l_login_id,
6132                 p_calling_sequence    => l_curr_calling_sequence) <> TRUE) THEN
6133 		RETURN FALSE;
6134           END IF;
6135 
6136         END IF;
6137 
6138       END LOOP;
6139 
6140       p_invoice_status := 'N';--Bug6625518 Set processing flag to 'N' if there are rejections
6141     ELSE  -- there are no rejections for this invoice.  Update pl/sql tables
6142           -- with defaulted info
6143 
6144       -- No need to update invoice header import pl/sql record since
6145       -- eTax will not default any column.
6146 
6147       -----------------------------------------------------------------
6148       l_debug_info := 'Step 3: Loop through lines import pl/sql table';
6149       IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
6150           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
6151       END IF;
6152       -----------------------------------------------------------------
6153       IF (P_Invoice_Lines_Tab.COUNT > 0) THEN
6154         FOR i IN P_Invoice_Lines_Tab.FIRST..P_Invoice_Lines_Tab.LAST LOOP
6155             IF P_Invoice_Lines_Tab(i).invoice_id = P_Invoice_Header_Rec.invoice_id THEN
6156                -------------------------------------------------------------------
6157                l_debug_info := 'Step 4: Get trx and tax line info to update pl/sql '||
6158                                'table';
6159                IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
6160                    FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
6161                END IF;
6162                -------------------------------------------------------------------
6163                IF (P_Invoice_Lines_Tab(i).line_type_lookup_code <> 'TAX') THEN
6164 
6165                    BEGIN
6166                      OPEN Trx_Lines_c (P_Invoice_Lines_Tab(i).line_number);
6167                     FETCH Trx_Lines_c INTO trans_lines_gt;
6168                     CLOSE Trx_Lines_c;
6169                    END;
6170                    -----------------------------------------------------------------
6171                    l_debug_info := 'Step 5: Update non-tax lines in pl/sql table';
6172                    IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
6173                       FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
6174                    END IF;
6175                    -----------------------------------------------------------------
6176                    P_Invoice_Lines_Tab(i).trx_business_category := trans_lines_gt.trx_business_category;
6177                    P_Invoice_Lines_Tab(i).primary_intended_use := trans_lines_gt.line_intended_use;
6178                    P_Invoice_Lines_Tab(i).product_fisc_classification := trans_lines_gt.product_fisc_classification;
6179                    P_Invoice_Lines_Tab(i).product_type := trans_lines_gt.product_type;
6180                    P_Invoice_Lines_Tab(i).product_category := trans_lines_gt.product_category;
6181                    -----------------------------------------------------------------
6182                    -- Bug 6665695 -- Added assignment for Tax Classification Code
6183                    -----------------------------------------------------------------
6184                    l_debug_info := 'Step 5.1 Getting INPUT_TAX_CLASSIFICATION_CODE:'
6185                                     ||trans_lines_gt.INPUT_TAX_CLASSIFICATION_CODE;
6186                    IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
6187                        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
6188                    END IF;
6189                    -----------------------------------------------------------------
6190                    --Bug12660669 Start: Added source, inv type and line type check
6191 		           IF (p_invoice_header_rec.source = 'SelfService' AND
6192     				   p_invoice_header_rec.invoice_type_lookup_code = 'EXPENSE REPORT' AND
6193 	    			   P_Invoice_Lines_Tab(i).line_type_lookup_code = 'MISCELLANEOUS' ) THEN
6194 		    		   P_Invoice_Lines_Tab(i).tax_classification_code := NULL;
6195 			       ELSE
6196 				       P_Invoice_Lines_Tab(i).tax_classification_code :=
6197 									trans_lines_gt.INPUT_TAX_CLASSIFICATION_CODE;
6198 			       END IF; --Bug12660669 End - Added source, inv type and line type check
6199                ELSE  -- It is a tax line
6200 
6201                    BEGIN
6202                      OPEN Tax_Lines_c (P_Invoice_Lines_Tab(i).line_number);
6203                     FETCH Tax_Lines_c INTO tax_lines_gt;
6204                     CLOSE Tax_Lines_c;
6205                    END;
6206 
6207                    -----------------------------------------------------------------
6208                    l_debug_info := 'Step 6: Update tax lines in pl/sql table '||P_Invoice_Lines_Tab(i).line_number||
6209 			                       ' Line Type'||P_Invoice_Lines_Tab(i).line_type_lookup_code;
6210                    IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
6211                        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
6212                    END IF;
6213                    -----------------------------------------------------------------
6214 			       -----------------------------------------------------------------
6215                    l_debug_info := 'Step 6.1: Tax attributes: tax_regime_code'||tax_lines_gt.tax_regime_code||
6216 			                       ' tax_jurisdiction_code'||tax_lines_gt.tax_jurisdiction_code||
6217 			                       ' tax_status_code'||tax_lines_gt.tax_status_code ||
6218 			                       ' tax_rate_id'||tax_lines_gt.tax_rate_id||
6219 			                       ' tax_rate_code'||tax_lines_gt.tax_rate_code||
6220 			                       ' tax_rate'||tax_lines_gt.tax_rate;
6221                    IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
6222                        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
6223                    END IF;
6224                    -----------------------------------------------------------------
6225                    --6255826 Added Tax_regime_code and Tax assignments
6226                    P_Invoice_Lines_Tab(i).tax_regime_code := tax_lines_gt.tax_regime_code;
6227                    P_Invoice_Lines_Tab(i).tax := tax_lines_gt.tax;
6228                    P_Invoice_Lines_Tab(i).tax_jurisdiction_code := tax_lines_gt.tax_jurisdiction_code;
6229                    P_Invoice_Lines_Tab(i).tax_status_code := tax_lines_gt.tax_status_code;
6230                    P_Invoice_Lines_Tab(i).tax_rate_id := tax_lines_gt.tax_rate_id;
6231                    P_Invoice_Lines_Tab(i).tax_rate_code := tax_lines_gt.tax_rate_code;
6232                    P_Invoice_Lines_Tab(i).tax_rate := tax_lines_gt.tax_rate;
6233 
6234                    IF (P_Invoice_Header_Rec.tax_only_flag = 'Y') THEN
6235                        -- If the invoice is tax only, copy any defaulted values from the
6236                        -- trx global temp table to the tax line
6237                       BEGIN
6238                         OPEN Trx_Lines_c (P_Invoice_Lines_Tab(i).line_number);
6239                        FETCH Trx_Lines_c INTO trans_lines_gt;
6240                        CLOSE Trx_Lines_c;
6241                          END;
6242 
6243                        -----------------------------------------------------------------
6244                        l_debug_info := 'Step 7: Update tax line if tax only invoice in pl/sql table';
6245                        IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
6246                            FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
6247                        END IF;
6248                        -----------------------------------------------------------------
6249                        P_Invoice_Lines_Tab(i).trx_business_category := trans_lines_gt.trx_business_category;
6250                        P_Invoice_Lines_Tab(i).primary_intended_use := trans_lines_gt.line_intended_use;
6251                        P_Invoice_Lines_Tab(i).product_fisc_classification := trans_lines_gt.product_fisc_classification;
6252                        P_Invoice_Lines_Tab(i).product_type := trans_lines_gt.product_type;
6253                        P_Invoice_Lines_Tab(i).product_category := trans_lines_gt.product_category;
6254 
6255                    END IF;
6256                 END IF;
6257                END IF;
6258               END LOOP;
6259           END IF;  -- lines pl/sql table has records.
6260           p_invoice_status := 'Y';--Bug6625518 Set processing flag to Y if no rejections are there
6261      END IF;  -- there are no rejections for this invoice
6262 
6263    RETURN TRUE;
6264 
6265   EXCEPTION
6266     WHEN OTHERS THEN
6267       IF (SQLCODE <> -20001) THEN
6268         FND_MESSAGE.SET_NAME('SQLAP','AP_DEBUG');
6269         FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
6270         FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',l_curr_calling_sequence);
6271         FND_MESSAGE.SET_TOKEN('PARAMETERS',
6272           ' P_Invoice_Id = '||P_Invoice_Header_Rec.Invoice_Id||
6273           ' P_Error_Code = '||P_Error_Code||
6274           ' P_Calling_Sequence = '||P_Calling_Sequence);
6275         FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_debug_info);
6276       END IF;
6277 
6278       APP_EXCEPTION.RAISE_EXCEPTION;
6279   END Return_Default_Import;
6280 /*=============================================================================
6281  |  FUNCTION - Return_Tax_Quote()
6282  |
6283  |  DESCRIPTION
6284  |      This function handles the return of tax lines when the calculate service is
6285  |      ran for quote.  This case is specific for recurring invoices and invoice
6286  |      lines created through distribution sets.
6287  |
6288  |  PARAMETERS
6289  |      P_Invoice_Header_Rec - Header info
6290  |      P_error_code - Error code to be returned
6291  |      P_calling_sequence -  Calling sequence
6292  |
6293  |  MODIFICATION HISTORY
6294  |    DATE          Author         Action
6295  |    03-NOV-2003   SYIDNER        Created
6296  |
6297  *============================================================================*/
6298   FUNCTION Return_Tax_Quote(
6299              P_Invoice_Header_Rec        IN ap_invoices_all%ROWTYPE,
6300              P_Error_Code                OUT NOCOPY VARCHAR2,
6301              P_Calling_Sequence          IN VARCHAR2) RETURN BOOLEAN
6302 
6303   IS
6304 
6305     l_debug_info                 VARCHAR2(240);
6306     l_curr_calling_sequence      VARCHAR2(4000);
6307     l_api_name			  CONSTANT VARCHAR2(100) := 'Return_Tax_Quote';
6308 
6309   BEGIN
6310 
6311     l_curr_calling_sequence := 'AP_ETAX_UTILITY_PKG.Return_Tax_Quote<-'||
6312                                P_calling_sequence;
6313 
6314     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
6315        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_curr_calling_sequence);
6316     END IF;
6317     -------------------------------------------------------------------
6318     l_debug_info := 'Step 1: Get data from zx_detail_tax_lines_gt and '||
6319                     'update amount and base_amount for line(s)';
6320     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
6321        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
6322     END IF;
6323     -------------------------------------------------------------------
6324     BEGIN
6325       UPDATE ap_invoice_lines_all ail
6326          SET (ail.amount, ail.base_amount) =
6327              (SELECT NVL(ail.amount, 0) - SUM(NVL(zdl.tax_amt,0)),
6328                      NVL(ail.base_amount,0) - SUM(NVL(zdl.tax_amt_funcl_curr,0))
6329                 FROM zx_detail_tax_lines_gt zdl
6330              WHERE zdl.application_id = 200
6331                  AND zdl.entity_code = 'AP_INVOICES'
6332 		         AND zdl.event_class_code IN ('STANDARD INVOICES', 'PREPAYMENT INVOICES', 'EXPENSE REPORTS')
6333                  AND zdl.trx_id = ail.invoice_id
6334                  AND zdl.trx_line_id = ail.line_number
6335                  AND NVL(zdl.self_assessed_flag, 'N') = 'N'
6336                  AND NVL(zdl.tax_amt_included_flag, 'N') = 'N')
6337        WHERE ail.invoice_id = P_Invoice_Header_Rec.invoice_id
6338          AND ail.line_type_lookup_code NOT IN ('TAX', 'AWT');
6339 
6340     EXCEPTION
6341       WHEN no_data_found THEN
6342         null;
6343 
6344     END;
6345 
6346     RETURN TRUE;
6347 
6348   EXCEPTION
6349     WHEN OTHERS THEN
6350       IF (SQLCODE <> -20001) THEN
6351         FND_MESSAGE.SET_NAME('SQLAP','AP_DEBUG');
6352         FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
6353         FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',l_curr_calling_sequence);
6354         FND_MESSAGE.SET_TOKEN('PARAMETERS',
6355           ' P_Invoice_Id = '||P_Invoice_Header_Rec.Invoice_Id||
6356           ' P_Error_Code = '||P_Error_Code||
6357           ' P_Calling_Sequence = '||P_Calling_Sequence);
6358         FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_debug_info);
6359       END IF;
6360 
6361       APP_EXCEPTION.RAISE_EXCEPTION;
6362 
6363   END Return_Tax_Quote;
6364 
6365 /*=============================================================================
6366  |  FUNCTION - Return_Error_Messages()
6367  |
6368  |  DESCRIPTION
6369  |      This function will handle the return of the error messages from the
6370  |      eTax services.  The services can return 1 or more error messages or
6371  |      warnings.  The calling point will indicate the API if it wants the return of
6372  |      only 1 error messages through the parameter P_All_Error_Messages = N
6373  |      eventhough the service returns more than one error message.
6374  |      If the calling point requires all the error messages, it will need to get them
6375  |      directly from the message stack.
6376  |
6377  |  PARAMETERS
6378  |
6379  |  MODIFICATION HISTORY
6380  |    DATE          Author         Action
6381  |    05-NOV-2003   SYIDNER        Created
6382  |
6383  *============================================================================*/
6384   FUNCTION Return_Error_Messages(
6385              P_All_Error_Messages        IN VARCHAR2,
6386              P_Msg_Count                 IN NUMBER,
6387              P_Msg_Data                  IN VARCHAR2,
6388              P_Error_Code                OUT NOCOPY VARCHAR2,
6389              P_Calling_Sequence          IN VARCHAR2) RETURN BOOLEAN
6390 
6391   IS
6392 
6393     l_debug_info                 VARCHAR2(240);
6394     l_curr_calling_sequence      VARCHAR2(4000);
6395     l_api_name                   CONSTANT VARCHAR2(100) := 'Return_Error_Messages';
6396 
6397   BEGIN
6398 
6399     l_curr_calling_sequence := 'AP_ETAX_UTILITY_PKG.Return_Error_Messages<-'||
6400                                P_calling_sequence;
6401 
6402     -------------------------------------------------------------------
6403     l_debug_info := 'Get error message from eTax API';
6404     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
6405         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
6406     END IF;
6407     -------------------------------------------------------------------
6408 
6409     BEGIN
6410     SELECT message_text
6411       INTO p_error_code
6412       FROM zx_errors_gt
6413      WHERE rownum = 1;
6414     EXCEPTION
6415 	WHEN OTHERS THEN
6416 	    -------------------------------------------------------------------
6417 	    l_debug_info := 'Get error message from stack';
6418 	    IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
6419 	        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
6420 	    END IF;
6421 	    -------------------------------------------------------------------
6422 	    IF (NVL(P_Msg_Count, 0) <= 1) THEN
6423 	         P_Error_Code := P_Msg_Data;
6424 
6425 	    ELSE
6426 	      IF (P_All_Error_Messages = 'N') THEN
6427 	        LOOP
6428 	          P_Error_Code := FND_MSG_PUB.Get;
6429 	          EXIT;
6430 	        END LOOP;
6431 	      ELSE
6432 	        P_Error_Code := NULL;
6433 	      END IF;
6434 	    END IF;
6435     END;
6436 
6437     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
6438       FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,p_error_code);
6439     END IF;
6440 
6441     RETURN TRUE;
6442 
6443     EXCEPTION
6444       WHEN OTHERS THEN
6445        IF (SQLCODE <> -20001) THEN
6446          FND_MESSAGE.SET_NAME('SQLAP','AP_DEBUG');
6447          FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
6448          FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',l_curr_calling_sequence);
6449          FND_MESSAGE.SET_TOKEN('PARAMETERS',
6450             ' P_Error_Code = '||P_Error_Code||
6451              ' P_Calling_Sequence = '||P_Calling_Sequence);
6452          FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_debug_info);
6453        END IF;
6454 
6455        APP_EXCEPTION.RAISE_EXCEPTION;
6456 
6457   END Return_Error_Messages;
6458 
6459 /*=============================================================================
6460  |  FUNCTION - Is_Tax_Already_Calc_Inv()
6461  |
6462  |  DESCRIPTION
6463  |    This function will return TRUE if any taxable line in the invoice has the
6464  |    tax_already_calculated_flag equals Y.  It will return FALSE otherwise.
6465  |
6466  |  PARAMETERS
6467  |    P_Invoice_Id - Invoice Id
6468  |    P_Calling_Sequence - calling sequence
6469  |
6470  |  MODIFICATION HISTORY
6471  |    DATE          Author         Action
6472  |    29-DEC-2003   SYIDNER        Created
6473  |
6474  *============================================================================*/
6475   FUNCTION Is_Tax_Already_Calc_Inv(
6476              P_Invoice_Id                IN NUMBER,
6477              P_Calling_Sequence          IN VARCHAR2) RETURN BOOLEAN
6478   IS
6479 
6480     l_debug_info                        VARCHAR2(240);
6481     l_curr_calling_sequence             VARCHAR2(4000);
6482     l_tax_already_calculated_flag       VARCHAR2(1) := 'N';
6483     l_api_name			  CONSTANT VARCHAR2(100) := 'Is_Tax_Already_Calc_Inv';
6484 
6485     -- Modified this select to include the TAX only case
6486     CURSOR tax_already_calculated IS
6487     SELECT 'Y'
6488 --- Start for bug 6485124
6489     FROM   zx_lines_det_factors
6490      WHERE  trx_id = p_invoice_id
6491      AND application_id        =  200
6492      AND entity_code   =  'AP_INVOICES'
6493      AND event_class_code IN
6494          ('STANDARD INVOICES', 'PREPAYMENT INVOICES', 'EXPENSE REPORTS')
6495      AND ROWNUM=1;
6496 --- End for bug 6485124
6497 -- commented for bug 6485124
6498 /*      FROM ap_invoice_lines_all
6499      WHERE invoice_id = p_invoice_id
6500        AND line_type_lookup_code <> 'AWT'
6501        AND (tax_already_calculated_flag = 'Y'
6502              OR  summary_tax_line_id IS NOT NULL)
6503        AND ROWNUM = 1; */
6504 
6505   BEGIN
6506 
6507     l_curr_calling_sequence := 'AP_ETAX_UTILITY_PKG.Is_Tax_Already_Called_Inv<-'||
6508                                P_calling_sequence;
6509 
6510     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
6511 	   FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_curr_calling_sequence);
6512 	END IF;
6513 
6514     -------------------------------------------------------------------
6515     l_debug_info := 'Step 1: Get tax_already_calculated_flag for any '||
6516                     'taxable line in the invoice';
6517     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
6518 	   FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
6519 	END IF;
6520     -------------------------------------------------------------------
6521     OPEN tax_already_calculated;
6522     FETCH tax_already_calculated
6523      INTO l_tax_already_calculated_flag;
6524       CLOSE tax_already_calculated;
6525 
6526     IF (l_tax_already_calculated_flag = 'Y') THEN
6527        -------------------------------------------------------------------
6528        l_debug_info := 'Step 1.1: Tax Already Calculated Flag: '||l_tax_already_calculated_flag;
6529        IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
6530     	   FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
6531        END IF;
6532       -------------------------------------------------------------------
6533       RETURN TRUE;
6534 
6535     ELSE
6536       RETURN FALSE;
6537 
6538     END IF;
6539 
6540   EXCEPTION
6541     WHEN OTHERS THEN
6542       IF (SQLCODE <> -20001) THEN
6543         FND_MESSAGE.SET_NAME('SQLAP','AP_DEBUG');
6544         FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
6545         FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',l_curr_calling_sequence);
6546         FND_MESSAGE.SET_TOKEN('PARAMETERS',
6547           ' P_Invoice_Id = '||P_Invoice_Id||
6548           ' P_Calling_Sequence = '||P_Calling_Sequence);
6549         FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_debug_info);
6550       END IF;
6551 
6552       IF (tax_already_calculated%ISOPEN ) THEN
6553         CLOSE tax_already_calculated;
6554       END IF;
6555 
6556       APP_EXCEPTION.RAISE_EXCEPTION;
6557 
6558   END Is_Tax_Already_Calc_Inv;
6559 
6560 
6561 
6562 
6563  /*=============================================================================
6564  |  FUNCTION - Is_Tax_Already_Calc_Inv_char()
6565  |
6566  |  DESCRIPTION
6567  |    This function will return Y if any taxable line in the invoice has the
6568  |    tax_already_calculated_flag equals Y.  It will return N otherwise.
6569  |
6570  |    This function is same of Is_Tax_Already_Calc_Inv except that
6571  |	it returns VARCHAR instead of BOOLEAN.
6572  |
6573  |  PARAMETERS
6574  |    P_Invoice_Id - Invoice Id
6575  |    P_Calling_Sequence - calling sequence
6576  |
6577  |  MODIFICATION HISTORY
6578  |    DATE          Author         Action
6579  |    29-DEC-2003   SYIDNER        Created
6580  |
6581  *============================================================================*/
6582   FUNCTION Is_Tax_Already_Calc_Inv_char(
6583              P_Invoice_Id                IN NUMBER,
6584              P_Calling_Sequence          IN VARCHAR2) RETURN VARCHAR2
6585   IS
6586 
6587     l_debug_info                        VARCHAR2(240);
6588     l_curr_calling_sequence             VARCHAR2(4000);
6589     l_tax_already_calculated_flag       VARCHAR2(1) := 'N';
6590     l_api_name			  CONSTANT VARCHAR2(100) := 'Is_Tax_Already_Calc_Inv_char';
6591 
6592 
6593   BEGIN
6594 
6595     l_curr_calling_sequence := 'AP_ETAX_UTILITY_PKG.Is_Tax_Already_Called_Inv<-'||
6596                                P_calling_sequence;
6597 
6598     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
6599 	   FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_curr_calling_sequence);
6600 	END IF;
6601 
6602 
6603     -------------------------------------------------------------------
6604     l_debug_info := 'Step 1: Get tax_already_calculated_flag for any '||
6605                     'taxable line in the invoice';
6606     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
6607 	   FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
6608 	END IF;
6609     -------------------------------------------------------------------
6610      SELECT 'Y'
6611       INTO l_tax_already_calculated_flag
6612       FROM ap_invoice_lines_all
6613      WHERE invoice_id = p_invoice_id
6614        AND line_type_lookup_code <> 'AWT'
6615        AND (tax_already_calculated_flag = 'Y'
6616              OR  summary_tax_line_id IS NOT NULL)
6617        AND ROWNUM = 1;
6618 
6619     -------------------------------------------------------------------
6620     l_debug_info := 'Step 1.1: Tax_already_calculated_flag '||l_tax_already_calculated_flag;
6621     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
6622 	   FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
6623 	END IF;
6624     -------------------------------------------------------------------
6625 
6626    RETURN(l_tax_already_calculated_flag);
6627 
6628   EXCEPTION
6629     WHEN NO_DATA_FOUND THEN
6630       RETURN(l_tax_already_calculated_flag);
6631     WHEN OTHERS THEN
6632       IF (SQLCODE <> -20001) THEN
6633         FND_MESSAGE.SET_NAME('SQLAP','AP_DEBUG');
6634         FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
6635         FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',l_curr_calling_sequence);
6636         FND_MESSAGE.SET_TOKEN('PARAMETERS',
6637           ' P_Invoice_Id = '||P_Invoice_Id||
6638           ' P_Calling_Sequence = '||P_Calling_Sequence);
6639         FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_debug_info);
6640       END IF;
6641 
6642       APP_EXCEPTION.RAISE_EXCEPTION;
6643 
6644   END Is_Tax_Already_Calc_Inv_char;
6645 
6646 /*=============================================================================
6647  |  FUNCTION - Is_Tax_Already_Dist_Inv()
6648  |
6649  |  DESCRIPTION
6650  |    This function will return TRUE if any taxable dist in the invoice has the
6651  |    tax_already_distributed_flag equals Y.  It will return FALSE otherwise.
6652  |
6653  |  PARAMETERS
6654  |    P_Invoice_Id - Invoice Id
6655  |    P_Calling_Sequence - calling sequence
6656  |
6657  |  MODIFICATION HISTORY
6658  |    DATE          Author         Action
6659  |    29-DEC-2003   SYIDNER        Created
6660  |
6661  *============================================================================*/
6662   FUNCTION Is_Tax_Already_Dist_Inv(
6663              P_Invoice_Id                IN NUMBER,
6664              P_Calling_Sequence          IN VARCHAR2) RETURN BOOLEAN
6665   IS
6666 
6667     l_debug_info                        VARCHAR2(240);
6668     l_curr_calling_sequence             VARCHAR2(4000);
6669     l_tax_already_distributed_flag       VARCHAR2(1) := 'N';
6670     l_api_name			  CONSTANT VARCHAR2(100) := 'Is_Tax_Already_Dist_Inv';
6671 
6672 
6673     -- Modified this select to include the TAX only case
6674     CURSOR etax_already_distributed IS
6675     SELECT 'Y'
6676       FROM ap_invoice_distributions_all
6677      WHERE invoice_id = p_invoice_id
6678        AND line_type_lookup_code <> 'AWT'
6679        AND (tax_already_distributed_flag = 'Y'
6680             OR detail_tax_dist_id IS NOT NULL)
6681        AND (related_id IS NULL
6682             OR related_id = invoice_distribution_id)
6683        AND ROWNUM = 1;
6684 
6685   BEGIN
6686 
6687     l_curr_calling_sequence := 'AP_ETAX_UTILITY_PKG.Is_Tax_Already_Dist_Inv<-'||
6688                                P_calling_sequence;
6689 
6690     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
6691        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_curr_calling_sequence);
6692     END IF;
6693     -------------------------------------------------------------------
6694     l_debug_info := 'Step 1: Get tax_already_Distributed_flag for any '||
6695                     'taxable line in the invoice';
6696     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
6697        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
6698     END IF;
6699     -------------------------------------------------------------------
6700     OPEN etax_already_distributed;
6701     FETCH etax_already_distributed INTO l_tax_already_distributed_flag;
6702     IF (etax_already_distributed%NOTFOUND) THEN
6703       CLOSE etax_already_distributed;
6704       l_tax_already_distributed_flag := 'N';
6705 
6706     END IF;
6707 
6708     IF (etax_already_distributed%ISOPEN ) THEN
6709       CLOSE etax_already_distributed;
6710     END IF;
6711 
6712     IF (l_tax_already_distributed_flag = 'Y') THEN
6713     -------------------------------------------------------------------
6714     l_debug_info := 'Step 1.1: Tax_already_Distributed_flag '||l_tax_already_distributed_flag;
6715     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
6716        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
6717     END IF;
6718     -------------------------------------------------------------------
6719 
6720       RETURN TRUE;
6721 
6722     ELSE
6723       RETURN FALSE;
6724 
6725     END IF;
6726 
6727   EXCEPTION
6728     WHEN OTHERS THEN
6729       IF (SQLCODE <> -20001) THEN
6730         FND_MESSAGE.SET_NAME('SQLAP','AP_DEBUG');
6731         FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
6732         FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',l_curr_calling_sequence);
6733         FND_MESSAGE.SET_TOKEN('PARAMETERS',
6734           ' P_Invoice_Id = '||P_Invoice_Id||
6735           ' P_Calling_Sequence = '||P_Calling_Sequence);
6736         FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_debug_info);
6737       END IF;
6738 
6739       IF (etax_already_distributed%ISOPEN ) THEN
6740         CLOSE etax_already_distributed;
6741       END IF;
6742 
6743       APP_EXCEPTION.RAISE_EXCEPTION;
6744 
6745   END Is_Tax_Already_Dist_Inv;
6746 
6747 /*=============================================================================
6748  |  FUNCTION - Get_Dist_Id_For_Tax_Dist_Id()
6749  |
6750  |  DESCRIPTION
6751  |    This function will return the invoice_distribution_id for an AP TAX (
6752  |    recoverable, non recoverable or tax variance distribution)
6753  |    based on the detail_tax_dist_id
6754  |
6755  |  PARAMETERS
6756  |    P_Tax_Dist_Id - Is the id for a Tax distribution in eTax
6757  |
6758  |  MODIFICATION HISTORY
6759  |    DATE          Author         Action
6760  |    02-APR-2004   SYIDNER        Created
6761  |
6762  *============================================================================*/
6763   FUNCTION Get_Dist_Id_For_Tax_Dist_Id(
6764              P_Tax_Dist_Id               IN NUMBER ) RETURN NUMBER
6765   IS
6766 
6767     l_debug_info                        VARCHAR2(240);
6768     l_curr_calling_sequence             VARCHAR2(4000);
6769     l_invoice_distribution_id
6770     ap_invoice_distributions_all.invoice_distribution_id%TYPE;
6771     l_api_name			  CONSTANT VARCHAR2(100) := 'Get_Dist_Id_For_Tax_Dist_Id';
6772 
6773     CURSOR invoice_dist_id IS
6774     SELECT invoice_distribution_id
6775       FROM ap_invoice_distributions_all
6776      WHERE detail_tax_dist_id = P_Tax_Dist_Id
6777     UNION /*Bug 13102935:added self assessed tax table*/
6778     SELECT invoice_distribution_id
6779       FROM AP_SELF_ASSESSED_TAX_DIST_ALL
6780      WHERE detail_tax_dist_id = P_Tax_Dist_Id;
6781 
6782   BEGIN
6783 
6784     -------------------------------------------------------------------
6785     l_debug_info := 'Step 1: Get invoice_distribution_id from tax dist id';
6786     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
6787        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
6788     END IF;
6789     -------------------------------------------------------------------
6790     OPEN  invoice_dist_id;
6791     FETCH invoice_dist_id INTO l_invoice_distribution_id;
6792     IF (invoice_dist_id%NOTFOUND) THEN
6793       CLOSE invoice_dist_id;
6794       l_invoice_distribution_id := NULL;
6795 
6796     END IF;
6797 
6798     IF (invoice_dist_id%ISOPEN ) THEN
6799       CLOSE invoice_dist_id;
6800     END IF;
6801 
6802     RETURN l_invoice_distribution_id;
6803 
6804   EXCEPTION
6805     WHEN OTHERS THEN
6806       IF (SQLCODE <> -20001) THEN
6807         FND_MESSAGE.SET_NAME('SQLAP','AP_DEBUG');
6808         FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
6809         FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',
6810           'AP_ETAX_UTILITY_PKG.Get_Dist_Id_For_Tax_Dist_Id');
6811         FND_MESSAGE.SET_TOKEN('PARAMETERS',
6812           ' P_Tax_Dist_Id = '||P_Tax_Dist_Id);
6813         FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_debug_info);
6814       END IF;
6815 
6816       IF (invoice_dist_id%ISOPEN ) THEN
6817         CLOSE invoice_dist_id;
6818       END IF;
6819 
6820       APP_EXCEPTION.RAISE_EXCEPTION;
6821 
6822   END Get_Dist_Id_For_Tax_Dist_Id;
6823 
6824 
6825   --ETAX: Invwkb
6826   /*=============================================================================
6827   |  FUNCTION - Is_Tax_Dist_Frozen()
6828   |
6829   |  DESCRIPTION
6830   |    This function will return TRUE when the tax distribution is frozen
6831   |    as per the following rules, else will return FALSE.
6832   |
6833   |    When the function returns TRUE, then user should not modify the tax
6834   |    distribution, and vice versa.
6835   |
6836   |  PARAMETERS
6837   |    P_Invoice_Id  - Is the invoice_id of the tax distribution
6838   |    P_Tax_Dist_Id - Is the id for a Tax distribution in eTax
6839   |
6840   |  USAGE: This function is called from ETAX security functions in APXINWKB.fmb
6841   |         from the form procedure 'IS_TAX_DIST_FROZEN'.
6842   |
6843   |  MODIFICATION HISTORY
6844   |    DATE          Author         Action
6845   |    01-JUL-2004   SMYADAM        Created
6846   |
6847   *============================================================================*/
6848   FUNCTION Is_Tax_Dist_Frozen(P_Invoice_Id IN NUMBER,
6849                               P_Tax_Dist_Id IN NUMBER,
6850 			      P_Calling_Sequence IN VARCHAR2) RETURN BOOLEAN IS
6851 
6852    l_posted_flag              ap_invoice_distributions.posted_flag%TYPE;
6853    l_encumbered_flag  	      ap_invoice_distributions.encumbered_flag%TYPE;
6854    l_parent_distribution_id   ap_invoice_distributions.invoice_distribution_id%TYPE;
6855    l_prepay_distribution_id   ap_invoice_distributions.invoice_distribution_id%TYPE;
6856    l_pa_addition_flag	      ap_invoice_distributions.pa_addition_flag%TYPE;
6857    l_match_status_flag	      ap_invoice_distributions.match_status_flag%TYPE;
6858    l_invoice_type_lookup_code ap_invoices.invoice_type_lookup_code%TYPE;
6859    l_line_type_lookup_code    ap_invoice_lines.line_type_lookup_code%TYPE;
6860    l_parent_line_type_lookup_code  ap_invoice_lines.line_type_lookup_code%TYPE;
6861    l_parent_line_number	      ap_invoice_lines.line_number%TYPE;
6862    l_discarded_flag	      ap_invoice_lines.discarded_flag%TYPE;
6863    l_reversal_flag	      ap_invoice_distributions.reversal_flag%TYPE;
6864    l_po_distribution_id       po_distributions.po_distribution_id%TYPE;
6865    l_rcv_transaction_id	      rcv_transactions.transaction_id%TYPE;
6866    l_parent_dist_amount	      ap_invoice_distributions.amount%TYPE;
6867    l_prepay_amount_remaining  ap_invoice_distributions.prepay_amount_remaining%TYPE;
6868    l_debug_info 	      VARCHAR2(1000);
6869    l_tax_dist_frozen          VARCHAR2(1) := 'N';
6870    l_curr_calling_sequence    VARCHAR2(2000);
6871   BEGIN
6872 
6873    l_curr_calling_sequence := p_calling_sequence || ' -> AP_Etax_Utility_Pkg.Is_Tax_Dist_Frozen';
6874 
6875    l_debug_info := 'Select values from ap_invoice_distributions for tax distribution id';
6876 
6877    SELECT aid1.invoice_distribution_id parent_distribution_id,
6878    	  ai.invoice_type_lookup_code ,
6879 	  ail.line_type_lookup_code,
6880 	  ail1.line_type_lookup_code parent_line_type_lookup_code,
6881 	  ail1.line_number parent_line_number,
6882 	  ail1.discarded_flag,
6883 	  aid.posted_flag,
6884    	  aid.encumbered_flag,
6885 	  aid.reversal_flag,
6886 	  aid.prepay_distribution_id,
6887 	  aid.pa_addition_flag,
6888 	  nvl(aid.match_status_flag,'N'),
6889 	  aid1.po_distribution_id,
6890 	  aid1.rcv_transaction_id,
6891 	  aid1.amount,
6892 	  aid1.prepay_amount_remaining
6893    INTO l_parent_distribution_id,
6894     	l_invoice_type_lookup_code,
6895 	l_line_type_lookup_code,
6896 	l_parent_line_type_lookup_code,
6897 	l_parent_line_number,
6898 	l_discarded_flag,
6899         l_encumbered_flag,
6900 	l_posted_flag,
6901 	l_reversal_flag,
6902 	l_prepay_distribution_id,
6903 	l_pa_addition_flag,
6904 	l_match_status_flag,
6905 	l_po_distribution_id,
6906 	l_rcv_transaction_id,
6907 	l_parent_dist_amount,
6908 	l_prepay_amount_remaining
6909    FROM ap_invoice_distributions aid,
6910    	ap_invoice_distributions aid1,
6911 	ap_invoices ai,
6912 	ap_invoice_lines ail,
6913 	ap_invoice_lines ail1
6914    WHERE ai.invoice_id = p_invoice_id
6915    AND ail.invoice_id = ai.invoice_id
6916    AND ail.line_number = aid.invoice_line_number
6917    AND aid.invoice_id = ai.invoice_id
6918    AND aid1.invoice_id = ai.invoice_id
6919    AND aid.invoice_distribution_id = p_tax_dist_id
6920    /* Outer join is needed since charge_applicable_to_dist_id can be NULL
6921       for Tax-Only lines */
6922    AND aid.charge_applicable_to_dist_id = aid1.invoice_distribution_id(+)
6923    AND ail1.invoice_id = p_invoice_id
6924    AND aid1.invoice_line_number = ail1.line_number(+);
6925 
6926    --Rule 1: Tax distribution is frozen if the parent Tax line has been discarded
6927    l_debug_info := 'Checking if parent tax line is discarded';
6928    IF (l_line_type_lookup_code = 'TAX' ) THEN  /* for exclusive case */
6929 
6930       IF (l_tax_dist_frozen = 'N' and l_discarded_flag = 'Y') THEN
6931          l_tax_dist_frozen := 'Y';
6932       END IF;
6933 
6934    ELSE /* for inclusive case */
6935 
6936       --SMYADAM: Need to validate if this below query is right ?
6937       --Basically we need to figure out if the Tax line has been discarded in ETAX
6938       --for the inclusive case. can we use cancel_flag , since
6939       --discard_flag is not available on zx_lines?
6940 
6941       /*
6942       SELECT zl.discarded_flag
6943       INTO l_discarded_flag
6944       FROM zx_lines zl,
6945            zx_rec_nrec_dist zd,
6946            ap_invoice_distributions aid
6947       WHERE zl.tax_line_id = zd.tax_line_id
6948       AND nvl(zl.reporting_only_flag, 'N') = 'N'
6949       AND zd.rec_nrec_tax_dist_id = aid.detail_tax_dist_id
6950       AND aid.invoice_distribution_id = p_tax_dist_id; */
6951 
6952       IF (l_tax_dist_frozen = 'N' and l_discarded_flag = 'Y') THEN
6953          l_tax_dist_frozen := 'Y';
6954       END IF;
6955 
6956    END IF;
6957 
6958 
6959    --Rule 2: Tax distribution is frozen if the parent item line is adjusted
6960    --	     by PO Price adjustment or is itself an adjustment.
6961    l_debug_info := 'Checking if parent item line is a adjustment or referred by a adjustment';
6962 
6963    IF (l_parent_line_number IS NOT NULL) THEN
6964       IF (l_tax_dist_frozen = 'N' AND
6965           (ap_invoice_lines_utility_pkg.is_line_a_adjustment(p_invoice_id,
6966        						     l_parent_line_number,
6967 						     l_curr_calling_sequence) or
6968            ap_invoice_lines_utility_pkg.line_referred_by_adjustment(
6969 	   					     p_invoice_id,
6970 						     l_parent_line_number,
6971 						     l_curr_calling_sequence))) THEN
6972 
6973 	   l_tax_dist_frozen := 'Y';
6974       END IF;
6975    END IF;
6976 
6977 
6978    --Rule 3: Tax distribution is frozen if the parent item line is corrected
6979    --	     or is itself a correction.
6980    l_debug_info := 'Checking if parent item line is corrected or is a correction';
6981 
6982    IF (l_parent_line_number IS NOT NULL) THEN
6983       IF (l_tax_dist_frozen = 'N' AND
6984           (ap_invoice_lines_utility_pkg.is_line_a_correction(p_invoice_id,
6985 	                                             l_parent_line_number,
6986 						     l_curr_calling_sequence) or
6987            ap_invoice_lines_utility_pkg.line_referred_by_corr(p_invoice_id,
6988                                                      l_parent_line_number,
6989 						     l_curr_calling_sequence))) THEN
6990 
6991            l_tax_dist_frozen := 'Y';
6992       END IF;
6993    END IF;
6994 
6995 
6996    --Rule 4: Tax distribution is frozen if Parent Item line is a
6997    --	     Prepayment application/unapplication
6998    l_debug_info := 'Checking if parent item line is a Prepayment
6999    			application/unapplication';
7000 
7001    IF (l_parent_line_number IS NOT NULL) THEN
7002       IF (l_tax_dist_frozen = 'N' AND l_parent_line_type_lookup_code = 'PREPAY') THEN
7003          l_tax_dist_frozen := 'Y';
7004       END IF;
7005    END IF;
7006 
7007 
7008    --Rule 5: Tax distribution is frozen if the tax distribution is
7009    --	     partially or fully accounted
7010    l_debug_info := 'Checking if tax distribution is partially or fully accounted';
7011 
7012    IF (l_tax_dist_frozen = 'N' AND l_posted_flag <> 'N') THEN
7013       l_tax_dist_frozen := 'Y';
7014    END IF;
7015 
7016 
7017    --Rule 6: Tax distribution is frozen if the tax distribution is
7018    -- 	     encumbered.
7019    l_debug_info := 'Checking if tax distribution is encumbered';
7020 
7021    IF (l_tax_dist_frozen = 'N' AND l_encumbered_flag IN ('Y','D','W','X')) THEN
7022       l_tax_dist_frozen := 'Y';
7023    END IF;
7024 
7025 
7026    --Rule 7: Tax distribution is frozen if the tax distribution is
7027    -- 	     transferred to projects.
7028    l_debug_info := 'Checking if tax distribution is transferred to Projects';
7029 
7030    IF (l_tax_dist_frozen = 'N' AND l_pa_addition_flag NOT IN ('N', 'E')) THEN
7031       l_tax_dist_frozen := 'Y';
7032    END IF;
7033 
7034 
7035    --Rule 8: Tax distribution is frozen if the tax distribution is
7036    --        part of a reversal pair.
7037    l_debug_info := 'Checking if tax distribution is part of a reversal pair';
7038 
7039    IF (l_tax_dist_frozen = 'N' AND l_reversal_flag = 'Y') THEN
7040       l_tax_dist_frozen := 'Y';
7041    END IF;
7042 
7043 
7044    --Rule 9: Tax distribution is frozen if the tax distribution is
7045    --	     validated (accounting event has been created).
7046    l_debug_info := 'Checking if tax distribution is validated';
7047 
7048    IF (l_tax_dist_frozen = 'N' AND l_match_status_flag <> 'N') THEN
7049       l_tax_dist_frozen := 'Y';
7050    END IF;
7051 
7052 
7053    --Rule 10: Tax distribution is frozen if the parent item distribution is
7054    --	      PO/RCV matched.
7055    l_debug_info := 'Checking if parent item distribution is PO/RCV matched';
7056 
7057    IF (l_parent_line_number IS NOT NULL) THEN
7058       IF (l_tax_dist_frozen = 'N' AND
7059            ( l_po_distribution_id IS NOT NULL
7060 	     OR l_rcv_transaction_id IS NOT NULL)) THEN
7061          l_tax_dist_frozen := 'Y';
7062       END IF;
7063    END IF;
7064 
7065 
7066    --Rule 11: Tax distribution is frozen if the parent item distribution is
7067    --	      part of Prepayment , and has been partially or fully applied.
7068    l_debug_info := 'Checking if parent item distribution is prepay dist that has been partially
7069    		    or fully applied';
7070 
7071    IF (l_parent_line_number IS NOT NULL and l_parent_line_type_lookup_code = 'PREPAY') THEN
7072        IF (l_tax_dist_frozen = 'N' AND
7073            nvl(l_prepay_amount_remaining,l_parent_dist_amount) <> l_parent_dist_amount) THEN
7074 	   l_tax_dist_frozen := 'Y';
7075        END IF;
7076    END IF;
7077 
7078 
7079    IF (l_tax_dist_frozen = 'Y') THEN
7080       return(TRUE);
7081    ELSE
7082       return(FALSE);
7083    END IF;
7084 
7085   EXCEPTION
7086     WHEN OTHERS THEN
7087      IF (SQLCODE <> -20001) THEN
7088         FND_MESSAGE.SET_NAME('SQLAP','AP_DEBUG');
7089         FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
7090         FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',l_curr_calling_sequence);
7091         FND_MESSAGE.SET_TOKEN('PARAMETERS',
7092 	                ' P_Invoice_Id = '||P_Invoice_id||
7093 	                ' P_Tax_Dist_Id = '||P_Tax_Dist_Id);
7094         FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_debug_info);
7095      END IF;
7096 
7097      APP_EXCEPTION.RAISE_EXCEPTION;
7098 
7099   END Is_Tax_Dist_Frozen;
7100 
7101 
7102 
7103   /*=============================================================================
7104   |  FUNCTION - Is_Tax_Line_Delete_Allowed()
7105   |
7106   |  DESCRIPTION
7107   |    This function will return TRUE when Detail Tax line can be deleted in ETAX,
7108   |    else will return FALSE.
7109   |
7110   |    When the function returns TRUE, then user can delete the TAX line else
7111   |      should not be allowed to delete the TAX line.
7112   |
7113   |  PARAMETERS
7114   |    P_Invoice_Id  - Is the invoice_id of the of the Invoice which owns this
7115   |                    detail tax line indirectly through the summary tax line.
7116   |    P_Detail_Tax_Line_Id - Is the id for a Detail Tax Line in eTax
7117   |
7118   |  USAGE: This function is called from ETAX security functions in APXINWKB.fmb
7119   |         from the form procedure 'IS_TAX_LINE_DELETE_ALLOWED'.
7120   |
7121   |  MODIFICATION HISTORY
7122   |    DATE          Author         Action
7123   |    04-JUL-2004   SMYADAM        Created
7124   |
7125   *============================================================================*/
7126   FUNCTION IS_TAX_LINE_DELETE_ALLOWED(P_Invoice_Id IN NUMBER,
7127                                       P_Detail_Tax_Line_Id IN NUMBER,
7128                                       P_Calling_Sequence IN VARCHAR2) RETURN BOOLEAN IS
7129 
7130      CURSOR Tax_Distributions IS
7131      SELECT aid.invoice_distribution_id
7132      FROM ap_invoice_distributions aid,
7133           zx_rec_nrec_dist zd
7134      WHERE aid.invoice_id = p_invoice_id
7135      AND aid.detail_tax_dist_id = zd.rec_nrec_tax_dist_id
7136      AND zd.tax_line_id = p_detail_tax_line_id;
7137 
7138      l_tax_invoice_distribution_id ap_invoice_distributions.invoice_distribution_id%TYPE;
7139      l_tax_line_delete_allowed     varchar2(1) := 'Y';
7140      l_debug_info		   varchar2(1000);
7141      l_curr_calling_sequence	   varchar2(2000);
7142      l_api_name			  CONSTANT VARCHAR2(100) := 'IS_TAX_LINE_DELETE_ALLOWED';
7143 
7144   BEGIN
7145 
7146    l_curr_calling_sequence := p_calling_sequence ||'->AP_Etax_Utility_Pkg.Is_Tax_Line_Delete_Allowed';
7147 
7148    IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
7149       FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_curr_calling_sequence);
7150    END IF;
7151 
7152    l_debug_info := 'Open Tax_Distributions Cursor';
7153 
7154    IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
7155       FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
7156    END IF;
7157 
7158    OPEN tax_distributions;
7159 
7160    LOOP
7161 
7162     FETCH tax_distributions INTO l_tax_invoice_distribution_id;
7163 
7164     EXIT WHEN tax_distributions%NOTFOUND OR l_tax_line_delete_allowed = 'N';
7165 
7166     IF (ap_etax_utility_pkg.is_tax_dist_frozen(p_invoice_id => p_invoice_id,
7167     					       p_tax_dist_id => l_tax_invoice_distribution_id,
7168 					       p_calling_sequence => l_curr_calling_sequence)) THEN
7169       l_tax_line_delete_allowed := 'N';
7170     END IF;
7171 
7172    END LOOP;
7173 
7174       l_debug_info := 'Tax Line Delete Allowed '||l_tax_line_delete_allowed;
7175 
7176    IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
7177       FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
7178    END IF;
7179 
7180    IF (l_tax_line_delete_allowed = 'N') THEN
7181      RETURN(FALSE);
7182    ELSE
7183      RETURN(TRUE);
7184    END IF;
7185 
7186   EXCEPTION
7187     WHEN OTHERS THEN
7188       IF (SQLCODE <> -20001) THEN
7189         FND_MESSAGE.SET_NAME('SQLAP','AP_DEBUG');
7190         FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
7191         FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',l_curr_calling_sequence);
7192         FND_MESSAGE.SET_TOKEN('PARAMETERS',
7193                            ' P_Invoice_Id = '||P_Invoice_id||
7194                            ' P_Detail_Tax_Line_Id = '||P_Detail_Tax_Line_Id);
7195         FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_debug_info);
7196       END IF;
7197 
7198       APP_EXCEPTION.RAISE_EXCEPTION;
7199 
7200   END IS_TAX_LINE_DELETE_ALLOWED;
7201 
7202 /*=============================================================================
7203  |  PROCEDURE - set_tax_security_context()
7204  |
7205  |  DESCRIPTION
7206  |    This procedure will return the tax effective date. The effective date
7207  |    is used in the list of values for tax drivers and tax related attributes.
7208  |
7209  |  PARAMETERS
7210  |	p_org_id		- Operating unit identifier
7211  |	p_legal_entity_id	- Legal entity identifier.
7212  |	p_transaction_date	- Transaction Date.
7213  |    P_Related_Doc_Date  - Date of the related document.  (Eg: Standard PO)
7214  |    P_Adjusted_Doc_Date - Date of the adjusted document. (Eg: DM/CM applied to Invoice)
7215  |
7216  |  MODIFICATION HISTORY
7217  |    DATE          Author  Action
7218  |    13-AUG-2004   Sanjay  Created
7219  *============================================================================*/
7220   PROCEDURE set_tax_security_context
7221 				(p_org_id		IN NUMBER,
7222 				 p_legal_entity_id	IN NUMBER,
7223 				 p_transaction_date	IN DATE,
7224 				 p_related_doc_date	IN DATE,
7225 				 p_adjusted_doc_date	IN DATE,
7226 				 p_effective_date	OUT NOCOPY DATE,
7227 				 p_return_status	OUT NOCOPY VARCHAR2,
7228 				 p_msg_count		OUT NOCOPY NUMBER,
7229 				 p_msg_data		OUT NOCOPY VARCHAR2) IS
7230 
7231        l_debug_info	VARCHAR2(240);
7232        l_api_name			  CONSTANT VARCHAR2(100) := 'set_tax_security_context';
7233 
7234   BEGIN
7235         ---------------------------------------------------------------
7236 	l_debug_info := 'Calling zx_api_pub.set_tax_security_context';
7237     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
7238       FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
7239     END IF;
7240         ---------------------------------------------------------------
7241 
7242 	IF p_org_id	      IS NOT NULL AND
7243 	   p_legal_entity_id  IS NOT NULL AND
7244 	   p_transaction_date IS NOT NULL THEN
7245 
7246 	zx_api_pub.set_tax_security_context
7247 				(p_api_version		=> 1.0,          -- Bug 6469397
7248 				 p_init_msg_list	=> FND_API.G_FALSE,
7249 				 p_commit		=> FND_API.G_FALSE,
7250 				 p_validation_level	=> FND_API.G_VALID_LEVEL_FULL,
7251 				 x_return_status	=> p_return_status,
7252 				 x_msg_count		=> p_msg_count,
7253 				 x_msg_data             => p_msg_data,
7254 				 p_internal_org_id	=> p_org_id,
7255 				 p_legal_entity_id      => p_legal_entity_id,
7256 				 p_transaction_date	=> p_transaction_date,
7257 				 p_related_doc_date	=> p_related_doc_date,
7258 				 p_adjusted_doc_date	=> p_adjusted_doc_date,
7259 				 x_effective_date	=> p_effective_date);
7260 
7261 	END IF;
7262 
7263   EXCEPTION
7264     WHEN OTHERS THEN
7265       IF (SQLCODE <> -20001) THEN
7266         FND_MESSAGE.SET_NAME('SQLAP','AP_DEBUG');
7267         FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
7268         FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE', 'AP_ETAX_UTILITY_PKG.set_tax_security_context');
7269         FND_MESSAGE.SET_TOKEN('PARAMETERS', 'p_org_id: '	   || p_org_id 		 ||
7270 					    'p_legal_entity_id: '  || p_legal_entity_id  ||
7271 					    'p_transaction_date: ' || p_transaction_date ||
7272 					    'p_related_doc_date: ' || p_related_doc_date);
7273         FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_debug_info);
7274       END IF;
7275 
7276       APP_EXCEPTION.RAISE_EXCEPTION;
7277 
7278   END set_tax_security_context;
7279 
7280 
7281 /*=============================================================================
7282  |  FUNCTION get_tipv()
7283  |
7284  |  DESCRIPTION
7285  |    This function will return the invoice price variance.
7286  |
7287  *============================================================================*/
7288   FUNCTION get_tipv ( p_rate_tax_factor     IN NUMBER   ,
7289                       p_quantity_invoiced   IN NUMBER   ,
7290                       p_inv_unit_price      IN NUMBER   ,
7291                       p_ref_doc_unit_price  IN NUMBER   ,
7292                       p_ref_per_unit_nr_amt IN NUMBER   ,
7293                       p_pc_price_diff       IN NUMBER   ,
7294                       p_corrected_inv_id    IN NUMBER   ,
7295                       p_line_type           IN VARCHAR2 ,
7296                       p_line_source         IN VARCHAR2 ,
7297                       p_inv_currency_code   IN VARCHAR2 ,
7298                       p_line_match_type     IN VARCHAR2 ,
7299 		      p_trx_line_dist_id   IN NUMBER   ,
7300 		      p_ref_per_trx_cur_unit_nrec IN NUMBER ,
7301 		      p_rec_nrec_tax_dist_id IN NUMBER ) RETURN NUMBER IS  -- Added three new parameter for the bug 10621602
7302 
7303     p_tax_ipv NUMBER;
7304     l_debug_info varchar2(2000);
7305     l_api_name VARCHAR2(2000) := 'get_tipv';
7306 
7307   BEGIN
7308 
7309     IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
7310 
7311         l_debug_info := 'p_rate_tax_factor '||p_rate_tax_factor||' '||'p_quantity_invoiced '||p_quantity_invoiced||' '||
7312                         'p_inv_unit_price '||p_inv_unit_price||' '||'p_ref_doc_unit_price '||p_ref_doc_unit_price||' '||
7313                         'p_ref_per_unit_nr_amt '||p_ref_per_unit_nr_amt||' '||'p_pc_price_diff '||p_pc_price_diff||' '||
7314                         'p_corrected_inv_id '||p_corrected_inv_id||' '||'p_line_type '||p_line_type||' '||
7315                         'p_line_source '||p_line_source||' '||'p_inv_currency_code '||p_inv_currency_code||' '||
7316                         'p_line_match_type '||p_line_match_type || 'p_trx_line_dist_id  ' || p_trx_line_dist_id ||
7317 			'p_ref_per_trx_cur_unit_nrec' || p_ref_per_trx_cur_unit_nrec || ' p_rec_nrec_tax_dist_id ' || p_rec_nrec_tax_dist_id ;
7318 
7319         FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
7320     END IF;
7321 
7322     --bug 10621602 starts
7323     -- The below formula is only for the distribution related to retainage and retainge release invoice
7324 
7325     IF AP_ETAX_SERVICES_PKG.ret_dists.exists(p_trx_line_dist_id) THEN
7326 
7327     IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
7328 
7329             l_debug_info := 'Invoice Distribution amount  ' || AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).amount ||
7330 	    'Retained amount ' || AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).retained_amount ||
7331 	    'Retainage rate ' || AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).retainage_rate ||
7332 	     'Quantity_Invoiced' || AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).quantity_invoiced;
7333 
7334             FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
7335 
7336         END IF;
7337 
7338 
7339       IF ( AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).RELATED_RETAINAGE_DIST_ID IS NOT NULL) THEN --- Standard invoice with retainage
7340 
7341           p_tax_ipv :=  p_rate_tax_factor* ((AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).amount) -
7342                        (p_quantity_invoiced * p_ref_doc_unit_price*(1 - AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).retainage_rate/100)))* p_ref_per_trx_cur_unit_nrec;
7343 
7344 
7345 	IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
7346 
7347             l_debug_info :=  ' p_tax_ipv :=  p_rate_tax_factor* ((AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).amount) - ' ||
7348                        '(p_quantity_invoiced * p_ref_doc_unit_price*(1 - AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).retainage_rate/100)))* p_ref_per_trx_cur_unit_nrec ' ||
7349 		       p_rate_tax_factor || ' *(( ' || AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).amount || ' ) - ' ||
7350 		       ' ( ' || p_rate_tax_factor || ' * ' || p_ref_doc_unit_price || ' * (1 - ' ||  AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).retainage_rate || ' /100))) * ' || p_ref_per_trx_cur_unit_nrec  ;
7351 
7352             FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
7353 
7354         END IF;
7355 
7356 
7357 	IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
7358 
7359             l_debug_info := 'TIPV for standard invoice having retainage' || p_tax_ipv ;
7360             FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
7361 
7362         END IF;
7363 
7364 	END IF;
7365 
7366        IF ( AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).RETAINED_INVOICE_DIST_ID IS NOT NULL) THEN --- Retainage Release invoice
7367 
7368       p_tax_ipv  :=  p_rate_tax_factor* ((AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).amount) -
7369                    (AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).quantity_invoiced * p_ref_doc_unit_price*(AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).retainage_rate/100)))* p_ref_per_trx_cur_unit_nrec;
7370 
7371 
7372 	IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
7373 
7374             l_debug_info := ' p_tax_ipv  :=  p_rate_tax_factor* ((AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).amount) - ' ||
7375                    ' (AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).quantity_invoiced * p_ref_doc_unit_price*(AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).retainage_rate/100)))* p_ref_per_trx_cur_unit_nrec  ' ||
7376 	p_rate_tax_factor || ' *(( ' || AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).amount || ' )- ' ||
7377         ' ( ' || AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).quantity_invoiced || ' * ' || p_ref_doc_unit_price || ' * ( ' || AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).retainage_rate || '/100)))* '|| p_ref_per_trx_cur_unit_nrec ;
7378 
7379             FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
7380 
7381         END IF;
7382 
7383 
7384 
7385 
7386 	IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
7387 
7388             l_debug_info := 'TIPV for  retainage invoice ' || p_tax_ipv ;
7389             FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
7390 
7391         END IF;
7392 
7393 
7394 	END IF;
7395 
7396 
7397    ELSE  -- Normal Flow
7398     --bug 10621602 ends
7399 
7400     --Bug10416960
7401     IF (p_line_type = 'RETROITEM' AND p_line_match_type = 'PO_PRICE_ADJUSTMENT') THEN
7402 
7403        -- When a PO is retro-priced, price variances are reversed on the original document
7404        -- and moved to the expense account. This is done in the open interface program and
7405        -- the tax lines will have tax_already_calculated_flag set to 'Y'. TIPV is computed
7406        -- as zero for the PPA document.
7407 
7408        p_tax_ipv := 0;
7409 
7410 
7411         IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
7412 
7413             l_debug_info := 'In P_LINE_TYPE = RETROITEM CHECK. TAX IPV IS 0';
7414             FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
7415 
7416         END IF;
7417     --Bug10416960
7418     ELSIF p_corrected_inv_id IS NULL THEN
7419 
7420            IF p_line_match_type IN ('ITEM_TO_SERVICE_RECEIPT', 'ITEM_TO_SERVICE_PO') THEN
7421 
7422               p_tax_ipv := 0;
7423 
7424               IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
7425 
7426                  l_debug_info := 'CORRECTED INV ID IS NULL AND MATCH TYPE IS ITEM_TO_SERVICE_RECEIPT OR ITEM_TO_SERVICE_PO. HENCE TAX IPV IS 0';
7427                  FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
7428 
7429               END IF;
7430 
7431 
7432 
7433            ELSE
7434                   -- PO/Receipt Matched Invoice
7435 
7436                   p_tax_ipv := p_rate_tax_factor * p_quantity_invoiced *
7437                        (p_inv_unit_price - p_ref_doc_unit_price) * p_ref_per_unit_nr_amt;
7438 
7439 
7440                   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
7441 
7442                      l_debug_info := 'CORRECTED INV ID IS NULL AND MATCH TYPE IS ITEM_TO_RECEIPT OR ITEM_TO_PO. HENCE TAX IPV IS '||p_tax_ipv;
7443 
7444                      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
7445 
7446                      l_debug_info := 'p_tax_ipv := p_rate_tax_factor * p_quantity_invoiced * (p_inv_unit_price - p_ref_doc_unit_price) * p_ref_per_unit_nr_amt '||
7447                                       p_rate_tax_factor ||' * '||p_quantity_invoiced||' * ('||p_inv_unit_price ||' - '||p_ref_doc_unit_price||') * '||
7448                                       p_ref_per_unit_nr_amt;
7449 
7450                      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
7451 
7452                   END IF;
7453 
7454        END IF;
7455 
7456     ELSIF p_corrected_inv_id IS NOT NULL THEN
7457 
7458           -- Price/Quantity Correction
7459 
7460           p_tax_ipv := p_rate_tax_factor * p_quantity_invoiced * p_pc_price_diff * p_ref_per_unit_nr_amt;
7461 
7462                   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
7463 
7464                      l_debug_info := 'CORRECTED INV ID IS NOT  NULL. HENCE TAX IPV IS '||p_tax_ipv;
7465 
7466                      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
7467 
7468                      l_debug_info := 'p_tax_ipv := p_rate_tax_factor * p_quantity_invoiced * p_pc_price_diff * p_ref_per_unit_nr_amt '||
7469                                       p_rate_tax_factor ||' * '||p_quantity_invoiced||' * '||p_pc_price_diff||' * '||
7470                                       p_ref_per_unit_nr_amt;
7471 
7472                      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
7473 
7474                   END IF;
7475 
7476 
7477     END IF;
7478 
7479      END IF; -- Normal Flow ends  --bug10621602
7480 
7481     IF p_tax_ipv IS NOT NULL THEN
7482 
7483        p_tax_ipv := ap_utilities_pkg.ap_round_currency (p_tax_ipv, p_inv_currency_code);
7484 
7485        IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
7486 
7487            l_debug_info := 'TAX IPV AFTER ROUNDING IS '||p_tax_ipv;
7488 
7489            FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
7490 
7491        END IF;
7492 
7493 
7494     END IF;
7495 
7496     RETURN NVL(p_tax_ipv,0);
7497 
7498   EXCEPTION
7499 
7500     WHEN NO_DATA_FOUND THEN
7501 
7502          RETURN NVL(p_tax_ipv,0);
7503 
7504     WHEN OTHERS THEN
7505 
7506          RETURN NVL(p_tax_ipv,0);
7507 
7508   END get_tipv;
7509 
7510 /*=============================================================================
7511  |  FUNCTION get_tipv_base()
7512  |
7513  |  DESCRIPTION
7514  |    This function will return the base invoice price variance.
7515  |
7516  *============================================================================*/
7517   FUNCTION get_tipv_base
7518         ( p_rate_tax_factor          IN NUMBER ,
7519           p_quantity_invoiced        IN NUMBER ,
7520           p_inv_unit_price           IN NUMBER ,
7521           p_ref_doc_unit_price       IN NUMBER ,
7522           p_ref_per_trx_nrec_amt     IN NUMBER ,
7523           p_price_diff               IN NUMBER ,
7524           p_inv_currency_rate        IN NUMBER ,
7525           p_ref_doc_curr_rate        IN NUMBER ,
7526           p_adj_doc_curr_rate        IN NUMBER ,
7527           p_corrected_inv_id         IN NUMBER ,
7528           p_line_type                IN VARCHAR2 ,
7529           p_line_source              IN VARCHAR2 ,
7530           p_inv_currency_code        IN VARCHAR2 ,
7531           p_base_currency_code       IN VARCHAR2 ,
7532           p_line_match_type          IN VARCHAR2,
7533 	  p_trx_line_dist_id         IN NUMBER ,
7534 	  p_ref_per_trx_cur_unit_nrec IN NUMBER ,
7535           p_rec_nrec_tax_dist_id IN NUMBER ) RETURN NUMBER IS  -- Added three new parameter for the bug10621602
7536 
7537     p_tax_ipv_base NUMBER;
7538     l_debug_info varchar2(2000);
7539     l_api_name VARCHAR2(2000) := 'get_tipv_base';
7540 
7541         --bug 5528375
7542         l_tax_ipv      NUMBER;
7543 
7544   BEGIN
7545 
7546     IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
7547 
7548         l_debug_info := 'p_rate_tax_factor '||p_rate_tax_factor||' '||'p_quantity_invoiced '||p_quantity_invoiced||' '||
7549                         'p_inv_unit_price '||p_inv_unit_price||' '||'p_ref_doc_unit_price '||p_ref_doc_unit_price||' '||
7550                         'p_ref_per_trx_nrec_amt '||p_ref_per_trx_nrec_amt||' '||'p_price_diff '||p_price_diff||' '||
7551                         'p_inv_currency_rate '||p_inv_currency_rate||' '||'p_ref_doc_curr_rate '||p_ref_doc_curr_rate||' '||
7552                         'p_adj_doc_curr_rate '||p_adj_doc_curr_rate||' '||'p_corrected_inv_id '||p_corrected_inv_id||' '||
7553                         'p_line_type '||p_line_type||' '||'p_line_source '||p_line_source||' '||
7554                         'p_inv_currency_code '||p_inv_currency_code||' '||'p_base_currency_code '||p_base_currency_code||' '||
7555                         'p_line_match_type '||p_line_match_type || 'p_trx_line_dist_id  ' || p_trx_line_dist_id ||
7556 			'p_ref_per_trx_cur_unit_nrec' || p_ref_per_trx_cur_unit_nrec || ' p_rec_nrec_tax_dist_id ' || p_rec_nrec_tax_dist_id;
7557         FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
7558     END IF;
7559 
7560   --bug10621602 starts
7561   -- The below formula is only for the distribution related to retainage and retainge release invoice
7562 
7563      IF AP_ETAX_SERVICES_PKG.ret_dists.exists(p_trx_line_dist_id) THEN
7564 
7565       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
7566 
7567             l_debug_info := 'Invoice Distribution amount  ' || AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).amount ||
7568 	    'Retained amount ' || AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).retained_amount ||
7569 	    'Retainage rate ' || AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).retainage_rate ||
7570 	     'Quantity_Invoiced' || AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).quantity_invoiced;
7571 
7572             FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
7573 
7574         END IF;
7575 
7576 
7577       IF (AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).RELATED_RETAINAGE_DIST_ID IS NOT NULL) THEN --- Standard invoice with retainage
7578 
7579           p_tax_ipv_base :=  p_rate_tax_factor* ((AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).amount ) -
7580                        (p_quantity_invoiced * p_ref_doc_unit_price*(1 - AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).retainage_rate/100)))* p_ref_per_trx_cur_unit_nrec * nvl(p_inv_currency_rate , 1);
7581 
7582 
7583 	IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
7584 
7585         l_debug_info :=   ' p_tax_ipv_base :=  p_rate_tax_factor* ((AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).amount ) - ' ||
7586                        ' (p_quantity_invoiced * p_ref_doc_unit_price*(1 - AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).retainage_rate/100)))* p_ref_per_trx_cur_unit_nrec * nvl(p_inv_currency_rate , 1) ' ||
7587 		         p_rate_tax_factor || ' * (( ' || AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).amount || ' ) - ' ||
7588 			 ' ( ' || p_quantity_invoiced || ' * ' || p_ref_doc_unit_price || ' *(1 - ' || AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).retainage_rate || ' /100))) * ' ||
7589 			 p_ref_per_trx_cur_unit_nrec || ' * ' || nvl(p_inv_currency_rate , 1)  ;
7590 
7591             FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
7592 
7593        END IF;
7594 
7595 
7596 	IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
7597 
7598             l_debug_info := 'TIPV_BASE  for standard invoice having retainage' || p_tax_ipv_base ;
7599             FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
7600 
7601         END IF;
7602 
7603 
7604 	END IF;
7605 
7606        IF ( AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).RETAINED_INVOICE_DIST_ID IS NOT NULL) THEN --- Retainage Release invoice
7607 
7608       p_tax_ipv_base :=  p_rate_tax_factor* ((AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).amount ) -
7609                    (AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).quantity_invoiced * p_ref_doc_unit_price*(AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).retainage_rate/100)))* p_ref_per_trx_cur_unit_nrec * nvl(p_inv_currency_rate , 1);
7610 
7611 	IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
7612 
7613         l_debug_info :=  ' p_tax_ipv_base :=  p_rate_tax_factor* ((AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).amount ) -  ' ||
7614           ' (AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).quantity_invoiced * p_ref_doc_unit_price*(AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).retainage_rate/100)))* p_ref_per_trx_cur_unit_nrec * nvl(p_inv_currency_rate , 1)'||
7615 	  p_rate_tax_factor || ' * (( ' || AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).amount || ' ) - ' ||
7616 	' ( ' || AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).quantity_invoiced || ' * ' ||   p_ref_doc_unit_price || ' *( ' || AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).retainage_rate || ' /100))) * ' ||
7617 		   p_ref_per_trx_cur_unit_nrec || ' * ' || nvl(p_inv_currency_rate , 1) ;
7618 
7619             FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
7620 
7621        END IF;
7622 
7623 
7624 	IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
7625 
7626             l_debug_info := 'TIPV_BASE  for  retainage invoice ' || p_tax_ipv_base ;
7627             FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
7628 
7629         END IF;
7630 
7631 	END IF;
7632 
7633     ELSE  -- Normal Flow starts
7634   --bug 10621602 ends
7635 
7636     --Bug10416960
7637     IF (p_line_type = 'RETROITEM' AND p_line_match_type = 'PO_PRICE_ADJUSTMENT') THEN
7638 
7639        -- PO Price Adjustment
7640 
7641        p_tax_ipv_base := 0;
7642 
7643        IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
7644 
7645             l_debug_info := 'In P_LINE_TYPE = RETROITEM CHECK. TAX IPV BASE IS 0';
7646             FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
7647 
7648        END IF;
7649 
7650     --Bug10416960
7651     ELSIF p_corrected_inv_id IS NULL THEN
7652 
7653            IF p_line_match_type IN ('ITEM_TO_SERVICE_RECEIPT', 'ITEM_TO_SERVICE_PO') THEN
7654 
7655               p_tax_ipv_base := 0;
7656 
7657 
7658               IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
7659 
7660                  l_debug_info := 'CORRECTED INV ID IS NULL AND MATCH TYPE IS ITEM_TO_SERVICE_RECEIPT OR ITEM_TO_SERVICE_PO. HENCE TAX IPV BASE IS 0';
7661                  FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
7662 
7663               END IF;
7664 
7665            ELSE
7666 
7667                 -- PO/Receipt Matched Invoice
7668 
7669                 p_tax_ipv_base := p_rate_tax_factor * p_quantity_invoiced * p_inv_currency_rate *
7670                             (p_inv_unit_price - p_ref_doc_unit_price ) * p_ref_per_trx_nrec_amt;
7671 
7672 
7673                 IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
7674 
7675                    l_debug_info := 'CORRECTED INV ID IS NULL AND MATCH TYPE IS ITEM_TO_RECEIPT OR ITEM_TO_PO. HENCE TAX IPV BASE IS '||p_tax_ipv_base;
7676 
7677                     FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
7678 
7679                     l_debug_info := 'p_tax_ipv_base := p_rate_tax_factor * p_quantity_invoiced * p_inv_currency_rate * (p_inv_unit_price - p_ref_doc_unit_price) * p_ref_per_trx_nrec_amt '||
7680                                      p_rate_tax_factor ||' * '||p_quantity_invoiced||' * '||p_inv_currency_rate||' * ('||p_inv_unit_price ||' - '||p_ref_doc_unit_price||') * '||
7681                                      p_ref_per_trx_nrec_amt;
7682 
7683                     FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
7684 
7685                 END IF;
7686 
7687               -- Bug 5528375
7688                 l_tax_ipv := p_rate_tax_factor * p_quantity_invoiced *(p_inv_unit_price - p_ref_doc_unit_price) * p_ref_per_trx_nrec_amt;
7689 
7690                 IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
7691 
7692                     l_debug_info := 'CORRECTED INV ID IS NULL AND MATCH TYPE IS ITEM_TO_RECEIPT OR ITEM_TO_PO. HENCE l_tax_ipv IS '||l_tax_ipv;
7693 
7694                     FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
7695 
7696                     l_debug_info := 'p_tax_ipv_base := p_rate_tax_factor * p_quantity_invoiced * (p_inv_unit_price - p_ref_doc_unit_price) * p_ref_per_trx_nrec_amt '||
7697                                      p_rate_tax_factor ||' * '||p_quantity_invoiced||' * ('||p_inv_unit_price ||' - '||p_ref_doc_unit_price||') * '||
7698                                      p_ref_per_trx_nrec_amt;
7699 
7700                     FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
7701 
7702                 END IF;
7703 
7704 
7705        END IF;
7706 
7707     ELSIF p_corrected_inv_id IS NOT NULL THEN
7708 
7709        -- Corrections
7710 
7711        p_tax_ipv_base := p_rate_tax_factor * p_quantity_invoiced * p_adj_doc_curr_rate * p_price_diff * p_ref_per_trx_nrec_amt;
7712 
7713        IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
7714 
7715           l_debug_info := 'CORRECTED INV ID IS NOT NULL. HENCE TAX IPV BASE IS '||p_tax_ipv_base;
7716 
7717           FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
7718 
7719           l_debug_info := 'p_tax_ipv_base := p_rate_tax_factor * p_quantity_invoiced * p_adj_doc_curr_rate * p_price_diff * p_ref_per_trx_nrec_amt '||
7720                            p_rate_tax_factor ||' * '||p_quantity_invoiced||' * '||p_adj_doc_curr_rate||' * '|| p_price_diff ||' * '||p_ref_per_trx_nrec_amt;
7721 
7722           FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
7723 
7724        END IF;
7725 
7726 
7727            -- Bug 5528375
7728        l_tax_ipv := p_rate_tax_factor * p_quantity_invoiced * p_price_diff * p_ref_per_trx_nrec_amt;
7729 
7730 
7731        IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
7732 
7733           l_debug_info := 'CORRECTED INV ID IS NOT NULL. HENCE l_tax_ipv IS '||l_tax_ipv;
7734 
7735           FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
7736 
7737           l_debug_info := 'l_tax_ipv := p_rate_tax_factor * p_quantity_invoiced * p_price_diff * p_ref_per_trx_nrec_amt '||
7738                            p_rate_tax_factor ||' * '||p_quantity_invoiced||' * '||p_price_diff||' * '|| p_ref_per_trx_nrec_amt;
7739 
7740           FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
7741 
7742        END IF;
7743 
7744 
7745 
7746     END IF;
7747 
7748      END IF; -- Normal flow ends bug10621602
7749 
7750 
7751     IF p_tax_ipv_base IS NOT NULL THEN
7752        p_tax_ipv_base := ap_utilities_pkg.ap_round_currency (p_tax_ipv_base, p_base_currency_code);
7753 
7754        IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
7755 
7756            l_debug_info := 'TAX IPV BASE AFTER ROUNDING IS '||p_tax_ipv_base;
7757 
7758            FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
7759 
7760        END IF;
7761 
7762 
7763     END IF;
7764 
7765         -- Bug 5528375
7766     IF l_tax_ipv IS NOT NULL THEN
7767       l_tax_ipv := ap_utilities_pkg.ap_round_currency (l_tax_ipv, p_inv_currency_code);
7768 
7769        IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
7770 
7771            l_debug_info := 'l_tax_ipv AFTER ROUNDING IS '||l_tax_ipv;
7772 
7773            FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
7774 
7775        END IF;
7776 
7777 
7778         ELSE
7779            l_tax_ipv := 0;
7780 
7781            IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
7782 
7783               l_debug_info := 'l_tax_ipv IS 0 IN ELSE';
7784 
7785               FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
7786 
7787            END IF;
7788 
7789 
7790         END IF;
7791 
7792         RETURN NVL(p_tax_ipv_base,l_tax_ipv);
7793 
7794   EXCEPTION
7795 
7796     WHEN NO_DATA_FOUND THEN
7797 
7798          RETURN NVL(p_tax_ipv_base,0);
7799 
7800     WHEN OTHERS THEN
7801 
7802          RETURN NVL(p_tax_ipv_base,0);
7803 
7804   END get_tipv_base;
7805 
7806 
7807 /*=============================================================================
7808  |  FUNCTION get_terv()
7809  |
7810  |  DESCRIPTION
7811  |    This function will return the tax exchange rate variance.
7812  *============================================================================*/
7813   FUNCTION get_terv
7814         ( p_quantity_invoiced         IN NUMBER   ,
7815           p_inv_curr_conv_rate        IN NUMBER   ,
7816           p_ref_doc_curr_conv_rate    IN NUMBER   ,
7817           p_app_doc_curr_conv_rate    IN NUMBER   ,
7818           p_adj_doc_curr_conv_rate    IN NUMBER   ,
7819           p_per_unit_nrec_amt         IN NUMBER   ,
7820           p_ref_doc_per_unit_nrec_amt IN NUMBER   ,
7821           p_corrected_inv_id          IN NUMBER   ,
7822           p_line_type                 IN VARCHAR2 ,
7823           p_line_source               IN VARCHAR2 ,
7824           p_base_currency_code        IN VARCHAR2 ,
7825 	  p_trx_line_dist_id          IN NUMBER ,
7826 	  p_ref_doc_unit_price        IN NUMBER ,
7827 	  p_ref_per_trx_cur_unit_nrec IN NUMBER,
7828 	  p_rec_nrec_tax_dist_id IN NUMBER,
7829 	  p_unit_price IN NUMBER) RETURN NUMBER IS  --Added extra four parameters for the bug 10621602
7830       --Bug10416960 Added Input Parameter p_unit_price for PPA Invoices.
7831 
7832     p_tax_erv NUMBER;
7833     l_debug_info varchar2(2000);
7834     l_api_name VARCHAR2(2000) := 'get_terv';
7835 
7836 
7837   BEGIN
7838 
7839 
7840     IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
7841 
7842         l_debug_info := 'p_quantity_invoiced '||p_quantity_invoiced||' '||'p_inv_curr_conv_rate '||p_inv_curr_conv_rate||' '||
7843                         'p_ref_doc_curr_conv_rate '||p_ref_doc_curr_conv_rate||' '||'p_app_doc_curr_conv_rate '||p_app_doc_curr_conv_rate||' '||
7844                         'p_adj_doc_curr_conv_rate '||p_adj_doc_curr_conv_rate||' '||'p_per_unit_nrec_amt '||p_per_unit_nrec_amt||' '||
7845                         'p_ref_doc_per_unit_nrec_amt '||p_ref_doc_per_unit_nrec_amt||' '||'p_corrected_inv_id '||p_corrected_inv_id||' '||
7846                         'p_line_type '||p_line_type||' '||'p_line_source '||p_line_source||' '||'p_base_currency_code '||p_base_currency_code||' '||
7847 			            'p_trx_line_dist_id  ' || p_trx_line_dist_id||' '||'p_ref_doc_unit_price'|| p_ref_doc_unit_price||' '||
7848 			            'p_ref_per_trx_cur_unit_nrec' || p_ref_per_trx_cur_unit_nrec||' p_rec_nrec_tax_dist_id ' || p_rec_nrec_tax_dist_id||' '||
7849 						'p_unit_price '||p_unit_price;   --Bug10416960
7850 
7851         FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
7852     END IF;
7853 
7854      --bug 10621602 starts
7855      -- The below formula is only for the distribution related to retainage and retainge release invoice
7856 
7857      IF AP_ETAX_SERVICES_PKG.ret_dists.exists(p_trx_line_dist_id) THEN
7858 
7859      IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
7860 
7861             l_debug_info := 'Invoice Distribution amount  ' || AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).amount ||
7862 	    'Retained amount ' || AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).retained_amount ||
7863 	    'Retainage rate ' || AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).retainage_rate ||
7864 	     'Quantity_Invoiced' || AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).quantity_invoiced;
7865 
7866             FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
7867 
7868         END IF;
7869 
7870 
7871       IF ( AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).RELATED_RETAINAGE_DIST_ID IS NOT NULL) THEN --- Standard invoice with retainage
7872 
7873           p_tax_erv :=  (p_quantity_invoiced * p_ref_doc_unit_price*(1 - AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).retainage_rate/100))* p_ref_per_trx_cur_unit_nrec * ( p_inv_curr_conv_rate - p_ref_doc_curr_conv_rate) ;
7874 
7875        IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
7876 
7877        l_debug_info :=  ' p_tax_erv :=  (p_quantity_invoiced * p_ref_doc_unit_price*(1 - AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).retainage_rate/100))* p_ref_per_trx_cur_unit_nrec * ( p_inv_curr_conv_rate - p_ref_doc_curr_conv_rate) ' ||
7878 	        ' ( ' || p_quantity_invoiced || ' * ' || p_ref_doc_unit_price || ' *(1 - ' || AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).retainage_rate || ' /100))* ' || p_ref_per_trx_cur_unit_nrec || ' * ( ' || p_inv_curr_conv_rate ||
7879 	        ' - ' || p_ref_doc_curr_conv_rate || ' ) '  ;
7880 
7881             FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
7882 
7883        END IF;
7884 
7885 
7886 	IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
7887 
7888             l_debug_info := 'TERV  for standard invoice having retainage' || p_tax_erv ;
7889             FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
7890 
7891         END IF;
7892 
7893 	END IF;
7894 
7895        IF ( AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).RETAINED_INVOICE_DIST_ID IS NOT NULL) THEN --- Retainage Release invoice
7896 
7897       p_tax_erv :=  (AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).quantity_invoiced * p_ref_doc_unit_price*(AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).retainage_rate/100))* p_ref_per_trx_cur_unit_nrec
7898                     *( p_inv_curr_conv_rate - p_ref_doc_curr_conv_rate) ;
7899 
7900 
7901 	IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
7902 
7903         l_debug_info :=  ' p_tax_erv := (AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).quantity_invoiced * p_ref_doc_unit_price*(AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).retainage_rate/100))* p_ref_per_trx_cur_unit_nrec ' ||
7904 	' * ( p_inv_curr_conv_rate - p_ref_doc_curr_conv_rate) ' ||
7905 	                 ' ( ' || AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).quantity_invoiced || ' * ' || p_ref_doc_unit_price || ' * ( ' || AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).retainage_rate || ' /100))* ' ||
7906 			 p_ref_per_trx_cur_unit_nrec || ' * ( ' || p_inv_curr_conv_rate || ' - ' ||  p_ref_doc_curr_conv_rate  || ' ) ';
7907 
7908             FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
7909 
7910        END IF;
7911 
7912 
7913 	IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
7914 
7915             l_debug_info := 'TERV  for  retainage invoice ' || p_tax_erv ;
7916             FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
7917 
7918         END IF;
7919 
7920 
7921 	END IF;
7922 
7923     ELSE -- Normal Flow starts
7924     --bug10621602 ends
7925     --Bug10416960
7926     IF (p_line_type = 'RETROITEM' AND p_line_source = 'PO PRICE ADJUSTMENT') THEN
7927 
7928        --TERV = Qi * Ni * (Ei - Ep)
7929 
7930          /*p_tax_erv := p_quantity_invoiced * p_per_unit_nrec_amt *
7931                         (p_inv_curr_conv_rate - p_ref_doc_curr_conv_rate);*/
7932 
7933 	   --TERV = Qi * Pi * Np * (Ei - Ep)
7934 
7935 	   p_tax_erv := p_quantity_invoiced * p_unit_price * p_ref_per_trx_cur_unit_nrec *
7936                         (p_inv_curr_conv_rate - p_ref_doc_curr_conv_rate);
7937 
7938        IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
7939 
7940             l_debug_info := 'In P_LINE_TYPE = RETROITEM CHECK. TAX ERV IS '||p_tax_erv;
7941             FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
7942 
7943             l_debug_info := 'p_tax_erv := p_quantity_invoiced * p_unit_price * p_ref_per_trx_cur_unit_nrec * (p_inv_curr_conv_rate -
7944                              p_ref_doc_curr_conv_rate) '||
7945                              p_quantity_invoiced ||' * '||p_unit_price||' * '||p_ref_per_trx_cur_unit_nrec||' * ('||p_inv_curr_conv_rate ||' - '||p_ref_doc_curr_conv_rate||')';
7946 
7947             FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
7948 
7949        END IF;
7950     --Bug10416960
7951     ELSIF p_corrected_inv_id IS NULL THEN
7952 
7953        -- TERV = Qi * Np * (Ei - Ep)
7954 
7955        p_tax_erv := p_quantity_invoiced * p_ref_doc_per_unit_nrec_amt *
7956             (p_inv_curr_conv_rate - nvl(p_app_doc_curr_conv_rate,p_ref_doc_curr_conv_rate));
7957 
7958 
7959        IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
7960 
7961             l_debug_info := 'CORRECTED INV ID IS NULL. HENCE TAX ERV IS  '||p_tax_erv;
7962             FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
7963 
7964             l_debug_info := 'p_tax_erv := p_quantity_invoiced * p_ref_doc_per_unit_nrec_amt * (p_inv_curr_conv_rate - nvl(p_app_doc_curr_conv_rate,p_ref_doc_curr_conv_rate)) '||
7965                              p_quantity_invoiced ||' * '||p_ref_doc_per_unit_nrec_amt||' * ('||p_inv_curr_conv_rate ||' - NVL('||p_app_doc_curr_conv_rate||' , '||p_ref_doc_curr_conv_rate||')';
7966 
7967             FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
7968 
7969        END IF;
7970 
7971 
7972     ELSIF p_corrected_inv_id IS NOT NULL THEN
7973 
7974        -- TERV = Qi * Ni * (Eij - Ei).
7975 
7976        p_tax_erv  := p_quantity_invoiced * p_per_unit_nrec_amt *
7977              (p_inv_curr_conv_rate - p_adj_doc_curr_conv_rate);
7978 
7979 
7980        IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
7981 
7982             l_debug_info := 'CORRECTED INV ID IS NOT NULL. HENCE TAX ERV IS  '||p_tax_erv;
7983             FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
7984 
7985             l_debug_info := 'p_tax_erv := p_quantity_invoiced * p_per_unit_nrec_amt * (p_inv_curr_conv_rate - p_adj_doc_curr_conv_rate) '||
7986                              p_quantity_invoiced ||' * '||p_per_unit_nrec_amt||' * ('||p_inv_curr_conv_rate ||' - '||p_adj_doc_curr_conv_rate||')';
7987 
7988             FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
7989 
7990        END IF;
7991 
7992 
7993 
7994     END IF;
7995 
7996      END IF; -- Normal Flow ends bug 10621602
7997 
7998     IF p_tax_erv IS NOT NULL THEN
7999 
8000        p_tax_erv := ap_utilities_pkg.ap_round_currency (p_tax_erv, p_base_currency_code);
8001 
8002        IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
8003 
8004            l_debug_info := 'TAX ERV AFTER ROUNDING IS '||p_tax_erv;
8005 
8006            FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
8007 
8008        END IF;
8009 
8010     END IF;
8011 
8012     RETURN NVL(p_tax_erv, 0);
8013 
8014   EXCEPTION
8015     WHEN NO_DATA_FOUND THEN
8016 
8017          RETURN NVL(p_tax_erv,0);
8018 
8019     WHEN OTHERS THEN
8020 
8021          RETURN NVL(p_tax_erv,0);
8022 
8023   END get_terv;
8024 
8025 /*=============================================================================
8026  |  FUNCTION get_tv()
8027  |
8028  |  DESCRIPTION
8029  |    This function will return the invoice price variance.
8030  |
8031  *============================================================================*/
8032   FUNCTION get_tv ( p_rate_tax_factor   IN NUMBER   ,
8033             p_quantity_invoiced         IN NUMBER   ,
8034             p_inv_per_unit_nrec         IN NUMBER   ,
8035             p_ref_per_unit_nrec         IN NUMBER   ,
8036             p_inv_per_trx_cur_unit_nrec IN NUMBER   ,
8037             p_ref_per_trx_cur_unit_nrec IN NUMBER   ,
8038             p_pc_price_diff             IN NUMBER   ,
8039             p_corrected_inv_id          IN NUMBER   ,
8040             p_line_type                 IN VARCHAR2 ,
8041             p_line_source               IN VARCHAR2 ,
8042             p_inv_currency_code         IN VARCHAR2 ,
8043             p_line_match_type           IN VARCHAR2 ,
8044             p_unit_price                IN NUMBER   ,
8045 	    p_trx_line_dist_id          IN NUMBER ,
8046 	    p_ref_doc_unit_price        IN NUMBER ,
8047 	    p_rec_nrec_tax_dist_id IN NUMBER) RETURN NUMBER IS --Added three new paramter for the bug 10621602
8048 
8049     p_tax_tv NUMBER;
8050     l_debug_info varchar2(2000);
8051     l_api_name VARCHAR2(2000) := 'get_tv';
8052 
8053   BEGIN
8054 
8055     /*
8056       ni = p_inv_per_unit_nrec
8057       np = p_ref_per_unit_nrec
8058       ti = p_inv_per_trx_cur_unit_nrec
8059       tp = p_ref_per_trx_cur_unit_nrec
8060     */
8061 
8062     IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
8063 
8064         l_debug_info := 'p_rate_tax_factor '||p_rate_tax_factor||' '||'p_quantity_invoiced '||p_quantity_invoiced||' '||
8065                         'p_inv_per_unit_nrec '||p_inv_per_unit_nrec||' '||'p_ref_per_unit_nrec '||p_ref_per_unit_nrec||' '||
8066                         'p_inv_per_trx_cur_unit_nrec '||p_inv_per_trx_cur_unit_nrec||' '||'p_ref_per_trx_cur_unit_nrec '||' '||p_ref_per_trx_cur_unit_nrec||' '||
8067                         'p_pc_price_diff '||p_pc_price_diff||' '||'p_corrected_inv_id '||p_corrected_inv_id||' '||
8068                         'p_line_type '||p_line_type||' '||'p_line_source '||p_line_source||' '||'p_inv_currency_code '||' '||p_inv_currency_code||' '||
8069                         'p_line_match_type '||p_line_match_type||' '||'p_unit_price '||p_unit_price || 'p_trx_line_dist_id  ' || p_trx_line_dist_id || 'p_ref_doc_unit_price  ' || p_ref_doc_unit_price ||
8070 			' p_rec_nrec_tax_dist_id ' || p_rec_nrec_tax_dist_id;
8071         FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
8072     END IF;
8073 
8074  --bug 10621602 starts
8075   -- The below formula is only for the distribution related to retainage and retainge release invoice
8076 
8077      IF AP_ETAX_SERVICES_PKG.ret_dists.exists(p_trx_line_dist_id) THEN
8078 
8079 
8080       IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
8081 
8082             l_debug_info := 'Invoice Distribution amount  ' || AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).amount ||
8083 	    ' Retained amount ' || AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).retained_amount ||
8084 	    ' Retainage rate ' || AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).retainage_rate ||
8085 	    ' Quantity_Invoiced' || AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).quantity_invoiced ||
8086 	    ' Unit_price ' || AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).unit_price;
8087 
8088             FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
8089 
8090         END IF;
8091 
8092       IF ( AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).RELATED_RETAINAGE_DIST_ID IS NOT NULL) THEN --- Standard invoice with retainage
8093 
8094           p_tax_tv := ((AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).amount )* p_inv_per_trx_cur_unit_nrec)
8095 	              - ((p_quantity_invoiced * p_ref_doc_unit_price*(1 - AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).retainage_rate/100))*p_ref_per_trx_cur_unit_nrec);
8096 
8097        IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
8098 
8099         l_debug_info :=  'p_tax_tv := ((AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).amount )* p_inv_per_trx_cur_unit_nrec) ' ||
8100 	             ' - ((p_quantity_invoiced * p_ref_doc_unit_price*(1 - AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).retainage_rate/100))*p_ref_per_trx_cur_unit_nrec) ' ||
8101 		     ' (( ' || AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).amount || ' )* ' || p_inv_per_trx_cur_unit_nrec || ' ) ' ||
8102 		     ' - (( ' || p_quantity_invoiced || ' * ' || p_ref_doc_unit_price || ' *( 1- ' || AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).retainage_rate || ' /100))* ' || p_ref_per_trx_cur_unit_nrec || ' ) ' ;
8103 
8104             FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
8105 
8106        END IF;
8107 
8108 
8109        IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
8110 
8111             l_debug_info := 'Total Variance for standard invoice having retainage' || p_tax_tv ;
8112             FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
8113 
8114         END IF;
8115 
8116 	END IF;
8117 
8118        IF ( AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).RETAINED_INVOICE_DIST_ID IS NOT NULL) THEN --- Retainage Release invoice
8119 
8120        p_tax_tv := (AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).amount * p_inv_per_trx_cur_unit_nrec)
8121 	              - ((AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).quantity_invoiced * p_ref_doc_unit_price*AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).retainage_rate/100)*p_ref_per_trx_cur_unit_nrec);
8122 
8123        IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
8124 
8125         l_debug_info := 'p_tax_tv := (AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).amount * p_inv_per_trx_cur_unit_nrec)' ||
8126 	             ' - ((AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).quantity_invoiced * p_ref_doc_unit_price*AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).retainage_rate/100)* p_ref_per_trx_cur_unit_nrec) ' ||
8127 		      ' ( ' || AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).amount || ' * ' || p_inv_per_trx_cur_unit_nrec || ' ) ' ||
8128 		      ' - (( ' || AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).quantity_invoiced || ' * ' || p_ref_doc_unit_price || ' * ' ||
8129 		      AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).retainage_rate || ' / 100)* ' || p_ref_per_trx_cur_unit_nrec   ;
8130 
8131             FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
8132 
8133        END IF;
8134 
8135 
8136 	 IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
8137 
8138             l_debug_info := 'Total Variance for retainage invoice' || p_tax_tv ;
8139             FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
8140 
8141         END IF;
8142 
8143 
8144 	END IF;
8145 
8146    ELSE -- Normal Flow starts
8147    --bug 10621602 ends
8148 
8149         --Bug10416960
8150     IF (p_line_type = 'RETROITEM' AND p_line_match_type = 'PO_PRICE_ADJUSTMENT')THEN
8151 
8152        -- PPA Document. TV = Qi * Pi * (ti - tp)
8153 
8154               /*p_tax_tv := p_quantity_invoiced * p_inv_per_unit_nrec *
8155                (p_inv_per_trx_cur_unit_nrec - p_ref_per_trx_cur_unit_nrec); -- bug 8317515: modify*/
8156               p_tax_tv := p_quantity_invoiced * p_unit_price * (p_inv_per_trx_cur_unit_nrec - p_ref_per_trx_cur_unit_nrec); -- bug 8317515: modify
8157 
8158        IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
8159 
8160             l_debug_info := 'In P_LINE_TYPE = RETROITEM AND P_LINE_MATCH_TYPE = PO PRICE ADJUSTMENT CHECK. TAX VARIANCE IS '||p_tax_tv;
8161             FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
8162 
8163             l_debug_info := 'p_tax_tv := p_quantity_invoiced * p_unit_price * (p_inv_per_trx_cur_unit_nrec - p_ref_per_trx_cur_unit_nrec) '||
8164                              p_quantity_invoiced ||' * '||p_unit_price||' * ('||p_inv_per_trx_cur_unit_nrec ||' - '||p_ref_per_trx_cur_unit_nrec||')';
8165 
8166             FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
8167 
8168        END IF;
8169     --Bug10416960
8170 
8171     ELSIF p_corrected_inv_id IS NULL THEN
8172 
8173        IF p_line_match_type IN ('ITEM_TO_SERVICE_RECEIPT', 'ITEM_TO_SERVICE_PO') THEN
8174 
8175               p_tax_tv := p_quantity_invoiced * p_unit_price *
8176                           (p_inv_per_trx_cur_unit_nrec - p_ref_per_trx_cur_unit_nrec); -- bug 8317515: modify
8177 
8178 
8179               IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
8180 
8181                   l_debug_info := 'CORRECTED INV ID IS NULL AND MATCH TYPE IS ITEM_TO_SERVICE_RECEIPT OR ITEM_TO_SERVICE_PO. HENCE TAX VARIANCE IS '||p_tax_tv;
8182                   FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
8183 
8184                   l_debug_info := 'p_tax_tv := p_quantity_invoiced * p_unit_price * (p_inv_per_trx_cur_unit_nrec - p_ref_per_trx_cur_unit_nrec) '||
8185                                      p_quantity_invoiced||' * '||p_unit_price||' * ('||p_inv_per_trx_cur_unit_nrec ||' - '||p_ref_per_trx_cur_unit_nrec||')';
8186 
8187                   FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
8188 
8189 
8190               END IF;
8191 
8192        ELSE
8193               -- PO/Receipt Matched Invoice. TV = Qi * (ni - np)
8194 
8195               p_tax_tv := p_quantity_invoiced * (p_inv_per_unit_nrec - p_ref_per_unit_nrec); -- bug 8317515: modify
8196 
8197 
8198               IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
8199 
8200                   l_debug_info := 'CORRECTED INV ID IS NULL AND MATCH TYPE IS ITEM_TO_RECEIPT OR ITEM_TO_PO. HENCE TAX VARIANCE IS '||p_tax_tv;
8201                   FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
8202 
8203                   l_debug_info := 'p_tax_tv := p_quantity_invoiced * (p_inv_per_unit_nrec - p_ref_per_unit_nrec) '||
8204                                    p_quantity_invoiced||' * ('||p_inv_per_unit_nrec ||' - '||p_ref_per_unit_nrec||')';
8205 
8206                   FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
8207 
8208 
8209               END IF;
8210 
8211 
8212 
8213        END IF;
8214 
8215     ELSIF p_corrected_inv_id IS NOT NULL THEN
8216 
8217        -- Price/Quantity Correction. TV = RTF * Qi * Price Diff * ti
8218 
8219        p_tax_tv := p_rate_tax_factor * p_quantity_invoiced * p_pc_price_diff * p_inv_per_trx_cur_unit_nrec; --Bug9363214
8220 
8221        IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
8222 
8223            l_debug_info := 'CORRECTED INV ID IS NOT NULL. HENCE TAX VARIANCE IS '||p_tax_tv;
8224            FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
8225 
8226            l_debug_info := 'p_tax_tv := p_rate_tax_factor * p_quantity_invoiced * p_pc_price_diff * p_inv_per_trx_cur_unit_nrec '||
8227                             p_rate_tax_factor ||' * '||p_quantity_invoiced||' * '||p_pc_price_diff||' * '||p_inv_per_trx_cur_unit_nrec;
8228            FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
8229 
8230 
8231        END IF;
8232 
8233     END IF;
8234 
8235      END IF; -- Normal flow ends bug10621602
8236 
8237     IF p_tax_tv IS NOT NULL THEN
8238        p_tax_tv := ap_utilities_pkg.ap_round_currency (p_tax_tv, p_inv_currency_code);
8239 
8240        IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
8241 
8242            l_debug_info := 'TAX VARIANCE AFTER ROUNDING IS '||p_tax_tv;
8243 
8244            FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
8245 
8246        END IF;
8247 
8248     END IF;
8249 
8250     RETURN NVL(p_tax_tv,0);
8251 
8252   EXCEPTION
8253     WHEN NO_DATA_FOUND THEN
8254 
8255          RETURN NVL(p_tax_tv,0);
8256 
8257     WHEN OTHERS THEN
8258 
8259          RETURN NVL(p_tax_tv,0);
8260 
8261   END get_tv;
8262 
8263 /*=============================================================================
8264  |  FUNCTION get_tv_base()
8265  |
8266  |  DESCRIPTION
8267  |    This function will return the invoice price variance.
8268  |
8269  *============================================================================*/
8270   FUNCTION get_tv_base ( p_rate_tax_factor  IN NUMBER   ,
8271              p_quantity_invoiced            IN NUMBER   ,
8272              p_inv_per_unit_nrec            IN NUMBER   ,
8273              p_ref_per_unit_nrec            IN NUMBER   ,
8274              p_inv_per_trx_cur_unit_nrec    IN NUMBER   ,
8275              p_ref_per_trx_cur_unit_nrec    IN NUMBER   ,
8276              p_inv_curr_rate                IN NUMBER   ,
8277              p_ref_doc_curr_rate            IN NUMBER   ,
8278              p_pc_price_diff                IN NUMBER   ,
8279              p_corrected_inv_id             IN NUMBER   ,
8280              p_line_type                    IN VARCHAR2 ,
8281              p_line_source                  IN VARCHAR2 ,
8282              p_base_currency_code           IN VARCHAR2 ,
8283              p_line_match_type              IN VARCHAR2 ,
8284              p_unit_price                   IN NUMBER   ,
8285 	     p_trx_line_dist_id            IN NUMBER ,
8286 	     p_ref_doc_unit_price          IN NUMBER ,
8287 	     p_rec_nrec_tax_dist_id IN NUMBER) RETURN NUMBER IS --added three new parameters for the bug 10621602
8288 
8289     p_tax_tv_base NUMBER;
8290     l_debug_info varchar2(2000);
8291     l_api_name VARCHAR2(2000) := 'get_tv_base';
8292 
8293 
8294   BEGIN
8295     /*
8296       ni = p_inv_per_unit_nrec
8297       np = p_ref_per_unit_nrec
8298       ti = p_inv_per_trx_cur_unit_nrec
8299       tp = p_ref_per_trx_cur_unit_nrec
8300     */
8301 
8302     IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
8303 
8304         l_debug_info := 'p_rate_tax_factor '||p_rate_tax_factor||' '||'p_quantity_invoiced '||p_quantity_invoiced||' '||
8305                         'p_inv_per_unit_nrec '||p_inv_per_unit_nrec||' '||'p_ref_per_unit_nrec '||p_ref_per_unit_nrec||' '||
8306                         'p_inv_per_trx_cur_unit_nrec '||p_inv_per_trx_cur_unit_nrec||' '||'p_ref_per_trx_cur_unit_nrec '||' '||p_ref_per_trx_cur_unit_nrec||' '||
8307                         'p_inv_curr_rate '||p_inv_curr_rate||' '||'p_ref_doc_curr_rate '||' '||p_ref_doc_curr_rate||' '||
8308                         'p_pc_price_diff '||p_pc_price_diff||' '||'p_corrected_inv_id '||p_corrected_inv_id||' '||
8309                         'p_line_type '||p_line_type||' '||'p_line_source '||p_line_source||' '||'p_base_currency_code '||' '||p_base_currency_code||' '||
8310                         'p_line_match_type '||p_line_match_type||' '||'p_unit_price '||p_unit_price || 'p_trx_line_dist_id  ' || p_trx_line_dist_id || 'p_ref_doc_unit_price  ' ||
8311 			p_ref_doc_unit_price || ' p_rec_nrec_tax_dist_id ' || p_rec_nrec_tax_dist_id ;
8312         FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
8313     END IF;
8314 
8315     --bug 10621602 starts
8316     IF AP_ETAX_SERVICES_PKG.ret_dists.exists(p_trx_line_dist_id) THEN
8317 
8318      IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
8319 
8320             l_debug_info := 'Invoice Distribution amount  ' || AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).amount ||
8321 	    'Retained amount ' || AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).retained_amount ||
8322 	    'Retainage rate ' || AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).retainage_rate ||
8323 	    'Quantity_Invoiced' || AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).quantity_invoiced;
8324 
8325             FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
8326 
8327         END IF;
8328 
8329 
8330       IF ( AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).RELATED_RETAINAGE_DIST_ID IS NOT NULL) THEN --- Standard invoice with retainage
8331 
8332           p_tax_tv_base := ((AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).amount)* p_inv_per_trx_cur_unit_nrec * nvl(p_inv_curr_rate , 1) )
8333 	              - ((p_quantity_invoiced  * p_ref_doc_unit_price*(1 - AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).retainage_rate/100))*p_ref_per_trx_cur_unit_nrec * nvl(p_ref_doc_curr_rate , 1));
8334 
8335         IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
8336 
8337         l_debug_info := 'p_tax_tv_base := ((AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).amount)* p_inv_per_trx_cur_unit_nrec * nvl(p_inv_curr_rate , 1) ) ' ||
8338 	             ' - ((p_quantity_invoiced  * p_ref_doc_unit_price*(1 - AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).retainage_rate/100))*p_ref_per_trx_cur_unit_nrec * nvl(p_ref_doc_curr_rate , 1)) '  ||
8339 		     ' (( ' || AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).amount || ' )* ' ||  p_inv_per_trx_cur_unit_nrec || ' * ' || nvl(p_inv_curr_rate , 1) || ' ) ' ||
8340 		     ' - (( ' || p_quantity_invoiced || ' * ' || p_ref_doc_unit_price || ' *(1 - ' || AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).retainage_rate || ' /100))* ' ||
8341 		      p_ref_per_trx_cur_unit_nrec || ' * ' || nvl(p_ref_doc_curr_rate , 1) || ' ) '   ;
8342 
8343             FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
8344 
8345        END IF;
8346 
8347 
8348 	IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
8349 
8350             l_debug_info := 'Total Variance Base for standard invoice having retainage' || p_tax_tv_base ;
8351             FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
8352 
8353         END IF;
8354 
8355 	END IF;
8356 
8357        IF ( AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).RETAINED_INVOICE_DIST_ID IS NOT NULL) THEN --- Retainage Release invoice
8358 
8359        p_tax_tv_base := (AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).amount * p_inv_per_trx_cur_unit_nrec * nvl(p_inv_curr_rate , 1))
8360 	         - ((AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).quantity_invoiced * p_ref_doc_unit_price*AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).retainage_rate/100)*p_ref_per_trx_cur_unit_nrec * nvl(p_ref_doc_curr_rate , 1));
8361 
8362 
8363 	IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
8364 
8365         l_debug_info :=  ' p_tax_tv_base := (AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).amount * p_inv_per_trx_cur_unit_nrec * nvl(p_inv_curr_rate , 1)) ' ||
8366 	       ' - ((AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).quantity_invoiced * p_ref_doc_unit_price*AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).retainage_rate/100)*p_ref_per_trx_cur_unit_nrec * nvl(p_ref_doc_curr_rate , 1)) ' ||
8367 		' ( ' || AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).amount || ' * ' || p_inv_per_trx_cur_unit_nrec || ' * ' || nvl(p_inv_curr_rate , 1) || ' ) ' ||
8368 		      ' -(( ' || AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).quantity_invoiced || ' * ' || p_ref_doc_unit_price || ' * ' || AP_ETAX_SERVICES_PKG.ret_dists(p_trx_line_dist_id).retainage_rate || ' /100) * ' ||
8369 		      p_ref_per_trx_cur_unit_nrec || ' * ' || nvl(p_ref_doc_curr_rate , 1) || ' ) ' ;
8370 
8371             FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
8372 
8373        END IF;
8374 
8375 	 IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
8376 
8377             l_debug_info := 'Total Variance Base  retainage invoice ' || p_tax_tv_base ;
8378             FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
8379 
8380         END IF;
8381 
8382 
8383 	 END IF;
8384 
8385    ELSE -- Normal Flow starts
8386    --bug 10621602 ends
8387     --Bug10416960
8388     IF (p_line_type = 'RETROITEM' AND p_line_match_type = 'PO_PRICE_ADJUSTMENT') THEN
8389 
8390           -- PO Price Adjustment Line.
8391           -- tv_base = Qi * ni * (ti - tp) * Ep
8392 
8393          /* p_tax_tv_base := p_quantity_invoiced * p_inv_per_unit_nrec * p_ref_doc_curr_rate *
8394                    (p_inv_per_trx_cur_unit_nrec - p_ref_per_trx_cur_unit_nrec); -- bug 8317515: modify*/
8395 
8396             p_tax_tv_base := p_quantity_invoiced * p_unit_price * p_ref_doc_curr_rate *
8397                              (p_inv_per_trx_cur_unit_nrec - p_ref_per_trx_cur_unit_nrec);
8398 
8399 
8400           IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
8401 
8402              l_debug_info := 'In P_LINE_TYPE = RETROITEM AND P_LINE_MATCH_TYPE = PO PRICE ADJUSTMENT CHECK. TAX VARIANCE BASE IS '||p_tax_tv_base;
8403              FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
8404 
8405              l_debug_info := 'p_tax_tv_base := p_quantity_invoiced * p_unit_price *  p_ref_doc_curr_rate * (p_inv_per_trx_cur_unit_nrec - p_ref_per_trx_cur_unit_nrec) '||
8406                               p_quantity_invoiced ||' * '||p_unit_price||' * '|| p_ref_doc_curr_rate||' * ('||p_inv_per_trx_cur_unit_nrec ||' - '||p_ref_per_trx_cur_unit_nrec||')';
8407 
8408              FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
8409 
8410            END IF;
8411     --Bug10416960
8412     ELSIF p_corrected_inv_id IS NULL THEN
8413 
8414            IF p_line_match_type IN ('ITEM_TO_SERVICE_RECEIPT', 'ITEM_TO_SERVICE_PO') THEN
8415 
8416               p_tax_tv_base := p_quantity_invoiced * p_unit_price * p_inv_curr_rate *
8417                                (p_inv_per_trx_cur_unit_nrec - p_ref_per_trx_cur_unit_nrec); -- bug 8317515: modify
8418 
8419 
8420               IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
8421 
8422                   l_debug_info := 'CORRECTED INV ID IS NULL AND MATCH TYPE IS ITEM_TO_RECEIPT OR ITEM_TO_PO. HENCE TAX VARIANCE BASE IS '||p_tax_tv_base;
8423                   FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
8424 
8425                   l_debug_info := 'p_tax_tv_base := p_quantity_invoiced *p_unit_price * p_inv_curr_rate *(p_inv_per_trx_cur_unit_nrec - p_ref_per_trx_cur_unit_nrec) '||
8426                                    p_quantity_invoiced||' * '||p_unit_price||' * '||p_inv_curr_rate ||' * ('||p_inv_per_trx_cur_unit_nrec ||' - '||p_ref_per_trx_cur_unit_nrec||')';
8427 
8428                   FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
8429 
8430 
8431               END IF;
8432 
8433            ELSE
8434 
8435               -- PO/Receipt Matched Invoice.
8436           -- tv_base = Qi * (ni - np) * Ei
8437 
8438                p_tax_tv_base := p_quantity_invoiced * p_inv_curr_rate * (p_inv_per_unit_nrec - p_ref_per_unit_nrec); -- bug 8317515: modify
8439 
8440                IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
8441 
8442                    l_debug_info := 'CORRECTED INV ID IS NULL AND MATCH TYPE IS ITEM_TO_RECEIPT OR ITEM_TO_PO. HENCE TAX VARIANCE BASE IS '||p_tax_tv_base;
8443                    FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
8444 
8445                    l_debug_info := 'p_tax_tv_base := p_quantity_invoiced * p_inv_curr_rate * (p_inv_per_unit_nrec - p_ref_per_unit_nrec) '||
8446                                     p_quantity_invoiced||' * '||p_inv_curr_rate||' * ('||p_inv_per_unit_nrec ||' - '||p_ref_per_unit_nrec||')';
8447 
8448                    FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
8449 
8450 
8451                END IF;
8452 
8453        END IF;
8454 
8455     ELSIF p_corrected_inv_id IS NOT NULL THEN
8456 
8457        -- Price/Quantity Correction.
8458        -- tv_base = RTF * Qi * Pi * ti * Ei
8459 
8460        p_tax_tv_base := p_rate_tax_factor * p_quantity_invoiced * p_pc_price_diff * p_inv_curr_rate * p_inv_per_trx_cur_unit_nrec ; --Bug9363214
8461 
8462        IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
8463 
8464            l_debug_info := 'CORRECTED INV ID IS NOT NULL. HENCE TAX VARIANCE BASE IS '||p_tax_tv_base;
8465            FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
8466 
8467            l_debug_info := 'p_tax_tv_base := p_rate_tax_factor * p_quantity_invoiced * p_pc_price_diff * p_inv_curr_rate * p_inv_per_trx_cur_unit_nrec '||
8468                             p_rate_tax_factor ||' * '||p_quantity_invoiced||' * '||p_pc_price_diff||' * '||p_inv_curr_rate||' * '||
8469                             p_inv_per_trx_cur_unit_nrec;
8470 
8471            FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
8472 
8473 
8474        END IF;
8475 
8476     END IF;
8477     END IF; --Normal Flow ends  bug10621602
8478 
8479     IF p_tax_tv_base IS NOT NULL THEN
8480        p_tax_tv_base := ap_utilities_pkg.ap_round_currency (p_tax_tv_base, p_base_currency_code);
8481 
8482        IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
8483 
8484            l_debug_info := 'TAX VARIANCE BASE AFTER ROUNDING IS '||p_tax_tv_base;
8485 
8486            FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
8487 
8488        END IF;
8489 
8490     END IF;
8491 
8492     RETURN NVL(p_tax_tv_base,0);
8493 
8494   EXCEPTION
8495 
8496     WHEN NO_DATA_FOUND THEN
8497 
8498          RETURN NVL(p_tax_tv_base,0);
8499 
8500     WHEN OTHERS THEN
8501 
8502          RETURN NVL(p_tax_tv_base,0);
8503 
8504   END get_tv_base;
8505 
8506 /*=============================================================================
8507  |  PROCEDURE - get_header_tax_attr_desc()
8508  |
8509  |  DESCRIPTION
8510  |    This procedure will return the description of the following tax drivers
8511  |    stored at the document header.
8512  |    1. Taxation Country
8513  |    2. Document Sub Type
8514  |    3. Related Invoice
8515  |
8516  |  PARAMETERS
8517  |    P_Taxation_Country        - Taxation Country
8518  |    P_Document_Sub_Type       - Document Sub Type
8519  |    P_Tax_Related_Invoice_Id  - Related Invoice
8520  |
8521  |  MODIFICATION HISTORY
8522  |    DATE          Author  Action
8523  |    13-AUG-2004   Sanjay  Created
8524  *============================================================================*/
8525   PROCEDURE get_header_tax_attr_desc
8526                 ( p_taxation_country            IN         VARCHAR2,
8527                   p_document_sub_type           IN         VARCHAR2,
8528                   p_tax_related_inv_id          IN         NUMBER,
8529                   p_taxation_country_desc       OUT NOCOPY VARCHAR2,
8530                   p_document_sub_type_desc      OUT NOCOPY VARCHAR2,
8531                   p_tax_related_inv_num         OUT NOCOPY VARCHAR2,
8532                   p_calling_sequence            IN         VARCHAR2) IS
8533 
8534         CURSOR c_txn_ctry (c_ctry_code VARCHAR2) IS
8535         SELECT territory_short_name
8536           FROM fnd_territories_tl
8537          WHERE territory_code = c_ctry_code
8538            AND language = userenv ('LANG');
8539 
8540         CURSOR c_tax_rel_inv_num (c_inv_id VARCHAR2) IS
8541         SELECT ai.invoice_num tax_related_invoice_num
8542           FROM ap_invoices ai
8543          WHERE ai.invoice_id = c_inv_id;
8544 
8545         CURSOR c_doc_sub_type (c_class_code VARCHAR2,
8546                                c_ctry_code  VARCHAR2) IS
8547         SELECT classification_name
8548           FROM zx_fc_intended_use_v
8549          WHERE classification_code = c_class_code
8550            AND country_code        = c_ctry_code;
8551 
8552         l_debug_info                 VARCHAR2(240);
8553         l_curr_calling_sequence      VARCHAR2(4000);
8554         l_api_name			  CONSTANT VARCHAR2(100) := 'get_header_tax_attr_desc';
8555 
8556   BEGIN
8557         l_curr_calling_sequence := 'AP_ETAX_UTILITY_PKG.Get_Header_Tax_Attr_Desc<-' ||
8558                                     p_calling_sequence;
8559 
8560         --------------------------------------------------
8561         l_debug_info := 'Step 1: Get Taxation Country';
8562         IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
8563            FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
8564         END IF;
8565         --------------------------------------------------
8566         IF p_taxation_country IS NOT NULL THEN
8567 
8568            OPEN  c_txn_ctry (p_taxation_country);
8569            FETCH c_txn_ctry
8570            INTO  p_taxation_country_desc;
8571            CLOSE c_txn_ctry;
8572 
8573         END IF;
8574 
8575         --------------------------------------------------
8576         l_debug_info := 'Step 2: Get Related Inv Number';
8577         IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
8578            FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
8579         END IF;
8580         --------------------------------------------------
8581         IF p_tax_related_inv_id IS NOT NULL THEN
8582 
8583            OPEN  c_tax_rel_inv_num (p_tax_related_inv_id);
8584            FETCH c_tax_rel_inv_num
8585            INTO  p_tax_related_inv_num;
8586            CLOSE c_tax_rel_inv_num;
8587 
8588         END IF;
8589 
8590         --------------------------------------------------
8591         l_debug_info := 'Step 3: Get Document Sub Type';
8592         IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
8593            FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
8594         END IF;
8595         --------------------------------------------------
8596         IF p_document_sub_type IS NOT NULL AND
8597            p_taxation_country  IS NOT NULL THEN
8598 
8599            OPEN  c_doc_sub_type (p_document_sub_type,
8600                                  p_taxation_country);
8601            FETCH c_doc_sub_type
8602            INTO  p_document_sub_type_desc;
8603            CLOSE c_doc_sub_type;
8604 
8605         END IF;
8606 
8607   EXCEPTION
8608         WHEN OTHERS THEN
8609              IF (SQLCODE <> -20001) THEN
8610                 fnd_message.set_name ('SQLAP', 'AP_DEBUG');
8611                 fnd_message.set_token('ERROR', SQLERRM);
8612                 fnd_message.set_token('CALLING_SEQUENCE', l_curr_calling_sequence);
8613                 fnd_message.set_token('PARAMETERS',
8614                                       ' p_taxation_country   = '||p_taxation_country  ||
8615                                       ' p_document_sub_type  = '||p_document_sub_type ||
8616                                       ' p_tax_related_inv_id = '||p_tax_related_inv_id);
8617                 fnd_message.set_token('DEBUG_INFO',l_debug_info);
8618              END IF;
8619              app_exception.raise_exception;
8620 
8621 
8622   END get_header_tax_attr_desc;
8623 
8624 
8625 /*=============================================================================
8626  |  PROCEDURE - get_taxable_line_attr_desc()
8627  |
8628  |  DESCRIPTION
8629  |    This procedure will return the descriptions of tax drivers on the taxable
8630  |    line.
8631  |
8632  |  PARAMETERS
8633  |    P_Taxation_Country        - Taxation Country
8634  |    P_Trx_Bus_Category        - Transaction Business Category
8635  |    P_Prd_Fisc_Class          - Product Fiscal Classification
8636  |    P_User_Fisc_Class         - User Defined Fiscal Classification
8637  |    P_Prim_Int_Use            - Primary Intended Use
8638  |    P_Product_Type            - Product Type
8639  |    P_Product_Category        - Product Category
8640  |    P_Inv_Item_Id             - Inventory Item Identifier
8641  |    P_Org_Id                  - Organization Identifier
8642  |
8643  |  MODIFICATION HISTORY
8644  |    DATE          Author  Action
8645  |    13-AUG-2004   Sanjay  Created
8646  *============================================================================*/
8647   PROCEDURE get_taxable_line_attr_desc
8648                 ( p_taxation_country            IN         VARCHAR2,
8649                   p_trx_bus_category            IN         VARCHAR2,
8650                   p_prd_fisc_class              IN         VARCHAR2,
8651                   p_user_fisc_class             IN         VARCHAR2,
8652                   p_prim_int_use                IN         VARCHAR2,
8653                   p_product_type                IN         VARCHAR2,
8654                   p_product_category            IN         VARCHAR2,
8655                   p_inv_item_id                 IN         NUMBER,
8656                   p_org_id                      IN         NUMBER,
8657                   p_trx_bus_category_desc       OUT NOCOPY VARCHAR2,
8658                   p_prd_fisc_class_desc         OUT NOCOPY VARCHAR2,
8659                   p_user_fisc_class_desc        OUT NOCOPY VARCHAR2,
8660                   p_prim_int_use_desc           OUT NOCOPY VARCHAR2,
8661                   p_product_type_desc           OUT NOCOPY VARCHAR2,
8662                   p_product_category_desc       OUT NOCOPY VARCHAR2,
8663                   p_calling_sequence            IN         VARCHAR2) IS
8664 
8665         CURSOR c_bus_cat (c_class_code VARCHAR2,
8666                           c_txn_ctry   VARCHAR2) IS
8667         SELECT classification_name
8668         FROM   zx_fc_business_categories_v
8669         WHERE  classification_code = c_class_code
8670         AND    (country_code       = c_txn_ctry OR
8671                 country_code IS NULL);
8672 
8673         CURSOR c_fisc_class (c_class_code VARCHAR2,
8674                              c_txn_ctry   VARCHAR2) IS
8675         SELECT classification_name
8676         FROM   zx_fc_product_fiscal_v
8677         WHERE  classification_code = c_class_code
8678         AND    (country_code       = c_txn_ctry OR
8679                 country_code IS NULL);
8680 
8681         CURSOR c_user_fisc_class (c_class_code VARCHAR2,
8682                                   c_txn_ctry   VARCHAR2) IS
8683         SELECT classification_name
8684         FROM   zx_fc_user_defined_v
8685         WHERE  classification_code = c_class_code
8686         AND    (country_code       = c_txn_ctry OR
8687                 country_code IS NULL);
8688 
8689         CURSOR c_prim_int_use (c_class_code VARCHAR2,
8690                                c_txn_ctry   VARCHAR2) IS
8691         SELECT classification_name
8692         FROM   zx_fc_intended_use_v
8693         WHERE  classification_code = c_class_code
8694         AND    (country_code       = c_txn_ctry OR
8695                 country_code IS NULL);
8696 
8697 	CURSOR c_product_type (c_class_code  VARCHAR2) IS
8698         SELECT classification_name
8699         FROM   zx_product_types_v
8700 	WHERE  classification_code = c_class_code;
8701 
8702         CURSOR c_product_category (c_class_code VARCHAR2,
8703                                    c_txn_ctry   VARCHAR2) IS
8704         SELECT classification_name
8705         FROM   zx_fc_product_categories_v
8706         WHERE  classification_code = c_class_code
8707         AND    (country_code       = c_txn_ctry OR
8708                 country_code IS NULL);
8709 
8710         l_debug_info                 VARCHAR2(240);
8711         l_curr_calling_sequence      VARCHAR2(4000);
8712         l_api_name			  CONSTANT VARCHAR2(100) := 'get_taxable_line_attr_desc';
8713 
8714 BEGIN
8715 
8716         l_curr_calling_sequence := 'AP_ETAX_UTILITY_PKG.Get_Taxable_Line_Attr_Desc<-' ||
8717                                     p_calling_sequence;
8718 
8719         IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
8720            FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_curr_calling_sequence);
8721         END IF;
8722 
8723         ------------------------------------------------------------------
8724         l_debug_info := 'Step 1: Get Business Category';
8725         IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
8726            FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
8727         END IF;
8728         ------------------------------------------------------------------
8729         IF p_trx_bus_category IS NOT NULL THEN
8730 
8731            OPEN  c_bus_cat (p_trx_bus_category,
8732                             p_taxation_country);
8733            FETCH c_bus_cat
8734            INTO  p_trx_bus_category_desc;
8735            CLOSE c_bus_cat;
8736 
8737         END IF;
8738 
8739         ------------------------------------------------------------------
8740         l_debug_info := 'Step 2: Get Fiscal Classification';
8741         IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
8742            FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
8743         END IF;
8744         ------------------------------------------------------------------
8745         IF p_prd_fisc_class IS NOT NULL THEN
8746 
8747            OPEN  c_fisc_class (p_prd_fisc_class,
8748                                p_taxation_country);
8749            FETCH c_fisc_class
8750            INTO  p_prd_fisc_class_desc;
8751            CLOSE c_fisc_class;
8752 
8753         END IF;
8754 
8755         ------------------------------------------------------------------
8756         l_debug_info := 'Step 3: Get User Defined Fiscal Classification';
8757         IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
8758            FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
8759         END IF;
8760         ------------------------------------------------------------------
8761         IF p_user_fisc_class IS NOT NULL THEN
8762 
8763            OPEN  c_user_fisc_class (p_user_fisc_class,
8764                                     p_taxation_country);
8765            FETCH c_user_fisc_class
8766            INTO  p_user_fisc_class_desc;
8767            CLOSE c_user_fisc_class;
8768 
8769         END IF;
8770 
8771         ------------------------------------------------------------------
8772         l_debug_info := 'Step 4: Get Primary Intended Use';
8773         IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
8774            FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
8775         END IF;
8776         ------------------------------------------------------------------
8777         IF p_prim_int_use IS NOT NULL THEN
8778 
8779            OPEN  c_prim_int_use (p_prim_int_use,
8780                                  p_taxation_country);
8781            FETCH c_prim_int_use
8782            INTO  p_prim_int_use_desc;
8783            CLOSE c_prim_int_use;
8784 
8785         END IF;
8786 
8787         ------------------------------------------------------------------
8788         l_debug_info := 'Step 5: Get Product Type';
8789         IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
8790            FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
8791         END IF;
8792         ------------------------------------------------------------------
8793         IF p_product_type IS NOT NULL THEN
8794 
8795 	   OPEN  c_product_type (p_product_type);
8796            FETCH c_product_type
8797            INTO  p_product_type_desc;
8798            CLOSE c_product_type;
8799 
8800         END IF;
8801 
8802         ------------------------------------------------------------------
8803         l_debug_info := 'Step 5: Get Product Category';
8804         IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
8805            FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
8806         END IF;
8807         ------------------------------------------------------------------
8808         IF p_product_category IS NOT NULL THEN
8809 
8810            OPEN  c_product_category (p_product_category,
8811                                      p_taxation_country);
8812            FETCH c_product_category
8813            INTO  p_product_category_desc;
8814            CLOSE c_product_category;
8815 
8816         END IF;
8817 
8818   EXCEPTION
8819         WHEN OTHERS THEN
8820              IF (SQLCODE <> -20001) THEN
8821                 fnd_message.set_name ('SQLAP', 'AP_DEBUG');
8822                 fnd_message.set_token('ERROR', SQLERRM);
8823                 fnd_message.set_token('CALLING_SEQUENCE', l_curr_calling_sequence);
8824                 fnd_message.set_token('PARAMETERS',
8825                                       ' p_taxation_country   = '||p_taxation_country  ||
8826                                       ' p_trx_bus_category   = '||p_trx_bus_category  ||
8827                                       ' p_prd_fisc_class     = '||p_prd_fisc_class    ||
8828                                       ' p_user_fisc_class    = '||p_user_fisc_class   ||
8829                                       ' p_prim_int_use       = '||p_prim_int_use      ||
8830                                       ' p_product_type       = '||p_product_type      ||
8831                                       ' p_product_category   = '||p_product_category  ||
8832                                       ' p_inv_item_id        = '||p_inv_item_id       ||
8833                                       ' p_org_id             = '||p_org_id            );
8834 
8835                 fnd_message.set_token('DEBUG_INFO',l_debug_info);
8836              END IF;
8837              app_exception.raise_exception;
8838 
8839   END get_taxable_line_attr_desc;
8840 
8841 /*=============================================================================
8842  |  PROCEDURE - get_tax_line_attr_desc()
8843  |
8844  |  DESCRIPTION
8845  |    This procedure will return the descriptions of tax related attributes
8846  |    on the tax line.
8847  |
8848  |  PARAMETERS
8849  |    P_Taxation_Country        - Taxation Country
8850  |    P_Tax_Regime_Code         - Tax Regime
8851  |    P_Tax                     - Tax
8852  |    P_Tax_Jurisdiction_Code   - Tax Jurisidiction
8853  |    P_Tax_Status_Code         - Tax Status
8854  |
8855  |  MODIFICATION HISTORY
8856  |    DATE          Author  Action
8857  |    13-AUG-2004   Sanjay  Created
8858  *============================================================================*/
8859   PROCEDURE get_tax_line_attr_desc
8860                 ( p_taxation_country            IN         VARCHAR2,
8861                   p_tax_regime_code             IN         VARCHAR2,
8862                   p_tax                         IN         VARCHAR2,
8863                   p_tax_jurisdiction_code       IN         VARCHAR2,
8864                   p_tax_status_code             IN         VARCHAR2,
8865                   p_tax_regime_code_desc        OUT NOCOPY VARCHAR2,
8866                   p_tax_desc                    OUT NOCOPY VARCHAR2,
8867                   p_tax_jurisdiction_desc       OUT NOCOPY VARCHAR2,
8868                   p_tax_status_code_desc        OUT NOCOPY VARCHAR2,
8869                   p_calling_sequence            IN         VARCHAR2) AS
8870 
8871         CURSOR c_tax_regime (c_tax_regime_code VARCHAR2,
8872                              c_txn_ctry        VARCHAR2) IS
8873         SELECT vl.tax_regime_name
8874         FROM   zx_regimes_vl vl
8875         WHERE  vl.country_code    = c_txn_ctry
8876         AND    vl.tax_regime_code = c_tax_regime_code;
8877 
8878         CURSOR c_tax (c_tax        VARCHAR2,
8879                       c_tax_regime VARCHAR2) IS
8880         SELECT tax_full_name
8881         FROM   zx_sco_taxes
8882         WHERE  tax_regime_code = c_tax_regime
8883         AND    tax             = c_tax;
8884 
8885         CURSOR c_tax_jurisdiction (c_tax              VARCHAR2,
8886                                    c_tax_regime       VARCHAR2,
8887                                    c_tax_jurisdiction VARCHAR2) IS
8888         SELECT tax_jurisdiction_name
8889           FROM zx_jurisdictions_vl
8890          WHERE tax_regime_code       = c_tax_regime
8891            AND tax                   = c_tax
8892            AND tax_jurisdiction_code = c_tax_jurisdiction;
8893 
8894         CURSOR c_tax_status (c_tax        VARCHAR2,
8895                              c_tax_regime VARCHAR2,
8896                              c_tax_status VARCHAR2) IS
8897         SELECT tax_status_name
8898         FROM   zx_sco_status
8899         WHERE  tax_regime_code  = c_tax_regime
8900         AND    tax              = c_tax
8901         AND    tax_status_code  = c_tax_status;
8902 
8903         l_debug_info                 VARCHAR2(240);
8904         l_curr_calling_sequence      VARCHAR2(4000);
8905         l_api_name			  CONSTANT VARCHAR2(100) := 'get_tax_line_attr_desc';
8906 
8907   BEGIN
8908         l_curr_calling_sequence := 'AP_ETAX_UTILITY_PKG.Get_Taxable_Line_Attr_Desc<-' ||
8909                                     p_calling_sequence;
8910 
8911         IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
8912            FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_curr_calling_sequence);
8913         END IF;
8914 
8915         ------------------------------------------------
8916         l_debug_info := 'Step 1: Get Tax Regime';
8917         IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
8918            FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
8919         END IF;
8920         ------------------------------------------------
8921         IF p_tax_regime_code IS NOT NULL THEN
8922 
8923            OPEN  c_tax_regime (p_tax_regime_code,
8924                                p_taxation_country);
8925            FETCH c_tax_regime
8926            INTO  p_tax_regime_code_desc;
8927            CLOSE c_tax_regime;
8928 
8929         END IF;
8930 
8931         ------------------------------------------------
8932         l_debug_info := 'Step 2: Get Tax';
8933         IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
8934            FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
8935         END IF;
8936         ------------------------------------------------
8937         IF p_tax IS NOT NULL THEN
8938 
8939            OPEN  c_tax (p_tax,
8940                         p_tax_regime_code);
8941            FETCH c_tax
8942            INTO  p_tax_desc;
8943            CLOSE c_tax;
8944 
8945         END IF;
8946 
8947         ------------------------------------------------
8948         l_debug_info := 'Step 3: Get Tax Jurisdiction';
8949         IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
8950            FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
8951         END IF;
8952         ------------------------------------------------
8953         IF p_tax_jurisdiction_code IS NOT NULL THEN
8954 
8955            OPEN  c_tax_jurisdiction (p_tax,
8956                                      p_tax_regime_code,
8957                                      p_tax_jurisdiction_code);
8958            FETCH c_tax_jurisdiction
8959            INTO  p_tax_jurisdiction_desc;
8960            CLOSE c_tax_jurisdiction;
8961 
8962         END IF;
8963 
8964         ------------------------------------------------
8965         l_debug_info := 'Step 4: Get Tax Status';
8966         IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
8967            FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
8968         END IF;
8969         ------------------------------------------------
8970         IF p_tax_status_code IS NOT NULL THEN
8971 
8972            OPEN  c_tax_status (p_tax,
8973                                p_tax_regime_code,
8974                                p_tax_status_code);
8975 
8976            FETCH c_tax_status
8977            INTO  p_tax_status_code_desc;
8978            CLOSE c_tax_status;
8979 
8980         END IF;
8981 
8982   EXCEPTION
8983         WHEN OTHERS THEN
8984              IF (SQLCODE <> -20001) THEN
8985                 fnd_message.set_name ('SQLAP', 'AP_DEBUG');
8986                 fnd_message.set_token('ERROR', SQLERRM);
8987                 fnd_message.set_token('CALLING_SEQUENCE', l_curr_calling_sequence);
8988                 fnd_message.set_token('PARAMETERS',
8989                                       ' p_taxation_country      = '||p_taxation_country      ||
8990                                       ' p_tax_regime_code       = '||p_tax_regime_code       ||
8991                                       ' p_tax                   = '||p_tax                   ||
8992                                       ' p_tax_jurisdiction_code = '||p_tax_jurisdiction_code ||
8993                                       ' p_tax_status_code       = '||p_tax_status_code );
8994 
8995                 fnd_message.set_token('DEBUG_INFO',l_debug_info);
8996              END IF;
8997              app_exception.raise_exception;
8998 
8999   END get_tax_line_attr_desc;
9000 
9001 /*=============================================================================
9002  |  PROCEDURE - get_default_tax_det_attribs()
9003  |
9004  |  DESCRIPTION
9005  |    This procedure will return the default tax drivers based on the
9006  |    organization identifier.
9007  |
9008  |  PARAMETERS
9009  |    P_Org_Id          - Organization Id
9010  |    P_Legal_Entity_Id - Legal Entity Id
9011  |    P_Item_Id         - Inventory Item Id
9012  |    P_Doc_Type        - Document Type
9013  |    P_Trx_Date        - Transaction Date
9014  |
9015  |  MODIFICATION HISTORY
9016  |    DATE          Author  Action
9017  |    13-AUG-2004   Sanjay  Created
9018  *============================================================================*/
9019   PROCEDURE get_default_tax_det_attribs
9020                         (p_org_id               IN NUMBER,
9021                          p_legal_entity_id      IN NUMBER,
9022                          p_item_id              IN NUMBER,
9023                          p_doc_type             IN VARCHAR2,
9024                          p_trx_date             IN DATE,
9025                          x_return_status        OUT NOCOPY VARCHAR2,
9026                          x_msg_count            OUT NOCOPY NUMBER,
9027                          x_msg_data             OUT NOCOPY VARCHAR2,
9028                          p_country_code         OUT NOCOPY VARCHAR2,
9029                          p_trx_biz_category     OUT NOCOPY VARCHAR2,
9030                          p_intended_use         OUT NOCOPY VARCHAR2,
9031                          p_prod_category        OUT NOCOPY VARCHAR2,
9032                          p_prod_fisc_class_code OUT NOCOPY VARCHAR2,
9033                          p_calling_sequence     IN  VARCHAR2) IS
9034 
9035         l_tax_effective_date    DATE;
9036         l_success               BOOLEAN;
9037         l_error_code            VARCHAR2(30);
9038         l_event_class_code      VARCHAR2(100);
9039 	    l_product_type		ap_invoice_lines_all.product_type%type;
9040 
9041         l_debug_info            VARCHAR2(240);
9042         l_curr_calling_sequence VARCHAR2(4000);
9043         l_api_name			  CONSTANT VARCHAR2(100) := 'get_default_tax_det_attribs';
9044 
9045   BEGIN
9046 
9047         l_curr_calling_sequence := 'AP_ETAX_UTILITY_PKG.Get_Default_Tax_Det_Attribs<-' ||
9048                                     p_calling_sequence;
9049 
9050         ------------------------------------------------
9051         l_debug_info := 'Step 1: Get Taxation Country';
9052         IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9053            FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
9054         END IF;
9055         ------------------------------------------------
9056         xle_utilities_grp.get_fp_countrycode_ou (
9057                                 p_api_version       => 1.0,
9058                                 p_init_msg_list     => FND_API.G_FALSE,
9059                                 p_commit            => FND_API.G_FALSE,
9060                                 x_return_status     => x_return_status,
9061                                 x_msg_count         => x_msg_count,
9062                                 x_msg_data          => x_msg_data,
9063                                 p_operating_unit    => p_org_id,
9064                                 x_country_code      => p_country_code);
9065 
9066         IF p_country_code IS NOT NULL THEN
9067 
9068         -------------------------------------------
9069         l_debug_info := 'Step 2: Get Event Class';
9070         IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9071           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
9072         END IF;
9073         -------------------------------------------
9074            l_success := AP_ETAX_UTILITY_PKG.Get_Event_Class_Code (
9075                                 p_invoice_type_lookup_code  => p_doc_type,
9076                                 p_event_class_code          => l_event_class_code,
9077                                 p_error_code                => l_error_code,
9078                                 p_calling_sequence          => l_curr_calling_sequence);
9079 
9080            IF (l_success) THEN
9081 
9082                 ----------------------------------------------------
9083                 l_debug_info := 'Step 3: Set Tax Security Context';
9084                 IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9085                    FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
9086                 END IF;
9087                 ----------------------------------------------------
9088                 AP_ETAX_UTILITY_PKG.set_tax_security_context (
9089                                 p_org_id                => p_org_id,
9090                                 p_legal_entity_id       => p_legal_entity_id,
9091                                 p_transaction_date      => NVL(p_trx_date, sysdate),
9092                                 p_related_doc_date      => NULL,
9093                                 p_adjusted_doc_date     => NULL,
9094                                 p_effective_date        => l_tax_effective_date,
9095                                 p_return_status         => x_return_status,
9096                                 p_msg_count             => x_msg_count,
9097                                 p_msg_data              => x_msg_data);
9098 
9099                 ------------------------------------------------------------------
9100                 l_debug_info := 'Step 4: Get Default Tax Determining Attributes';
9101                 IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9102                    FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
9103                 END IF;
9104                 ------------------------------------------------------------------
9105                 zx_api_pub.get_default_tax_det_attribs (
9106                                 p_api_version           => 1.0,
9107                                 p_init_msg_list         => FND_API.G_FALSE,
9108                                 p_commit                => FND_API.G_FALSE,
9109                                 p_validation_level      => FND_API.G_VALID_LEVEL_FULL,
9110                                 x_return_status         => x_return_status,
9111                                 x_msg_count             => x_msg_count,
9112                                 x_msg_data              => x_msg_data,
9113                                 p_application_id        => 200,
9114                                 p_entity_code           => 'AP_INVOICES',
9115                                 p_event_class_code      => l_event_class_code,
9116                                 p_org_id                => p_org_id,
9117                                 p_item_id               => p_item_id,
9118                                 p_country_code          => p_country_code,
9119                                 p_effective_date        => l_tax_effective_date,
9120                                 x_trx_biz_category      => p_trx_biz_category,
9121                                 x_intended_use          => p_intended_use,
9122                                 x_prod_category         => p_prod_category,
9123                                 x_prod_fisc_class_code  => p_prod_fisc_class_code,
9124 				x_product_type		=> l_product_type);
9125 
9126            END IF;
9127 
9128         END IF;
9129 
9130   EXCEPTION
9131         WHEN OTHERS THEN
9132              IF (SQLCODE <> -20001) THEN
9133                 fnd_message.set_name ('SQLAP', 'AP_DEBUG');
9134                 fnd_message.set_token('ERROR', SQLERRM);
9135                 fnd_message.set_token('CALLING_SEQUENCE', l_curr_calling_sequence);
9136                 fnd_message.set_token('PARAMETERS',
9137                                       ' p_org_id                = '||p_org_id           ||
9138                                       ' p_legal_entity_id       = '||p_legal_entity_id  ||
9139                                       ' p_item_id               = '||p_item_id          ||
9140                                       ' p_doc_type              = '||p_doc_type         ||
9141                                       ' p_trx_date              = '||p_trx_date );
9142 
9143                 fnd_message.set_token('DEBUG_INFO',l_debug_info);
9144              END IF;
9145              app_exception.raise_exception;
9146 
9147   END get_default_tax_det_attribs;
9148 
9149 
9150 PROCEDURE insert_tax_distributions(
9151 				  p_invoice_header_rec       IN ap_invoices_all%ROWTYPE,
9152 				  p_inv_dist_rec             IN r_ins_tax_dist_info,
9153 				  p_dist_code_combination_id IN NUMBER,
9154 				  p_user_id	             IN NUMBER,
9155 				  p_sysdate	             IN DATE,
9156 				  p_login_id	             IN	NUMBER,
9157 				  p_calling_sequence         IN VARCHAR2) IS
9158 
9159  l_curr_calling_sequence VARCHAR2(2000);
9160  l_debug_info		 VARCHAR2(2000);
9161  l_api_name		 VARCHAR2(80);
9162 
9163   -- Bug 7126676
9164  l_awt_success   Varchar2(1000);
9165  l_invoice_distribution_id ap_invoice_distributions_all.invoice_distribution_id%TYPE;
9166  l_dist_line_num NUMBER; /*bug 10282701*/
9167 BEGIN
9168 
9169      l_api_name := 'Insert_Tax_Distributions';
9170 
9171      l_curr_calling_sequence := 'Insert_Tax_Distributions <- '||p_calling_sequence;
9172 
9173      IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
9174        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'AP_ETAX_UTILITY_PKG.Insert_Tax_Distributions(+)');
9175      END IF;
9176 
9177      l_debug_info := 'Step 11: Insert new distributions including variances';
9178 
9179      IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9180         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
9181      END IF;
9182 
9183      -- bug 7126676
9184      select ap_invoice_distributions_s.NEXTVAL into l_invoice_distribution_id from dual;
9185 
9186      l_dist_line_num := AP_INVOICE_LINES_PKG.get_max_dist_line_num(
9187                                              p_inv_dist_rec.invoice_id,
9188                                              p_inv_dist_rec.invoice_line_number)+1; /*bug 10282701*/
9189 
9190      INSERT INTO ap_invoice_distributions_all (
9191             accounting_date,
9192             accrual_posted_flag,
9193             assets_addition_flag,
9194             assets_tracking_flag,
9195             cash_posted_flag,
9196             distribution_line_number,
9197             dist_code_combination_id,
9198             invoice_id,
9199             last_updated_by,
9200             last_update_date,
9201             line_type_lookup_code,
9202             period_name,
9203             set_of_books_id,
9204             amount,
9205             base_amount,
9206             batch_id,
9207             created_by,
9208             creation_date,
9209             description,
9210             final_match_flag,
9211             income_tax_region,
9212             last_update_login,
9213             match_status_flag,
9214             posted_flag,
9215             po_distribution_id,
9216             program_application_id,
9217             program_id,
9218             program_update_date,
9219             quantity_invoiced,
9220             request_id,
9221             reversal_flag,
9222             type_1099,
9223             unit_price,
9224             encumbered_flag,
9225             stat_amount,
9226             attribute1,
9227             attribute10,
9228             attribute11,
9229             attribute12,
9230             attribute13,
9231             attribute14,
9232             attribute15,
9233             attribute2,
9234             attribute3,
9235             attribute4,
9236             attribute5,
9237             attribute6,
9238             attribute7,
9239             attribute8,
9240             attribute9,
9241             attribute_category,
9242             expenditure_item_date,
9243             expenditure_organization_id,
9244             expenditure_type,
9245             parent_invoice_id,
9246             pa_addition_flag,
9247             pa_quantity,
9248             prepay_amount_remaining,
9249             project_accounting_context,
9250             project_id,
9251             task_id,
9252             packet_id,
9253             awt_flag,
9254             awt_group_id,
9255             awt_tax_rate_id,
9256             awt_gross_amount,
9257             awt_invoice_id,
9258             awt_origin_group_id,
9259             reference_1,
9260             reference_2,
9261             org_id,
9262             awt_invoice_payment_id,
9263             global_attribute_category,
9264             global_attribute1,
9265             global_attribute2,
9266             global_attribute3,
9267             global_attribute4,
9268             global_attribute5,
9269             global_attribute6,
9270             global_attribute7,
9271             global_attribute8,
9272             global_attribute9,
9273             global_attribute10,
9274             global_attribute11,
9275             global_attribute12,
9276             global_attribute13,
9277             global_attribute14,
9278             global_attribute15,
9279             global_attribute16,
9280             global_attribute17,
9281             global_attribute18,
9282             global_attribute19,
9283             global_attribute20,
9284             receipt_verified_flag,
9285             receipt_required_flag,
9286             receipt_missing_flag,
9287             justification,
9288             expense_group,
9289             start_expense_date,
9290             end_expense_date,
9291             receipt_currency_code,
9292             receipt_conversion_rate,
9293             receipt_currency_amount,
9294             daily_amount,
9295             web_parameter_id,
9296             adjustment_reason,
9297             award_id,
9298             credit_card_trx_id,
9299             dist_match_type,
9300             rcv_transaction_id,
9301             invoice_distribution_id,
9302             parent_reversal_id,
9303             tax_recoverable_flag,
9304             merchant_document_number,
9305             merchant_name,
9306             merchant_reference,
9307             merchant_tax_reg_number,
9308             merchant_taxpayer_id,
9309             country_of_supply,
9310             matched_uom_lookup_code,
9311             gms_burdenable_raw_cost,
9312             accounting_event_id,
9313             prepay_distribution_id,
9314             upgrade_posted_amt,
9315             upgrade_base_posted_amt,
9316             inventory_transfer_status,
9317             company_prepaid_invoice_id,
9318             cc_reversal_flag,
9319             awt_withheld_amt,
9320             pa_cmt_xface_flag,
9321             cancellation_flag,
9322             invoice_line_number,
9323             corrected_invoice_dist_id,
9324             rounding_amt,
9325             charge_applicable_to_dist_id,
9326             corrected_quantity,
9327             related_id,
9328             asset_book_type_code,
9329             asset_category_id,
9330             distribution_class,
9331             tax_code_id,
9332             intended_use,
9333             detail_tax_dist_id,
9334             rec_nrec_rate,
9335             recovery_rate_id,
9336             recovery_rate_name,
9337             recovery_type_code,
9338             withholding_tax_code_id,
9339             taxable_amount,
9340             taxable_base_amount,
9341             tax_already_distributed_flag,
9342             summary_tax_line_id,
9343             extra_po_erv,
9344             prepay_tax_diff_amount,
9345 			--Freight and Special Charges
9346 			rcv_charge_addition_flag,
9347 			pay_awt_group_id) --Bug8345264
9348       VALUES (
9349             p_inv_dist_rec.accounting_date,    -- accounting_date
9350             'N',                                  -- accrual_posted_flag
9351             'U',                                  -- assets_addition_flag
9352             p_inv_dist_rec.par_dist_assets_tracking_flag, -- assets_tracking_flag  -- Bug 13821160
9353             'N',                                  -- cash_posted_flag
9354             l_dist_line_num,                      -- distribution_line_number  /*bug 10282701*/
9355             P_dist_code_combination_id,           -- dist_code_combination_id
9356             p_inv_dist_rec.invoice_id,      	  -- invoice_id
9357             P_user_id,                            -- last_updated_by
9358             P_sysdate,                            -- last_update_date
9359             p_inv_dist_rec.line_type_lookup_code,
9360                                                   -- line_type_lookup_code
9361             p_inv_dist_rec.period_name,           -- period_name
9362             p_inv_dist_rec.set_of_books_id,	  -- set_of_books_id
9363             p_inv_dist_rec.amount,                -- amount
9364             p_inv_dist_rec.base_amount,           -- base_amount -- bug 10350068
9365             p_inv_dist_rec.batch_id,        	  -- batch_id
9366             P_user_id,                            -- created_by
9367             P_sysdate,                            -- creation_date
9368             p_inv_dist_rec.description,        	  -- description
9369             NULL,                                 -- final_match_flag
9370             p_inv_dist_rec.income_tax_region,  -- income_tax_region
9371             P_login_id,                           -- last_update_login
9372             NULL,                                 -- match_status_flag
9373             'N',                                  -- posted_flag
9374             p_inv_dist_rec.po_distribution_id, -- po_distribution_id
9375             NULL,                                 -- program_application_id
9376             NULL,                                 -- program_id
9377             NULL,                                 -- program_update_date
9378             NULL,                                 -- quantity_invoiced
9379             NULL,                                 -- request_id
9380             'N',                                  -- reversal_flag
9381             p_inv_dist_rec.type_1099,          -- type_1099
9382             NULL,                                 -- unit_price
9383             'N',                                  -- encumbered_flag
9384             NULL,                                 -- stat_amount
9385             p_inv_dist_rec.attribute1,         -- attribute1
9386             p_inv_dist_rec.attribute10,        -- attribute10
9387             p_inv_dist_rec.attribute11,        -- attribute11,
9388             p_inv_dist_rec.attribute12,        -- attribute12
9389             p_inv_dist_rec.attribute13,        -- attribute13
9390             p_inv_dist_rec.attribute14,        -- attribute14
9391             p_inv_dist_rec.attribute15,        -- attribute15
9392             p_inv_dist_rec.attribute2,         -- attribute2
9393             p_inv_dist_rec.attribute3,         -- attribute3
9394             p_inv_dist_rec.attribute4,         -- attribute4
9395             p_inv_dist_rec.attribute5,         -- attribute5
9396             p_inv_dist_rec.attribute6,         -- attribute6
9397             p_inv_dist_rec.attribute7,         -- attribute7
9398             p_inv_dist_rec.attribute8,         -- attribute8
9399             p_inv_dist_rec.attribute9,         -- attribute9
9400             p_inv_dist_rec.attribute_category, -- attribute_category
9401             p_inv_dist_rec.expenditure_item_date,
9402                                                   -- expenditure_item_date
9403             p_inv_dist_rec.expenditure_organization_id,
9404                                                   -- expenditure_organization_id
9405             p_inv_dist_rec.expenditure_type,   -- expenditure_type
9406             p_inv_dist_rec.parent_invoice_id,  -- parent_invoice_id
9407             p_inv_dist_rec.pa_addition_flag,   -- pa_addition_flag
9408             p_inv_dist_rec.pa_quantity,        -- pa_quantity
9409             NULL,                                 -- prepay_amount_remaining
9410             -- the prepay_amount_remaining will be populated for all the
9411             -- prepayment distributions during the payment. And later will be
9412             -- updated during the prepayment applications
9413             p_inv_dist_rec.project_accounting_context,
9414                                                   -- project_accounting_context
9415             p_inv_dist_rec.project_id,         -- project_id
9416             p_inv_dist_rec.task_id,            -- task_id
9417             NULL,                                 -- packet_id
9418             'N',                                  -- awt_flag
9419             p_inv_dist_rec.awt_group_id,       -- awt_group_id
9420             NULL,                                 -- awt_tax_rate_id
9421             NULL,                                 -- awt_gross_amount
9422             NULL,                                 -- awt_invoice_id
9423             NULL,                                 -- awt_origin_group_id
9424             NULL,                                 -- reference_1
9425             NULL,                                 -- reference_2
9426             p_inv_dist_rec.org_id,		  -- org_id
9427             NULL,                                 -- awt_invoice_payment_id
9428             p_inv_dist_rec.global_attribute_category,
9429                                                   -- global_attribute_category
9430             p_inv_dist_rec.global_attribute1,  -- global_attribute1
9431             p_inv_dist_rec.global_attribute2,  -- global_attribute2
9432             p_inv_dist_rec.global_attribute3,  -- global_attribute3
9433             p_inv_dist_rec.global_attribute4,  -- global_attribute4
9434             p_inv_dist_rec.global_attribute5,  -- global_attribute5
9435             p_inv_dist_rec.global_attribute6,  -- global_attribute6
9436             p_inv_dist_rec.global_attribute7,  -- global_attribute7
9437             p_inv_dist_rec.global_attribute8,  -- global_attribute8
9438             p_inv_dist_rec.global_attribute9,  -- global_attribute9
9439             p_inv_dist_rec.global_attribute10, -- global_attribute10
9440             p_inv_dist_rec.global_attribute11, -- global_attribute11
9441             p_inv_dist_rec.global_attribute12, -- global_attribute12
9442             p_inv_dist_rec.global_attribute13, -- global_attribute13
9443             p_inv_dist_rec.global_attribute14, -- global_attribute14
9444             p_inv_dist_rec.global_attribute15, -- global_attribute15
9445             p_inv_dist_rec.global_attribute16, -- global_attribute16
9446             p_inv_dist_rec.global_attribute17, -- global_attribute17
9447             p_inv_dist_rec.global_attribute18, -- global_attribute18
9448             p_inv_dist_rec.global_attribute19, -- global_attribute19
9449             p_inv_dist_rec.global_attribute20, -- global_attribute20
9450             NULL,                                 -- receipt_verified_flag
9451             NULL,                                 -- receipt_required_flag
9452             NULL,                                 -- receipt_missing_flag
9453             NULL,                                 -- justification
9454             NULL,                                 -- expense_group
9455             NULL,                                 -- start_expense_date
9456             NULL,                                 -- end_expense_date
9457             NULL,                                 -- receipt_currency_code
9458             NULL,                                 -- receipt_conversion_rate
9459             NULL,                                 -- receipt_currency_amount
9460             NULL,                                 -- daily_amount
9461             NULL,                                 -- web_parameter_id
9462             NULL,                                 -- adjustment_reason
9463             p_inv_dist_rec.award_id,           -- award_id
9464             NULL,                                 -- credit_card_trx_id
9465             p_inv_dist_rec.dist_match_type,    -- dist_match_type
9466             p_inv_dist_rec.rcv_transaction_id, -- rcv_transaction_id
9467             l_invoice_distribution_id,         -- invoice_distribution_id
9468             NULL,                                 -- parent_reversal_id
9469             p_inv_dist_rec.tax_recoverable_flag,
9470                                                   -- tax_recoverable_flag
9471             p_inv_dist_rec.merchant_document_number, -- merchant_document_number --Bug14658408: Start
9472             p_inv_dist_rec.merchant_name,            -- merchant_name
9473             p_inv_dist_rec.merchant_reference,       -- merchant_reference
9474             p_inv_dist_rec.merchant_tax_reg_number,  -- merchant_tax_reg_number
9475             p_inv_dist_rec.merchant_taxpayer_id,     -- merchant_taxpayer_id  --Bug14658408: End
9476             NULL,                                 -- country_of_supply
9477             NULL,                                 -- matched_uom_lookup_code
9478             NULL,                                 -- gms_burdenable_raw_cost
9479             NULL,                                 -- accounting_event_id
9480             p_inv_dist_rec.prepay_distribution_id,  -- prepay_distribution_id
9481             NULL,                                 -- upgrade_posted_amt
9482             NULL,                                 -- upgrade_base_posted_amt
9483             'N',                                  -- inventory_transfer_status
9484             NULL,                                 -- company_prepaid_invoice_id
9485             NULL,                                 -- cc_reversal_flag
9486             NULL,                                 -- awt_withheld_amt
9487             NULL,                                 -- pa_cmt_xface_flag
9488             p_inv_dist_rec.cancellation_flag,  -- cancellation_flag
9489             p_inv_dist_rec.invoice_line_number,-- invoice_line_number
9490             p_inv_dist_rec.corrected_invoice_dist_id,
9491                                                   -- corrected_invoice_dist_id
9492             p_inv_dist_rec.rounding_amt,       -- rounding_amt
9493             p_inv_dist_rec.charge_applicable_to_dist_id,
9494                                                  -- charge_applicable_to_dist_id
9495             NULL,                                 -- corrected_quantity
9496             NULL,                                 -- related_id
9497             NULL,                                 -- asset_book_type_code
9498             NULL,                                 -- asset_category_id
9499             p_inv_dist_rec.distribution_class, -- distribution_class
9500             p_inv_dist_rec.tax_code_id,        -- tax_code_id
9501             NULL,                                 -- intended_use,
9502             p_inv_dist_rec.detail_tax_dist_id, -- detail_tax_dist_id
9503             p_inv_dist_rec.rec_nrec_rate,      -- rec_nrec_rate
9504             p_inv_dist_rec.recovery_rate_id,   -- recovery_rate_id
9505             p_inv_dist_rec.recovery_rate_name, -- recovery_rate_name
9506             p_inv_dist_rec.recovery_type_code, -- recovery_type_code
9507             NULL,                                 -- withholding_tax_code_id,
9508             p_inv_dist_rec.taxable_amount,     -- taxable_amount
9509             p_inv_dist_rec.taxable_base_amount, -- taxable_base_amount
9510             NULL,                                -- tax_already_distributed_flag
9511             p_inv_dist_rec.summary_tax_line_id, -- summary_tax_line_id
9512             p_inv_dist_rec.extra_po_erv,        -- extra_po_erv
9513             p_inv_dist_rec.prepay_tax_diff_amount, -- prepay_tax_diff_amount
9514 			'N',					      	-- rcv_charge_addition_flag
9515 			p_inv_dist_rec.pay_awt_group_id		--pay_awt_group_id Bug8345264
9516 			);
9517 
9518 	/* bug 10282701 Begins*/
9519 
9520 	IF (TAX_ONLY_LINE_EXIST(p_inv_dist_rec.invoice_id) and
9521 	    p_inv_dist_rec.award_id is not NULL) THEN
9522 
9523         l_debug_info := 'Call the gms_ap_api.CREATE_AWARD_DISTRIBUTIONS from insert_tax_distributions';
9524         IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9525             FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
9526         END IF;
9527 
9528               gms_ap_api.CREATE_AWARD_DISTRIBUTIONS(p_inv_dist_rec.invoice_id,
9529                                         l_dist_line_num,
9530                                         l_invoice_distribution_id,
9531                                         p_inv_dist_rec.award_id,
9532                                         'AP',
9533                                         NULL,
9534                                         NULL);
9535 
9536         l_debug_info := 'Return from gms_ap_api.CREATE_AWARD_DISTRIBUTIONS to insert_tax_distributions';
9537         IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9538             FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
9539         END IF;
9540 
9541         END IF;
9542 	/* bug 10282701 Ends*/
9543 
9544   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
9545       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'AP_ETAX_UTILITY_PKG.Insert_Tax_Distributions(-)');
9546   END IF;
9547 
9548   -- Following code was introduce because of bug 7126676
9549   -- This code will generate withholding applicability for
9550   -- tax lines for JL Exteneded withholdings
9551   IF (AP_EXTENDED_WITHHOLDING_PKG.AP_EXTENDED_WITHHOLDING_ACTIVE) THEN
9552 
9553        l_debug_info := 'Call the Ap_Ext_Withholding_Default from match';
9554        IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9555            FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
9556        END IF;
9557 
9558        Ap_Extended_Withholding_Pkg.Ap_Ext_Withholding_Default
9559                            (p_invoice_id       => p_inv_dist_rec.invoice_id,
9560                             p_inv_line_num     => p_inv_dist_rec.invoice_line_number,
9561                             p_inv_dist_id      => l_invoice_distribution_id,
9562                             p_calling_module   => l_curr_calling_sequence,
9563                             p_parent_dist_id   => NULL,
9564                             p_awt_success      => l_awt_success);
9565 
9566        IF (l_awt_success <> 'SUCCESS') THEN
9567            RAISE Global_Exception;
9568        END IF;
9569 
9570   END IF;
9571 
9572   EXCEPTION
9573     WHEN OTHERS THEN
9574       IF (SQLCODE <> -20001) THEN
9575          FND_MESSAGE.SET_NAME('SQLAP','AP_DEBUG');
9576          FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
9577          FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',l_curr_calling_sequence);
9578          FND_MESSAGE.SET_TOKEN('PARAMETERS',
9579            ' P_Invoice_Id = '||P_Invoice_Header_Rec.invoice_id||
9580            ' P_Calling_Sequence = '||P_Calling_Sequence);
9581          FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_debug_info);
9582        END IF;
9583 
9584         IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
9585            FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
9586          END IF;
9587 
9588       APP_EXCEPTION.RAISE_EXCEPTION;
9589 END;
9590 
9591 
9592  -- Bug 4887847: Added function Get_Line_Class to populate a new attribute that
9593  --              is required for tax calculation and reporting purposes.
9594 
9595 /*=============================================================================
9596  |  FUNCTION - Get_Line_Class()
9597  |
9598  |  DESCRIPTION
9599  |   This function will return the line class based on the invoice document type
9600  |    invoice line type and matching information.
9601  |
9602  *============================================================================*/
9603 
9604  FUNCTION Get_Line_Class(
9605          P_Invoice_Type_Lookup_Code    IN  VARCHAR2,
9606          P_Inv_Line_Type               IN  VARCHAR2,
9607          P_Line_Location_Id            IN  NUMBER,
9608          P_Line_Class                  OUT NOCOPY VARCHAR2,
9609          P_Error_Code                  OUT NOCOPY VARCHAR2,
9610          P_Calling_Sequence            IN  VARCHAR2) RETURN BOOLEAN
9611 IS
9612   l_matching_basis    po_line_locations_ap_v.matching_basis%type;
9613   l_payment_type      po_line_locations_ap_v.payment_type%type;
9614   l_shipment_type     po_line_locations_ap_v.shipment_type%type;
9615 
9616   l_debug_info                 VARCHAR2(240);
9617   l_curr_calling_sequence      VARCHAR2(4000);
9618   l_api_name			  CONSTANT VARCHAR2(100) := 'Get_Line_Class';
9619 
9620 BEGIN
9621 
9622   l_curr_calling_sequence := 'AP_ETAX_UTILITY_PKG.Get_Line_Class_Code<-' ||
9623                               P_calling_sequence;
9624 
9625   IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9626     FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_curr_calling_sequence);
9627   END IF;
9628 
9629   IF (P_Invoice_Type_Lookup_Code IN ('STANDARD','MIXED','ADJUSTMENT',
9630 			                         'PO PRICE ADJUST','INVOICE REQUEST')) THEN
9631 
9632       P_Line_Class := 'STANDARD INVOICES';
9633 
9634    ELSIF (P_Invoice_Type_Lookup_Code IN ('CREDIT', 'CREDIT MEMO REQUEST')) THEN
9635 
9636       P_Line_Class := 'AP_CREDIT_MEMO';
9637 
9638    ELSIF (P_Invoice_Type_Lookup_Code = 'DEBIT') THEN
9639 
9640       P_Line_Class := 'AP_DEBIT_MEMO';
9641 
9642    ELSIF (P_Invoice_Type_Lookup_Code IN ('PREPAYMENT')) THEN
9643 
9644       P_Line_Class := 'PREPAYMENT INVOICES';
9645 
9646    ELSIF (P_Invoice_Type_Lookup_Code IN ('EXPENSE REPORT')) THEN
9647 
9648       P_Line_Class := 'EXPENSE REPORTS';
9649 
9650    END IF;
9651 
9652    IF P_Inv_Line_Type  = 'PREPAY' THEN
9653 
9654       P_Line_Class := 'PREPAY_APPLICATION';
9655 
9656    END IF;
9657 
9658    IF (P_Line_Location_Id IS NOT NULL AND
9659        P_Inv_Line_Type NOT IN ('MISCELLANEOUS','FREIGHT') ) THEN   --Bug14039130
9660 
9661       SELECT matching_basis, payment_type, shipment_type
9662         INTO l_matching_basis, l_payment_type, l_shipment_type
9663         FROM po_line_locations_all
9664        WHERE line_location_id = P_Line_Location_Id;
9665 
9666       IF l_matching_basis = 'AMOUNT' THEN
9667 
9668          P_Line_Class := 'AMOUNT_MATCHED';
9669 
9670       END IF;
9671 
9672       IF l_shipment_type = 'PREPAYMENT' THEN
9673 
9674          IF l_payment_type = 'ADVANCE' THEN
9675 
9676              P_Line_Class := 'ADVANCE';
9677 
9678          ELSIF l_payment_type IN ('MILESTONE', 'RATE', 'LUMPSUM') THEN
9679 
9680              P_Line_Class := 'FINANCING';
9681 
9682          END IF;
9683       END IF;
9684 
9685    END IF;
9686 
9687    l_debug_info := 'Line Class '||P_Line_Class;
9688 
9689    IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9690       FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
9691    END IF;
9692 
9693    RETURN (TRUE);
9694 
9695  EXCEPTION
9696    WHEN OTHERS THEN
9697     IF (SQLCODE <> -20001) THEN
9698        FND_MESSAGE.SET_NAME('SQLAP','AP_DEBUG');
9699        FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
9700        FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',l_curr_calling_sequence);
9701        FND_MESSAGE.SET_TOKEN('PARAMETERS',
9702             ' P_Invoice_Type_Lookup_Code = '||P_Invoice_Type_Lookup_Code||
9703             ' P_Error_Code = '||P_Error_Code||
9704             ' P_Calling_Sequence = '||P_Calling_Sequence);
9705       FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_debug_info);
9706    END IF;
9707 
9708    APP_EXCEPTION.RAISE_EXCEPTION;
9709 
9710 END Get_Line_Class;
9711 
9712   FUNCTION Is_Tax_Already_Dist_Inv_Char(
9713              P_Invoice_Id                IN NUMBER,
9714              P_Calling_Sequence          IN VARCHAR2) RETURN VARCHAR2
9715   IS
9716 
9717     l_debug_info                        VARCHAR2(240);
9718     l_curr_calling_sequence             VARCHAR2(4000);
9719     l_tax_already_distributed_flag       VARCHAR2(1) := 'N';
9720     l_api_name			  CONSTANT VARCHAR2(100) := 'Is_Tax_Already_Dist_Inv_Char';
9721 
9722     -- Modified this select to include the TAX only case
9723     CURSOR etax_already_distributed IS
9724     SELECT 'Y'
9725       FROM ap_invoice_distributions_all
9726      WHERE invoice_id = p_invoice_id
9727        AND line_type_lookup_code <> 'AWT'
9728        AND (tax_already_distributed_flag = 'Y'
9729             OR detail_tax_dist_id IS NOT NULL)
9730        AND (related_id IS NULL
9731             OR related_id = invoice_distribution_id)
9732        AND ROWNUM = 1;
9733 
9734   BEGIN
9735 
9736     l_curr_calling_sequence := 'AP_ETAX_UTILITY_PKG.Is_Tax_Already_Dist_Inv<-'||
9737                                P_calling_sequence;
9738 
9739     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9740        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_curr_calling_sequence);
9741     END IF;
9742 
9743     -------------------------------------------------------------------
9744     l_debug_info := 'Step 1: Get tax_already_Distributed_flag for any '||
9745                     'taxable line in the invoice';
9746     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9747        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
9748     END IF;
9749     -------------------------------------------------------------------
9750     OPEN etax_already_distributed;
9751     FETCH etax_already_distributed INTO l_tax_already_distributed_flag;
9752     IF (etax_already_distributed%NOTFOUND) THEN
9753       CLOSE etax_already_distributed;
9754       l_tax_already_distributed_flag := 'N';
9755 
9756     END IF;
9757 
9758     IF (etax_already_distributed%ISOPEN ) THEN
9759       CLOSE etax_already_distributed;
9760     END IF;
9761 
9762     -------------------------------------------------------------------
9763     l_debug_info := 'Step 1.1: Tax_already_Distributed_flag '||l_tax_already_distributed_flag;
9764     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9765        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
9766     END IF;
9767     -------------------------------------------------------------------
9768 
9769     RETURN l_tax_already_distributed_flag;
9770 
9771   EXCEPTION
9772     WHEN OTHERS THEN
9773       IF (SQLCODE <> -20001) THEN
9774         FND_MESSAGE.SET_NAME('SQLAP','AP_DEBUG');
9775         FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
9776         FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',l_curr_calling_sequence);
9777         FND_MESSAGE.SET_TOKEN('PARAMETERS',
9778           ' P_Invoice_Id = '||P_Invoice_Id||
9779           ' P_Calling_Sequence = '||P_Calling_Sequence);
9780         FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_debug_info);
9781       END IF;
9782 
9783       IF (etax_already_distributed%ISOPEN ) THEN
9784         CLOSE etax_already_distributed;
9785       END IF;
9786 
9787       APP_EXCEPTION.RAISE_EXCEPTION;
9788 
9789   END Is_Tax_Already_Dist_Inv_Char;
9790 
9791 FUNCTION Get_Converted_Price (x_invoice_distribution_id IN NUMBER)
9792                 RETURN NUMBER
9793 IS
9794         CURSOR c_rct_info (c_inv_dist_id NUMBER) IS
9795          SELECT  D.unit_price                 unit_price,
9796                  pll.matching_basis           match_basis,
9797                  pll.match_option             match_option,
9798                  pl.unit_meas_lookup_code     po_uom,
9799                  D.matched_uom_lookup_code    rcv_uom,
9800                  rsl.item_id                  rcv_item_id
9801           FROM   ap_invoice_distributions_all D,
9802                  po_distributions_all         PD,
9803                  po_lines_all                 PL,
9804                  po_line_locations_all        PLL,
9805                  rcv_transactions             RTXN,
9806                  rcv_shipment_lines           RSL
9807           WHERE  D.invoice_distribution_id = c_inv_dist_id
9808             AND  D.po_distribution_id      = PD.po_distribution_id
9809             AND  PL.po_header_id           = PD.po_header_id
9810             AND  PL.po_line_id             = PD.po_line_id
9811             AND  PD.line_location_id       = PLL.line_location_id
9812             AND  D.rcv_transaction_id      = RTXN.transaction_id
9813             AND  RTXN.shipment_line_id     = RSL.shipment_line_id;
9814 
9815         l_match_basis   po_line_types.matching_basis%TYPE;
9816         l_match_option  po_line_locations.match_option%TYPE;
9817         l_po_uom        po_line_locations.unit_meas_lookup_code%TYPE;
9818         l_rct_uom       po_line_locations.unit_meas_lookup_code%TYPE;
9819         l_rct_item_id   rcv_shipment_lines.item_id%TYPE;
9820         l_api_name			  CONSTANT VARCHAR2(100) := 'Get_Converted_Price';
9821         l_debug_info                 VARCHAR2(240);
9822 
9823         l_uom_conv_rate NUMBER;
9824         l_inv_price     NUMBER;
9825 Begin
9826 
9827      OPEN  c_rct_info (x_invoice_distribution_id);
9828      FETCH c_rct_info
9829      INTO  l_inv_price, l_match_basis, l_match_option, l_po_uom, l_rct_uom, l_rct_item_id;
9830      CLOSE c_rct_info;
9831 
9832      IF l_match_basis  = 'QUANTITY'  and
9833         l_match_option = 'R'         and
9834         l_po_uom       <> l_rct_uom THEN
9835 
9836         l_uom_conv_rate := po_uom_s.po_uom_convert (
9837                              l_rct_uom,
9838                              l_po_uom,
9839                              l_rct_item_id);
9840 
9841 
9842         l_debug_info := 'Step 1 : Get Coverted Price '||
9843                         ' l_uom_conv_rate '||l_uom_conv_rate||
9844                         ' l_inv_price '||l_inv_price;
9845 
9846         IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9847           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
9848         END IF;
9849 
9850         l_inv_price := l_inv_price / l_uom_conv_rate;
9851 
9852         l_debug_info := 'Step 1.1 :  Coverted Price '||
9853                         ' l_inv_price '||l_inv_price;
9854 
9855         IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9856           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
9857         END IF;
9858 
9859 
9860      END IF;
9861 
9862      RETURN l_inv_price;
9863 
9864 EXCEPTION
9865      WHEN OTHERS THEN
9866           NULL;
9867 END Get_Converted_Price;
9868 
9869   FUNCTION Get_Max_Dist_Num_Self(
9870               X_invoice_id          IN      NUMBER,
9871               X_line_number         IN      NUMBER) RETURN NUMBER
9872   IS
9873     l_max_dist_line_num NUMBER := 0;
9874   BEGIN
9875 
9876     SELECT nvl(max(distribution_line_number),0)
9877       INTO l_max_dist_line_num
9878       FROM ap_self_assessed_tax_dist_all
9879      WHERE invoice_id = X_invoice_id
9880        AND invoice_line_number = X_line_number;
9881 
9882     RETURN(l_max_dist_line_num);
9883 
9884   END Get_Max_Dist_Num_Self;
9885 
9886  /*=============================================================================
9887  |  FUNCTION - Get_Prepay_Pay_Awt_Group_Id()
9888  |
9889  |  DESCRIPTION
9890  |      This function return the pay_awt_group_id for a parent prepay item line
9891  |      based on the prepayment distribution id.
9892  |		Added for bug8345264
9893  |
9894  |  PARAMETERS
9895  |      P_Prepay_Distribution_id - Distribution Id of the prepayment
9896  |
9897  |  MODIFICATION HISTORY
9898  |    DATE          Author         Action
9899  |    30-MAR-2009   ASANSARI       Created
9900  |
9901  *============================================================================*/
9902   FUNCTION Get_Prepay_Pay_Awt_Group_Id(
9903              P_Prepay_Distribution_id    IN NUMBER,
9904              P_Calling_Sequence          IN VARCHAR2) RETURN NUMBER
9905   IS
9906 
9907     l_debug_info                 VARCHAR2(240);
9908     l_curr_calling_sequence      VARCHAR2(4000);
9909     l_api_name			  CONSTANT VARCHAR2(100) := 'Get_Prepay_Pay_Awt_Group_Id';
9910 
9911     CURSOR prepay_pay_awt_group_id (c_prepay_dist_id IN NUMBER) IS
9912     SELECT aid.pay_awt_group_id
9913       FROM ap_invoice_distributions_all aid
9914      WHERE aid.invoice_distribution_id = c_prepay_dist_id;
9915 
9916     l_pay_awt_group_id     ap_invoice_distributions_all.pay_awt_group_id%TYPE;
9917 
9918   BEGIN
9919 
9920     l_curr_calling_sequence := 'AP_ETAX_UTILITY_PKG.Get_Prepay_Pay_Awt_Group_Id<-'||
9921                                P_calling_sequence;
9922 
9923     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9924        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_curr_calling_sequence);
9925     END IF;
9926 
9927     -------------------------------------------------------------------
9928     l_debug_info := 'Step 1: Get awt_group_id from prepay item line';
9929 
9930     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9931        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
9932     END IF;
9933     -------------------------------------------------------------------
9934     OPEN  prepay_pay_awt_group_id( P_Prepay_Distribution_id);
9935     FETCH prepay_pay_awt_group_id
9936     INTO  l_pay_awt_group_id;
9937     CLOSE prepay_pay_awt_group_id;
9938 
9939      -------------------------------------------------------------------
9940     l_debug_info := 'Awt_group_id from prepay item line '||l_pay_awt_group_id;
9941 
9942     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9943        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
9944     END IF;
9945     -------------------------------------------------------------------
9946 
9947     RETURN l_pay_awt_group_id;
9948 
9949   EXCEPTION
9950     WHEN OTHERS THEN
9951       IF (SQLCODE <> -20001) THEN
9952         FND_MESSAGE.SET_NAME('SQLAP','AP_DEBUG');
9953         FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
9954         FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',l_curr_calling_sequence);
9955         FND_MESSAGE.SET_TOKEN('PARAMETERS',
9956           ' P_Prepay_Distribution_id = '||P_Prepay_Distribution_id||
9957           ' P_Calling_Sequence = '||P_Calling_Sequence);
9958         FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_debug_info);
9959       END IF;
9960 
9961       IF ( prepay_pay_awt_group_id%ISOPEN ) THEN
9962         CLOSE prepay_pay_awt_group_id;
9963       END IF;
9964 
9965       APP_EXCEPTION.RAISE_EXCEPTION;
9966   END Get_Prepay_Pay_Awt_Group_Id;
9967 
9968   /*=============================================================================
9969  |  FUNCTION - Is_Inclusive_Flag_Updatable()
9970  |
9971  |  DESCRIPTION
9972  |      This function is called by Ebtax to make the Inclusive Check Box
9973  |      on Detail Tax Window editable based on return status by this
9974  |		function.Added for ER 6772098
9975  |      RETURN TRUE   : Allow To Override Inclusive Checkbox
9976  |      RETURN FALUSE : Don't Allow To Override Inclusive Checkbox
9977  |
9978  |
9979  |  PARAMETERS
9980  |      p_invoice_id  - Invoice Id of the Invoice open on workbench
9981  |      p_line_number - Invoice Line Number of Non Tax Line for which
9982  |                      Detail Tax line is being overriden
9983  |                      (Inclusive Check Box)
9984  |
9985  |  MODIFICATION HISTORY
9986  |    DATE          Author         Action
9987  |    31-JUL-2009   hchaudha        Created
9988  |
9989  *============================================================================*/
9990 
9991   FUNCTION Is_Inclusive_Flag_Updatable(
9992            p_invoice_id       IN NUMBER,
9993            p_line_number      IN NUMBER,
9994            p_error_code       IN OUT NOCOPY VARCHAR2,
9995            p_calling_sequence IN VARCHAR2)
9996   RETURN BOOLEAN IS
9997            l_Posted_count        NUMBER :=0;
9998            l_Encumbered_count    NUMBER :=0;
9999            l_Prepay_line_count   NUMBER :=0;
10000            l_Prepay_dist_count   NUMBER :=0;
10001            l_Payment_Stat_Flag   NUMBER :=0;
10002            l_Hist_Flag           VARCHAR2(1);
10003            l_Awt_Computed        VARCHAR2(1);
10004            l_quick_credit        VARCHAR2(1);
10005            l_Awt_line_count      NUMBER :=0;
10006            l_manual_Awt_line     NUMBER :=0; --Bug8920386
10007            l_Invoice_Type        VARCHAR2(20);
10008            l_Po_Dist_id_count    NUMBER :=0;
10009            l_Po_line_num_count   NUMBER :=0;
10010            l_corr_inv_count      NUMBER :=0;
10011            l_curr_calling_sequence VARCHAR2(4000);
10012            l_debug_info            VARCHAR2(4000);
10013            l_api_name     CONSTANT VARCHAR2(100):='IS_INCLUSIVE_FLAG_UPDATABLE';
10014   BEGIN
10015 
10016   l_curr_calling_sequence := 'AP_ETAX_UTILITY_PKG.Is_Inclusive_Flag_Updatable<-'||
10017                                P_calling_sequence;
10018 
10019 
10020   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
10021      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_curr_calling_sequence);
10022   END IF;
10023   -------------------------------------------------------------------
10024   l_debug_info := 'Step 0: Invoice Id and Invoice Line Number '||p_invoice_id||' '||p_line_number;
10025   -------------------------------------------------------------------
10026   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
10027      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
10028   END IF;
10029 
10030   --1 Posted Dist
10031   -------------------------------------------------------------------
10032   l_debug_info := 'Step 1: Check Posted Distributions Count ';
10033   -------------------------------------------------------------------
10034   SELECT COUNT(posted_flag)
10035     INTO l_Posted_count
10036     FROM ap_invoice_distributions_all
10037    WHERE invoice_id = p_invoice_id
10038      AND invoice_line_number = p_line_number
10039      AND NVL(posted_flag,'N') = 'Y';
10040 
10041   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
10042      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info||l_Posted_count);
10043   END IF;
10044 
10045   IF l_Posted_count > 0 THEN
10046      RETURN FALSE;
10047   END IF;
10048 
10049   --2 Prepayment Applied
10050   -------------------------------------------------------------------
10051   l_debug_info := 'Step 2: Check Prepayment Applied ';
10052   -------------------------------------------------------------------
10053   SELECT count(line_number)
10054     INTO l_Prepay_line_count
10055     FROM ap_invoice_lines_all
10056    WHERE invoice_id = p_invoice_id
10057      AND line_type_lookup_code ='PREPAY'
10058      AND (NVL(discarded_flag,'N') <> 'Y');
10059 
10060   IF l_Prepay_line_count = 0 THEN
10061    SELECT count(prepay_distribution_id)
10062      INTO l_Prepay_dist_count
10063      FROM ap_invoice_distributions_all
10064     WHERE invoice_id = p_invoice_id
10065       AND prepay_distribution_id IS NOT NULL
10066       AND (NVL(reversal_flag,'N') <> 'Y');
10067   END IF;
10068 
10069   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
10070      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info||l_Prepay_line_count||' '||l_Prepay_dist_count);
10071   END IF;
10072 
10073   IF l_Prepay_line_count > 0 OR l_Prepay_dist_count > 0 THEN
10074      RETURN FALSE;
10075   END IF;
10076 
10077 
10078 
10079   --3,4,5,6,7 Paid/Upgraded/AWT Calculated/Quick Credit/Expense Report/
10080   --Applied Credit and Debit Memo
10081   ----------------------------------------------------------------------------
10082   l_debug_info := 'Step 3-7: Check Paid/Upgraded/AWT Calculated/Quick Credit/';
10083   l_debug_info := l_debug_info||' Expense Report/ Applied Credit and';
10084   l_debug_info := l_debug_info||' Debit Memo';
10085   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
10086       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
10087   END IF;
10088   ----------------------------------------------------------------------------
10089   SELECT Historical_flag,
10090          Awt_Flag,
10091          quick_credit,
10092          Invoice_type_lookup_code
10093     INTO l_Hist_Flag,
10094          l_Awt_Computed,
10095          l_quick_credit,
10096          l_Invoice_Type
10097     FROM ap_invoices_all
10098    WHERE invoice_id = p_invoice_id;
10099 
10100   SELECT count(invoice_id)
10101     INTO l_Payment_Stat_Flag
10102     FROM ap_invoice_payments_all
10103    WHERE invoice_id =  p_invoice_id
10104      AND NVL(reversal_flag,'N') <> 'Y';
10105 
10106   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
10107      l_debug_info :='Step 3 : Check Payment Status ';
10108      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info||l_Payment_Stat_Flag);
10109      l_debug_info :='Step 4 : Check Upgraded Status ';
10110      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info||l_Hist_Flag);
10111      l_debug_info :='Step 5 : Check AWT Computed ';
10112      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info||l_Awt_Computed);
10113      l_debug_info :='Step 6 : Check Quick Credit Invoice ';
10114      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info||l_quick_credit);
10115      l_debug_info :='Step 7 : Check Invoice Type ';
10116      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info||l_Invoice_Type);
10117   END IF;
10118 
10119   IF l_Payment_Stat_Flag > 0  OR
10120      NVL(l_Hist_Flag,'N') = 'Y' OR
10121      --NVL(l_Awt_Computed,'N') = 'Y' OR
10122      NVL(l_quick_credit,'N') ='Y' OR
10123      NVL(l_Invoice_Type,'A') = 'EXPENSE REPORT' THEN
10124      RETURN FALSE;
10125   END IF;
10126 
10127   IF NVL(l_Invoice_Type,'A') IN ('DEBIT','CREDIT') THEN
10128      SELECT COUNT(CORRECTED_INV_ID)
10129        INTO l_corr_inv_count
10130        FROM ap_invoice_lines_all
10131       WHERE invoice_id = p_invoice_id
10132         AND CORRECTED_INV_ID IS NOT NULL
10133         AND (NVL(discarded_flag,'N') <> 'Y');
10134 
10135      IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
10136         l_debug_info :='Step 6.1 : Check Applied Debit/Credit Memo Count ';
10137         FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info||l_corr_inv_count);
10138      END IF;
10139 
10140      IF l_corr_inv_count > 0 THEN
10141         RETURN FALSE;
10142      END IF;
10143 
10144   END IF;
10145 
10146   --Step 5.1 : Better Way To Check AWT Computation
10147   --Bug8920386
10148 
10149   SELECT count(line_number)
10150     INTO l_manual_Awt_line
10151     FROM ap_invoice_lines_all ail
10152    WHERE invoice_id = p_invoice_id
10153      AND line_type_lookup_code ='AWT'
10154      AND (NVL(discarded_flag,'N') <> 'Y')
10155      AND line_source = 'MANUAL LINE ENTRY'
10156      AND NOT EXISTS (SELECT 1
10157                        FROM ap_invoice_distributions_all aid
10158                       WHERE ail.invoice_id  = aid.invoice_id
10159                         AND ail.line_number = aid.invoice_line_number);
10160   SELECT COUNT(1)
10161     INTO l_Awt_line_count
10162     FROM ap_invoice_distributions_all aid
10163    WHERE aid.invoice_id = p_invoice_id
10164      AND NVL(aid.reversal_flag,'N') <> 'Y'
10165      AND aid.line_type_lookup_code = 'AWT'
10166      AND aid.awt_related_id IN
10167         (SELECT aid1.invoice_distribution_id
10168            FROM ap_invoice_distributions_all aid1
10169           WHERE aid1.invoice_id = aid.invoice_id
10170             AND aid1.invoice_line_number = p_line_number
10171             AND aid1.line_type_lookup_code <> 'AWT');
10172 
10173 
10174   l_debug_info :='Step 5.1 : Check Non Discarded AWT lines, Non Prorated Manual AWT Lines ';
10175   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
10176      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info||l_Awt_line_count ||' '||l_manual_Awt_line );
10177   END IF;
10178 
10179   IF l_Awt_line_count > 0 OR l_manual_Awt_line > 0 THEN
10180    RETURN FALSE;
10181   END IF;
10182 
10183   --Bug8920386
10184 
10185 
10186   --8 Encumbered Dist
10187   -------------------------------------------------------------------
10188   l_debug_info := 'Step 7: Check Encumbered Distributions Count ';
10189   -------------------------------------------------------------------
10190   SELECT COUNT(1)
10191     INTO l_Encumbered_count
10192     FROM ap_invoice_distributions_all
10193    WHERE invoice_id = p_invoice_id
10194      AND invoice_line_number = p_line_number
10195      AND NVL(encumbered_flag,'N') = 'Y';
10196 
10197   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
10198      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info||l_Encumbered_count);
10199   END IF;
10200 
10201   IF l_Encumbered_count > 0 THEN
10202      RETURN FALSE;
10203   END IF;
10204 
10205   --9 PO Matched Dist
10206   -------------------------------------------------------------------
10207   l_debug_info := 'Step 8: Check PO Matched Distributions Count ';
10208   -------------------------------------------------------------------
10209   SELECT COUNT(po_distribution_id)
10210     INTO l_Po_Dist_id_count
10211     FROM ap_invoice_distributions_all
10212    WHERE invoice_id = p_invoice_id
10213      AND invoice_line_number = p_line_number
10214      AND po_distribution_id IS NOT NULL;
10215 
10216   IF  l_Po_Dist_id_count = 0 THEN
10217     SELECT COUNT(po_header_id)
10218       INTO l_Po_line_num_count
10219       FROM ap_invoice_lines_all
10220      WHERE invoice_id = p_invoice_id
10221        AND line_number = p_line_number
10222        AND po_header_id IS NOT NULL;
10223   END IF;
10224 
10225 
10226   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
10227      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info||l_Po_Dist_id_count);
10228   END IF;
10229 
10230    IF l_Po_Dist_id_count > 0 OR l_Po_line_num_count > 0 THEN
10231       RETURN FALSE;
10232    END IF;
10233 
10234    RETURN TRUE;
10235    EXCEPTION
10236    WHEN OTHERS THEN
10237      IF (SQLCODE <> -20001) THEN
10238         FND_MESSAGE.SET_NAME('SQLAP','AP_DEBUG');
10239         FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
10240         FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',l_curr_calling_sequence);
10241         FND_MESSAGE.SET_TOKEN('PARAMETERS',
10242           ' p_invoice_id = '||p_invoice_id||
10243           ' p_line_number = '||p_line_number);
10244         FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_debug_info);
10245         p_error_code:=SQLCODE;
10246         RETURN FALSE;
10247       END IF;
10248    END;
10249 
10250 /*=============================================================================
10251  |  FUNCTION - Is_Incl_Tax_Driver_Updatable()
10252  |
10253  |  DESCRIPTION
10254  |      Called from : AP_ETAX_SERVICES_PKG.Populate_Lines_GT()
10255  |                    APINLIN.pld
10256  |                    APXINWKB.fmb
10257  |      RETURN TRUE   : Allow To Override Tax drivers
10258  |      RETURN FALUSE : Don't Allow To Override Tax drivers
10259  |
10260  |
10261  |  PARAMETERS
10262  |      p_invoice_id  - Invoice Id of the Invoice
10263  |      p_line_number - Invoice Line Number
10264  |
10265  |  MODIFICATION HISTORY
10266  |    DATE          Author  Bug      Action
10267  |    02-Feb-2010   ANARUN  9068689  Created
10268  |
10269  ============================================================================*/
10270 
10271 FUNCTION Is_Incl_Tax_Driver_Updatable(
10272          p_invoice_id       IN NUMBER,
10273          p_line_number      IN NUMBER,
10274          p_calling_sequence IN VARCHAR2   )
10275 RETURN BOOLEAN IS
10276          l_allow_update          NUMBER ;
10277          l_curr_calling_sequence VARCHAR2(4000);
10278          l_debug_info            VARCHAR2(4000);
10279          l_api_name              CONSTANT VARCHAR2(100):='Is_Inclusive_Tax_Driver_Updatable';
10280 BEGIN
10281 
10282   l_curr_calling_sequence := 'AP_ETAX_UTILITY_PKG.Is_Incl_Tax_Driver_Updatable<-'||
10283                                P_calling_sequence;
10284 
10285 
10286   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
10287      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_curr_calling_sequence);
10288   END IF;
10289   -------------------------------------------------------------------
10290   l_debug_info := 'Step 0: Invoice Id and Invoice Line Number '||p_invoice_id||' '||p_line_number;
10291   -------------------------------------------------------------------
10292   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
10293      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
10294   END IF;
10295 
10296   -------------------------------------------------------------------------------
10297   l_debug_info := 'Step 1: Check if Posted or Encumbered Distributions exist : ';
10298   -------------------------------------------------------------------------------
10299   -- Bug 9499176 : Replaced 1 SQL having NVL with 2 SQLs and added extra conditions
10300   IF p_line_number is NOT NULL THEN
10301      SELECT COUNT('INCLUSIVE TAX CALC ON POSTED DISTS')
10302        INTO l_allow_update
10303        FROM zx_rec_nrec_dist ZD
10304       WHERE ZD.application_id     = 200
10305         AND ZD.entity_code        = 'AP_INVOICES'
10306         AND ZD.event_class_code  IN ('STANDARD INVOICES', 'PREPAYMENT INVOICES', 'EXPENSE REPORTS')
10307         AND ZD.trx_id             = p_invoice_id
10308         AND ZD.inclusive_flag     = 'Y'
10309         AND ZD.rec_nrec_tax_dist_id IN
10310             ( SELECT AID.detail_tax_dist_id
10311                 FROM ap_invoice_distributions AID
10312                WHERE AID.invoice_id             = p_invoice_id
10313                  AND AID.invoice_line_number    = p_line_number
10314                  AND AID.line_type_lookup_code IN ('REC_TAX','NONREC_TAX','TRV','TERV','TIPV')
10315 		 AND AID.detail_tax_dist_id    IS NOT NULL
10316                  AND EXISTS ( SELECT 'LINE HAS ANY POSTED DIST'
10317                                 FROM ap_invoice_distributions AID1
10318                                WHERE AID1.invoice_id               = AID.invoice_id
10319                                  AND AID1.invoice_line_number      = AID.invoice_line_number
10320                                  AND AID1.line_type_lookup_code   <> AID.line_type_lookup_code
10321                                  AND AID1.invoice_distribution_id  = AID.charge_applicable_to_dist_id
10322                                  AND ( AID1.posted_flag = 'Y' OR
10323 				       NVL( AID1.encumbered_flag, 'N' ) IN ('Y', 'D', 'W', 'X')
10324 				     )
10325 		            )
10326 	    )
10327 	AND ROWNUM = 1 ;
10328   ELSE
10329      SELECT COUNT('INCLUSIVE TAX CALC ON POSTED DISTS')
10330        INTO l_allow_update
10331        FROM zx_rec_nrec_dist ZD
10332       WHERE ZD.application_id     = 200
10333         AND ZD.entity_code        = 'AP_INVOICES'
10334         AND ZD.event_class_code  IN ('STANDARD INVOICES', 'PREPAYMENT INVOICES', 'EXPENSE REPORTS')
10335         AND ZD.trx_id             = p_invoice_id
10336         AND ZD.inclusive_flag     = 'Y'
10337         AND ZD.rec_nrec_tax_dist_id IN
10338             ( SELECT AID.detail_tax_dist_id
10339                 FROM ap_invoice_distributions AID
10340                WHERE AID.invoice_id             = p_invoice_id
10341                  AND AID.line_type_lookup_code IN ('REC_TAX','NONREC_TAX','TRV','TERV','TIPV')
10342 		 AND AID.detail_tax_dist_id    IS NOT NULL
10343                  AND EXISTS ( SELECT 'LINE HAS ANY POSTED DIST'
10344                                 FROM ap_invoice_distributions AID1
10345                                WHERE AID1.invoice_id               = AID.invoice_id
10346                                  AND AID1.invoice_line_number      = AID.invoice_line_number
10347                                  AND AID1.line_type_lookup_code   <> AID.line_type_lookup_code
10348                                  AND AID1.invoice_distribution_id  = AID.charge_applicable_to_dist_id
10349                                  AND ( AID1.posted_flag = 'Y' OR
10350 				       NVL( AID1.encumbered_flag, 'N' ) IN ('Y', 'D', 'W', 'X')
10351 				     )
10352 			    )
10353 	    )
10354 	AND ROWNUM = 1 ;
10355   END IF;
10356 
10357   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
10358      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info||l_allow_update);
10359   END IF;
10360 
10361   IF l_allow_update > 0 THEN
10362      RETURN FALSE ;
10363   END IF ;
10364 
10365   RETURN TRUE ;
10366 
10367 EXCEPTION
10368   WHEN OTHERS THEN
10369     IF (SQLCODE <> -20001) THEN
10370        FND_MESSAGE.SET_NAME('SQLAP','AP_DEBUG');
10371        FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
10372        FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',l_curr_calling_sequence);
10373        FND_MESSAGE.SET_TOKEN('PARAMETERS',
10374                              ' p_invoice_id = '||p_invoice_id||
10375                              ' p_line_number = '||p_line_number);
10376        FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_debug_info);
10377        RETURN FALSE;
10378     END IF;
10379 END Is_Incl_Tax_Driver_Updatable ;
10380 
10381 /*bug 10282701 Added the following function */
10382 FUNCTION TAX_ONLY_LINE_EXIST
10383                         (p_invoice_id  IN NUMBER) RETURN BOOLEAN IS
10384 
10385       l_dummy VARCHAR2(40);
10386 
10387 BEGIN
10388        IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
10389            FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||'TAX_ONLY_LINE_EXIST','Checking if there is tax only line exists');
10390        END IF;
10391 
10392    /* SELECT 'Tax Only Line Exist'
10393       INTO l_dummy
10394       FROM ap_invoice_distributions_all
10395      WHERE invoice_id = p_invoice_id
10396        AND line_type_lookup_code IN ('REC_TAX', 'NONREC_TAX', 'TIPV', 'TRV', 'TERV')
10397        AND charge_applicable_to_dist_id IS NULL
10398        AND rownum = 1; */
10399 
10400     SELECT 'Tax Only Line Exist'
10401       INTO l_dummy
10402       FROM zx_lines_summary zls
10403      WHERE application_id   = AP_ETAX_PKG.AP_APPLICATION_ID
10404        AND entity_code      = AP_ETAX_PKG.AP_ENTITY_CODE
10405        AND event_class_code IN (AP_ETAX_PKG.AP_INV_EVENT_CLASS_CODE,
10406                                 AP_ETAX_PKG.AP_PP_EVENT_CLASS_CODE,
10407                                 AP_ETAX_PKG.AP_ER_EVENT_CLASS_CODE)
10408        AND zls.trx_id = p_invoice_id
10409        AND NVL(zls.reporting_only_flag, 'N') = 'N'
10410        AND NVL(zls.tax_only_line_flag, 'N') = 'Y'
10411        AND rownum = 1;
10412 
10413        IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
10414            FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||'TAX_ONLY_LINE_EXIST','l_dummy: '|| NVL(l_dummy, 'No Tax Only Line'));
10415        END IF;
10416 
10417        RETURN (l_dummy IS NOT NULL);
10418 
10419 EXCEPTION
10420     WHEN OTHERS THEN
10421          IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
10422            FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||'TAX_ONLY_LINE_EXIST', 'in others: '|| NVL(l_dummy, 'No Tax Only Line'));
10423          END IF;
10424          RETURN FALSE;
10425 END TAX_ONLY_LINE_EXIST;
10426 
10427 /*=============================================================================
10428  |  PROCEDURE - Get_Default_CCID()
10429  |
10430  |  DESCRIPTION
10431  |      Called from : APXIISIM.fmb
10432  |                    APXRICAD.fmb
10433  |                    APXINLIN.pld
10434  |                    apamtpob.pls
10435  |                    apamtrcb.pls
10436  |                    apiimvtb.pls
10437  |                    apmatchb.pls
10438  |                    apothmtb.pls
10439  |                    aprcvmtb.pls
10440  |
10441  |  This procedure should be called from all code flows which make a call
10442  |  to ZX_AP_TAX_CLASSIFICATN_DEF_PKG.get_default_tax_classification() and
10443  |  the return value ( x_derived_ccid ) should be passed as the input
10444  |  parameter p_code_combination_id to the ZX API. The logic in the
10445  |  procedure is based on the code changes done by Bugs 6908977, 7350421
10446  |  and 8230574.
10447  |
10448  |  MODIFICATION HISTORY
10449  |    DATE          Author  Bug       Action
10450  |    23-Feb-2011   ANARUN  10050094  Created
10451  |
10452  ============================================================================*/
10453 PROCEDURE Get_Default_CCID ( p_invoice_id		IN NUMBER       DEFAULT NULL,
10454 			     p_default_dist_ccid	IN NUMBER	DEFAULT NULL,
10455                              p_match_type 		IN VARCHAR2	DEFAULT NULL,
10456 			     p_po_line_location_id	IN NUMBER	DEFAULT NULL,
10457 			     p_po_distribution_id	IN NUMBER	DEFAULT NULL,
10458 			     p_rcv_shipment_line_id	IN NUMBER	DEFAULT NULL,
10459 			     p_rcv_transaction_id	IN NUMBER	DEFAULT NULL,
10460 			     p_line_type_lookup_code	IN VARCHAR2	DEFAULT NULL,
10461 			     p_reference_key1		IN VARCHAR2	DEFAULT NULL,
10462 			     p_reference_key2		IN VARCHAR2	DEFAULT NULL,
10463 			     p_invoice_line_number	IN NUMBER	DEFAULT NULL,
10464 			     p_distribution_set_id	IN NUMBER	DEFAULT NULL,
10465 			     p_calling_sequence         IN VARCHAR2                 ,
10466 			     x_derived_ccid	        OUT NOCOPY NUMBER
10467 			     )
10468 IS
10469        l_default_ccid          NUMBER ;
10470        l_api_name	       CONSTANT VARCHAR2(100) := 'Get_Default_CCID';
10471        l_curr_calling_sequence VARCHAR2(4000);
10472        l_debug_info            VARCHAR2(2000);
10473        l_distribution_set_id   NUMBER ;
10474 BEGIN
10475 
10476     l_curr_calling_sequence := 'AP_ETAX_UTILITY_PKG.Get_Default_CCID<-'||
10477                                P_calling_sequence;
10478 
10479     IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
10480        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_curr_calling_sequence);
10481        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,'Called with parameters : '    ||
10482 						                  'p_invoice_id = '              || p_invoice_id            ||
10483 						                  ', p_default_dist_ccid = '     || p_default_dist_ccid     ||
10484 						                  ', p_match_type = '            || p_match_type            ||
10485 						                  ', p_po_line_location_id = '   || p_po_line_location_id   ||
10486 						                  ', p_po_distribution_id = '    || p_po_distribution_id    ||
10487 						                  ', p_rcv_shipment_line_id = '  || p_rcv_shipment_line_id  ||
10488 						                  ', p_rcv_transaction_id = '    || p_rcv_transaction_id    ||
10489 						                  ', p_line_type_lookup_code = ' || p_line_type_lookup_code ||
10490 						                  ', p_reference_key1 = '        || p_reference_key1        ||
10491 						                  ', p_reference_key2 = '        || p_reference_key2        ||
10492 								  ', p_invoice_line_number = '   || p_invoice_line_number   ||
10493 								  ', p_distribution_set_id = '   || p_distribution_set_id   );
10494     END IF;
10495 
10496     IF p_default_dist_ccid IS NULL THEN
10497        IF NVL( p_match_type, 'NULL' ) IN
10498          ('ITEM_TO_PO','ITEM_TO_RECEIPT','ITEM_TO_SERVICE_PO',
10499           'ITEM_TO_SERVICE_RECEIPT','PRICE_CORRECTION','QTY_CORRECTION',
10500           'AMOUNT_CORRECTION', 'NULL' ) THEN
10501 
10502           IF  p_po_line_location_id IS NOT NULL THEN
10503 
10504 	      l_debug_info := 'Querying on the basis of p_po_line_location_id' ;
10505               SELECT pd.code_combination_id
10506                 INTO l_default_ccid
10507                 FROM po_distributions_all pd
10508                WHERE pd.line_location_id = p_po_line_location_id
10509                  AND rownum = 1;
10510 
10511           ELSIF p_po_distribution_id IS NOT NULL THEN
10512 
10513 	      l_debug_info := 'Querying on the basis of p_po_distribution_id' ;
10514               SELECT pd.code_combination_id
10515                 INTO l_default_ccid
10516                 FROM po_distributions_all pd
10517                WHERE pd.line_location_id =
10518                     (SELECT pod.line_location_id
10519                        FROM po_distributions_all pod
10520                       WHERE po_distribution_id = p_po_distribution_id )
10521                  AND rownum = 1;
10522 
10523           ELSIF p_rcv_shipment_line_id IS NOT NULL THEN
10524 
10525 	      l_debug_info := 'Querying on the basis of p_rcv_shipment_line_id' ;
10526               SELECT pd.code_combination_id
10527                 INTO l_default_ccid
10528                 FROM po_distributions_all pd
10529                WHERE pd.line_location_id =
10530                      (SELECT rcv.po_line_location_id
10531                         FROM rcv_shipment_lines rcv
10532                        WHERE rcv.shipment_line_id = p_rcv_shipment_line_id )
10533                  AND rownum = 1;
10534 
10535           ELSIF p_rcv_transaction_id IS NOT NULL THEN
10536 
10537 	      l_debug_info := 'Querying on the basis of p_rcv_transaction_id' ;
10538               SELECT pd.code_combination_id
10539                 INTO l_default_ccid
10540                 FROM po_distributions_all pd
10541                WHERE pd.line_location_id =
10542                      (SELECT rcv.po_line_location_id
10543                         FROM rcv_transactions rcv
10544                        WHERE rcv.transaction_id = p_rcv_transaction_id )
10545                  AND rownum = 1;
10546 
10547           ELSE
10548               IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
10549                   FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
10550                                  'Default CCID passed from line rather than of PO Distribution');
10551               END IF;
10552           END IF;
10553       END IF;
10554    ELSE
10555       l_default_ccid := p_default_dist_ccid ;
10556       IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
10557           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
10558                          'Using the value passed to the API');
10559       END IF;
10560    END IF ;
10561 
10562       IF ( l_default_ccid IS NULL AND
10563            p_line_type_lookup_code <> 'PREPAY' AND
10564 	   p_invoice_id IS NOT NULL ) THEN
10565 
10566          BEGIN
10567           l_debug_info := 'Querying for Expense Report' ;
10568           SELECT aerd.code_combination_id
10569             INTO l_default_ccid
10570             FROM ap_exp_report_dists_all aerd,
10571                  ap_expense_report_lines_all aerl,
10572                  ap_invoices_all ai
10573            WHERE aerd.report_header_id = p_reference_key1
10574              AND aerd.report_line_id = p_reference_key2
10575              AND aerd.report_line_id = aerl.report_line_id
10576              AND aerd.report_header_id = aerl.report_header_id
10577              AND ai.invoice_id = p_invoice_id
10578              AND ai.invoice_type_lookup_code = 'EXPENSE REPORT'
10579              AND rownum = 1;
10580 
10581          EXCEPTION
10582           WHEN OTHERS THEN
10583             NULL;
10584         END;
10585 
10586        END IF;
10587 
10588        IF ( l_default_ccid IS NULL )
10589        THEN
10590           IF p_distribution_set_id IS NULL AND
10591 	     p_invoice_id IS NOT NULL AND
10592 	     p_invoice_line_number IS NOT NULL
10593 	  THEN
10594 	    l_debug_info := 'Querying for distribution_set_id from ap_invoice_lines' ;
10595 	   /* Bug 12874059 begins */
10596 	   BEGIN
10597 	     SELECT distribution_set_id
10598 	       INTO l_distribution_set_id
10599 	       FROM ap_invoice_lines AIL
10600 	      WHERE AIL.invoice_id = p_invoice_id
10601 	        AND AIL.line_number = p_invoice_line_number ;
10602 	   EXCEPTION --Bug 12874059 begin
10603 	       WHEN NO_DATA_FOUND THEN
10604 	           NULL;
10605 	   END;
10606 	   /* Bug 12874059 end */
10607 	  ELSE
10608 	    l_distribution_set_id := p_distribution_set_id ;
10609 	  END IF ;
10610 
10611 	  IF l_distribution_set_id IS NOT NULL
10612 	  THEN
10613 	    BEGIN
10614 	      l_debug_info := 'Querying for ccid from ap_distribution_set_lines' ;
10615 	      SELECT dist_code_combination_id
10616 	        INTO l_default_ccid
10617 	        FROM ap_distribution_set_lines ADSL
10618 	       WHERE ADSL.distribution_set_id = l_distribution_set_id
10619 	         AND rownum = 1 ;
10620             EXCEPTION
10621 	      WHEN NO_DATA_FOUND THEN
10622 	        NULL ;
10623             END ;
10624 	  END IF ;
10625        END IF ;
10626 
10627        x_derived_ccid := l_default_ccid ;
10628 
10629        IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
10630           FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name, 'x_derived_ccid = ' || l_default_ccid );
10631        END IF ;
10632 EXCEPTION
10633   WHEN OTHERS THEN
10634     IF (SQLCODE <> -20001) THEN
10635        FND_MESSAGE.SET_NAME('SQLAP','AP_DEBUG');
10636        FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
10637        FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',l_curr_calling_sequence);
10638        FND_MESSAGE.SET_TOKEN('PARAMETERS',
10639 			     'p_invoice_id = '              || p_invoice_id            ||
10640 			     ', p_default_dist_ccid = '     || p_default_dist_ccid     ||
10641 			     ', p_match_type = '            || p_match_type            ||
10642 			     ', p_po_line_location_id = '   || p_po_line_location_id   ||
10643 			     ', p_po_distribution_id = '    || p_po_distribution_id    ||
10644 			     ', p_rcv_shipment_line_id = '  || p_rcv_shipment_line_id  ||
10645 			     ', p_rcv_transaction_id = '    || p_rcv_transaction_id    ||
10646 			     ', p_line_type_lookup_code = ' || p_line_type_lookup_code ||
10647 			     ', p_reference_key1 = '        || p_reference_key1        ||
10648 			     ', p_reference_key2 = '        || p_reference_key2        ||
10649 			     ', p_invoice_line_number = '   || p_invoice_line_number   ||
10650 			     ', p_distribution_set_id = '   || p_distribution_set_id   );
10651        FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_debug_info);
10652     END IF;
10653 
10654 END Get_Default_CCID ;
10655 
10656 /*=============================================================================
10657  |  FUNCTION - GET_CCID_FROM_PROJECTS()
10658  |
10659  |  DESCRIPTION
10660  |  This function derives defact CCID based on project information
10661  |  and is called from Return_Tax_Distributions.
10662  |
10663  |  MODIFICATION HISTORY
10664  |    DATE          Author    Bug       Action
10665  |    21-OCT-2011   ANUBAGAR  12728634  Created
10666  |
10667  ============================================================================*/
10668  --bug 12728634 Added new function
10669 
10670 FUNCTION GET_CCID_FROM_PROJECTS(  p_invoice_id IN ap_invoice_distributions_all.invoice_id%TYPE,
10671                                    p_line_number IN ap_invoice_distributions_all.invoice_line_number%TYPE,
10672 				   p_ccid OUT NOCOPY AP_INVOICE_DISTRIBUTIONS_ALL.DIST_CODE_COMBINATION_ID%TYPE) RETURN BOOLEAN
10673 IS
10674 
10675 CURSOR line_rec IS
10676   SELECT INVOICE_ID,
10677       LINE_NUMBER,
10678       LINE_TYPE_LOOKUP_CODE,
10679       REQUESTER_ID,
10680       DESCRIPTION,
10681       LINE_SOURCE,
10682       ORG_ID,
10683       LINE_GROUP_NUMBER,
10684       INVENTORY_ITEM_ID,
10685       ITEM_DESCRIPTION,
10686       SERIAL_NUMBER,
10687       MANUFACTURER,
10688       MODEL_NUMBER,
10689       WARRANTY_NUMBER,
10690       GENERATE_DISTS,
10691       MATCH_TYPE,
10692       DISTRIBUTION_SET_ID,
10693       ACCOUNT_SEGMENT,
10694       BALANCING_SEGMENT,
10695       COST_CENTER_SEGMENT,
10696       OVERLAY_DIST_CODE_CONCAT,
10697       DEFAULT_DIST_CCID,
10698       PRORATE_ACROSS_ALL_ITEMS,
10699       ACCOUNTING_DATE,
10700       PERIOD_NAME,
10701       DEFERRED_ACCTG_FLAG,
10702       DEF_ACCTG_START_DATE,
10703       DEF_ACCTG_END_DATE,
10704       DEF_ACCTG_NUMBER_OF_PERIODS,
10705       DEF_ACCTG_PERIOD_TYPE,
10706       SET_OF_BOOKS_ID,
10707       AMOUNT,
10708       BASE_AMOUNT,
10709       ROUNDING_AMT,
10710       QUANTITY_INVOICED,
10711       UNIT_MEAS_LOOKUP_CODE,
10712       UNIT_PRICE,
10713       WFAPPROVAL_STATUS,
10714       DISCARDED_FLAG,
10715       ORIGINAL_AMOUNT,
10716       ORIGINAL_BASE_AMOUNT,
10717       ORIGINAL_ROUNDING_AMT,
10718       CANCELLED_FLAG,
10719       INCOME_TAX_REGION,
10720       TYPE_1099,
10721       STAT_AMOUNT,
10722       PREPAY_INVOICE_ID,
10723       PREPAY_LINE_NUMBER,
10724       INVOICE_INCLUDES_PREPAY_FLAG,
10725       CORRECTED_INV_ID,
10726       CORRECTED_LINE_NUMBER,
10727       PO_HEADER_ID,
10728       PO_LINE_ID,
10729       PO_RELEASE_ID,
10730       PO_LINE_LOCATION_ID,
10731       PO_DISTRIBUTION_ID,
10732       RCV_TRANSACTION_ID,
10733       FINAL_MATCH_FLAG,
10734       ASSETS_TRACKING_FLAG,
10735       ASSET_BOOK_TYPE_CODE,
10736       ASSET_CATEGORY_ID,
10737       PROJECT_ID,
10738       TASK_ID,
10739       EXPENDITURE_TYPE,
10740       EXPENDITURE_ITEM_DATE,
10741       EXPENDITURE_ORGANIZATION_ID,
10742       PA_QUANTITY,
10743       PA_CC_AR_INVOICE_ID,
10744       PA_CC_AR_INVOICE_LINE_NUM ,
10745       PA_CC_PROCESSED_CODE,
10746       AWARD_ID,
10747       AWT_GROUP_ID,
10748       REFERENCE_1,
10749       REFERENCE_2,
10750       RECEIPT_VERIFIED_FLAG,
10751       RECEIPT_REQUIRED_FLAG,
10752       RECEIPT_MISSING_FLAG,
10753       JUSTIFICATION,
10754       EXPENSE_GROUP,
10755       START_EXPENSE_DATE,
10756       END_EXPENSE_DATE,
10757       RECEIPT_CURRENCY_CODE,
10758       RECEIPT_CONVERSION_RATE,
10759       RECEIPT_CURRENCY_AMOUNT,
10760       DAILY_AMOUNT,
10761       WEB_PARAMETER_ID,
10762       ADJUSTMENT_REASON,
10763       MERCHANT_DOCUMENT_NUMBER,
10764       MERCHANT_NAME,
10765       MERCHANT_REFERENCE,
10766       MERCHANT_TAX_REG_NUMBER,
10767       MERCHANT_TAXPAYER_ID,
10768       COUNTRY_OF_SUPPLY,
10769       CREDIT_CARD_TRX_ID,
10770       COMPANY_PREPAID_INVOICE_ID,
10771       CC_REVERSAL_FLAG,
10772       CREATION_DATE,
10773       CREATED_BY,
10774       LAST_UPDATED_BY,
10775       LAST_UPDATE_DATE,
10776       LAST_UPDATE_LOGIN,
10777       PROGRAM_APPLICATION_ID,
10778       PROGRAM_ID,
10779       PROGRAM_UPDATE_DATE,
10780       REQUEST_ID,
10781       ATTRIBUTE_CATEGORY,
10782       ATTRIBUTE1,
10783       ATTRIBUTE2,
10784       ATTRIBUTE3,
10785       ATTRIBUTE4,
10786       ATTRIBUTE5,
10787       ATTRIBUTE6,
10788       ATTRIBUTE7,
10789       ATTRIBUTE8,
10790       ATTRIBUTE9,
10791       ATTRIBUTE10,
10792       ATTRIBUTE11,
10793       ATTRIBUTE12,
10794       ATTRIBUTE13,
10795       ATTRIBUTE14,
10796       ATTRIBUTE15,
10797       GLOBAL_ATTRIBUTE_CATEGORY,
10798       GLOBAL_ATTRIBUTE1,
10799       GLOBAL_ATTRIBUTE2,
10800       GLOBAL_ATTRIBUTE3,
10801       GLOBAL_ATTRIBUTE4,
10802       GLOBAL_ATTRIBUTE5,
10803       GLOBAL_ATTRIBUTE6,
10804       GLOBAL_ATTRIBUTE7,
10805       GLOBAL_ATTRIBUTE8,
10806       GLOBAL_ATTRIBUTE9,
10807       GLOBAL_ATTRIBUTE10,
10808       GLOBAL_ATTRIBUTE11,
10809       GLOBAL_ATTRIBUTE12,
10810       GLOBAL_ATTRIBUTE13,
10811       GLOBAL_ATTRIBUTE14,
10812       GLOBAL_ATTRIBUTE15,
10813       GLOBAL_ATTRIBUTE16,
10814       GLOBAL_ATTRIBUTE17,
10815       GLOBAL_ATTRIBUTE18,
10816       GLOBAL_ATTRIBUTE19,
10817       GLOBAL_ATTRIBUTE20,
10818       --ETAX: Invwkb, added included_tax_amount as modified the def
10819       --of ap_invoices_pkg.r_invoice_line_rec
10820       INCLUDED_TAX_AMOUNT,
10821       PRIMARY_INTENDED_USE,
10822       APPLICATION_ID,
10823       PRODUCT_TABLE,
10824       REFERENCE_KEY1,
10825       REFERENCE_KEY2,
10826       REFERENCE_KEY3,
10827       REFERENCE_KEY4,
10828       REFERENCE_KEY5,
10829       --bugfix:4674194
10830       SHIP_TO_LOCATION_ID,
10831       --bug7022001
10832       PAY_AWT_GROUP_ID
10833      FROM ap_invoice_lines_all
10834     WHERE invoice_id = p_invoice_id
10835       AND line_number = p_line_number;
10836 
10837     l_invoice_line_rec           AP_INVOICES_PKG.r_invoice_line_rec;
10838     l_dist_ccid                  AP_INVOICE_DISTRIBUTIONS.DIST_CODE_COMBINATION_ID%TYPE;
10839     debug_info                   VARCHAR2(2000);
10840     debug_context                VARCHAR2(2000);
10841     l_dist_code_concat           VARCHAR2(2000);
10842     l_invoice_attribute_rec      AP_UTILITIES_PKG.r_invoice_attribute_rec;
10843     l_invoice_type_lookup_code   ap_invoices_all.invoice_type_lookup_code%TYPE;
10844     l_invoice_currency           ap_invoices_all.invoice_currency_code%TYPE;
10845     l_base_currency_code         AP_SYSTEM_PARAMETERS.BASE_CURRENCY_CODE%TYPE;
10846     l_chart_of_accounts_id       GL_SETS_OF_BOOKS.CHART_OF_ACCOUNTS_ID%TYPE;
10847     l_error_found                VARCHAR2(1) := 'N';
10848     l_pa_allows_overrides        VARCHAR2(1) := 'N';
10849     l_employee_id                NUMBER;
10850     l_invoice_date               AP_INVOICES_ALL.INVOICE_DATE%TYPE;
10851     l_vendor_id    				 NUMBER;
10852     l_employee_ccid 			 NUMBER;
10853     l_web_parameter_id 		     NUMBER;
10854     l_exchange_rate_type         ap_invoices_all.exchange_rate_type%TYPE;
10855     l_exchange_date              ap_invoices_all.exchange_date%TYPE;
10856     l_exchange_rate              ap_invoices_all.exchange_rate%TYPE;
10857     l_sys_link_function          VARCHAR2(2);
10858     l_msg_application            VARCHAR2(25);
10859     l_msg_type                   VARCHAR2(25);
10860     l_msg_token1                 VARCHAR2(30);
10861     l_msg_token2                 VARCHAR2(30);
10862     l_msg_token3                 VARCHAR2(30);
10863     l_msg_count                  NUMBER;
10864     l_msg_data                   VARCHAR2(30);
10865     l_billable_flag              VARCHAR2(25);
10866     l_unbuilt_flex               VARCHAR2(240):='';
10867     l_reason_unbuilt_flex        VARCHAR2(2000):='';
10868 
10869     user_id                      NUMBER;
10870     current_calling_sequence     VARCHAR2(2000) := 'AP_ETAX_SERVICES_PKG.GET_CCID_FROM_PROJECTS';
10871 
10872 
10873      BEGIN
10874 
10875         OPEN line_rec;
10876          FETCH line_rec INTO l_invoice_line_rec;
10877            IF (line_rec%NOTFOUND) THEN
10878 
10879 			 debug_info := 'No Lines Record Fetched For Projects';
10880              IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
10881                 FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||'GET_CCID_FROM_PROJECTS' ,debug_info);
10882              END IF;
10883 
10884              CLOSE line_rec;
10885              RAISE NO_DATA_FOUND;
10886            END IF;
10887         CLOSE line_Rec;
10888 
10889         debug_info := 'Step 3 b - Get the Invoice and Line DFF Info';
10890         IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
10891              FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||'GET_CCID_FROM_PROJECTS' ,debug_info);
10892         END IF;
10893 
10894 	    BEGIN
10895           SELECT  attribute_category,
10896                   attribute1,
10897                   attribute2,
10898                   attribute3,
10899                   attribute4,
10900                   attribute5,
10901                   attribute6,
10902                   attribute7,
10903                   attribute8,
10904                   attribute9,
10905                   attribute10,
10906                   attribute11,
10907                   attribute12,
10908                   attribute13,
10909                   attribute14,
10910                   attribute15
10911           INTO    l_invoice_attribute_rec.attribute_category,
10912                   l_invoice_attribute_rec.attribute1,
10913                   l_invoice_attribute_rec.attribute2,
10914                   l_invoice_attribute_rec.attribute3,
10915                   l_invoice_attribute_rec.attribute4,
10916                   l_invoice_attribute_rec.attribute5,
10917                   l_invoice_attribute_rec.attribute6,
10918                   l_invoice_attribute_rec.attribute7,
10919                   l_invoice_attribute_rec.attribute8,
10920                   l_invoice_attribute_rec.attribute9,
10921                   l_invoice_attribute_rec.attribute10,
10922                   l_invoice_attribute_rec.attribute11,
10923                   l_invoice_attribute_rec.attribute12,
10924                   l_invoice_attribute_rec.attribute13,
10925                   l_invoice_attribute_rec.attribute14,
10926                   l_invoice_attribute_rec.attribute15
10927           FROM    ap_invoices_all
10928          WHERE    invoice_id = l_invoice_line_rec.invoice_id;
10929         EXCEPTION
10930 			WHEN NO_DATA_FOUND THEN
10931               debug_info := 'Step 3 b - Get the Invoice and Line DFF Info: Failed to fetch Invoice header DFF info.';
10932               IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
10933 				FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||'GET_CCID_FROM_PROJECTS' ,debug_info);
10934 			  END IF;
10935             RETURN(FALSE);
10936         END;
10937     -- need to copy the line attributes to pass to PA APIs irrespective of
10938     -- whether these are copied to distribution or not.
10939 
10940        l_invoice_attribute_rec.line_attribute_category := l_invoice_line_rec.ATTRIBUTE_CATEGORY;
10941        l_invoice_attribute_rec.line_attribute1  := l_invoice_line_rec.ATTRIBUTE1 ;
10942        l_invoice_attribute_rec.line_attribute2  := l_invoice_line_rec.ATTRIBUTE2 ;
10943        l_invoice_attribute_rec.line_attribute3  := l_invoice_line_rec.ATTRIBUTE3 ;
10944        l_invoice_attribute_rec.line_attribute4  := l_invoice_line_rec.ATTRIBUTE4 ;
10945        l_invoice_attribute_rec.line_attribute5  := l_invoice_line_rec.ATTRIBUTE5 ;
10946        l_invoice_attribute_rec.line_attribute6  := l_invoice_line_rec.ATTRIBUTE6 ;
10947        l_invoice_attribute_rec.line_attribute7  := l_invoice_line_rec.ATTRIBUTE7 ;
10948        l_invoice_attribute_rec.line_attribute8  := l_invoice_line_rec.ATTRIBUTE8 ;
10949        l_invoice_attribute_rec.line_attribute9  := l_invoice_line_rec.ATTRIBUTE9 ;
10950        l_invoice_attribute_rec.line_attribute10 := l_invoice_line_rec.ATTRIBUTE10;
10951        l_invoice_attribute_rec.line_attribute11 := l_invoice_line_rec.ATTRIBUTE11;
10952        l_invoice_attribute_rec.line_attribute12 := l_invoice_line_rec.ATTRIBUTE12;
10953        l_invoice_attribute_rec.line_attribute13 := l_invoice_line_rec.ATTRIBUTE13;
10954        l_invoice_attribute_rec.line_attribute14 := l_invoice_line_rec.ATTRIBUTE14;
10955        l_invoice_attribute_rec.line_attribute15 := l_invoice_line_rec.ATTRIBUTE15;
10956 
10957 
10958   --------------------------------------------------------------
10959   -- Step 5 - Get system level information necessary for
10960   -- validation and generation of distributions
10961   --------------------------------------------------------------
10962        debug_info := 'Get system information';
10963        IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
10964              FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||'GET_CCID_FROM_PROJECTS' ,debug_info);
10965        END IF;
10966 
10967 	   BEGIN
10968          SELECT gsob.chart_of_accounts_id, ap.base_currency_code
10969            INTO l_chart_of_accounts_id, l_base_currency_code
10970            FROM ap_system_parameters ap, gl_sets_of_books gsob
10971           WHERE ap.set_of_books_id = gsob.set_of_books_id
10972             AND ap.set_of_books_id = l_invoice_line_rec.set_of_books_id
10973 	    AND ap.org_id = l_invoice_line_rec.org_id; -- Bug 13858818;
10974 
10975        EXCEPTION
10976          WHEN NO_DATA_FOUND THEN
10977            Debug_info := 'Get system information: No GL information was found';
10978            IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
10979               FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||'GET_CCID_FROM_PROJECTS' ,debug_info);
10980            END IF;
10981 
10982          RETURN(FALSE);
10983         END;
10984 
10985   --------------------------------------------------------------
10986   -- Step 6 - Get invoice level info
10987 
10988   --------------------------------------------------------------
10989        debug_info := 'Get invoice level info';
10990 	   IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
10991             FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||'GET_CCID_FROM_PROJECTS' ,debug_info);
10992        END IF;
10993 
10994        BEGIN
10995          SELECT invoice_date,  vendor_id , invoice_type_lookup_code , invoice_currency_code ,
10996                 exchange_rate_type , exchange_date , exchange_rate
10997            INTO l_invoice_date , l_vendor_id , l_invoice_type_lookup_code , l_invoice_currency ,
10998                 l_exchange_rate_type , l_exchange_date , l_exchange_rate
10999            FROM ap_invoices_all
11000           WHERE invoice_id = p_invoice_id;
11001 
11002        EXCEPTION
11003          WHEN NO_DATA_FOUND THEN
11004            debug_info := 'Get invoice level info: No invoice info ';
11005            IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
11006               FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||'GET_CCID_FROM_PROJECTS' ,debug_info);
11007            END IF;
11008 
11009          RETURN(FALSE);
11010        END;
11011 
11012   ----------------------------------------------------------------------------
11013   -- Step 6 - Get Expenditure Item Date if PA related and if validation
11014   -- requested validate PA information. Note that expenditure item date may
11015   -- already be populated when the process is called from the Interface Import
11016   -- in which case we bypass getting the expenditure item date.
11017 
11018   ----------------------------------------------------------------------------
11019        debug_info := 'Get expenditure item date and validate if PA related';
11020        IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
11021            FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||'GET_CCID_FROM_PROJECTS' ,debug_info);
11022        END IF;
11023        IF (l_invoice_line_rec.project_id is not null) THEN
11024            IF (l_invoice_line_rec.expenditure_item_date is null) THEN
11025                l_invoice_line_rec.expenditure_item_date :=
11026                          AP_INVOICES_PKG.get_expenditure_item_date(
11027                                              l_invoice_line_rec.invoice_id,
11028                                              l_invoice_date,
11029                                              l_invoice_line_rec.accounting_date,
11030                                              NULL,
11031                                              NULL,
11032                                              l_error_found);
11033            IF (l_error_found = 'Y') THEN
11034              debug_info := 'Get expenditure item date and validate if PA related: cannot read expenditure item date information';
11035      	     IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
11036                 FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||'GET_CCID_FROM_PROJECTS' ,debug_info);
11037              END IF;
11038 
11039              RETURN(FALSE);
11040            END IF;
11041        END IF; -- Expenditure item date is null
11042 
11043        l_pa_allows_overrides := FND_PROFILE.VALUE('PA_ALLOW_FLEXBUILDER_OVERRIDES');
11044 
11045 	   debug_info := 'PA Override Flag: '||l_pa_allows_overrides;
11046 	   IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
11047            FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||'GET_CCID_FROM_PROJECTS', debug_info);
11048        END IF;
11049 
11050     -- The Import process should make the call with X_Validate_Info  FALSE
11051     -- since The same validation should have been done in the Import Validation
11052 
11053 
11054        user_id := to_number(FND_PROFILE.VALUE('USER_ID'));
11055 
11056 	   debug_info := 'User Id is: '||user_id;
11057 	   IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
11058            FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||'GET_CCID_FROM_PROJECTS', debug_info);
11059        END IF;
11060 
11061        BEGIN
11062          SELECT employee_id
11063            INTO l_employee_id
11064            FROM ap_suppliers  /* bUg 4718054 */
11065           WHERE DECODE(SIGN(TO_DATE(TO_CHAR(START_DATE_ACTIVE,'DD-MM-YYYY'),
11066                 'DD-MM-YYYY') - TO_DATE(TO_CHAR(SYSDATE,'DD-MM-YYYY'),'DD-MM-YYYY')),
11067                 1, 'N', DECODE(SIGN(TO_DATE(TO_CHAR(END_DATE_ACTIVE ,'DD-MM-YYYY'),
11068                 'DD-MM-YYYY') -  TO_DATE(TO_CHAR(SYSDATE,'DD-MM-YYYY'),'DD-MM-YYYY')),
11069                 -1, 'N', 0, 'N', 'Y')) = 'Y'
11070             AND enabled_flag = 'Y'
11071             AND vendor_id = l_vendor_id ;
11072        EXCEPTION
11073           WHEN no_data_found then
11074               l_employee_id := NULL;
11075           WHEN OTHERS then
11076               l_employee_id := NULL;
11077        END;
11078 
11079 --bug5003249
11080         BEGIN
11081            SELECT  default_code_comb_id
11082              INTO  l_employee_ccid
11083              FROM  PER_ASSIGNMENTS_F
11084             WHERE  person_id =  l_employee_id
11085               AND  set_of_books_id =  l_invoice_line_rec.set_of_books_id
11086               AND  trunc(sysdate) BETWEEN trunc(effective_start_date)
11087               AND  nvl(trunc(effective_end_date), trunc(sysdate));
11088         EXCEPTION
11089             WHEN OTHERS then
11090                l_employee_ccid := NULL;
11091         END;
11092 
11093         SELECT WEB_PARAMETER_ID
11094           INTO  l_web_parameter_id
11095           FROM  ap_invoice_lines
11096          WHERE invoice_id = p_invoice_id
11097            AND line_number =  p_line_number;
11098 
11099 	   debug_info := 'Emp Id is: '||l_employee_id ||
11100 	                 ' Emp CCID: '||l_employee_ccid||
11101                      ' Web Parameter Id: '||l_web_parameter_id;
11102 	   IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
11103            FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||'GET_CCID_FROM_PROJECTS', debug_info);
11104        END IF;
11105       /* Bug 5102724 */
11106 
11107 
11108         IF (l_invoice_type_lookup_code ='EXPENSE REPORT') Then
11109             l_sys_link_function :='ER' ;
11110         ELSE
11111             l_sys_link_function :='VI' ;
11112         END IF;
11113 
11114         debug_info := 'Sys Link Fn: '||l_sys_link_function;
11115 	    IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
11116             FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||'GET_CCID_FROM_PROJECTS', debug_info);
11117         END IF;
11118 
11119         debug_info := 'Validate PA related information';
11120         IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
11121             FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||'GET_CCID_FROM_PROJECTS' ,debug_info);
11122         END IF;
11123 
11124 	--Bug15914464: Start
11125            pa_acc_gen_wf_pkg.g_invoice_id :=  p_invoice_id;
11126 
11127 	       debug_info := 'Global Invoice id set for projects API :'||pa_acc_gen_wf_pkg.g_invoice_id;
11128            IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
11129              FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||'GET_CCID_FROM_PROJECTS' ,debug_info);
11130            END IF;
11131         --Bug15914464: End
11132 
11133        PA_TRANSACTIONS_PUB.VALIDATE_TRANSACTION(
11134                      X_PROJECT_ID          => l_invoice_line_rec.project_id,
11135                      X_TASK_ID             => l_invoice_line_rec.task_id,
11136                      X_EI_DATE             => l_invoice_line_rec.expenditure_item_date,
11137                      X_EXPENDITURE_TYPE    => l_invoice_line_rec.expenditure_type,
11138                      X_NON_LABOR_RESOURCE  => null,
11139                      X_PERSON_ID           => l_employee_id,
11140                      X_QUANTITY            => nvl(l_invoice_line_rec.pa_quantity, '1'),
11141                      X_denom_currency_code => l_invoice_currency,
11142                      X_acct_currency_code  => l_base_currency_code,
11143                      X_denom_raw_cost      => l_invoice_line_rec.amount,
11144                      X_acct_raw_cost       => l_invoice_line_rec.base_amount,
11145                      X_acct_rate_type      => l_exchange_rate_type,
11146                      X_acct_rate_date      => l_exchange_date,
11147                      X_acct_exchange_rate  => l_exchange_rate,
11148                      X_TRANSFER_EI         => null,
11149                      X_INCURRED_BY_ORG_ID  => l_invoice_line_rec.expenditure_organization_id,
11150                      X_NL_RESOURCE_ORG_ID  => null,
11151                      X_TRANSACTION_SOURCE  => l_sys_link_function, /*bug 5102724 */
11152                      X_CALLING_MODULE      => 'apetxsrb.pls',
11153                      X_VENDOR_ID           => l_vendor_id,
11154                      X_ENTERED_BY_USER_ID  => user_id,
11155                     -- Bug 6837035 Start
11156                      X_ATTRIBUTE_CATEGORY  => l_invoice_line_rec.ATTRIBUTE_CATEGORY,
11157                      X_ATTRIBUTE1          => l_invoice_line_rec.ATTRIBUTE1,
11158                      X_ATTRIBUTE2          => l_invoice_line_rec.ATTRIBUTE2,
11159                      X_ATTRIBUTE3          => l_invoice_line_rec.ATTRIBUTE3,
11160                      X_ATTRIBUTE4          => l_invoice_line_rec.ATTRIBUTE4,
11161                      X_ATTRIBUTE5          => l_invoice_line_rec.ATTRIBUTE5,
11162                      X_ATTRIBUTE6          => l_invoice_line_rec.ATTRIBUTE6,
11163                      X_ATTRIBUTE7          => l_invoice_line_rec.ATTRIBUTE7,
11164                      X_ATTRIBUTE8          => l_invoice_line_rec.ATTRIBUTE8,
11165                      X_ATTRIBUTE9          => l_invoice_line_rec.ATTRIBUTE9,
11166                      X_ATTRIBUTE10         => l_invoice_line_rec.ATTRIBUTE10,
11167                      X_ATTRIBUTE11         => l_invoice_line_rec.ATTRIBUTE11,
11168                      X_ATTRIBUTE12         => l_invoice_line_rec.ATTRIBUTE12,
11169                      X_ATTRIBUTE13         => l_invoice_line_rec.ATTRIBUTE13,
11170                      X_ATTRIBUTE14         => l_invoice_line_rec.ATTRIBUTE14,
11171                      X_ATTRIBUTE15         => l_invoice_line_rec.ATTRIBUTE15,
11172                      -- Bug 6837035 End
11173                      X_msg_application     => l_msg_application,
11174                      X_msg_type            => l_msg_type,
11175                      X_msg_token1          => l_msg_token1,
11176                      X_msg_token2          => l_msg_token2,
11177                      X_msg_token3          => l_msg_token3,
11178                      X_msg_count           => l_msg_count,
11179                      X_msg_data            => l_msg_data,
11180                      X_BILLABLE_FLAG       => l_billable_flag);
11181 
11182         --Bug15914464: Start
11183            pa_acc_gen_wf_pkg.g_invoice_id :=  NULL;
11184 
11185 	       debug_info := 'Global Invoice id nulled out after projects API :'||pa_acc_gen_wf_pkg.g_invoice_id;
11186            IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
11187              FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||'GET_CCID_FROM_PROJECTS' ,debug_info);
11188            END IF;
11189 
11190          --Bug15914464: End
11191 
11192         IF (l_msg_data is not null) THEN
11193           Fnd_Message.Set_Name(l_msg_application, l_msg_data);
11194 
11195          	 IF (l_msg_token1 IS NOT NULL) THEN
11196 	            fnd_message.set_token('PATC_MSG_TOKEN1',l_msg_token1);
11197              ELSE
11198 	            fnd_message.set_token('PATC_MSG_TOKEN1',FND_API.G_MISS_CHAR);
11199 	         END IF;
11200 
11201              IF (l_msg_token2 IS NOT NULL) THEN
11202 	             fnd_message.set_token('PATC_MSG_TOKEN2',l_msg_token2);
11203              ELSE
11204 	             fnd_message.set_token('PATC_MSG_TOKEN2',FND_API.G_MISS_CHAR);
11205              END IF;
11206 
11207              IF (l_msg_token3 IS NOT NULL) THEN
11208 	             fnd_message.set_token('PATC_MSG_TOKEN3',l_msg_token3);
11209              ELSE
11210 	             fnd_message.set_token('PATC_MSG_TOKEN3',FND_API.G_MISS_CHAR);
11211              END IF;
11212 	            --l_message_text := Fnd_Message.get;
11213 
11214              IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
11215                   FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||'GET_CCID_FROM_PROJECTS' ,'Error in PA VALIDATE TRANSACTION');
11216       		END IF;
11217 
11218             RETURN FALSE;
11219 
11220 
11221         END IF;
11222 
11223      END IF; --l_project_id is not null
11224 
11225   ----------------------------------------------------------------------------
11226   -- Step 7 - Obtain final account and account related information.
11227   -- But only if calling module is not the Import since through the import
11228   -- The account should already be built.
11229   ----------------------------------------------------------------------------
11230        debug_info := 'Obtain account to be used in distribution';
11231   	   IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
11232             FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||'GET_CCID_FROM_PROJECTS' ,debug_info);
11233        END IF;
11234 
11235 	  IF (nvl(l_invoice_line_rec.line_source, 'OTHERS') <> 'IMPORT') then
11236         --Bug5003249 added condition on invoice type lookup code
11237 
11238         IF (l_invoice_line_rec.project_id is not null
11239                  and l_invoice_type_lookup_code<>'PREPAYMENT') then
11240       -- Need to create a utility to flexbuild.  Look at import code.  Utility
11241       -- there is PA_FLEXBUILD
11242 
11243       debug_info := 'Billable Flag To PA FlexBuild '||l_billable_flag; --Bug6523162
11244       IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
11245          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||'GET_CCID_FROM_PROJECTS' ,debug_info);
11246       END IF;
11247 
11248           /*Bug13858818 begin*/
11249            pa_acc_gen_wf_pkg.g_invoice_id :=  p_invoice_id;
11250 
11251 	   debug_info := 'Global Invoice id set for projects API :'||pa_acc_gen_wf_pkg.g_invoice_id;
11252            IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
11253              FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||'GET_CCID_FROM_PROJECTS' ,debug_info);
11254            END IF;
11255           /*Bug13858818 end*/
11256 
11257       IF ( NOT (AP_UTILITIES_PKG.pa_flexbuild(
11258                     p_vendor_id                 => l_vendor_id,          --IN
11259                     p_employee_id               => l_employee_id,        --IN
11260                     p_set_of_books_id           => l_invoice_line_rec.set_of_books_id,                --IN
11261                     p_chart_of_accounts_id      => l_chart_of_accounts_id,                            --IN
11262                     p_base_currency_code        => l_base_currency_code, --IN
11263                     p_accounting_date           => l_invoice_line_rec.accounting_date,       --IN
11264                     p_award_id                  => l_invoice_line_rec.award_id,                       --IN
11265                     P_project_id                => l_invoice_line_rec.project_id,                     --IN
11266                     p_task_id                   => l_invoice_line_rec.task_id,                        --IN
11267                     p_expenditure_type          => l_invoice_line_rec.expenditure_type,
11268                     p_expenditure_org_id        => l_invoice_line_rec.expenditure_organization_id,
11269                     p_expenditure_item_date     => l_invoice_line_rec.expenditure_item_date,
11270                     p_invoice_attribute_rec     => l_invoice_attribute_rec, --bug 8713737
11271                     p_billable_flag             => l_billable_flag, --Bug6523162
11272                     p_employee_ccid             => l_employee_ccid,   --Bug5003249
11273                     p_web_parameter_id          => l_web_parameter_id,   --Bug5003249
11274                     p_invoice_type_lookup_code  => l_invoice_type_lookup_code, --Bug5003249
11275                     p_default_last_updated_by   => FND_GLOBAL.user_id,
11276                     p_default_last_update_login => FND_GLOBAL.login_id,
11277                     p_pa_default_dist_ccid      => l_dist_ccid,
11278                     p_pa_concatenated_segments  => l_dist_code_concat,                         --OUT NOCOPY
11279                     p_debug_Info                => debug_Info,    --OUT NOCOPY
11280                     p_debug_Context             => debug_Context, --OUT NOCOPY
11281                     p_calling_sequence          => 'Get_Proj_And_Acc_For_Chrg_Dist' ,
11282                    p_default_dist_ccid         =>  l_invoice_line_rec.default_dist_ccid --IN bug 5386396
11283                   ))) THEN
11284 
11285         debug_info := debug_info || ': Error encountered in pa_flexbuild';
11286 	    IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
11287            FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||'GET_CCID_FROM_PROJECTS' ,debug_info);
11288         END IF;
11289 
11290 		debug_context := current_calling_sequence;
11291         RETURN(FALSE);
11292       END IF;
11293 
11294            /*Bug13858818 begin*/
11295            pa_acc_gen_wf_pkg.g_invoice_id :=  NULL;
11296 
11297 	   debug_info := 'Global Invoice id nulled out after projects API :'||pa_acc_gen_wf_pkg.g_invoice_id;
11298            IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
11299              FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||'GET_CCID_FROM_PROJECTS' ,debug_info);
11300            END IF;
11301            /*Bug13858818 end*/
11302 
11303       IF (l_pa_allows_overrides = 'N') then
11304         IF ( NOT (AP_UTILITIES_PKG.IS_CCID_VALID(
11305                     l_dist_ccid,
11306                     l_chart_of_accounts_id,
11307                     l_invoice_line_rec.accounting_date,
11308                     current_calling_sequence))) then
11309           --X_error_code := 'AP_INVALID_ACCOUNT';
11310 	       IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
11311                FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||'GET_CCID_FROM_PROJECTS' ,'AP_INVALID_ACCOUNT for PA OVERRIDE FLAG: N');
11312             END IF;
11313 
11314 		    RETURN(FALSE);
11315 
11316 		END IF;
11317 
11318       ELSE -- pa allows overrides is Y
11319         -- If the user provided an account at the line level,
11320         --  use it instead of the Account produced by PA
11321          IF (l_invoice_line_rec.default_dist_ccid is not null) then
11322               l_dist_ccid := l_invoice_line_rec.default_dist_ccid;
11323          END IF;
11324 
11325 		 IF (l_invoice_line_rec.overlay_dist_code_concat is NULL AND
11326              l_invoice_line_rec.balancing_segment is NULL AND
11327              l_invoice_line_rec.account_segment is NULL AND
11328              l_invoice_line_rec.cost_center_segment is NULL) then
11329 
11330             	IF ( NOT (AP_UTILITIES_PKG.IS_CCID_VALID(
11331                            l_dist_ccid,
11332                            l_chart_of_accounts_id,
11333                            l_invoice_line_rec.accounting_date,
11334                            current_calling_sequence))) then
11335 
11336     	             IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
11337                         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||'GET_CCID_FROM_PROJECTS' ,'AP_INVALID_ACCOUNT for PA OVERRIDE FLAG: Y');
11338                      END IF;
11339 
11340 					 RETURN(FALSE);
11341                 END IF;
11342            ELSE
11343                IF ( NOT (AP_UTILITIES_PKG.OVERLAY_SEGMENTS (
11344                            l_invoice_line_rec.balancing_segment,
11345                            l_invoice_line_rec.cost_center_segment,
11346                            l_invoice_line_rec.account_segment,
11347                            l_invoice_line_rec.overlay_dist_code_concat,
11348                            l_dist_ccid,
11349                            l_invoice_line_rec.set_of_books_id,
11350                            'CREATE_COMB_NO_AT',
11351                            l_unbuilt_flex,
11352                            l_reason_unbuilt_flex,
11353                            FND_GLOBAL.RESP_APPL_ID,
11354                            FND_GLOBAL.RESP_ID,
11355                            FND_GLOBAL.USER_ID,
11356                            current_calling_sequence,
11357                            NULL,
11358                            l_invoice_line_rec.accounting_date))) THEN -- 7531219
11359            --  X_error_code := 'AP_CANNOT_OVERLAY';
11360 	                    IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
11361                            FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||'GET_CCID_FROM_PROJECTS' ,'AP_CANNOT_OVERLAY');
11362                         END IF;
11363 
11364                         RETURN(FALSE);
11365                END IF;
11366            END IF; -- overlay information is null
11367       END IF; -- pa allows overrides
11368 
11369     END IF; -- project id is null
11370     END IF;
11371 
11372       debug_info := 'CCID Return by Projects is ' || l_dist_ccid;
11373       IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
11374          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||'GET_CCID_FROM_PROJECTS', debug_info);
11375       END IF;
11376 
11377       p_ccid := l_dist_ccid;
11378       RETURN(TRUE);
11379 
11380 END  GET_CCID_FROM_PROJECTS ;
11381 
11382  --bug 12728634 Added new function  ends
11383 
11384  --bug11768207, added function IS_LINE_POSTED_ENCUMBERED
11385 /*=============================================================================
11386  |  FUNCTION - IS_LINE_POSTED_ENCUMBERED()
11387  |
11388  |  DESCRIPTION
11389  |      Called from   : APXINWKB.fmb
11390  |      RETURN TRUE   : INCLUSIVE TAX LINE NOT ALLOWED
11391  |      RETURN FALUSE : INCLUSIVE TAX LINE ALLOWED
11392  |
11393  |
11394  |  PARAMETERS
11395  |      p_invoice_id  - Invoice Id of the Invoice
11396  |      p_line_number - Invoice Line Number
11397  |
11398  |  MODIFICATION HISTORY
11399  |    DATE          Author    Bug       Action
11400  |    15-Nov-2011   HCHAUDHA  11768207  Created
11401  |
11402  ============================================================================*/
11403 
11404 FUNCTION IS_LINE_POSTED_ENCUMBERED(
11405          p_invoice_id       IN NUMBER,
11406          p_line_number      IN NUMBER,
11407          p_calling_sequence IN VARCHAR2)
11408 RETURN BOOLEAN IS
11409          l_dont_allow_update          NUMBER ;
11410          l_curr_calling_sequence VARCHAR2(4000);
11411          l_debug_info            VARCHAR2(4000);
11412          l_api_name              CONSTANT VARCHAR2(100):='IS_LINE_POSTED_ENCUMBERED';
11413 BEGIN
11414 
11415   l_curr_calling_sequence := 'AP_ETAX_UTILITY_PKG.IS_LINE_POSTED_ENCUMBERED<-'||
11416                                P_calling_sequence;
11417 
11418 
11419   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
11420      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_curr_calling_sequence);
11421   END IF;
11422   -------------------------------------------------------------------
11423   l_debug_info := 'Step 0: Invoice Id and Invoice Line Number '||p_invoice_id||' '||p_line_number;
11424   -------------------------------------------------------------------
11425   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
11426      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info);
11427   END IF;
11428 
11429   -------------------------------------------------------------------------------
11430   l_debug_info := 'Step 1: Check if Posted or Encumbered Distributions exist : ';
11431   -------------------------------------------------------------------------------
11432 
11433      SELECT COUNT('DISTS POSTED OR ENCUMBERED')
11434        INTO l_dont_allow_update
11435        FROM ap_invoice_distributions_all AId
11436       WHERE AID.invoice_id = p_invoice_id
11437         AND AID.invoice_line_number  = p_line_number
11438         AND (AID.posted_flag = 'Y' OR
11439 		     NVL(AID.encumbered_flag, 'N' ) IN ('Y', 'D', 'W', 'X'))
11440         AND ROWNUM = 1 ;
11441 
11442   IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
11443      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,l_debug_info||l_dont_allow_update);
11444   END IF;
11445 
11446   IF l_dont_allow_update > 0 THEN
11447      RETURN TRUE ;
11448   END IF ;
11449 
11450   RETURN FALSE ;
11451 
11452 EXCEPTION
11453   WHEN OTHERS THEN
11454     IF (SQLCODE <> -20001) THEN
11455        FND_MESSAGE.SET_NAME('SQLAP','AP_DEBUG');
11456        FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
11457        FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE',l_curr_calling_sequence);
11458        FND_MESSAGE.SET_TOKEN('PARAMETERS',
11459                              ' p_invoice_id = '||p_invoice_id||
11460                              ' p_line_number = '||p_line_number);
11461        FND_MESSAGE.SET_TOKEN('DEBUG_INFO',l_debug_info);
11462        RETURN FALSE;
11463     END IF;
11464 END IS_LINE_POSTED_ENCUMBERED;
11465 
11466 
11467 END AP_ETAX_UTILITY_PKG;