1 PACKAGE BODY AP_ACCOUNTING_PAY_PKG AS
2 /* $Header: apacpayb.pls 120.12.12010000.4 2008/09/04 14:06:27 imandal ship $ */
3
4 -- Logging Infra
5 G_CURRENT_RUNTIME_LEVEL NUMBER := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
6 G_LEVEL_UNEXPECTED CONSTANT NUMBER := FND_LOG.LEVEL_UNEXPECTED;
7 G_LEVEL_ERROR CONSTANT NUMBER := FND_LOG.LEVEL_ERROR;
8 G_LEVEL_EXCEPTION CONSTANT NUMBER := FND_LOG.LEVEL_EXCEPTION;
9 G_LEVEL_EVENT CONSTANT NUMBER := FND_LOG.LEVEL_EVENT;
10 G_LEVEL_PROCEDURE CONSTANT NUMBER := FND_LOG.LEVEL_PROCEDURE;
11 G_LEVEL_STATEMENT CONSTANT NUMBER := FND_LOG.LEVEL_STATEMENT;
12 G_MODULE_NAME CONSTANT VARCHAR2(50) := 'AP.PLSQL.AP_ACCOUNTING_PAY_PKG.';
13 -- Logging Infra
14
15 -------------------------------------------------------------------------------
16 -- PROCEDURE Do_Pay_Accounting
17 -- Selects Payment Events for processing. Calls the Payment Dists and Prepay Appl
18 -- Dists Generator for creating Payment and Prepay Appl dists. Single point of
19 -- entry for Payment processing.
20 --
21 --------------------------------------------------------------------------------
22 PROCEDURE Do_Pay_Accounting
23 (P_Calling_Sequence IN VARCHAR2
24 ) IS
25
26 l_xla_event_rec r_xla_event_info;
27 l_curr_calling_sequence VARCHAR2(2000);
28
29 CURSOR xla_events_cur IS
30 SELECT Event_ID,
31 Event_Type_Code,
32 Event_Date,
33 Event_Number,
34 Event_Status_Code,
35 Entity_Code,
36 Source_ID_Int_1
37 FROM XLA_Events_GT
38 WHERE (Entity_Code = 'AP_PAYMENTS'
39 OR Event_Type_Code IN ('PREPAYMENT APPLIED',
40 'PREPAYMENT UNAPPLIED',
41 'PREPAYMENT APPLICATION ADJ'))
42 AND Event_Status_Code <> 'N'
43 ORDER BY Event_ID;
44
45 -- Logging Infra:
46 l_procedure_name CONSTANT VARCHAR2(30) := 'Do_Pay_Accounting';
47 l_log_msg FND_LOG_MESSAGES.MESSAGE_TEXT%TYPE;
48
49 BEGIN
50
51 l_curr_calling_sequence := 'AP_Accounting_Pay_Pkg.Do_Pay_Accounting<- ' ||
52 p_calling_sequence;
53
54 -- Logging Infra: Setting up runtime level
55 G_CURRENT_RUNTIME_LEVEL := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
56
57 -- Logging Infra: Procedure level
58 IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
59 l_log_msg := 'Begin of procedure '|| l_procedure_name;
60 FND_LOG.STRING(G_LEVEL_PROCEDURE, G_MODULE_NAME||l_procedure_name||'.begin', l_log_msg);
61 END IF;
62
63
64 IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
65 l_log_msg := 'Calling procedure AP_Acctg_Pay_Dist_Pkg.Primary_Pay_Events';
66 FND_LOG.STRING(G_LEVEL_PROCEDURE, G_MODULE_NAME || l_procedure_name, l_log_msg);
67 END IF;
68
69
70 -- We need to delete the payment hist distributions and prepay appl hist distributions
71 -- which were created during the draft mode of the accounting process
72 -------------------------------------------------------------------------------
73
74 Delete_Hist_Dists (l_curr_calling_sequence);
75
76
77 IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
78 l_log_msg := 'Procedure AP_Acctg_Pay_Dist_Pkg.Primary_Pay_Events executed';
79 FND_LOG.STRING(G_LEVEL_PROCEDURE, G_MODULE_NAME || l_procedure_name, l_log_msg);
80 END IF;
81
82 OPEN xla_events_cur;
83 LOOP
84
85 FETCH xla_events_cur INTO l_xla_event_rec;
86 EXIT WHEN xla_events_cur%NOTFOUND OR
87 xla_events_cur%NOTFOUND IS NULL;
88
89
90 IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
91 l_log_msg := 'CUR: xla_events_cur: entity_code = '|| l_xla_event_rec.entity_code
92 || ' document_id = ' || l_xla_event_rec.source_id_int_1;
93 FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME || l_procedure_name, l_log_msg);
94 END IF;
95
96 -- Get the base currency code into global variable
97 IF (l_xla_event_rec.entity_code = 'AP_PAYMENTS') THEN
98
99 SELECT ASP.Base_Currency_Code
100 INTO g_base_currency_code
101 FROM AP_System_Parameters_All ASP,
102 AP_Checks_All AC
103 WHERE AC.Check_ID = l_xla_event_rec.source_id_int_1
104 AND AC.Org_ID = ASP.Org_ID;
105
106 ELSE
107
108 SELECT ASP.Base_Currency_Code
109 INTO g_base_currency_code
110 FROM AP_System_Parameters_All ASP,
111 AP_Invoices_All AI
112 WHERE AI.Invoice_ID = l_xla_event_rec.source_id_int_1
113 AND AI.Org_ID = ASP.Org_ID;
114
115 END IF;
116
117
118 -- Based on the event type calling the appropriate event procedures
119 -- to create payment and prepayment distributions.
120 IF (l_xla_event_rec.event_type_code IN ('PAYMENT CREATED',
121 'PAYMENT MATURED',
122 'PAYMENT CLEARED',
123 'REFUND RECORDED')) THEN
124
125 IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
126 l_log_msg := 'Calling procedure AP_Acctg_Pay_Dist_Pkg.Primary_Pay_Events';
127 FND_LOG.STRING(G_LEVEL_PROCEDURE, G_MODULE_NAME || l_procedure_name, l_log_msg);
128 END IF;
129
130
131 AP_Acctg_Pay_Dist_Pkg.Primary_Pay_Events
132 (l_xla_event_rec,
133 l_curr_calling_sequence);
134
135
136 IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
137 l_log_msg := 'Procedure AP_Acctg_Pay_Dist_Pkg.Primary_Pay_Events executed';
138 FND_LOG.STRING(G_LEVEL_PROCEDURE, G_MODULE_NAME || l_procedure_name, l_log_msg);
139 END IF;
140
141 ELSIF l_xla_event_rec.event_type_code IN ('MANUAL PAYMENT ADJUSTED',
142 'UPGRADED MANUAL PMT ADJUSTED') THEN
143
144 IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
145 l_log_msg := 'Calling procedure AP_Acctg_Pay_Dist_Pkg.Manual_Pay_Adj_Events';
146 FND_LOG.STRING(G_LEVEL_PROCEDURE, G_MODULE_NAME || l_procedure_name, l_log_msg);
147 END IF;
148
149 AP_Acctg_Pay_Dist_Pkg.Manual_Pay_Adj_Events
150 (l_xla_event_rec,
151 l_curr_calling_sequence);
152
153 IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
154 l_log_msg := 'Procedure AP_Acctg_Pay_Dist_Pkg.Manual_Pay_Adj_Events executed';
155 FND_LOG.STRING(G_LEVEL_PROCEDURE, G_MODULE_NAME || l_procedure_name, l_log_msg);
156 END IF;
157
158 ELSIF l_xla_event_rec.event_type_code IN ('PAYMENT ADJUSTED',
159 'PAYMENT MATURITY ADJUSTED',
160 'PAYMENT CLEARING ADJUSTED',
161 'REFUND ADJUSTED') THEN
162
163 IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
164 l_log_msg := 'Calling procedure AP_Acctg_Pay_Dist_Pkg.Pay_Dist_Cascade_Adj_Events';
165 FND_LOG.STRING(G_LEVEL_PROCEDURE, G_MODULE_NAME || l_procedure_name, l_log_msg);
166 END IF;
167
168 AP_Acctg_Pay_Dist_Pkg.Pay_Dist_Cascade_Adj_Events
169 (l_xla_event_rec,
170 l_curr_calling_sequence);
171
172 IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
173 l_log_msg := 'Procedure AP_Acctg_Pay_Dist_Pkg.Pay_Dist_Cascade_Adj_Events executed';
174 FND_LOG.STRING(G_LEVEL_PROCEDURE, G_MODULE_NAME || l_procedure_name, l_log_msg);
175 END IF;
176
177 ELSIF l_xla_event_rec.event_type_code IN ('PAYMENT CANCELLED',
178 'PAYMENT MATURITY REVERSED',
179 'PAYMENT UNCLEARED',
180 'REFUND CANCELLED') THEN
181
182 IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
183 l_log_msg := 'Calling procedure AP_Acctg_Pay_Dist_Pkg.Cancel_Primary_Pay_Events';
184 FND_LOG.STRING(G_LEVEL_PROCEDURE, G_MODULE_NAME || l_procedure_name, l_log_msg);
185 END IF;
186
187 AP_Acctg_Pay_Dist_Pkg.Cancel_Primary_Pay_Events
188 (l_xla_event_rec,
189 l_curr_calling_sequence);
190
191
192 IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
193 l_log_msg := 'Procedure AP_Acctg_Pay_Dist_Pkg.Cancel_Primary_Pay_Events executed';
194 FND_LOG.STRING(G_LEVEL_PROCEDURE, G_MODULE_NAME || l_procedure_name, l_log_msg);
195 END IF;
196
197 ELSIF l_xla_event_rec.event_type_code IN ('PREPAYMENT APPLICATION ADJ') THEN
198
199 IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
200 l_log_msg := 'Calling procedure AP_Acctg_Prepay_Dist_Pkg.Prepay_Dist_Cascade_Adj';
201 FND_LOG.STRING(G_LEVEL_PROCEDURE, G_MODULE_NAME || l_procedure_name, l_log_msg);
202 END IF;
203
204 AP_Acctg_Prepay_Dist_Pkg.Prepay_Dist_Cascade_Adj
205 (l_xla_event_rec,
206 l_curr_calling_sequence);
207
208 IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
209 l_log_msg := 'Procedure AP_Acctg_Prepay_Dist_Pkg.Prepay_Dist_Cascade_Adj executed';
210 FND_LOG.STRING(G_LEVEL_PROCEDURE, G_MODULE_NAME || l_procedure_name, l_log_msg);
211 END IF;
212
213 ELSIF l_xla_event_rec.event_type_code IN ('PREPAYMENT APPLIED',
214 'PREPAYMENT UNAPPLIED') THEN
215
216 IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
217 l_log_msg := 'Calling procedure AP_Acctg_Prepay_Dist_Pkg.Update_Gain_Loss_Ind';
218 FND_LOG.STRING(G_LEVEL_PROCEDURE, G_MODULE_NAME || l_procedure_name, l_log_msg);
219 END IF;
220
221 AP_Acctg_Prepay_Dist_Pkg.Update_Gain_Loss_Ind
222 (l_xla_event_rec,
223 l_curr_calling_sequence);
224
225 IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
226 l_log_msg := 'Procedure AP_Acctg_Prepay_Dist_Pkg.Updated_Gain_Loss_Ind executed';
227 FND_LOG.STRING(G_LEVEL_PROCEDURE, G_MODULE_NAME || l_procedure_name, l_log_msg);
228 END IF;
229
230 END IF;
231
232 END LOOP;
233 CLOSE xla_events_cur;
234
235 -- Logging Infra: Procedure level
236 IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
237 l_log_msg := 'End of procedure '|| l_procedure_name;
238 FND_LOG.STRING(G_LEVEL_PROCEDURE, G_MODULE_NAME||l_procedure_name||'.end', l_log_msg);
239 END IF;
240
241 -- Commenting out the commit since the commit is issued during the post processing of the
242 -- accounting process
243 -- COMMIT;
244
245 EXCEPTION
246
247 WHEN OTHERS THEN
248 IF (SQLCODE <> -20001) THEN
249 FND_MESSAGE.SET_NAME('SQLAP','AP_DEBUG');
250 FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
251 FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE', l_curr_calling_sequence);
252 END IF;
253 APP_EXCEPTION.RAISE_EXCEPTION;
254
255 END Do_Pay_Accounting;
256
257
258 -------------------------------------------------------------------------------
259 -- PROCEDURE Delete_Hist_Dists
260 -- Procedure to delete the payment history distributions and prepayment
261 -- application distributions.
262 --
263 --------------------------------------------------------------------------------
264 PROCEDURE Delete_Hist_Dists
265 (P_Calling_Sequence IN VARCHAR2
266 ) IS
267
268 l_curr_calling_sequence VARCHAR2(2000);
269
270 -- Logging Infra:
271 l_procedure_name CONSTANT VARCHAR2(30) := 'Do_Pay_Accounting';
272 l_log_msg FND_LOG_MESSAGES.MESSAGE_TEXT%TYPE;
273
274 BEGIN
275
276 l_curr_calling_sequence := 'AP_Accounting_Pay_Pkg.Do_Pay_Accounting<- ' ||
277 p_calling_sequence;
278
279 -- Logging Infra: Procedure level
280 IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
281 l_log_msg := 'Begin of procedure '|| l_procedure_name;
282 FND_LOG.STRING(G_LEVEL_PROCEDURE, G_MODULE_NAME||l_procedure_name||'.begin', l_log_msg);
283 END IF;
284
285
286 -- Bug 5098657. Added the where condition for both the delete statements
287 DELETE FROM AP_Payment_Hist_Dists
288 WHERE Accounting_Event_ID IN
289 (SELECT Event_ID
290 FROM XLA_Events_GT
291 WHERE Entity_Code = 'AP_PAYMENTS');
292
293 DELETE FROM AP_Prepay_App_Dists
294 WHERE Accounting_Event_ID IN
295 (SELECT Event_ID
296 FROM XLA_Events_GT
297 WHERE Event_Type_Code IN ('PREPAYMENT APPLICATION ADJ'));
298
299
300 EXCEPTION
301
302 WHEN OTHERS THEN
303 IF (SQLCODE <> -20001) THEN
304 FND_MESSAGE.SET_NAME('SQLAP','AP_DEBUG');
305 FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
306 FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE', l_curr_calling_sequence);
307 END IF;
308 APP_EXCEPTION.RAISE_EXCEPTION;
309
310 END Delete_Hist_Dists;
311
312
313
314 -------------------------------------------------------------------------------
315 -- Function Get_Casc_Pay_Sum
316 -- This function gets the sum of the payment amount from the payment history
317 -- distributions for the given invoice distribution which will be used for
318 -- payment cascase events
319 --
320 --------------------------------------------------------------------------------
321 FUNCTION Get_Casc_Pay_Sum
322 (P_Invoice_Distribution_ID IN NUMBER
323 ,P_Related_Event_ID IN NUMBER
324 ,P_Invoice_Payment_ID IN NUMBER
325 ,P_Calling_Sequence IN VARCHAR2
326 ) RETURN NUMBER IS
327
328 l_curr_calling_sequence VARCHAR2(2000);
329 l_pay_sum NUMBER;
330
331 BEGIN
332
333 l_curr_calling_sequence := 'AP_ACCOUNTING_PAY_PKG.Get_Casc_Pay_Sum<- ' ||
334 P_Calling_Sequence;
335
336
337
338 SELECT SUM(APHD.Amount)
339 INTO l_pay_sum
340 FROM AP_Payment_Hist_Dists APHD,
341 AP_Payment_History_All APH
342 WHERE APHD.Invoice_Distribution_ID = P_Invoice_Distribution_ID
343 AND APHD.Invoice_Payment_ID = P_Invoice_Payment_ID
344 AND APH.Related_Event_ID = P_Related_Event_ID
345 AND APHD.Payment_History_ID = APH.Payment_History_ID
346 AND APH.Posted_Flag = 'Y' -- added for bug 7337949
347 AND APHD.Pay_Dist_Lookup_Code = 'CASH';
348
349 RETURN NVL(l_pay_sum,0);
350
351 END Get_Casc_Pay_Sum;
352
353
354 -------------------------------------------------------------------------------
355 -- Function Get_Casc_Inv_Dist_Sum
356 -- This function gets the sum of the paid amount in invoice currency from the
357 -- payment history distributions for the given invoice distribution which will
358 -- be used for payment cascase events
359 --
360 --------------------------------------------------------------------------------
361 FUNCTION Get_Casc_Inv_Dist_Sum
362 (P_Invoice_Distribution_ID IN NUMBER
363 ,P_Related_Event_ID IN NUMBER
364 ,P_Invoice_Payment_ID IN NUMBER
365 ,P_Calling_Sequence IN VARCHAR2
369 l_inv_dist_sum NUMBER;
366 ) RETURN NUMBER IS
367
368 l_curr_calling_sequence VARCHAR2(2000);
370
371 BEGIN
372
373 l_curr_calling_sequence := 'AP_ACCOUNTING_PAY_PKG.Get_Casc_Pay_Sum<- ' ||
374 P_Calling_Sequence;
375
376
377
378 SELECT SUM(APHD.Invoice_Dist_Amount)
379 INTO l_inv_dist_sum
380 FROM AP_Payment_Hist_Dists APHD,
381 AP_Payment_History_All APH
382 WHERE APHD.Invoice_Distribution_ID = P_Invoice_Distribution_ID
383 AND APHD.Invoice_Payment_ID = P_Invoice_Payment_ID
384 AND APH.Related_Event_ID = P_Related_Event_ID
385 AND APHD.Payment_History_ID = APH.Payment_History_ID
386 AND APH.Posted_Flag = 'Y' --added for bug 7337949
387 AND APHD.Pay_Dist_Lookup_Code = 'CASH';
388
389 RETURN NVL(l_inv_dist_sum,0);
390
391 END Get_Casc_Inv_Dist_Sum;
392
393
394
395 -------------------------------------------------------------------------------
396 -- Function Get_Casc_Bank_Curr_Sum
397 -- This function gets the sum of the paid amount in the bank currency from the
398 -- payment history distributions for the given invoice distribution which will
399 -- be used for payment cascase events
400 --
401 --------------------------------------------------------------------------------
402 FUNCTION Get_Casc_Bank_Curr_Sum
403 (P_Invoice_Distribution_ID IN NUMBER
404 ,P_Related_Event_ID IN NUMBER
405 ,P_Invoice_Payment_ID IN NUMBER
406 ,P_Calling_Sequence IN VARCHAR2
407 ) RETURN NUMBER IS
408
409 l_curr_calling_sequence VARCHAR2(2000);
410 l_bank_curr_sum NUMBER;
411
412 BEGIN
413
414 l_curr_calling_sequence := 'AP_ACCOUNTING_PAY_PKG.Get_Casc_Pay_Sum<- ' ||
415 P_Calling_Sequence;
416
417
418 SELECT SUM(APHD.Bank_Curr_Amount)
419 INTO l_bank_curr_sum
420 FROM AP_Payment_Hist_Dists APHD,
421 AP_Payment_History_All APH
422 WHERE APHD.Invoice_Distribution_ID = P_Invoice_Distribution_ID
423 AND APHD.Invoice_Payment_ID = P_Invoice_Payment_ID
424 AND APH.Related_Event_ID = P_Related_Event_ID
425 AND APHD.Payment_History_ID = APH.Payment_History_ID
426 AND APH.Posted_Flag = 'Y' --added for bug 7337949
427 AND APHD.Pay_Dist_Lookup_Code = 'CASH';
428
429 RETURN NVL(l_bank_curr_sum,0);
430
431 END Get_Casc_Bank_Curr_Sum;
432
433
434
435 -------------------------------------------------------------------------------
436 -- Function Get_Casc_Prepay_Sum
437 -- This function gets the sum of the prepayment amount from the prepay appl payment
438 -- distributions for the given invoice distribution which will be used for
439 -- prepayment appl cascase events
440 --
441 --------------------------------------------------------------------------------
442 FUNCTION Get_Casc_Prepay_Sum
443 (P_Invoice_Distribution_ID IN NUMBER
444 ,P_Prepay_App_Dist_ID IN NUMBER
445 ,P_Calling_Sequence IN VARCHAR2
446 ) RETURN NUMBER IS
447
448 l_curr_calling_sequence VARCHAR2(2000);
449 l_prepay_sum NUMBER;
450
451 BEGIN
452
453 l_curr_calling_sequence := 'AP_ACCOUNTING_PAY_PKG.Get_Casc_Prepay_Sum<- ' ||
454 P_Calling_Sequence;
455
456
457 SELECT SUM(APAD.Amount)
458 INTO l_prepay_sum
459 FROM AP_Prepay_App_Dists APAD
460 WHERE APAD.Invoice_Distribution_ID = P_Invoice_Distribution_ID
461 AND APAD.Prepay_App_Distribution_ID = P_Prepay_App_Dist_ID
462 AND APAD.Prepay_Dist_Lookup_Code IN ('PREPAY APPL', 'PREPAY APPL REC TAX',
463 'PREPAY APPL NONREC TAX', 'AWT',
464 'EXCHANGE RATE VARIANCE');
465
466 RETURN NVL(l_prepay_sum,0);
467
468 END Get_Casc_Prepay_Sum;
469
470
471 -------------------------------------------------------------------------------
472 -- Function Get_Casc_Tax_Diff_Sum
473 -- This function gets the sum of the tax diff amount from the prepay appl payment
474 -- distributions for the given invoice distribution which will be used for
475 -- prepayment appl cascase events
476 --
477 --------------------------------------------------------------------------------
478 FUNCTION Get_Casc_Tax_Diff_Sum
479 (P_Invoice_Distribution_ID IN NUMBER
480 ,P_Prepay_App_Dist_ID IN NUMBER
481 ,P_Calling_Sequence IN VARCHAR2
482 ) RETURN NUMBER IS
483
484 l_curr_calling_sequence VARCHAR2(2000);
485 l_tax_diff_sum NUMBER;
486
487 BEGIN
488
489 l_curr_calling_sequence := 'AP_ACCOUNTING_PAY_PKG.Get_Casc_Prepay_Sum<- ' ||
490 P_Calling_Sequence;
491
492
493 SELECT SUM(APAD.Amount)
494 INTO l_tax_diff_sum
495 FROM AP_Prepay_App_Dists APAD
496 WHERE APAD.Invoice_Distribution_ID = P_Invoice_Distribution_ID
497 AND APAD.Prepay_App_Distribution_ID = P_Prepay_App_Dist_ID
498 AND APAD.Prepay_Dist_Lookup_Code IN ('TAX DIFF');
499
500 RETURN NVL(l_tax_diff_sum,0);
501
505
502 END Get_Casc_Tax_Diff_Sum;
503
504
506 -------------------------------------------------------------------------------
507 -- Function Get_Casc_Discount_Sum
508 -- This function gets the sum of the discount amounts from the payment history
509 -- distributions for the given invoice distribution which will be used for
510 -- payment cascase events
511 --
512 --------------------------------------------------------------------------------
513 FUNCTION Get_Casc_Discount_Sum
514 (P_Invoice_Distribution_ID IN NUMBER
515 ,P_Related_Event_ID IN NUMBER
516 ,P_Invoice_Payment_ID IN NUMBER
517 ,P_Calling_Sequence IN VARCHAR2
518 ) RETURN NUMBER IS
519
520 l_curr_calling_sequence VARCHAR2(2000);
521 l_discount_sum NUMBER;
522
523 BEGIN
524
525 l_curr_calling_sequence := 'AP_ACCOUNTING_PAY_PKG.Get_Casc_Discount_Sum<- ' ||
526 P_Calling_Sequence;
527
528
529 SELECT SUM(APHD.Amount)
530 INTO l_discount_sum
531 FROM AP_Payment_Hist_Dists APHD,
532 AP_Payment_History_All APH
533 WHERE APHD.Invoice_Distribution_ID = P_Invoice_Distribution_ID
534 AND APHD.Invoice_Payment_ID = P_Invoice_Payment_ID
535 AND APH.Related_Event_ID = P_Related_Event_ID
536 AND APHD.Payment_History_ID = APH.Payment_History_ID
537 AND APH.Posted_Flag = 'Y' --added for bug 7337949
538 AND Pay_Dist_Lookup_Code = 'DISCOUNT';
539
540 RETURN NVL(l_discount_sum,0);
541
542 END Get_Casc_Discount_Sum;
543
544
545 -------------------------------------------------------------------------------
546 -- Function Get_Casc_Inv_Dist_Disc_Sum
547 -- This function gets the sum of the discount amounts from the payment history
548 -- distributions for the given invoice distribution which will be used for
549 -- payment cascase events
550 --
551 --------------------------------------------------------------------------------
552 FUNCTION Get_Casc_Inv_Dist_Disc_Sum
553 (P_Invoice_Distribution_ID IN NUMBER
554 ,P_Related_Event_ID IN NUMBER
555 ,P_Invoice_Payment_ID IN NUMBER
556 ,P_Calling_Sequence IN VARCHAR2
557 ) RETURN NUMBER IS
558
559 l_curr_calling_sequence VARCHAR2(2000);
560 l_discount_sum NUMBER;
561
562 BEGIN
563
564 l_curr_calling_sequence := 'AP_ACCOUNTING_PAY_PKG.Get_Casc_Discount_Sum<- ' ||
565 P_Calling_Sequence;
566
567
568 SELECT SUM(APHD.Invoice_Dist_Amount)
569 INTO l_discount_sum
570 FROM AP_Payment_Hist_Dists APHD,
571 AP_Payment_History_All APH
572 WHERE APHD.Invoice_Distribution_ID = P_Invoice_Distribution_ID
573 AND APHD.Invoice_Payment_ID = P_Invoice_Payment_ID
574 AND APH.Related_Event_ID = P_Related_Event_ID
575 AND APHD.Payment_History_ID = APH.Payment_History_ID
576 AND APH.Posted_Flag = 'Y' --added for bug 7337949
577 AND Pay_Dist_Lookup_Code = 'DISCOUNT';
578
579 RETURN NVL(l_discount_sum,0);
580
581 END Get_Casc_Inv_Dist_Disc_Sum;
582
583
584
585 -------------------------------------------------------------------------------
586 -- Function Get_Casc_Bank_Curr_Disc_Sum
587 -- This function gets the sum of the discount amounts from the payment history
588 -- distributions for the given invoice distribution which will be used for
589 -- payment cascase events
590 --
591 --------------------------------------------------------------------------------
592 FUNCTION Get_Casc_Bank_Curr_Disc_Sum
593 (P_Invoice_Distribution_ID IN NUMBER
594 ,P_Related_Event_ID IN NUMBER
595 ,P_Invoice_Payment_ID IN NUMBER
596 ,P_Calling_Sequence IN VARCHAR2
597 ) RETURN NUMBER IS
598
599 l_curr_calling_sequence VARCHAR2(2000);
600 l_discount_sum NUMBER;
601
602 BEGIN
603
604 l_curr_calling_sequence := 'AP_ACCOUNTING_PAY_PKG.Get_Casc_Discount_Sum<- ' ||
605 P_Calling_Sequence;
606
607
608 SELECT SUM(APHD.Bank_Curr_Amount)
609 INTO l_discount_sum
610 FROM AP_Payment_Hist_Dists APHD,
611 AP_Payment_History_All APH
612 WHERE APHD.Invoice_Distribution_ID = P_Invoice_Distribution_ID
613 AND APHD.Invoice_Payment_ID = P_Invoice_Payment_ID
614 AND APH.Related_Event_ID = P_Related_Event_ID
615 AND APHD.Payment_History_ID = APH.Payment_History_ID
616 AND APH.Posted_Flag = 'Y' ---added for bug 7337949
617 AND Pay_Dist_Lookup_Code = 'DISCOUNT';
618
619 RETURN NVL(l_discount_sum,0);
620
621 END Get_Casc_Bank_Curr_Disc_Sum;
622
623
624
625 -------------------------------------------------------------------------------
626 -- Procedure Get_Pay_Sum
627 -- This procedure gets the sum of the payment amount from the payment history
628 -- distributions for the given invoice distribution
629 -- Modified history
630 -- 1. for bug 5570002, modify the condition of APH.posted_flag to "Y"
631 --------------------------------------------------------------------------------
632 PROCEDURE Get_Pay_Sum
636 ,P_Inv_Dist_Sum OUT NOCOPY NUMBER
633 (P_Invoice_Distribution_ID IN NUMBER
634 ,P_Transaction_Type IN VARCHAR2
635 ,P_Payment_Sum OUT NOCOPY NUMBER
637 ,P_Bank_Curr_Sum OUT NOCOPY NUMBER
638 ,P_Calling_Sequence IN VARCHAR2
639 ) IS
640
641 l_curr_calling_sequence VARCHAR2(2000);
642 l_pay_sum NUMBER;
643 l_inv_dist_sum NUMBER;
644 l_bank_curr_sum NUMBER;
645
646 BEGIN
647
648 l_curr_calling_sequence := 'AP_ACCOUNTING_PAY_PKG.Get_Pay_Sum<- ' ||
649 P_Calling_Sequence;
650
651 IF (P_Transaction_Type IN ('PAYMENT CLEARED', 'PAYMENT CLEARING ADJUSTED')) THEN
652
653 SELECT SUM(APHD.Amount),
654 SUM(APHD.Invoice_Dist_Amount),
655 SUM(APHD.Bank_Curr_Amount)
656 INTO l_pay_sum,
657 l_inv_dist_sum,
658 l_bank_curr_sum
659 FROM AP_Payment_Hist_Dists APHD,
660 AP_Payment_History_All APH
661 WHERE APHD.Invoice_Distribution_ID = p_invoice_distribution_id
662 AND APHD.Pay_Dist_Lookup_Code IN ('CASH', 'DISCOUNT', 'AWT')
663 AND NVL(APH.Posted_Flag, 'N') = 'Y'
664 AND APH.Payment_History_ID = APHD.Payment_History_ID
665 AND APH.Transaction_Type IN ('PAYMENT CLEARING', 'PAYMENT UNCLEARING',
666 'PAYMENT CLEARING ADJUSTED');
667
668
669 ELSIF (P_Transaction_Type IN ('PAYMENT MATURED', 'PAYMENT MATURITY ADJUSTED')) THEN
670
671 SELECT SUM(APHD.Amount),
672 SUM(APHD.Invoice_Dist_Amount),
673 SUM(APHD.Bank_Curr_Amount)
674 INTO l_pay_sum,
675 l_inv_dist_sum,
676 l_bank_curr_sum
677 FROM AP_Payment_Hist_Dists APHD,
678 AP_Payment_History_All APH
679 WHERE APHD.Invoice_Distribution_ID = p_invoice_distribution_id
680 AND APHD.Pay_Dist_Lookup_Code IN ('CASH', 'DISCOUNT')
681 AND NVL(APH.Posted_Flag, 'N') = 'Y'
682 AND APH.Payment_History_ID = APHD.Payment_History_ID
683 AND APH.Transaction_Type IN ('PAYMENT MATURITY', 'PAYMENT MATURITY REVERSED',
684 'PAYMENT MATURITY ADJUSTED');
685
686 ELSE
687
688 SELECT SUM(APHD.Amount),
689 SUM(APHD.Invoice_Dist_Amount),
690 SUM(APHD.Bank_Curr_Amount)
691 INTO l_pay_sum,
692 l_inv_dist_sum,
693 l_bank_curr_sum
694 FROM AP_Payment_Hist_Dists APHD,
695 AP_Payment_History_All APH
696 WHERE APHD.Invoice_Distribution_ID = p_invoice_distribution_id
697 AND APHD.Pay_Dist_Lookup_Code IN ('CASH', 'DISCOUNT')
698 AND NVL(APH.Posted_Flag, 'N') = 'Y'
699 AND APH.Payment_History_ID = APHD.Payment_History_ID
700 AND APH.Transaction_Type IN ('PAYMENT CREATED', 'PAYMENT CANCELLED', 'PAYMENT ADJUSTED',
701 'MANUAL PAYMENT ADJUSTED', 'UPGRADED MANUAL PMT ADJUSTED',
702 'REFUND RECORDED',
703 'REFUND ADJUSTED', 'REFUND CANCELLED');
704 END IF;
705
706 p_payment_sum := NVL(l_pay_sum,0);
707 p_inv_dist_sum := NVL(l_inv_dist_sum,0);
708 p_bank_curr_sum := NVL(l_bank_curr_sum,0);
709
710 EXCEPTION
711
712 WHEN OTHERS THEN
713 IF (SQLCODE <> -20001) THEN
714 FND_MESSAGE.SET_NAME('SQLAP','AP_DEBUG');
715 FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
716 FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE', l_curr_calling_sequence);
717 END IF;
718 APP_EXCEPTION.RAISE_EXCEPTION;
719
720 END Get_Pay_Sum;
721
722
723 -------------------------------------------------------------------------------
724 -- Function Get_Prepay_Sum
725 -- This function gets the sum of the prepaid amount from the prepay appl payment
726 -- distributions for the given invoice distribution
727 --
728 --------------------------------------------------------------------------------
729 FUNCTION Get_Prepay_Sum
730 (P_Invoice_Distribution_ID IN NUMBER
731 ,P_Calling_Sequence IN VARCHAR2
732 ) RETURN NUMBER IS
733
734 l_curr_calling_sequence VARCHAR2(2000);
735 l_prepay_sum NUMBER;
736
737 BEGIN
738
739 l_curr_calling_sequence := 'AP_ACCOUNTING_PAY_PKG.Get_Prepay_Sum<- ' ||
740 P_Calling_Sequence;
741
742
743 SELECT SUM(APAD.Amount)
744 INTO l_prepay_sum
745 FROM AP_Prepay_App_Dists APAD
746 WHERE APAD.Invoice_Distribution_ID = P_Invoice_Distribution_ID
747 AND APAD.Prepay_Dist_Lookup_Code IN ('PREPAY APPL', 'PREPAY APPL REC TAX',
748 'PREPAY APPL NONREC TAX', 'AWT',
749 'EXCHANGE RATE VARIANCE');
750
751 RETURN NVL(l_prepay_sum,0);
752
753 END Get_Prepay_Sum;
754
755
756 -------------------------------------------------------------------------------
757 -- Function Is_Final_Payment
758 -- Function to check if this payment is the final payment for the given
759 -- invoice.
763 -- The payment history transaction type is different from event type
760 -- bug 5623129 Note
761 -- 1.added more debug message
762 -- 2. P_Transaction_Type should match to event type.
764 -- 3. add AND APH.Posted_Flag = 'Y' to get accounted paid amount
765 --------------------------------------------------------------------------------
766 FUNCTION Is_Final_Payment
767 (P_Inv_Rec IN r_invoices_info
768 ,P_Payment_Amount IN NUMBER
769 ,P_Discount_Amount IN NUMBER
770 ,P_Prepay_Amount IN NUMBER
771 ,P_Transaction_Type IN VARCHAR2
772 ,P_calling_sequence IN VARCHAR2
773 ) RETURN BOOLEAN IS
774
775 l_paid_acctd_amt NUMBER;
776 l_prepaid_acctd_amt NUMBER;
777 l_total_paid_amt NUMBER;
778 l_total_prepaid_amt NUMBER;
779 l_final_payment BOOLEAN := FALSE;
780 l_curr_calling_sequence VARCHAR2(2000);
781
782 l_procedure_name CONSTANT VARCHAR2(30) := 'is_final_payment';
783 l_log_msg FND_LOG_MESSAGES.MESSAGE_TEXT%TYPE;
784
785
786 BEGIN
787
788
789 l_curr_calling_sequence := 'AP_ACCOUNTING_PAY_PKG.Is_Final_Payment<-' ||
790 P_Calling_Sequence;
791
792
793 /* We need to get the paid amount for a particular transaction type
794 as payment hist dists stores paid amounts for all types of
795 payment events. */
796
797
798
799 IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
800 l_log_msg := 'Begin of is_ainal_payment function call and passin parameters are' ||
801 'P_Payment_Amount=' || P_Payment_Amount ||
802 'P_Discount_Amount=' ||P_Discount_Amount ||
803 'P_Prepay_Amount =' || P_Prepay_Amount ||
804 'P_Transaction_Type =' || P_Transaction_Type;
805 FND_LOG.STRING(G_LEVEL_PROCEDURE, G_MODULE_NAME || l_procedure_name, l_log_msg);
806 END IF;
807
808
809 IF (P_Transaction_Type IN ('PAYMENT CLEARED')) THEN
810
811 /* Getting the sum of payment distributions to check if this is the final
812 payment */
813
814 -------------------------------------------------------------------------
815 -- bug 5570002
816 -- 1. Take out the Exchange rate variance consideration
817 -- Because for entered amount, it is 0 always
818 -- 2. comment out the "APH.posted_flag" <> 'N' and
819 -- later change to "APH.posted_flag" = 'Y'
820 -------------------------------------------------------------------------
821
822 SELECT SUM(--DECODE(APHD.Pay_Dist_Lookup_Code,
823 --'EXCHANGE RATE VARIANCE', -1 * APHD.Amount,
824 APHD.Amount)
825 INTO l_paid_acctd_amt
826 FROM AP_Payment_Hist_Dists APHD,
827 AP_Invoice_Distributions_All AID,
828 AP_Payment_History_All APH
829 WHERE AID.Invoice_ID = p_inv_rec.invoice_id
830 AND AID.Invoice_Distribution_ID = APHD.Invoice_Distribution_ID
831 AND APHD.Pay_Dist_Lookup_Code IN ('CASH', 'DISCOUNT', 'AWT')
832 AND APH.Posted_Flag = 'Y'
833 AND APH.Payment_History_ID = APHD.Payment_History_ID
834 AND APH.Transaction_Type IN ('PAYMENT CLEARING', 'PAYMENT UNCLEARING',
835 'PAYMENT CLEARING ADJUSTED');
836
837
838 IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
839 l_log_msg := 'transaction type is payment clearing and ' ||
840 'l_paid_acctd_amt=' || l_paid_acctd_amt;
841 FND_LOG.STRING(G_LEVEL_PROCEDURE, G_MODULE_NAME || l_procedure_name, l_log_msg);
842 END IF;
843
844 ELSIF (P_Transaction_Type IN ('PAYMENT MATURED')) THEN
845
846 /* Getting the sum of payment distributions to check if this is the final
847 payment */
848 SELECT SUM(--DECODE(APHD.Pay_Dist_Lookup_Code,
849 --'EXCHANGE RATE VARIANCE', -1 * APHD.Amount,
850 APHD.Amount)
851 INTO l_paid_acctd_amt
852 FROM AP_Payment_Hist_Dists APHD,
853 AP_Invoice_Distributions_All AID,
854 AP_Payment_History_All APH
855 WHERE AID.Invoice_ID = p_inv_rec.invoice_id
856 AND AID.Invoice_Distribution_ID = APHD.Invoice_Distribution_ID
857 AND APHD.Pay_Dist_Lookup_Code IN ('CASH', 'DISCOUNT', 'AWT')
858 AND APH.Posted_Flag = 'Y'
859 AND APH.Payment_History_ID = APHD.Payment_History_ID
860 AND APH.Transaction_Type IN ('PAYMENT MATURITY', 'PAYMENT MATURITY REVERSED',
861 'PAYMENT MATURITY ADJUSTED');
862
863 IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
864 l_log_msg := 'transaction type is payment matruity and ' ||
865 'l_paid_acctd_amt=' || l_paid_acctd_amt;
866 FND_LOG.STRING(G_LEVEL_PROCEDURE, G_MODULE_NAME || l_procedure_name, l_log_msg);
867 END IF;
868
869
870 ELSE
871
872 /* Getting the sum of payment distributions to check if this is the final
873 payment */
874 SELECT SUM(--DECODE(APHD.Pay_Dist_Lookup_Code,
875 --'EXCHANGE RATE VARIANCE', -1 * APHD.Amount,
876 APHD.Amount)
877 INTO l_paid_acctd_amt
881 WHERE AID.Invoice_ID = p_inv_rec.invoice_id
878 FROM AP_Payment_Hist_Dists APHD,
879 AP_Invoice_Distributions_All AID,
880 AP_Payment_History_All APH
882 AND AID.Invoice_Distribution_ID = APHD.Invoice_Distribution_ID
883 AND APHD.Pay_Dist_Lookup_Code IN ('CASH', 'DISCOUNT', 'AWT')
884 AND APH.Posted_Flag = 'Y'
885 AND APH.Payment_History_ID = APHD.Payment_History_ID
886 AND APH.Transaction_Type IN ('PAYMENT CREATED', 'PAYMENT CANCELLED', 'PAYMENT ADJUSTED',
887 'MANUAL PAYMENT ADJUSTED', 'UPGRADED MANUAL PMT ADJUSTED',
888 'REFUND RECORDED', 'REFUND ADJUSTED', 'REFUND CANCELLED');
889 IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
890 l_log_msg := 'transaction type is payment created or others ' ||
891 'l_paid_acctd_amt=' || l_paid_acctd_amt;
892 FND_LOG.STRING(G_LEVEL_PROCEDURE, G_MODULE_NAME || l_procedure_name, l_log_msg);
893 END IF;
894
895 END IF;
896
897
898 /* Get the total prepaid amount from the ap_prepay_app_dists table */
899 SELECT SUM(APAD.Amount)
900 INTO l_prepaid_acctd_amt
901 FROM AP_Prepay_App_Dists APAD,
902 AP_Invoice_Distributions_All AID
903 WHERE AID.Invoice_ID = p_inv_rec.invoice_id
904 AND AID.Invoice_Distribution_ID = APAD.Invoice_Distribution_ID
905 AND APAD.Prepay_Dist_Lookup_Code IN ('PREPAY APPL', 'PREPAY APPL REC TAX',
906 'PREPAY APPL NONREC TAX', 'AWT');
907
908
909 IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
910 l_log_msg := 'there is a prepay application and ' ||
911 'l_prepaid_acctd_amt =' || l_prepaid_acctd_amt;
912 FND_LOG.STRING(G_LEVEL_PROCEDURE, G_MODULE_NAME || l_procedure_name, l_log_msg);
913 END IF;
914
915
916 IF (p_inv_rec.invoice_currency_code <> p_inv_rec.payment_currency_code) THEN
917
918 l_total_prepaid_amt := GL_Currency_API.Convert_Amount(
919 p_inv_rec.invoice_currency_code,
920 p_inv_rec.payment_currency_code,
921 p_inv_rec.payment_cross_rate_date,
922 'EMU FIXED',
923 NVL(l_prepaid_acctd_amt,0)
924 + NVL(p_prepay_amount,0));
925
926 ELSE
927
928 l_total_prepaid_amt := NVL(l_prepaid_acctd_amt,0) + NVL(p_prepay_amount,0);
929
930 END IF;
931
932 l_total_paid_amt := NVL(l_paid_acctd_amt,0) + NVL(p_payment_amount,0)
933 + NVL(p_discount_amount,0);
934
935
936 IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
937 l_log_msg := 'Now total paid amount = l_paid_acctd_amt + p_payment_amount + p_discount_amount and' ||
938 ' l_total_paid_amt =' || l_total_paid_amt ||
939 'compare invoice amount either with ' ||
940 'p_inv_rec.pay_curr_invoice_amount' || p_inv_rec.pay_curr_invoice_amount ||
941 'p_inv_rec.invoice_amount' || p_inv_rec.invoice_amount;
942
943 FND_LOG.STRING(G_LEVEL_PROCEDURE, G_MODULE_NAME || l_procedure_name, l_log_msg);
944 END IF;
945
946
947 IF (NVL(p_inv_rec.pay_curr_invoice_amount, p_inv_rec.invoice_amount)
948 = l_total_paid_amt - l_total_prepaid_amt) THEN
949
950 l_final_payment := TRUE;
951
952 IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
953 l_log_msg := 'This is a final payment after comparison';
954 FND_LOG.STRING(G_LEVEL_PROCEDURE, G_MODULE_NAME || l_procedure_name, l_log_msg);
955 END IF;
956
957 END IF;
958
959 RETURN l_final_payment;
960
961 END Is_Final_Payment;
962
963 -------------------------------------------------------------------------------
964 -- FUNCTION Get_Base_Amount RETURN NUMBER
965 -- Converts the given amount to base amount depending on the exchange rate type
966
967 -- Parameters
968 ----------
969 -- Amount - Amount to convert
970 -- Currency_Code - Currency code to convert from
971 -- Base_Currency_Code - Currency Code to convert to
972 -- Exchange_Rate_Type - Type of exchange rate
973 -- Exchange_Rate_Date - Date the conversion is happening
974 -- Exchange_Rate - The Exchange rate between the two currencies
975 -- bug 5623129 note
976 -- 1. add more debug message
977 -------------------------------------------------------------------------------
978 FUNCTION Get_Base_Amount
979 (P_amount IN NUMBER
980 ,P_currency_code IN VARCHAR2
981 ,P_base_currency_code IN VARCHAR2
982 ,P_exchange_rate_type IN VARCHAR2
983 ,P_exchange_rate_date IN DATE
984 ,P_exchange_rate IN NUMBER
985 ,P_calling_sequence IN VARCHAR2
986 ) RETURN NUMBER IS
987
988 l_base_amount NUMBER := 0 ;
989 l_curr_calling_sequence VARCHAR2(2000);
990
991 l_procedure_name CONSTANT VARCHAR2(30) := 'Get_Base_Amount';
992 l_log_msg FND_LOG_MESSAGES.MESSAGE_TEXT%TYPE;
993
994 BEGIN
995
996 l_curr_calling_sequence := 'AP_ACCOUNTING_PAY_PKG.Get_Base_Amount<-'
997 || P_calling_sequence;
998
999
1000
1001 IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1002 l_log_msg := 'Begin of get_base_amount and parameters are' ||
1003 'p_amount=' || nvl(p_amount, 0) ||
1004 'P_currency_code =' || P_currency_code ||
1005 'P_base_currency_code =' || P_base_currency_code ||
1006 'P_exchange_rate_type =' || P_exchange_rate_type ||
1007 'P_exchange_rate_date =' || P_exchange_rate_date ||
1008 'P_exchange_rate =' || P_exchange_rate ;
1009 FND_LOG.STRING(G_LEVEL_PROCEDURE, G_MODULE_NAME || l_procedure_name, l_log_msg);
1010 END IF;
1011
1012 IF ( P_currency_code = P_base_currency_code ) THEN
1013
1014 IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1015 l_log_msg := 'base currency code = transaction currency code';
1016 FND_LOG.STRING(G_LEVEL_PROCEDURE, G_MODULE_NAME || l_procedure_name, l_log_msg);
1017
1018 END IF;
1019
1020 l_base_amount := AP_UTILITIES_PKG.AP_ROUND_CURRENCY(P_amount,
1021 P_base_currency_code);
1022
1023 ELSIF ( P_exchange_rate_type <> 'User'
1024 AND GL_Currency_API.Is_Fixed_Rate(P_currency_code,
1025 P_base_currency_code,
1026 P_exchange_rate_date) = 'Y' ) THEN
1027
1028 IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1029
1030 l_log_msg := 'exchange rate type is not user and it is a fixed rate';
1031 FND_LOG.STRING(G_LEVEL_PROCEDURE, G_MODULE_NAME || l_procedure_name, l_log_msg);
1032
1033 END IF;
1034
1035 l_base_amount := GL_Currency_API.Convert_Amount(P_currency_code,
1036 P_base_currency_code,
1037 P_exchange_rate_date,
1038 P_exchange_rate_type,
1039 P_amount) ;
1040 ELSE
1041
1042 IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
1043
1044 l_log_msg := 'not a fix rate, and not a same currency code';
1045 FND_LOG.STRING(G_LEVEL_PROCEDURE, G_MODULE_NAME || l_procedure_name, l_log_msg);
1046
1047 END IF;
1048
1049
1050 l_base_amount := AP_Utilities_Pkg.AP_Round_Currency
1051 (P_amount * NVL(P_exchange_rate, 1),
1052 P_base_currency_code) ;
1053
1054 END IF;
1055
1056 RETURN l_base_amount ;
1057
1058 EXCEPTION
1059 WHEN GL_CURRENCY_API.NO_RATE THEN
1060 RAISE_APPLICATION_ERROR(-20010, 'Could not find fixed rate between'
1061 || P_currency_code || ' and ' || P_base_currency_code || ' on '
1062 || to_char(P_exchange_rate_date) );
1063
1064 END Get_Base_Amount;
1065
1066
1067 END AP_ACCOUNTING_PAY_PKG;