DBA Data[Home] [Help]

PACKAGE BODY: APPS.AP_ACCOUNTING_PAY_PKG

Source


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;